From: <mie...@us...> - 2010-11-08 03:07:29
|
Revision: 6374 http://oorexx.svn.sourceforge.net/oorexx/?rev=6374&view=rev Author: miesfeld Date: 2010-11-08 03:07:22 +0000 (Mon, 08 Nov 2010) Log Message: ----------- ooDialog beta - alter build to build both versions of ooDialog Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.1.0/oodialog.mak sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodialog.mak sandbox/mark/ooDialog.beta/makeorx.bat sandbox/mark/ooDialog.beta/orxdb.bat sandbox/mark/ooDialog.beta/platform/windows/buildorx.bat Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.1.0/oodialog.mak =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.1.0/oodialog.mak 2010-11-08 01:04:21 UTC (rev 6373) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.1.0/oodialog.mak 2010-11-08 03:07:22 UTC (rev 6374) @@ -36,37 +36,37 @@ #/* */ #/*----------------------------------------------------------------------------*/ # NMAKE-compatible MAKE file for FNTEST* -all: $(OR_OUTDIR)\oodialog.dll +all: $(OR_OUTDIR_OOD410)\oodialog.dll !include "$(OR_LIBSRC)\ORXWIN32.MAK" C=cl OPTIONS= $(cflags_common) $(cflags_dll) $(OR_ORYXINCL) OR_LIB=$(OR_OUTDIR) -SOURCEF= $(OR_OUTDIR)\oovutil.obj $(OR_OUTDIR)\oovdata.obj $(OR_OUTDIR)\oovtext.obj $(OR_OUTDIR)\oovtools.obj \ - $(OR_OUTDIR)\oovmsg.obj $(OR_OUTDIR)\oovscrll.obj $(OR_OUTDIR)\oovdeskt.obj $(OR_OUTDIR)\oovdraw.obj \ - $(OR_OUTDIR)\oovuser.obj $(OR_OUTDIR)\oovbmp.obj $(OR_OUTDIR)\oovother.obj $(OR_OUTDIR)\menu.obj \ - $(OR_OUTDIR)\oodialog.res +SOURCEF= $(OR_OUTDIR_OOD410)\oovutil.obj $(OR_OUTDIR_OOD410)\oovdata.obj $(OR_OUTDIR_OOD410)\oovtext.obj $(OR_OUTDIR_OOD410)\oovtools.obj \ + $(OR_OUTDIR_OOD410)\oovmsg.obj $(OR_OUTDIR_OOD410)\oovscrll.obj $(OR_OUTDIR_OOD410)\oovdeskt.obj $(OR_OUTDIR_OOD410)\oovdraw.obj \ + $(OR_OUTDIR_OOD410)\oovuser.obj $(OR_OUTDIR_OOD410)\oovbmp.obj $(OR_OUTDIR_OOD410)\oovother.obj $(OR_OUTDIR_OOD410)\menu.obj \ + $(OR_OUTDIR_OOD410)\oodialog.res -.c{$(OR_OUTDIR)}.obj: - $(C) $(OPTIONS) /DINCL_32 -c $(@B).c /DCREATEDLL /Fo$(OR_OUTDIR)\$(@B).obj +.c{$(OR_OUTDIR_OOD410)}.obj: + $(C) $(OPTIONS) /DINCL_32 -c $(@B).c /DCREATEDLL /Fo$(OR_OUTDIR_OOD410)\$(@B).obj # # *** .cpp -> .obj rules # -{$(OR_OODIALOGSRC)}.cpp{$(OR_OUTDIR)}.obj: +{$(OR_OODIALOGSRC_410)}.cpp{$(OR_OUTDIR_OOD410)}.obj: @ECHO . @ECHO Compiling $(@B).cpp - $(OR_CC) $(cflags_common) $(cflags_dll) /DCREATEDLL /Fo$(OR_OUTDIR)\$(@B).obj $(OR_ORYXINCL) $(OR_OODIALOGSRC)\$(@B).cpp + $(OR_CC) $(cflags_common) $(cflags_dll) /DCREATEDLL /Fo$(OR_OUTDIR_OOD410)\$(@B).obj $(OR_ORYXINCL) $(OR_OODIALOGSRC_410)\$(@B).cpp -{$(OR_OODIALOGSRC)}.c{$(OR_OUTDIR)}.obj: +{$(OR_OODIALOGSRC_410)}.c{$(OR_OUTDIR_OOD410)}.obj: @ECHO . @ECHO Compiling $(@B).c - $(OR_CC) $(cflags_common) $(cflags_dll) /DCREATEDLL /Fo$(OR_OUTDIR)\$(@B).obj $(OR_ORYXINCL) $(OR_OODIALOGSRC)\$(@B).c + $(OR_CC) $(cflags_common) $(cflags_dll) /DCREATEDLL /Fo$(OR_OUTDIR_OOD410)\$(@B).obj $(OR_ORYXINCL) $(OR_OODIALOGSRC_410)\$(@B).c -$(OR_OUTDIR)\oodialog.dll: $(SOURCEF) +$(OR_OUTDIR_OOD410)\oodialog.dll: $(SOURCEF) $(OR_LINK) \ $(SOURCEF) \ $(lflags_common) $(lflags_dll) \ @@ -76,12 +76,12 @@ COMDLG32.LIB \ COMCTL32.LIB \ shlwapi.lib \ - -def:$(OR_OODIALOGSRC)\oovutil.def \ - -out:$(OR_OUTDIR)\$(@B).dll + -def:$(OR_OODIALOGSRC_410)\oovutil.def \ + -out:$(OR_OUTDIR_OOD410)\$(@B).dll # Update the version information block -$(OR_OUTDIR)\oodialog.res: $(OR_OODIALOGSRC)\oodialog.rc +$(OR_OUTDIR_OOD410)\oodialog.res: $(OR_OODIALOGSRC_410)\oodialog.rc @ECHO . @ECHO ResourceCompiling $(@B).res - $(rc) $(rcflags_common) /i $(OR_OODIALOGSRC) /i $(OR_WINKERNELSRC) -r -fo$(OR_OUTDIR)\$(@B).res $(OR_OODIALOGSRC)\$(@B).rc + $(rc) $(rcflags_common) /i $(OR_OODIALOGSRC_410) /i $(OR_WINKERNELSRC) -r -fo$(OR_OUTDIR_OOD410)\$(@B).res $(OR_OODIALOGSRC_410)\$(@B).rc Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodialog.mak =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodialog.mak 2010-11-08 01:04:21 UTC (rev 6373) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodialog.mak 2010-11-08 03:07:22 UTC (rev 6374) @@ -40,7 +40,7 @@ # Need to use /Gy when compiling to use /OPT:REF. # NMAKE-compatible MAKE file for ooDialog -all: $(OR_OUTDIR)\oodialog.dll +all: $(OR_OUTDIR_OOD420)\oodialog.dll !include "$(OR_LIBSRC)\ORXWIN32.MAK" C=cl @@ -48,71 +48,71 @@ OR_LIB=$(OR_OUTDIR) # All Source Files -SOURCEF= $(OR_OUTDIR)\APICommon.obj $(OR_OUTDIR)\oodBarControls.obj $(OR_OUTDIR)\oodBaseDialog.obj $(OR_OUTDIR)\oodBasicControls.obj \ - $(OR_OUTDIR)\oodCommon.obj $(OR_OUTDIR)\oodControl.obj $(OR_OUTDIR)\oodData.obj $(OR_OUTDIR)\oodDeviceGraphics.obj \ - $(OR_OUTDIR)\ooDialog.obj $(OR_OUTDIR)\oodMenu.obj $(OR_OUTDIR)\oodMessaging.obj $(OR_OUTDIR)\oodPackageEntry.obj \ - $(OR_OUTDIR)\oodPropertySheetDialog.obj $(OR_OUTDIR)\oodResources.obj $(OR_OUTDIR)\oodRoutines.obj $(OR_OUTDIR)\oodUser.obj \ - $(OR_OUTDIR)\oodUtilities.obj $(OR_OUTDIR)\oodViewControls.obj $(OR_OUTDIR)\oodialog.res +SOURCEF= $(OR_OUTDIR_OOD420)\APICommon.obj $(OR_OUTDIR_OOD420)\oodBarControls.obj $(OR_OUTDIR_OOD420)\oodBaseDialog.obj $(OR_OUTDIR_OOD420)\oodBasicControls.obj \ + $(OR_OUTDIR_OOD420)\oodCommon.obj $(OR_OUTDIR_OOD420)\oodControl.obj $(OR_OUTDIR_OOD420)\oodData.obj $(OR_OUTDIR_OOD420)\oodDeviceGraphics.obj \ + $(OR_OUTDIR_OOD420)\ooDialog.obj $(OR_OUTDIR_OOD420)\oodMenu.obj $(OR_OUTDIR_OOD420)\oodMessaging.obj $(OR_OUTDIR_OOD420)\oodPackageEntry.obj \ + $(OR_OUTDIR_OOD420)\oodPropertySheetDialog.obj $(OR_OUTDIR_OOD420)\oodResources.obj $(OR_OUTDIR_OOD420)\oodRoutines.obj $(OR_OUTDIR_OOD420)\oodUser.obj \ + $(OR_OUTDIR_OOD420)\oodUtilities.obj $(OR_OUTDIR_OOD420)\oodViewControls.obj $(OR_OUTDIR_OOD420)\oodialog.res # All Source files that include APICommon.hpp -APICOMMON_SOURCEF = $(OR_OUTDIR)\APICommon.obj $(OR_OUTDIR)\oodBaseDialog.obj $(OR_OUTDIR)\oodBasicControls.obj \ - $(OR_OUTDIR)\oodCommon.obj $(OR_OUTDIR)\oodControl.obj $(OR_OUTDIR)\oodData.obj \ - $(OR_OUTDIR)\oodDeviceGraphics.obj $(OR_OUTDIR)\ooDialog.obj $(OR_OUTDIR)\oodMenu.obj \ - $(OR_OUTDIR)\oodMessaging.obj $(OR_OUTDIR)\oodPropertySheetDialog.obj $(OR_OUTDIR)\oodRoutines.obj \ - $(OR_OUTDIR)\oodUser.obj $(OR_OUTDIR)\oodUtilities.obj $(OR_OUTDIR)\oodViewControls.obj +APICOMMON_SOURCEF = $(OR_OUTDIR_OOD420)\APICommon.obj $(OR_OUTDIR_OOD420)\oodBaseDialog.obj $(OR_OUTDIR_OOD420)\oodBasicControls.obj \ + $(OR_OUTDIR_OOD420)\oodCommon.obj $(OR_OUTDIR_OOD420)\oodControl.obj $(OR_OUTDIR_OOD420)\oodData.obj \ + $(OR_OUTDIR_OOD420)\oodDeviceGraphics.obj $(OR_OUTDIR_OOD420)\ooDialog.obj $(OR_OUTDIR_OOD420)\oodMenu.obj \ + $(OR_OUTDIR_OOD420)\oodMessaging.obj $(OR_OUTDIR_OOD420)\oodPropertySheetDialog.obj $(OR_OUTDIR_OOD420)\oodRoutines.obj \ + $(OR_OUTDIR_OOD420)\oodUser.obj $(OR_OUTDIR_OOD420)\oodUtilities.obj $(OR_OUTDIR_OOD420)\oodViewControls.obj # All Source files that include oodCommon.hpp -COMMON_SOURCEF = $(OR_OUTDIR)\oodBarControls.obj $(OR_OUTDIR)\oodBaseDialog.obj $(OR_OUTDIR)\oodBasicControls.obj \ - $(OR_OUTDIR)\oodCommon.obj $(OR_OUTDIR)\oodData.obj $(OR_OUTDIR)\oodDeviceGraphics.obj $(OR_OUTDIR)\oodMenu.obj \ - $(OR_OUTDIR)\oodMessaging.obj $(OR_OUTDIR)\oodPropertySheetDialog.obj $(OR_OUTDIR)\oodRoutines.obj \ - $(OR_OUTDIR)\oodUser.obj $(OR_OUTDIR)\oodUtilities.obj $(OR_OUTDIR)\oodViewControls.obj +COMMON_SOURCEF = $(OR_OUTDIR_OOD420)\oodBarControls.obj $(OR_OUTDIR_OOD420)\oodBaseDialog.obj $(OR_OUTDIR_OOD420)\oodBasicControls.obj \ + $(OR_OUTDIR_OOD420)\oodCommon.obj $(OR_OUTDIR_OOD420)\oodData.obj $(OR_OUTDIR_OOD420)\oodDeviceGraphics.obj $(OR_OUTDIR_OOD420)\oodMenu.obj \ + $(OR_OUTDIR_OOD420)\oodMessaging.obj $(OR_OUTDIR_OOD420)\oodPropertySheetDialog.obj $(OR_OUTDIR_OOD420)\oodRoutines.obj \ + $(OR_OUTDIR_OOD420)\oodUser.obj $(OR_OUTDIR_OOD420)\oodUtilities.obj $(OR_OUTDIR_OOD420)\oodViewControls.obj # All Source files that include oodDeviceGraphics.hpp -OODEVICECONTEXT_SOURCEF = $(OR_OUTDIR)\oodBaseDialog.obj $(OR_OUTDIR)\oodControl.cpp $(OR_OUTDIR)\ooDeviceGraphics.cpp \ - $(OR_OUTDIR)\ooDialog.cpp $(OR_OUTDIR)\oodRoutines.obj $(OR_OUTDIR)\oodMessaging.obj \ - $(OR_OUTDIR)\oodPropertySheetDialog.obj $(OR_OUTDIR)\oodUser.obj $(OR_OUTDIR)\oodUtilities.obj +OODEVICECONTEXT_SOURCEF = $(OR_OUTDIR_OOD420)\oodBaseDialog.obj $(OR_OUTDIR_OOD420)\oodControl.cpp $(OR_OUTDIR_OOD420)\ooDeviceGraphics.cpp \ + $(OR_OUTDIR_OOD420)\ooDialog.cpp $(OR_OUTDIR_OOD420)\oodRoutines.obj $(OR_OUTDIR_OOD420)\oodMessaging.obj \ + $(OR_OUTDIR_OOD420)\oodPropertySheetDialog.obj $(OR_OUTDIR_OOD420)\oodUser.obj $(OR_OUTDIR_OOD420)\oodUtilities.obj # All Source files that include oodData.hpp -OODDATA_SOURCEF = $(OR_OUTDIR)\oodBaseDialog.obj $(OR_OUTDIR)\ooDialog.cpp $(OR_OUTDIR)\oodData.obj $(OR_OUTDIR)\oodMessaging.obj \ - $(OR_OUTDIR)\oodPropertySheetDialog.obj $(OR_OUTDIR)\oodUser.obj +OODDATA_SOURCEF = $(OR_OUTDIR_OOD420)\oodBaseDialog.obj $(OR_OUTDIR_OOD420)\ooDialog.cpp $(OR_OUTDIR_OOD420)\oodData.obj $(OR_OUTDIR_OOD420)\oodMessaging.obj \ + $(OR_OUTDIR_OOD420)\oodPropertySheetDialog.obj $(OR_OUTDIR_OOD420)\oodUser.obj # All Source files that include oodControl.hpp -OODCONTROL_SOURCEF = $(OR_OUTDIR)\oodBarControls.obj $(OR_OUTDIR)\oodBaseDialog.obj $(OR_OUTDIR)\oodBasicControls.obj \ - $(OR_OUTDIR)\oodControl.obj $(OR_OUTDIR)\oodData.obj $(OR_OUTDIR)\ooDialog.cpp \ - $(OR_OUTDIR)\oodPropertySheetDialog.obj $(OR_OUTDIR)\oodUser.obj $(OR_OUTDIR)\oodViewControls.obj +OODCONTROL_SOURCEF = $(OR_OUTDIR_OOD420)\oodBarControls.obj $(OR_OUTDIR_OOD420)\oodBaseDialog.obj $(OR_OUTDIR_OOD420)\oodBasicControls.obj \ + $(OR_OUTDIR_OOD420)\oodControl.obj $(OR_OUTDIR_OOD420)\oodData.obj $(OR_OUTDIR_OOD420)\ooDialog.cpp \ + $(OR_OUTDIR_OOD420)\oodPropertySheetDialog.obj $(OR_OUTDIR_OOD420)\oodUser.obj $(OR_OUTDIR_OOD420)\oodViewControls.obj # All Source files that include oodMessaging.hpp -OODMESSAGING_SOURCEF = $(OR_OUTDIR)\oodBaseDialog.obj $(OR_OUTDIR)\oodControl.obj $(OR_OUTDIR)\oodDeviceGraphics.obj \ - $(OR_OUTDIR)\ooDialog.obj $(OR_OUTDIR)\oodMenu.obj $(OR_OUTDIR)\oodMessaging.obj \ - $(OR_OUTDIR)\oodPropertySheetDialog.obj $(OR_OUTDIR)\oodUser.obj +OODMESSAGING_SOURCEF = $(OR_OUTDIR_OOD420)\oodBaseDialog.obj $(OR_OUTDIR_OOD420)\oodControl.obj $(OR_OUTDIR_OOD420)\oodDeviceGraphics.obj \ + $(OR_OUTDIR_OOD420)\ooDialog.obj $(OR_OUTDIR_OOD420)\oodMenu.obj $(OR_OUTDIR_OOD420)\oodMessaging.obj \ + $(OR_OUTDIR_OOD420)\oodPropertySheetDialog.obj $(OR_OUTDIR_OOD420)\oodUser.obj # All Source files that include oodResources.hpp -OODRESOURCES_SOURCEF = $(OR_OUTDIR)\oodBasicControls.obj $(OR_OUTDIR)\oodPropertySheetDialog.obj $(OR_OUTDIR)\oodResources.obj \ - $(OR_OUTDIR)\oodViewControls.obj +OODRESOURCES_SOURCEF = $(OR_OUTDIR_OOD420)\oodBasicControls.obj $(OR_OUTDIR_OOD420)\oodPropertySheetDialog.obj $(OR_OUTDIR_OOD420)\oodResources.obj \ + $(OR_OUTDIR_OOD420)\oodViewControls.obj # All Source files that include oodUser.hpp -OODUSER_SOURCEF = $(OR_OUTDIR)\oodPropertySheetDialog.obj $(OR_OUTDIR)\oodUser.obj +OODUSER_SOURCEF = $(OR_OUTDIR_OOD420)\oodPropertySheetDialog.obj $(OR_OUTDIR_OOD420)\oodUser.obj -.c{$(OR_OUTDIR)}.obj: - $(C) $(OPTIONS) /DINCL_32 -c $(@B).c /Fo$(OR_OUTDIR)\$(@B).obj +.c{$(OR_OUTDIR_OOD420)}.obj: + $(C) $(OPTIONS) /DINCL_32 -c $(@B).c /Fo$(OR_OUTDIR_OOD420)\$(@B).obj # # *** .cpp -> .obj rules # -{$(OR_OODIALOGSRC)}.cpp{$(OR_OUTDIR)}.obj: +{$(OR_OODIALOGSRC_420)}.cpp{$(OR_OUTDIR_OOD420)}.obj: @ECHO . @ECHO Compiling $(@B).cpp - $(OR_CC) $(cflags_common) $(cflags_dll) /Fo$(OR_OUTDIR)\$(@B).obj $(OR_ORYXINCL) $(OR_OODIALOGSRC)\$(@B).cpp + $(OR_CC) $(cflags_common) $(cflags_dll) /Fo$(OR_OUTDIR_OOD420)\$(@B).obj $(OR_ORYXINCL) $(OR_OODIALOGSRC_420)\$(@B).cpp -{$(OR_OODIALOGSRC)}.c{$(OR_OUTDIR)}.obj: +{$(OR_OODIALOGSRC_420)}.c{$(OR_OUTDIR_OOD420)}.obj: @ECHO . @ECHO Compiling $(@B).c - $(OR_CC) $(cflags_common) $(cflags_dll) /Fo$(OR_OUTDIR)\$(@B).obj $(OR_ORYXINCL) $(OR_OODIALOGSRC)\$(@B).c + $(OR_CC) $(cflags_common) $(cflags_dll) /Fo$(OR_OUTDIR_OOD420)\$(@B).obj $(OR_ORYXINCL) $(OR_OODIALOGSRC_420)\$(@B).c -$(OR_OUTDIR)\oodialog.dll: $(SOURCEF) +$(OR_OUTDIR_OOD420)\oodialog.dll: $(SOURCEF) $(OR_LINK) \ $(SOURCEF) \ $(lflags_common) $(lflags_dll) \ @@ -122,15 +122,15 @@ COMDLG32.LIB \ COMCTL32.LIB \ shlwapi.lib \ - -def:$(OR_OODIALOGSRC)\ooDialog.def \ - -out:$(OR_OUTDIR)\$(@B).dll + -def:$(OR_OODIALOGSRC_420)\ooDialog.def \ + -out:$(OR_OUTDIR_OOD420)\$(@B).dll # Update the version information block -$(OR_OUTDIR)\oodialog.res: $(OR_OODIALOGSRC)\oodialog.rc +$(OR_OUTDIR_OOD420)\oodialog.res: $(OR_OODIALOGSRC_420)\oodialog.rc @ECHO . @ECHO ResourceCompiling $(@B).res - $(rc) $(rcflags_common) /i $(OR_OODIALOGSRC) /i $(OR_WINKERNELSRC) -r -fo$(OR_OUTDIR)\$(@B).res $(OR_OODIALOGSRC)\$(@B).rc + $(rc) $(rcflags_common) /i $(OR_OODIALOGSRC_420) /i $(OR_WINKERNELSRC) -r -fo$(OR_OUTDIR_OOD420)\$(@B).res $(OR_OODIALOGSRC_420)\$(@B).rc # Recompile everything if the make file changes. $(SOURCEF) : oodialog.mak @@ -145,4 +145,4 @@ $(OODMESSAGING_SOURCEF) : oodMessaging.hpp $(OODRESOURCES_SOURCEF) : oodResources.hpp $(OODUSER_SOURCEF) : oodUser.hpp -$(OR_OUTDIR)\oodMenu.obj : oodMenu.hpp +$(OR_OUTDIR_OOD420)\oodMenu.obj : oodMenu.hpp Modified: sandbox/mark/ooDialog.beta/makeorx.bat =================================================================== --- sandbox/mark/ooDialog.beta/makeorx.bat 2010-11-08 01:04:21 UTC (rev 6373) +++ sandbox/mark/ooDialog.beta/makeorx.bat 2010-11-08 03:07:22 UTC (rev 6374) @@ -96,11 +96,13 @@ SET BLDRELEASE=1 GOTO STARTBUILD -REM If we are building BOTH, we need to reset the log name and API output -REM directory. We just set them unconditionally. +REM If we are building BOTH, we need to reset the log name and the output +REM directories. We just set them unconditionally. :BLDDEBUG set OR_OUTDIR=%SRC_DRV%%SRC_DIR%\Win32Dbg -set OR_OUTDIR_API=%SRC_DRV%%SRC_DIR%\Win32Dbg\api +set OR_OUTDIR_API=%OR_OUTDIR%\api +set OR_OUTDIR_OOD410=%OR_OUTDIR%\oodialog410 +set OR_OUTDIR_OOD420=%OR_OUTDIR%\oodialog420 set OR_ERRLOG=%OR_OUTDIR%\Win32Dbg.log if %USELOGFILE% EQU 1 ( @@ -497,9 +499,13 @@ IF %DOPACKAGE% == 1 SET PACKAGE_REL=1 set OR_OUTDIR=%SRC_DRV%%SRC_DIR%\Win32Rel set OR_OUTDIR_API=%OR_OUTDIR%\api +set OR_OUTDIR_OOD410=%OR_OUTDIR%\oodialog410 +set OR_OUTDIR_OOD420=%OR_OUTDIR%\oodialog420 set OR_ERRLOG=%OR_OUTDIR%\Win32Rel.log if not exist %OR_OUTDIR% md %OR_OUTDIR% if not exist %OR_OUTDIR_API% md %OR_OUTDIR_API% +if not exist %OR_OUTDIR_OOD410% md %OR_OUTDIR_OOD410% +if not exist %OR_OUTDIR_OOD420% md %OR_OUTDIR_OOD420% GOTO BUILD_CHECK_DONE @@ -514,18 +520,21 @@ IF %DOPACKAGE% == 1 SET PACKAGE_DBG=1 set OR_OUTDIR=%SRC_DRV%%SRC_DIR%\Win32Dbg set OR_OUTDIR_API=%OR_OUTDIR%\api +set OR_OUTDIR_OOD410=%OR_OUTDIR%\oodialog410 +set OR_OUTDIR_OOD420=%OR_OUTDIR%\oodialog420 set OR_ERRLOG=%OR_OUTDIR%\Win32Dbg.log if not exist %OR_OUTDIR% md %OR_OUTDIR% if not exist %OR_OUTDIR_API% md %OR_OUTDIR_API% +if not exist %OR_OUTDIR_OOD410% md %OR_OUTDIR_OOD410% +if not exist %OR_OUTDIR_OOD420% md %OR_OUTDIR_OOD420% GOTO BUILD_CHECK_DONE REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - REM :DOBOTH REM Sets the variables to do both non-debug and debug builds. We will create -REM all output directories if needed. The log name and API out directory -REM will first be used in the non-debug build. Then corrected in the debug -REM build. +REM all output directories if needed. The log name and out directories will +REM first be used in the non-debug build. Then corrected in the debug build. REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - :DO_BOTH set MKNODEBUG=1 @@ -536,11 +545,15 @@ ) set OR_OUTDIR=%SRC_DRV%%SRC_DIR%\Win32Rel set OR_OUTDIR_API=%OR_OUTDIR%\api +set OR_OUTDIR_OOD410=%OR_OUTDIR%\oodialog410 +set OR_OUTDIR_OOD420=%OR_OUTDIR%\oodialog420 set OR_ERRLOG=%SRC_DRV%%SRC_DIR%\Win32Rel\Win32Rel.log if not exist %OR_OUTDIR% md %OR_OUTDIR% if not exist %OR_OUTDIR_API% md %OR_OUTDIR_API% if not exist %SRC_DRV%%SRC_DIR%\Win32Dbg md %SRC_DRV%%SRC_DIR%\Win32Dbg if not exist %SRC_DRV%%SRC_DIR%\Win32Dbg\api md %SRC_DRV%%SRC_DIR%\Win32Dbg\api +if not exist %SRC_DRV%%SRC_DIR%\Win32Dbg\oodialog410 md %SRC_DRV%%SRC_DIR%\Win32Dbg\oodialog410 +if not exist %SRC_DRV%%SRC_DIR%\Win32Dbg\oodialog420 md %SRC_DRV%%SRC_DIR%\Win32Dbg\oodialog420 GOTO BUILD_CHECK_DONE Modified: sandbox/mark/ooDialog.beta/orxdb.bat =================================================================== --- sandbox/mark/ooDialog.beta/orxdb.bat 2010-11-08 01:04:21 UTC (rev 6373) +++ sandbox/mark/ooDialog.beta/orxdb.bat 2010-11-08 03:07:22 UTC (rev 6374) @@ -42,18 +42,8 @@ IF %OR_ERRLOG%x == x GOTO HELP_LOG REM -REM set up the directories for the generated files +REM set up the varialbles for the source file direcotories REM -REM set OR_OUTDIR=O:\TESTDIR -if (%1)==(1) goto release -set OR_OUTDIR=%SRC_DRV%%SRC_DIR%\Win32Dbg -goto cont -:release -set OR_OUTDIR=%SRC_DRV%%SRC_DIR%\Win32Rel -:cont -REM -REM set up the directories for the source files -REM set OR_REXXUTILSRC=%SRC_DRV%%SRC_DIR%\rexutils set XPLATFORM=%OR_REXXUTILSRC%\windows set OR_MAINSRC=%SRC_DRV%%SRC_DIR% @@ -66,13 +56,17 @@ set OR_MESSAGESRC=%SRC_DRV%%SRC_DIR%\interpreter\messages set OR_WINKERNELSRC=%SRC_DRV%%SRC_DIR%\platform\windows set OR_REXXAPISRC=%SRC_DRV%%SRC_DIR%\rexxapi -set OR_OODIALOGSRC=%SRC_DRV%%SRC_DIR%\extensions\platform\windows\oodialog + +set OR_OODIALOGSRC_410=%SRC_DRV%%SRC_DIR%\extensions\platform\windows\oodialog.4.1.0 +set OR_OODIALOGSRC_420=%SRC_DRV%%SRC_DIR%\extensions\platform\windows\oodialog.4.2.0 +set OR_OODIALOGSAMPLES410=%SRC_DRV%%SRC_DIR%\samples\windows\oodialog.4.1.0 +set OR_OODIALOGSAMPLES420=%SRC_DRV%%SRC_DIR%\samples\windows\oodialog.4.2.0 + set OR_OLEOBJECTSRC=%SRC_DRV%%SRC_DIR%\extensions\platform\windows\ole set OR_ORXSCRIPTSRC=%SRC_DRV%%SRC_DIR%\extensions\platform\windows\orxscrpt set OR_REGEXPSRC=%SRC_DRV%%SRC_DIR%\extensions\rxregexp set OR_SAMPLESRC=%SRC_DRV%%SRC_DIR%\samples set OR_APISAMPLESRC=%SRC_DRV%%SRC_DIR%\samples\windows\api -set OR_OODIALOGSAMPLES=%SRC_DRV%%SRC_DIR%\samples\windows\oodialog set OR_UTILITIES=%SRC_DRV%%SRC_DIR%\utilities set OR_EXTENSIONS=%SRC_DRV%%SRC_DIR%\extensions set OR_HOSTEMUSRC=%OR_EXTENSIONS%\hostemu @@ -101,7 +95,7 @@ REM REM set up the directory search orders for the source include files REM -set OR_ORYXINCL=-I%OR_LIBSRC%\ -I%OR_COMMONSRC%\ -I%OR_COMMONPLATFORMSRC%\ -I%OR_APISRC%\ -I%OR_APIWINSRC%\ %OR_INTERPRETERINCL% -I%OR_WINKERNELSRC%\ -I%XPLATFORM% -I%OR_OODIALOGSRC%\ -I%OR_ORYXFSRC%\ -I%OR_OLEOBJECTSRC%\ -I%OR_ORXSCRIPTSRC%\ -I%OR_MESSAGESRC%\ -I%OR_HOSTEMUSRC%\ +set OR_ORYXINCL=-I%OR_LIBSRC%\ -I%OR_COMMONSRC%\ -I%OR_COMMONPLATFORMSRC%\ -I%OR_APISRC%\ -I%OR_APIWINSRC%\ %OR_INTERPRETERINCL% -I%OR_WINKERNELSRC%\ -I%XPLATFORM% -I%OR_ORYXFSRC%\ -I%OR_OLEOBJECTSRC%\ -I%OR_ORXSCRIPTSRC%\ -I%OR_MESSAGESRC%\ -I%OR_HOSTEMUSRC%\ set OR_ORYXRCINCL=-I%INTERPRETER_MESSAGES% REM REM set up the search order for the dependency list @@ -120,9 +114,7 @@ set NOCRTDLL=1 set REXXDEBUG=0 -REM create output directory -if not exist %OR_OUTDIR% md %OR_OUTDIR% - +REM create output ASM directory if needed IF NOT %MKASM%==1 GOTO :build if not exist %OR_OUTDIR%\ASM md %OR_OUTDIR%\ASM Modified: sandbox/mark/ooDialog.beta/platform/windows/buildorx.bat =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/buildorx.bat 2010-11-08 01:04:21 UTC (rev 6373) +++ sandbox/mark/ooDialog.beta/platform/windows/buildorx.bat 2010-11-08 03:07:22 UTC (rev 6374) @@ -169,17 +169,24 @@ REM *** oodialog REM -@ECHO Building OODIALOG.. -CD %OR_OODIALOGSRC% -IF %USELOGFILE% equ 1 ( NMAKE /F OODIALOG.MAK >>%OR_ERRLOG% 2>&1 ) else ( NMAKE /F OODIALOG.MAK ) +@ECHO Building ooDialog, both versions ... +CD %OR_OODIALOGSRC_410% +IF %USELOGFILE% equ 1 ( NMAKE /F oodialog.mak >>%OR_ERRLOG% 2>&1 ) else ( NMAKE /F oodialog.mak ) if ERRORLEVEL 1 goto error +CD %OR_OODIALOGSRC_420% +IF %USELOGFILE% equ 1 ( NMAKE /F oodialog.mak >>%OR_ERRLOG% 2>&1 ) else ( NMAKE /F oodialog.mak ) +if ERRORLEVEL 1 goto error -ECHO Building OODIALOG classes +ECHO Building ooDialog classes, both versions ... CD %OR_OUTDIR% -IF %USELOGFILE% equ 1 ( REXX %OR_OODIALOGSRC%\M_OODCLS.REX >>%OR_ERRLOG% 2>&1 ) else ( REXX %OR_OODIALOGSRC%\M_OODCLS.REX ) +IF %USELOGFILE% equ 1 ( REXX %OR_OODIALOGSRC_410%\M_OODCLS.REX >>%OR_ERRLOG% 2>&1 ) else ( REXX %OR_OODIALOGSRC_410%\M_OODCLS.REX ) if ERRORLEVEL 1 goto error +move ood*cls %OR_OUTDIR_OOD410% +IF %USELOGFILE% equ 1 ( REXX %OR_OODIALOGSRC_420%\build_ooDialog_cls.rex >>%OR_ERRLOG% 2>&1 ) else ( REXX %OR_OODIALOGSRC_420%\build_ooDialog_cls.rex ) +if ERRORLEVEL 1 goto error +move ood*cls %OR_OUTDIR_OOD420% CD %SRC_DIR% @@ -221,10 +228,14 @@ if ERRORLEVEL 1 goto error @ECHO Building OODialog Samples.. -CD %OR_OODIALOGSAMPLES%\res +CD %OR_OODIALOGSAMPLES410%\res IF %USELOGFILE% equ 1 ( NMAKE /F res.mak >>%OR_ERRLOG% 2>&1 ) else ( NMAKE /F res.mak ) if ERRORLEVEL 1 goto error +CD %OR_OODIALOGSAMPLES420%\res +IF %USELOGFILE% equ 1 ( NMAKE /F res.mak >>%OR_ERRLOG% 2>&1 ) else ( NMAKE /F res.mak ) +if ERRORLEVEL 1 goto error + goto arounderr :error This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-11-20 06:12:22
|
Revision: 6395 http://oorexx.svn.sourceforge.net/oorexx/?rev=6395&view=rev Author: miesfeld Date: 2010-11-20 06:12:16 +0000 (Sat, 20 Nov 2010) Log Message: ----------- Sync with 4.1.0 branch, up through r6386 Modified Paths: -------------- sandbox/mark/ooDialog.beta/configure.ac sandbox/mark/ooDialog.beta/extensions/rexxutil/platform/unix/rexxutil.cpp sandbox/mark/ooDialog.beta/samples/windows/Makefile.am Modified: sandbox/mark/ooDialog.beta/configure.ac =================================================================== --- sandbox/mark/ooDialog.beta/configure.ac 2010-11-17 17:14:36 UTC (rev 6394) +++ sandbox/mark/ooDialog.beta/configure.ac 2010-11-20 06:12:16 UTC (rev 6395) @@ -440,21 +440,21 @@ samples/windows/ole/adsi/Makefile samples/windows/ole/apps/Makefile samples/windows/ole/methinfo/Makefile - samples/windows/ole/oleinfo/Makefile samples/windows/ole/wmi/Makefile - samples/windows/ole/wmi/sysinfo/Makefile samples/windows/oodialog/Makefile samples/windows/oodialog/bmp/Makefile samples/windows/oodialog/examples/Makefile samples/windows/oodialog/examples/resources/Makefile + samples/windows/oodialog/oleinfo/Makefile samples/windows/oodialog/ooRexxTry/Makefile samples/windows/oodialog/ooRexxTry/doc/Makefile samples/windows/oodialog/rc/Makefile samples/windows/oodialog/res/Makefile + samples/windows/oodialog/sysinfo/Makefile samples/windows/oodialog/tutorial/Makefile samples/windows/oodialog/wav/Makefile + samples/windows/oodialog/winsystem/Makefile samples/windows/rexutils/Makefile - samples/windows/winsystem/Makefile samples/windows/wsh/Makefile xsl.sh platform/unix/oorexx-config Modified: sandbox/mark/ooDialog.beta/extensions/rexxutil/platform/unix/rexxutil.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/rexxutil/platform/unix/rexxutil.cpp 2010-11-17 17:14:36 UTC (rev 6394) +++ sandbox/mark/ooDialog.beta/extensions/rexxutil/platform/unix/rexxutil.cpp 2010-11-20 06:12:16 UTC (rev 6395) @@ -588,14 +588,14 @@ const char *file, /* file name */ GetFileData *filedata ) /* global file information */ { - struct stat finfo; /* file information */ + struct stat64 finfo; /* file information */ char * endptr = NULL; /* end of buffer pointer */ /* try to open the file */ if((filedata->handle = fopen(file,"r")) == NULL) return (1); /* return failure */ /* retrieve the file size */ - if((stat(file,&finfo) == -1)||(!finfo.st_size)){ + if((stat64(file,&finfo) == -1)||(!finfo.st_size)){ fclose(filedata->handle); /* close the file */ return (1); /* and quit */ } @@ -1103,7 +1103,7 @@ /* make full spec */ sprintf(full_path, "%s%s", path, dir_entry->d_name); - lstat(full_path, finfo); /* read the info about it */ + lstat(full_path, finfo); /* read the info about it */ if(S_ISDIR(finfo->st_mode)){ /* if it is a directory */ @@ -3995,7 +3995,7 @@ size_t RexxEntry SysGetFileDateTime(const char *name, size_t numargs, CONSTRXSTRING args[], const char *queuename, PRXSTRING retstr) { - struct stat buf; + struct stat64 buf; struct tm *newtime; const char *dir_buf = NULL; /* full directory path */ bool fOk = true; @@ -4015,7 +4015,7 @@ dir_buf = args[0].strptr; } - if (stat(dir_buf, &buf) < 0) + if (stat64(dir_buf, &buf) < 0) { fOk = false; } @@ -4081,7 +4081,7 @@ struct utimbuf timebuf; struct tm *newtime; time_t ltime; - struct stat buf; + struct stat64 buf; const char *dir_buf = NULL; bool alloc_Flag = false; @@ -4104,7 +4104,7 @@ dir_buf = args[0].strptr; } - if (stat(dir_buf, &buf) < 0) + if (stat64(dir_buf, &buf) < 0) { fOk = false; } @@ -4741,9 +4741,9 @@ RexxRoutine1(logical_t, SysIsFile, CSTRING, filename) { - struct stat finfo; /* return buf for the finfo */ + struct stat64 finfo; /* return buf for the finfo */ - int rc = stat(filename, &finfo); /* read the info about it */ + int rc = stat64(filename, &finfo); /* read the info about it */ // check the flag settings for a regular file return rc == 0 && (S_ISREG(finfo.st_mode) || S_ISBLK(finfo.st_mode)); } @@ -4760,9 +4760,9 @@ RexxRoutine1(logical_t, SysIsFileDirectory, CSTRING, filename) { - struct stat finfo; /* return buf for the finfo */ + struct stat64 finfo; /* return buf for the finfo */ - int rc = stat(filename, &finfo); /* read the info about it */ + int rc = stat64(filename, &finfo); /* read the info about it */ return rc == 0 && S_ISDIR(finfo.st_mode); } @@ -4778,9 +4778,9 @@ RexxRoutine1(logical_t, SysIsFileLink, CSTRING, filename) { - struct stat finfo; /* return buf for the finfo */ + struct stat64 finfo; /* return buf for the finfo */ - int rc = lstat(filename, &finfo); /* read the info about it */ + int rc = lstat64(filename, &finfo); /* read the info about it */ return rc == 0 && S_ISLNK(finfo.st_mode); } @@ -4796,9 +4796,9 @@ RexxRoutine1(logical_t, SysFileExists, CSTRING, filename) { - struct stat finfo; /* return buf for the finfo */ + struct stat64 finfo; /* return buf for the finfo */ - return stat(filename, &finfo) == 0; /* read the info about it */ + return stat64(filename, &finfo) == 0; /* read the info about it */ } Modified: sandbox/mark/ooDialog.beta/samples/windows/Makefile.am =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/Makefile.am 2010-11-17 17:14:36 UTC (rev 6394) +++ sandbox/mark/ooDialog.beta/samples/windows/Makefile.am 2010-11-20 06:12:16 UTC (rev 6395) @@ -42,5 +42,5 @@ MAINTAINERCLEANFILES = Makefile.in *~ -EXTRA_DIST = 0ReadMe.first +#EXTRA_DIST = 0ReadMe.first This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-11-21 21:39:50
|
Revision: 6405 http://oorexx.svn.sourceforge.net/oorexx/?rev=6405&view=rev Author: miesfeld Date: 2010-11-21 21:39:43 +0000 (Sun, 21 Nov 2010) Log Message: ----------- Fix up installer scripts so the packaging step in the build works. Add packaging the ooDialog beta installer and switchOODialog to the build. Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodialog.mak sandbox/mark/ooDialog.beta/makeorx.bat sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi sandbox/mark/ooDialog.beta/platform/windows/install/oorexx.nsi sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog.nsi Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodialog.mak =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodialog.mak 2010-11-21 00:27:28 UTC (rev 6404) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodialog.mak 2010-11-21 21:39:43 UTC (rev 6405) @@ -43,6 +43,10 @@ all: $(OR_OUTDIR_OOD420)\oodialog.dll !include "$(OR_LIBSRC)\ORXWIN32.MAK" + +# Change the ooRexx version definition for this ooDialog. +VER_DEF = -DORX_VER=$(ORX_MAJOR) -DORX_REL=2 -DORX_MOD=$(ORX_MOD_LVL) -DOOREXX_BLD=$(ORX_BLD_LVL) -DOOREXX_COPY_YEAR=\"$(ORX_COPY_YEAR)\" + C=cl OPTIONS= $(cflags_common) $(cflags_dll) $(OR_ORYXINCL) OR_LIB=$(OR_OUTDIR) Modified: sandbox/mark/ooDialog.beta/makeorx.bat =================================================================== --- sandbox/mark/ooDialog.beta/makeorx.bat 2010-11-21 00:27:28 UTC (rev 6404) +++ sandbox/mark/ooDialog.beta/makeorx.bat 2010-11-21 21:39:43 UTC (rev 6405) @@ -133,10 +133,13 @@ IF %DOPACKAGE% == 0 GOTO ENV_VARS_CLEANUP IF %MAJOR_NUM%x == x GOTO SET_FAILED -SET NODOTS=%MAJOR_NUM%%MINOR_NUM%%LVL_NUM%_%BLD_NUM% +SET NODOTS=%MAJOR_NUM%%MINOR_NUM%%LVL_NUM% SET DOTVER=/DVERSION=%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM% +SET OODDOTVER=/DVERSION=%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM% +SET SHORTDOTVER=/DSHORTVERSION=%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM% SET NODOTVER=/DNODOTVER=%NODOTS% SET SRCDIR=/DSRCDIR=%SRC_DRV%%SRC_DIR% +SET SWITCHEXE=/DEXEFILE=switchOODialog if %CPU% == X86 ( SET CPUNAME=x86_32 ) else ( @@ -149,12 +152,29 @@ SET BINDIR=/DBINDIR=%SRC_DRV%%SRC_DIR%\Win32Dbg cd platform\windows\install -makensis %DOTVER% %NODOTVER% %SRCDIR% %BINDIR% %CPUDEF% oorexx.nsi +REM Make the ooRexx installer. +makensis %DOTVER% %NODOTVER% %SHORTDOTVER% %SRCDIR% %BINDIR% %CPUDEF% oorexx.nsi + +REM Make switchOODialog and the ooDialog installer. switchOODialog must be +REM built first +makensis %OODDOTVER% %NODOTVER% %SRCDIR% %BINDIR% switchOODialog.nsi +makensis %OODDOTVER% %NODOTVER% %SRCDIR% %SWITCHEXE% %CPUDEF% ooDialogBeta.nsi + REM Rename the deug package so it is not overwritten if the release package -REM is created. -ren ooRexx%NODOTS%-%CPUNAME%.exe ooRexx%NODOTS%-%CPUNAME%-debug.exe -move ooRexx%NODOTS%-%CPUNAME%-debug.exe ..\..\..\ +REM is created. The NSIS scripts names the package: +REM "${SHORTNAME}-${VERSION}.${CPU}.exe" +ren ooRexx-%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM%.%CPUNAME%.exe ooRexx-%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM%.%CPUNAME%-debug.exe + +move ooRexx-%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM%.%CPUNAME%-debug.exe ..\..\..\ + +REM Do the same thing with the ooDialog beta package. The NSIS scripts names +REM the package: +REM "ooDialog-${VERSION}-${CPU}.exe" +ren ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%.exe ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%-debug.exe + +move ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%-debug.exe ..\..\..\ + cd ..\..\..\ REM If not making the release version skip to environment variables clean up. @@ -163,8 +183,17 @@ :PACKAGE_RELEASE SET BINDIR=/DBINDIR=%SRC_DRV%%SRC_DIR%\Win32Rel cd platform\windows\install -makensis %DOTVER% %NODOTVER% %SRCDIR% %BINDIR% %CPUDEF% oorexx.nsi -move ooRexx%NODOTS%-%CPUNAME%.exe ..\..\..\ + +REM Make the ooRexx installer. +makensis %DOTVER% %NODOTVER% %SHORTDOTVER% %SRCDIR% %BINDIR% %CPUDEF% oorexx.nsi + +REM Make switchOODialog and the ooDialog installer. switchOODialog must be +REM built first +makensis %OODDOTVER% %NODOTVER% %SRCDIR% %BINDIR% switchOODialog.nsi +makensis %OODDOTVER% %NODOTVER% %SRCDIR% %SWITCHEXE% %CPUDEF% ooDialogBeta.nsi + +move ooRexx-%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM%.%CPUNAME%.exe ..\..\..\ +move ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%.exe ..\..\..\ cd ..\..\..\ :ENV_VARS_CLEANUP @@ -177,7 +206,9 @@ SET BLD_NUM= SET NODOTS= SET DOTVER= +SET SHORTDOTVER= SET NODOTVER= +SET SWITCHEXE= SET SRCDIR= SET BINDIR= SET CPUNAME= Modified: sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi 2010-11-21 00:27:28 UTC (rev 6404) +++ sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi 2010-11-21 21:39:43 UTC (rev 6405) @@ -38,21 +38,21 @@ /** * ooDialogBeta.nsi * - * This is a basic NSIS install program, used to install switchOODialog. + * This is a basic NSIS install program, used to install ooDialog 4.2.0 beta. * - * switchOODialog is the executable used to switch between versions of ooDialog + * It also installs switchOODialog. switchOODialog is an executable used to + * switch between the 4.2.0 and 4.1.0 versions of ooDialog. * - * * Run as: - * makensis /DVERSION=x.x /DNODOTVER=xx /DEXEFILE=xxx /DCPU=xxx ooDialogBeta.nsi + * makensis /DVERSION=x.x.x.x /DNODOTVER=xxx /DSRCDIR=y /DEXEFILE=xxx /DCPU=xxx ooDialogBeta.nsi * eg - * makensis /DVERSION=4.2.0 /DNODOTVER=420 /DEXEFILE=switchOODialog /DCPU=x86_64 ooDialogBeta.nsi + * makensis /DVERSION=4.2.0.6367 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog /DCPU=x86_32 ooDialogBeta.nsi + * * Note: * ooDialogBeta.nsi must be in the current directory. */ - ;=============================================================================== ;Configuration ;=============================================================================== @@ -85,6 +85,7 @@ Name "ooDialog Beta ${VERSION}" OutFile "ooDialog-${VERSION}-${CPU}.exe" ShowInstdetails show + ShowUninstDetails show SetOverwrite on SetPluginUnload alwaysoff RequestExecutionLevel admin @@ -106,7 +107,6 @@ !define MUI_ABORTWARNING !define MUI_UNINSTALLER - !define MUI_UNCONFIRMPAGE !define MUI_UNFINISHPAGE_NOAUTOCLOSE ;-------------------------------- @@ -116,14 +116,14 @@ * installation directory. This makes the uninstall location equivalent to * the install location. */ - Var RegVal_installedLocation ; location of uninstall program found in registry - Var RegVal_installedVersion ; Version / level of uninstaller program. This only exists at 410 or greater + Var RegVal_installedLocation ; location of ooRexx uninstall program found in registry + Var RegVal_installedVersion ; Version / level of ooRexx uninstaller program. This only exists at 410 or greater Var IsAdminUser ; is the installer being run by an admin: true / false Var SwitchOODialogQualifiedName ; The fully qualified switchOODialog file name. - Var RegVal_startMenuFolder - Var RegVal_ourUninstallLocation - Var RegVal_ourUninstallString + Var RegVal_startMenuFolder ; location of, possible, alternate start menu folder + Var RegVal_ourUninstallLocation ; location of ooDialog beta uninstall program + Var RegVal_ourUninstallString ; ooDialog beta uninstall program ;-------------------------------- ;Pages @@ -133,6 +133,9 @@ !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH + !insertmacro MUI_UNPAGE_WELCOME + !insertmacro MUI_UNPAGE_INSTFILES + !insertmacro MUI_UNPAGE_FINISH ;-------------------------------- ;Languages @@ -148,12 +151,14 @@ DetailPrint "********** Installing Switch ooDialog program **********" DetailPrint "" + ; If found, we silently uninstall any existing switch ooDialog. ${If} $RegVal_ourUninstallString != "" DetailPrint "Found old ooDialog beta, cleaning up." ExecWait '$RegVal_ourUninstallString /S _?=$RegVal_ourUninstallLocation' $0 DetailPrint "" ${Endif} + ; Only 1 file is installed. SetOutPath "$INSTDIR" File "${InstallFile}" @@ -182,11 +187,13 @@ ; Then on uninstall, we check for a recorded name and delete that folder. ${If} ${FileExists} "$SMPROGRAMS\${REXXLONGNAME}" DetailPrint "Creating Switch ooDialog short cut in ${REXXLONGNAME} Start Menu folder" - CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" "${InstallFile}" + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" '"$SwitchOODialogQualifiedName"' ; Need to double quote. + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 ${Else} DetailPrint "Creating Switch ooDialog short cut in ${LONGNAME} Start Menu folder" CreateDirectory "$SMPROGRAMS\${LONGNAME}" - CreateShortCut "$SMPROGRAMS\${LONGNAME}\Switch ooDialog.lnk" "${InstallFile}" + CreateShortCut "$SMPROGRAMS\${LONGNAME}\Switch ooDialog.lnk" '"$SwitchOODialogQualifiedName"' ; Need to double quote. + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 WriteRegStr HKLM "Software\${SHORTNAME}" "StartMenuFolder" "$SMPROGRAMS\${LONGNAME}" ${Endif} @@ -209,8 +216,6 @@ * ooRexx needs to be at least 4.1.0. Since 4.1.0 was the first version where * the UninstallVersion was used, we only need to check if that registry entry * is the empty string or not. - * - * */ Function .onInit @@ -230,7 +235,7 @@ version 4.1.0, must be installed prior to the$\n\ installation of ${LONGNAME}.$\n$\n\ The installer is aborting." - Quit + Abort ${endif} StrCpy $INSTDIR $RegVal_installedLocation @@ -264,6 +269,7 @@ DetailPrint "Removing Start Menu items." ${If} $RegVal_startMenuFolder == "" Delete "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" + Delete "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" ${Else} RMDir /r $RegVal_startMenuFolder ${Endif} Modified: sandbox/mark/ooDialog.beta/platform/windows/install/oorexx.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/oorexx.nsi 2010-11-21 00:27:28 UTC (rev 6404) +++ sandbox/mark/ooDialog.beta/platform/windows/install/oorexx.nsi 2010-11-21 21:39:43 UTC (rev 6405) @@ -7,9 +7,9 @@ ; ooRexxProcess.dll -> http://sourceforge.net/projects/oorexx/files/ under oorexx-buildutils ; ; Run as: -; makensis /DVERSION=x.x /DNODOTVER=xx /DSRCDIR=xxx /DBINDIR=xxx /DCPU=xxx oorexx.nsi +; makensis /DVERSION=x.x.x.y /DSHORTVERSION=x.x.x /DNODOTVER=xx /DSRCDIR=xxx /DBINDIR=xxx /DCPU=xxx oorexx.nsi ; eg -; makensis /DVERSION=4.0.0 /DNODOTVER=400 /DSRCDIR=d:\oorexx\oorexx /DBINDIR=d:\oorexx\oorexx\win32rel /DCPU=x64 oorexx.nsi +; makensis /DVERSION=4.1.0.6367 /DSHORTVERSION=4.1.0 /DNODOTVER=410 /DSRCDIR=d:\oorexx\oorexx /DBINDIR=d:\oorexx\oorexx\win32rel /DCPU=x64 oorexx.nsi ; Note: ; oorexx.nsi MUST be in the current directory. @@ -28,6 +28,11 @@ !define DefRexxPawsExt ".rexp" !define DefRexxPawsFType "RexxPaws" +; The ooDialog packaged with the build +!Define ooDialogBinDir "${BINDIR}\oodialog${NODOTVER}" +!define ooDialogSrcDir "${SRCDIR}\extensions\platform\windows\oodialog.${SHORTVERSION}" +!Define ooDialogSamplesDir "${SRCDIR}\samples\windows\oodialog.${SHORTVERSION}" + Name "${LONGNAME} ${VERSION}" !include "MUI2.nsh" @@ -104,7 +109,7 @@ ;Configuration ;General - OutFile "${SHORTNAME}${NODOTVER}-${CPU}.exe" + OutFile "${SHORTNAME}-${VERSION}.${CPU}.exe" ShowInstdetails show ShowUninstDetails show SetOverwrite on @@ -290,7 +295,7 @@ ${File} "${BINDIR}\" "rxsock.dll" ${File} "${BINDIR}\" "rxregexp.dll" ${File} "${BINDIR}\" "rxwinsys.dll" - ${File} "${BINDIR}\" "oodialog.dll" + ${File} "${ooDialogBinDir}\" "oodialog.dll" ${File} "${BINDIR}\" "orexxole.dll" ${File} "${BINDIR}\" "hostemu.dll" ; CLASS files... @@ -303,14 +308,14 @@ ${File} "${BINDIR}\" "rxftp.cls" ${File} "${BINDIR}\" "csvStream.cls" ${File} "${BINDIR}\" "orexxole.cls" - ${File} "${BINDIR}\" "oodialog.cls" - ${File} "${BINDIR}\" "oodwin32.cls" - ${File} "${BINDIR}\" "oodplain.cls" + ${File} "${ooDialogBinDir}\" "oodialog.cls" + ${File} "${ooDialogBinDir}\" "oodwin32.cls" + ${File} "${ooDialogBinDir}\" "oodplain.cls" ; rexxtry is technically a sample, but it is heavily used, so add it to ; the executables. The same thing for the GUI version. ${File} "${SRCDIR}\samples\" "rexxtry.rex" - ${File} "${SRCDIR}\samples\windows\oodialog\ooRexxTry\" "ooRexxTry.rex" + ${File} "${ooDialogSamplesDir}\ooRexxTry\" "ooRexxTry.rex" ; Other files... ${File} "${SRCDIR}\platform\windows\" "rexx.ico" @@ -520,93 +525,93 @@ ; ${SetOutPath} $INSTDIR\samples\oodialog ; Distribution files... - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "oodialog.ico" - ${File} "${SRCDIR}\samples\windows\oodialog\" "*.rex" - ${File} "${SRCDIR}\samples\windows\oodialog\" "*.inp" - ${File} "${SRCDIR}\samples\windows\oodialog\" "*.ico" + ${File} "${ooDialogSrcDir}\" "oodialog.ico" + ${File} "${ooDialogSamplesDir}\" "*.rex" + ${File} "${ooDialogSamplesDir}\" "*.inp" + ${File} "${ooDialogSamplesDir}\" "*.ico" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\bmp ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\bmp\" "*.bmp" + ${File} "${ooDialogSamplesDir}\bmp\" "*.bmp" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\examples ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\examples\" "*.rex" - ${File} "${SRCDIR}\samples\windows\oodialog\examples\" "*.txt" + ${File} "${ooDialogSamplesDir}\examples\" "*.rex" + ${File} "${ooDialogSamplesDir}\examples\" "*.txt" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\examples\resources ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\examples\resources\" "*.bmp" - ${File} "${SRCDIR}\samples\windows\oodialog\examples\resources\" "*.h" - ${File} "${SRCDIR}\samples\windows\oodialog\examples\resources\" "*.rc" + ${File} "${ooDialogSamplesDir}\examples\resources\" "*.bmp" + ${File} "${ooDialogSamplesDir}\examples\resources\" "*.h" + ${File} "${ooDialogSamplesDir}\examples\resources\" "*.rc" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\oleinfo ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\oleinfo\" "*.rex" - ${File} "${SRCDIR}\samples\windows\oodialog\oleinfo\" "*.txt" - ${File} "${SRCDIR}\samples\windows\oodialog\oleinfo\" "*.bmp" - ${File} "${SRCDIR}\samples\windows\oodialog\oleinfo\" "*.rc" + ${File} "${ooDialogSamplesDir}\oleinfo\" "*.rex" + ${File} "${ooDialogSamplesDir}\oleinfo\" "*.txt" + ${File} "${ooDialogSamplesDir}\oleinfo\" "*.bmp" + ${File} "${ooDialogSamplesDir}\oleinfo\" "*.rc" ${SetOutPath} $INSTDIR\samples\oodialog\ooRexxTry ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\ooRexxTry\" "ooRexxTry.rex" + ${File} "${ooDialogSamplesDir}\ooRexxTry\" "ooRexxTry.rex" ${SetOutPath} $INSTDIR\samples\oodialog\ooRexxTry\doc ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\ooRexxTry\doc\" "ooRexxTry.pdf" + ${File} "${ooDialogSamplesDir}\ooRexxTry\doc\" "ooRexxTry.pdf" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\rc ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\rc\" "*.rc" + ${File} "${ooDialogSamplesDir}\rc\" "*.rc" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\res ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\res\" "*.res" - ${File} "${SRCDIR}\samples\windows\oodialog\res\" "*.dll" + ${File} "${ooDialogSamplesDir}\res\" "*.res" + ${File} "${ooDialogSamplesDir}\res\" "*.dll" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\sysinfo ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\sysinfo\" "*.rex" - ${File} "${SRCDIR}\samples\windows\oodialog\sysinfo\" "*.rc" + ${File} "${ooDialogSamplesDir}\sysinfo\" "*.rex" + ${File} "${ooDialogSamplesDir}\sysinfo\" "*.rc" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\source ; Distribution files... - ${File} "${BINDIR}\" "oodialog.cls" - ${File} "${BINDIR}\" "oodwin32.cls" - ${File} "${BINDIR}\" "oodplain.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "advctrl.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "anibuttn.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "basedlg.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "build.rex" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "catdlg.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "dialog.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "dlgext.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "dyndlg.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "makedll.bat" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "msgext.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "oodutils.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "plbdlg.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "pludlg.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "propsht.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "resdlg.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "stddlg.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "stdext.cls" - ${File} "${SRCDIR}\extensions\platform\windows\oodialog\" "userdlg.cls" + ${File} "${ooDialogBinDir}\" "oodialog.cls" + ${File} "${ooDialogBinDir}\" "oodwin32.cls" + ${File} "${ooDialogBinDir}\" "oodplain.cls" + ${File} "${ooDialogSrcDir}\" "advctrl.cls" + ${File} "${ooDialogSrcDir}\" "anibuttn.cls" + ${File} "${ooDialogSrcDir}\" "basedlg.cls" + ${File} "${ooDialogSrcDir}\" "build.rex" + ${File} "${ooDialogSrcDir}\" "catdlg.cls" + ${File} "${ooDialogSrcDir}\" "dialog.cls" + ${File} "${ooDialogSrcDir}\" "dlgext.cls" + ${File} "${ooDialogSrcDir}\" "dyndlg.cls" + ${File} "${ooDialogSrcDir}\" "makedll.bat" + ${File} "${ooDialogSrcDir}\" "msgext.cls" + ${File} "${ooDialogSrcDir}\" "oodutils.cls" + ${File} "${ooDialogSrcDir}\" "plbdlg.cls" + ${File} "${ooDialogSrcDir}\" "pludlg.cls" + ${File} "${ooDialogSrcDir}\" "propsht.cls" + ${File} "${ooDialogSrcDir}\" "resdlg.cls" + ${File} "${ooDialogSrcDir}\" "stddlg.cls" + ${File} "${ooDialogSrcDir}\" "stdext.cls" + ${File} "${ooDialogSrcDir}\" "userdlg.cls" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\tutorial ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\tutorial\" "*.rex" - ${File} "${SRCDIR}\samples\windows\oodialog\tutorial\" "*.bmp" - ${File} "${SRCDIR}\samples\windows\oodialog\tutorial\" "*.rc" + ${File} "${ooDialogSamplesDir}\tutorial\" "*.rex" + ${File} "${ooDialogSamplesDir}\tutorial\" "*.bmp" + ${File} "${ooDialogSamplesDir}\tutorial\" "*.rc" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\wav ; Distribution files... - ${File} "${SRCDIR}\samples\windows\oodialog\wav\" "*.wav" - ${File} "${SRCDIR}\samples\windows\oodialog\wav\" "*.txt" + ${File} "${ooDialogSamplesDir}\wav\" "*.wav" + ${File} "${ooDialogSamplesDir}\wav\" "*.txt" ; Set output path to the installation directory. ${SetOutPath} $INSTDIR\samples\oodialog\winsystem - ${File} "${SRCDIR}\samples\windows\oodialog\winsystem\" "*.rex" - ${File} "${SRCDIR}\samples\windows\oodialog\winsystem\" "*.rc" - ${File} "${SRCDIR}\samples\windows\oodialog\winsystem\" "*.h" - ${File} "${SRCDIR}\samples\windows\oodialog\winsystem\" "*.frm" + ${File} "${ooDialogSamplesDir}\winsystem\" "*.rex" + ${File} "${ooDialogSamplesDir}\winsystem\" "*.rc" + ${File} "${ooDialogSamplesDir}\winsystem\" "*.h" + ${File} "${ooDialogSamplesDir}\winsystem\" "*.frm" ; Create start menu shortcuts SetOutPath $INSTDIR\samples\oodialog ${CreateDirectory} "$SMPROGRAMS\${LONGNAME}\${SHORTNAME} Samples\ooDialog" @@ -733,7 +738,7 @@ ${File} "${SRCDIR}\doc\" "rexxextensions.pdf" ${File} "${SRCDIR}\doc\" "unixextensions.pdf" ${File} "${SRCDIR}\doc\" "winextensions.pdf" - ${File} "${SRCDIR}\samples\windows\oodialog\ooRexxTry\doc\" "ooRexxTry.pdf" + ${File} "${ooDialogSamplesDir}\ooRexxTry\doc\" "ooRexxTry.pdf" ; Create start menu shortcuts CreateShortCut "$SMPROGRAMS\${LONGNAME}\Documentation\ooRexx Reference.lnk" "$INSTDIR\doc\rexxref.pdf" "" "$INSTDIR\doc\rexxref.pdf" 0 Modified: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog.nsi 2010-11-21 00:27:28 UTC (rev 6404) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog.nsi 2010-11-21 21:39:43 UTC (rev 6405) @@ -52,17 +52,28 @@ * all files in the switch-to version. * * One basic problem that can happen is if the user has an ooDialog program - * running or the ooDialog PDF doc open. This will prevent the install by - * overwrite from working for oodial0g.dll and / or oodialog.pdf. There is - * no way to fix that, that I know of. The advice to the user will be to - * close things and rerun switchOODialog. + * running or the ooDialog PDF doc open. This will prevent the installer from + * overwriting oodialg.dll and / or oodialog.pdf. To prevent this, we first + * try to delete oodialog.pdf and oodialog.dll and abort the install if the + * delete fails. * * The other problem would be if the user uninstalls ooRexx completely without - * first uninstalling ooDialog beta. Some + * first uninstalling ooDialog beta. Some switch ooDialog stuff may not get + * cleaned up. + * + * switchOODialog can take several arguments + * + * switchOODialog /F=<version> Force version. <version> Must be 410 or 420 + * + * switchOODialog /V Show the installer + * By default, switchOODialog is invisible. + * This is useful for debugging. + * + * switchOODialog /I Displays the current ooDialog version in + * effect. */ - ;=============================================================================== ;Configuration ;=============================================================================== @@ -73,8 +84,13 @@ !define SHORTNAME "ooDialogSwitch" ; Must be in sync with the ooDialogBeta SHORTNAME !define LONGNAME "ooDialog ${VERSION} (beta)" + !Define BinDir410 "${BINDIR}\oodialog410" + !Define BinDir420 "${BINDIR}\oodialog420" !define SrcDir410 "${SRCDIR}\extensions\platform\windows\oodialog.4.1.0" - !define SrcDir420 "${SRCDIR}\extensions\platform\windows\oodialog.4.1.0" + !define SrcDir420 "${SRCDIR}\extensions\platform\windows\oodialog.4.2.0" + !Define SamplesDir410 "${SRCDIR}\samples\windows\oodialog.4.1.0" + !Define SamplesDir420 "${SRCDIR}\samples\windows\oodialog.4.2.0" + ;-------------------------------- ;Includes @@ -89,7 +105,7 @@ Name "Switch ooDialog" OutFile "switchOODialog.exe" - ShowInstdetails hide + ShowInstdetails show SetOverwrite on SetPluginUnload alwaysoff RequestExecutionLevel admin @@ -111,24 +127,16 @@ Var CurrentVersion ; The current ooDialog version, read from the registry Var NewVersion ; The version of ooDialog to switch to. - Var BinDir420 - Var BinDir410 - Var SamplesDir420 - Var SamplesDir410 - Var SrcDir420 - Var SrcDir410 - ;-------------------------------- ; Languages !insertmacro MUI_LANGUAGE "English" ;-------------------------------- -; Pages We do not need any pages because we use SetSilent in .onInit +; Pages. Even though we usually do not show any pages, the INSTFILES page is +; usefull for debugging. The /V option will let us see the page. - !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_INSTFILES - !insertmacro MUI_PAGE_FINISH ;=============================================================================== @@ -138,15 +146,282 @@ ;Section "Dummy Section" SecDummy Section doSwitch + Call PrintSwitchInfo + + Call CheckForProblems + + ; Set the installation directory: SetOutPath "$INSTDIR" - DetailPrint "NewVersion is: $NewVersion CurrentVersion is: $CurrentVersion" + DetailPrint "" + + Call RemoveFiles + ${If} $NewVersion == 420 - Delete AppIcon2.ico + DetailPrint "********** ooDialog 4.2.0 Framework **********" + File "${BinDir420}\oodialog.dll" + File "${BinDir420}\ooDialog.cls" + File "${BinDir420}\oodPlain.cls" + File "${BinDir420}\oodWin32.cls" + DetailPrint "" + + DetailPrint "********** ooDialog 4.2.0 Documentation **********" + ; Set the installation directory: + SetOutPath $INSTDIR\doc + ; Add the files ... + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" + DetailPrint "" + + DetailPrint "********** ooDialog 4.2.0 Samples **********" + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog + ; Add the files ... File "${SrcDir420}\oodialog.ico" + File "${SamplesDir420}\*.rex" + File "${SamplesDir420}\*.h" + File "${SamplesDir420}\*.inp" + File "${SamplesDir420}\*.ico" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\bmp + ; Add the files ... + File "${SamplesDir420}\bmp\*.bmp" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\controls + ; Add the files ... + File "${SamplesDir420}\controls\*.rex" + File "${SamplesDir420}\controls\*.rc" + File "${SamplesDir420}\controls\*.h" + File "${SamplesDir420}\controls\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples + ; Add the files ... + File "${SamplesDir420}\examples\*.rex" + File "${SamplesDir420}\examples\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples\resources + ; Add the files ... + File "${SamplesDir420}\examples\resources\*.bmp" + File "${SamplesDir420}\examples\resources\*.h" + File "${SamplesDir420}\examples\resources\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\oleinfo + ; Add the files ... + File "${SamplesDir420}\oleinfo\*.rex" + File "${SamplesDir420}\oleinfo\*.txt" + File "${SamplesDir420}\oleinfo\*.bmp" + File "${SamplesDir420}\oleinfo\*.rc" + + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry + ; Add the files ... + File "${SamplesDir420}\ooRexxTry\ooRexxTry.rex" + + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry\doc + ; Add the files ... + File "${SamplesDir420}\ooRexxTry\doc\ooRexxTry.pdf" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\rc + ; Add the files ... + File "${SamplesDir420}\rc\*.rc" + File "${SamplesDir420}\rc\*.h" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\res + ; Add the files ... + File "${SamplesDir420}\res\*.res" + File "${SamplesDir420}\res\*.dll" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\simple + ; Add the files ... + File "${SamplesDir420}\simple\*.rex" + File "${SamplesDir420}\simple\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\sysinfo + ; Add the files ... + File "${SamplesDir420}\sysinfo\*.rex" + File "${SamplesDir420}\sysinfo\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\source + ; Add the files ... + File "${BinDir420}\ooDialog.cls" + File "${BinDir420}\oodWin32.cls" + File "${BinDir420}\oodPlain.cls" + File "${SrcDir420}\0_READ_ME_FIRST.txt" + File "${SrcDir420}\build_ooDialog_cls.rex" + File "${SrcDir420}\AnimatedButton.cls" + File "${SrcDir420}\BaseDialog.cls" + File "${SrcDir420}\CategoryDialog.cls" + File "${SrcDir420}\ControlDialog.cls" + File "${SrcDir420}\DeprecatedClasses.cls" + File "${SrcDir420}\DialogControls.cls" + File "${SrcDir420}\DialogExtensions.cls" + File "${SrcDir420}\DynamicDialog.cls" + File "${SrcDir420}\EventNotification.cls" + File "${SrcDir420}\Menu.cls" + File "${SrcDir420}\PlainBaseDialog.cls" + File "${SrcDir420}\PropertySheet.cls" + File "${SrcDir420}\RcDialog.cls" + File "${SrcDir420}\ResDialog.cls" + File "${SrcDir420}\UserDialog.cls" + File "${SrcDir420}\UtilityClasses.cls" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\tutorial + ; Add the files ... + File "${SamplesDir420}\tutorial\*.rex" + File "${SamplesDir420}\tutorial\*.bmp" + File "${SamplesDir420}\tutorial\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\wav + ; Add the files ... + File "${SamplesDir420}\wav\*.wav" + File "${SamplesDir420}\wav\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\winsystem + File "${SamplesDir420}\winsystem\*.rex" + File "${SamplesDir420}\winsystem\*.rc" + File "${SamplesDir420}\winsystem\*.h" + File "${SamplesDir420}\winsystem\*.frm" + DetailPrint "" + + ; Record the ooDialog version now in effect: + DetailPrint "Recording ooDialog version now in effect: 4.2.0" WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "420" ${Else} - Delete oodialog.ico - File "${SrcDir420}\AppIcon2.ico" + DetailPrint "********** ooDialog 4.1.0 Framework **********" + File "${BinDir410}\oodialog.dll" + File "${BinDir410}\OODIALOG.CLS" + File "${BinDir410}\OODPLAIN.CLS" + File "${BinDir410}\OODWIN32.CLS" + DetailPrint "" + + DetailPrint "********** ooDialog 4.1.0 Documentation **********" + ; Set the installation directory: + SetOutPath $INSTDIR\doc + ; Add the files ... + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" + DetailPrint "" + + DetailPrint "********** ooDialog 4.1.0 Samples **********" + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog + ; Add the files ... + File "${SrcDir410}\oodialog.ico" + File "${SamplesDir410}\*.rex" + File "${SamplesDir410}\*.inp" + File "${SamplesDir410}\*.ico" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\bmp + ; Add the files ... + File "${SamplesDir410}\bmp\*.bmp" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples + ; Add the files ... + File "${SamplesDir410}\examples\*.rex" + File "${SamplesDir410}\examples\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples\resources + ; Add the files ... + File "${SamplesDir410}\examples\resources\*.bmp" + File "${SamplesDir410}\examples\resources\*.h" + File "${SamplesDir410}\examples\resources\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\oleinfo + ; Add the files ... + File "${SamplesDir410}\oleinfo\*.rex" + File "${SamplesDir410}\oleinfo\*.txt" + File "${SamplesDir410}\oleinfo\*.bmp" + File "${SamplesDir410}\oleinfo\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry + ; Add the files ... + File "${SamplesDir410}\ooRexxTry\ooRexxTry.rex" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry\doc + ; Add the files ... + File "${SamplesDir410}\ooRexxTry\doc\ooRexxTry.pdf" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\rc + ; Add the files ... + File "${SamplesDir410}\rc\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\res + ; Add the files ... + File "${SamplesDir410}\res\*.res" + File "${SamplesDir410}\res\*.dll" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\sysinfo + ; Add the files ... + File "${SamplesDir410}\sysinfo\*.rex" + File "${SamplesDir410}\sysinfo\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\source + ; Add the files ... + File "${BinDir410}\OODIALOG.CLS" + File "${BinDir410}\OODWIN32.CLS" + File "${BinDir410}\OODPLAIN.CLS" + File "${SrcDir410}\advctrl.cls" + File "${SrcDir410}\anibuttn.cls" + File "${SrcDir410}\basedlg.cls" + File "${SrcDir410}\build.rex" + File "${SrcDir410}\catdlg.cls" + File "${SrcDir410}\dialog.cls" + File "${SrcDir410}\dlgext.cls" + File "${SrcDir410}\dyndlg.cls" + File "${SrcDir410}\makedll.bat" + File "${SrcDir410}\msgext.cls" + File "${SrcDir410}\oodutils.cls" + File "${SrcDir410}\plbdlg.cls" + File "${SrcDir410}\pludlg.cls" + File "${SrcDir410}\propsht.cls" + File "${SrcDir410}\resdlg.cls" + File "${SrcDir410}\stddlg.cls" + File "${SrcDir410}\stdext.cls" + File "${SrcDir410}\userdlg.cls" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\tutorial + ; Add the files ... + File "${SamplesDir410}\tutorial\*.rex" + File "${SamplesDir410}\tutorial\*.bmp" + File "${SamplesDir410}\tutorial\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\wav + ; Add the files ... + File "${SamplesDir410}\wav\*.wav" + File "${SamplesDir410}\wav\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\winsystem + ; Add the files ... + File "${SamplesDir410}\winsystem\*.rex" + File "${SamplesDir410}\winsystem\*.rc" + File "${SamplesDir410}\winsystem\*.h" + File "${SamplesDir410}\winsystem\*.frm" + DetailPrint "" + + ; Record the ooDialog version now in effect: + DetailPrint "Recording ooDialog version now in effect: 4.1.0" WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "410" ${Endif} @@ -165,27 +440,55 @@ */ Function .onInit - /* Always silent */ - ;SetSilent silent + /* We read the current version key first so we can do an early abort for the + * /I option. + */ + ReadRegStr $CurrentVersion HKLM "Software\${SHORTNAME}" "CurrentVersion" + /* Check if the user just wants to know the ooDialog version in effect. */ + ${GetOptions} "$CMDLINE" "/I" $R0 + ${IfNot} ${Errors} + ${If} $CurrentVersion == 410 + MessageBox MB_OK "Current version of ooDialog in use: 4.1.0" + ${Else} + MessageBox MB_OK "Current version of ooDialog in use: 4.2.0" + ${EndIf} + Abort + ${Endif} + /* Check if the user is forcing the current version to something specific. */ ${GetOptions} "$CMDLINE" "/F=" $R0 StrCpy $ForceVersion $R0 - /* Be sure we are installed progperly */ - ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "InstallLocation" + /* Check if the user is forcing us to be visible. Usefull for debugging. + * This logic is a little convoluted. We check the command line for the + * presence of /V. If it is not there, the error flag is set, and we force + * the installer to silent mode. + */ + ClearErrors + ${GetOptions} "$CMDLINE" "/V" $R0 + ${If} ${Errors} + SetSilent silent + ClearErrors + ${Endif} + + /* Be sure we are installed properly. Note that the UnInstallLocation and the + * InstallLocation keys in the registry contain the same directory. But, the + * UnInstallLocation key has the directory unquoted and InstallLocation quotes + * the directory. For some reason, copying the quoted version drops the ':' + * out of the path, causing things to fail. + */ + ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" ${If} $RegVal_installedLocation == "" MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ "${LONGNAME} has not been installed properly.$\n$\n\ Please follow the guidelines published for using$\n\ Switch ooDialog, especially the instructions for$\n\ - installation." - + installation.$\n$\n\ + Aborting." Abort ${Endif} - MessageBox MB_OK "RegVal_installedLocation: $RegVal_installedLocation." - /* Be sure, if passed a /F arg, it is correct. */ ${If} $ForceVersion != "" ${If} $ForceVersion != 420 @@ -193,29 +496,22 @@ MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ "The /F argument of: '$ForceVersion' is not correct.$\n$\n\ Aborting." - Abort ${Endif} ${Endif} - ;StrCpy $INSTDIR "$RegVal_installedLocation" - StrCpy $INSTDIR "C:\home\Interpreters\Rexx\ooRexx" + StrCpy $INSTDIR "$RegVal_installedLocation" - StrCpy $BinDir410 "$BINDIR\oodialog410" - StrCpy $BinDir420 "$BINDIR\oodialog420" - StrCpy $SamplesDir410 "$SRCDIR\samples\windows\oodialog.4.1.0" - StrCpy $SamplesDir420 "$SRCDIR\samples\windows\oodialog.4.1.0" - + /* If the user did not force a version, the new version is the opposite of + * the current version. + */ ${if} $ForceVersion == "" - MessageBox MB_OK "INSTDIR: $INSTDIR User is NOT forcing version." - ReadRegStr $CurrentVersion HKLM "Software\${SHORTNAME}" "CurrentVersion" ${If} $CurrentVersion == 410 StrCpy $NewVersion 420 ${Else} StrCpy $NewVersion 410 ${Endif} ${else} - MessageBox MB_OK "User is forcing version to $ForceVersion." ${If} $ForceVersion == 410 StrCpy $NewVersion 410 StrCpy $CurrentVersion 420 @@ -227,4 +523,121 @@ FunctionEnd +/** CheckForProblems() + * + * If the ooDialog doc is open, it can not be overwritten and the switched to + * version will have the wrong doc. Or, if a Rexx ooDialog program is running + * oodialog.dll can not be overwritten, and the switched to version will not + * work. + * + * We check for this possible problem by trying to delete the files. If we + * can not, we abort, keeping the current version intact. + */ +Function CheckForProblems + ClearErrors + Delete $INSTDIR\doc\oodialog.pdf + ${If} ${Errors} + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "switchOODialog detected a problem with oodialog.pdf$\n$\n\ + You MUST close the ooDialog reference documentation and close$\n\ + any running ooDialog programs before executing the Switch$\n\ + ooDialog program.$\n$\n\ + Please close the ooDialog Method Reference documentation, and$\n\ + make sure no ooDialog programs are running.$\n$\n\ + switchOODialog is aborting." + Abort + ${EndIf} + + Delete $INSTDIR\oodialog.dll + ${If} ${Errors} + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "switchOODialog detected a problem with oodialog.dll$\n$\n\ + You MUST close any running ooDialog programs and close$\n\ + the ooDialog reference documentation before executing$\n\ + the Switch ooDialog program.$\n$\n\ + Please close any running ooDialog programs and make sure$\n\ + the ooDialog Method Reference documentation is closed.$\n$\n\ + switchOODialog is aborting." + + ; Restore the oodialog.pdf file deleted above. + SetOutPath $INSTDIR\doc + + ${If} $CurrentVersion == 420 + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" + ${Else} + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" + ${EndIf} + + Abort + ${EndIf} + +FunctionEnd + +/** PrintSwitchInfo() + * + * Print some info on what the switch is doing. This is used for debugging. + * This is never seen, unless the /V options is used. + */ +Function PrintSwitchInfo + + ${If} $NewVersion == 420 + DetailPrint "Current ooDialog Version is: 4.1.0" + DetailPrint "Switching to Version: 4.2.0" + DetailPrint "" + ${Else} + DetailPrint "Current ooDialog Version is: 4.2.0" + DetailPrint "Switching to Version: 4.1.0" + DetailPrint "" + ${Endif} + +FunctionEnd + +/** RemoveFiles() + * + * Deletes all the files in the current ooDialog version that are not present + * in the switch to version. + */ +Function RemoveFiles + + ${If} $NewVersion == 420 + DetailPrint "Removing files not present in ooDialog 4.2.0" + + RMDir /r $INSTDIR\samples\oodialog\source + Delete $INSTDIR\samples\oodialog\bmp\movie.bmp + Delete $INSTDIR\samples\oodialog\bmp\psdemolv.bmp + Delete $INSTDIR\samples\oodialog\bmp\psdemoTab.bmp + Delete $INSTDIR\samples\oodialog\bmp\psdemotv.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticket.bmp + Delete $INSTDIR\samples\oodialog\examples\readme.txt + Delete $INSTDIR\samples\oodialog\ooticket.rex + Delete $INSTDIR\samples\oodialog\propdemo.rex + Delete $INSTDIR\samples\oodialog\rc\movies.rc + Delete $INSTDIR\samples\oodialog\rc\propdemo.rc + Delete $INSTDIR\samples\oodialog\rc\ticket.rc + ${Else} + DetailPrint "Removing files not present in ooDialog 4.1.0" + + RMDir /r $INSTDIR\samples\oodialog\source + Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoListView.bmp + Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoTab.bmp + Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoTreeView.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardMovie.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardRexxLA.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTheater.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTicket.bmp + RMDir /r $INSTDIR\samples\oodialog\controls + Delete $INSTDIR\samples\oodialog\examples\ReadMe.txt + Delete $INSTDIR\samples\oodialog\ooDraw.h + Delete $INSTDIR\samples\oodialog\PropertySheetDemo.rex + Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.h + Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.rc + Delete $INSTDIR\samples\oodialog\rc\ticketWizard.h + Delete $INSTDIR\samples\oodialog\rc\ticketWizard.rc + RMDir /r $INSTDIR\samples\oodialog\simple + Delete $INSTDIR\samples\oodialog\ticketWizard.rex + ${Endif} + + DetailPrint "" + +FunctionEnd This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-11-22 05:34:11
|
Revision: 6410 http://oorexx.svn.sourceforge.net/oorexx/?rev=6410&view=rev Author: miesfeld Date: 2010-11-22 05:34:01 +0000 (Mon, 22 Nov 2010) Log Message: ----------- Add a version of ooDialog that is 3.2.0 with no changes. This is ooDialog after Rick's first merge from the sandbox, updated with a RexxPackageEntry to compile under 4.0.0 or later. It *should* behave exactly as ooDialog did under ooRexx 3.2.0. Modified Paths: -------------- sandbox/mark/ooDialog.beta/makeorx.bat sandbox/mark/ooDialog.beta/orxdb.bat sandbox/mark/ooDialog.beta/platform/windows/buildorx.bat sandbox/mark/ooDialog.beta/platform/windows/install/makeOnlyInList.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/oleinfo/help.txt sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/oleinfo/oleinfo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/sysinfo/sysinfo.rex Added Paths: ----------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/3dcheck.bmp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/AppIcon.ico sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/AppIcon2.ico sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/RcDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/advctrl.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/anibuttn.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/basedlg.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/build.rex sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/catdlg.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/dialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/dlgarea.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/dlgext.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/dyndlg.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/m_oodcls.rex sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/makedll.bat sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/msgext.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oodResources.h sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oodialog.ico sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oodialog.mak sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oodialog.rc sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oodutils.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovbmp.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdata.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdeskt.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdraw.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovmsg.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovother.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovscrll.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovtext.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovtools.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovuser.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.def sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.h sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/plbdlg.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/pludlg.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/propsht.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/resdlg.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/stddlg.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/stdext.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/tokenize.bat sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/userdlg.cls sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/GUI_Template.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/bigpiece.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/blank.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/blanks.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake1.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake10.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake11.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake2.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake3.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake4.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake5.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake6.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake7.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake8.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cake9.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/cakepiec.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/chihuahu.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/eleph2.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/fork.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/goat.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/handfkle.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/handfkri.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/handleft.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/handrite.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/horse.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/install.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/install2.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/kanguru.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/moose.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/movie.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/oodlist1.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/oodlist2.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/oodtree.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/phileat.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/phileat2.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/phileata.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/philouch.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/philphil.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/philslep.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/philtest.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/philwait.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/psdemolv.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/psdemotv.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/rhinoce.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2anim.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2arch.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2backg.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2input.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2jack.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2list.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2mov.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2philf.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2prog.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2prop.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2scroll.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2tree.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/s2walker.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/sealion.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/ticket.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/tiger.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/wlkfig1.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/wlkfig2.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/wlkfig3.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/wlkfig4.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/wlkfig5.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/wlkfig6.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/wlkfig7.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/bmp/wlkfig8.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/calculator.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/dlgAreaUDemo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/editrex.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/examples/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/examples/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/examples/fileNameDialog_demo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/examples/publicRoutines_demo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/examples/readme.txt sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/ftyperex.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oobandit.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oobmpvu.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oodlist.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oodpbar.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oodraw.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oodtree.inp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oodtree.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oodtreei.inp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oograph.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oopet.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oopet1.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oophil.ico sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oophil.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oostddlg.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oostdfct.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/ooticket.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oovideo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oowalk2.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/oowalker.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/propdemo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/calculator.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/exercise.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/ldvideo.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/movies.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/oodlist.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/oodpbar.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/oodtree.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/oopet.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/oophil1.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/oophil2.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/propdemo.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/sample.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/ticket.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/rc/walker.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/res/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/res/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/res/res.mak sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/sample.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/add.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/drawing1.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/drawing2.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/drawings.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/em_categ.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/em_categ.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/emp_mend.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/emp_menu.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe1.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe1.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe2.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe2.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe3.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe3.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe4.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe4.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe5.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe5.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe6.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe6.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe7.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe7.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe8.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe8.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/employe9.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/empvalid.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/logo.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/persdata.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/textscrl.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/tutorial/textscrl.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/byebye.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/cancel.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/clap.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/elephant.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/goat.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/gotcha.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/guess.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/help.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/horse.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/inst.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/jackpot.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/moose.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/nope.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/philcake.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/phileat.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/philhelp.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/philouch.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/philslep.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/philstop.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/philstrt.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/philwait.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/readme.txt sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/rhino.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/sample.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/sealion.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/start.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/take.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/tiger.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/whistle.wav sandbox/mark/ooDialog.beta/samples/windows/oodialog.3.2.0/wav/yourgood.wav Added: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/3dcheck.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/3dcheck.bmp ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/AppIcon.ico =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/AppIcon.ico ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/AppIcon2.ico =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/AppIcon2.ico ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/RcDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/RcDialog.cls (rev 0) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/RcDialog.cls 2010-11-22 05:34:01 UTC (rev 6410) @@ -0,0 +1,61 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2007 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/* Windows Dialog Interface for Open Object Rexx (ooRexx) + * + * Resource Script Dialog Class (RcDialog) + * + * Provides support for creating a dialog defined in a resource script file, + * (most commonly a *.rc file, but *.dlg is also common.) + */ +::requires "userdlg.cls" + +::class 'RcDialog' subclass UserDialog public + +::method init + use arg rcFile, idDlg, initData., includeFile, options = "", expected = 200 + + newArgs = .array~new(2) + if arg(3, 'E') then newArgs[1] = arg(3) + if arg(4, 'E') then newArgs[2] = arg(4) + forward class (super) arguments (newArgs) continue + if result <> 0 then return result + + self~initCode = self~load(rcFile, idDlg, options, expected) + +return self~initCode + Added: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/advctrl.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/advctrl.cls (rev 0) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/advctrl.cls 2010-11-22 05:34:01 UTC (rev 6410) @@ -0,0 +1,2075 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */ +/* Copyright (c) 2005-2006 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +/******************************************************************************/ +/* */ +/* Windows Dialog Interface for Object REXX */ +/* */ +/* Windows 32-bit Control Support and Dialog Control Classes */ +/* */ +/******************************************************************************/ + +::class 'AdvancedControls' Mixinclass Object public + + +::method GetControl unguarded private + use arg id, category, type + if Arg(1,'o') = 1 then return .Nil + select + when type = "ST" then class = .StaticControl + when type = "EL" then class = .EditControl + when type = "BUT" then class = .ButtonControl + when type = "RB" then class = .RadioButton + when type = "CH" then class = .CheckBox + when type = "LB" then class = .ListBox + when type = "CB" then class = .ComboBox + when type = "SB" then class = .ScrollBar + when type = "TC" then class = .TreeControl + when type = "LC" then class = .ListControl + when type = "PB" then class = .ProgressBar + when type = "SC" then class = .SliderControl + when type = "TAB" then class = .TabControl + otherwise return .Nil + end + ctrlobj = .Nil + if Arg(2,'o') = 1 then do + /* check if dialog is subclass of CategoryDialog */ + if self~HasMethod("!MarkAsCatDlg!") = 1 then + ctrlobj = class~new(self, id, self~catalog['category']) /* suppose active page is ment */ + else ctrlobj = class~new(self, id) + end + else ctrlobj = class~new(self, id, category) + if ctrlobj~hwnd = 0 then return .Nil; else return ctrlobj + +::method GetStaticControl unguarded + arr = Arg(1,"A") + arr[3] = "ST" + forward message "GetControl" Arguments (arr) + +::method GetEditControl unguarded + arr = Arg(1,"A") + arr[3] = "EL" + forward message "GetControl" Arguments (arr) + +::method GetButtonControl unguarded + arr = Arg(1,"A") + arr[3] = "BUT" + forward message "GetControl" Arguments (arr) + +::method GetRadioControl unguarded + arr = Arg(1,"A") + arr[3] = "RB" + forward message "GetControl" Arguments (arr) + +::method GetCheckControl unguarded + arr = Arg(1,"A") + arr[3] = "CH" + forward message "GetControl" Arguments (arr) + +::method GetListBox unguarded + arr = Arg(1,"A") + arr[3] = "LB" + forward message "GetControl" Arguments (arr) + +::method GetComboBox unguarded + arr = Arg(1,"A") + arr[3] = "CB" + forward message "GetControl" Arguments (arr) + +::method GetScrollBar unguarded + arr = Arg(1,"A") + arr[3] = "SB" + forward message "GetControl" Arguments (arr) + +::method GetTreeControl unguarded + arr = Arg(1,"A") + arr[3] = "TC" + forward message "GetControl" Arguments (arr) + +::method GetListControl unguarded + arr = Arg(1,"A") + arr[3] = "LC" + forward message "GetControl" Arguments (arr) continue + listControl = result + listControl~lastItem = listControl~items - 1 + return listControl + +::method GetProgressBar unguarded + arr = Arg(1,"A") + arr[3] = "PB" + forward message "GetControl" Arguments (arr) + +::method GetSliderControl unguarded + arr = Arg(1,"A") + arr[3] = "SC" + forward message "GetControl" Arguments (arr) + +::method GetTabControl unguarded + arr = Arg(1,"A") + arr[3] = "TAB" + 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 */ + +::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 */ + +::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 */ + +::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 */ + + +::method InternGetNewCtrlStyle + use arg style, kind + ret = "" + if style~wordpos("NOT WS_VISIBLE") > 0 then ret = "HIDDEN" + else if style~wordpos("WS_VISIBLE") > 0 then ret = "VISIBLE" + if style~wordpos("WS_DISABLED") > 0 then ret = ret || " DISABLED" + if kind = "TREE" then do + if style~wordpos("TVS_DISABLEDRAGDROP") > 0 then ret = ret || " NODRAG" + if style~wordpos("TVS_EDITLABELS") > 0 then ret = ret || " EDIT" + if style~wordpos("TVS_HASBUTTONS") > 0 then ret = ret || " BUTTONS" + if style~wordpos("TVS_HASLINES") > 0 then ret = ret || " LINES" + if style~wordpos("TVS_LINESATROOT") > 0 then ret = ret || " ATROOT" + if style~wordpos("TVS_SHOWSELALWAYS") > 0 then ret = ret || " SHOWSELALWAYS" + if style~wordpos("WS_BORDER") = 0 then ret = ret || " NOBORDER" + end + else if kind = "LIST" then do + if style~wordpos("LVS_EDITLABELS") > 0 then ret = ret || " EDIT" + if style~wordpos("LVS_SHOWSELALWAYS") > 0 then ret = ret || " SHOWSELALWAYS" + if style~wordpos("LVS_ALIGNLEFT") > 0 then ret = ret || " ALIGNLEFT" + if style~wordpos("LVS_ALIGNTOP") > 0 then ret = ret || " ALIGNTOP" + if style~wordpos("LVS_AUTOARRANGE") > 0 then ret = ret || " AUTOARRANGE" + if style~wordpos("LVS_ICON") > 0 then ret = ret || " ICON" + if style~wordpos("LVS_SMALLICON") > 0 then ret = ret || " SMALLICON" + if style~wordpos("LVS_LIST") > 0 then ret = ret || " LIST" + if style~wordpos("LVS_REPORT") > 0 then ret = ret || " REPORT" + if style~wordpos("LVS_NOCOLUMNHEADER") > 0 then ret = ret || " NOHEADER" + if style~wordpos("LVS_NOLABELWRAP") > 0 then ret = ret || " NOWRAP" + if style~wordpos("LVS_NOSCROLL") > 0 then ret = ret || " NOSCROLL" + if style~wordpos("LVS_NOSORTHEADER") > 0 then ret = ret || " NOSORTHEADER" + if style~wordpos("LVS_SHAREIMAGELISTS") > 0 then ret = ret || " SHAREIMAGES" + if style~wordpos("LVS_SINGLESEL") > 0 then ret = ret || " SINGLESEL" + if style~wordpos("LVS_SORTASCENDING") > 0 then ret = ret || " ASCENDING" + if style~wordpos("LVS_SORTDESCENDING") > 0 then ret = ret || " DESCENDING" + if style~wordpos("WS_BORDER") = 0 then ret = ret || " NOBORDER" + end + else if kind = "SLIDER" then do + if style~wordpos("TBS_AUTOTICKS") > 0 then ret = ret || " AUTOTICKS" + if style~wordpos("TBS_NOTICKS") > 0 then ret = ret || " NOTICKS" + if style~wordpos("TBS_VERT") > 0 then ret = ret || " VERTICAL" + if style~wordpos("TBS_HORZ") > 0 then ret = ret || " HORIZONTAL" + if style~wordpos("TBS_TOP") > 0 then ret = ret || " TOP" + if style~wordpos("TBS_BOTTOM") > 0 then ret = ret || " BOTTOM" + if style~wordpos("TBS_LEFT") > 0 then ret = ret || " LEFT" + if style~wordpos("TBS_RIGHT") > 0 then ret = ret || " RIGHT" + if style~wordpos("TBS_BOTH") > 0 then ret = ret || " BOTH" + if style~wordpos("TBS_ENABLESELRANGE") > 0 then ret = ret || " ENABLESELRANGE" + if style~wordpos("WS_BORDER") > 0 then ret = ret || " BORDER" + end + else if kind = "TAB" then do + if style~wordpos("WS_GROUP") > 0 then ret = ret || " GROUP" + if style~wordpos("TCS_BUTTONS") > 0 then ret = ret || " BUTTONS" + if style~wordpos("TCS_FIXEDWIDTH") > 0 then ret = ret || " FIXED" + if style~wordpos("TCS_FOCUSNEVER") > 0 then ret = ret || " FOCUSNEVER" + if style~wordpos("TCS_FOCUSONBUTTONDOWN") > 0 then ret = ret || " FOCUSONDOWN" + if style~wordpos("TCS_FORCEICONLEFT") > 0 then ret = ret || " ICONLEFT" + if style~wordpos("TCS_FORCELABELLEFT") > 0 then ret = ret || " LABELLEFT" + if style~wordpos("TCS_MULTILINE") > 0 then ret = ret || " MULTILINE" + if style~wordpos("TCS_RIGHTJUSTIFY") > 0 then ret = ret || " ALIGNRIGHT" + if style~wordpos("WS_BORDER") > 0 then ret = ret || " BORDER" + end + 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("WS_BORDER") > 0 then ret = ret || " BORDER" + if style~wordpos("WS_TABSTOP") > 0 then ret = ret || " TAB" + 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" + return ret + + +::method AddTreeControl + 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') = 1 then attname = "DATA"id + opts = self~GetDefaultOpts(opts) + if opts = "ALL" then opts = "LINES VSCROLL HSCROLL EDIT BUTTONS ATROOT SHOWSELALWAYS" + self~AktPtr = UsrAddNewCtrl("TREE", self~AktPtr, id, x, y, cx, cy, opts) + if self~AutoDetect = 1 then do + self~ConnectTreeControl(symbid, attname) + end + + +::method AddListControl + 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') = 1 then attname = "DATA"id + opts = self~GetDefaultOpts(opts) + self~AktPtr = UsrAddNewCtrl("LIST", self~AktPtr, id, x, y, cx, cy, opts) + if self~AutoDetect = 1 then do + self~ConnectListControl(symbid, attname) + end + +::method AddProgressBar + use arg id, x, y, cx, cy, opts + symbid = id + id = self~ItemAdd(id) + if id < 0 then return id + opts = self~GetDefaultOpts(opts) + self~AktPtr = UsrAddNewCtrl("PROGRESS", self~AktPtr, id, x, y, cx, cy, opts) + + +::method AddSliderControl + 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') = 1 then attname = "DATA"id + opts = self~GetDefaultOpts(opts) + self~AktPtr = UsrAddNewCtrl("SLIDER", self~AktPtr, id, x, y, cx, cy, opts) + if self~AutoDetect = 1 then do + self~ConnectSliderControl(symbid, attname) + end + + +::method AddTabControl + 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') = 1 then attname = "DATA"id + opts = self~GetDefaultOpts(opts) + self~AktPtr = UsrAddNewCtrl("TAB", self~AktPtr, id, x, y, cx, cy, opts) + if opts~wordpos("CAT") = 0 & self~AutoDetect = 1 then do + self~ConnectTabControl(symbid, attname) + end + + + +/***************************************************************************************************************/ +/* Control Classes */ +/***************************************************************************************************************/ + +/* Base class for all other controls */ +::class 'DialogControl' public inherit WindowBase WindowExtensions + +::method oDlg attribute -- The ooRexx dialog object this control belongs to +::method hDlg attribute -- The window handle of that dialog +::method Id attribute -- The numerical resource ID for this control + +::method new class + use arg pdialog, id, category + Forward Class(Super) continue /* this also calls Init */ + obj = result + + if obj \= .Nil then do + obj~Hwnd = 0 + obj~Id = 0 + if Arg() = 0 then do + if obj~Init_WindowBase \= 0 then return .Nil + if obj~Init_WindowExtensions \= 0 then return .Nil + obj~oDlg = .Nil + return obj + end + else do + parse value GetDialogFactor() with x y + obj~FactorX=x + obj~FactorY=Y + end + + if self~Id = -1 then return .Nil + if Arg(3,'o') = 1 | category = 0 then do + obj~hDlg = pDialog~DlgHandle + obj~AssignWindow(pDialog~GetItem(id)) + end + else do + obj~hDlg = pDialog~catalog['handles'][category] + obj~AssignWindow(pDialog~GetItem(id, obj~hDlg)) + end + end + return obj + + +::method Init + use arg pdialog, id, category + self~init:super + if Arg() = 0 then return + self~oDlg = pDialog + if id~DataType("N") = 0 then id = pDialog~ResolveSymbolicId(id) + self~Id = id + +::method AssignWindow + use arg hwnd, parent, category + self~Hwnd = hwnd + if hwnd = 0 then return 0 + parse value Wnd_Desktop("RECT", hwnd) with x y cx cy + self~SizeX = (cx - x) % self~FactorX + self~SizeY = (cy - y) % self~FactorY + if self~Id = 0 then self~Id = self~GetID /* the id is important for most methods */ + if Arg(2,'e') = 1 then do + self~oDlg = parent + if Arg(3,'o') = 1 then self~hDlg = self~oDlg~DlgHandle + else self~hDlg = self~oDlg~catalog['handles'][category] + end + return hwnd + + +::method ProcessMessage + parse arg msg,wp,lp + return SendWinMsg("DLG",self~hDlg,self~Id,msg,wp,lp) + +::method Message2Parent unguarded private /* This is the replacement for BoxMessage */ + use arg msg, wP, lP + return SendWinMsg("PTR", Self~hDlg, Self~Id, msg, wP, lP) + +::method SetColor + use arg colorbk, colorfg + if Arg(2,'o') = 1 then + return SetBackground(self~oDlg~Adm, "COL", self~id, colorbk) /* creates an entry in the dialogs color table */ + else + return SetBackground(self~oDlg~Adm, "COL", self~id, colorbk, colorfg) /* set both, background and foreground color */ + +::method AssignFocus + return SendWinMsg("ANY",self~hDlg, "0x0028", self~hwnd, 1) + +::method GetFocus unguarded + return Wnd_Desktop("GETFOC", self~hDlg) + +::method SetFocus unguarded + use arg hwnd + return Wnd_Desktop("SETFOC", self~hDlg, hwnd) + +::method TabToNext unguarded + return Wnd_Desktop("SETFOC", self~hDlg, 0, "N") + +::method TabToPrevious unguarded + return Wnd_Desktop("SETFOC", self~hDlg, 1, "P") + +::method TabStop unguarded + use arg wantStop = .true + if \ wantStop~datatype('O')then return -3 + return HandleControlEx(self~hDlg, self~id, "X", "TAB", wantStop) + +::method Group unguarded + use arg wantGroup = .true + if \ wantGroup~datatype('O')then return -3 + return HandleControlEx(self~hDlg, self~id, "X", "GROUP", wantGroup) + +::method GetStyleRaw -- Get the control's current GWL_STYLE style + return HandleControlEx(self~hDlg, self~id, "X", "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) + +::method ClearRect + use arg left, top, right, bottom + return WindowRect("CLR", self~oDlg~Adm, self~hwnd,left,top,right,bottom) + +::method Value unguarded + return self~oDlg~InternalGetItemData(self~Id, self~hDlg) + +::method "Value=" unguarded + use arg data + self~oDlg~InternalSetItemData(self~Id, data, self~hDlg) + +::method CaptureMouse + return Wnd_Desktop("CAP", self~hDlg, self~hwnd) + +::method GetMouseCapture + return Wnd_Desktop("CAP", self~hDlg, "G") + +::method ReleaseMouseCapture + return Wnd_Desktop("CAP", self~hDlg, "R") + +::method IsMouseButtonDown + forward to (self~oDlg) + +::method ConnectFKeyPress unguarded + use strict arg msgToRaise + if \ msgToRaise~isA(.String) then return -1 + return HandleControlEx(self~hDlg, self~id, 'K', 'C', self~oDlg~adm, msgToRaise~translate, "FKEYS", "NONE") + +::method ConnectKeyPress unguarded + use strict arg msgToRaise, keys, filter = "" + if \ msgToRaise~isA(.String) | \ keys~isA(.String) | \ filter~isA(.String) then return -1 + if filter == "" then return HandleControlEx(self~hDlg, self~id, 'K', 'C', self~oDlg~adm, msgToRaise~translate, keys~space(0)) + return HandleControlEx(self~hDlg, self~id, 'K', 'C', self~oDlg~adm, msgToRaise~translate, keys~space(0), filter~translate) + +::method DisconnectKeyPress unguarded + use arg msgToRaise + if arg(1, 'O') then return HandleControlEx(self~hDlg, self~id, 'K', 'R') + if \ msgToRaise~isA(.String) then return -1 + return HandleControlEx(self~hDlg, self~id, 'K', 'R', msgToRaise~translate) + +::method HasKeyPressConnection unguarded + use arg msgToRaise + if arg(1, 'O') then ret = HandleControlEx(self~hDlg, self~id, 'K', 'Q') + else do + if \ msgToRaise~isA(.String) then ret = .false + else ret = HandleControlEx(self~hDlg, self~id, 'K', 'Q', msgToRaise~translate) + end + if \ ret~datatype('O') then return .false + else return ret + + /* Redraws the given rectangle */ +::method RedrawRect unguarded + use arg left, top, right, bottom, erasebkg + if Arg(5, 'o') = 1 then erasebkg = 0 + return WindowRect("RDW", self~hwnd,left,top,right,bottom, erasebkg) + +/****************************************************** Tree Control Class *********************************************************/ + + +::class 'TreeControl' subclass DialogControl public + +::method RootArray attribute private + +::method Init + forward class (super) continue + self~RootArray = .array~new(4) + +::method Insert + use arg parent, after, text, image, selImage, opts, children + if Arg(1,'o') = 1 then parent = "ROOT" + if Arg(2,'o') = 1 then after = "LAST" + if Arg(4,'o') = 1 then image = -1 + if Arg(5,'o') = 1 then selImage = image + if Arg(6,'o') = 1 then opts = "" + if Arg(7,'o') = 1 then children = 0 + return HandleTreeCtrl("INS", self~Hwnd, parent, after, text, image, opts~translate, children, selImage) + +::method Add + do i = 1 to Arg() + if Arg(i,'E') = 1 then do + if Arg(i+1,'e') = 1 then image = Arg(i+1); else image = -1 + if Arg(i+2,'e') = 1 then selImage = Arg(i+2); else selImage = image + if Arg(i+3,'e') = 1 then opts = Arg(i+3); else opts = "" + if Arg(i+4,'e') = 1 then children = Arg(i+4); else children = 0 /* for dynamic children */ + if i=1 then do + self~RootArray[i] = self~Insert("ROOT",,Arg(i),image,selimage,opts~translate, children) + return self~RootArray[i] + end + else if self~RootArray~HasIndex(i-1)=1 then do + if i=1 then parent = "ROOT"; else parent = self~RootArray[i-1] + self~RootArray[i] = self~Insert(parent,,Arg(i),image,selimage,opts~translate, children) + return self~RootArray[i] + end + else return 0 + end + end + + +::method Modify + use arg hItem, text, image, selImage, state, children + if Arg(1,'o') = 1 then hItem = self~Selected + if hitem = 0 then return -1 + if Arg(2,'o') = 1 then text = "" + if Arg(3,'o') = 1 then image = -1 + if Arg(4,'o') = 1 then selImage = -1 + if Arg(5,'o') = 1 then state = "" + if Arg(6,'o') = 1 then children = -1 + return HandleTreeCtrl("SET", self~Hwnd, hItem, text, image, state~translate, children, selImage) + +::method ItemInfo + use arg hItem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + ret = HandleTreeCtrl("GET", self~Hwnd, hItem, "InternalTVItemInfo") + return InternalTVItemInfo. + +::method MoveItem + use arg hItem, hNewParent, redraw, extended + if Arg(1,'o') = 1 | hItem = 0 then return 0 + if Arg(2,'o') = 1 | hNewParent = 0 then return 0 + if Arg(3,'o') = 1 then redraw = 1 + if Arg(4,'o') = 1 then extended = ""; else extended = extended~translate + if hItem = hNewParent | hNewParent = self~Parent(hItem) | self~IsAncestor(hItem, hNewParent) = 1 then return 0 + iinfo. = self~ItemInfo(hItem) + newRoot = self~Insert(hNewParent,,iinfo.!Text, iinfo.!Image, iinfo.!SelectedImage, iinfo.!State, iinfo.!Children) + if iinfo.!Children = 1 then do + child = self~Child(hItem) + if child \= 0 then self~MoveItem(child, newRoot, 0, "SIBLINGS") + end + if extended = "SIBLINGS" then do + sibling = self~next(hItem) + do while sibling \= 0 + self~MoveItem(sibling, hNewParent, 0, "NODELETE") + oldsib = sibling + sibling = self~next(sibling) + self~Delete(oldsib) + end + end + if extended \= "NODELETE" then self~Delete(hItem) + if redraw = 1 | redraw~left(1)~translate = "Y" then self~Update + return newRoot /* return new handle */ + + +::method IsAncestor + use arg hParent, hItem + if Arg(1,'o') = 1 | hParent = 0 then return 0 + if Arg(2,'o') = 1 | hItem = 0 then return 0 + if hItem = hParent then return 0 + act = self~Parent(hItem) + do while act \= 0 & act \= hParent + act = self~Parent(act) + end + if act = hParent then return 1 + else return 0 + + +::method Items + return HandleTreeCtrl("CNT", self~Hwnd) + +::method VisibleItems + return HandleTreeCtrl("CNTVIS", self~Hwnd) + +::method Root + return HandleTreeCtrl("GETHND", self~Hwnd,0,"ROOT") + +::method Parent + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("GETHND", self~Hwnd, hitem, "PARENT") + +::method Child + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("GETHND", self~Hwnd, hitem, "CHILD") + +::method Selected + return HandleTreeCtrl("GETHND", self~Hwnd, 0, "CARET") + +::method DropHighlighted + return HandleTreeCtrl("GETHND", self~Hwnd, 0, "DROP") + +::method FirstVisible + return HandleTreeCtrl("GETHND", self~Hwnd, 0, "FIRSTVISIBLE") + +::method Next + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("GETHND", self~Hwnd, hitem, "NEXT") + +::method NextVisible + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("GETHND", self~Hwnd, hitem, "NEXTVISIBLE") + +::method Previous + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("GETHND", self~Hwnd, hitem, "PREVIOUS") + +::method PreviousVisible + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("GETHND", self~Hwnd, hitem, "PREVIOUSVISIBLE") + +::method Delete + use arg item + if Arg(1,'o') = 1 then return -1 + if item \= 0 & item~Datatype("N") = 1 then return HandleTreeCtrl("DEL",self~hwnd, item) + else return -1 + +::method DeleteAll + return HandleTreeCtrl("DEL", self~Hwnd,"ROOT") + +::method Collapse + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("EXPAND", self~Hwnd, hitem, "COLLAPSE") + +::method CollapseAndReset + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("EXPAND", self~Hwnd, hitem, "COLLAPSE RESET") + +::method Expand + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("EXPAND", self~Hwnd, hitem, "EXPAND") + +::method Toggle + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("EXPAND", self~Hwnd, hitem, "TOGGLE") + +::method EnsureVisible + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("ENVIS", self~Hwnd, hitem) + +::method Indent + return HandleTreeCtrl("GETIND", self~Hwnd) + +::method "Indent=" + use arg ind + if Arg(1,'o') = 1 then return -1 + ret = HandleTreeCtrl("SETIND", self~Hwnd, ind) + +::method Edit + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("EDIT", self~Hwnd, hitem) + +::method EndEdit + use arg cancel + if Arg(1,'o') = 1 then cancel = 0 + return HandleTreeCtrl("EEDIT", self~Hwnd, cancel) + +::method SubclassEdit + return HandleTreeCtrl("SUBCL_EDIT", self~Hwnd) + +::method RestoreEditClass + return HandleTreeCtrl("RESUB_EDIT", self~Hwnd) + +::method Select + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("SEL", self~Hwnd, hitem,"") + +::method MakeFirstVisible + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("SEL", self~Hwnd, hitem,"FIRSTVIS") + +::method DropHighlight + use arg hitem + if Arg(1,'o') = 1 then hItem = 0 + return HandleTreeCtrl("SEL", self~Hwnd, hitem,"DROP") + + +::method SortChildren + use arg hitem + if Arg(1,'o') = 1 | hItem = 0 then return -1 + return HandleTreeCtrl("SORT", self~Hwnd, hitem,0) /* recursive not yet supported */ + + +::method SetImages + use arg bmp, cx, cy + if Arg(1,'o') = 1 then return -1 + if Arg(2,'o') = 1 then cx = 0 + if Arg(3,'o') = 1 then cy = 0 + return HandleTreeCtrl("SETIMG",self~Hwnd, bmp, cx, cy) + + +::method RemoveImages + return HandleTreeCtrl("UNSETIMG", self~Hwnd) + +::method HitTest + use arg x, y + return HandleTreeCtrl("HIT", self~Hwnd, x, y) + + +/****************************************************** List Control Class *********************************************************/ + +::class 'ListControl' subclass DialogControl public + +::method LastItem attribute + +::method Init + forward class (super) continue + self~LastItem = -1 + +::method ReplaceStyle + use arg oldstyle, newstyle + if Arg(1,'o') = 1 | Arg(2,'o') = 1 then return 0 + ret = HandleListCtrl("M","SETSTYLE", self~Hwnd, "R", oldstyle) + return HandleListCtrl("M","SETSTYLE", self~Hwnd, "A", newstyle) + +::method AddStyle + use arg style + if Arg(1,'o') = 1 then return 0 + return HandleListCtrl("M","SETSTYLE", self~Hwnd, "A", style) + +::method RemoveStyle + use arg style + if Arg(1,'o') = 1 then return 0 + return HandleListCtrl("M","SETSTYLE", self~Hwnd, "R", style) + +::method ReplaceExtendedStyle -- Replace + use strict arg oldstyle, newstyle + return HandleListCtrlEx(self~Hwnd, "M", "STYLE", "R", oldstyle, newstyle) + +::method AddExtendedStyle -- Set + use strict arg style + return HandleListCtrlEx(self~Hwnd, "M", "STYLE", "S", style) + +::method RemoveExtendedStyle -- Clear + use strict arg style + return HandleListCtrlEx(self~Hwnd, "M", "STYLE", "C", style) + +::method GetExtendedStyle -- Get + return HandleListCtrlEx(self~Hwnd, "M", "STYLE", "G") + +::method GetExtendedStyleRaw -- Long + return HandleListCtrlEx(self~Hwnd, "M", "STYLE", "L") + +::method SetHoverTime + use arg time + if Arg(1, 'O') then time = -1 + if \ time~datatype('W') then raise syntax 93.905 array(1, time) + if time < -1 then time = -1 + return HandleListCtrlEx(self~Hwnd, "M", "HOVER", time) + +::method GetHoverTime + return HandleListCtrlEx(self~Hwnd, "M", "HOVER") + +::method Check + use strict arg item + if \ item~datatype('W') then raise syntax 93.905 array(1, item) + return HandleListCtrlEx(self~Hwnd, "M", "CHK", item, .true) + +::method CheckAll + return HandleListCtrlEx(self~Hwnd, "M", "CHK", -1, .true) + +::method Uncheck + use strict arg item + if \ item~datatype('W') then raise syntax 93.905 array(1, item) + return HandleListCtrlEx(self~Hwnd, "M", "CHK", item, .false) + +::method UncheckAll + return HandleListCtrlEx(self~Hwnd, "M", "CHK", -1, .false) + +::method GetCheck + use strict arg item + if \ item~datatype('W') then raise syntax 93.905 array(1, item) + return HandleListCtrlEx(self~Hwnd, "M", "CHK", item) + +::method IsChecked + use strict arg item + if \ item~datatype('W') then raise syntax 93.905 array(1, item) + return (HandleListCtrlEx(self~Hwnd, "M", "CHK", item) == 1) + +::method InsertColumn + use arg nr, text, width, fmt + if Arg(1,'o') = 1 then nr = 0 + if Arg(3,'o') = 1 then width = -1; else width = width*self~FactorX + if Arg(4,'o') = 1 then fmt = "LEFT" + return HandleListCtrl("C","INS", self~Hwnd, nr, text, width, fmt~translate) + + +::method DeleteColumn + use arg nr + if Arg(1,'o') = 1 then return -1 + return HandleListCtrl("C","DEL", self~Hwnd, nr) + + +::method ModifyColumn + use arg nr, text, width, fmt + if Arg(1,'o') = 1 then return -1 + if Arg(2,'o') = 1 then text = "" + if Arg(3,'o') = 1 then width = -1; else width = width*self~FactorX + if Arg(4,'o') = 1 then fmt = "" + return HandleListCtrl("C","SET", self~Hwnd, nr, text, width, fmt~translate) + + +::method ColumnInfo + use arg nr + if Arg(1,'o') = 1 then return -1 + ret = HandleListCtrl("C","GET", self~Hwnd, nr, "InternalLVColInfo") + if InternalLVColInfo.!Width~Datatype('N') = 1 then InternalLVColInfo.!Width = InternalLVColInfo.!Width / self~FactorX + return InternalLVColInfo. + + +::method ColumnWidth + use arg nr + if Arg(1,'o') = 1 then return -1 + return HandleListCtrl("C","GETWIDTH", self~Hwnd, nr) / self~FactorX + +::method SetColumnWidth + use arg nr, width + if Arg(1,'o') = 1 then return -1 + if Arg(2,'o') = 1 then width = "AUTO" + if width~datatype("N") = 1 then width = width * self~FactorX + return HandleListCtrl("C","SETWIDTH", self~Hwnd, nr, width~translate) + + +::method StringWidth + use arg text + if Arg(1,'o') = 1 then return -1 + return HandleListCtrl("M","STRWIDTH", self~Hwnd, text) / self~FactorX + + +::method Insert + use arg nr, subnr, text, image + if Arg(2,'o') = 1 then subnr = 0 + if Arg(1,'o') = 1 then do + if subnr = 0 then nr = self~LastItem + 1 + else nr = self~LastItem + end + if Arg(4,'o') = 1 then image = -1 + if subnr = 0 then do + item = HandleListCtrl("I","INS", self~Hwnd, nr, text, image) + if item \= -1 then self~LastItem = item + end + else item = HandleListCtrl("I","SET", self~Hwnd, nr, subnr, text, image) + return item + + +::method Modify + use arg nr, subnr, text, image + if Arg(1,'o') = 1 then nr = self~Selected + if Arg(2,'o') = 1 then subnr = 0 + if Arg(4,'o') = 1 then image = -1 + return HandleListCtrl("I","SET", self~Hwnd, nr, subnr, text, image) + +::method SetItemText + use arg item, subitem, text + if Arg(1,'o') = 1 then return -1 + if Arg(2,'o') = 1 then subitem = 0 + return HandleListCtrl("I","SET", self~Hwnd, item, subitem, text,"TXT") + +::method SetItemState + use arg item, state + if Arg(1,'o') = 1 then return -1 + return HandleListCtrl("I","SET", self~Hwnd, item, 0, state, "STATE") + + +::method Add + do i = 1 to Arg() + if Arg(i,'E') = 1 then do + if Arg(i+1,'e') = 1 then image = Arg(i+1); else image = -1 + if i = 1 then do + item = self~Insert(self~LastItem+1,i-1,Arg(i),image) + if item \= -1 then self~LastItem = item + end + else do + item = self~Insert(self~LastItem,i-1,Arg(i),image) + end + return item + end + end + return -1 + + +::method AddRow + use arg nr, image, text + if Arg(1,'o') = 1 then nr = self~LastItem+1 + if Arg(2,'o') = 1 then image = -1 + if Arg(3,'o') = 1 then text = "" + item = self~Insert(nr,0,text,image) + if item \= -1 then do + self~LastItem = item + do i = 4 to Arg() + if Arg(i,'E') = 1 then self~Insert(item,i-3,Arg(i),-1) + end + end + return item + + +::method Delete + use arg item + if Arg(1,'o') = 1 then return -1 + return HandleListCtrl("I","DEL",self~hwnd, item) + +::method DeleteAll + return HandleListCtrl("I","DEL", self~Hwnd,"ALL") + +::method Items + return HandleListCtrl("M","CNT", self~Hwnd) + +::method Last + return self~Items - 1 + +::method Prepare4nItems + use arg citems + if Arg(1,'o') = 1 then return -1 + return HandleListCtrl("M","SETCNT", self~Hwnd, citems) + + +::method SelectedItems + return HandleListCtrl("M","CNTSEL", self~Hwnd) + +::method ItemInfo + use arg item, subitem + if Arg(1,'o') = 1 then return -1 + if Arg(2,'o') = 1 then subitem = 0 + ret = HandleListCtrl("I","GET", self~Hwnd, item, subitem, "InternalLVItemInfo", "") + return InternalLVItemInfo. + +::method ItemText + use arg item, subitem + if Arg(1,'o') = 1 then return -1 + if Arg(2,'o') = 1 then subitem = 0 + return HandleListCtrl("I","GET", self~Hwnd, item, subitem, "", "TXT") + +::method ItemState + use arg item + if Arg(1,'o') = 1 then return -1 + return HandleListCtrl("I","GET", self~Hwnd, item, subitem, "", "STATE") + +::method Select + use arg item + if Arg(1,'o') = 1 then return -1 + return HandleListCtrl("I","SET", self~Hwnd, item, 0, "SELECTED", "STATE") + +::method Deselect + use arg item + if Arg(1,'o') = 1 then return -1 + return HandleListCtrl("I","SET", self~Hwnd, item, 0, "NOTSELECTED", "STATE") + +::method Selected + return HandleListCtrl("I", "GETNEXT", self~Hwnd, -1, "SELECTED") + +::method LastSelected + if self~ItemState(self~Last)~wordpos("SELECTED") > 0 then return self~Last + return self~PreviousSelected(self~L... [truncated message content] |
From: <mie...@us...> - 2010-11-24 23:13:54
|
Revision: 6415 http://oorexx.svn.sourceforge.net/oorexx/?rev=6415&view=rev Author: miesfeld Date: 2010-11-24 23:13:15 +0000 (Wed, 24 Nov 2010) Log Message: ----------- Updates for swithc ooDialog Modified Paths: -------------- sandbox/mark/ooDialog.beta/platform/windows/install/constructOODialogBeta.bat sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/deskicon.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/displayAnyMenu.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/displayWindowTree.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/winSystemDlgs.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/windowsSystem.frm Added Paths: ----------- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi Removed Paths: ------------- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog.nsi Modified: sandbox/mark/ooDialog.beta/platform/windows/install/constructOODialogBeta.bat =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/constructOODialogBeta.bat 2010-11-24 16:54:40 UTC (rev 6414) +++ sandbox/mark/ooDialog.beta/platform/windows/install/constructOODialogBeta.bat 2010-11-24 23:13:15 UTC (rev 6415) @@ -1,11 +1,16 @@ @echo off -makensis /DVERSION=4.2.0.6367 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DBINDIR=C:\work\wc\main.4.1.0.ooDialog\Win32Dbg switchOODialog.nsi +REM makensis %OODDOTVER% %NODOTVER% %SRCDIR% %SWITCHEXE% %CPUDEF% ooDialogBeta.nsi + +makensis /DVERSION=4.2.0.6413 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DBINDIR=C:\work\wc\main.4.1.0.ooDialog\Win32Dbg switchOODialog420_410.nsi + if ERRORLEVEL 1 goto error -makensis /DVERSION=4.2.0.6367 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog /DCPU=x86_32 ooDialogBeta.nsi +REM makensis %OODDOTVER% %NODOTVER% %SRCDIR% %BINDIR% switchOODialog.nsi +makensis /DVERSION=4.2.0.6413 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog420_421 /DCPU=x86_32 ooDialog420_410.nsi + if ERRORLEVEL 1 goto error goto aroundError Modified: sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi 2010-11-24 16:54:40 UTC (rev 6414) +++ sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi 2010-11-24 23:13:15 UTC (rev 6415) @@ -63,7 +63,7 @@ !define LONGNAME "ooDialog ${VERSION} (beta)" ; Our long name !define SHORTNAME "ooDialogSwitch" ; Our short name !define InstallFile "${EXEFILE}.exe" ; The switch ooDialog executable - !define DISPLAYICON "$INSTDIR\ooDialog.dll,0" ; Use the ooDialog icon. + !define DISPLAYICON "$INSTDIR\ooDialog.dll,2" ; Use the ooDialog icon, the OOD icon !define REXXSHORTNAME "ooRexx" ; From ooRexx installer. !define REXXLONGNAME "Open Object Rexx" ; From ooRexx installer !define UNINSTALLER "uninstall_${EXEFILE}.exe" Deleted: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog.nsi 2010-11-24 16:54:40 UTC (rev 6414) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog.nsi 2010-11-24 23:13:15 UTC (rev 6415) @@ -1,643 +0,0 @@ -/*----------------------------------------------------------------------------*/ -/* */ -/* Copyright (c) 2010-2010 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 */ -/* distribution. A copy is also available at the following address: */ -/* http://www.oorexx.org/license.html */ -/* */ -/* Redistribution and use in source and binary forms, with or */ -/* without modification, are permitted provided that the following */ -/* conditions are met: */ -/* */ -/* Redistributions of source code must retain the above copyright */ -/* notice, this list of conditions and the following disclaimer. */ -/* Redistributions in binary form must reproduce the above copyright */ -/* notice, this list of conditions and the following disclaimer in */ -/* the documentation and/or other materials provided with the distribution. */ -/* */ -/* Neither the name of Rexx Language Association nor the names */ -/* of its contributors may be used to endorse or promote products */ -/* derived from this software without specific prior written permission. */ -/* */ -/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ -/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ -/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ -/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ -/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ -/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ -/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ -/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ -/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ -/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ -/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* */ -/*----------------------------------------------------------------------------*/ - -/** - * switchOODialog.nsi - * - * Take advantage of NSIS's builtin compression and unpackaging to produce an - * executable to switch between 4.1.0 and 4.2.0 versions of ooDialog. The - * basic steps to do the switch are: - * - * * Read the registry to get our installed location, abort if not correct. - * - * * Read the registry to get the current version of ooDialog, switch to the - * other version. - * - * * Do the switch by: Deleting all files and directories in the current - * ooDialog that are not in the switch-to version. Install, by over-writing, - * all files in the switch-to version. - * - * One basic problem that can happen is if the user has an ooDialog program - * running or the ooDialog PDF doc open. This will prevent the installer from - * overwriting oodialg.dll and / or oodialog.pdf. To prevent this, we first - * try to delete oodialog.pdf and oodialog.dll and abort the install if the - * delete fails. - * - * The other problem would be if the user uninstalls ooRexx completely without - * first uninstalling ooDialog beta. Some switch ooDialog stuff may not get - * cleaned up. - * - * switchOODialog can take several arguments - * - * switchOODialog /F=<version> Force version. <version> Must be 410 or 420 - * - * switchOODialog /V Show the installer - * By default, switchOODialog is invisible. - * This is useful for debugging. - * - * switchOODialog /I Displays the current ooDialog version in - * effect. - */ - - -;=============================================================================== -;Configuration -;=============================================================================== - -;-------------------------------- -; Defines - - !define SHORTNAME "ooDialogSwitch" ; Must be in sync with the ooDialogBeta SHORTNAME - !define LONGNAME "ooDialog ${VERSION} (beta)" - - !Define BinDir410 "${BINDIR}\oodialog410" - !Define BinDir420 "${BINDIR}\oodialog420" - !define SrcDir410 "${SRCDIR}\extensions\platform\windows\oodialog.4.1.0" - !define SrcDir420 "${SRCDIR}\extensions\platform\windows\oodialog.4.2.0" - !Define SamplesDir410 "${SRCDIR}\samples\windows\oodialog.4.1.0" - !Define SamplesDir420 "${SRCDIR}\samples\windows\oodialog.4.2.0" - -;-------------------------------- -;Includes - - !include "MUI2.nsh" - !include "Library.nsh" - !include "LogicLib.nsh" - !include "FileFunc.nsh" - !include "admin.nsh" - -;-------------------------------- -;General - - Name "Switch ooDialog" - OutFile "switchOODialog.exe" - ShowInstdetails show - SetOverwrite on - SetPluginUnload alwaysoff - RequestExecutionLevel admin - InstallDir "$PROGRAMFILES\ooRexx" - - -;-------------------------------- -;Interface Settings - - !define MUI_ICON "${SRCDIR}\extensions\platform\windows\oodialog.4.2.0\AppIcon2.ico" - !define MUI_UNICON "${SRCDIR}\platform\windows\install\uninstall.ico" - -;-------------------------------- -; Variables - - Var RegVal_installedLocation ; Our installed location, found in the registry - Var RegVal_installedVersion ; Don't need this Version / level of uninstaller program. This only exists at 410 or greater - Var ForceVersion ; Allows the user to force what ooDialog version is in effect. - Var CurrentVersion ; The current ooDialog version, read from the registry - Var NewVersion ; The version of ooDialog to switch to. - -;-------------------------------- -; Languages - - !insertmacro MUI_LANGUAGE "English" - -;-------------------------------- -; Pages. Even though we usually do not show any pages, the INSTFILES page is -; usefull for debugging. The /V option will let us see the page. - - !insertmacro MUI_PAGE_INSTFILES - - -;=============================================================================== -;Installer Sections -;=============================================================================== - -;Section "Dummy Section" SecDummy -Section doSwitch - - Call PrintSwitchInfo - - Call CheckForProblems - - ; Set the installation directory: - SetOutPath "$INSTDIR" - DetailPrint "" - - Call RemoveFiles - - ${If} $NewVersion == 420 - DetailPrint "********** ooDialog 4.2.0 Framework **********" - File "${BinDir420}\oodialog.dll" - File "${BinDir420}\ooDialog.cls" - File "${BinDir420}\oodPlain.cls" - File "${BinDir420}\oodWin32.cls" - DetailPrint "" - - DetailPrint "********** ooDialog 4.2.0 Documentation **********" - ; Set the installation directory: - SetOutPath $INSTDIR\doc - ; Add the files ... - File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" - DetailPrint "" - - DetailPrint "********** ooDialog 4.2.0 Samples **********" - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog - ; Add the files ... - File "${SrcDir420}\oodialog.ico" - File "${SamplesDir420}\*.rex" - File "${SamplesDir420}\*.h" - File "${SamplesDir420}\*.inp" - File "${SamplesDir420}\*.ico" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\bmp - ; Add the files ... - File "${SamplesDir420}\bmp\*.bmp" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\controls - ; Add the files ... - File "${SamplesDir420}\controls\*.rex" - File "${SamplesDir420}\controls\*.rc" - File "${SamplesDir420}\controls\*.h" - File "${SamplesDir420}\controls\*.txt" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\examples - ; Add the files ... - File "${SamplesDir420}\examples\*.rex" - File "${SamplesDir420}\examples\*.txt" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\examples\resources - ; Add the files ... - File "${SamplesDir420}\examples\resources\*.bmp" - File "${SamplesDir420}\examples\resources\*.h" - File "${SamplesDir420}\examples\resources\*.rc" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\oleinfo - ; Add the files ... - File "${SamplesDir420}\oleinfo\*.rex" - File "${SamplesDir420}\oleinfo\*.txt" - File "${SamplesDir420}\oleinfo\*.bmp" - File "${SamplesDir420}\oleinfo\*.rc" - - SetOutPath $INSTDIR\samples\oodialog\ooRexxTry - ; Add the files ... - File "${SamplesDir420}\ooRexxTry\ooRexxTry.rex" - - SetOutPath $INSTDIR\samples\oodialog\ooRexxTry\doc - ; Add the files ... - File "${SamplesDir420}\ooRexxTry\doc\ooRexxTry.pdf" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\rc - ; Add the files ... - File "${SamplesDir420}\rc\*.rc" - File "${SamplesDir420}\rc\*.h" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\res - ; Add the files ... - File "${SamplesDir420}\res\*.res" - File "${SamplesDir420}\res\*.dll" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\simple - ; Add the files ... - File "${SamplesDir420}\simple\*.rex" - File "${SamplesDir420}\simple\*.txt" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\sysinfo - ; Add the files ... - File "${SamplesDir420}\sysinfo\*.rex" - File "${SamplesDir420}\sysinfo\*.rc" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\source - ; Add the files ... - File "${BinDir420}\ooDialog.cls" - File "${BinDir420}\oodWin32.cls" - File "${BinDir420}\oodPlain.cls" - File "${SrcDir420}\0_READ_ME_FIRST.txt" - File "${SrcDir420}\build_ooDialog_cls.rex" - File "${SrcDir420}\AnimatedButton.cls" - File "${SrcDir420}\BaseDialog.cls" - File "${SrcDir420}\CategoryDialog.cls" - File "${SrcDir420}\ControlDialog.cls" - File "${SrcDir420}\DeprecatedClasses.cls" - File "${SrcDir420}\DialogControls.cls" - File "${SrcDir420}\DialogExtensions.cls" - File "${SrcDir420}\DynamicDialog.cls" - File "${SrcDir420}\EventNotification.cls" - File "${SrcDir420}\Menu.cls" - File "${SrcDir420}\PlainBaseDialog.cls" - File "${SrcDir420}\PropertySheet.cls" - File "${SrcDir420}\RcDialog.cls" - File "${SrcDir420}\ResDialog.cls" - File "${SrcDir420}\UserDialog.cls" - File "${SrcDir420}\UtilityClasses.cls" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\tutorial - ; Add the files ... - File "${SamplesDir420}\tutorial\*.rex" - File "${SamplesDir420}\tutorial\*.bmp" - File "${SamplesDir420}\tutorial\*.rc" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\wav - ; Add the files ... - File "${SamplesDir420}\wav\*.wav" - File "${SamplesDir420}\wav\*.txt" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\winsystem - File "${SamplesDir420}\winsystem\*.rex" - File "${SamplesDir420}\winsystem\*.rc" - File "${SamplesDir420}\winsystem\*.h" - File "${SamplesDir420}\winsystem\*.frm" - DetailPrint "" - - ; Record the ooDialog version now in effect: - DetailPrint "Recording ooDialog version now in effect: 4.2.0" - WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "420" - ${Else} - DetailPrint "********** ooDialog 4.1.0 Framework **********" - File "${BinDir410}\oodialog.dll" - File "${BinDir410}\OODIALOG.CLS" - File "${BinDir410}\OODPLAIN.CLS" - File "${BinDir410}\OODWIN32.CLS" - DetailPrint "" - - DetailPrint "********** ooDialog 4.1.0 Documentation **********" - ; Set the installation directory: - SetOutPath $INSTDIR\doc - ; Add the files ... - File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" - DetailPrint "" - - DetailPrint "********** ooDialog 4.1.0 Samples **********" - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog - ; Add the files ... - File "${SrcDir410}\oodialog.ico" - File "${SamplesDir410}\*.rex" - File "${SamplesDir410}\*.inp" - File "${SamplesDir410}\*.ico" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\bmp - ; Add the files ... - File "${SamplesDir410}\bmp\*.bmp" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\examples - ; Add the files ... - File "${SamplesDir410}\examples\*.rex" - File "${SamplesDir410}\examples\*.txt" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\examples\resources - ; Add the files ... - File "${SamplesDir410}\examples\resources\*.bmp" - File "${SamplesDir410}\examples\resources\*.h" - File "${SamplesDir410}\examples\resources\*.rc" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\oleinfo - ; Add the files ... - File "${SamplesDir410}\oleinfo\*.rex" - File "${SamplesDir410}\oleinfo\*.txt" - File "${SamplesDir410}\oleinfo\*.bmp" - File "${SamplesDir410}\oleinfo\*.rc" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\ooRexxTry - ; Add the files ... - File "${SamplesDir410}\ooRexxTry\ooRexxTry.rex" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\ooRexxTry\doc - ; Add the files ... - File "${SamplesDir410}\ooRexxTry\doc\ooRexxTry.pdf" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\rc - ; Add the files ... - File "${SamplesDir410}\rc\*.rc" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\res - ; Add the files ... - File "${SamplesDir410}\res\*.res" - File "${SamplesDir410}\res\*.dll" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\sysinfo - ; Add the files ... - File "${SamplesDir410}\sysinfo\*.rex" - File "${SamplesDir410}\sysinfo\*.rc" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\source - ; Add the files ... - File "${BinDir410}\OODIALOG.CLS" - File "${BinDir410}\OODWIN32.CLS" - File "${BinDir410}\OODPLAIN.CLS" - File "${SrcDir410}\advctrl.cls" - File "${SrcDir410}\anibuttn.cls" - File "${SrcDir410}\basedlg.cls" - File "${SrcDir410}\build.rex" - File "${SrcDir410}\catdlg.cls" - File "${SrcDir410}\dialog.cls" - File "${SrcDir410}\dlgext.cls" - File "${SrcDir410}\dyndlg.cls" - File "${SrcDir410}\makedll.bat" - File "${SrcDir410}\msgext.cls" - File "${SrcDir410}\oodutils.cls" - File "${SrcDir410}\plbdlg.cls" - File "${SrcDir410}\pludlg.cls" - File "${SrcDir410}\propsht.cls" - File "${SrcDir410}\resdlg.cls" - File "${SrcDir410}\stddlg.cls" - File "${SrcDir410}\stdext.cls" - File "${SrcDir410}\userdlg.cls" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\tutorial - ; Add the files ... - File "${SamplesDir410}\tutorial\*.rex" - File "${SamplesDir410}\tutorial\*.bmp" - File "${SamplesDir410}\tutorial\*.rc" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\wav - ; Add the files ... - File "${SamplesDir410}\wav\*.wav" - File "${SamplesDir410}\wav\*.txt" - - ; Set the installation directory: - SetOutPath $INSTDIR\samples\oodialog\winsystem - ; Add the files ... - File "${SamplesDir410}\winsystem\*.rex" - File "${SamplesDir410}\winsystem\*.rc" - File "${SamplesDir410}\winsystem\*.h" - File "${SamplesDir410}\winsystem\*.frm" - DetailPrint "" - - ; Record the ooDialog version now in effect: - DetailPrint "Recording ooDialog version now in effect: 4.1.0" - WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "410" - ${Endif} - -SectionEnd - -;=============================================================================== -;Installer Functions -;=============================================================================== - -/** .onInit() Call back function - * - * Called by the installer before any page is shown. We use it to ensure - * ooRexx is installed and the correct version level. If so, we check the - * version of ooDialog currently in effect, (by reading the registry) and swap - * it. - */ -Function .onInit - - /* We read the current version key first so we can do an early abort for the - * /I option. - */ - ReadRegStr $CurrentVersion HKLM "Software\${SHORTNAME}" "CurrentVersion" - - /* Check if the user just wants to know the ooDialog version in effect. */ - ${GetOptions} "$CMDLINE" "/I" $R0 - ${IfNot} ${Errors} - ${If} $CurrentVersion == 410 - MessageBox MB_OK "Current version of ooDialog in use: 4.1.0" - ${Else} - MessageBox MB_OK "Current version of ooDialog in use: 4.2.0" - ${EndIf} - Abort - ${Endif} - - /* Check if the user is forcing the current version to something specific. */ - ${GetOptions} "$CMDLINE" "/F=" $R0 - StrCpy $ForceVersion $R0 - - /* Check if the user is forcing us to be visible. Usefull for debugging. - * This logic is a little convoluted. We check the command line for the - * presence of /V. If it is not there, the error flag is set, and we force - * the installer to silent mode. - */ - ClearErrors - ${GetOptions} "$CMDLINE" "/V" $R0 - ${If} ${Errors} - SetSilent silent - ClearErrors - ${Endif} - - /* Be sure we are installed properly. Note that the UnInstallLocation and the - * InstallLocation keys in the registry contain the same directory. But, the - * UnInstallLocation key has the directory unquoted and InstallLocation quotes - * the directory. For some reason, copying the quoted version drops the ':' - * out of the path, causing things to fail. - */ - ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" - ${If} $RegVal_installedLocation == "" - MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ - "${LONGNAME} has not been installed properly.$\n$\n\ - Please follow the guidelines published for using$\n\ - Switch ooDialog, especially the instructions for$\n\ - installation.$\n$\n\ - Aborting." - Abort - ${Endif} - - /* Be sure, if passed a /F arg, it is correct. */ - ${If} $ForceVersion != "" - ${If} $ForceVersion != 420 - ${AndIf} $ForceVersion != 410 - MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ - "The /F argument of: '$ForceVersion' is not correct.$\n$\n\ - Aborting." - Abort - ${Endif} - ${Endif} - - StrCpy $INSTDIR "$RegVal_installedLocation" - - /* If the user did not force a version, the new version is the opposite of - * the current version. - */ - ${if} $ForceVersion == "" - ${If} $CurrentVersion == 410 - StrCpy $NewVersion 420 - ${Else} - StrCpy $NewVersion 410 - ${Endif} - ${else} - ${If} $ForceVersion == 410 - StrCpy $NewVersion 410 - StrCpy $CurrentVersion 420 - ${Else} - StrCpy $NewVersion 420 - StrCpy $CurrentVersion 410 - ${Endif} - ${endif} - -FunctionEnd - -/** CheckForProblems() - * - * If the ooDialog doc is open, it can not be overwritten and the switched to - * version will have the wrong doc. Or, if a Rexx ooDialog program is running - * oodialog.dll can not be overwritten, and the switched to version will not - * work. - * - * We check for this possible problem by trying to delete the files. If we - * can not, we abort, keeping the current version intact. - */ -Function CheckForProblems - - ClearErrors - Delete $INSTDIR\doc\oodialog.pdf - ${If} ${Errors} - MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ - "switchOODialog detected a problem with oodialog.pdf$\n$\n\ - You MUST close the ooDialog reference documentation and close$\n\ - any running ooDialog programs before executing the Switch$\n\ - ooDialog program.$\n$\n\ - Please close the ooDialog Method Reference documentation, and$\n\ - make sure no ooDialog programs are running.$\n$\n\ - switchOODialog is aborting." - Abort - ${EndIf} - - Delete $INSTDIR\oodialog.dll - ${If} ${Errors} - MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ - "switchOODialog detected a problem with oodialog.dll$\n$\n\ - You MUST close any running ooDialog programs and close$\n\ - the ooDialog reference documentation before executing$\n\ - the Switch ooDialog program.$\n$\n\ - Please close any running ooDialog programs and make sure$\n\ - the ooDialog Method Reference documentation is closed.$\n$\n\ - switchOODialog is aborting." - - ; Restore the oodialog.pdf file deleted above. - SetOutPath $INSTDIR\doc - - ${If} $CurrentVersion == 420 - File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" - ${Else} - File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" - ${EndIf} - - Abort - ${EndIf} - -FunctionEnd - -/** PrintSwitchInfo() - * - * Print some info on what the switch is doing. This is used for debugging. - * This is never seen, unless the /V options is used. - */ -Function PrintSwitchInfo - - ${If} $NewVersion == 420 - DetailPrint "Current ooDialog Version is: 4.1.0" - DetailPrint "Switching to Version: 4.2.0" - DetailPrint "" - ${Else} - DetailPrint "Current ooDialog Version is: 4.2.0" - DetailPrint "Switching to Version: 4.1.0" - DetailPrint "" - ${Endif} - -FunctionEnd - -/** RemoveFiles() - * - * Deletes all the files in the current ooDialog version that are not present - * in the switch to version. - */ -Function RemoveFiles - - ${If} $NewVersion == 420 - DetailPrint "Removing files not present in ooDialog 4.2.0" - - RMDir /r $INSTDIR\samples\oodialog\source - Delete $INSTDIR\samples\oodialog\bmp\movie.bmp - Delete $INSTDIR\samples\oodialog\bmp\psdemolv.bmp - Delete $INSTDIR\samples\oodialog\bmp\psdemoTab.bmp - Delete $INSTDIR\samples\oodialog\bmp\psdemotv.bmp - Delete $INSTDIR\samples\oodialog\bmp\ticket.bmp - Delete $INSTDIR\samples\oodialog\examples\readme.txt - Delete $INSTDIR\samples\oodialog\ooticket.rex - Delete $INSTDIR\samples\oodialog\propdemo.rex - Delete $INSTDIR\samples\oodialog\rc\movies.rc - Delete $INSTDIR\samples\oodialog\rc\propdemo.rc - Delete $INSTDIR\samples\oodialog\rc\ticket.rc - ${Else} - DetailPrint "Removing files not present in ooDialog 4.1.0" - - RMDir /r $INSTDIR\samples\oodialog\source - Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoListView.bmp - Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoTab.bmp - Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoTreeView.bmp - Delete $INSTDIR\samples\oodialog\bmp\ticketWizardMovie.bmp - Delete $INSTDIR\samples\oodialog\bmp\ticketWizardRexxLA.bmp - Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTheater.bmp - Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTicket.bmp - RMDir /r $INSTDIR\samples\oodialog\controls - Delete $INSTDIR\samples\oodialog\examples\ReadMe.txt - Delete $INSTDIR\samples\oodialog\ooDraw.h - Delete $INSTDIR\samples\oodialog\PropertySheetDemo.rex - Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.h - Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.rc - Delete $INSTDIR\samples\oodialog\rc\ticketWizard.h - Delete $INSTDIR\samples\oodialog\rc\ticketWizard.rc - RMDir /r $INSTDIR\samples\oodialog\simple - Delete $INSTDIR\samples\oodialog\ticketWizard.rex - ${Endif} - - DetailPrint "" - -FunctionEnd Copied: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi (from rev 6413, sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog.nsi) =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi (rev 0) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2010-11-24 23:13:15 UTC (rev 6415) @@ -0,0 +1,643 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2010 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * switchOODialog.nsi + * + * Take advantage of NSIS's builtin compression and unpackaging to produce an + * executable to switch between 4.1.0 and 4.2.0 versions of ooDialog. The + * basic steps to do the switch are: + * + * * Read the registry to get our installed location, abort if not correct. + * + * * Read the registry to get the current version of ooDialog, switch to the + * other version. + * + * * Do the switch by: Deleting all files and directories in the current + * ooDialog that are not in the switch-to version. Install, by over-writing, + * all files in the switch-to version. + * + * One basic problem that can happen is if the user has an ooDialog program + * running or the ooDialog PDF doc open. This will prevent the installer from + * overwriting oodialg.dll and / or oodialog.pdf. To prevent this, we first + * try to delete oodialog.pdf and oodialog.dll and abort the install if the + * delete fails. + * + * The other problem would be if the user uninstalls ooRexx completely without + * first uninstalling ooDialog beta. Some switch ooDialog stuff may not get + * cleaned up. + * + * switchOODialog can take several arguments + * + * switchOODialog /F=<version> Force version. <version> Must be 410 or 420 + * + * switchOODialog /V Show the installer + * By default, switchOODialog is invisible. + * This is useful for debugging. + * + * switchOODialog /I Displays the current ooDialog version in + * effect. + */ + + +;=============================================================================== +;Configuration +;=============================================================================== + +;-------------------------------- +; Defines + + !define SHORTNAME "ooDialogSwitch" ; Must be in sync with the ooDialogBeta SHORTNAME + !define LONGNAME "ooDialog ${VERSION} (beta)" + + !Define BinDir410 "${BINDIR}\oodialog410" + !Define BinDir420 "${BINDIR}\oodialog420" + !define SrcDir410 "${SRCDIR}\extensions\platform\windows\oodialog.4.1.0" + !define SrcDir420 "${SRCDIR}\extensions\platform\windows\oodialog.4.2.0" + !Define SamplesDir410 "${SRCDIR}\samples\windows\oodialog.4.1.0" + !Define SamplesDir420 "${SRCDIR}\samples\windows\oodialog.4.2.0" + +;-------------------------------- +;Includes + + !include "MUI2.nsh" + !include "Library.nsh" + !include "LogicLib.nsh" + !include "FileFunc.nsh" + !include "admin.nsh" + +;-------------------------------- +;General + + Name "Switch ooDialog" + OutFile "switchOODialog.exe" + ShowInstdetails show + SetOverwrite on + SetPluginUnload alwaysoff + RequestExecutionLevel admin + InstallDir "$PROGRAMFILES\ooRexx" + + +;-------------------------------- +;Interface Settings + + !define MUI_ICON "${SRCDIR}\extensions\platform\windows\oodialog.4.2.0\AppIcon2.ico" + !define MUI_UNICON "${SRCDIR}\platform\windows\install\uninstall.ico" + +;-------------------------------- +; Variables + + Var RegVal_installedLocation ; Our installed location, found in the registry + Var RegVal_installedVersion ; Don't need this Version / level of uninstaller program. This only exists at 410 or greater + Var ForceVersion ; Allows the user to force what ooDialog version is in effect. + Var CurrentVersion ; The current ooDialog version, read from the registry + Var NewVersion ; The version of ooDialog to switch to. + +;-------------------------------- +; Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +; Pages. Even though we usually do not show any pages, the INSTFILES page is +; usefull for debugging. The /V option will let us see the page. + + !insertmacro MUI_PAGE_INSTFILES + + +;=============================================================================== +;Installer Sections +;=============================================================================== + +;Section "Dummy Section" SecDummy +Section doSwitch + + Call PrintSwitchInfo + + Call CheckForProblems + + ; Set the installation directory: + SetOutPath "$INSTDIR" + DetailPrint "" + + Call RemoveFiles + + ${If} $NewVersion == 420 + DetailPrint "********** ooDialog 4.2.0 Framework **********" + File "${BinDir420}\oodialog.dll" + File "${BinDir420}\ooDialog.cls" + File "${BinDir420}\oodPlain.cls" + File "${BinDir420}\oodWin32.cls" + DetailPrint "" + + DetailPrint "********** ooDialog 4.2.0 Documentation **********" + ; Set the installation directory: + SetOutPath $INSTDIR\doc + ; Add the files ... + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" + DetailPrint "" + + DetailPrint "********** ooDialog 4.2.0 Samples **********" + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog + ; Add the files ... + File "${SrcDir420}\oodialog.ico" + File "${SamplesDir420}\*.rex" + File "${SamplesDir420}\*.h" + File "${SamplesDir420}\*.inp" + File "${SamplesDir420}\*.ico" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\bmp + ; Add the files ... + File "${SamplesDir420}\bmp\*.bmp" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\controls + ; Add the files ... + File "${SamplesDir420}\controls\*.rex" + File "${SamplesDir420}\controls\*.rc" + File "${SamplesDir420}\controls\*.h" + File "${SamplesDir420}\controls\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples + ; Add the files ... + File "${SamplesDir420}\examples\*.rex" + File "${SamplesDir420}\examples\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples\resources + ; Add the files ... + File "${SamplesDir420}\examples\resources\*.bmp" + File "${SamplesDir420}\examples\resources\*.h" + File "${SamplesDir420}\examples\resources\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\oleinfo + ; Add the files ... + File "${SamplesDir420}\oleinfo\*.rex" + File "${SamplesDir420}\oleinfo\*.txt" + File "${SamplesDir420}\oleinfo\*.bmp" + File "${SamplesDir420}\oleinfo\*.rc" + + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry + ; Add the files ... + File "${SamplesDir420}\ooRexxTry\ooRexxTry.rex" + + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry\doc + ; Add the files ... + File "${SamplesDir420}\ooRexxTry\doc\ooRexxTry.pdf" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\rc + ; Add the files ... + File "${SamplesDir420}\rc\*.rc" + File "${SamplesDir420}\rc\*.h" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\res + ; Add the files ... + File "${SamplesDir420}\res\*.res" + File "${SamplesDir420}\res\*.dll" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\simple + ; Add the files ... + File "${SamplesDir420}\simple\*.rex" + File "${SamplesDir420}\simple\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\sysinfo + ; Add the files ... + File "${SamplesDir420}\sysinfo\*.rex" + File "${SamplesDir420}\sysinfo\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\source + ; Add the files ... + File "${BinDir420}\ooDialog.cls" + File "${BinDir420}\oodWin32.cls" + File "${BinDir420}\oodPlain.cls" + File "${SrcDir420}\0_READ_ME_FIRST.txt" + File "${SrcDir420}\build_ooDialog_cls.rex" + File "${SrcDir420}\AnimatedButton.cls" + File "${SrcDir420}\BaseDialog.cls" + File "${SrcDir420}\CategoryDialog.cls" + File "${SrcDir420}\ControlDialog.cls" + File "${SrcDir420}\DeprecatedClasses.cls" + File "${SrcDir420}\DialogControls.cls" + File "${SrcDir420}\DialogExtensions.cls" + File "${SrcDir420}\DynamicDialog.cls" + File "${SrcDir420}\EventNotification.cls" + File "${SrcDir420}\Menu.cls" + File "${SrcDir420}\PlainBaseDialog.cls" + File "${SrcDir420}\PropertySheet.cls" + File "${SrcDir420}\RcDialog.cls" + File "${SrcDir420}\ResDialog.cls" + File "${SrcDir420}\UserDialog.cls" + File "${SrcDir420}\UtilityClasses.cls" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\tutorial + ; Add the files ... + File "${SamplesDir420}\tutorial\*.rex" + File "${SamplesDir420}\tutorial\*.bmp" + File "${SamplesDir420}\tutorial\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\wav + ; Add the files ... + File "${SamplesDir420}\wav\*.wav" + File "${SamplesDir420}\wav\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\winsystem + File "${SamplesDir420}\winsystem\*.rex" + File "${SamplesDir420}\winsystem\*.rc" + File "${SamplesDir420}\winsystem\*.h" + File "${SamplesDir420}\winsystem\*.frm" + DetailPrint "" + + ; Record the ooDialog version now in effect: + DetailPrint "Recording ooDialog version now in effect: 4.2.0" + WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "420" + ${Else} + DetailPrint "********** ooDialog 4.1.0 Framework **********" + File "${BinDir410}\oodialog.dll" + File "${BinDir410}\OODIALOG.CLS" + File "${BinDir410}\OODPLAIN.CLS" + File "${BinDir410}\OODWIN32.CLS" + DetailPrint "" + + DetailPrint "********** ooDialog 4.1.0 Documentation **********" + ; Set the installation directory: + SetOutPath $INSTDIR\doc + ; Add the files ... + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" + DetailPrint "" + + DetailPrint "********** ooDialog 4.1.0 Samples **********" + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog + ; Add the files ... + File "${SrcDir410}\oodialog.ico" + File "${SamplesDir410}\*.rex" + File "${SamplesDir410}\*.inp" + File "${SamplesDir410}\*.ico" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\bmp + ; Add the files ... + File "${SamplesDir410}\bmp\*.bmp" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples + ; Add the files ... + File "${SamplesDir410}\examples\*.rex" + File "${SamplesDir410}\examples\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples\resources + ; Add the files ... + File "${SamplesDir410}\examples\resources\*.bmp" + File "${SamplesDir410}\examples\resources\*.h" + File "${SamplesDir410}\examples\resources\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\oleinfo + ; Add the files ... + File "${SamplesDir410}\oleinfo\*.rex" + File "${SamplesDir410}\oleinfo\*.txt" + File "${SamplesDir410}\oleinfo\*.bmp" + File "${SamplesDir410}\oleinfo\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry + ; Add the files ... + File "${SamplesDir410}\ooRexxTry\ooRexxTry.rex" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry\doc + ; Add the files ... + File "${SamplesDir410}\ooRexxTry\doc\ooRexxTry.pdf" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\rc + ; Add the files ... + File "${SamplesDir410}\rc\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\res + ; Add the files ... + File "${SamplesDir410}\res\*.res" + File "${SamplesDir410}\res\*.dll" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\sysinfo + ; Add the files ... + File "${SamplesDir410}\sysinfo\*.rex" + File "${SamplesDir410}\sysinfo\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\source + ; Add the files ... + File "${BinDir410}\OODIALOG.CLS" + File "${BinDir410}\OODWIN32.CLS" + File "${BinDir410}\OODPLAIN.CLS" + File "${SrcDir410}\advctrl.cls" + File "${SrcDir410}\anibuttn.cls" + File "${SrcDir410}\basedlg.cls" + File "${SrcDir410}\build.rex" + File "${SrcDir410}\catdlg.cls" + File "${SrcDir410}\dialog.cls" + File "${SrcDir410}\dlgext.cls" + File "${SrcDir410}\dyndlg.cls" + File "${SrcDir410}\makedll.bat" + File "${SrcDir410}\msgext.cls" + File "${SrcDir410}\oodutils.cls" + File "${SrcDir410}\plbdlg.cls" + File "${SrcDir410}\pludlg.cls" + File "${SrcDir410}\propsht.cls" + File "${SrcDir410}\resdlg.cls" + File "${SrcDir410}\stddlg.cls" + File "${SrcDir410}\stdext.cls" + File "${SrcDir410}\userdlg.cls" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\tutorial + ; Add the files ... + File "${SamplesDir410}\tutorial\*.rex" + File "${SamplesDir410}\tutorial\*.bmp" + File "${SamplesDir410}\tutorial\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\wav + ; Add the files ... + File "${SamplesDir410}\wav\*.wav" + File "${SamplesDir410}\wav\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\winsystem + ; Add the files ... + File "${SamplesDir410}\winsystem\*.rex" + File "${SamplesDir410}\winsystem\*.rc" + File "${SamplesDir410}\winsystem\*.h" + File "${SamplesDir410}\winsystem\*.frm" + DetailPrint "" + + ; Record the ooDialog version now in effect: + DetailPrint "Recording ooDialog version now in effect: 4.1.0" + WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "410" + ${Endif} + +SectionEnd + +;=============================================================================== +;Installer Functions +;=============================================================================== + +/** .onInit() Call back function + * + * Called by the installer before any page is shown. We use it to ensure + * ooRexx is installed and the correct version level. If so, we check the + * version of ooDialog currently in effect, (by reading the registry) and swap + * it. + */ +Function .onInit + + /* We read the current version key first so we can do an early abort for the + * /I option. + */ + ReadRegStr $CurrentVersion HKLM "Software\${SHORTNAME}" "CurrentVersion" + + /* Check if the user just wants to know the ooDialog version in effect. */ + ${GetOptions} "$CMDLINE" "/I" $R0 + ${IfNot} ${Errors} + ${If} $CurrentVersion == 410 + MessageBox MB_OK "Current version of ooDialog in use: 4.1.0" + ${Else} + MessageBox MB_OK "Current version of ooDialog in use: 4.2.0" + ${EndIf} + Abort + ${Endif} + + /* Check if the user is forcing the current version to something specific. */ + ${GetOptions} "$CMDLINE" "/F=" $R0 + StrCpy $ForceVersion $R0 + + /* Check if the user is forcing us to be visible. Usefull for debugging. + * This logic is a little convoluted. We check the command line for the + * presence of /V. If it is not there, the error flag is set, and we force + * the installer to silent mode. + */ + ClearErrors + ${GetOptions} "$CMDLINE" "/V" $R0 + ${If} ${Errors} + SetSilent silent + ClearErrors + ${Endif} + + /* Be sure we are installed properly. Note that the UnInstallLocation and the + * InstallLocation keys in the registry contain the same directory. But, the + * UnInstallLocation key has the directory unquoted and InstallLocation quotes + * the directory. For some reason, copying the quoted version drops the ':' + * out of the path, causing things to fail. + */ + ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" + ${If} $RegVal_installedLocation == "" + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "${LONGNAME} has not been installed properly.$\n$\n\ + Please follow the guidelines published for using$\n\ + Switch ooDialog, especially the instructions for$\n\ + installation.$\n$\n\ + Aborting." + Abort + ${Endif} + + /* Be sure, if passed a /F arg, it is correct. */ + ${If} $ForceVersion != "" + ${If} $ForceVersion != 420 + ${AndIf} $ForceVersion != 410 + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "The /F argument of: '$ForceVersion' is not correct.$\n$\n\ + Aborting." + Abort + ${Endif} + ${Endif} + + StrCpy $INSTDIR "$RegVal_installedLocation" + + /* If the user did not force a version, the new version is the opposite of + * the current version. + */ + ${if} $ForceVersion == "" + ${If} $CurrentVersion == 410 + StrCpy $NewVersion 420 + ${Else} + StrCpy $NewVersion 410 + ${Endif} + ${else} + ${If} $ForceVersion == 410 + StrCpy $NewVersion 410 + StrCpy $CurrentVersion 420 + ${Else} + StrCpy $NewVersion 420 + StrCpy $CurrentVersion 410 + ${Endif} + ${endif} + +FunctionEnd + +/** CheckForProblems() + * + * If the ooDialog doc is open, it can not be overwritten and the switched to + * version will have the wrong doc. Or, if a Rexx ooDialog program is running + * oodialog.dll can not be overwritten, and the switched to version will not + * work. + * + * We check for this possible problem by trying to delete the files. If we + * can not, we abort, keeping the current version intact. + */ +Function CheckForProblems + + ClearErrors + Delete $INSTDIR\doc\oodialog.pdf + ${If} ${Errors} + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "switchOODialog detected a problem with oodialog.pdf$\n$\n\ + You MUST close the ooDialog reference documentation and close$\n\ + any running ooDialog programs before executing the Switch$\n\ + ooDialog program.$\n$\n\ + Please close the ooDialog Method Reference documentation, and$\n\ + make sure no ooDialog programs are running.$\n$\n\ + switchOODialog is aborting." + Abort + ${EndIf} + + Delete $INSTDIR\oodialog.dll + ${If} ${Errors} + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "switchOODialog detected a problem with oodialog.dll$\n$\n\ + You MUST close any running ooDialog programs and close$\n\ + the ooDialog reference documentation before executing$\n\ + the Switch ooDialog program.$\n$\n\ + Please close any running ooDialog programs and make sure$\n\ + the ooDialog Method Reference documentation is closed.$\n$\n\ + switchOODialog is aborting." + + ; Restore the oodialog.pdf file deleted above. + SetOutPath $INSTDIR\doc + + ${If} $CurrentVersion == 420 + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" + ${Else} + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" + ${EndIf} + + Abort + ${EndIf} + +FunctionEnd + +/** PrintSwitchInfo() + * + * Print some info on what the switch is doing. This is used for debugging. + * This is never seen, unless the /V options is used. + */ +Function PrintSwitchInfo + + ${If} $NewVersion == 420 + DetailPrint "Current ooDialog Version is: 4.1.0" + DetailPrint "Switching to Version: 4.2.0" + DetailPrint "" + ${Else} + DetailPrint "Current ooDialog Version is: 4.2.0" + DetailPrint "Switching to Version: 4.1.0" + DetailPrint "" + ${Endif} + +FunctionEnd + +/** RemoveFiles() + * + * Deletes all the files in the current ooDialog version that are not present + * in the switch to version. + */ +Function RemoveFiles + + ${If} $NewVersion == 420 + DetailPrint "Removing files not present in ooDialog 4.2.0" + + RMDir /r $INSTDIR\samples\oodialog\source + Delete $INSTDIR\samples\oodialog\bmp\movie.bmp + Delete $INSTDIR\samples\oodialog\bmp\psdemolv.bmp + Delete $INSTDIR\samples\oodialog\bmp\psdemoTab.bmp + Delete $INSTDIR\samples\oodialog\bmp\psdemotv.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticket.bmp + Delete $INSTDIR\samples\oodialog\examples\readme.txt + Delete $INSTDIR\samples\oodialog\ooticket.rex + Delete $INSTDIR\samples\oodialog\propdemo.rex + Delete $INSTDIR\samples\oodialog\rc\movies.rc + Delete $INSTDIR\samples\oodialog\rc\propdemo.rc + Delete $INSTDIR\samples\oodialog\rc\ticket.rc + ${Else} + DetailPrint "Removing files not present in ooDialog 4.1.0" + + RMDir /r $INSTDIR\samples\oodialog\source + Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoListView.bmp + Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoTab.bmp + Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoTreeView.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardMovie.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardRexxLA.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTheater.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTicket.bmp + RMDir /r $INSTDIR\samples\oodialog\controls + Delete $INSTDIR\samples\oodialog\examples\ReadMe.txt + Delete $INSTDIR\samples\oodialog\ooDraw.h + Delete $INSTDIR\samples\oodialog\PropertySheetDemo.rex + Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.h + Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.rc + Delete $INSTDIR\samples\oodialog\rc\ticketWizard.h + Delete $INSTDIR\samples\oodialog\rc\ticketWizard.rc + RMDir /r $INSTDIR\samples\oodialog\simple + Delete $INSTDIR\samples\oodialog\ticketWizard.rex + ${Endif} + + DetailPrint "" + +FunctionEnd Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/deskicon.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/deskicon.rex 2010-11-24 16:54:40 UTC (rev 6414) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/deskicon.rex 2010-11-24 23:13:15 UTC (rev 6415) @@ -92,4 +92,4 @@ return 0 ::requires "winsystm.cls" -::requires "ooDialog.cls" +::requires "oodplain.cls" -- For errorDialog() / askDialog() Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/displayAnyMenu.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/displayAnyMenu.rex 2010-11-24 16:54:40 UTC (rev 6414) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/displayAnyMenu.rex 2010-11-24 23:13:15 UTC (rev 6415) @@ -118,7 +118,7 @@ -- Get the edit control object and then the text the user entered. We only -- instantiate the edit control object the first time through. - if \ edit~isA(.EditControl) then edit = self~newEdit(IDC_EDIT_NAME) + if \ edit~isA(.EditControl) then edit = self~getEditControl(IDC_EDIT_NAME) title = edit~getText~strip -- Check that the user entered something. Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/displayWindowTree.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/displayWindowTree.rex 2010-11-24 16:54:40 UTC (rev 6414) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/displayWindowTree.rex 2010-11-24 23:13:15 UTC (rev 6415) @@ -74,7 +74,7 @@ ::requires "windowsSystem.frm" -::class 'WindowListDlg' public subclass RcDialog +::class 'WindowListDlg' public subclass RcDialog inherit AdvancedControls MessageExtensions /** initAutoDetection() * Prevent ooDialog from fooling with the initialization of our dialog controls. @@ -99,7 +99,7 @@ windows = .array~new -- If we can't get the list view control, something is wrong. - listView = self~newListView(IDC_LV_WINDOWS) + listView = self~getListControl(IDC_LV_WINDOWS) if listView == .nil then return self~putInErrorState("NOLISTVIEW") -- The extended list view styles can only be added after the list view control @@ -273,7 +273,7 @@ -- We will try to disable the 'Show' push button. But, if the dialog is not -- working correctly, it could be that this won't work. - pb = self~newPushButton(IDC_PB_SHOW) + pb = self~getButtonControl(IDC_PB_SHOW) if pb <> .nil then pb~disable return 0 Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/winSystemDlgs.rc =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/winSystemDlgs.rc 2010-11-24 16:54:40 UTC (rev 6414) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/winSystemDlgs.rc 2010-11-24 23:13:15 UTC (rev 6415) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2008-2009 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2008-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: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/windowsSystem.frm =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/windowsSystem.frm 2010-11-24 16:54:40 UTC (rev 6414) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.1.0/winsystem/windowsSystem.frm 2010-11-24 23:13:15 UTC (rev 6415) @@ -49,7 +49,7 @@ */ ::requires 'winsystm.cls' -::requires "ooDialog.cls" +::requires 'oodwin32.cls' /** findTheWindow() * Uses the WindowsManager to create a WindowObject representing a top-level @@ -418,7 +418,7 @@ * @note For an example of how to use this class see the showWindowTree() * public routine in this framework. */ -::class 'WindowTreeDlg' public subclass RcDialog +::class 'WindowTreeDlg' public subclass RcDialog inherit AdvancedControls MessageExtensions /** useTree() * Sets the window tree structure for this dialog. The structure must be set @@ -459,7 +459,7 @@ -- Get the tree-view control object and then invoke the addNode() recursive -- method to add all the items to the control. - tree = self~newTreeView(IDC_TREE_WINDOWS) + tree = self~getTreeControl(IDC_TREE_WINDOWS) rootNode = self~addNode(tree, "Root", windowTree) -- Set the title of this dialog, which will contain the window handle for the @@ -535,7 +535,7 @@ * ooDialog part is only used in the display() method which produces a graphical * dislpay of the menu tree. */ -::class 'MenuDetailer' public subclass RcDialog +::class 'MenuDetailer' public subclass RcDialog inherit AdvancedControls MessageExtensions ::method init use strict arg wnd @@ -829,7 +829,7 @@ -- comment if needed. -- Get the tree-view object, set the first item, expand it. - tree = self~newTreeView(IDC_TREE_MENUS) + tree = self~getTreeControl(IDC_TREE_MENUS) if menubar~itemCount == -1 then do rootText = rootText "[window does not have a menu]" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-11-27 20:16:55
|
Revision: 6416 http://oorexx.svn.sourceforge.net/oorexx/?rev=6416&view=rev Author: miesfeld Date: 2010-11-27 20:16:47 +0000 (Sat, 27 Nov 2010) Log Message: ----------- Enhance the /I behaviour of switch ooDialog. 64-bit fixes for 3.2.0 ooDialog. Prep work to create a switch ooDialog 3.2.0 <-> 4.1.0. Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdata.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdeskt.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovother.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovtext.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovuser.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.cpp sandbox/mark/ooDialog.beta/makeorx.bat sandbox/mark/ooDialog.beta/platform/windows/install/constructOODialogBeta.bat sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi Added Paths: ----------- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi Removed Paths: ------------- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdata.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdata.cpp 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdata.cpp 2010-11-27 20:16:47 UTC (rev 6416) @@ -862,7 +862,7 @@ parent = aDlg->TheDlg; current = parent; next = GetTopWindow(current); - while ((next) && ((HWND)GetWindowLongPtr(next, GWL_HWNDPARENT) == parent)) + while ((next) && ((HWND)GetWindowLongPtr(next, GWLP_HWNDPARENT) == parent)) { current = next; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdeskt.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdeskt.cpp 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovdeskt.cpp 2010-11-27 20:16:47 UTC (rev 6416) @@ -269,7 +269,7 @@ HCURSOR oC, hC; res = atoi(argv[3].strptr); hC = LoadCursor(NULL, MAKEINTRESOURCE(res)); - oC = (HCURSOR)SetClassLongPtr(hW, GCL_HCURSOR, (LONG_PTR)hC); + oC = (HCURSOR)SetClassLongPtr(hW, GCLP_HCURSOR, (LONG_PTR)hC); SetCursor(hC); RETHANDLE(oC) } @@ -277,12 +277,12 @@ { HCURSOR hC = (HCURSOR)GET_HANDLE(argv[3]); if (hC) { - SetClassLongPtr(hW, GCL_HCURSOR, (LONG_PTR)hC); + SetClassLongPtr(hW, GCLP_HCURSOR, (LONG_PTR)hC); RETHANDLE(SetCursor(hC)) } else { - SetClassLongPtr(hW, GCL_HCURSOR, (LONG_PTR)LoadCursor(NULL, IDC_ARROW)); + SetClassLongPtr(hW, GCLP_HCURSOR, (LONG_PTR)LoadCursor(NULL, IDC_ARROW)); RETHANDLE(SetCursor(LoadCursor(NULL, IDC_ARROW))) } } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovother.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovother.cpp 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovother.cpp 2010-11-27 20:16:47 UTC (rev 6416) @@ -771,7 +771,7 @@ HWND ew = TreeView_GetEditControl(h); if (ew) { - WNDPROC oldProc = (WNDPROC)SetWindowLongPtr(ew, GWL_WNDPROC, (LONG_PTR)CatchReturnSubProc); + WNDPROC oldProc = (WNDPROC)SetWindowLongPtr(ew, GWLP_WNDPROC, (LONG_PTR)CatchReturnSubProc); if (oldProc != (WNDPROC)CatchReturnSubProc) lpOldEditProc = oldProc; RETPTR(oldProc) } @@ -783,7 +783,7 @@ HWND ew = TreeView_GetEditControl(h); if (ew) { - SetWindowLongPtr(ew, GWL_WNDPROC, (LONG_PTR)lpOldEditProc); + SetWindowLongPtr(ew, GWLP_WNDPROC, (LONG_PTR)lpOldEditProc); RETC(0) } RETVAL(-1) @@ -1256,11 +1256,11 @@ { if ( argc == 3 ) { - RETVAL(GetWindowLong(hCtrl, GWL_USERDATA)); + RETVAL(GetWindowLong(hCtrl, GWLP_USERDATA)); } else if ( argc == 4 ) { - RETVAL(SetWindowLong(hCtrl, GWL_USERDATA, atol(argv[3].strptr))); + RETVAL(SetWindowLong(hCtrl, GWLP_USERDATA, atol(argv[3].strptr))); } else RETERR } @@ -1768,7 +1768,7 @@ HWND ew = ListView_GetEditControl(h); if (ew) { - WNDPROC oldProc = (WNDPROC)SetWindowLongPtr(ew, GWL_WNDPROC, (LONG_PTR)CatchReturnSubProc); + WNDPROC oldProc = (WNDPROC)SetWindowLongPtr(ew, GWLP_WNDPROC, (LONG_PTR)CatchReturnSubProc); if (oldProc != (WNDPROC)CatchReturnSubProc) lpOldEditProc = oldProc; RETPTR(oldProc) } @@ -1780,7 +1780,7 @@ HWND ew = ListView_GetEditControl(h); if (ew) { - SetWindowLongPtr(ew, GWL_WNDPROC, (LONG_PTR)lpOldEditProc); + SetWindowLongPtr(ew, GWLP_WNDPROC, (LONG_PTR)lpOldEditProc); RETC(0) } RETVAL(-1) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovtext.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovtext.cpp 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovtext.cpp 2010-11-27 20:16:47 UTC (rev 6416) @@ -229,7 +229,7 @@ if (!TimerEvent) { TimerEvent = CreateEvent(NULL, TRUE, TRUE, NULL); - Timer = SetTimer(NULL,GetCurrentThreadId(), sleep, ScrollTimerProc); + Timer = SetTimer(NULL,GetCurrentThreadId(), sleep, (TIMERPROC)ScrollTimerProc); TimerCount++; } else TimerCount++; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovuser.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovuser.cpp 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovuser.cpp 2010-11-27 20:16:47 UTC (rev 6416) @@ -485,8 +485,8 @@ if ( GetDialogIcons(dlgAdm, atoi(argv[7].strptr), TRUE, (PHANDLE)&hBig, (PHANDLE)&hSmall) ) { - dlgAdm->SysMenuIcon = (HICON)SetClassLongPtr(dlgAdm->TheDlg, GCL_HICON, (LONG_PTR)hBig); - dlgAdm->TitleBarIcon = (HICON)SetClassLongPtr(dlgAdm->TheDlg, GCL_HICONSM, (LONG_PTR)hSmall); + dlgAdm->SysMenuIcon = (HICON)SetClassLongPtr(dlgAdm->TheDlg, GCLP_HICON, (LONG_PTR)hBig); + dlgAdm->TitleBarIcon = (HICON)SetClassLongPtr(dlgAdm->TheDlg, GCLP_HICONSM, (LONG_PTR)hSmall); dlgAdm->DidChangeIcon = TRUE; SendMessage(dlgAdm->TheDlg, WM_SETICON, ICON_SMALL, (LPARAM)hSmall); @@ -1160,7 +1160,7 @@ return IsDialogMessage(dlgAdm->TheDlg, lpmsg); default: - hParent = (HWND) GetWindowLongPtr(lpmsg->hwnd, GWL_HWNDPARENT); + hParent = (HWND) GetWindowLongPtr(lpmsg->hwnd, GWLP_HWNDPARENT); if (!hParent) return FALSE; return IsDialogMessage(hParent, lpmsg); } @@ -1170,7 +1170,7 @@ if (lpmsg->wParam == VK_SHIFT) SHIFTkey = FALSE; break; } - hParent = (HWND) GetWindowLongPtr(lpmsg->hwnd, GWL_HWNDPARENT); + hParent = (HWND) GetWindowLongPtr(lpmsg->hwnd, GWLP_HWNDPARENT); if (hParent) return IsDialogMessage(hParent, lpmsg); else return IsDialogMessage(dlgAdm->TheDlg, lpmsg); Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.cpp 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.cpp 2010-11-27 20:16:47 UTC (rev 6416) @@ -472,10 +472,10 @@ */ if ( aDlg->DidChangeIcon ) { - hIconBig = (HICON)SetClassLongPtr(aDlg->TheDlg, GCL_HICON, (LONG_PTR)aDlg->SysMenuIcon); + hIconBig = (HICON)SetClassLongPtr(aDlg->TheDlg, GCLP_HICON, (LONG_PTR)aDlg->SysMenuIcon); if ( aDlg->TitleBarIcon ) { - hIconSmall = (HICON)SetClassLongPtr(aDlg->TheDlg, GCL_HICONSM, (LONG_PTR)aDlg->TitleBarIcon); + hIconSmall = (HICON)SetClassLongPtr(aDlg->TheDlg, GCLP_HICONSM, (LONG_PTR)aDlg->TitleBarIcon); } if ( ! aDlg->SharedIcon ) @@ -483,7 +483,7 @@ DestroyIcon(hIconBig); if ( ! hIconSmall ) { - hIconSmall = (HICON)GetClassLongPtr(aDlg->TheDlg, GCL_HICONSM); + hIconSmall = (HICON)GetClassLongPtr(aDlg->TheDlg, GCLP_HICONSM); } } else @@ -749,8 +749,8 @@ if ( GetDialogIcons(dlgAdm, atoi(argv[5].strptr), FALSE, (PHANDLE)&hBig, (PHANDLE)&hSmall) ) { - dlgAdm->SysMenuIcon = (HICON)SetClassLongPtr(dlgAdm->TheDlg, GCL_HICON, (LONG_PTR)hBig); - dlgAdm->TitleBarIcon = (HICON)SetClassLongPtr(dlgAdm->TheDlg, GCL_HICONSM, (LONG_PTR)hSmall); + dlgAdm->SysMenuIcon = (HICON)SetClassLongPtr(dlgAdm->TheDlg, GCLP_HICON, (LONG_PTR)hBig); + dlgAdm->TitleBarIcon = (HICON)SetClassLongPtr(dlgAdm->TheDlg, GCLP_HICONSM, (LONG_PTR)hSmall); dlgAdm->DidChangeIcon = TRUE; SendMessage(dlgAdm->TheDlg, WM_SETICON, ICON_SMALL, (LPARAM)hSmall); Modified: sandbox/mark/ooDialog.beta/makeorx.bat =================================================================== --- sandbox/mark/ooDialog.beta/makeorx.bat 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/makeorx.bat 2010-11-27 20:16:47 UTC (rev 6416) @@ -159,21 +159,25 @@ REM Make switchOODialog and the ooDialog installer. switchOODialog must be REM built first -makensis %OODDOTVER% %NODOTVER% %SRCDIR% %BINDIR% switchOODialog.nsi -makensis %OODDOTVER% %NODOTVER% %SRCDIR% %SWITCHEXE% %CPUDEF% ooDialogBeta.nsi +makensis %OODDOTVER% %NODOTVER% %SRCDIR% %BINDIR% switchOODialog420_410.nsi +makensis %OODDOTVER% %NODOTVER% %SRCDIR% %SWITCHEXE% %CPUDEF% ooDialog420_410.nsi REM Rename the deug package so it is not overwritten if the release package REM is created. The NSIS scripts names the package: REM "${SHORTNAME}-${VERSION}.${CPU}.exe" +echo Renaming the ooRexx installer ren ooRexx-%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM%.%CPUNAME%.exe ooRexx-%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM%.%CPUNAME%-debug.exe +echo Moving the ooRexx installer move ooRexx-%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM%.%CPUNAME%-debug.exe ..\..\..\ REM Do the same thing with the ooDialog beta package. The NSIS scripts names REM the package: REM "ooDialog-${VERSION}-${CPU}.exe" +echo Renaming the switchOODialog installer ren ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%.exe ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%-debug.exe +echo Moving the switchOODialog installer move ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%-debug.exe ..\..\..\ cd ..\..\..\ Modified: sandbox/mark/ooDialog.beta/platform/windows/install/constructOODialogBeta.bat =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/constructOODialogBeta.bat 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/platform/windows/install/constructOODialogBeta.bat 2010-11-27 20:16:47 UTC (rev 6416) @@ -3,13 +3,13 @@ REM makensis %OODDOTVER% %NODOTVER% %SRCDIR% %SWITCHEXE% %CPUDEF% ooDialogBeta.nsi -makensis /DVERSION=4.2.0.6413 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DBINDIR=C:\work\wc\main.4.1.0.ooDialog\Win32Dbg switchOODialog420_410.nsi +makensis /DVERSION=4.2.0.6413 /DNODOTVER=420 /DSRCDIR=C:\work.ooRexx\wc\main.4.1.0.ooDialog /DBINDIR=C:\work.ooRexx\wc\main.4.1.0.ooDialog\Win32Dbg switchOODialog420_410.nsi if ERRORLEVEL 1 goto error REM makensis %OODDOTVER% %NODOTVER% %SRCDIR% %BINDIR% switchOODialog.nsi -makensis /DVERSION=4.2.0.6413 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog420_421 /DCPU=x86_32 ooDialog420_410.nsi +makensis /DVERSION=4.2.0.6413 /DNODOTVER=420 /DSRCDIR=C:\work.ooRexx\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog420_410 /DCPU=x86_32 ooDialog420_410.nsi if ERRORLEVEL 1 goto error goto aroundError Copied: sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi (from rev 6415, sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi) =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi (rev 0) +++ sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi 2010-11-27 20:16:47 UTC (rev 6416) @@ -0,0 +1,309 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2010 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * ooDialogBeta.nsi + * + * This is a basic NSIS install program, used to install ooDialog 4.2.0 beta. + * + * It also installs switchOODialog. switchOODialog is an executable used to + * switch between the 4.2.0 and 4.1.0 versions of ooDialog. + * + * Run as: + * makensis /DVERSION=x.x.x.x /DNODOTVER=xxx /DSRCDIR=y /DEXEFILE=xxx /DCPU=xxx ooDialogBeta.nsi + * eg + * makensis /DVERSION=4.2.0.6367 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog /DCPU=x86_32 ooDialogBeta.nsi + * + * Note: + * ooDialogBeta.nsi must be in the current directory. + */ + + +;=============================================================================== +;Configuration +;=============================================================================== + +;-------------------------------- +; Defines + + !define LONGNAME "ooDialog ${VERSION} (beta)" ; Our long name + !define SHORTNAME "ooDialogSwitch" ; Our short name + !define InstallFile "${EXEFILE}.exe" ; The switch ooDialog executable renamed on install + !define SourceFile "${EXEFILE}420_410.exe" ; The switch ooDialog output file name. + !define DISPLAYICON "$INSTDIR\ooDialog.dll,2" ; Use the ooDialog icon, the OOD icon + !define REXXSHORTNAME "ooRexx" ; From ooRexx installer. + !define REXXLONGNAME "Open Object Rexx" ; From ooRexx installer + !define UNINSTALLER "uninstall_${EXEFILE}.exe" + + +;-------------------------------- +;Includes + + !include "MUI2.nsh" + !include "Library.nsh" + !include "LogicLib.nsh" + !include "FileFunc.nsh" + !include "WordFunc.nsh" + !include "admin.nsh" + +;-------------------------------- +;General + + Name "ooDialog Beta ${VERSION}" + OutFile "ooDialog-${VERSION}-${CPU}.exe" + ShowInstdetails show + ShowUninstDetails show + SetOverwrite on + SetPluginUnload alwaysoff + RequestExecutionLevel admin + InstallDir "$PROGRAMFILES\ooRexx" + + +;-------------------------------- +;Interface Settings + + !define MUI_ICON "${SRCDIR}\extensions\platform\windows\oodialog.4.2.0\AppIcon2.ico" + !define MUI_UNICON "${SRCDIR}\platform\windows\install\uninstall.ico" + !define MUI_WELCOMEFINISHPAGE_BITMAP "orange.bmp" + !define MUI_UNWELCOMEFINISHPAGE_BITMAP "orange-uninstall.bmp" + + !define MUI_LICENSEPAGE + !define MUI_FINISHPAGE + !define MUI_FINISHPAGE_NOAUTOCLOSE + + !define MUI_ABORTWARNING + + !define MUI_UNINSTALLER + !define MUI_UNFINISHPAGE_NOAUTOCLOSE + +;-------------------------------- +; Variables + + /* The uninstall program for ooRexx is always placed in the ooRexx + * installation directory. This makes the uninstall location equivalent to + * the install location. + */ + Var RegVal_installedLocation ; location of ooRexx uninstall program found in registry + Var RegVal_installedVersion ; Version / level of ooRexx uninstaller program. This only exists at 410 or greater + Var IsAdminUser ; is the installer being run by an admin: true / false + Var SwitchOODialogQualifiedName ; The fully qualified switchOODialog file name. + + Var RegVal_startMenuFolder ; location of, possible, alternate start menu folder + Var RegVal_ourUninstallLocation ; location of ooDialog beta uninstall program + Var RegVal_ourUninstallString ; ooDialog beta uninstall program + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_WELCOME + !insertmacro MUI_PAGE_LICENSE "${SRCDIR}\CPLv1.0.txt" + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_WELCOME + !insertmacro MUI_UNPAGE_INSTFILES + !insertmacro MUI_UNPAGE_FINISH +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + + +;=============================================================================== +;Installer Sections +;=============================================================================== + +Section doInstall + + DetailPrint "********** Installing Switch ooDialog program **********" + DetailPrint "" + + ; If found, we silently uninstall any existing switch ooDialog. + ${If} $RegVal_ourUninstallString != "" + DetailPrint "Found old ooDialog beta, cleaning up." + ExecWait '$RegVal_ourUninstallString /S _?=$RegVal_ourUninstallLocation' $0 + DetailPrint "" + ${Endif} + + ; Only 1 file is installed. + SetOutPath "$INSTDIR" + File /oname=${InstallFile} "${SourceFile}" + + ; Write the uninstall keys. + DetailPrint "Writing uninstall keys." + WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "InstallLocation" '"$INSTDIR"' + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayName" "${LONGNAME}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayIcon" "${DISPLAYICON}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "HelpLink" "http://www.rexxla.org/support.html" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "URLUpdateInfo" "http://sourceforge.net/project/showfiles.php?group_id=119701" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "URLInfoAbout" "http://www.rexxla.org/" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayVersion" "${VERSION}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "Publisher" "Rexx Language Association" + + WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallString" '"$INSTDIR\${UNINSTALLER}"' + WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" "$INSTDIR" ; dont quote it + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallVersion" "${VERSION}" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "NoModify" 0x00000001 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "NoRepair" 0x00000001 + + DetailPrint "Writing current ooDialog version key." + WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "410" + + ; We create the Switch ooDialog short cut within the ooRexx Start Menu folder, if we find it. + ; Otherwise we create a new ooDialog Start Menu folder, and record its name in the registry. + ; Then on uninstall, we check for a recorded name and delete that folder. + ${If} ${FileExists} "$SMPROGRAMS\${REXXLONGNAME}" + DetailPrint "Creating Switch ooDialog short cut in ${REXXLONGNAME} Start Menu folder" + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" '"$SwitchOODialogQualifiedName"' ; Need to double quote. + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 + ${Else} + DetailPrint "Creating Switch ooDialog short cut in ${LONGNAME} Start Menu folder" + CreateDirectory "$SMPROGRAMS\${LONGNAME}" + CreateShortCut "$SMPROGRAMS\${LONGNAME}\Switch ooDialog.lnk" '"$SwitchOODialogQualifiedName"' ; Need to double quote. + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 + WriteRegStr HKLM "Software\${SHORTNAME}" "StartMenuFolder" "$SMPROGRAMS\${LONGNAME}" + ${Endif} + + DetailPrint "Executing Switch ooDialog to set current version to 4.2.0." + ExecWait '"$SwitchOODialogQualifiedName" /F=420' $0 + + WriteUninstaller "$INSTDIR\${UNINSTALLER}" + +SectionEnd + +;=============================================================================== +;Installer Functions +;=============================================================================== + +/** .onInit() Call back function + * + * Called by the installer before any page is shown. We use it to ensure + * ooRexx is installed and the correct version level. + * + * ooRexx needs to be at least 4.1.0. Since 4.1.0 was the first version where + * the UninstallVersion was used, we only need to check if that registry entry + * is the empty string or not. + */ +Function .onInit + + ; See if the installee is an admin. + Call IsUserAdmin + Pop $IsAdminUser + ${if} $IsAdminUser == "true" + SetShellVarContext all + ${endif} + + ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REXXSHORTNAME}" "UnInstallLocation" + ReadRegStr $RegVal_installedVersion HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REXXSHORTNAME}" "UninstallVersion" + + ${if} $RegVal_installedVersion == "" + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "A version of ooRexx, greater than or equal to$\n\ + version 4.1.0, must be installed prior to the$\n\ + installation of ${LONGNAME}.$\n$\n\ + The installer is aborting." + Abort + ${endif} + + StrCpy $INSTDIR $RegVal_installedLocation + StrCpy $SwitchOODialogQualifiedName "$INSTDIR\${InstallFile}" + + ReadRegStr $RegVal_ourUninstallString HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallString" + ReadRegStr $RegVal_ourUninstallLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" + +FunctionEnd + + +;=============================================================================== +; Uninstaller portion of ooDialogBeta.nsi. +;=============================================================================== + +;=============================================================================== +; Uninstaller Sections +;=============================================================================== + +;------------------------------------------------------------------------------- +; Uninstall section +Section "Uninstall" + + DetailPrint "Setting ooDialog back to version 4.1.0" + ExecWait '"$SwitchOODialogQualifiedName" /F=410' $0 + + DetailPrint "Removing registry keys." + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" + DeleteRegKey HKLM "SOFTWARE\${SHORTNAME}" + + DetailPrint "Removing Start Menu items." + ${If} $RegVal_startMenuFolder == "" + Delete "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" + Delete "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" + ${Else} + RMDir /r $RegVal_startMenuFolder + ${Endif} + + DetailPrint "Deleting switch ooDialog program" + Delete $SwitchOODialogQualifiedName + + Delete $INSTDIR\${UNINSTALLER} + +SectionEnd + + +;=============================================================================== +; Uninstaller Functions +;=============================================================================== + +/** un.onInit() Callback function. + * + * Called by the uninstaller program before any pages are shown. + * + */ +Function un.onInit + + ; UnInstall as All Users if an admin + Call un.IsUserAdmin + Pop $IsAdminUser + ${if} $IsAdminUser == "true" + SetShellVarContext all + ${endif} + + ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" + ReadRegStr $RegVal_startMenuFolder HKLM "Software\${SHORTNAME}\" "StartMenuFolder" + + StrCpy $SwitchOODialogQualifiedName "$RegVal_installedLocation\${InstallFile}" +FunctionEnd + Deleted: sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/platform/windows/install/ooDialogBeta.nsi 2010-11-27 20:16:47 UTC (rev 6416) @@ -1,308 +0,0 @@ -/*----------------------------------------------------------------------------*/ -/* */ -/* Copyright (c) 2010-2010 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 */ -/* distribution. A copy is also available at the following address: */ -/* http://www.oorexx.org/license.html */ -/* */ -/* Redistribution and use in source and binary forms, with or */ -/* without modification, are permitted provided that the following */ -/* conditions are met: */ -/* */ -/* Redistributions of source code must retain the above copyright */ -/* notice, this list of conditions and the following disclaimer. */ -/* Redistributions in binary form must reproduce the above copyright */ -/* notice, this list of conditions and the following disclaimer in */ -/* the documentation and/or other materials provided with the distribution. */ -/* */ -/* Neither the name of Rexx Language Association nor the names */ -/* of its contributors may be used to endorse or promote products */ -/* derived from this software without specific prior written permission. */ -/* */ -/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ -/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ -/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ -/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ -/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ -/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ -/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ -/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ -/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ -/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ -/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* */ -/*----------------------------------------------------------------------------*/ - -/** - * ooDialogBeta.nsi - * - * This is a basic NSIS install program, used to install ooDialog 4.2.0 beta. - * - * It also installs switchOODialog. switchOODialog is an executable used to - * switch between the 4.2.0 and 4.1.0 versions of ooDialog. - * - * Run as: - * makensis /DVERSION=x.x.x.x /DNODOTVER=xxx /DSRCDIR=y /DEXEFILE=xxx /DCPU=xxx ooDialogBeta.nsi - * eg - * makensis /DVERSION=4.2.0.6367 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog /DCPU=x86_32 ooDialogBeta.nsi - * - * Note: - * ooDialogBeta.nsi must be in the current directory. - */ - - -;=============================================================================== -;Configuration -;=============================================================================== - -;-------------------------------- -; Defines - - !define LONGNAME "ooDialog ${VERSION} (beta)" ; Our long name - !define SHORTNAME "ooDialogSwitch" ; Our short name - !define InstallFile "${EXEFILE}.exe" ; The switch ooDialog executable - !define DISPLAYICON "$INSTDIR\ooDialog.dll,2" ; Use the ooDialog icon, the OOD icon - !define REXXSHORTNAME "ooRexx" ; From ooRexx installer. - !define REXXLONGNAME "Open Object Rexx" ; From ooRexx installer - !define UNINSTALLER "uninstall_${EXEFILE}.exe" - - -;-------------------------------- -;Includes - - !include "MUI2.nsh" - !include "Library.nsh" - !include "LogicLib.nsh" - !include "FileFunc.nsh" - !include "WordFunc.nsh" - !include "admin.nsh" - -;-------------------------------- -;General - - Name "ooDialog Beta ${VERSION}" - OutFile "ooDialog-${VERSION}-${CPU}.exe" - ShowInstdetails show - ShowUninstDetails show - SetOverwrite on - SetPluginUnload alwaysoff - RequestExecutionLevel admin - InstallDir "$PROGRAMFILES\ooRexx" - - -;-------------------------------- -;Interface Settings - - !define MUI_ICON "${SRCDIR}\extensions\platform\windows\oodialog.4.2.0\AppIcon2.ico" - !define MUI_UNICON "${SRCDIR}\platform\windows\install\uninstall.ico" - !define MUI_WELCOMEFINISHPAGE_BITMAP "orange.bmp" - !define MUI_UNWELCOMEFINISHPAGE_BITMAP "orange-uninstall.bmp" - - !define MUI_LICENSEPAGE - !define MUI_FINISHPAGE - !define MUI_FINISHPAGE_NOAUTOCLOSE - - !define MUI_ABORTWARNING - - !define MUI_UNINSTALLER - !define MUI_UNFINISHPAGE_NOAUTOCLOSE - -;-------------------------------- -; Variables - - /* The uninstall program for ooRexx is always placed in the ooRexx - * installation directory. This makes the uninstall location equivalent to - * the install location. - */ - Var RegVal_installedLocation ; location of ooRexx uninstall program found in registry - Var RegVal_installedVersion ; Version / level of ooRexx uninstaller program. This only exists at 410 or greater - Var IsAdminUser ; is the installer being run by an admin: true / false - Var SwitchOODialogQualifiedName ; The fully qualified switchOODialog file name. - - Var RegVal_startMenuFolder ; location of, possible, alternate start menu folder - Var RegVal_ourUninstallLocation ; location of ooDialog beta uninstall program - Var RegVal_ourUninstallString ; ooDialog beta uninstall program - -;-------------------------------- -;Pages - - !insertmacro MUI_PAGE_WELCOME - !insertmacro MUI_PAGE_LICENSE "${SRCDIR}\CPLv1.0.txt" - !insertmacro MUI_PAGE_INSTFILES - !insertmacro MUI_PAGE_FINISH - - !insertmacro MUI_UNPAGE_WELCOME - !insertmacro MUI_UNPAGE_INSTFILES - !insertmacro MUI_UNPAGE_FINISH -;-------------------------------- -;Languages - - !insertmacro MUI_LANGUAGE "English" - - -;=============================================================================== -;Installer Sections -;=============================================================================== - -Section doInstall - - DetailPrint "********** Installing Switch ooDialog program **********" - DetailPrint "" - - ; If found, we silently uninstall any existing switch ooDialog. - ${If} $RegVal_ourUninstallString != "" - DetailPrint "Found old ooDialog beta, cleaning up." - ExecWait '$RegVal_ourUninstallString /S _?=$RegVal_ourUninstallLocation' $0 - DetailPrint "" - ${Endif} - - ; Only 1 file is installed. - SetOutPath "$INSTDIR" - File "${InstallFile}" - - ; Write the uninstall keys. - DetailPrint "Writing uninstall keys." - WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "InstallLocation" '"$INSTDIR"' - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayName" "${LONGNAME}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayIcon" "${DISPLAYICON}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "HelpLink" "http://www.rexxla.org/support.html" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "URLUpdateInfo" "http://sourceforge.net/project/showfiles.php?group_id=119701" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "URLInfoAbout" "http://www.rexxla.org/" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayVersion" "${VERSION}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "Publisher" "Rexx Language Association" - - WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallString" '"$INSTDIR\${UNINSTALLER}"' - WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" "$INSTDIR" ; dont quote it - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallVersion" "${VERSION}" - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "NoModify" 0x00000001 - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "NoRepair" 0x00000001 - - DetailPrint "Writing current ooDialog version key." - WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "410" - - ; We create the Switch ooDialog short cut within the ooRexx Start Menu folder, if we find it. - ; Otherwise we create a new ooDialog Start Menu folder, and record its name in the registry. - ; Then on uninstall, we check for a recorded name and delete that folder. - ${If} ${FileExists} "$SMPROGRAMS\${REXXLONGNAME}" - DetailPrint "Creating Switch ooDialog short cut in ${REXXLONGNAME} Start Menu folder" - CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" '"$SwitchOODialogQualifiedName"' ; Need to double quote. - CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 - ${Else} - DetailPrint "Creating Switch ooDialog short cut in ${LONGNAME} Start Menu folder" - CreateDirectory "$SMPROGRAMS\${LONGNAME}" - CreateShortCut "$SMPROGRAMS\${LONGNAME}\Switch ooDialog.lnk" '"$SwitchOODialogQualifiedName"' ; Need to double quote. - CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 - WriteRegStr HKLM "Software\${SHORTNAME}" "StartMenuFolder" "$SMPROGRAMS\${LONGNAME}" - ${Endif} - - DetailPrint "Executing Switch ooDialog to set current version to 4.2.0." - ExecWait '"$SwitchOODialogQualifiedName" /F=420' $0 - - WriteUninstaller "$INSTDIR\${UNINSTALLER}" - -SectionEnd - -;=============================================================================== -;Installer Functions -;=============================================================================== - -/** .onInit() Call back function - * - * Called by the installer before any page is shown. We use it to ensure - * ooRexx is installed and the correct version level. - * - * ooRexx needs to be at least 4.1.0. Since 4.1.0 was the first version where - * the UninstallVersion was used, we only need to check if that registry entry - * is the empty string or not. - */ -Function .onInit - - ; See if the installee is an admin. - Call IsUserAdmin - Pop $IsAdminUser - ${if} $IsAdminUser == "true" - SetShellVarContext all - ${endif} - - ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REXXSHORTNAME}" "UnInstallLocation" - ReadRegStr $RegVal_installedVersion HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REXXSHORTNAME}" "UninstallVersion" - - ${if} $RegVal_installedVersion == "" - MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ - "A version of ooRexx, greater than or equal to$\n\ - version 4.1.0, must be installed prior to the$\n\ - installation of ${LONGNAME}.$\n$\n\ - The installer is aborting." - Abort - ${endif} - - StrCpy $INSTDIR $RegVal_installedLocation - StrCpy $SwitchOODialogQualifiedName "$INSTDIR\${InstallFile}" - - ReadRegStr $RegVal_ourUninstallString HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallString" - ReadRegStr $RegVal_ourUninstallLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" - -FunctionEnd - - -;=============================================================================== -; Uninstaller portion of ooDialogBeta.nsi. -;=============================================================================== - -;=============================================================================== -; Uninstaller Sections -;=============================================================================== - -;------------------------------------------------------------------------------- -; Uninstall section -Section "Uninstall" - - DetailPrint "Setting ooDialog back to version 4.1.0" - ExecWait '"$SwitchOODialogQualifiedName" /F=410' $0 - - DetailPrint "Removing registry keys." - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" - DeleteRegKey HKLM "SOFTWARE\${SHORTNAME}" - - DetailPrint "Removing Start Menu items." - ${If} $RegVal_startMenuFolder == "" - Delete "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" - Delete "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" - ${Else} - RMDir /r $RegVal_startMenuFolder - ${Endif} - - DetailPrint "Deleting switch ooDialog program" - Delete $SwitchOODialogQualifiedName - - Delete $INSTDIR\${UNINSTALLER} - -SectionEnd - - -;=============================================================================== -; Uninstaller Functions -;=============================================================================== - -/** un.onInit() Callback function. - * - * Called by the uninstaller program before any pages are shown. - * - */ -Function un.onInit - - ; UnInstall as All Users if an admin - Call un.IsUserAdmin - Pop $IsAdminUser - ${if} $IsAdminUser == "true" - SetShellVarContext all - ${endif} - - ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" - ReadRegStr $RegVal_startMenuFolder HKLM "Software\${SHORTNAME}\" "StartMenuFolder" - - StrCpy $SwitchOODialogQualifiedName "$RegVal_installedLocation\${InstallFile}" -FunctionEnd - Modified: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2010-11-24 23:13:15 UTC (rev 6415) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2010-11-27 20:16:47 UTC (rev 6416) @@ -104,7 +104,7 @@ ;General Name "Switch ooDialog" - OutFile "switchOODialog.exe" + OutFile "switchOODialog420_410.exe" ShowInstdetails show SetOverwrite on SetPluginUnload alwaysoff @@ -126,6 +126,7 @@ Var ForceVersion ; Allows the user to force what ooDialog version is in effect. Var CurrentVersion ; The current ooDialog version, read from the registry Var NewVersion ; The version of ooDialog to switch to. + Var Message ; Used to hold a string. ;-------------------------------- ; Languages @@ -446,17 +447,20 @@ ReadRegStr $CurrentVersion HKLM "Software\${SHORTNAME}" "CurrentVersion" /* Check if the user just wants to know the ooDialog version in effect. */ + ClearErrors ${GetOptions} "$CMDLINE" "/I" $R0 ${IfNot} ${Errors} - ${If} $CurrentVersion == 410 - MessageBox MB_OK "Current version of ooDialog in use: 4.1.0" - ${Else} - MessageBox MB_OK "Current version of ooDialog in use: 4.2.0" - ${EndIf} - Abort + Call DisplayInfo ${Endif} + ClearErrors + ${GetOptions} "$CMDLINE" "/?" $R0 + ${IfNot} ${Errors} + Call DisplayInfo + ${Endif} + /* Check if the user is forcing the current version to something specific. */ + ClearErrors ${GetOptions} "$CMDLINE" "/F=" $R0 StrCpy $ForceVersion $R0 @@ -574,6 +578,36 @@ FunctionEnd +/** DisplayInfo + * + * Puts up a message box to show information on the switchDialog program. + * Called when the /I arg is used. + */ +Function DisplayInfo + + StrCpy $Message \ + "Switches the active version of ooDialog. Syntax:$\n$\n\ + switchOODialog [param]$\n$\n\ + With no argument switches the active ooDialog to the opposite.$\n\ + Valid arguments are:$\n$\n\ + /V Switch ooDialog 'Visibly'.$\n$\n\ + /F=key Force the active version to 'key'.$\n$\n\ + /I Show this information.$\n$\n\ + /? Same as /I.$\n$\n\ + 'key' must be 420 or 410." + + ${If} $CurrentVersion == 410 + MessageBox MB_OK "Switch ooDialog 4.2.0 <<-->> 4.1.0$\n\ + Active version of ooDialog: 4.1.0$\n$\n$\n$Message" + + ${Else} + MessageBox MB_OK "Switch ooDialog 4.2.0 <<-->> 4.1.0$\n\ + Active version of ooDialog: 4.2.0$\n$\n$\n$Message" + ${EndIf} + + Abort +FunctionEnd + /** PrintSwitchInfo() * * Print some info on what the switch is doing. This is used for debugging. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-11-29 06:06:58
|
Revision: 6417 http://oorexx.svn.sourceforge.net/oorexx/?rev=6417&view=rev Author: miesfeld Date: 2010-11-29 06:06:50 +0000 (Mon, 29 Nov 2010) Log Message: ----------- First steps towards creating a switch ooDialog 3.2.0 <-> 4.1.0 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.cpp Added Paths: ----------- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog410_320.nsi sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog410_320.nsi Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.cpp 2010-11-27 20:16:47 UTC (rev 6416) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.3.2.0/oovutil.cpp 2010-11-29 06:06:50 UTC (rev 6417) @@ -1920,13 +1920,13 @@ { itoa(dlgAdm->BmpTab[i].buttonID, data, (dlgAdm->BmpTab[i].Loaded ? 16: 10)); if (!SetRexxStem(buffer, i+1, "ID", data)) { RETERR; } - itoa((LONG)dlgAdm->BmpTab[i].bitmapID, data, (dlgAdm->BmpTab[i].Loaded ? 16: 10)); + pointer2string(data, (void *)dlgAdm->BmpTab[i].bitmapID); if (!SetRexxStem(buffer, i+1, "Normal", data)) { RETERR; } - itoa((LONG)dlgAdm->BmpTab[i].bmpFocusID, data, (dlgAdm->BmpTab[i].Loaded ? 16: 10)); + pointer2string(data, (void *)dlgAdm->BmpTab[i].bmpFocusID); if (!SetRexxStem(buffer, i+1, "Focused", data)) { RETERR; } - itoa((LONG)dlgAdm->BmpTab[i].bmpSelectID, data, (dlgAdm->BmpTab[i].Loaded ? 16: 10)); + pointer2string(data, (void *)dlgAdm->BmpTab[i].bmpSelectID); if (!SetRexxStem(buffer, i+1, "Selected", data)) { RETERR; } - itoa((LONG)dlgAdm->BmpTab[i].bmpDisableID, data, (dlgAdm->BmpTab[i].Loaded ? 16: 10)); + pointer2string(data, (void *)dlgAdm->BmpTab[i].bmpDisableID); if (!SetRexxStem(buffer, i+1, "Disabled", data)) { RETERR; } } itoa(dlgAdm->MT_size, data, 10); @@ -1934,7 +1934,7 @@ sprintf(buffer, "%s.%s", argv[0].strptr, "MsgTab"); for (i=0; i<dlgAdm->MT_size; i++) { - pointer2string(data, (void *)dlgAdm->MsgTab[i].msg); + ultoa(dlgAdm->MsgTab[i].msg, data, 16); if (!SetRexxStem(buffer, i+1, "msg", data)) { RETERR; } pointer2string(data, (void *)dlgAdm->MsgTab[i].wParam); if (!SetRexxStem(buffer, i+1, "param1", data)) { RETERR; } Copied: sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog410_320.nsi (from rev 6416, sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi) =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog410_320.nsi (rev 0) +++ sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog410_320.nsi 2010-11-29 06:06:50 UTC (rev 6417) @@ -0,0 +1,309 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2010 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * ooDialogBeta.nsi + * + * This is a basic NSIS install program, used to install Switch ooDialog + * 4.1.0 <<-->> 3.2.0. + * + * Run as: + * makensis /DVERSION=x.x.x.x /DNODOTVER=xxx /DSRCDIR=y /DEXEFILE=xxx /DCPU=xxx ooDialogBeta.nsi + * eg + * makensis /DVERSION=4.1.0.6367 /DNODOTVER=410 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog /DCPU=x86_32 ooDialogBeta.nsi + * + * Note: + * ooDialogBeta.nsi must be in the current directory. + */ + + +;=============================================================================== +;Configuration +;=============================================================================== + +;-------------------------------- +; Defines + + !define LONGNAME "ooDialog ${VERSION}" ; Our long name + !define SHORTNAME "ooDialogSwitch" ; Our short name + !define InstallFile "${EXEFILE}.exe" ; The switch ooDialog executable renamed on install + !define SourceFile "${EXEFILE}320_410.exe" ; The switch ooDialog output file name. + !define DISPLAYICON "$INSTDIR\ooDialog.dll,2" ; Use the ooDialog icon, the OOD icon + !define REXXSHORTNAME "ooRexx" ; From ooRexx installer. + !define REXXLONGNAME "Open Object Rexx" ; From ooRexx installer + !define UNINSTALLER "uninstall_${EXEFILE}.exe" + + +;-------------------------------- +;Includes + + !include "MUI2.nsh" + !include "Library.nsh" + !include "LogicLib.nsh" + !include "FileFunc.nsh" + !include "WordFunc.nsh" + !include "admin.nsh" + +;-------------------------------- +;General + + Name "Switch ooDialog 4.1.0 <<-->> 3.2.0" + OutFile "ooDialog-${VERSION}-${CPU}.exe" + ShowInstdetails show + ShowUninstDetails show + SetOverwrite on + SetPluginUnload alwaysoff + RequestExecutionLevel admin + InstallDir "$PROGRAMFILES\ooRexx" + + +;-------------------------------- +;Interface Settings + + !define MUI_ICON "${SRCDIR}\extensions\platform\windows\oodialog.4.1.0\AppIcon2.ico" + !define MUI_UNICON "${SRCDIR}\platform\windows\install\uninstall.ico" + !define MUI_WELCOMEFINISHPAGE_BITMAP "orange.bmp" + !define MUI_UNWELCOMEFINISHPAGE_BITMAP "orange-uninstall.bmp" + + !define MUI_LICENSEPAGE + !define MUI_FINISHPAGE + !define MUI_FINISHPAGE_NOAUTOCLOSE + + !define MUI_ABORTWARNING + + !define MUI_UNINSTALLER + !define MUI_UNFINISHPAGE_NOAUTOCLOSE + +;-------------------------------- +; Variables + + /* The uninstall program for ooRexx is always placed in the ooRexx + * installation directory. This makes the uninstall location equivalent to + * the install location. + */ + Var RegVal_installedLocation ; location of ooRexx uninstall program found in registry + Var IsAdminUser ; is the installer being run by an admin: true / false + Var SwitchOODialogQualifiedName ; The fully qualified switchOODialog file name. + + Var RegVal_startMenuFolder ; location of, possible, alternate start menu folder + Var RegVal_ourUninstallLocation ; location of ooDialog beta uninstall program + Var RegVal_ourUninstallString ; ooDialog beta uninstall program + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_WELCOME + !insertmacro MUI_PAGE_LICENSE "${SRCDIR}\CPLv1.0.txt" + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_WELCOME + !insertmacro MUI_UNPAGE_INSTFILES + !insertmacro MUI_UNPAGE_FINISH +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + + +;=============================================================================== +;Installer Sections +;=============================================================================== + +Section doInstall + + DetailPrint "********** Installing Switch ooDialog program **********" + DetailPrint "" + + ; If found, we silently uninstall any existing switch ooDialog. + ${If} $RegVal_ourUninstallString != "" + DetailPrint "Found existing Switch ooDialog, cleaning up." + ExecWait '$RegVal_ourUninstallString /S _?=$RegVal_ourUninstallLocation' $0 + DetailPrint "" + ${Endif} + + ; Only 1 file is installed. + SetOutPath "$INSTDIR" + File /oname=${InstallFile} "${SourceFile}" + + ; Write the uninstall keys. + DetailPrint "Writing uninstall keys." + WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "InstallLocation" '"$INSTDIR"' + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayName" "${LONGNAME}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayIcon" "${DISPLAYICON}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "HelpLink" "http://www.rexxla.org/support.html" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "URLUpdateInfo" "http://sourceforge.net/project/showfiles.php?group_id=119701" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "URLInfoAbout" "http://www.rexxla.org/" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayVersion" "${VERSION}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "Publisher" "Rexx Language Association" + + WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallString" '"$INSTDIR\${UNINSTALLER}"' + WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" "$INSTDIR" ; dont quote it + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallVersion" "${VERSION}" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "NoModify" 0x00000001 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "NoRepair" 0x00000001 + + DetailPrint "Writing current ooDialog version key." + WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "320" + + ; We create the Switch ooDialog short cut within the ooRexx Start Menu folder, if we find it. + ; Otherwise we create a new ooDialog Start Menu folder, and record its name in the registry. + ; Then on uninstall, we check for a recorded name and delete that folder. + ${If} ${FileExists} "$SMPROGRAMS\${REXXLONGNAME}" + DetailPrint "Creating Switch ooDialog short cut in ${REXXLONGNAME} Start Menu folder" + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" '"$SwitchOODialogQualifiedName"' ; Need to double quote. + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 + ${Else} + DetailPrint "Creating Switch ooDialog short cut in ${LONGNAME} Start Menu folder" + CreateDirectory "$SMPROGRAMS\${LONGNAME}" + CreateShortCut "$SMPROGRAMS\${LONGNAME}\Switch ooDialog.lnk" '"$SwitchOODialogQualifiedName"' ; Need to double quote. + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 + WriteRegStr HKLM "Software\${SHORTNAME}" "StartMenuFolder" "$SMPROGRAMS\${LONGNAME}" + ${Endif} + + DetailPrint "Executing Switch ooDialog to set current version to 3.2.0." + ExecWait '"$SwitchOODialogQualifiedName" /F=320' $0 + + WriteUninstaller "$INSTDIR\${UNINSTALLER}" + +SectionEnd + +;=============================================================================== +;Installer Functions +;=============================================================================== + +/** .onInit() Call back function + * + * Called by the installer before any page is shown. We use it to ensure + * ooRexx is installed and the correct version level. + * + * ooRexx needs to be at least 4.0.0. Since 4.1.0 was the first version where + * the UninstallVersion was used, there is a problem here in identifying which + * version of ooRexx is actually installed. Rather than worry about, if the + * user installs Switch ooDialog, the ooDialogs won't work. + */ +Function .onInit + + ; See if the installee is an admin. + Call IsUserAdmin + Pop $IsAdminUser + ${if} $IsAdminUser == "true" + SetShellVarContext all + ${endif} + + ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REXXSHORTNAME}" "UnInstallLocation" + ReadRegStr $RegVal_installedVersion HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REXXSHORTNAME}" "UninstallVersion" + + ${if} $RegVal_installedLocation == "" + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "A version of ooRexx, greater than or equal to$\n\ + version 4.0.0, must be installed prior to the$\n\ + installation of ${LONGNAME}.$\n$\n\ + The installer is aborting." + Abort + ${endif} + + StrCpy $INSTDIR $RegVal_installedLocation + StrCpy $SwitchOODialogQualifiedName "$INSTDIR\${InstallFile}" + + ReadRegStr $RegVal_ourUninstallString HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallString" + ReadRegStr $RegVal_ourUninstallLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" + +FunctionEnd + + +;=============================================================================== +; Uninstaller portion of ooDialogBeta.nsi. +;=============================================================================== + +;=============================================================================== +; Uninstaller Sections +;=============================================================================== + +;------------------------------------------------------------------------------- +; Uninstall section +Section "Uninstall" + + ; Need to remember to put in release notes that the user can not go back to + ; the 4.0.0 or 4.0.1 shipped ooDialog. + DetailPrint "Setting ooDialog back to version 4.1.0" + ExecWait '"$SwitchOODialogQualifiedName" /F=410' $0 + + DetailPrint "Removing registry keys." + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" + DeleteRegKey HKLM "SOFTWARE\${SHORTNAME}" + + DetailPrint "Removing Start Menu items." + ${If} $RegVal_startMenuFolder == "" + Delete "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" + Delete "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" + ${Else} + RMDir /r $RegVal_startMenuFolder + ${Endif} + + DetailPrint "Deleting Switch ooDialog program" + Delete $SwitchOODialogQualifiedName + + Delete $INSTDIR\${UNINSTALLER} + +SectionEnd + + +;=============================================================================== +; Uninstaller Functions +;=============================================================================== + +/** un.onInit() Callback function. + * + * Called by the uninstaller program before any pages are shown. + * + */ +Function un.onInit + + ; UnInstall as All Users if an admin + Call un.IsUserAdmin + Pop $IsAdminUser + ${if} $IsAdminUser == "true" + SetShellVarContext all + ${endif} + + ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" + ReadRegStr $RegVal_startMenuFolder HKLM "Software\${SHORTNAME}\" "StartMenuFolder" + + StrCpy $SwitchOODialogQualifiedName "$RegVal_installedLocation\${InstallFile}" +FunctionEnd + Copied: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog410_320.nsi (from rev 6416, sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi) =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog410_320.nsi (rev 0) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog410_320.nsi 2010-11-29 06:06:50 UTC (rev 6417) @@ -0,0 +1,677 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2010 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * switchOODialog.nsi + * + * Take advantage of NSIS's builtin compression and unpackaging to produce an + * executable to switch between 4.1.0 and 4.2.0 versions of ooDialog. The + * basic steps to do the switch are: + * + * * Read the registry to get our installed location, abort if not correct. + * + * * Read the registry to get the current version of ooDialog, switch to the + * other version. + * + * * Do the switch by: Deleting all files and directories in the current + * ooDialog that are not in the switch-to version. Install, by over-writing, + * all files in the switch-to version. + * + * One basic problem that can happen is if the user has an ooDialog program + * running or the ooDialog PDF doc open. This will prevent the installer from + * overwriting oodialg.dll and / or oodialog.pdf. To prevent this, we first + * try to delete oodialog.pdf and oodialog.dll and abort the install if the + * delete fails. + * + * The other problem would be if the user uninstalls ooRexx completely without + * first uninstalling ooDialog beta. Some switch ooDialog stuff may not get + * cleaned up. + * + * switchOODialog can take several arguments + * + * switchOODialog /F=<version> Force version. <version> Must be 410 or 420 + * + * switchOODialog /V Show the installer + * By default, switchOODialog is invisible. + * This is useful for debugging. + * + * switchOODialog /I Displays the current ooDialog version in + * effect. + */ + + +;=============================================================================== +;Configuration +;=============================================================================== + +;-------------------------------- +; Defines + + !define SHORTNAME "ooDialogSwitch" ; Must be in sync with the ooDialogBeta SHORTNAME + !define LONGNAME "ooDialog ${VERSION} (beta)" + + !Define BinDir410 "${BINDIR}\oodialog410" + !Define BinDir420 "${BINDIR}\oodialog420" + !define SrcDir410 "${SRCDIR}\extensions\platform\windows\oodialog.4.1.0" + !define SrcDir420 "${SRCDIR}\extensions\platform\windows\oodialog.4.2.0" + !Define SamplesDir410 "${SRCDIR}\samples\windows\oodialog.4.1.0" + !Define SamplesDir420 "${SRCDIR}\samples\windows\oodialog.4.2.0" + +;-------------------------------- +;Includes + + !include "MUI2.nsh" + !include "Library.nsh" + !include "LogicLib.nsh" + !include "FileFunc.nsh" + !include "admin.nsh" + +;-------------------------------- +;General + + Name "Switch ooDialog" + OutFile "switchOODialog420_410.exe" + ShowInstdetails show + SetOverwrite on + SetPluginUnload alwaysoff + RequestExecutionLevel admin + InstallDir "$PROGRAMFILES\ooRexx" + + +;-------------------------------- +;Interface Settings + + !define MUI_ICON "${SRCDIR}\extensions\platform\windows\oodialog.4.2.0\AppIcon2.ico" + !define MUI_UNICON "${SRCDIR}\platform\windows\install\uninstall.ico" + +;-------------------------------- +; Variables + + Var RegVal_installedLocation ; Our installed location, found in the registry + Var RegVal_installedVersion ; Don't need this Version / level of uninstaller program. This only exists at 410 or greater + Var ForceVersion ; Allows the user to force what ooDialog version is in effect. + Var CurrentVersion ; The current ooDialog version, read from the registry + Var NewVersion ; The version of ooDialog to switch to. + Var Message ; Used to hold a string. + +;-------------------------------- +; Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +; Pages. Even though we usually do not show any pages, the INSTFILES page is +; usefull for debugging. The /V option will let us see the page. + + !insertmacro MUI_PAGE_INSTFILES + + +;=============================================================================== +;Installer Sections +;=============================================================================== + +;Section "Dummy Section" SecDummy +Section doSwitch + + Call PrintSwitchInfo + + Call CheckForProblems + + ; Set the installation directory: + SetOutPath "$INSTDIR" + DetailPrint "" + + Call RemoveFiles + + ${If} $NewVersion == 420 + DetailPrint "********** ooDialog 4.2.0 Framework **********" + File "${BinDir420}\oodialog.dll" + File "${BinDir420}\ooDialog.cls" + File "${BinDir420}\oodPlain.cls" + File "${BinDir420}\oodWin32.cls" + DetailPrint "" + + DetailPrint "********** ooDialog 4.2.0 Documentation **********" + ; Set the installation directory: + SetOutPath $INSTDIR\doc + ; Add the files ... + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" + DetailPrint "" + + DetailPrint "********** ooDialog 4.2.0 Samples **********" + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog + ; Add the files ... + File "${SrcDir420}\oodialog.ico" + File "${SamplesDir420}\*.rex" + File "${SamplesDir420}\*.h" + File "${SamplesDir420}\*.inp" + File "${SamplesDir420}\*.ico" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\bmp + ; Add the files ... + File "${SamplesDir420}\bmp\*.bmp" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\controls + ; Add the files ... + File "${SamplesDir420}\controls\*.rex" + File "${SamplesDir420}\controls\*.rc" + File "${SamplesDir420}\controls\*.h" + File "${SamplesDir420}\controls\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples + ; Add the files ... + File "${SamplesDir420}\examples\*.rex" + File "${SamplesDir420}\examples\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples\resources + ; Add the files ... + File "${SamplesDir420}\examples\resources\*.bmp" + File "${SamplesDir420}\examples\resources\*.h" + File "${SamplesDir420}\examples\resources\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\oleinfo + ; Add the files ... + File "${SamplesDir420}\oleinfo\*.rex" + File "${SamplesDir420}\oleinfo\*.txt" + File "${SamplesDir420}\oleinfo\*.bmp" + File "${SamplesDir420}\oleinfo\*.rc" + + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry + ; Add the files ... + File "${SamplesDir420}\ooRexxTry\ooRexxTry.rex" + + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry\doc + ; Add the files ... + File "${SamplesDir420}\ooRexxTry\doc\ooRexxTry.pdf" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\rc + ; Add the files ... + File "${SamplesDir420}\rc\*.rc" + File "${SamplesDir420}\rc\*.h" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\res + ; Add the files ... + File "${SamplesDir420}\res\*.res" + File "${SamplesDir420}\res\*.dll" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\simple + ; Add the files ... + File "${SamplesDir420}\simple\*.rex" + File "${SamplesDir420}\simple\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\sysinfo + ; Add the files ... + File "${SamplesDir420}\sysinfo\*.rex" + File "${SamplesDir420}\sysinfo\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\source + ; Add the files ... + File "${BinDir420}\ooDialog.cls" + File "${BinDir420}\oodWin32.cls" + File "${BinDir420}\oodPlain.cls" + File "${SrcDir420}\0_READ_ME_FIRST.txt" + File "${SrcDir420}\build_ooDialog_cls.rex" + File "${SrcDir420}\AnimatedButton.cls" + File "${SrcDir420}\BaseDialog.cls" + File "${SrcDir420}\CategoryDialog.cls" + File "${SrcDir420}\ControlDialog.cls" + File "${SrcDir420}\DeprecatedClasses.cls" + File "${SrcDir420}\DialogControls.cls" + File "${SrcDir420}\DialogExtensions.cls" + File "${SrcDir420}\DynamicDialog.cls" + File "${SrcDir420}\EventNotification.cls" + File "${SrcDir420}\Menu.cls" + File "${SrcDir420}\PlainBaseDialog.cls" + File "${SrcDir420}\PropertySheet.cls" + File "${SrcDir420}\RcDialog.cls" + File "${SrcDir420}\ResDialog.cls" + File "${SrcDir420}\UserDialog.cls" + File "${SrcDir420}\UtilityClasses.cls" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\tutorial + ; Add the files ... + File "${SamplesDir420}\tutorial\*.rex" + File "${SamplesDir420}\tutorial\*.bmp" + File "${SamplesDir420}\tutorial\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\wav + ; Add the files ... + File "${SamplesDir420}\wav\*.wav" + File "${SamplesDir420}\wav\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\winsystem + File "${SamplesDir420}\winsystem\*.rex" + File "${SamplesDir420}\winsystem\*.rc" + File "${SamplesDir420}\winsystem\*.h" + File "${SamplesDir420}\winsystem\*.frm" + DetailPrint "" + + ; Record the ooDialog version now in effect: + DetailPrint "Recording ooDialog version now in effect: 4.2.0" + WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "420" + ${Else} + DetailPrint "********** ooDialog 4.1.0 Framework **********" + File "${BinDir410}\oodialog.dll" + File "${BinDir410}\OODIALOG.CLS" + File "${BinDir410}\OODPLAIN.CLS" + File "${BinDir410}\OODWIN32.CLS" + DetailPrint "" + + DetailPrint "********** ooDialog 4.1.0 Documentation **********" + ; Set the installation directory: + SetOutPath $INSTDIR\doc + ; Add the files ... + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" + DetailPrint "" + + DetailPrint "********** ooDialog 4.1.0 Samples **********" + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog + ; Add the files ... + File "${SrcDir410}\oodialog.ico" + File "${SamplesDir410}\*.rex" + File "${SamplesDir410}\*.inp" + File "${SamplesDir410}\*.ico" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\bmp + ; Add the files ... + File "${SamplesDir410}\bmp\*.bmp" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples + ; Add the files ... + File "${SamplesDir410}\examples\*.rex" + File "${SamplesDir410}\examples\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\examples\resources + ; Add the files ... + File "${SamplesDir410}\examples\resources\*.bmp" + File "${SamplesDir410}\examples\resources\*.h" + File "${SamplesDir410}\examples\resources\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\oleinfo + ; Add the files ... + File "${SamplesDir410}\oleinfo\*.rex" + File "${SamplesDir410}\oleinfo\*.txt" + File "${SamplesDir410}\oleinfo\*.bmp" + File "${SamplesDir410}\oleinfo\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry + ; Add the files ... + File "${SamplesDir410}\ooRexxTry\ooRexxTry.rex" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\ooRexxTry\doc + ; Add the files ... + File "${SamplesDir410}\ooRexxTry\doc\ooRexxTry.pdf" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\rc + ; Add the files ... + File "${SamplesDir410}\rc\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\res + ; Add the files ... + File "${SamplesDir410}\res\*.res" + File "${SamplesDir410}\res\*.dll" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\sysinfo + ; Add the files ... + File "${SamplesDir410}\sysinfo\*.rex" + File "${SamplesDir410}\sysinfo\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\source + ; Add the files ... + File "${BinDir410}\OODIALOG.CLS" + File "${BinDir410}\OODWIN32.CLS" + File "${BinDir410}\OODPLAIN.CLS" + File "${SrcDir410}\advctrl.cls" + File "${SrcDir410}\anibuttn.cls" + File "${SrcDir410}\basedlg.cls" + File "${SrcDir410}\build.rex" + File "${SrcDir410}\catdlg.cls" + File "${SrcDir410}\dialog.cls" + File "${SrcDir410}\dlgext.cls" + File "${SrcDir410}\dyndlg.cls" + File "${SrcDir410}\makedll.bat" + File "${SrcDir410}\msgext.cls" + File "${SrcDir410}\oodutils.cls" + File "${SrcDir410}\plbdlg.cls" + File "${SrcDir410}\pludlg.cls" + File "${SrcDir410}\propsht.cls" + File "${SrcDir410}\resdlg.cls" + File "${SrcDir410}\stddlg.cls" + File "${SrcDir410}\stdext.cls" + File "${SrcDir410}\userdlg.cls" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\tutorial + ; Add the files ... + File "${SamplesDir410}\tutorial\*.rex" + File "${SamplesDir410}\tutorial\*.bmp" + File "${SamplesDir410}\tutorial\*.rc" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\wav + ; Add the files ... + File "${SamplesDir410}\wav\*.wav" + File "${SamplesDir410}\wav\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\winsystem + ; Add the files ... + File "${SamplesDir410}\winsystem\*.rex" + File "${SamplesDir410}\winsystem\*.rc" + File "${SamplesDir410}\winsystem\*.h" + File "${SamplesDir410}\winsystem\*.frm" + DetailPrint "" + + ; Record the ooDialog version now in effect: + DetailPrint "Recording ooDialog version now in effect: 4.1.0" + WriteRegStr HKLM "Software\${SHORTNAME}" "CurrentVersion" "410" + ${Endif} + +SectionEnd + +;=============================================================================== +;Installer Functions +;=============================================================================== + +/** .onInit() Call back function + * + * Called by the installer before any page is shown. We use it to ensure + * ooRexx is installed and the correct version level. If so, we check the + * version of ooDialog currently in effect, (by reading the registry) and swap + * it. + */ +Function .onInit + + /* We read the current version key first so we can do an early abort for the + * /I option. + */ + ReadRegStr $CurrentVersion HKLM "Software\${SHORTNAME}" "CurrentVersion" + + /* Check if the user just wants to know the ooDialog version in effect. */ + ClearErrors + ${GetOptions} "$CMDLINE" "/I" $R0 + ${IfNot} ${Errors} + Call DisplayInfo + ${Endif} + + ClearErrors + ${GetOptions} "$CMDLINE" "/?" $R0 + ${IfNot} ${Errors} + Call DisplayInfo + ${Endif} + + /* Check if the user is forcing the current version to something specific. */ + ClearErrors + ${GetOptions} "$CMDLINE" "/F=" $R0 + StrCpy $ForceVersion $R0 + + /* Check if the user is forcing us to be visible. Usefull for debugging. + * This logic is a little convoluted. We check the command line for the + * presence of /V. If it is not there, the error flag is set, and we force + * the installer to silent mode. + */ + ClearErrors + ${GetOptions} "$CMDLINE" "/V" $R0 + ${If} ${Errors} + SetSilent silent + ClearErrors + ${Endif} + + /* Be sure we are installed properly. Note that the UnInstallLocation and the + * InstallLocation keys in the registry contain the same directory. But, the + * UnInstallLocation key has the directory unquoted and InstallLocation quotes + * the directory. For some reason, copying the quoted version drops the ':' + * out of the path, causing things to fail. + */ + ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" + ${If} $RegVal_installedLocation == "" + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "${LONGNAME} has not been installed properly.$\n$\n\ + Please follow the guidelines published for using$\n\ + Switch ooDialog, especially the instructions for$\n\ + installation.$\n$\n\ + Aborting." + Abort + ${Endif} + + /* Be sure, if passed a /F arg, it is correct. */ + ${If} $ForceVersion != "" + ${If} $ForceVersion != 420 + ${AndIf} $ForceVersion != 410 + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "The /F argument of: '$ForceVersion' is not correct.$\n$\n\ + Aborting." + Abort + ${Endif} + ${Endif} + + StrCpy $INSTDIR "$RegVal_installedLocation" + + /* If the user did not force a version, the new version is the opposite of + * the current version. + */ + ${if} $ForceVersion == "" + ${If} $CurrentVersion == 410 + StrCpy $NewVersion 420 + ${Else} + StrCpy $NewVersion 410 + ${Endif} + ${else} + ${If} $ForceVersion == 410 + StrCpy $NewVersion 410 + StrCpy $CurrentVersion 420 + ${Else} + StrCpy $NewVersion 420 + StrCpy $CurrentVersion 410 + ${Endif} + ${endif} + +FunctionEnd + +/** CheckForProblems() + * + * If the ooDialog doc is open, it can not be overwritten and the switched to + * version will have the wrong doc. Or, if a Rexx ooDialog program is running + * oodialog.dll can not be overwritten, and the switched to version will not + * work. + * + * We check for this possible problem by trying to delete the files. If we + * can not, we abort, keeping the current version intact. + */ +Function CheckForProblems + + ClearErrors + Delete $INSTDIR\doc\oodialog.pdf + ${If} ${Errors} + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "switchOODialog detected a problem with oodialog.pdf$\n$\n\ + You MUST close the ooDialog reference documentation and close$\n\ + any running ooDialog programs before executing the Switch$\n\ + ooDialog program.$\n$\n\ + Please close the ooDialog Method Reference documentation, and$\n\ + make sure no ooDialog programs are running.$\n$\n\ + switchOODialog is aborting." + Abort + ${EndIf} + + Delete $INSTDIR\oodialog.dll + ${If} ${Errors} + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "switchOODialog detected a problem with oodialog.dll$\n$\n\ + You MUST close any running ooDialog programs and close$\n\ + the ooDialog reference documentation before executing$\n\ + the Switch ooDialog program.$\n$\n\ + Please close any running ooDialog programs and make sure$\n\ + the ooDialog Method Reference documentation is closed.$\n$\n\ + switchOODialog is aborting." + + ; Restore the oodialog.pdf file deleted above. + SetOutPath $INSTDIR\doc + + ${If} $CurrentVersion == 420 + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" + ${Else} + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" + ${EndIf} + + Abort + ${EndIf} + +FunctionEnd + +/** DisplayInfo + * + * Puts up a message box to show information on the switchDialog program. + * Called when the /I arg is used. + */ +Function DisplayInfo + + StrCpy $Message \ + "Switches the active version of ooDialog. Syntax:$\n$\n\ + switchOODialog [param]$\n$\n\ + With no argument switches the active ooDialog to the opposite.$\n\ + Valid arguments are:$\n$\n\ + /V Switch ooDialog 'Visibly'.$\n$\n\ + /F=key Force the active version to 'key'.$\n$\n\ + /I Show this information.$\n$\n\ + /? Same as /I.$\n$\n\ + 'key' must be 420 or 410." + + ${If} $CurrentVersion == 410 + MessageBox MB_OK "Switch ooDialog 4.2.0 <<-->> 4.1.0$\n\ + Active version of ooDialog: 4.1.0$\n$\n$\n$Message" + + ${Else} + MessageBox MB_OK "Switch ooDialog 4.2.0 <<-->> 4.1.0$\n\ + Active version of ooDialog: 4.2.0$\n$\n$\n$Message" + ${EndIf} + + Abort +FunctionEnd + +/** PrintSwitchInfo() + * + * Print some info on what the switch is doing. This is used for debugging. + * This is never seen, unless the /V options is used. + */ +Function PrintSwitchInfo + + ${If} $NewVersion == 420 + DetailPrint "Current ooDialog Version is: 4.1.0" + DetailPrint "Switching to Version: 4.2.0" + DetailPrint "" + ${Else} + DetailPrint "Current ooDialog Version is: 4.2.0" + DetailPrint "Switching to Version: 4.1.0" + DetailPrint "" + ${Endif} + +FunctionEnd + +/** RemoveFiles() + * + * Deletes all the files in the current ooDialog version that are not present + * in the switch to version. + */ +Function RemoveFiles + + ${If} $NewVersion == 420 + DetailPrint "Removing files not present in ooDialog 4.2.0" + + RMDir /r $INSTDIR\samples\oodialog\source + Delete $INSTDIR\samples\oodialog\bmp\movie.bmp + Delete $INSTDIR\samples\oodialog\bmp\psdemolv.bmp + Delete $INSTDIR\samples\oodialog\bmp\psdemoTab.bmp + Delete $INSTDIR\samples\oodialog\bmp\psdemotv.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticket.bmp + Delete $INSTDIR\samples\oodialog\examples\readme.txt + Delete $INSTDIR\samples\oodialog\ooticket.rex + Delete $INSTDIR\samples\oodialog\propdemo.rex + Delete $INSTDIR\samples\oodialog\rc\movies.rc + Delete $INSTDIR\samples\oodialog\rc\propdemo.rc + Delete $INSTDIR\samples\oodialog\rc\ticket.rc + ${Else} + DetailPrint "Removing files not present in ooDialog 4.1.0" + + RMDir /r $INSTDIR\samples\oodialog\source + Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoListView.bmp + Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoTab.bmp + Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoTreeView.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardMovie.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardRexxLA.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTheater.bmp + Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTicket.bmp + RMDir /r $INSTDIR\samples\oodialog\controls + Delete $INSTDIR\samples\oodialog\examples\ReadMe.txt + Delete $INSTDIR\samples\oodialog\ooDraw.h + Delete $INSTDIR\samples\oodialog\PropertySheetDemo.rex + Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.h + Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.rc + Delete $INSTDIR\samples\oodialog\rc\ticketWizard.h + Delete $INSTDIR\samples\oodialog\rc\ticketWizard.rc + RMDir /r $INSTDIR\samples\oodialog\simple + Delete $INSTDIR\samples\oodialog\ticketWizard.rex + ${Endif} + + DetailPrint "" + +FunctionEnd This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-12-05 18:41:19
|
Revision: 6442 http://oorexx.svn.sourceforge.net/oorexx/?rev=6442&view=rev Author: miesfeld Date: 2010-12-05 18:41:12 +0000 (Sun, 05 Dec 2010) Log Message: ----------- Sync my sandbox version with the 4.1.0 branch up through r6424 Modified Paths: -------------- sandbox/mark/ooDialog.beta/CHANGES sandbox/mark/ooDialog.beta/ReleaseNotes sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.cpp Property Changed: ---------------- sandbox/mark/ooDialog.beta/ Property changes on: sandbox/mark/ooDialog.beta ___________________________________________________________________ Modified: svn:mergeinfo - /main/branches/4.1.0/trunk:6380-6381,6383,6385-6386 /main/trunk:4387,4396-4397,4460,4464,4466,4468,4506,4543-4544,4547,4562,4564,4603,4605,4696,4873,4884,4886,4917,4922,4950-4952,4967,4969,5090,5092-5094,5098,5104,5106-5107,5110,5114,5133,5139,5148,5152,5166,5168,5179,5181,5194,5203-5204,5206-5210,5223,5226,5233,5238,5242,5252-5253,5271-5272,5277,5307,5317,5320-5321,5342,5345,5401-5402,5438-5440,5476,5487,5490,5493-5494,5510,5514,5539,5549,5553,5561,5744,5957,5974,6090,6093,6100,6112,6133,6151,6197,6202,6218-6219,6241,6266,6300-6301,6352-6353,6355,6364,6369,6379 + /main/branches/4.1.0/trunk:6380-6381,6383,6385-6386,6419-6421,6424 /main/trunk:4387,4396-4397,4460,4464,4466,4468,4506,4543-4544,4547,4562,4564,4603,4605,4696,4873,4884,4886,4917,4922,4950-4952,4967,4969,5090,5092-5094,5098,5104,5106-5107,5110,5114,5133,5139,5148,5152,5166,5168,5179,5181,5194,5203-5204,5206-5210,5223,5226,5233,5238,5242,5252-5253,5271-5272,5277,5307,5317,5320-5321,5342,5345,5401-5402,5438-5440,5476,5487,5490,5493-5494,5510,5514,5539,5549,5553,5561,5744,5957,5974,6090,6093,6100,6112,6133,6151,6197,6202,6218-6219,6241,6266,6300-6301,6352-6353,6355,6364,6369,6379 Modified: sandbox/mark/ooDialog.beta/CHANGES =================================================================== --- sandbox/mark/ooDialog.beta/CHANGES 2010-12-04 22:59:09 UTC (rev 6441) +++ sandbox/mark/ooDialog.beta/CHANGES 2010-12-05 18:41:12 UTC (rev 6442) @@ -6,7 +6,7 @@ All Bugs ============= - * 3083953 ooDialog - odd behavior for list view connect click event + * 3083953 ooDialog - odd behavior for list view connect click event * 3080931 Possible memory leak in Stream Object Modified: sandbox/mark/ooDialog.beta/ReleaseNotes =================================================================== --- sandbox/mark/ooDialog.beta/ReleaseNotes 2010-12-04 22:59:09 UTC (rev 6441) +++ sandbox/mark/ooDialog.beta/ReleaseNotes 2010-12-05 18:41:12 UTC (rev 6442) @@ -83,10 +83,10 @@ Mac OS X 10.5 or 10.6 Intel 32-bit binary ooRexx-4.1.0.32.rte-beta1.bff -AIX installation package for 32-bit AIX 5.2 / 5.3 and 6.1 +AIX installation package for 32-bit AIX 5.3 and 6.1 ooRexx-4.1.0.64.rte-beta1.bff -AIX installation package for 64-bit AIX 5.2 / 5.3 and 6.1 +AIX installation package for 64-bit AIX 5.3 and 6.1 ooRexx-4.1.0.beta01.tar.gz Source files suitable for building ooRexx on any Unix-like system Modified: sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.cpp 2010-12-04 22:59:09 UTC (rev 6441) +++ sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.cpp 2010-12-05 18:41:12 UTC (rev 6442) @@ -941,6 +941,7 @@ } +#if !defined (AIX) /** * Method: SysEuidaccess * @@ -960,8 +961,8 @@ return euidaccess(file, option); } +#endif - /** * Method: SysGetservbyname * @@ -1373,7 +1374,7 @@ * * Get the errno value. * - * @return hostname. + * @return errno. */ RexxRoutine0(int, SysGeterrno) @@ -1708,7 +1709,9 @@ REXX_TYPED_ROUTINE(SysGetgrgid, SysGetgrgid), REXX_TYPED_ROUTINE(SysStat, SysStat), REXX_TYPED_ROUTINE(SysAccess, SysAccess), +#if !defined (AIX) REXX_TYPED_ROUTINE(SysEuidaccess, SysEuidaccess), +#endif REXX_TYPED_ROUTINE(SysGetservbyname, SysGetservbyname), REXX_TYPED_ROUTINE(SysGetservbyport, SysGetservbyport), REXX_TYPED_ROUTINE(SysWordexp, SysWordexp), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-12-05 18:48:19
|
Revision: 6443 http://oorexx.svn.sourceforge.net/oorexx/?rev=6443&view=rev Author: miesfeld Date: 2010-12-05 18:48:12 +0000 (Sun, 05 Dec 2010) Log Message: ----------- Sync my sandbox version with the 4.1.0 branch up through r6433 Modified Paths: -------------- sandbox/mark/ooDialog.beta/ReleaseNotes sandbox/mark/ooDialog.beta/bootstrap sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.cpp sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.h Added Paths: ----------- sandbox/mark/ooDialog.beta/platform/unix/macosx/ sandbox/mark/ooDialog.beta/platform/unix/macosx/MakeRexxPackage.in sandbox/mark/ooDialog.beta/platform/unix/macosx/PackageInfo.in sandbox/mark/ooDialog.beta/platform/unix/macosx/org.rexxla.oorexx.rxapid.plist sandbox/mark/ooDialog.beta/platform/unix/macosx/postflight.in sandbox/mark/ooDialog.beta/platform/unix/macosx/preflight.in Removed Paths: ------------- sandbox/mark/ooDialog.beta/platform/unix/macosx/MakeRexxPackage.in sandbox/mark/ooDialog.beta/platform/unix/macosx/PackageInfo.in sandbox/mark/ooDialog.beta/platform/unix/macosx/org.rexxla.oorexx.rxapid.plist sandbox/mark/ooDialog.beta/platform/unix/macosx/postflight.in sandbox/mark/ooDialog.beta/platform/unix/macosx/preflight.in Property Changed: ---------------- sandbox/mark/ooDialog.beta/ Property changes on: sandbox/mark/ooDialog.beta ___________________________________________________________________ Modified: svn:mergeinfo - /main/branches/4.1.0/trunk:6380-6381,6383,6385-6386,6419-6421,6424 /main/trunk:4387,4396-4397,4460,4464,4466,4468,4506,4543-4544,4547,4562,4564,4603,4605,4696,4873,4884,4886,4917,4922,4950-4952,4967,4969,5090,5092-5094,5098,5104,5106-5107,5110,5114,5133,5139,5148,5152,5166,5168,5179,5181,5194,5203-5204,5206-5210,5223,5226,5233,5238,5242,5252-5253,5271-5272,5277,5307,5317,5320-5321,5342,5345,5401-5402,5438-5440,5476,5487,5490,5493-5494,5510,5514,5539,5549,5553,5561,5744,5957,5974,6090,6093,6100,6112,6133,6151,6197,6202,6218-6219,6241,6266,6300-6301,6352-6353,6355,6364,6369,6379 + /main/branches/4.1.0/trunk:6380-6381,6383,6385-6386,6419-6421,6424,6426-6430,6433 /main/trunk:4387,4396-4397,4460,4464,4466,4468,4506,4543-4544,4547,4562,4564,4603,4605,4696,4873,4884,4886,4917,4922,4950-4952,4967,4969,5090,5092-5094,5098,5104,5106-5107,5110,5114,5133,5139,5148,5152,5166,5168,5179,5181,5194,5203-5204,5206-5210,5223,5226,5233,5238,5242,5252-5253,5271-5272,5277,5307,5317,5320-5321,5342,5345,5401-5402,5438-5440,5476,5487,5490,5493-5494,5510,5514,5539,5549,5553,5561,5744,5957,5974,6090,6093,6100,6112,6133,6151,6197,6202,6218-6219,6241,6266,6300-6301,6352-6353,6355,6364,6369,6379 Modified: sandbox/mark/ooDialog.beta/ReleaseNotes =================================================================== --- sandbox/mark/ooDialog.beta/ReleaseNotes 2010-12-05 18:41:12 UTC (rev 6442) +++ sandbox/mark/ooDialog.beta/ReleaseNotes 2010-12-05 18:48:12 UTC (rev 6443) @@ -83,10 +83,10 @@ Mac OS X 10.5 or 10.6 Intel 32-bit binary ooRexx-4.1.0.32.rte-beta1.bff -AIX installation package for 32-bit AIX 5.3 and 6.1 +AIX installation package for 32-bit AIX 5.3/6.1 and 7.1 ooRexx-4.1.0.64.rte-beta1.bff -AIX installation package for 64-bit AIX 5.3 and 6.1 +AIX installation package for 64-bit AIX 5.3/6.1 and 7.1 ooRexx-4.1.0.beta01.tar.gz Source files suitable for building ooRexx on any Unix-like system Modified: sandbox/mark/ooDialog.beta/bootstrap =================================================================== --- sandbox/mark/ooDialog.beta/bootstrap 2010-12-05 18:41:12 UTC (rev 6442) +++ sandbox/mark/ooDialog.beta/bootstrap 2010-12-05 18:48:12 UTC (rev 6443) @@ -1,4 +1,4 @@ -#! /bin/sh -x +#! /bin/sh #/*----------------------------------------------------------------------------*/ #/* */ #/* Copyright (c) 2005-2010 Rexx Language Association. All rights reserved. */ Modified: sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.cpp 2010-12-05 18:41:12 UTC (rev 6442) +++ sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.cpp 2010-12-05 18:48:12 UTC (rev 6443) @@ -941,7 +941,7 @@ } -#if !defined (AIX) +#if !defined (AIX) && !defined (__APPLE__) /** * Method: SysEuidaccess * @@ -1709,7 +1709,7 @@ REXX_TYPED_ROUTINE(SysGetgrgid, SysGetgrgid), REXX_TYPED_ROUTINE(SysStat, SysStat), REXX_TYPED_ROUTINE(SysAccess, SysAccess), -#if !defined (AIX) +#if !defined (AIX) && !defined (__APPLE__) REXX_TYPED_ROUTINE(SysEuidaccess, SysEuidaccess), #endif REXX_TYPED_ROUTINE(SysGetservbyname, SysGetservbyname), Modified: sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.h =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.h 2010-12-05 18:41:12 UTC (rev 6442) +++ sandbox/mark/ooDialog.beta/extensions/platform/unix/rxunixsys/rxunixsys.h 2010-12-05 18:48:12 UTC (rev 6443) @@ -72,11 +72,14 @@ #include <attr/xattr.h> #endif - /*----------------------------------------------------------------------------*/ /* Definitions */ /*----------------------------------------------------------------------------*/ +#if defined(__APPLE__) && defined(__MACH__) +# define stat64 stat +# define HOST_NAME_MAX _POSIX_HOST_NAME_MAX +#endif /*----------------------------------------------------------------------------*/ /* Global variables */ Deleted: sandbox/mark/ooDialog.beta/platform/unix/macosx/MakeRexxPackage.in =================================================================== --- main/branches/4.1.0/trunk/platform/unix/macosx/MakeRexxPackage.in 2010-11-30 18:01:26 UTC (rev 6429) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/MakeRexxPackage.in 2010-12-05 18:48:12 UTC (rev 6443) @@ -1,29 +0,0 @@ -#!/bin/sh - -BLD_DIR= -MOD= -REL= -PREFIX= -VER= -ARCH=`file $PREFIX/bin/rexx|cut -d' ' -f4` -if [ "$ARCH" = "i386" ] -then - ARCH=i586; -fi - -packagemaker \ - --discard-forks \ - --domain system \ - --id org.rexxla.oorexx.$VER.$REL.$MOD \ - --info $BLD_DIR/platform/unix/macosx/PackageInfo \ - --out $BLD_DIR/ooRexx-$VER.$REL.$MOD-$ARCH.pkg \ - --root $PREFIX \ - --root-volume-only \ - --scripts $BLD_DIR/platform/unix/macosx/scripts \ - --target 10.5 \ - --title "Open Object Rexx V$VER.$REL.$MOD for Mac OS X" \ - --verbose \ - --version 1 \ - - -hdiutil create Copied: sandbox/mark/ooDialog.beta/platform/unix/macosx/MakeRexxPackage.in (from rev 6429, main/branches/4.1.0/trunk/platform/unix/macosx/MakeRexxPackage.in) =================================================================== --- sandbox/mark/ooDialog.beta/platform/unix/macosx/MakeRexxPackage.in (rev 0) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/MakeRexxPackage.in 2010-12-05 18:48:12 UTC (rev 6443) @@ -0,0 +1,29 @@ +#!/bin/sh + +BLD_DIR= +MOD= +REL= +PREFIX= +VER= +ARCH=`file $PREFIX/bin/rexx|cut -d' ' -f4` +if [ "$ARCH" = "i386" ] +then + ARCH=i586; +fi + +packagemaker \ + --discard-forks \ + --domain system \ + --id org.rexxla.oorexx.$VER.$REL.$MOD \ + --info $BLD_DIR/platform/unix/macosx/PackageInfo \ + --out $BLD_DIR/ooRexx-$VER.$REL.$MOD-$ARCH.pkg \ + --root $PREFIX \ + --root-volume-only \ + --scripts $BLD_DIR/platform/unix/macosx/scripts \ + --target 10.5 \ + --title "Open Object Rexx V$VER.$REL.$MOD for Mac OS X" \ + --verbose \ + --version 1 \ + + +hdiutil create Deleted: sandbox/mark/ooDialog.beta/platform/unix/macosx/PackageInfo.in =================================================================== --- main/branches/4.1.0/trunk/platform/unix/macosx/PackageInfo.in 2010-11-30 18:01:26 UTC (rev 6429) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/PackageInfo.in 2010-12-05 18:48:12 UTC (rev 6443) @@ -1,2 +0,0 @@ -<?xml version="1.0"?> -<pkg-info format-version="2" install-location="#PREF#" > </pkg-info> Copied: sandbox/mark/ooDialog.beta/platform/unix/macosx/PackageInfo.in (from rev 6429, main/branches/4.1.0/trunk/platform/unix/macosx/PackageInfo.in) =================================================================== --- sandbox/mark/ooDialog.beta/platform/unix/macosx/PackageInfo.in (rev 0) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/PackageInfo.in 2010-12-05 18:48:12 UTC (rev 6443) @@ -0,0 +1,2 @@ +<?xml version="1.0"?> +<pkg-info format-version="2" install-location="#PREF#" > </pkg-info> Deleted: sandbox/mark/ooDialog.beta/platform/unix/macosx/org.rexxla.oorexx.rxapid.plist =================================================================== --- main/branches/4.1.0/trunk/platform/unix/macosx/org.rexxla.oorexx.rxapid.plist 2010-11-30 18:01:26 UTC (rev 6429) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/org.rexxla.oorexx.rxapid.plist 2010-12-05 18:48:12 UTC (rev 6443) @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>Disabled</key> - <false/> - <key>KeepAlive</key> - <true/> - <key>Label</key> - <string>org.rexxla.oorexx.rxapid</string> - <key>ProgramArguments</key> - <array> - <string>/usr/bin/rxapi</string> - </array> - <key>RunAtLoad</key> - <true/> -</dict> -</plist> Copied: sandbox/mark/ooDialog.beta/platform/unix/macosx/org.rexxla.oorexx.rxapid.plist (from rev 6429, main/branches/4.1.0/trunk/platform/unix/macosx/org.rexxla.oorexx.rxapid.plist) =================================================================== --- sandbox/mark/ooDialog.beta/platform/unix/macosx/org.rexxla.oorexx.rxapid.plist (rev 0) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/org.rexxla.oorexx.rxapid.plist 2010-12-05 18:48:12 UTC (rev 6443) @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>Disabled</key> + <false/> + <key>KeepAlive</key> + <true/> + <key>Label</key> + <string>org.rexxla.oorexx.rxapid</string> + <key>ProgramArguments</key> + <array> + <string>/usr/bin/rxapi</string> + </array> + <key>RunAtLoad</key> + <true/> +</dict> +</plist> Deleted: sandbox/mark/ooDialog.beta/platform/unix/macosx/postflight.in =================================================================== --- main/branches/4.1.0/trunk/platform/unix/macosx/postflight.in 2010-11-30 18:01:26 UTC (rev 6429) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/postflight.in 2010-12-05 18:48:12 UTC (rev 6443) @@ -1,87 +0,0 @@ -#!/bin/sh - -VER= -REL= -MOD= -PREFIX= - -echo $SCRIPT_NAME: linking files - -echo $SCRIPT_NAME: linking libraries to /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexx /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexx.$VER.$REL.$MOD.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexx.$VER.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexx.a /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexx.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexx.la /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxapi /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxapi.$VER.$REL.$MOD.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxapi.$VER.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxapi.a /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxapi.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxapi.la /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxutil /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxutil.$VER.$REL.$MOD.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxutil.$VER.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxutil.a /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxutil.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librexxutil.la /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxmath /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxmath.$VER.$REL.$MOD.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxmath.$VER.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxmath.a /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxmath.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxmath.la /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxregexp /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxregexp.$VER.$REL.$MOD.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxregexp.$VER.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxregexp.a /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxregexp.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxregexp.la /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxsock /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxsock.$VER.$REL.$MOD.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxsock.$VER.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxsock.a /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxsock.dylib /usr/lib -ln -sf $PREFIX/lib/ooRexx/librxsock.la /usr/lib - -echo $SCRIPT_NAME: linking programs to /usr/bin -ln -sf $PREFIX/bin/oorexx-config /usr/bin -ln -sf $PREFIX/bin/rexx /usr/bin -ln -sf $PREFIX/bin/rexx.cat /usr/bin -ln -sf $PREFIX/bin/rexx.img /usr/bin -ln -sf $PREFIX/bin/rexxc /usr/bin -ln -sf $PREFIX/bin/rexximage /usr/bin -ln -sf $PREFIX/bin/rxapi /usr/bin -ln -sf $PREFIX/bin/rxapid /usr/bin -ln -sf $PREFIX/bin/rxftp.cls /usr/bin -ln -sf $PREFIX/bin/rxqueue /usr/bin -ln -sf $PREFIX/bin/rxregexp.cls /usr/bin -ln -sf $PREFIX/bin/rxsubcom /usr/bin -ln -sf $PREFIX/bin/socket.cls /usr/bin - -echo $SCRIPT_NAME: linking man pages to /usr/share/man/man1 -ln -sf $PREFIX/share/man/man1/oorexx-config.1 /usr/share/man/man1 -ln -sf $PREFIX/share/man/man1/rexx.1 /usr/share/man/man1 -ln -sf $PREFIX/share/man/man1/rexxc.1 /usr/share/man/man1 -ln -sf $PREFIX/share/man/man1/rxmigrate.1 /usr/share/man/man1 -ln -sf $PREFIX/share/man/man1/rxqueue.1 /usr/share/man/man1 -ln -sf $PREFIX/share/man/man1/rxsubcom.1 /usr/share/man/man1 - -echo $SCRIPT_NAME: linking headers to /usr/include -ln -sf $PREFIX/include/oorexxapi.h /usr/include -ln -sf $PREFIX/include/oorexxerrors.h /usr/include -ln -sf $PREFIX/include/rexx.h /usr/include -ln -sf $PREFIX/include/rexxapidefs.h /usr/include -ln -sf $PREFIX/include/rexxapitypes.h /usr/include -ln -sf $PREFIX/include/rexxplatformapis.h /usr/include -ln -sf $PREFIX/include/rexxplatformdefs.h /usr/include - -echo $SCRIPT_NAME: linking Launch Daemon to /Library/LaunchDaemons -ln -sf $PREFIX/bin/org.rexxla.oorexx.rxapid.plist /Library/LaunchDaemons - -echo $SCRIPT_NAME: stop/start rxapi Daemon -launchctl unload -w /Library/LaunchDaemons/org.rexxla.oorexx.rxapid.plist -launchctl load -w /Library/LaunchDaemons/org.rexxla.oorexx.rxapid.plist - -echo $SCRIPT_NAME: linking complete Copied: sandbox/mark/ooDialog.beta/platform/unix/macosx/postflight.in (from rev 6429, main/branches/4.1.0/trunk/platform/unix/macosx/postflight.in) =================================================================== --- sandbox/mark/ooDialog.beta/platform/unix/macosx/postflight.in (rev 0) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/postflight.in 2010-12-05 18:48:12 UTC (rev 6443) @@ -0,0 +1,87 @@ +#!/bin/sh + +VER= +REL= +MOD= +PREFIX= + +echo $SCRIPT_NAME: linking files + +echo $SCRIPT_NAME: linking libraries to /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexx /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexx.$VER.$REL.$MOD.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexx.$VER.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexx.a /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexx.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexx.la /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxapi /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxapi.$VER.$REL.$MOD.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxapi.$VER.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxapi.a /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxapi.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxapi.la /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxutil /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxutil.$VER.$REL.$MOD.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxutil.$VER.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxutil.a /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxutil.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librexxutil.la /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxmath /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxmath.$VER.$REL.$MOD.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxmath.$VER.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxmath.a /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxmath.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxmath.la /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxregexp /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxregexp.$VER.$REL.$MOD.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxregexp.$VER.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxregexp.a /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxregexp.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxregexp.la /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxsock /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxsock.$VER.$REL.$MOD.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxsock.$VER.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxsock.a /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxsock.dylib /usr/lib +ln -sf $PREFIX/lib/ooRexx/librxsock.la /usr/lib + +echo $SCRIPT_NAME: linking programs to /usr/bin +ln -sf $PREFIX/bin/oorexx-config /usr/bin +ln -sf $PREFIX/bin/rexx /usr/bin +ln -sf $PREFIX/bin/rexx.cat /usr/bin +ln -sf $PREFIX/bin/rexx.img /usr/bin +ln -sf $PREFIX/bin/rexxc /usr/bin +ln -sf $PREFIX/bin/rexximage /usr/bin +ln -sf $PREFIX/bin/rxapi /usr/bin +ln -sf $PREFIX/bin/rxapid /usr/bin +ln -sf $PREFIX/bin/rxftp.cls /usr/bin +ln -sf $PREFIX/bin/rxqueue /usr/bin +ln -sf $PREFIX/bin/rxregexp.cls /usr/bin +ln -sf $PREFIX/bin/rxsubcom /usr/bin +ln -sf $PREFIX/bin/socket.cls /usr/bin + +echo $SCRIPT_NAME: linking man pages to /usr/share/man/man1 +ln -sf $PREFIX/share/man/man1/oorexx-config.1 /usr/share/man/man1 +ln -sf $PREFIX/share/man/man1/rexx.1 /usr/share/man/man1 +ln -sf $PREFIX/share/man/man1/rexxc.1 /usr/share/man/man1 +ln -sf $PREFIX/share/man/man1/rxmigrate.1 /usr/share/man/man1 +ln -sf $PREFIX/share/man/man1/rxqueue.1 /usr/share/man/man1 +ln -sf $PREFIX/share/man/man1/rxsubcom.1 /usr/share/man/man1 + +echo $SCRIPT_NAME: linking headers to /usr/include +ln -sf $PREFIX/include/oorexxapi.h /usr/include +ln -sf $PREFIX/include/oorexxerrors.h /usr/include +ln -sf $PREFIX/include/rexx.h /usr/include +ln -sf $PREFIX/include/rexxapidefs.h /usr/include +ln -sf $PREFIX/include/rexxapitypes.h /usr/include +ln -sf $PREFIX/include/rexxplatformapis.h /usr/include +ln -sf $PREFIX/include/rexxplatformdefs.h /usr/include + +echo $SCRIPT_NAME: linking Launch Daemon to /Library/LaunchDaemons +ln -sf $PREFIX/bin/org.rexxla.oorexx.rxapid.plist /Library/LaunchDaemons + +echo $SCRIPT_NAME: stop/start rxapi Daemon +launchctl unload -w /Library/LaunchDaemons/org.rexxla.oorexx.rxapid.plist +launchctl load -w /Library/LaunchDaemons/org.rexxla.oorexx.rxapid.plist + +echo $SCRIPT_NAME: linking complete Deleted: sandbox/mark/ooDialog.beta/platform/unix/macosx/preflight.in =================================================================== --- main/branches/4.1.0/trunk/platform/unix/macosx/preflight.in 2010-11-30 18:01:26 UTC (rev 6429) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/preflight.in 2010-12-05 18:48:12 UTC (rev 6443) @@ -1,97 +0,0 @@ -#!/bin/sh -echo $SCRIPT_NAME: Removing prior version of ooRexx. - -PREFIX= - -if [ -x /usr/bin/oorexx-config ] -then - PREFIX=`/usr/bin/oorexx-config --prefix`; -fi - -echo $SCRIPT_NAME: Removing links from /usr/lib. -rm -f /usr/lib/librexx.* -rm -f /usr/lib/librexxapi.* -rm -f /usr/lib/librexxutil.* -rm -f /usr/lib/librxmath.* -rm -f /usr/lib/librxregexp.* -rm -f /usr/lib/librxsock.* - -echo $SCRIPT_NAME: Removing libraries from $PREFIX/lib/ooRexx. -rm -f $PREFIX/lib/ooRexx/librexx.* -rm -r $PREFIX/lib/ooRexx/librexxapi.* -rm -f $PREFIX/lib/ooRexx/librexxutil.* -rm -f $PREFIX/lib/ooRexx/librxmath.* -rm -f $PREFIX/lib/ooRexx/librxregexp.* -rm -f $PREFIX/lib/ooRexx/librxsock.* - -echo $SCRIPT_NAME: Removing links from /usr/bin. -rm -f /usr/bin/oorexx-config -rm -f /usr/bin/rexx -rm -f /usr/bin/rexx.cat -rm -f /usr/bin/rexx.img -rm -f /usr/bin/rexxc -rm -f /usr/bin/rxdelipc -rm -f /usr/bin/rxftp.cls -rm -f /usr/bin/rxmigrate -rm -f /usr/bin/rxqueue -rm -f /usr/bin/rxregexp.cls -rm -f /usr/bin/rxsubcom - -echo $SCRIPT_NAME: Removing programs from $PREFIX/bin. -rm -f $PREFIX/bin/oorexx-config -rm -f $PREFIX/bin/org.rexxla.oorexx.rxapid.plist -rm -f $PREFIX/bin/rexx -rm -f $PREFIX/bin/rexx.cat -rm -f $PREFIX/bin/rexx.img -rm -f $PREFIX/bin/rexxc -rm -f $PREFIX/bin/rxapi -rm -f $PREFIX/bin/rxapid -rm -f $PREFIX/bin/rxdelipc -rm -f $PREFIX/bin/rxftp.cls -rm -f $PREFIX/bin/rxmigrate -rm -f $PREFIX/bin/rxqueue -rm -f $PREFIX/bin/rxregexp.cls -rm -f $PREFIX/bin/rxsubcom - -echo $SCRIPT_NAME: Removing man pages from $PREFIX/share/man/man1. -rm -f $PREFIX/share/man/man1/oorexx-config.1 -rm -f $PREFIX/share/man/man1/rexx.1 -rm -f $PREFIX/share/man/man1/rexxc.1 -rm -f $PREFIX/share/man/man1/rxqueue.1 -rm -f $PREFIX/share/man/man1/rxsubcom.1 - -echo $SCRIPT_NAME: Removing rexx examples from $PREFIX/share/ooRexx. -rm -f $PREFIX/share/ooRexx/ccreply.rex -rm -f $PREFIX/share/ooRexx/complex.rex -rm -f $PREFIX/share/ooRexx/factor.rex -rm -f $PREFIX/share/ooRexx/greply.rex -rm -f $PREFIX/share/ooRexx/guess.rex -rm -f $PREFIX/share/ooRexx/ktguard.rex -rm -f $PREFIX/share/ooRexx/makestring.rex -rm -f $PREFIX/share/ooRexx/month.rex -rm -f $PREFIX/share/ooRexx/philfork.rex -rm -f $PREFIX/share/ooRexx/pipe.rex -rm -f $PREFIX/share/ooRexx/properties.rex -rm -f $PREFIX/share/ooRexx/qdate.rex -rm -f $PREFIX/share/ooRexx/qtime.rex -rm -f $PREFIX/share/ooRexx/readme -rm -f $PREFIX/share/ooRexx/rexx.csh -rm -f $PREFIX/share/ooRexx/rexx.sh -rm -f $PREFIX/share/ooRexx/rexxcps.rex -rm -f $PREFIX/share/ooRexx/rexxtry.rex -rm -f $PREFIX/share/ooRexx/scclient.rex -rm -f $PREFIX/share/ooRexx/scserver.rex -rm -f $PREFIX/share/ooRexx/semcls.rex -rm -f $PREFIX/share/ooRexx/sfclient.rex -rm -f $PREFIX/share/ooRexx/sfserver.rex -rm -f $PREFIX/share/ooRexx/stack.rex -rm -f $PREFIX/share/ooRexx/usecomp.rex -rm -f $PREFIX/share/ooRexx/usepipe.rex - -echo $SCRIPT_NAME: Shutting down rxapi daemon -launchctl unload -w /Library/LaunchDaemons/org.rexxla.oorexx.rxapid.plist - -echo $SCRIPT_NAME: Removing rexx LaunchDeamon -rm -f /Library/LaunchDeamons/org.rexxla.oorexx.rxapid.plist - -echo $SCRIPT_NAME: Removal of prior version of ooRexx complete. Copied: sandbox/mark/ooDialog.beta/platform/unix/macosx/preflight.in (from rev 6429, main/branches/4.1.0/trunk/platform/unix/macosx/preflight.in) =================================================================== --- sandbox/mark/ooDialog.beta/platform/unix/macosx/preflight.in (rev 0) +++ sandbox/mark/ooDialog.beta/platform/unix/macosx/preflight.in 2010-12-05 18:48:12 UTC (rev 6443) @@ -0,0 +1,97 @@ +#!/bin/sh +echo $SCRIPT_NAME: Removing prior version of ooRexx. + +PREFIX= + +if [ -x /usr/bin/oorexx-config ] +then + PREFIX=`/usr/bin/oorexx-config --prefix`; +fi + +echo $SCRIPT_NAME: Removing links from /usr/lib. +rm -f /usr/lib/librexx.* +rm -f /usr/lib/librexxapi.* +rm -f /usr/lib/librexxutil.* +rm -f /usr/lib/librxmath.* +rm -f /usr/lib/librxregexp.* +rm -f /usr/lib/librxsock.* + +echo $SCRIPT_NAME: Removing libraries from $PREFIX/lib/ooRexx. +rm -f $PREFIX/lib/ooRexx/librexx.* +rm -r $PREFIX/lib/ooRexx/librexxapi.* +rm -f $PREFIX/lib/ooRexx/librexxutil.* +rm -f $PREFIX/lib/ooRexx/librxmath.* +rm -f $PREFIX/lib/ooRexx/librxregexp.* +rm -f $PREFIX/lib/ooRexx/librxsock.* + +echo $SCRIPT_NAME: Removing links from /usr/bin. +rm -f /usr/bin/oorexx-config +rm -f /usr/bin/rexx +rm -f /usr/bin/rexx.cat +rm -f /usr/bin/rexx.img +rm -f /usr/bin/rexxc +rm -f /usr/bin/rxdelipc +rm -f /usr/bin/rxftp.cls +rm -f /usr/bin/rxmigrate +rm -f /usr/bin/rxqueue +rm -f /usr/bin/rxregexp.cls +rm -f /usr/bin/rxsubcom + +echo $SCRIPT_NAME: Removing programs from $PREFIX/bin. +rm -f $PREFIX/bin/oorexx-config +rm -f $PREFIX/bin/org.rexxla.oorexx.rxapid.plist +rm -f $PREFIX/bin/rexx +rm -f $PREFIX/bin/rexx.cat +rm -f $PREFIX/bin/rexx.img +rm -f $PREFIX/bin/rexxc +rm -f $PREFIX/bin/rxapi +rm -f $PREFIX/bin/rxapid +rm -f $PREFIX/bin/rxdelipc +rm -f $PREFIX/bin/rxftp.cls +rm -f $PREFIX/bin/rxmigrate +rm -f $PREFIX/bin/rxqueue +rm -f $PREFIX/bin/rxregexp.cls +rm -f $PREFIX/bin/rxsubcom + +echo $SCRIPT_NAME: Removing man pages from $PREFIX/share/man/man1. +rm -f $PREFIX/share/man/man1/oorexx-config.1 +rm -f $PREFIX/share/man/man1/rexx.1 +rm -f $PREFIX/share/man/man1/rexxc.1 +rm -f $PREFIX/share/man/man1/rxqueue.1 +rm -f $PREFIX/share/man/man1/rxsubcom.1 + +echo $SCRIPT_NAME: Removing rexx examples from $PREFIX/share/ooRexx. +rm -f $PREFIX/share/ooRexx/ccreply.rex +rm -f $PREFIX/share/ooRexx/complex.rex +rm -f $PREFIX/share/ooRexx/factor.rex +rm -f $PREFIX/share/ooRexx/greply.rex +rm -f $PREFIX/share/ooRexx/guess.rex +rm -f $PREFIX/share/ooRexx/ktguard.rex +rm -f $PREFIX/share/ooRexx/makestring.rex +rm -f $PREFIX/share/ooRexx/month.rex +rm -f $PREFIX/share/ooRexx/philfork.rex +rm -f $PREFIX/share/ooRexx/pipe.rex +rm -f $PREFIX/share/ooRexx/properties.rex +rm -f $PREFIX/share/ooRexx/qdate.rex +rm -f $PREFIX/share/ooRexx/qtime.rex +rm -f $PREFIX/share/ooRexx/readme +rm -f $PREFIX/share/ooRexx/rexx.csh +rm -f $PREFIX/share/ooRexx/rexx.sh +rm -f $PREFIX/share/ooRexx/rexxcps.rex +rm -f $PREFIX/share/ooRexx/rexxtry.rex +rm -f $PREFIX/share/ooRexx/scclient.rex +rm -f $PREFIX/share/ooRexx/scserver.rex +rm -f $PREFIX/share/ooRexx/semcls.rex +rm -f $PREFIX/share/ooRexx/sfclient.rex +rm -f $PREFIX/share/ooRexx/sfserver.rex +rm -f $PREFIX/share/ooRexx/stack.rex +rm -f $PREFIX/share/ooRexx/usecomp.rex +rm -f $PREFIX/share/ooRexx/usepipe.rex + +echo $SCRIPT_NAME: Shutting down rxapi daemon +launchctl unload -w /Library/LaunchDaemons/org.rexxla.oorexx.rxapid.plist + +echo $SCRIPT_NAME: Removing rexx LaunchDeamon +rm -f /Library/LaunchDeamons/org.rexxla.oorexx.rxapid.plist + +echo $SCRIPT_NAME: Removal of prior version of ooRexx complete. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-12-08 22:58:41
|
Revision: 6450 http://oorexx.svn.sourceforge.net/oorexx/?rev=6450&view=rev Author: miesfeld Date: 2010-12-08 22:58:34 +0000 (Wed, 08 Dec 2010) Log Message: ----------- Tweak some display text and names for switch ooDialog Modified Paths: -------------- sandbox/mark/ooDialog.beta/makeorx.bat sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi Modified: sandbox/mark/ooDialog.beta/makeorx.bat =================================================================== --- sandbox/mark/ooDialog.beta/makeorx.bat 2010-12-08 21:14:27 UTC (rev 6449) +++ sandbox/mark/ooDialog.beta/makeorx.bat 2010-12-08 22:58:34 UTC (rev 6450) @@ -171,14 +171,14 @@ echo Moving the ooRexx installer move ooRexx-%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM%.%CPUNAME%-debug.exe ..\..\..\ -REM Do the same thing with the ooDialog beta package. The NSIS scripts names -REM the package: -REM "ooDialog-${VERSION}-${CPU}.exe" +REM Do the same thing with the switch ooDialog 420<<-->>410 package. The NSIS +REM script names the package: +REM "switch_ooDialog-${VERSION}-${CPU}.exe" echo Renaming the switchOODialog installer -ren ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%.exe ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%-debug.exe +ren switch_ooDialog420_410-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%.exe switch_ooDialog420_410-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%-debug.exe echo Moving the switchOODialog installer -move ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%-debug.exe ..\..\..\ +move switch_ooDialog420_410-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%-debug.exe ..\..\..\ cd ..\..\..\ @@ -194,11 +194,11 @@ REM Make switchOODialog and the ooDialog installer. switchOODialog must be REM built first -makensis %OODDOTVER% %NODOTVER% %SRCDIR% %BINDIR% switchOODialog.nsi -makensis %OODDOTVER% %NODOTVER% %SRCDIR% %SWITCHEXE% %CPUDEF% ooDialogBeta.nsi +makensis %OODDOTVER% %NODOTVER% %SRCDIR% %BINDIR% switchOODialog420_410.nsi +makensis %OODDOTVER% %NODOTVER% %SRCDIR% %SWITCHEXE% %CPUDEF% ooDialog420_410.nsi move ooRexx-%MAJOR_NUM%.%MINOR_NUM%.%LVL_NUM%.%BLD_NUM%.%CPUNAME%.exe ..\..\..\ -move ooDialog-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%.exe ..\..\..\ +move switch_ooDialog420_410-%MAJOR_NUM%.2.%LVL_NUM%.%BLD_NUM%-%CPUNAME%.exe ..\..\..\ cd ..\..\..\ :ENV_VARS_CLEANUP Modified: sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi 2010-12-08 21:14:27 UTC (rev 6449) +++ sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi 2010-12-08 22:58:34 UTC (rev 6450) @@ -38,18 +38,21 @@ /** * ooDialogBeta.nsi * - * This is a basic NSIS install program, used to install ooDialog 4.2.0 beta. + * This is a basic NSIS install program, used to install: * - * It also installs switchOODialog. switchOODialog is an executable used to - * switch between the 4.2.0 and 4.1.0 versions of ooDialog. + * switch ooDialog 420<<->>410 * + * Once installed, the executable: switchOODialog allows the user to switch + * between the 4.2.0 and 4.1.0 versions of ooDialog in their ooRexx + * installation. + * * Run as: - * makensis /DVERSION=x.x.x.x /DNODOTVER=xxx /DSRCDIR=y /DEXEFILE=xxx /DCPU=xxx ooDialogBeta.nsi + * makensis /DVERSION=x.x.x.x /DNODOTVER=xxx /DSRCDIR=y /DEXEFILE=xxx /DCPU=xxx ooDialog420_410.nsi * eg - * makensis /DVERSION=4.2.0.6367 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog /DCPU=x86_32 ooDialogBeta.nsi + * makensis /DVERSION=4.2.0.6367 /DNODOTVER=420 /DSRCDIR=C:\work\wc\main.4.1.0.ooDialog /DEXEFILE=switchOODialog /DCPU=x86_32 ooDialog420_410.nsi * * Note: - * ooDialogBeta.nsi must be in the current directory. + * ooDialog420_410.nsi must be in the current directory. */ @@ -60,13 +63,13 @@ ;-------------------------------- ; Defines - !define LONGNAME "ooDialog ${VERSION} (beta)" ; Our long name - !define SHORTNAME "ooDialogSwitch" ; Our short name - !define InstallFile "${EXEFILE}.exe" ; The switch ooDialog executable renamed on install - !define SourceFile "${EXEFILE}420_410.exe" ; The switch ooDialog output file name. - !define DISPLAYICON "$INSTDIR\ooDialog.dll,2" ; Use the ooDialog icon, the OOD icon - !define REXXSHORTNAME "ooRexx" ; From ooRexx installer. - !define REXXLONGNAME "Open Object Rexx" ; From ooRexx installer + !define LONGNAME "Switch ooDialog 420(beta)_410 ${VERSION}" ; Our long name + !define SHORTNAME "Switch_ooDialog" ; Our short name + !define InstallFile "${EXEFILE}.exe" ; The switch ooDialog executable renamed on install + !define SourceFile "${EXEFILE}420_410.exe" ; The switch ooDialog output file name. + !define DISPLAYICON "$INSTDIR\ooDialog.dll,2" ; Use the ooDialog icon, the OOD icon + !define REXXSHORTNAME "ooRexx" ; From ooRexx installer. + !define REXXLONGNAME "Open Object Rexx" ; From ooRexx installer !define UNINSTALLER "uninstall_${EXEFILE}.exe" @@ -83,8 +86,8 @@ ;-------------------------------- ;General - Name "ooDialog Beta ${VERSION}" - OutFile "ooDialog-${VERSION}-${CPU}.exe" + Name "Switch ooDialog ${VERSION}" + OutFile "switch_ooDialog420_410-${VERSION}-${CPU}.exe" ShowInstdetails show ShowUninstDetails show SetOverwrite on @@ -154,7 +157,7 @@ ; If found, we silently uninstall any existing switch ooDialog. ${If} $RegVal_ourUninstallString != "" - DetailPrint "Found old ooDialog beta, cleaning up." + DetailPrint "Found old Switch ooDialog, cleaning up." ExecWait '$RegVal_ourUninstallString /S _?=$RegVal_ourUninstallLocation' $0 DetailPrint "" ${Endif} Modified: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2010-12-08 21:14:27 UTC (rev 6449) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2010-12-08 22:58:34 UTC (rev 6450) @@ -81,8 +81,8 @@ ;-------------------------------- ; Defines - !define SHORTNAME "ooDialogSwitch" ; Must be in sync with the ooDialogBeta SHORTNAME - !define LONGNAME "ooDialog ${VERSION} (beta)" + !define SHORTNAME "Switch_ooDialog" ; Must be in sync with the switch ooDialog SHORTNAME + !define LONGNAME "Switch ooDialog ${VERSION} (beta)" ; Does not have to be in sync !Define BinDir410 "${BINDIR}\oodialog410" !Define BinDir420 "${BINDIR}\oodialog420" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-12-18 01:03:41
|
Revision: 6498 http://oorexx.svn.sourceforge.net/oorexx/?rev=6498&view=rev Author: miesfeld Date: 2010-12-18 01:03:34 +0000 (Sat, 18 Dec 2010) Log Message: ----------- Sync ooDialog 4.2.0 in sandbox with main Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oobandit.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/PropertySheetDemo.rc Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/TabDemo.h Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls 2010-12-18 00:59:20 UTC (rev 6497) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls 2010-12-18 01:03:34 UTC (rev 6498) @@ -75,6 +75,7 @@ ::attribute ownerDialog get external "LIBRARY oodialog chld_getOwnerDialog" ::attribute ownerDialog set external "LIBRARY oodialog chld_setOwnerDialog" +::attribute initializing ::class 'ResControlDialog' public subclass ResDialog inherit ControlDialog @@ -93,6 +94,7 @@ if self~startChildDialog(self~basePtr, 0) == 0 then return 0 self~initDialog + self~initializing = .false; return self~dlgHandle @@ -101,6 +103,8 @@ ::method init use strict arg rcFile, idDlg, initData. = .nil, includeFile = "", options = "", expected = 200, ownerDlg = .nil + self~initializing = .true + newArgs = .array~new(5) if arg(3, 'E') then newArgs[1] = arg(3) if arg(4, 'E') then newArgs[2] = arg(4) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2010-12-18 00:59:20 UTC (rev 6497) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2010-12-18 01:03:34 UTC (rev 6498) @@ -292,6 +292,7 @@ return self~sendWinIntMsg(self~EM_LINEFROMCHAR, ndx, 0) + 1 ::method firstVisibleLine + use strict arg return self~sendWinIntMsg(self~EM_GETFIRSTVISIBLELINE, 0, 0) + 1 ::method setReadOnly Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2010-12-18 00:59:20 UTC (rev 6497) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2010-12-18 01:03:34 UTC (rev 6498) @@ -1338,11 +1338,17 @@ * @remarks This method is not meant to be documented to the user, it is * intended to be used internally only. */ -RexxMethod6(RexxObjectPtr, wb_sendWinHandle2Msg, CSTRING, wm_msg, intptr_t, wParam, POINTERSTRING, lParam, +RexxMethod6(RexxObjectPtr, wb_sendWinHandle2Msg, CSTRING, wm_msg, intptr_t, wParam, RexxObjectPtr, lParam, OPTIONAL_POINTERSTRING, _hwnd, NAME, method, CSELF, pCSelf) { - LRESULT lr = sendWinMsg(context, wm_msg, (WPARAM)wParam, (LPARAM)lParam, (HWND)_hwnd, (pCWindowBase)pCSelf); + void *handle; + if ( ! oodObj2handle(context, lParam, &handle, 3) ) + { + return NULLOBJECT; + } + LRESULT lr = sendWinMsg(context, wm_msg, (WPARAM)wParam, (LPARAM)handle, (HWND)_hwnd, (pCWindowBase)pCSelf); + if ( strlen(method) == 17 ) { return context->Intptr((intptr_t)lr); Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp 2010-12-18 00:59:20 UTC (rev 6497) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp 2010-12-18 01:03:34 UTC (rev 6498) @@ -881,7 +881,7 @@ CSTRING str = c->ObjectToStringValue(obj); size_t len = strlen(str); - if ( (len == 0 || len == 2) || (len == 1 && *str != '0') || toupper(str[1]) != 'X' ) + if ( (len == 0 || len == 2) || (len == 1 && *str != '0') || (len != 1 && toupper(str[1]) != 'X') ) { goto raise_condition; } @@ -982,6 +982,25 @@ } /** + * Tests if a string is a pointer string. + * + * Pointer strings are strings representing a pointer, handle, etc.. I.e. in + * "0xdd" format. But, this really just tests for hexidecimal format. + * + * @param string The string to test. + * + * @return True or false + */ +bool isPointerString(const char *string) +{ + if ( string != NULL && strlen(string) > 2 ) + { + return *string == '0' && toupper(string[1]) == 'X' && isxdigit(string[2]); + } + return false; +} + +/** * Converts a string in hexadecimal format (starts with 0x) to its pointer-sized * value. * Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp 2010-12-18 00:59:20 UTC (rev 6497) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp 2010-12-18 01:03:34 UTC (rev 6498) @@ -87,6 +87,7 @@ extern int32_t delDialog(pCPlainBaseDialog, RexxThreadContext *c); extern BOOL getDialogIcons(pCPlainBaseDialog, INT, UINT, PHANDLE, PHANDLE); extern bool isYes(const char *s); +extern bool isPointerString(const char *string); extern void * string2pointer(const char *string); extern void * string2pointer(RexxMethodContext *c, RexxStringObject string); extern void * string2pointer(RexxThreadContext *c, RexxObjectPtr ptr); Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp 2010-12-18 00:59:20 UTC (rev 6497) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp 2010-12-18 01:03:34 UTC (rev 6498) @@ -1360,7 +1360,7 @@ inline bool isIntResource(CSTRING bmp) { - if ( atoi(bmp) || bmp[0] == '0' || bmp[0] == '\0' ) + if ( ! isPointerString(bmp) && (atoi(bmp) || bmp[0] == '0' || bmp[0] == '\0') ) { return true; } @@ -1957,7 +1957,8 @@ * @remarks Note that the dialog does not need to yet be created for some * variations of this method. But if any of the bitmap CSTRINGs are a * number, so that the bitmap is to be loaded from a resource DLL, - * then the dialog does need to be created. + * then the dialog does need to be created. We want to raise the no + * windows dialog exception, *only* for that one condition. * * These old bitmap methods are too error-prone. */ Modified: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2010-12-18 00:59:20 UTC (rev 6497) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2010-12-18 01:03:34 UTC (rev 6498) @@ -674,9 +674,11 @@ Delete $INSTDIR\samples\oodialog\PropertySheetDemo.rex Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.h Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.rc + Delete $INSTDIR\samples\oodialog\rc\TabDemo.h Delete $INSTDIR\samples\oodialog\rc\ticketWizard.h Delete $INSTDIR\samples\oodialog\rc\ticketWizard.rc RMDir /r $INSTDIR\samples\oodialog\simple + Delete $INSTDIR\samples\oodialog\TabDemo.rex Delete $INSTDIR\samples\oodialog\ticketWizard.rex ${Endif} Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex 2010-12-18 01:03:34 UTC (rev 6498) @@ -0,0 +1,829 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */ +/* Copyright (c) 2005-2010 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** Tab Control / Dialog Controls / ControlDialog Example + * + * This example demonstrates how to use the ControlDialog class to populate a + * Tab control. It is basically the same as the PropertySheetDemo.rex example, + * but uses a Tab control with ControlDialog objects rather than using a + * PropertySheetDialog. + * + * Much of the code is simply copied from the PropertySheetDemo.rex program. + */ + + -- To run correctly, this program needs to be able to find its support files. + -- But, we allow starting the program from anywhere. To do this we: + -- get the directory we are executing from, switch to the directory this + -- program is installed in, and then switch back to the directory we started + -- from when we quit. + + curdir = directory(); -- Directory we started from. + parse source . . me + mydir = me~left(me~lastpos('\')-1) -- Directory we are installed in. + mydir = directory(mydir) -- CD to the install direcotry. + + -- Create the main dialog. + dlg = .NewControlsDialog~new( , "rc\TabDemo.h") + + -- Show and run the dialog. + dlg~execute(SHOWTOP, IDI_DLG_OODIALOG) + + -- Switch back to the intial directory and quit. + ret = directory(curdir) + return 0 + +::requires "ooDialog.cls" + +::class 'NewControlsDialog' subclass UserDialog + +::method init + + forward class (super) continue + if self~initCode <> 0 then return + + self~createCenter(325, 300, "Example using ControlDialog objects", , , "Arial", 9) + +::method defineDialog + + self~createTab(IDC_TAB, 10, 5, 305, 265) + + self~createPushButton(IDC_PB_PREVIOUS, 10, 278, 60, 14, , "Previous Control") + self~createPushButton(IDC_PB_NEXT, 80, 278, 60, 14, , "Next Control") + self~createPushButton(IDOK, 185, 278, 60, 14, "DEFAULT", "Ok") + self~createPushButton(IDCANCEL, 255, 278, 60, 14, , "Cancel") + + self~connectButtonEvent(IDC_PB_PREVIOUS, CLICKED, onPrevious) + self~connectButtonEvent(IDC_PB_NEXT, CLICKED, onNext) + self~connectTabEvent(IDC_TAB, SELCHANGE, onNewTab) + +/** initDialog() + * + * Initialize the underlying Windows dialog. This includes setting up the tab + * control and creating 5 control dialogs. The dialogs are used for the display + * area of the tab control, one control dialog for each tab of the tab control. + */ +::method initDialog + expose tabContent tabControl displayRect lastSelected havePositioned pbNext pbPrevious + + -- We create the control dialog for the first tab in the tab control, and + -- start it running now, because it takes some finite time for the underlying + -- dialog to be created. We can not resize and reposition the control dialog + -- until the underlying dialog is created, so we get it started, then do our + -- other tasks. + t1 = .ListViewDlg~new("rc\PropertySheetDemo.rc", IDD_LISTVIEW_DLG, , "rc\PropertySheetDemo.h", , , self) + t1~popup("HIDE") + + -- Add the tabs to the tab control. + tabControl = self~newTab(IDC_TAB) + tabControl~addSequence("List View", "Tree View", "Progress Bar", "Track Bar", "Tab") + + -- Create the other 4 control dialogs. + t2 = .TreeViewDlg~new("rc\PropertySheetDemo.rc", IDD_TREEVIEW_DLG, , "rc\PropertySheetDemo.h") + t3 = .ProgressBarDlg~new("rc\PropertySheetDemo.rc", IDD_PROGRESSBAR_DLG, , "rc\PropertySheetDemo.h") + t4 = .TrackBarDlg~new("rc\PropertySheetDemo.rc", IDD_TRACKBAR_DLG, , "rc\PropertySheetDemo.h") + t5 = .TabDlg~new("rc\PropertySheetDemo.rc", IDD_TAB_DLG, , "rc\PropertySheetDemo.h") + + -- Save the 5 dialogs so we can access them when needed. + tabContent = .array~of(t1, t2, t3, t4, t5) + + -- Mark them all as not having been positioned yet + havePositioned = .array~of(.false, .false, .false, .false, .false) + + -- No tab has been selected yet + lastSelected = 0 + + -- Save a reference to the push buttons. + pbNext = self~newPushButton(IDC_PB_NEXT) + pbPrevious = self~newPushButton(IDC_PB_PREVIOUS) + + self~calculateDisplayArea + + self~positionAndShow(1) + + self~startControlDialogs + + + + +/** calculateDisplayArea() + * + * Tab controls contain two areas, the tabs themselves and the display area. + * The display area is where the content for each tab is drawn. + * + * We need to match the control dialog(s) size and position with the display + * area size and position. There are two approaches here: + * + * We could calculate the size of the largest dialog, resize the tab control to + * match, and position the control dialog over the display area. + * + * We can get the size and position of the tab control's display area and resize + * and reposition the control dialog(s) to match. This is the approach we use + * here. + */ +::method calculateDisplayArea private + expose tabControl displayRect + + -- Given a rectangle describing the tab control's size and position, the tab + -- control itself will calculate the display area's size and position. + r = tabControl~windowRect + tabControl~calcDisplayRect(r) + + -- Now we need to map the display area's position on the screen, to the client + -- co-ordinates of the main dialog. The control dialog(s) are children windows + -- of the main dialog, which is why we need to use the client-area of the + -- dialog, not the client area of the tab control. + p = .Point~new(r~left, r~top) + self~screen2client(p) + + -- Create our display rectangle. This is used in setWindowPosition(), which + -- takes a point / size rectangle. ooDialog defines a point / size rectangle + -- as using the left and top attributes for the position of the upper left + -- corner of a rectangle, using the right attribute for the width of the + -- rectangle, and using the bottom attribute for the height of the rectangle. + displayRect = .Rect~new(p~x, p~y, r~right - r~left, r~bottom - r~top) + + +/** positionAndShow() + * + * Used to resize and reposition one of the control dialogs so it occupies the + * display area of the tab control. + * + */ +::method positionAndShow private + expose tabControl tabContent displayRect lastSelected havePositioned + use strict arg index + + -- We can not position the control dialog until the underlying Windows dialog + -- is created. If the system is heavily loaded for some reason, this may not + -- have happened yet. We need to wait for it. + dlg = tabContent[index] + do 10 + if \ dlg~initializing then leave + z = SysSleep(.1) + end + + if dlg~initializing then do + say "Error creating dialog for the tab with index:" index", aborting" + return self~cancel + end + + if lastSelected <> 0 then tabContent[lastSelected]~hide + + -- Now resize and reposition the control dialog to the tab control's display + -- area. We need to position the control dialog *above* the tab control in + -- the Z-order so that it shows. + dlg~setWindowPos(tabControl~hwnd, displayRect, "SHOWWINDOW NOOWNERZORDER") + + lastSelected = index + havePositioned[index] = .true + + self~checkButtons + + +::method startControlDialogs private unguarded + expose tabContent + + reply 0 + do i = 2 to tabContent~items + dlg = tabContent[i] + dlg~ownerDialog = self + dlg~popup("HIDE") + end + + +::method onNewTab + expose tabControl tabContent havePositioned lastSelected + + index = tabControl~selectedIndex + 1 + dlg = tabContent[index] + if index == 3 then dlg~activateThreads + + if havePositioned[index] then do + last = tabContent[lastSelected] + last~hide + dlg~show + lastSelected = index + end + else do + self~positionAndShow(index) + end + + self~checkButtons + + +::method onNext + expose tabControl + + tabControl~selectIndex(tabControl~selectedIndex + 1) + self~onNewTab + + +::method onPrevious + expose tabControl + + tabControl~selectIndex(tabControl~selectedIndex - 1) + self~onNewTab + + +::method checkButtons private + expose tabControl pbNext pbPrevious + + index = tabControl~selectedIndex + 1 + if index == 1 then do + pbPrevious~disable + pbNext~enable + end + else if index == 5 then do + pbPrevious~enable + pbNext~disable + end + else do + pbPrevious~enable + pbNext~enable + end + + +::method cancel + expose tabContent + + do dlg over tabContent + dlg~cancel + end + + return self~cancel:super + +::method ok + expose tabContent + + do dlg over tabContent + dlg~cancel + end + + return self~ok:super + + + +::class 'ListViewDlg' subclass RcControlDialog + +::method initDialog + expose lv + + -- Instantiate a Rexx list view object that represents the underlying + -- Windows list-view. The list-view style is report. + lv = self~newListView(IDC_LV_MAIN) + + -- Set the column headers + lv~insertColumn(0, "Symbol", 40) + lv~insertColumn(1, "Quote", 50) + lv~insertColumn(2, "Year high", 50) + lv~insertColumn(3, "Year low", 50) + lv~insertColumn(4, "Description", 120) + + -- Set the images for the items in the list-view. The list-view control was + -- created without the SHAREIMAGES styles, so it takes care of releasing the + -- image list when the program ends. + image = .Image~getImage("bmp\propertySheetDemoListView.bmp") + imageList = .ImageList~create(.Size~new(16, 16), .Image~toID(ILC_COLOR8), 4, 0) + if \image~isNull, \imageList~isNull then do + imageList~add(image) + lv~setImageList(imageList, .Image~toID(LVSIL_SMALL)) + + -- The image list makes a copy of the bitmap, so we can release it now + -- to free up some (small) amount of system resources. This is not + -- necessary, the OS will release the resource automatically when the + -- program ends. + image~release + end + + -- Fill the list-view with random data. + do ch = "A"~c2d to "Z"~c2d + q = random(200) + call msSleep 1 + yh = random(400) + yh = max(yh, q) + yl = random(100) + yl = min(yl, q) + lv~addRow( , random(3), "_" || ch~d2c~copies(3) || "_", "$" || q, "$" || yh, "$" || yl, - + ch~d2c~copies(3) "is a fictitious company.") + end + + -- Add full row select and the ability to drag and drop the columns to the + -- list-view. + lv~addExtendedStyle("FULLROWSELECT HEADERDRAGDROP") + + -- Connect 2 list-view events to Rexx methods in this dialog. The double- + -- click on a list-view item, and the click on a column header events. + self~connectListViewEvent(IDC_LV_MAIN, "ACTIVATE", "onActivate") + self~connectListViewEvent(IDC_LV_MAIN, "COLUMNCLICK") + +-- Invoked when a list-view item is double-clicked. We display a message and +-- set the focus to the next item in the list. +::method onActivate + expose lv + + selectedItem = lv~focused + symbol = lv~itemText(selectedItem) + price = lv~itemText(selectedItem, 1) + + question = "You have selected the stock with symbol" symbol". Do you want to order" || .endOfLine || - + "50 shares of stock at" price"?" + placeOrder = MessageDialog(question, self~hwnd, "Place Order for Stock", "YESNO", "QUESTION", "DEFBUTTON2" ) + + cost = 50 * price~substr(2) + if placeOrder == self~constDir["IDYES"] then do + j = MessageDialog("Okay, your bank account will be debited $"cost "dollars.", self~hwnd, - + "Order Confirmation", "OK", "INFORMATION") + end + else do + j = MessageDialog("That saved you $"cost "dollars.", self~hwnd, "Order Canceled", "OK", "EXCLAMATION") + end + + lv~deselect(selectedItem) + selectedItem += 1 + lv~focus(selectedItem) + lv~select(selectedItem) + +-- Invoked when a column header of the list-view is clicked. We just show a +-- message box so that the user has some feedback. +::method OnColumnClick + use arg id, column + j = MessageDialog("Column" column + 1 "was clicked in control" id, self~hwnd, "List-View Notification") + + +::class 'TreeViewDlg' subclass RcControlDialog + +::method initDialog + + -- Instantiate a Rexx tree view object that represents the Windows tree-view + -- control. + tv = self~newTreeView(IDC_TV_MAIN) + + -- Create and set the ImageList for the tree view items + image = .Image~getImage("bmp\propertySheetDemoTreeView.bmp") + imageList = .ImageList~create(.Size~new(32, 32), .Image~toID(ILC_COLOR8), 10, 0) + if \image~isNull, \imageList~isNull then do + imageList~add(image) + tv~setImageList(imageList, .Image~toID(TVSIL_NORMAL)) + image~release + end + + -- Add the tree view items. Toys will be the root (the first argument is + -- not omitted. Subitems are added by omitting the first arguments. The + -- number of arguments omitted indicates the depth of the subitem. + -- + -- The last numeric argument in some of the items is the index for the icon + -- for that item in the image list. Those items without a number will not + -- display an icon. + + tv~add("Toys", 1) + tv~add(, "Indoor", 14) + tv~add(, , "Boys", 19) + tv~add(, , , "Cowboys", 13) + tv~add(, , , "Cars", 8) + tv~add(, , , "Starwars", 9) + tv~add(, , "Girls", 0) + tv~add(, , , "Barby", 19) + tv~add(, , , "Painting", 15) + tv~add(, , , "Cooking", 13) + tv~add(, , "Adults", 17) + tv~add(, , , "Poker", 15) + tv~add(, , "Technical", 16) + tv~add(, , , "Racing cars", 8) + tv~add(, , , "Trains", 7) + tv~add(, "Outdoor", 11) + tv~add(, , "Water", 22) + tv~add(, , , "Ball", 5) + tv~add(, , , "Soft tennis", 6) + tv~add(, , "Sand", 12) + tv~add(, , , "Shovel", 12) + tv~add(, , , "Bucket", 19) + tv~add(, , , "Sandbox", 12) + tv~add(, , "Technical", 16) + tv~add(, , , "Trains", 7) + tv~add(, , , "Remote controlled", 8) + tv~add("Office Articles", 2) + tv~add( , "Tools", 16) + tv~add( , "Books", 19) + tv~add( , , "Introduction", 14) + tv~add( , , "Advanced Programming", 17) + tv~add( , , "Tips & Tricks", 16) + tv~add("Hardware", 4) + tv~add( , "Garden", 0) + tv~add( , "Handyman", 18) + tv~add( , "Household", 18) + tv~add("Furniture", 3) + tv~add( , "Standard", 12) + tv~add( , "Luxury", 21) + + -- Connecting the begin drag event and using the default tree drag handler + -- allows us to suppport drag and drop (using the default behaviour. + self~connectTreeViewEvent(IDC_TV_MAIN, "BeginDrag", "DefTreeDragHandler") + + +::class 'ProgressBarDlg' subclass RcControlDialog + +::method initDialog + expose threadsStarted processes + + threadsStarted = 0 + processes = .array~of('animateProgressA', 'animateProgressB', 'animateProgressC', - + 'animateProgressD', 'animateProgressE') + + +-- This message is sent to us by the owner dialog, the .NewControlsDialog dialog +-- to notify us that we are about to become visible. We use the notification to +-- start the progress bar animation threads. +::method activateThreads unguarded + expose threadsStarted processes + use arg propSheet + + reply 0 + + -- If no threads are running, start a thread to run each progress bar + -- asynchronously. + if threadsStarted < 1 then do + threadsStarted = processes~items + do methodName over processes + self~start(methodName) + end + end + +-- This is the generic method that simulates some type of processing that takes +-- a long time. The progress of this processing is displayed by the progress +-- bar. to simulate a process of which the progress is displayed by a progress bar */ +::method animateProgress unguarded + use arg progressBar, label, step, iterations, tsleep + + progressBar~setRange(0, iterations * step) + progressBar~setStep(step) + do i = 1 to iterations + progressBar~step + if (iterations * step == 100) then label~setText(i * step "%") + else label~setText(i * step) + + call msSleep tsleep + if self~finished | \ self~isDialogActive then return + end + +-- The following 5 methods are started asynchronously to animate the progress +-- bars. +::method animateProgressA unguarded + expose threadsStarted pbA labelA + + if \ pbA~isA(.ProgressBar) then do + pbA = self~newProgressBar(IDC_PBAR_PROCESSA) + labelA = self~newStatic(IDC_ST_PERCENTA) + end + + self~animateProgress(pbA, labelA, 5, 20, 600) + threadsStarted -= 1 + +::method animateProgressB unguarded + expose threadsStarted pbB labelB + + if \ pbB~isA(.ProgressBar) then do + pbB = self~newProgressBar(IDC_PBAR_PROCESSB) + labelB = self~newStatic(IDC_ST_PERCENTB) + end + + self~animateProgress(pbB, labelB, 1, 100, 150) + threadsStarted -= 1 + +::method animateProgressC unguarded + expose threadsStarted pbC labelC + + if \ pbC~isA(.ProgressBar) then do + pbC = self~newProgressBar(IDC_PBAR_PROCESSC) + labelC = self~newStatic(IDC_ST_PERCENTC) + end + + self~animateProgress(pbC, labelC, 2, 50, 200) + threadsStarted -= 1 + +::method animateProgressD unguarded + expose threadsStarted pbD labelD + + if \ pbD~isA(.ProgressBar) then do + pbD = self~newProgressBar(IDC_PBAR_PROCESSD) + labelD = self~newStatic(IDC_ST_PERCENTD) + end + + self~animateProgress(pbD, labelD, 10, 40, 300) + threadsStarted -= 1 + +::method animateProgressE unguarded + expose threadsStarted pbE labelE + + if \ pbE~isA(.ProgressBar) then do + pbE = self~newProgressBar(IDC_PBAR_PROCESSE) + labelE = self~newStatic(IDC_ST_PERCENTE) + end + + self~animateProgress(pbE, labelE, 20, 50, 500) + threadsStarted -= 1 + + +::class 'TrackBarDlg' subclass RcControlDialog + +::method initDialog + expose font1 trackBars tbLabels + + -- As we initialize each track bar we'll stash the Rexx object in a table + -- for easy access later, indexed by its numeric resource id. The same + -- thing is done for the static control that is the label for the track bar. + trackBars = .table~new + tbLabels = .table~new + + -- For the horizonatal track bars we'll use a big font for the label. + font1 = self~CreateFontEx("Arial", 24, "BOLD") + + -- The symbolic IDs for the track bars / labels are named after the style + -- of the track bar. Vertical or horizontal and where the ticks are placed. + + -- Initialize the horizontal track bar with ticks on the bottom. + tb = self~newTrackBar(IDC_TB_HORZ_BOTTOM) + label = self~newStatic(IDC_ST_HORZ_BOTTOM) + + tb~setTickFrequency(10) + tb~setPos(20, .true) + label~setText(20) + label~setFont(font1) + + id = self~constDir[IDC_TB_HORZ_BOTTOM] + trackBars[id] = tb + tbLabels[id] = label + + -- Initialize the horizontal track bar with ticks on the top. + tb = self~newTrackBar(IDC_TB_HORZ_TOP) + label = self~newStatic(IDC_ST_HORZ_TOP) + + tb~initRange(0, 200) + tb~setTickFrequency(50) + tb~setPos(40, .true) + label~setText(40) + label~setFont(font1) + + id = self~constDir[IDC_TB_HORZ_TOP] + trackBars[id] = tb + tbLabels[id] = label + + -- Initialize the horizontal track bar with ticks on the both sides. + tb = self~newTrackBar(IDC_TB_HORZ_BOTH) + label = self~newStatic(IDC_ST_HORZ_BOTH) + + tb~initSelRange(20, 60) + tb~setTickFrequency(10) + tb~setPos(80, .true) + label~setText(80) + label~setFont(font1) + + id = self~constDir[IDC_TB_HORZ_BOTH] + trackBars[id] = tb + tbLabels[id] = label + + -- Initialize the vertical track bar with ticks on the right. + tb = self~newTrackBar(IDC_TB_VERT_RIGHT) + label = self~newStatic(IDC_ST_VERT_RIGHT) + + tb~setTickFrequency(10) + tb~setPos(30, .true) + label~setText(30) + + id = self~constDir[IDC_TB_VERT_RIGHT] + trackBars[id] = tb + tbLabels[id] = label + + -- Initialize the vertical track bar with ticks on the left. + tb = self~newTrackBar(IDC_TB_VERT_LEFT) + label = self~newStatic(IDC_ST_VERT_LEFT) + + tb~setTickFrequency(10) + tb~initRange(0,400) + tb~setLineStep(5) + tb~setPageStep(50) + tb~setPos(90, .true) + label~setText(90) + + id = self~constDir[IDC_TB_VERT_LEFT] + trackBars[id] = tb + tbLabels[id] = label + + -- Initialize the vertical track bar with ticks on the both sides. + tb = self~newTrackBar(IDC_TB_VERT_BOTH) + label = self~newStatic(IDC_ST_VERT_BOTH) + + tb~setTickFrequency(5) + tb~setPos(70, .true) + label~setText(70) + + id = self~constDir[IDC_TB_VERT_BOTH] + trackBars[id] = tb + tbLabels[id] = label + + -- Connect the event notification that is sent when a track bar is moved to + -- the onEndTrack() method. That method will update the text label for the + -- track bar with the new postition. + self~connectTrackBarEvent(IDC_TB_HORZ_BOTH, "EndTrack", "onEndTrack") + self~connectTrackBarEvent(IDC_TB_HORZ_TOP, "EndTrack", "onEndTrack") + self~connectTrackBarEvent(IDC_TB_HORZ_BOTTOM, "EndTrack", "onEndTrack") + self~connectTrackBarEvent(IDC_TB_VERT_RIGHT, "EndTrack", "onEndTrack") + self~connectTrackBarEvent(IDC_TB_VERT_LEFT, "EndTrack", "onEndTrack") + self~connectTrackBarEvent(IDC_TB_VERT_BOTH, "EndTrack", "onEndTrack") + +-- Update the static contol that shows the position for a slider when the +-- user is done moving it. +::method onEndTrack + expose trackBars tbLabels + use arg code, hwndTrackBar + + -- hwndTrackBar is the handle to the track bar that was moved. Get its + -- resource ID and use that as an index into the table of track bar objects + -- and the table of the labels. + id = self~getControlID(hwndTrackBar) + tbLabels[id]~setText(trackBars[id]~pos) + +-- We use the leaving() method to clean up (delete) the font we created. In +-- this program there is really no need to do this. As soon as the interpreter +-- terminates, the OS cleans up the resources automatically. The only time +-- cleaning up resources makes sense is in a long-running program that creates +-- and ends a lot of dialogs. Then, over time, the memory usge of the program +-- would keep growing. +::method leaving + expose font1 + self~deleteFont(font1) + +::method initAutoDetection + self~noAutoDetection + + +::class 'TabDlg' subclass RcControlDialog + +::method initDialog + expose font2 font3 imageList iconsRemoved needWrite + + -- Set the iconsRemoved and needWrite to false. These flags are used in + -- the OnDrawTabRect() method. + iconsRemoved = .false + needWrite = .false + + -- Connect the draw event of the owner-drawn button. This is sent when the + -- button needs to be drawn. Then connect the selection changed event of the + -- tab control. This is sent when the user clicks on a different tab. + self~connectDraw(IDC_PB_OWNERDRAW, "onDrawTabRect") + self~connectTabEvent(IDC_TAB_MAIN, "SELCHANGE", "onTabSelChange") + + tc = self~newTab(IDC_TAB_MAIN) + if tc == .nil then return + + -- Create a font used to display the name of the color in the owner-drawn + -- button. Create another font used to display some informative text. + font2 = self~createFontEX("Arial", 48, "BOLD ITALIC") + font3 = self~createFontEx("Arial", 16, "BOLD") + + -- Add all the tabs, including the index into the image list for an icon for + -- each tab. + tc~AddFullSeq("Red", 0, ,"Green", 1, , "Moss", 2, , "Blue", 3, , "Purple", 4, , "Cyan", 5, , "Gray", 6) + + -- Create a COLORREF (pure white) and load our bitmap. The bitmap is a + -- series of 16x16 images, each one a colored letter. + cRef = .Image~colorRef(255, 255, 255) + image = .Image~getImage("bmp\propertySheetDemoTab.bmp") + + -- Create our image list, as a masked image list. + flags = .DlgUtil~or(.Image~toID(ILC_COLOR24), .Image~toID(ILC_MASK)) + imageList = .ImageList~create(.Size~new(16, 16), flags, 10, 0) + if \image~isNull, \imageList~isNull then do + -- The bitmap is added and the image list deduces the number of images + -- from the width of the bitmap. For each image, the image list creates a + -- mask using the color ref. In essence, the mask is used to turn each + -- white pixel in the image to transparent. In this way, only the letter + -- part of the image shows and the rest of the image lets the under-lying + -- color show through. + imageList~addMasked(image, cRef) + tc~setImageList(imageList) + + -- The image list makes a copy of each image added to it. So, we can now + -- release the original image to free up some small amount of system + -- resoureces. + image~release + end + else do + iconsRemoved = .true + end + +-- When a new tab is selected, we have the owner-drawn button update itself. +-- This causes the button to redraw and the onDrawTabRect() method gets invoked, +-- which actually does the drawing. +::method onTabSelChange + button = self~newPushButton(IDC_PB_OWNERDRAW) + button~update + + +-- Fill the owner-drawn button with the color matching the tab's label and write +-- the name of the color. +::method onDrawTabRect + expose font2 font3 imageList iconsRemoved needWrite + use arg id + + button = self~newPushButton(id) + if button == .nil then return + tc = self~newTab(IDC_TAB_MAIN) + if tc == .nil then return + + -- Each time the 'Gray' tab is selected, we remove the tab icons. Then, when + -- one of the other tabs is selected we set the image list back. + currentTab = tc~selected + if currentTab == 'Gray' then do + tc~setImageList(.nil) + iconsRemoved = .true + needWrite = .true + end + else do + if iconsRemoved then do + tc~setImageList(imageList) + iconsRemoved = .false + needWrite = .true + end + end + + -- Get the button's device context, create pen and brush, and assign pen, + -- brush and font to the device context. + dc = button~getDC + pen = button~createPen(1, "SOLID", 0) + brush = button~createBrush(tc~SelectedIndex + 1) + + oldPen = button~objectToDc(dc, pen) + oldBrush = button~objectToDc(dc, brush) + oldFont = button~fontToDC(dc, font2) + button~transparentText(dc) + + -- Draw a filled in rectangle and write text + button~rectangle(dc, 5, 5, button~SizeX * button~FactorX - 10, button~SizeY * button~FactorY - 10, "FILL") + button~writeDirect(dc, 30, 50, tc~Selected) + + -- Add informative text if needed. + if needWrite then do + button~fontToDC(dc, font3) + if currentTab == 'Gray' then button~writeDirect(dc, 30, 120, "(Tab icons are removed)") + else button~writeDirect(dc, 30, 120, "(Tab icons are restored)") + needWrite = .false + end + + -- Restore pen, brush, and font, then release the device context. + button~objectToDc(dc, oldPen) + button~objectToDc(dc, oldBrush) + button~fontToDC(dc, oldFont) + button~opaqueText(dc) + + button~deleteObject(pen) + button~deleteObject(brush) + button~freeDC(dc) + +-- We use the leaving() method to clean up (delete) the fonts and the image list +-- we created. In this program there is really no need to do this. As soon as +-- the interpreter terminates, the OS cleans up the resources automatically. +-- The only time cleaning up resources makes sense is in a long-running program +-- that creates and ends a lot of dialogs. Then, over time, the memory usge of +-- the program would keep growing. +::method leaving + expose font2 font3 imageList + + self~deleteFont(font2) + self~deleteFont(font3) + imageList~release + Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oobandit.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oobandit.rex 2010-12-18 00:59:20 UTC (rev 6497) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oobandit.rex 2010-12-18 01:03:34 UTC (rev 6498) @@ -212,7 +212,7 @@ speedCtrl = self~newEdit(1205) speedCtrl~setLimit(maxSpeed~length - 1) - ret = speedCtrl~connectKeyEvent(onKey); say 'connectKeyEvent ret:' ret + ret = speedCtrl~connectKeyEvent(onKey) jackPotCtrl = self~newStatic(1200) @@ -220,15 +220,12 @@ self~disableControl(1100) self~start("bandit") +-- An attempt to disallow cut and paste into the speed control. ::method onKey unguarded expose speedCtrl use arg key, shift, control, alt, info - say 'Key press:' key 'shift?' shift 'control?' control 'alt?' alt 'info:' info - say - say 'speed text:' speedCtrl~getText s = speedCtrl~selection - say 'selection:' s~startChar s~endChar if control then return .false -- Don't allow cut and paste if key == 57 then return .false Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/PropertySheetDemo.rc =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/PropertySheetDemo.rc 2010-12-18 00:59:20 UTC (rev 6497) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/PropertySheetDemo.rc 2010-12-18 01:03:34 UTC (rev 6498) @@ -47,7 +47,7 @@ CAPTION "List View Control" FONT 9, "Arial" { - CONTROL "ListView", IDC_LV_MAIN, WC_LISTVIEW, WS_TABSTOP | WS_BORDER | LVS_REPORT, 7, 7, 290, 236 + CONTROL "ListView", IDC_LV_MAIN, WC_LISTVIEW, WS_TABSTOP | WS_BORDER | LVS_REPORT, 7, 7, 286, 236 } Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/TabDemo.h =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/TabDemo.h (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/TabDemo.h 2010-12-18 01:03:34 UTC (rev 6498) @@ -0,0 +1,44 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2010 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +#ifndef IDC_STATIC +#define IDC_STATIC (-1) +#endif + +#define IDC_TAB 1000 +#define IDC_PB_PREVIOUS 1001 +#define IDC_PB_NEXT 1002 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-12-29 23:43:01
|
Revision: 6531 http://oorexx.svn.sourceforge.net/oorexx/?rev=6531&view=rev Author: miesfeld Date: 2010-12-29 23:42:55 +0000 (Wed, 29 Dec 2010) Log Message: ----------- Sync my sandbox ooDialog 4.2.0 with main up through r6530 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DynamicDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DynamicDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DynamicDialog.cls 2010-12-29 23:14:50 UTC (rev 6530) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DynamicDialog.cls 2010-12-29 23:42:55 UTC (rev 6531) @@ -353,7 +353,7 @@ if nob = 0 then return self~createGroupBox(idstat, x, y, mx+cx, highy-y+(stepy % 2), newopts, "") else return 0 -::method createPushButtonGroup +::method createPushButtonGroup -- TODO this doesn't support symbolic IDs. use arg x, y, cx, cy, inp, bottom, opts = "" parse var inp bt bid bfnk newinp @@ -802,6 +802,7 @@ else if kind = "GB" then do if style~wordpos("BS_LEFT") > 0 then ret = ret || " LEFT" if style~wordpos("BS_RIGHT") > 0 then ret = ret || " RIGHT" + if style~wordpos("BS_CENTER") > 0 then ret = ret || " CENTER" if style~wordpos("WS_BORDER") > 0 then ret = ret || " BORDER" if style~wordpos("WS_TABSTOP") > 0 then ret = ret || " TAB" end Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2010-12-29 23:14:50 UTC (rev 6530) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2010-12-29 23:42:55 UTC (rev 6531) @@ -4085,7 +4085,7 @@ * * @return 1 (true) if the window was previously disabled, returns 0 (false) * if the window was not previously disabled. Note that this is not - * succes or failure. -1 on error + * succes or failure. * * @note Sets the .SystemErrorCode. * Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2010-12-29 23:14:50 UTC (rev 6530) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2010-12-29 23:42:55 UTC (rev 6531) @@ -415,8 +415,8 @@ /** GroupBox::style=() * * A group box is a button, but the only style change that makes much sense is - * the right or left alignment of the text. Other changes either have no - * effect, or cause the group box / dialog to paint in a weird way. + * the right, center or left alignment of the text. Other changes either have + * no effect, or cause the group box / dialog to paint in a weird way. */ RexxMethod2(int, gb_setStyle, CSTRING, opts, CSELF, pCSelf) { @@ -427,41 +427,63 @@ if ( stricmp(opts, "RIGHT") == 0 ) { - style = (style & ~BS_CENTER) | BS_RIGHT; + style = (style & ~(BS_CENTER | BS_LEFT)) | BS_RIGHT; } else if ( stricmp(opts, "LEFT") == 0 ) { - style = (style & ~BS_CENTER) | BS_LEFT; + style = (style & ~(BS_CENTER | BS_RIGHT)) | BS_LEFT; } + else if ( stricmp(opts, "CENTER") == 0 ) + { + style = (style & ~(BS_RIGHT | BS_LEFT)) | BS_CENTER; + } else { - wrongArgValueException(context->threadContext, 1, "RIGHT, LEFT", opts); + wrongArgValueException(context->threadContext, 1, "RIGHT, CENTER, or LEFT, ", opts); return 0; } /** * When the alignment changes, we need to force the dialog to redraw the * area occupied by the group box. Otherwise the old text remains on the - * screen. But, it is only the top part of the group box that needs to be - * redrawn, so we only invalidate the top half of the group box. + * screen. Likewise, when we force the dialog to redraw the background, we + * need to force the group box to redraw. But, it is only the top part of + * the group box that needs to be redrawn, so we only invalidate the top + * half of the group box. + * + * The sequence below works. There may be a better sequence, but the ones + * I've tried, don't work. */ + + // Change the group box style, then force the repainting. + SetWindowLong(hwnd, GWL_STYLE, style); + SendMessage(hwnd, BM_SETSTYLE, (WPARAM)style, (LPARAM)TRUE); + RECT r; + LONG halfHeight; // Get the screen area of the group box and map it to the client area of the - // dialog. + // dialog. This forces the dialog to repaint the background, which erases + // the group box text. GetWindowRect(hwnd, &r); MapWindowPoints(NULL, hDlg, (LPPOINT)&r, 2); - LONG halfHeight = ((r.bottom - r.top) / 2); + halfHeight = ((r.bottom - r.top) / 2); r.bottom = (halfHeight >= MIN_HALFHEIGHT_GB ? r.top + halfHeight : r.bottom); - // Change the group box style, force the dialog to repaint. - SetWindowLong(hwnd, GWL_STYLE, style); - SendMessage(hwnd, BM_SETSTYLE, (WPARAM)style, (LPARAM)TRUE); - InvalidateRect(hDlg, &r, TRUE); UpdateWindow(hDlg); + // Now force the group box to repaint the text. + GetWindowRect(hwnd, &r); + MapWindowPoints(NULL, hwnd, (LPPOINT)&r, 2); + + halfHeight = ((r.bottom - r.top) / 2); + r.bottom = (halfHeight >= MIN_HALFHEIGHT_GB ? r.top + halfHeight : r.bottom); + + InvalidateRect(hwnd, &r, TRUE); + UpdateWindow(hwnd); + return 0; } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp 2010-12-29 23:14:50 UTC (rev 6530) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp 2010-12-29 23:42:55 UTC (rev 6531) @@ -1820,8 +1820,9 @@ text = ""; } - // For a groupbox, we support right or left aligned text. By default the - // alignment is left so we only need to check for the RIGHT key word. + // For a groupbox, we support right, center, or left aligned text. By + // default the alignment is left so we only need to check for the RIGHT and + // CENTER key word. uint32_t style = WS_CHILD | BS_GROUPBOX; style |= getCommonWindowStyles(opts, false, false); @@ -1829,6 +1830,10 @@ { style |= BS_RIGHT; } + else if ( StrStrI(opts, "CENTER") != NULL ) + { + style |= BS_CENTER; + } if ( ! addToDialogTemplate(context, pcdd, ButtonAtom, NULL, id, x, y, cx, cy, text, style) ) { Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex 2010-12-29 23:14:50 UTC (rev 6530) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex 2010-12-29 23:42:55 UTC (rev 6531) @@ -82,13 +82,11 @@ self~createTab(IDC_TAB, 10, 5, 305, 265) - self~createPushButton(IDC_PB_PREVIOUS, 10, 278, 60, 14, , "Previous Control") - self~createPushButton(IDC_PB_NEXT, 80, 278, 60, 14, , "Next Control") + self~createPushButton(IDC_PB_PREVIOUS, 10, 278, 60, 14, , "Previous Control", onPrevious) + self~createPushButton(IDC_PB_NEXT, 80, 278, 60, 14, , "Next Control", onNext) self~createPushButton(IDOK, 185, 278, 60, 14, "DEFAULT", "Ok") self~createPushButton(IDCANCEL, 255, 278, 60, 14, , "Cancel") - self~connectButtonEvent(IDC_PB_PREVIOUS, CLICKED, onPrevious) - self~connectButtonEvent(IDC_PB_NEXT, CLICKED, onNext) self~connectTabEvent(IDC_TAB, SELCHANGE, onNewTab) /** initDialog() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2011-01-09 23:36:48
|
Revision: 6568 http://oorexx.svn.sourceforge.net/oorexx/?rev=6568&view=rev Author: miesfeld Date: 2011-01-09 23:36:41 +0000 (Sun, 09 Jan 2011) Log Message: ----------- Sync sandbox ooDialog 4.2.0 with main Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodRoutines.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/ChangeFont.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/ReadMe.txt Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/PaidHolidays.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.rc Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-01-09 23:36:41 UTC (rev 6568) @@ -195,6 +195,7 @@ ::method removeStyle unguarded external "LIBRARY oodialog e_style" ::method getStyle unguarded external "LIBRARY oodialog e_style" ::method noContextMenu unguarded external "LIBRARY oodialog e_noContextMenu" +::method disableInternalResize unguarded external "LIBRARY oodialog e_disableInternalResize" ::method canUndo unguarded use strict arg @@ -1445,7 +1446,7 @@ ::method setCALID unguarded external "LIBRARY oodialog mc_setCALID" ::method setColor unguarded external "LIBRARY oodialog mc_setColor" ::method setCurrentView unguarded external "LIBRARY oodialog mc_setCurrentView" -::method setDayStatec unguarded external "LIBRARY oodialog mc_setDayState" +::method setDayState unguarded external "LIBRARY oodialog mc_setDayState" ::method setDayStateQuick unguarded external "LIBRARY oodialog mc_setDayStateQuick" ::method setFirstDayOfWeek unguarded external "LIBRARY oodialog mc_setFirstDayOfWeek" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-01-09 23:36:41 UTC (rev 6568) @@ -65,6 +65,13 @@ use strict arg msgToRise return self~addUserMsg(msgToRise, 0x00000003, 0xFFFFFFFF, 0, 0, 0, 0) +-- WM_EXITSIZEMOVE +::method connectSizeMoveEnded + use strict arg msgToRise, willReply = .true + tag = 0 + if willReply then tag = 0x02000000 + self~addUserMsg(msgToRise, "0x00000232", "0xFFFFFFFF", 0, 0, 0, 0, tag) + -- WM_WINDOWPOSCHANGED ::method connectPosChanged use strict arg msgToRise Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-01-09 23:36:41 UTC (rev 6568) @@ -162,7 +162,7 @@ do i = 1 to count resultArray[i] = .DayState~new end - return .DayStates~makeDayStateBuffer(resultArray, count) + return .DayStates~makeDayStateBuffer(resultArray) end do i = 1 to count @@ -180,7 +180,7 @@ resultArray[i] = .DayState~new end - return .DayStates~makeDayStateBuffer(resultArray, count) + return .DayStates~makeDayStateBuffer(resultArray) ::method addYear expose startMonth endMonth years @@ -1146,9 +1146,9 @@ use arg DlgObj,Margin,NoResize,NoMove -if NoResize~String \= 'a Set' then NoResize = .Set~new +if \NoResize~isA(.Set) then NoResize = .Set~new self~NoResize = NoResize -if NoMove~String \= 'a Set' then NoMove = .Set~new +if \NoMove~isA(.Set) then NoMove = .Set~new self~NoMove = NoMove if \margin~datatype('n') then margin = 5 @@ -1157,6 +1157,7 @@ self~init:super(0,0,DlgObj~sizeX,DlgObj~sizeY,margin) +self~updateOnResize = .true self~OriginalWidth = DlgObj~sizeX self~OriginalHeight = DlgObj~sizeY self~LastError = .nil @@ -1289,12 +1290,14 @@ if \self~NoMove~HasIndex(DOid) then dlg~MoveItem(DOid,DOx * wFactor,DOy * hFactor,"NOREDRAW") end /* DO */ - dlg~update + + if self~updateOnResize then dlg~update /* ------------------------------------------------------------------------- */ -::method OriginalWidth Attribute Private -::method OriginalHeight Attribute Private -::method NoResize Attribute -::method NoMove Attribute -::method CorrectionFactor Attribute -::method LastError Attribute +::attribute OriginalWidth Private +::attribute OriginalHeight Private +::attribute NoResize +::attribute NoMove +::attribute CorrectionFactor +::attribute LastError +::attribute updateOnResize Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2011-01-09 23:36:41 UTC (rev 6568) @@ -1865,6 +1865,135 @@ } +LRESULT CALLBACK EditSizeProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, UINT_PTR id, DWORD_PTR dwData) +{ + switch ( msg ) + { + case WM_SIZE: + // Do not let the edit control resize itself. + return TRUE; + + case WM_NCDESTROY: + /* The window is being destroyed, remove the subclass, clean up + * memory. + */ + RemoveWindowSubclass(hwnd, EditSizeProc, id); + LocalFree((HLOCAL)dwData); + break; + } + return DefSubclassProc(hwnd, msg, wParam, lParam); +} + +/** Edit::disableInternalResize() + * + * The edit control, internally, resizes itself in response to its parent + * dialog being resized. There are times when this behavior may not be + * desired. + * + * The disableInternalResize method can be used to disable that behavior. + * + * @param disable [optional] If true, disable the edit control's internal + * resizing. If false, renable the behavior, if it has been + * disabled. The default is true. + * + * @return True on success, false on failure. + * + * @notes Requires ComCtl version 6.0 or higher. + * + * Sets the .SystemErrorCode. These codes may be set, by the ooDialog + * framework, the OS does not set any: + * + * ERROR_NOT_SUPPORTED The request is not supported. + * Meaning: Asked to disable internal resizing when it was already disabled, + * or asked to re-ennable the behavior when it is not disabled to + * begin with. + * + * ERROR_SIGNAL_REFUSED The recipient process has refused the signal. + * Meaning: Tried to re-enable the internal resizing, but failed. + * + * @remarks The above doc is for oodialg.pdf of course. Internally this + * method is implemented by subclassing the edit control. The + * subclass swallows the WM_SIZE messages. You might think that this + * would prevent the programmer from resizing the control, but it + * does not. + */ +RexxMethod2(RexxObjectPtr, e_disableInternalResize, OPTIONAL_logical_t, disable, CSELF, pCSelf) +{ + oodResetSysErrCode(context->threadContext); + + RexxObjectPtr result = TheFalseObj; + if ( ! requiredComCtl32Version(context, "disableInternalResize", COMCTL32_6_0) ) + { + goto done_out; + } + + pCDialogControl pcdc = (pCDialogControl)pCSelf; + + if ( argumentOmitted(1) ) + { + disable = TRUE; + } + + SUBCLASSDATA *pData = NULL; + BOOL success = GetWindowSubclass(pcdc->hCtrl, EditSizeProc, pcdc->id, (DWORD_PTR *)&pData); + + if ( ! disable ) + { + if ( pData == NULL ) + { + // The subclass is not installed, we call this an error. + oodSetSysErrCode(context->threadContext, ERROR_NOT_SUPPORTED); + goto done_out; + } + + if ( SendMessage(pcdc->hDlg, WM_USER_SUBCLASS_REMOVE, (WPARAM)EditSizeProc, (LPARAM)pcdc->id) == 0 ) + { + // The subclass is not removed, we can't free pData because the + // subclass procedure may (will) still access it. + oodSetSysErrCode(context->threadContext, ERROR_SIGNAL_REFUSED); + } + else + { + LocalFree(pData); + result = TheTrueObj; + } + goto done_out; + } + + if ( pData != NULL ) + { + // The subclass is already installed, we call this an error. + oodSetSysErrCode(context->threadContext, ERROR_NOT_SUPPORTED); + goto done_out; + } + + pData = (SUBCLASSDATA *)LocalAlloc(LPTR, sizeof(SUBCLASSDATA)); + if ( pData == NULL ) + { + outOfMemoryException(context->threadContext); + goto done_out; + } + + // We do not need any extra data (pData->pData) + pData->hCtrl = pcdc->hCtrl; + pData->uID = pcdc->id; + pData->pData = NULL; + + if ( SendMessage(pcdc->hDlg, WM_USER_SUBCLASS, (WPARAM)EditSizeProc, (LPARAM)pData) == 0 ) + { + // The subclass was not installed, free memeory, set error code. + LocalFree(pData); + oodSetSysErrCode(context->threadContext, ERROR_SIGNAL_REFUSED); + goto done_out; + } + + result = TheTrueObj; + +done_out: + return result; +} + + /** Edit::getStyle() * Edit::replaceStyle() * Edit::removeStyle() Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-01-09 23:36:41 UTC (rev 6568) @@ -963,6 +963,7 @@ * @param np * @param handle * @param item + * @param tag * * @return MsgReplyType * @@ -979,7 +980,7 @@ * getting converted properly. */ MsgReplyType genericInvokeDispatch(pCPlainBaseDialog pcpbd, char *rexxMethod, WPARAM wParam, LPARAM lParam, - char *np, HANDLE handle, int item) + char *np, HANDLE handle, int item, uint32_t tag) { RexxThreadContext *c = pcpbd->dlgProcContext; RexxStringObject method = c->String(rexxMethod); @@ -1017,7 +1018,17 @@ args = c->ArrayOfTwo(c->Uintptr(wParam), c->Intptr(lParam)); } - return invokeDispatch(c, pcpbd->rexxSelf, method, args); + if ( tag & TAG_REPLYFROMREXX ) + { + // We only get here for messages where what the Rexx method returns is + // discarded / ignored. + invokeDirect(c, pcpbd->rexxSelf, rexxMethod, args); + return ReplyTrue; + } + else + { + return invokeDispatch(c, pcpbd->rexxSelf, method, args); + } } inline RexxStringObject mcnViewChange2rexxString(RexxThreadContext *c, uint32_t view) @@ -1876,7 +1887,7 @@ lParam = (((NMBCHOTITEM *)lParam)->dwFlags & HICF_ENTERING) ? 1 : 0; } - return genericInvokeDispatch(pcpbd, m[i].rexxMethod, wParam, lParam, np, handle, item); + return genericInvokeDispatch(pcpbd, m[i].rexxMethod, wParam, lParam, np, handle, item, m[i].tag); } } @@ -2061,7 +2072,7 @@ handle = (HANDLE)lParam; } - return genericInvokeDispatch(pcpbd, m[i].rexxMethod, wParam, lParam, np, handle, item); + return genericInvokeDispatch(pcpbd, m[i].rexxMethod, wParam, lParam, np, handle, item, m[i].tag); } } return ContinueProcessing; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-01-09 23:36:41 UTC (rev 6568) @@ -566,6 +566,7 @@ REXX_METHOD_PROTOTYPE(e_showBallon); REXX_METHOD_PROTOTYPE(e_hideBallon); REXX_METHOD_PROTOTYPE(e_setCue); +REXX_METHOD_PROTOTYPE(e_disableInternalResize); REXX_METHOD_PROTOTYPE(e_style); // ComboBox @@ -1265,6 +1266,7 @@ REXX_METHOD(e_showBallon, e_showBallon), REXX_METHOD(e_hideBallon, e_hideBallon), REXX_METHOD(e_setCue, e_setCue), + REXX_METHOD(e_disableInternalResize, e_disableInternalResize), // ComboBox REXX_METHOD(cb_getText, cb_getText), Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodRoutines.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodRoutines.cpp 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodRoutines.cpp 2011-01-09 23:36:41 UTC (rev 6568) @@ -444,7 +444,7 @@ } // Possible owner window. - if ( argumentExists(2) && !_hwndOwner != '\0' ) + if ( argumentExists(2) && *_hwndOwner != '\0' ) { OpenFileName.hwndOwner = (HWND)string2pointer(_hwndOwner); } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-01-09 23:36:41 UTC (rev 6568) @@ -1162,6 +1162,11 @@ } MONTHDAYSTATE *pmds = (MONTHDAYSTATE *)c->BufferData(_mds); + if ( ppmds != NULL ) + { + *ppmds = pmds; + } + RexxObjectPtr rxMDSVal; PDAYSTATE pDayState; @@ -1178,10 +1183,6 @@ *pmds = pDayState->val; } - if ( ppmds != NULL ) - { - *ppmds = pmds; - } return _mds; } @@ -1205,8 +1206,9 @@ return _mds; } -RexxMethod3(RexxObjectPtr, dss_makeDayStateBuffer, RexxArrayObject, list, size_t, count, OSELF, self) +RexxMethod1(RexxObjectPtr, dss_makeDayStateBuffer, RexxArrayObject, list) { + size_t count = context->ArrayItems(list); return makeDayStateBuffer(context, list, count, NULL); } Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex 2011-01-09 23:36:41 UTC (rev 6568) @@ -0,0 +1,151 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2006-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * DlgAreaDemoTwo.Rex + * + * Demonstrates a second approach to resizable dialogs. Essentially what this + * approach does is to defer the redrawing of the dialog controls until the + * user has finished resizing the dialog. + * + * By default, the DialogAreaU class calls a dialog method (the update method) + * that forces all the dialog controls to redraw themselves every time a resize + * event ocurrs. This causes the constant flicker seen in DlgAreaDemo.rex. + * + * The approach taken here is to tell the DialogAreaU object to *not* invoke + * the update method during the resize event. This is done by setting the + * updateOnResize attribute to false in the DialogAreaU object. + * + * Then we connect the size / move ended event to a method in our dialog. This + * event is called exactly once when the user has stopped resizing or moving + * the dialog. + * + * We keep track of whether the user is resizing, or not. When we get the size + * move ended event, if the user was resizing, we invoked the update method of + * the dialog, forcing all the dialog controls to redraw themselves in their + * new, final, position. + * + * This eliminates the flicker, but also makes it appear as though the dialog + * controls are not changing while the user is actively resizing. When the + * user stops resizing, the dialog controls "magically" appear in their new + * size and position. + * + * Which approach is better is probably a matter of personal preference. + */ + + myDlg = .MyDialog~new + myDlg~execute('ShowTop') + + return 0 + +::requires "ooDialog.cls" + +::class 'MyDialog' subclass UserDialog + +::method init + + self~init:super + self~createCenter(250, 250, 'MyDialog', - + 'ThickFrame MinimizeBox MaximizeBox', , - + 'MS Sans Serif', 8) + + self~connectResize('onResize') + self~connectSizeMoveEnded('onSizeMoveEnded') + + +::method defineDialog + expose u sizing + + u = .dlgAreaU~new(self) /* whole dlg */ + if u~lastError \= .nil then call errorDialog u~lastError + + -- Tell the DialogAreaU object to not invoke the update method. We are not + -- resizing now. + u~updateOnResize = .false + sizing = .false + + u~noResize~put(13) + e = .dlgArea~new(u~x , u~y , u~w('70%'), u~h('90%')) /* edit area */ + s = .dlgArea~new(u~x , u~y('90%'), u~w('70%'), u~hr ) /* status area */ + b = .dlgArea~new(u~x('70%'), u~y , u~wr , u~hr ) /* button area */ + + self~addEntryLine(12, 'text', e~x, e~y, e~w, e~h, 'multiline') + self~addText(s~x, s~y, s~w, s~h, 'Status info appears here', , 11) + + self~addButton(13, b~x, b~y('00%'), b~w, b~h('9%'), 'Button' 0 , 'Button'||0) + self~addButton(14, b~x, b~y('10%'), b~w, b~h('9%'), 'Button' 1 , 'Button'||1) + self~addButton(15, b~x, b~y('20%'), b~w, b~h('9%'), 'Button' 2 , 'Button'||2) + self~addButton(16, b~x, b~y('30%'), b~w, b~h('9%'), 'Button' 3 , 'Button'||3) + self~addButton(17, b~x, b~y('40%'), b~w, b~h('9%'), 'Button' 4 , 'Button'||4) + self~addButton(18, b~x, b~y('50%'), b~w, b~h('9%'), 'Button' 5 , 'Button'||5) + self~addButton(19, b~x, b~y('60%'), b~w, b~h('9%'), 'Button' 6 , 'Button'||6) + self~addButton( 1, b~x, b~y('90%'), b~w, b~h('9%'), 'Ok', 'Ok', 'DEFAULT') + + +::method initDialog + + -- The underlying edit controls internally resize themselves as the dialog + -- they are contained in is resized. We don't want that, so we disable that + -- behavior in the underlying edit control. + self~newEdit(12)~disableInternalResize + + +::method onResize unguarded + expose u sizing + use arg dummy, sizeinfo + + -- We are resizing now. + sizing = .true + + u~resize(self, sizeinfo) + return 0 + + +::method onSizeMoveEnded unguarded + expose sizing + + -- If we were resizing, force the dialog controls to redraw themselves. + if sizing then self~update + + -- We are not resizing. + sizing = .false + return 0 + + +::method unknown + use arg msgname, args + self~newStatic(11)~setText('You Pressed' msgname) Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/ChangeFont.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/ChangeFont.rex 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/ChangeFont.rex 2011-01-09 23:36:41 UTC (rev 6568) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2009-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2009-2011 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 */ @@ -93,9 +93,14 @@ editControl~setText("") - fileName = fileNameDialog( , self~dlgHandle, , 1, "Open a File for Editing") - if fileName == "" then return + -- Have the open file dialog start in the same directory as the location of + -- this program. + parse source . . programSrc + startDirectory = fileSpec('L', programSrc) + fileName = fileNameDialog(startDirectory, self~dlgHandle, , 1, "Open a File for Editing") + if fileName == 0 then return + fObj = .stream~new(fileName) fObj~open if fObj~state \== 'READY' then return self~abort @@ -113,18 +118,10 @@ editControl~setFont(newFont) self~newPushButton(IDC_PB_CHANGE_FONT)~disable -::method cancel +::method leaving expose newFont - if newFont \= .nil then self~deleteFont(newFont) - self~cancel:super -::method ok - expose newFont - - if newFont \= .nil then self~deleteFont(newFont) - self~ok:super - ::method abort private j = errorDialog("There is an unexplained error. Program Abort") return self~cancel Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/Makefile.am =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/Makefile.am 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/Makefile.am 2011-01-09 23:36:41 UTC (rev 6568) @@ -1,6 +1,6 @@ #/*----------------------------------------------------------------------------*/ #/* */ -#/* Copyright (c) 2009-2010 Rexx Language Association. All rights reserved. */ +#/* Copyright (c) 2009-2011 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 */ @@ -39,5 +39,5 @@ MAINTAINERCLEANFILES = Makefile.in *~ -EXTRA_DIST = *.rex *.txt +EXTRA_DIST = *.rex *.rc *.h *.txt Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/PaidHolidays.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/PaidHolidays.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/PaidHolidays.rex 2011-01-09 23:36:41 UTC (rev 6568) @@ -0,0 +1,190 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * Simple example of using the month calendar control. + * + * Although this example is relatively simple, it shows how to use a number of + * features of the month calendar: + * + * * How to size a month calendar to its optimal size. + * * How to restrict the range of months the calendar displays. + * * How to determine which month(s) are currently displayed in the control. + * * How to customize the calendar and display certain dates in bold. + * * How to connect and respond to the GETDAYSTATE event. + * + * The application is for a hypothetical company, used to show the paid holidays + * for the current year. The dialog displays a month calendar for the current + * year and as the user pages through the months, the paid holidays are high- + * lighted in the calendar by bolding the dates. + * + * Note that to keep this simple, the "current" year is rather hard-coded. + * However, it would not be too hard to enhance the program to calculate the + * paid holidays dynamically. + * + * To fully understand this program, please read the ooDialog doc. + */ + + dlg = .HolidayCalendarDlg~new("paidHolidays.rc", IDD_HOLIDAY_DLG, , "paidHolidays.h") + + if dlg~initCode == 0 then do + dlg~execute("SHOWTOP", IDI_DLG_OOREXX) + end + else do + say + say "Error creating dialog, aborting." + return 99 + end + +return 0 + +::requires "ooDialog.cls" + +::class 'HolidayCalendarDlg' subclass RcDialog + +::method initDialog + expose calendar + + -- Connect the GETDAYSTATE event. + self~connectMonthCalendarEvent(IDC_MC_HOLIDAYS, "GETDAYSTATE", onGetDayState) + + calendar = self~newMonthCalendar(IDC_MC_HOLIDAYS) + + -- Size the calendar to its optimal size + self~sizeCalendar(calendar) + + -- Restrict the calendar so that it only displays the year 2011. + start = .DateTime~fromStandardDate("20110101") + end = .DateTime~fromStandardDate("20111231") + + calendar~setRange(.array~of(start, end)) + + -- Determine which months are currently displayed in the calendar. The first + -- and last months showing are returned in the passed in array as .DateTime + -- objects. The return from getMonthRange() is the number of months + -- displayed. The 'P' argument means to include Partially shown months. + monthsShowing = .array~new + count = calendar~getMonthRange(monthsShowing, 'P') + + -- Bold the appropriate days in the month(s) currently showing. To do that, + -- we need an array of .DayState objects. + dayStates = self~getDayStateArray(monthsShowing[1], count) + calendar~setDayState(dayStates) + + +-- This is the GETDAYSTATE event handler. The underlying month calendar sends +-- this notification whenever it needs to refresh the calendar display for a +-- new month. The arguments are a .DateTime object that specifies the first +-- month to get the day state for and the second argument is the count of months +-- needed. To reply to this notification we need to return a buffer containing +-- the required day states. Creating the buffer correctly needs to be done +-- through the .DayStates class, where a class method is provided to create the +-- buffer. +::method onGetDayState unguarded + expose calendar + use arg startDate, count + + dayStates = self~getDayStateArray(startDate, count) + + buffer = .DayStates~makeDayStateBuffer(dayStates) + return buffer + + +-- This function resizes the calendar to its optimal size. The getMinRect() +-- method of the MonthCalendar returns the minimum required size to completely +-- display a full month. The method fills in the .Rect object with the correct +-- size. The top and left attributes in the returned .Rect are always set to 0, +-- so the right and bottom attributes are the width and height, in pixels, +-- needed for the calendar. We then use the return to adjust the size of the +-- calendar, while leaving the postion of the top, left corner of the calendar +-- at the same spot. +::method sizeCalendar private + use strict arg calendar + + r = .Rect~new + if calendar~getMinRect(r) then calendar~resizeTo(.Size~new(r~right, r~bottom)) + + +-- This function returns an array of .DayState objects for the specified months. +-- A day state object specifies which days in a month should be bolded. +::method getDayStateArray private + use strict arg startMonth, count + + -- Create the array to hold the .DayState objects. + d = .array~new(count) + + -- We know that the month calendar always asks for any partially displayed + -- months. We also know that our calendar only displays 1 month completely, + -- and displays the partial month preceding and the partial month following. + -- Therefore, if the complete month is January 2011, the preceding month will + -- be December 2010. Likewise we know that the range set for the calendar is + -- January 2011 through December 2011, January 2012 can never be shown, so + -- December 2011 can never be a preceding month. Therefore, if the start + -- month is 12, it must be December 2010. We give that month a 0 number so + -- that getDayState() will return an empty .DayState object. + month = startMonth~month + if month == 12 then month = 0 + + do i = 1 to count + d[i] = self~getDayState(month + i - 1) + end + + return d + +-- This function initalizes a .DayState object to the proper value depending on +-- the month specified. +::method getDayState private + use strict arg month + + select + when month == 1 then ds = .DayState~new(17) + when month == 2 then ds = .DayState~new(21) + when month == 3 then ds = .DayState~new + when month == 4 then ds = .DayState~new + when month == 5 then ds = .DayState~new(30) + when month == 6 then ds = .DayState~new + when month == 7 then ds = .DayState~new(4) + when month == 8 then ds = .DayState~new + when month == 9 then ds = .DayState~new(5) + when month == 10 then ds = .DayState~new + when month == 11 then ds = .DayState~new(24, 25) + when month == 12 then ds = .DayState~new(23, 30) + otherwise ds = .DayState~new() + end + -- End select + + return ds Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/ReadMe.txt =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/ReadMe.txt 2011-01-09 23:27:16 UTC (rev 6567) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/ReadMe.txt 2011-01-09 23:36:41 UTC (rev 6568) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2009-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2009-2011 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 */ @@ -56,3 +56,10 @@ Shows how to create a new font correctly and how to change the font of a dialog control using the created font. It is also an example of a multi-line edit control and shows how to enable and disable buttons. + + - PaidHolidays.rex + + Shows how to use a MonthCalendar control, inlcuding responding to the + GETDAYSTATE event. Also shows how to: restrict the time span shown in + the calendar, resize the calendar to the optimal size, and determine + which months are currently displayed. Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.h =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.h (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.h 2011-01-09 23:36:41 UTC (rev 6568) @@ -0,0 +1,43 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +#ifndef IDC_STATIC +#define IDC_STATIC (-1) +#endif + +#define IDD_HOLIDAY_DLG 101 +#define IDC_MC_HOLIDAYS 1003 Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.rc =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.rc (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.rc 2011-01-09 23:36:41 UTC (rev 6568) @@ -0,0 +1,53 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +#include <windows.h> +#include <commctrl.h> +#include "paidHolidays.h" + + +// Dialog resources + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_HOLIDAY_DLG DIALOG 0, 0, 209, 124 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "2011 Calendar - US - Paid Holidays" +FONT 8, "Ms Shell Dlg" +{ + DEFPUSHBUTTON "OK", IDOK, 152, 103, 50, 14 + CONTROL "", IDC_MC_HOLIDAYS, MONTHCAL_CLASS, WS_TABSTOP | MCS_DAYSTATE, 9, 10, 122, 93 + LTEXT "Holiday calendar for 2011. Paid holidays are in bold.", IDC_STATIC, 136, 18, 60, 46, SS_LEFT +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2011-01-12 05:21:25
|
Revision: 6579 http://oorexx.svn.sourceforge.net/oorexx/?rev=6579&view=rev Author: miesfeld Date: 2011-01-12 05:21:15 +0000 (Wed, 12 Jan 2011) Log Message: ----------- Sync up ooDialog 4.2.0 in my sandbox to main, through r6578 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/ooRexxTry/ooRexxTry.rex Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemo.h Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-01-12 04:09:06 UTC (rev 6578) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-01-12 05:21:15 UTC (rev 6579) @@ -268,6 +268,7 @@ ::method resolveIconID private external "LIBRARY oodialog rsrcUtils_resolveIconID_pvt" ::method resolveSymbolicId unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" ::method resolveResourceID unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" +::method getResourceID unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" ::method checkID external "LIBRARY oodialog rsrcUtils_checkID" /** @@ -328,7 +329,13 @@ ::constant WM_NEXTDLGCTL "0x0028" ::constant WM_USER_INTERRUPTSCROLL "0x0A02" +::constant SIZE_RESTORED 0 +::constant SIZE_MINIMIZED 1 +::constant SIZE_MAXIMIZED 2 +::constant SIZE_MAXSHOW 3 +::constant SIZE_MAXHIDE 4 + ::method init class external "LIBRARY oodialog pbdlg_init_cls" ::method setDefaultFont class external "LIBRARY oodialog pbdlg_setDefaultFont_cls" ::method getFontName class external "LIBRARY oodialog pbdlg_getFontName_cls" @@ -347,7 +354,8 @@ -- finsished is now a boolean, when set to .true, the dialog ends. Older ooDialog set it -- to 2 on an abnormal termination of the underlying dialog. This is no longer done. -::attribute finished +::attribute finished get external "LIBRARY oodialog pbdlg_getFinished" +::attribute finished set external "LIBRARY oodialog pbdlg_setFinished" ::method dlgData private expose dlgData. Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-01-12 04:09:06 UTC (rev 6578) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-01-12 05:21:15 UTC (rev 6579) @@ -300,7 +300,7 @@ self~AddLine(10, self~sy+4+10, size) self~createPushButtonGroup(self~sx-80, dlgy - 18, 0, 0, "&Ok 1 OK &Cancel 2 CANCEL", 1, "DEFAULT") -::method AddLine +::method addLine use arg x, y, l self~createEdit(101, x, y, l, , , "DATA") @@ -1142,9 +1142,9 @@ /* */ ::method Init /* ------------------------------------------------------------------------- */ -Expose DlgObjList +expose DlgObjList DlgObject -use arg DlgObj,Margin,NoResize,NoMove +use arg DlgObj, Margin, NoResize, NoMove if \NoResize~isA(.Set) then NoResize = .Set~new self~NoResize = NoResize @@ -1161,17 +1161,28 @@ self~OriginalWidth = DlgObj~sizeX self~OriginalHeight = DlgObj~sizeY self~LastError = .nil +DlgObject = DlgObj - /* Analyze the callers defineDialog Method */ - /* Remove comments prefixed by -- */ +CreateControlTypes = .set~of('BITMAPBUTTON', 'CHECKBOX', 'COMBOBOXEDIT', 'TAB', - + 'PUSHBUTTON', 'RADIOBUTTON', 'DATETIMEPICKER', 'LISTVIEW', 'PASSWORDEDIT', - + 'PROGRESSBAR', 'SCROLLBAR', 'TRACKBAR', 'BLACKFRAME', 'BLACKRECT', 'LISTBOX', - + 'ETCHEDHORIZONTAL', 'ETCHEDVERTICAL', 'GRAYRECT', 'GRAYFRAME', 'GROUPBOX', - + 'STATIC', 'STATICFRAME', 'STATICIMAGE', 'STATICTEXT', 'TREEVIEW', 'UPDOWN', - + 'WHITEFRAME', 'WHITERECT', 'MONTHCALENDAR', 'EDIT' - +) + +-- Analyze the callers defineDialog Method DDSourceArr=DlgObj~class~method('defineDialog')~source DDSBuff=.mutableBuffer~new + +-- Remove comments prefixed by -- do line over DDSourceArr - parse var line line '--' . -- strip out this style inline comments + parse var line line '--' . DDSBuff~Append(' '||line) -end /* DO */ +end DDSource = DDSBuff~String ; Drop DDSBuff - /* remove comments within /* */ */ + +-- remove comments within /* */ do forever commEnd = DDsource~pos('*'||'/') if commEnd = 0 then leave @@ -1180,89 +1191,153 @@ then do self~LastError='Error in DlgAreaU Class: Unbalanced comments in defineDialog class of' Dlg leave - end /* DO */ + end parse var DDSource front =(commStart) . =(commEnd) . +2 back DDSource = front back -end /* DO */ +end -DDSource1 = DDSource /* copy of de-commented defineDialog source */ +-- copy of de-commented defineDialog source +DDSource1 = DDSource - /* re-create DlgArea objects within scope */ +-- re-create DlgArea objects within scope do forever parse upper var DDSource1 front '.DLGAREA'DAMsg'('DAparms')'DDSource1 do while DAParms~Countstr('(') > DAParms~CountStr(')') parse var DDSource1 fragment ')' DDSource1 DAParms = DAParms||')'||fragment - end /* DO */ - if DAParms = '' then leave /* we have got them all! */ + end - /* parse out the refferer variable name */ + + if DAParms = '' then leave -- we have got them all! + + -- parse out the refferer variable name parse value front~reverse with . '='DAVar . DAVar = DAVar~reverse~strip DAObj = DAVar sourceline = DAVar'=.DLGAREA'||DAMsg||'('||DAParms||')' select - when DAMsg~Space(0) = 'U~NEW' /* This is the DlgAreaU (self) obj def */ + when DAMsg~Space(0) = 'U~NEW' -- This is the DlgAreaU (self) obj def then interpret DAVar'=.DlgArea~new(0,0,'||self~w||','||self~h||','||self~margin||')' - when DAMsg~Space(0) = '~NEW' /* This is a DlgArea Obj definition */ + when DAMsg~Space(0) = '~NEW' -- This is a DlgArea Obj definition then interpret DAVar'=.DlgArea~new('daparms')' otherwise self~LastError='DlgAreaU Class: Unable to parse:' SourceLine - end /* select */ + end end - /* Now we parse out resizable widgets */ +-- Now we parse out resizable widgets. DlgObjList=.List~new delim = '00'x signal on syntax name parseerror Parseerroroccured = 1 /* provisionally */ +-- Save another copy of DDSource, we'll need it later. +DDSourceCopy = DDSource + +-- First look for the create<Control> methods. do forever + parse upper var DDSource front 'CREATE'ObjName'('ObjParms')'DDSource1 + do while ObjParms~Countstr('(') > ObjParms~CountStr(')') + parse var DDSource1 fragment ')' DDSource1 + ObjParms = ObjParms||')' fragment + end + + if ObjParms = '' then leave + if front~space(0)~right(5)='SELF~' then do + sourcelinetxt = 'SELF~CREATE'||Objname||'('||Objparms||')' + DDSource=DDSource1 + + if CreateControlTypes~HasIndex(ObjName~strip) then + parse var ObjParms ObjId','ObjX','ObjY','ObjW','ObjH','. + else + ObjId = '' -- This createXXX method is ignored + + ObjId = DlgObject~resolveResourceID(ObjId~space(0)) + + if ObjId \= '', ObjId > 0 then + interpret 'DlgObjList~Insert(ObjId "@"' ObjX '"@"' ObjY '"@"' ObjW '"@"' ObjH ')' + end + else do + -- skip past this create + parse var DDSource 'CREATE'DDSource + end +end + +-- Now look for all the deprecated add<Control> methods. +DDSource = DDSourceCopy + +do forever parse upper var DDSource front 'ADD'ObjName'('ObjParms')'DDSource1 do while ObjParms~Countstr('(') > ObjParms~CountStr(')') parse var DDSource1 fragment ')' DDSource1 ObjParms = ObjParms||')' fragment - end /* DO */ + end if ObjParms = '' then leave - if front~space(0)~right(5)='SELF~' - then do + if front~space(0)~right(5)='SELF~' then do sourcelinetxt = 'SELF~ADD'||Objname||'('||Objparms||')' DDSource=DDSource1 select - when 'BITMAPBUTTON BUTTON PROGRESSBAR SCROLLBAR'~Wordpos(ObjName~strip) >0 - then parse var ObjParms ObjId','ObjX','ObjY','ObjW','ObjH','. - when 'CHECKBOX COMBOBOX ENTRYLINE LISTBOX LISTCONTROL PASSWORDLINE RADIOBUTTON SLIDERCONTROL TABCONTROL'~Wordpos(ObjName~strip) > 0 - then parse var ObjParms ObjId','.','ObjX','ObjY','ObjW','ObjH','. - when 'BLACKFRAME BLACKRECT GRAYRECT GRAYFRAME TREECONTROL WHITEFRAME WHITERECT'~Wordpos(ObjName~strip) > 0 - then parse var ObjParms ObjX','ObjY','ObjW','ObjH','.','ObjId','. - when 'GROUPBOX TEXT'~Wordpos(ObjName~strip) > 0 - then parse var ObjParms ObjX','ObjY','ObjW','ObjH','.','.','ObjId','. + when 'BITMAPBUTTON BUTTON PROGRESSBAR SCROLLBAR'~Wordpos(ObjName~strip) > 0 then + parse var ObjParms ObjId','ObjX','ObjY','ObjW','ObjH','. + when 'CHECKBOX COMBOBOX ENTRYLINE LISTBOX LISTCONTROL PASSWORDLINE RADIOBUTTON SLIDERCONTROL TABCONTROL'~Wordpos(ObjName~strip) > 0 then + parse var ObjParms ObjId','.','ObjX','ObjY','ObjW','ObjH','. + when 'BLACKFRAME BLACKRECT GRAYRECT GRAYFRAME TREECONTROL WHITEFRAME WHITERECT'~Wordpos(ObjName~strip) > 0 then + parse var ObjParms ObjX','ObjY','ObjW','ObjH','.','ObjId','. + when 'GROUPBOX TEXT'~Wordpos(ObjName~strip) > 0 then + parse var ObjParms ObjX','ObjY','ObjW','ObjH','.','.','ObjId','. otherwise - ObjId = '' /* This type is on the ignore list */ - end /* select */ - if ObjId \= '' - then interpret 'DlgObjList~Insert(ObjId "@"' ObjX '"@"' ObjY '"@"' ObjW '"@"' ObjH ')' - end /* DO */ - else parse var DDSource 'ADD'DDSource /* skip past this add */ -end /* DO */ + ObjId = '' -- This addXXX method is ignored + end + ObjId = DlgObject~resolveResourceID(ObjId~space(0)) + + if ObjId \= '', ObjId > 0 then + interpret 'DlgObjList~Insert(ObjId "@"' ObjX '"@"' ObjY '"@"' ObjW '"@"' ObjH ')' + end + else do + -- skip past this add + parse var DDSource 'ADD'DDSource + end +end + Parseerroroccured = 0 + parseerror: signal off syntax if parseerroroccured then self~lastError = 'DlgAreaU class could not parse' sourcelinetxt -/* ------------------------------- ignore list ----------------------------- -ATTRIBUTE AUTOSTARTMETHOD BUTTONGROUP CATEGORYCOMBOENTRY CATEGORYLISTENTRY -CHECKBOXSTEM CHECKGROUP COMBOENTRY COMBOINPUT FULLSEQ INPUT INPUTGROUP -INPUTSTEM LISTENTRY MENUITEM MENUSEPERATOR OKCANCELLEFTBOTTOM OKCANCELLEFTTOP -OKCANCELRIGHTBOTTOM OKCANCELREGHTTOP POPUPMENU RADIOGROUP RADIOSTEM ROW -SEQUENCE STYLE USERMSG - ------------------------------------------------------------------------- */ + /* ------------------------------------------------------------------------- */ +::method noResizePut +/* ------------------------------------------------------------------------- */ +/* This method allows the user to place dialog controls in the NoResize set */ +/* using symbolic IDs. */ +/* ------------------------------------------------------------------------- */ +expose DlgObject + use strict arg id + + id = DlgObject~getResourceID(id) + self~NoResize~put(id) + + +/* ------------------------------------------------------------------------- */ +::method noMovePut +/* ------------------------------------------------------------------------- */ +/* This method allows the user to place dialog controls in the NoMove set */ +/* using symbolic IDs. */ +/* ------------------------------------------------------------------------- */ +expose DlgObject + use strict arg id + + id = DlgObject~getResourceID(id) + self~NoMove~put(id) + + +/* ------------------------------------------------------------------------- */ ::method Resize /* ------------------------------------------------------------------------- */ /* this method needs to be called as follows: */ @@ -1294,8 +1369,9 @@ if self~updateOnResize then dlg~update /* ------------------------------------------------------------------------- */ -::attribute OriginalWidth Private -::attribute OriginalHeight Private +::attribute OriginalWidth private +::attribute OriginalHeight private +::attribute DlgObject private get ::attribute NoResize ::attribute NoMove ::attribute CorrectionFactor Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-01-12 04:09:06 UTC (rev 6578) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-01-12 05:21:15 UTC (rev 6579) @@ -3001,6 +3001,28 @@ return NULLOBJECT; } +/** PlainBaseDialog::finished [attribute get] + */ +RexxMethod1(RexxObjectPtr, pbdlg_getFinished, CSELF, pCSelf) +{ + return context->GetObjectVariable("FINISHED"); +} +/** PlainBaseDialog::finished [attribute set] + */ +RexxMethod2(CSTRING, pbdlg_setFinished, logical_t, val, CSELF, pCSelf) +{ + if ( val ) + { + context->SetObjectVariable("FINISHED", TheTrueObj); + } + else + { + context->SetObjectVariable("FINISHED", TheFalseObj); + } + + return NULLOBJECT; +} + /** PlainBaseDialog::fontName [attribute get] * PlainBaseDialog::fontSize [attribute get] */ Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-01-12 04:09:06 UTC (rev 6578) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-01-12 05:21:15 UTC (rev 6579) @@ -230,6 +230,8 @@ REXX_METHOD_PROTOTYPE(pbdlg_setFontSize_pvt); REXX_METHOD_PROTOTYPE(pbdlg_getAutoDetect); REXX_METHOD_PROTOTYPE(pbdlg_setAutoDetect); +REXX_METHOD_PROTOTYPE(pbdlg_getFinished); +REXX_METHOD_PROTOTYPE(pbdlg_setFinished); REXX_METHOD_PROTOTYPE(pbdlg_sendMessageToControl); REXX_METHOD_PROTOTYPE(pbdlg_sendMessageToWindow); REXX_METHOD_PROTOTYPE(pbdlg_getLibrary); @@ -935,6 +937,8 @@ REXX_METHOD(pbdlg_setDlgFont, pbdlg_setDlgFont), REXX_METHOD(pbdlg_getAutoDetect, pbdlg_getAutoDetect), REXX_METHOD(pbdlg_setAutoDetect, pbdlg_setAutoDetect), + REXX_METHOD(pbdlg_getFinished, pbdlg_getFinished), + REXX_METHOD(pbdlg_setFinished, pbdlg_setFinished), REXX_METHOD(pbdlg_sendMessageToControl, pbdlg_sendMessageToControl), REXX_METHOD(pbdlg_sendMessageToWindow, pbdlg_sendMessageToWindow), REXX_METHOD(pbdlg_get, pbdlg_get), Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-01-12 04:09:06 UTC (rev 6578) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-01-12 05:21:15 UTC (rev 6579) @@ -968,9 +968,48 @@ return idError(context, rxID); } -RexxMethod2(int32_t, rsrcUtils_resolveResourceID, RexxObjectPtr, rxID, OSELF, self) +/** ResourceUtils::resolveSymbolicID + * ResourceUtils::resolveResourceID + * ResourceUtils::getResourceID + * + * Returns the numeric value of an, assumed, resource ID. + * + * The primary purpose is to resolve a symbolic resource ID to its integer + * value. If the object is already an integer value, then that value is + * simpley returned. + * + * @param rxID The resource ID object to resolve. + * + * @return On success, the resolved interger value of the resource ID. + * + * @remarks resolveSymbolicID and resolveResourceID allow a resource ID of -1, + * and do not raise an exception if a symbolic ID can not be + * resolved. + * + * getResourceID() does raises execeptions if a symbolic ID can not + * be resolved, o for a -1 ID. + */ +RexxMethod3(int32_t, rsrcUtils_resolveResourceID, RexxObjectPtr, rxID, NAME, method, OSELF, self) { - return resolveResourceID(context, rxID, self); + if ( *method == 'R' ) + { + return resolveResourceID(context, rxID, self); + } + else + { + uint32_t result = oodResolveSymbolicID(context, self, rxID, -1, 1); + if ( result != OOD_ID_EXCEPTION ) + { + if ( result == (int32_t)-1 || result == 0 ) + { + wrongArgValueException(context->threadContext, 1, "a valid positive numeric ID or a valid symbolic ID" , rxID); + } + } + + // At this point if result == OOD_ID_EXCEPTION or < 1 an exception has + // been raised and it does not matter what the value of result is. + return (int32_t)result; + } } RexxMethod2(int32_t, rsrcUtils_resolveIconID_pvt, RexxObjectPtr, rxID, OSELF, self) Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex 2011-01-12 04:09:06 UTC (rev 6578) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex 2011-01-12 05:21:15 UTC (rev 6579) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2006-2009 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2006-2011 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 */ @@ -34,6 +34,8 @@ /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* */ /*----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------*/ /* How to use this template: */ /* */ /* This template allows you to create dialogs with ooDialog without need */ @@ -44,8 +46,6 @@ /* ooDialog is very fully featured and it would not be useful to try to */ /* anticipate and include every possible activity. */ /* */ -/* Category dialogs & Property sheets subclass differently -see the Manual. */ -/* */ /* Not all Dialogs require all the methods listed in the template. */ /* If you are not adding any control through a particular method then you */ /* can delete that method and let the superclass handle it */ @@ -81,7 +81,7 @@ /* it start minimised etc. then change the following */ /* clause. See Show, Execute, ExecuteAsync, Popup& */ /* PopupasChild in the ooDialog Reference */ -MyDialog~Execute('ShowTop') /* Create, show and run the Windows Object */ +MyDialog~execute('ShowTop') /* Create, show and run the Windows Object */ /* ------------------------------------------------- */ /* ------------------------------------------------- */ @@ -90,8 +90,6 @@ /* pressed. ie: MyDialog~Attribute */ /* ------------------------------------------------- */ -MyDialog~DeInstall /* Clean Up */ - /* ------------------------------------------------- */ /* Code that you want to execute after the Dialog */ /* has been cleared goes here. */ @@ -106,7 +104,18 @@ /* */ /* All error information available is written to STDOUT (usually the console)*/ /* As this may not be present (running a GUI with REXXHIDE) a ooDialog */ -/* errorDialog popup is also presented */ +/* errorDialog popup is also presented */ +/* */ +/* While this type of error handling is useful to some people, it also will */ +/* mask the print out of many syntax errors that happen while your dialog */ +/* is executing. */ +/* */ +/* If you are having trouble debugging problems in your dialog, 1.) Comment */ +/* out the 'signal on any' line above. 2.) Execute your dialog from a */ +/* console window so that you will see any syntax messages printed out by */ +/* the interpreter. */ +/* */ +/* Those two steps will solve many of your debugging problems. */ /* ========================================================================= */ any: @@ -184,13 +193,16 @@ width=300 ; height=200 /* Set the Width and height of dialog */ /* Now we create the Windows Object */ - rc=self~createCenter(width,height,'This text appears in the Dialog Title',,,, + success=self~createCenter(width,height,'This text appears in the Dialog Title',,,, 'MS Sans Serif',8) /* The above line creates a dialog in the centre of the screen, if you */ /* Would rather specify values for x & y use the line below instead */ - /* rc=self~Create(x,y,width,height,Title) */ + /* success=self~create(x,y,width,height,Title) */ - self~initCode=(rc=0) + if \success then do + self~initCode=1 + return + end /* ------------------------------------------------- */ /* Here we can initialise any attributes of our */ /* dialog. */ @@ -199,11 +211,11 @@ /* ------------------------------------------------- */ /* Here we can 'connect' dialog item events to */ /* Methods or Attributes. */ - /* i.e.: self~connectListViewEvent(id,"Changed",, */ + /* i.e.: self~connectListViewEvent(id,"Changed",, */ /* "ItemSelectedMethod") */ /* */ /* NB: Many createXXX Methods (which appear in the */ - /* DefineDialog method below) also provide a way to */ + /* defineDialog method below) also provide a way to */ /* define connections. */ /* ------------------------------------------------- */ @@ -227,8 +239,8 @@ /* Dialog Height is available to us as self~sizeY */ /* ------------------------------------------------- */ - self~createPushButton( 1,self~sizeX-60 ,self~sizeY-20,50,15,'DEFAULT','OK','Ok') - self~createPushButton( 2,self~sizeX-120,self~sizeY-20,50,15,,'Cancel','Cancel') + self~createPushButton(IDOK,self~sizeX-60 ,self~sizeY-20,50,15,'DEFAULT','OK') + self~createPushButton(IDCANCEL,self~sizeX-120,self~sizeY-20,50,15,,'Cancel') /* examples to cut & paste: */ /* self~createPushButton(id,x,y,cx,cy,'options','text','method') */ @@ -256,8 +268,18 @@ ::method initDialog /* ------------------------------------------------------------------------- */ /* If you have no need to initialise/populate items delete this method */ - self~initDialog:super + /* ------------------------------------------------- */ + /* Code here is run after the underlying windows */ + /* dialog object has been created. Whether the */ + /* dialog is displayed depends on the style keywords */ + /* used in the createCenter(), (or create()) method. */ + /* By default the dialog will be created invisible. */ + /* If you use the VISIBLE keyword, the dialog will */ + /* be visisble at this point. */ + /* ------------------------------------------------- */ + + /* ------------------------------------------------- */ /* Here we can populate list boxes etc. */ /* ------------------------------------------------- */ @@ -265,9 +287,9 @@ /* List = self~newListView([id]) */ /* if List \= .Nil then do */ /* list~setImageList(imageList, .Image~toID(LVSIL_SMALL)) */ -/* list~AddStyle("[Style1 style2...]") */ -/* list~InsertColumn(0,"[Title]",[width],[style]) */ -/* list~InsertColumn(1,"[Title]",[width],[style]) */ +/* list~addStyle("[Style1 style2...]") */ +/* list~insertColumn(0,"[Title]",[width],[style]) */ +/* list~insertColumn(1,"[Title]",[width],[style]) */ /* do data over dataset */ /* ordinal=list~addrow(,[icon_no],[column 0 text],[column 1 text]...) */ /* end */ @@ -278,50 +300,77 @@ /* self~SetMenu */ /* ------------------------------------------------- */ - /* ------------------------------------------------- */ - /* Code here is run after the windows dialog object */ - /* has been created, but before it is displayed */ - /* ------------------------------------------------- */ - /* ------------------------------------------------------------------------- */ ::method ok /* ------------------------------------------------------------------------- */ -/* If you do not need to add processing to this class you can delete it */ - self~oK:super /* call Self~Validate, set self~InitCode to 1*/ +/* The ok() method is invoked automatically by the ooDialog framework when */ +/* the user pushes or clicks a button, or a menu item, with the resource ID */ +/* of IDOK (1). If you do not need to do, or do not want to do, any */ +/* processing here, you can delete this method. The ooDialog framework */ +/* provides the correct implementation for you. The framework also provides */ +/* a default implementation of the validate method. By default validate() */ +/* returns true. If you want to have a chance to validate the user's input, */ +/* and perhaps prevent the dialog from closing, then over-ride the validate */ +/* method. From validate() return true to close the dialog, or false to */ +/* prevent the dialog from closing. */ /* ------------------------------------------------- */ - /* add code for closing with OK here */ - /* Self~Finished will be 0 if Self~Validate failed */ - /* You can set self~Finished=0 to stop dlg closing */ + /* If you want to do your validation here, you can */ + /* add the valdiation code here. Then, if you want */ + /* to allow the dialog to close normally, invoke the */ + /* super class's ok() method. If you want to */ + /* prevent dialog from closing, simply return 0 with */ + /* out invoking the super class ok. */ + /* */ + /* By invoking the super class ok() method you */ + /* ensure the dialog is closed properly. That is */ + /* really the best way to end the dialog. The best */ + /* to not end the dialog at this point is to simply */ + /* return 0. */ /* ------------------------------------------------- */ -return self~finished +return self~oK:super + /* ------------------------------------------------------------------------- */ ::method cancel /* ------------------------------------------------------------------------- */ -/* If you do not need to add processing to this class you can delete it */ - self~cancel:super /*call Self~Validate, set self~InitCode to 2 */ +/* The cancel() method is invoked automatically by the ooDialog framework */ +/* when the user pushes or clicks a button, or a menu item, with the */ +/* resource ID of IDCANCEL (2), or the user hits the escape key. If you do */ +/* not need to do, or do not want to do, any processing here, you can delete */ +/* this method. The ooDialog framework provides the correct implementation */ +/* of the cancel method for you. */ /* ------------------------------------------------- */ - /* add code for closing with cancel here */ - /* Self~Finished will be 0 if Self~Validate failed */ - /* You can set self~Finished=0 to stop dlg closing */ + /* You can add code for closing with cancel here, if */ + /* you want to. Then, to prevent the dialog from */ + /* closing at this point, simply return 0. To */ + /* continue with the normal closing of the dialog, */ + /* invoke the super class's cancel method. */ + /* */ + /* By invoking the super class cance.() method you */ + /* ensure the dialog is closed properly. That is */ + /* really the best way to end the dialog. The best */ + /* to not end the dialog at this point is to simply */ + /* return 0. */ /* ------------------------------------------------- */ -return self~finished +return self~cancel:super + /* ------------------------------------------------------------------------- */ ::method validate /* ------------------------------------------------------------------------- */ -/* This is called by the OK:Super Method. Returning 0 stops dialog closing. */ -/* If you do not need this method - delete it. */ -valid=1 +/* This is called by the OK:Super Method. Returning .false stops the dialog */ +/* from closing. Returning .true allows the dialog to close. If you do not */ +/* need this method - delete it */ +valid=.true /* - valid=0 + valid=.false select when [error_condition] then call errorDialog [error_condition_message] when [error_condition] then call errorDialog [error_condition_message] otherwise - valid=1 + valid=.true end /* select */ */ Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemo.h =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemo.h (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemo.h 2011-01-12 05:21:15 UTC (rev 6579) @@ -0,0 +1,51 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/* + * Symbolic resource IDs for the dlgAreaUDemo (dlgAreUDemo.rex and + * dlgAreaUDemoTwo.rex) programs. + */ + +#define IDC_ST_STATUS 111 +#define IDC_EDIT 112 +#define IDC_PB_0 113 +#define IDC_PB_1 114 +#define IDC_PB_2 115 +#define IDC_PB_3 116 +#define IDC_PB_4 117 +#define IDC_PB_5 118 +#define IDC_PB_6 119 Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemo.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemo.rex 2011-01-12 04:09:06 UTC (rev 6578) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemo.rex 2011-01-12 05:21:15 UTC (rev 6579) @@ -1,11 +1,11 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2006 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2006-2011 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 */ /* distribution. A copy is also available at the following address: */ -/* http://www.oorexx.org/license.html */ +/* http://www.oorexx.org/license.html */ /* */ /* Redistribution and use in source and binary forms, with or */ /* without modification, are permitted provided that the following */ @@ -36,48 +36,52 @@ /*----------------------------------------------------------------------------*/ /* DlgAreaDemo.Rex -- Demonstrate DlgArea & DlgAreaU Classes -- Feb 2006 */ -MyDlg=.MyDialog~new +MyDlg=.MyDialog~new( , 'dlgAreaUDemo.h') MyDlg~execute('ShowTop') -MyDlg~DeInstall -exit +return 0 + ::requires "ooDialog.cls" /* ========================================================================= */ ::class MyDialog Subclass UserDialog /* ========================================================================= */ -::method Init +::method init /* ------------------------------------------------------------------------- */ - self~Init:super - rc=self~CreateCenter(250,250,'MyDialog',, - 'ThickFrame MinimizeBox MaximizeBox',,, - 'MS Sans Serif',8) - self~InitCode=(rc=0) + forward class (super) continue + success=self~createCenter(250,250,'My Resizable Dialog',, + 'ThickFrame MinimizeBox MaximizeBox',,, + 'MS Sans Serif',8) + if \success then do + self~initCode = 1 + return + end + self~connectResize('OnResize') /* ------------------------------------------------------------------------- */ -::method DefineDialog +::method defineDialog /* ------------------------------------------------------------------------- */ expose u u=.dlgAreaU~new(self) /* whole dlg */ if u~lastError \= .nil then call errorDialog u~lastError -u~NoResize~put(13) +u~noResizePut(IDC_PB_0) e=.dlgArea~new(u~x ,u~y ,u~w('70%'),u~h('90%')) /* edit area */ s=.dlgArea~new(u~x ,u~y('90%'),u~w('70%'),u~hr ) /* status area */ b=.dlgArea~new(u~x('70%'),u~y ,u~wr ,u~hr ) /* button area */ -self~addEntryLine(12,'text',e~x,e~y,e~w,e~h,'multiline') -self~addText(s~x,s~y,s~w,s~h,'Status info appears here',,11) +self~createEdit(IDC_EDIT,e~x,e~y,e~w,e~h,'multiline','text') +self~createStaticText(IDC_ST_STATUS,s~x,s~y,s~w,s~h,,'Status info appears here') -self~addButton(13,b~x,b~y('00%'),b~w,b~h('9%'),'Button' 0,'Button'||0) -self~addButton(14,b~x,b~y('10%'),b~w,b~h('9%'),'Button' 1,'Button'||1) -self~addButton(15,b~x,b~y('20%'),b~w,b~h('9%'),'Button' 2,'Button'||2) -self~addButton(16,b~x,b~y('30%'),b~w,b~h('9%'),'Button' 3,'Button'||3) -self~addButton(17,b~x,b~y('40%'),b~w,b~h('9%'),'Button' 4,'Button'||4) -self~addButton(18,b~x,b~y('50%'),b~w,b~h('9%'),'Button' 5,'Button'||5) -self~addButton(19,b~x,b~y('60%'),b~w,b~h('9%'),'Button' 6,'Button'||6) -self~addButton( 1,b~x,b~y('90%'),b~w,b~h('9%'),'Ok','Ok','DEFAULT') +self~createPushButton(IDC_PB_0,b~x,b~y('00%'),b~w,b~h('9%'),,'Button' 0,'Button'||0) +self~createPushButton(IDC_PB_1,b~x,b~y('10%'),b~w,b~h('9%'),,'Button' 1,'Button'||1) +self~createPushButton(IDC_PB_2,b~x,b~y('20%'),b~w,b~h('9%'),,'Button' 2,'Button'||2) +self~createPushButton(IDC_PB_3,b~x,b~y('30%'),b~w,b~h('9%'),,'Button' 3,'Button'||3) +self~createPushButton(IDC_PB_4,b~x,b~y('40%'),b~w,b~h('9%'),,'Button' 4,'Button'||4) +self~createPushButton(IDC_PB_5,b~x,b~y('50%'),b~w,b~h('9%'),,'Button' 5,'Button'||5) +self~createPushButton(IDC_PB_6,b~x,b~y('60%'),b~w,b~h('9%'),,'Button' 6,'Button'||6) +self~createPushButton(IDOK,b~x,b~y('90%'),b~w,b~h('9%'),'DEFAULT','Ok') /* ------------------------------------------------------------------------- */ ::method onResize @@ -87,7 +91,8 @@ u~resize(self,sizeinfo) /* ------------------------------------------------------------------------- */ -::method Unknown +::method unknown /* ------------------------------------------------------------------------- */ use arg msgname, args -self~newStatic(11)~setText('You Pressed' msgname) +if msgname~abbrev("BUTTON") then + self~newStatic(IDC_ST_STATUS)~setText('You Pressed Button' msgname~right(1)) Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex 2011-01-12 04:09:06 UTC (rev 6578) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex 2011-01-12 05:21:15 UTC (rev 6579) @@ -55,7 +55,7 @@ * the dialog. * * We keep track of whether the user is resizing, or not. When we get the size - * move ended event, if the user was resizing, we invoked the update method of + * move ended event, if the user was resizing, we invoke the update method of * the dialog, forcing all the dialog controls to redraw themselves in their * new, final, position. * @@ -67,53 +67,60 @@ * Which approach is better is probably a matter of personal preference. */ - myDlg = .MyDialog~new - myDlg~execute('ShowTop') + dlg = .ResizableDialog~new( , 'dlgAreaUDemo.h') + dlg~execute('ShowTop') return 0 ::requires "ooDialog.cls" -::class 'MyDialog' subclass UserDialog +::class 'ResizableDialog' subclass UserDialog ::method init - self~init:super - self~createCenter(250, 250, 'MyDialog', - - 'ThickFrame MinimizeBox MaximizeBox', , - - 'MS Sans Serif', 8) + forward class (super) continue + success = self~createCenter(250, 250, 'My Flicker Free Resizable Dialog', - + 'ThickFrame MinimizeBox MaximizeBox', , - + 'MS Sans Serif', 8) + if \ success then do + self~initCode = 1 + return + end self~connectResize('onResize') self~connectSizeMoveEnded('onSizeMoveEnded') ::method defineDialog - expose u sizing + expose u sizing minMaximized - u = .dlgAreaU~new(self) /* whole dlg */ + u = .dlgAreaU~new(self) if u~lastError \= .nil then call errorDialog u~lastError -- Tell the DialogAreaU object to not invoke the update method. We are not - -- resizing now. + -- resizing now. We have not been minimized or minMaximized. u~updateOnResize = .false + + -- We use these variables to track when to update, or not. sizing = .false + minMaximized = .false - u~noResize~put(13) - e = .dlgArea~new(u~x , u~y , u~w('70%'), u~h('90%')) /* edit area */ - s = .dlgArea~new(u~x , u~y('90%'), u~w('70%'), u~hr ) /* status area */ - b = .dlgArea~new(u~x('70%'), u~y , u~wr , u~hr ) /* button area */ + u~noResize~put(IDC_PB_0) + e = .dlgArea~new(u~x , u~y , u~w('70%'), u~h('90%')) -- edit area + s = .dlgArea~new(u~x , u~y('90%'), u~w('70%'), u~hr ) -- status area + b = .dlgArea~new(u~x('70%'), u~y , u~wr , u~hr ) -- button area - self~addEntryLine(12, 'text', e~x, e~y, e~w, e~h, 'multiline') - self~addText(s~x, s~y, s~w, s~h, 'Status info appears here', , 11) + self~createEdit(IDC_EDIT, e~x, e~y, e~w, e~h, 'multiline') + self~createStaticText(IDC_ST_STATUS, s~x, s~y, s~w, s~h, , 'Status info appears here') - self~addButton(13, b~x, b~y('00%'), b~w, b~h('9%'), 'Button' 0 , 'Button'||0) - self~addButton(14, b~x, b~y('10%'), b~w, b~h('9%'), 'Button' 1 , 'Button'||1) - self~addButton(15, b~x, b~y('20%'), b~w, b~h('9%'), 'Button' 2 , 'Button'||2) - self~addButton(16, b~x, b~y('30%'), b~w, b~h('9%'), 'Button' 3 , 'Button'||3) - self~addButton(17, b~x, b~y('40%'), b~w, b~h('9%'), 'Button' 4 , 'Button'||4) - self~addButton(18, b~x, b~y('50%'), b~w, b~h('9%'), 'Button' 5 , 'Button'||5) - self~addButton(19, b~x, b~y('60%'), b~w, b~h('9%'), 'Button' 6 , 'Button'||6) - self~addButton( 1, b~x, b~y('90%'), b~w, b~h('9%'), 'Ok', 'Ok', 'DEFAULT') + self~createPushButton(IDC_PB_0, b~x, b~y('00%'), b~w, b~h('9%'), , 'Button' 0 , 'Button'||0) + self~createPushButton(IDC_PB_1, b~x, b~y('10%'), b~w, b~h('9%'), , 'Button' 1 , 'Button'||1) + self~createPushButton(IDC_PB_2, b~x, b~y('20%'), b~w, b~h('9%'), , 'Button' 2 , 'Button'||2) + self~createPushButton(IDC_PB_3, b~x, b~y('30%'), b~w, b~h('9%'), , 'Button' 3 , 'Button'||3) + self~createPushButton(IDC_PB_4, b~x, b~y('40%'), b~w, b~h('9%'), , 'Button' 4 , 'Button'||4) + self~createPushButton(IDC_PB_5, b~x, b~y('50%'), b~w, b~h('9%'), , 'Button' 5 , 'Button'||5) + self~createPushButton(IDC_PB_6, b~x, b~y('60%'), b~w, b~h('9%'), , 'Button' 6 , 'Button'||6) + self~createPushButton(IDOK, b~x, b~y('90%'), b~w, b~h('9%'), 'DEFAULT', 'Ok') ::method initDialog @@ -121,17 +128,32 @@ -- The underlying edit controls internally resize themselves as the dialog -- they are contained in is resized. We don't want that, so we disable that -- behavior in the underlying edit control. - self~newEdit(12)~disableInternalResize + self~newEdit(IDC_EDIT)~disableInternalResize ::method onResize unguarded - expose u sizing - use arg dummy, sizeinfo + expose u sizing minMaximized + use arg sizingType, sizeinfo - -- We are resizing now. - sizing = .true + u~resize(self, sizeinfo) - u~resize(self, sizeinfo) + -- The size / move ended event does not occur when the user maximize, + -- minimizes, or restores from maximized / minimized. Because of that, we + -- need to use self~update under those conditions. + + if sizingType == self~SIZE_MAXIMIZED | sizingType == self~SIZE_MINIMIZED then do + minMaximized = .true + if sizingType == self~SIZE_MAXIMIZED then self~update + end + else if sizingType == self~SIZE_RESTORED, minMaximized then do + minMaximized = .false + self~update + end + else do + -- We are resizing now. + sizing = .true + end + return 0 @@ -141,11 +163,13 @@ -- If we were resizing, force the dialog controls to redraw themselves. if sizing then self~update - -- We are not resizing. + -- We are not resizing anymore. sizing = .false return 0 ::method unknown - use arg msgname, args - self~newStatic(11)~setText('You Pressed' msgname) + use arg msgName, args + + if msgName~abbrev("BUTTON") then + self~newStatic(IDC_ST_STATUS)~setText('You Pressed Button' msgName~right(1)) Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/ooRexxTry/ooRexxTry.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/ooRexxTry/ooRexxTry.rex 2011-01-12 04:09:06 UTC (rev 6578) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/ooRexxTry/ooRexxTry.rex 2011-01-12 05:21:15 UTC (rev 6579) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2007-2009 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2007-2011 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 */ @@ -71,32 +71,31 @@ say "This console will receive the output of your system commands." say "Try 'dir' for example." say - code~Execute('ShowTop') -- Execute the dialog - code~DeInstall -- Finished, so deInstall + code~execute('ShowTop') -- Execute the dialog exit ::requires "ooDialog.cls" -- Needed for the dialog ::requires 'winsystm.cls' -- Needed for the Windows clipboard ::class oort_dialog subclass userdialog -::method Init +::method init self~init:super - rc = self~Create(.dx,.dy,.dwidth,.dheight,.title,'ThickFrame MinimizeBox MaximizeBox') - self~InitCode = (rc=0) - self~connectResize('OnResize') + rc = self~create(.dx,.dy,.dwidth,.dheight,.title,'ThickFrame MinimizeBox MaximizeBox') + self~initCode = (rc=0) + self~connectResize('onResize') self~fontMenuHelper -::method DefineDialog - expose u +::method defineDialog + expose u menuBar u = .dlgAreaU~new(self) if .nil \= u~lastError then call errorDialog u~lastError ---------- Arguments title & dialog area at = .dlgArea~new(0,0,u~w,10) - self~addText(at~x,at~y,at~w,at~h,'Arguments','CENTER',17) + self~createStaticText(17,at~x,at~y,at~w,at~h,'CENTER','Arguments') ad = .dlgArea~new(0,at~y + 10,u~w,u~h('15%')) - self~addEntryLine(12,'args_data',ad~x,ad~y,ad~w,ad~h,'multiline hscroll vscroll') + self~createEdit(12,ad~x,ad~y,ad~w,ad~h,'multiline hscroll vscroll','args_data') ---------- Code title & dialog area ct = .dlgArea~new(0,ad~y + ad~h,u~w,10) @@ -106,88 +105,92 @@ ---------- Says title & dialog area st = .dlgArea~new(0,cd~y + cd~h,u~w('50%'),10) - self~addText(st~x,st~y,st~w,st~h,'Says','CENTER',19) + self~createStaticText(19,st~x,st~y,st~w,st~h,'CENTER','Says') sd = .dlgArea~new(0,st~y + st~h,u~w('50%'),u~h('43%')) - self~addEntryLine(14,'say_data',sd~x,sd~y,sd~w,sd~h,'notab readonly multiline hscroll vscroll') + self~createEdit(14,sd~x,sd~y,sd~w,sd~h,'notab readonly multiline hscroll vscroll','say_data') ---------- Returns title & dialog area rt = .dlgArea~new(sd~x + sd~w,cd~y + cd~h,u~w('50%'),10) - self~addText(rt~x,rt~y,rt~w,rt~h,'Returns','CENTER',20) + self~createStaticText(20,rt~x,rt~y,rt~w,rt~h,'CENTER','Returns') rd = .dlgArea~new(rt~x,st~y + st~h,u~w('50%'),u~h('15%')) - self~addEntryLine(15,'results_data',rd~x,rd~y,rd~w,rd~h,'notab readonly multiline hscroll vscroll') + self~createEdit(15,rd~x,rd~y,rd~w,rd~h,'notab readonly multiline hscroll vscroll','results_data') ---------- Errors/Information title & dialog area et = .dlgArea~new(rt~x,rd~y + rd~h,u~w('50%'),10) - self~addText(et~x,et~y,et~w,et~h,'Errors / Information','CENTER',21) + self~createStaticText(21,et~x,et~y,et~w,et~h,'CENTER','Errors / Information') ed = .dlgArea~new(rt~x,et~y + et~h,u~w('50%'),u~h('17%')) - self~addEntryLine(16,'error_data',ed~x,ed~y,ed~w,ed~h,'notab readonly multiline hscroll vscroll') + self~createEdit(16,ed~x,ed~y,ed~w,ed~h,'notab readonly multiline hscroll vscroll','error_data') ---------- Run & Exit buttons for easier execution - self~AddButton(80,ed~x ,ed~y + ed~h + 2,35,10,'&Run','RunIt') - self~AddButton(81,ed~x + 40,ed~y + ed~h + 2,35,10,'E&xit','Cancel') + self~createPushButton(80,ed~x ,ed~y + ed~h + 2,35,10,,'&Run','RunIt') + self~createPushButton(IDCANCEL,ed~x + 40,ed~y + ed~h + 2,35,10,,'E&xit') ---------- - self~createMenu - self~AddPopupMenu('&File') - self~addMenuItem('&Run' ,22, ,'RunIt') - self~addMenuItem('&SaveAs',23, ,'FileDialog') - self~addMenuItem('&Open' ,25, ,'FileDialog') - self~addMenuItem('E&xit' ,24,'END','Cancel') + menuBar = .UserMenuBar~new(500,self,0,65) - self~addPopUpMenu('&Edit') - self~addPopupMenu('Font&Name') - self~addMenuItem('&Lucida Console',30, ,'onFontMenuClick') - self~addMenuItem('&Courier New' ,31,'END','onFontMenuClick') - self~addMenuSeparator - self~addPopUpMenu('Font&Size','END') - self~addMenuItem('&8' ,40, ,'onFontMenuClick') - self~addMenuItem('1&0',41, ,'onFontMenuClick') - self~addMenuItem('1&2',42, ,'onFontMenuClick') - self~addMenuItem('1&4',43, ,'onFontMenuClick') - self~addMenuItem('1&6',44, ,'onFontMenuClick') - self~addMenuItem('1&8',45,'END','onFontMenuClick') + menuBar~addPopup(510, '&File') + menuBar~addItem(22,'&Run' , ,'RunIt') + menuBar~addItem(23,'&SaveAs', ,'FileDialog') + menuBar~addItem(25,'&Open' , ,'FileDialog') + menuBar~addItem(24,'E&xit' ,'END','Cancel') - self~AddPopUpMenu('&Tools') - self~addPopupMenu('&Copy') - self~addMenuItem('&Args' ,50, ,'Clipboard') - self~addMenuItem('&Code' ,51, ,'Clipboard') - self~addMenuItem('&Says' ,52, ,'ClipBoard') - self~addMenuItem('&Returns',53, ,'ClipBoard') - self~addMenuItem('&Errors' ,54, ,'ClipBoard') - self~addMenuItem('A&ll' ,55,'END','ClipBoard') - self~addMenuSeparator - self~addPopupMenu('C&lear') - self~addMenuItem('&Args' ,60, ,'ClearAll') - self~addMenuItem('&Code' ,61, ,'ClearAll') - self~addMenuItem('&Says' ,62, ,'ClearAll') - self~addMenuItem('&Returns',63, ,'ClearAll') - self~addMenuItem('&Errors' ,64, ,'ClearAll') - self~addMenuItem('A&ll' ,65,'END','ClearAll') - self~addMenuSeparator - self~addPopupMenu('&Silent') - self~addMenuItem('&No' ,66, ,'Silent') - self~addMenuItem('&Yes' ,67,'END','Silent') - self~addMenuSeparator - self~addPopupMenu('Sa&ve Settings','END') - self~addMenuItem('Sa&ve' ,72,'END','SaveSettings') - self~addPopupMenu('&Help','END') - self~addMenuItem('Current &Settings',71, ,'Settings') - self~addMenuItem('&About' ,70,'END','Help') + menuBar~addPopup(520,'&Edit') + menuBar~addPopup(530,'Font&Name') + menuBar~addItem(30,'&Lucida Console', ,'onFontMenuClick') + menuBar~addItem(31,'&Courier New' ,'END','onFontMenuClick') + menuBar~addSeparator(535) + menuBar~addPopup(540,'Font&Size','END') + menuBar~addItem(40,'&8' , ,'onFontMenuClick') + menuBar~addItem(41,'1&0', ,'onFontMenuClick') + menuBar~addItem(42,'1&2', ,'onFontMenuClick') + menuBar~addItem(43,'1&4', ,'onFontMenuClick') + menuBar~addItem(44,'1&6', ,'onFontMenuClick') + menuBar~addItem(45,'1&8','END','onFontMenuClick') + menuBar~addPopup(550,'&Tools') + menuBar~addPopup(560,'&Copy') + menuBar~addItem(50,'&Args' , ,'Clipboard') + menuBar~addItem(51,'&Code' , ,'Clipboard') + menuBar~addItem(52,'&Says' , ,'ClipBoard') + menuBar~addItem(53,'&Returns', ,'ClipBoard') + menuBar~addItem(54,'&Errors' , ,'ClipBoard') + menuBar~addItem(55,'A&ll' ,'END','ClipBoard') + menuBar~addSeparator(565) + menuBar~addPopup(570,'C&lear') + menuBar~addItem(60,'&Args' , ,'ClearAll') + menuBar~addItem(61,'&Code' , ,'ClearAll') + menuBar~addItem(62,'&Says' , ,'ClearAll') + menuBar~addItem(63,'&Returns', ,'ClearAll') + menuBar~addItem(64,'&Errors' , ,'ClearAll') + menuBar~addItem(65,'A&ll' ,'END','ClearAll') + menuBar~addSeparator(575) + menuBar~addPopup(580,'&Silent') + menuBar~addItem(66,'&No' , ,'Silent') + menuBar~addItem(67,'&Yes' ,'END','Silent') + menuBar~addSeparator(585) + menuBar~addPopup(590,'Sa&ve Settings','END') + menuBar~addItem(72,'Sa&ve' ,'END','SaveSettings') + menuBar~addPopup(600,'&Help','END') + menuBar~addItem(71,'Current &Settings', ,'Settings') + menuBar~addItem(70,'&About' ,'END','Help') -::method InitDialog - expose args_input code_input result_input say_input errors_input + if \ menuBar~complete then + statusText = 'User menu bar completion error:' .SystemErrorCode SysGetErrortext(.SystemErrorCode) + +::method initDialog + expose args_input code_input result_input say_input errors_input menuBar -- Use font data from .ini file or defaults if .ini not present yet -- FW_EXTRALIGHT == 200 d = .Directory~new d~weight = 200 hfont = self~createFontEx(.fontname,.fontsize,d) - self~setMenu + if menuBar \== .nil then menuBar~attachTo(self) + -- Set the font and silent menu item check marks. self~setFontMenuChecks - if .silent then self~checkMenuItem(67) - else self~checkMenuItem(66) + if .silent then menuBar~check(67) + else menuBar~check(66) -- Get the controls for all dialog elements that will need to be adjusted args_input = self~newEdit(12) @@ -209,7 +212,7 @@ errors_title~setColor(13,10) -- Set the font name/size to the default values - self~ReDraw + self~reDraw if \.useDefault then do @@ -233,9 +236,9 @@ expose args_input code_input result_input say_input errors_input parse value code_input~getPos() with siX siY parse value code_input~getSize() with siW siH - ch1 = code_input~Cursor_Wait - parse value self~CursorPos with preCX preCY - code_input~SetCursorPos((siX+(siW/2))*self~FactorX,(siY+(siH/2))*self~FactorY) + ch1 = code_input~cursor_Wait + parse value self~cursorPos with preCX preCY + code_input~setCursorPos((siX+(siW/2))*self~FactorX,(siY+(siH/2))*self~FactorY) arg_array = s... [truncated message content] |
From: <mie...@us...> - 2011-01-15 18:09:12
|
Revision: 6591 http://oorexx.svn.sourceforge.net/oorexx/?rev=6591&view=rev Author: miesfeld Date: 2011-01-15 18:09:05 +0000 (Sat, 15 Jan 2011) Log Message: ----------- ooDialog - sync sandbox ooDialog 4.2.0 with main through r6591 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oograph.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rex Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysInfo.h Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-01-15 18:09:05 UTC (rev 6591) @@ -189,6 +189,7 @@ ::method lineIndex unguarded external "LIBRARY oodialog e_lineIndex" ::method hideBalloon unguarded external "LIBRARY oodialog e_hideBallon" ::method showBalloon unguarded external "LIBRARY oodialog e_showBallon" +::method getCue unguarded external "LIBRARY oodialog e_getCue" ::method setCue unguarded external "LIBRARY oodialog e_setCue" ::method replaceStyle unguarded external "LIBRARY oodialog e_style" ::method addStyle unguarded external "LIBRARY oodialog e_style" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-01-15 18:09:05 UTC (rev 6591) @@ -208,10 +208,11 @@ ::method connectComboBoxEvent - use strict arg id, type, msgToRise = "" + use strict arg id, type, msgToRise = "", willReply = .false if \ id~dataType("W") then id = self~resolveSymbolicId(id) if id = -1 then return -1 if msgToRise == "" then msgToRise = "on" || type + tag = 0 type = type~translate select when type = "SELCHANGE" then lp = 1 @@ -227,7 +228,8 @@ when type = "ERRSPACE" then lp = -1 otherwise return -1 end - return self~addUserMsg(msgToRise, 0x00000111, "0xFFFFFFFF", lp * x2d("10000") + id, "0xFFFFFFFF", 0, 0) /* also send WM_COMMAND */ + if willReply then tag = 0x02000000 + return self~addUserMsg(msgToRise, 0x00000111, "0xFFFFFFFF", lp * x2d("10000") + id, "0xFFFFFFFF", 0, 0, tag) ::method connectScrollBarEvent /* can only be called in initDialog */ Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-01-15 18:09:05 UTC (rev 6591) @@ -329,13 +329,26 @@ ::constant WM_NEXTDLGCTL "0x0028" ::constant WM_USER_INTERRUPTSCROLL "0x0A02" -::constant SIZE_RESTORED 0 -::constant SIZE_MINIMIZED 1 -::constant SIZE_MAXIMIZED 2 -::constant SIZE_MAXSHOW 3 -::constant SIZE_MAXHIDE 4 +::constant SIZE_RESTORED 0 +::constant SIZE_MINIMIZED 1 +::constant SIZE_MAXIMIZED 2 +::constant SIZE_MAXSHOW 3 +::constant SIZE_MAXHIDE 4 +::constant IDOK 1 +::constant IDCANCEL 2 +::constant IDABORT 3 +::constant IDRETRY 4 +::constant IDIGNORE 5 +::constant IDYES 6 +::constant IDNO 7 +::constant IDCLOSE 8 +::constant IDHELP 9 +::constant IDTRYAGAIN 10 +::constant IDCONTINUE 11 +::constant IDTIMEOUT 32000 + ::method init class external "LIBRARY oodialog pbdlg_init_cls" ::method setDefaultFont class external "LIBRARY oodialog pbdlg_setDefaultFont_cls" ::method getFontName class external "LIBRARY oodialog pbdlg_getFontName_cls" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-01-15 18:09:05 UTC (rev 6591) @@ -108,6 +108,9 @@ ::method 'x=' external "LIBRARY oodialog point_setX" ::method y external "LIBRARY oodialog point_y" ::method 'y=' external "LIBRARY oodialog point_setY" +::method '+' external "LIBRARY oodialog point_add" +::method '-' external "LIBRARY oodialog point_subtract" +::method 'incr' external "LIBRARY oodialog point_incr" ::class 'Size' public ::method init class external "LIBRARY oodialog size_init_cls" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2011-01-15 18:09:05 UTC (rev 6591) @@ -1845,26 +1845,80 @@ */ -RexxMethod2(RexxObjectPtr, e_setCue, CSTRING, text, CSELF, pCSelf) +/** Edit::setCue() + * + * Sets the cue, or tip, text for the edit control. This text prompts the user + * for what to enter in the edit control. + * + * @param text The text for the tip. The length of the text must be 255 + * characters or less. + * @param show [optional] Whether the cue should still display when the edit + * control has the focus. The default is false, the cue text + * disappears when the user clickd the edit control. + * + * @return 0 on success, 1 on failure. + * + * @notes Requires ComCtl 6.0 or later. Note the restriction on the length of + * text. You can not set a cue on a multi-line edit control. + * + * @remarks This method was originally written using the old API in 3.2.0. At + * that time the method returned a bunch of negative numbers, -4 for + * wrong ComCtl version, -3 for this, -2 for that. Unintentionally + * in the conversion to the C++ APIs, the negative return numbers got + * dropped and exceptions were raised. We're going to just stick + * with this, some users might complain. + * + */ +RexxMethod3(RexxObjectPtr, e_setCue, CSTRING, text, OPTIONAL_logical_t, show, CSELF, pCSelf) { - if ( ! requiredComCtl32Version(context, context->GetMessageName(), COMCTL32_6_0) ) + if ( ! requiredComCtl32Version(context, "setCue", COMCTL32_6_0) ) { return TheOneObj; } // The text is limited to 255. - WCHAR wszCue[QUE_MAX_TEXT + 1]; if ( strlen(text) > QUE_MAX_TEXT ) { stringTooLongException(context->threadContext, 1, QUE_MAX_TEXT, strlen(text)); return TheOneObj; } + WCHAR wszCue[QUE_MAX_TEXT + 1]; putUnicodeText((LPWORD)wszCue, text); - return (Edit_SetCueBannerText(getDChCtrl(pCSelf), wszCue) ? TheZeroObj : TheOneObj); + + return Edit_SetCueBannerTextFocused(getDChCtrl(pCSelf), wszCue, show) ? TheZeroObj : TheOneObj; } +/** Edit::getCue() + * + * Retrieves the cue banner text, or the empty string if there is no cue set. + * + * @return The cue banner text on success, or the empty string on error and if + * no cue is set + * + * @remarks This simply does not seem to work under XP. However, it may work + * in Vista or Windows 7. TODO need to test this. + */ +RexxMethod1(RexxStringObject, e_getCue, CSELF, pCSelf) +{ + if ( ! requiredComCtl32Version(context, "getCue", COMCTL32_6_0) ) + { + return NULLOBJECT; + } + + RexxStringObject result = context->NullString(); + WCHAR wszCue[QUE_MAX_TEXT + 1]; + + if ( Edit_GetCueBannerText(getDChCtrl(pCSelf), wszCue, QUE_MAX_TEXT) ) + { + result = unicode2string(context, wszCue); + } + + return result; +} + + LRESULT CALLBACK EditSizeProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, UINT_PTR id, DWORD_PTR dwData) { switch ( msg ) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-01-15 18:09:05 UTC (rev 6591) @@ -944,12 +944,22 @@ * accelerators, it is always 0. So, converting to a pseudo pointer is always * the correct thing to do. */ -inline MsgReplyType genericCommandInvoke(RexxThreadContext *c, pCPlainBaseDialog pcpbd, CSTRING methodName, - WPARAM wParam, LPARAM lParam) +static MsgReplyType genericCommandInvoke(RexxThreadContext *c, pCPlainBaseDialog pcpbd, CSTRING methodName, + uint32_t tag, WPARAM wParam, LPARAM lParam) { - return invokeDispatch(c, pcpbd->rexxSelf, - c->String(methodName), - c->ArrayOfTwo(c->Uintptr(wParam), pointer2string(c, (void *)lParam))); + RexxArrayObject args = c->ArrayOfTwo(c->Uintptr(wParam), pointer2string(c, (void *)lParam)); + + if ( tag & TAG_REPLYFROMREXX ) + { + // We only get here for messages where what the Rexx method returns is + // discarded / ignored. TODO, this needs to be double checked. + invokeDirect(c, pcpbd->rexxSelf, methodName, args); + return ReplyTrue; + } + else + { + return invokeDispatch(c, pcpbd->rexxSelf, c->String(methodName), args); + } } /** @@ -1092,9 +1102,9 @@ for ( i = 0; i < tableSize; i++ ) { - if ( ((wParam & m[i].wpFilter) == m[i].wParam) && ((lParam & m[i].lpfilter) == (uint32_t)m[i].lParam) ) + if ( ((wParam & m[i].wpFilter) == m[i].wParam) && ((lParam & m[i].lpfilter) == m[i].lParam) ) { - return genericCommandInvoke(pcpbd->dlgProcContext, pcpbd, m[i].rexxMethod, wParam, lParam); + return genericCommandInvoke(pcpbd->dlgProcContext, pcpbd, m[i].rexxMethod, m[i].tag, wParam, lParam); } } return ContinueProcessing; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-01-15 18:09:05 UTC (rev 6591) @@ -567,6 +567,7 @@ REXX_METHOD_PROTOTYPE(e_setTabStops); REXX_METHOD_PROTOTYPE(e_showBallon); REXX_METHOD_PROTOTYPE(e_hideBallon); +REXX_METHOD_PROTOTYPE(e_getCue); REXX_METHOD_PROTOTYPE(e_setCue); REXX_METHOD_PROTOTYPE(e_disableInternalResize); REXX_METHOD_PROTOTYPE(e_style); @@ -754,6 +755,9 @@ REXX_METHOD_PROTOTYPE(point_setX); REXX_METHOD_PROTOTYPE(point_y); REXX_METHOD_PROTOTYPE(point_setY); +REXX_METHOD_PROTOTYPE(point_add); +REXX_METHOD_PROTOTYPE(point_subtract); +REXX_METHOD_PROTOTYPE(point_incr); // .Size REXX_METHOD_PROTOTYPE(size_init_cls); @@ -1269,6 +1273,7 @@ REXX_METHOD(e_style, e_style), REXX_METHOD(e_showBallon, e_showBallon), REXX_METHOD(e_hideBallon, e_hideBallon), + REXX_METHOD(e_getCue, e_getCue), REXX_METHOD(e_setCue, e_setCue), REXX_METHOD(e_disableInternalResize, e_disableInternalResize), @@ -1446,6 +1451,9 @@ REXX_METHOD(point_setX, point_setX), REXX_METHOD(point_y, point_y), REXX_METHOD(point_setY, point_setY), + REXX_METHOD(point_add, point_add), + REXX_METHOD(point_subtract, point_subtract), + REXX_METHOD(point_incr, point_incr), REXX_METHOD(size_init_cls, size_init_cls), REXX_METHOD(size_init, size_init), REXX_METHOD(size_cx, size_cx), Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-01-15 18:09:05 UTC (rev 6591) @@ -1079,6 +1079,77 @@ RexxMethod2(RexxObjectPtr, point_setX, CSELF, p, int32_t, x) { ((POINT *)p)->x = x; return NULLOBJECT; } RexxMethod2(RexxObjectPtr, point_setY, CSELF, p, int32_t, y) { ((POINT *)p)->y = y; return NULLOBJECT; } +/** Point::+ + * + * Returns a new point object that is the result of "adding" two points. + * + */ +RexxMethod2(RexxObjectPtr, point_add, RexxObjectPtr, other, CSELF, p) +{ + if ( ! context->IsOfType(other, "POINT") ) + { + wrongClassException(context->threadContext, 1, "Point"); + return NULLOBJECT; + } + + POINT *p1 = (POINT *)p; + POINT *p2 = (POINT *)context->ObjectToCSelf(other); + + return rxNewPoint(context, p1->x + p2->x, p1->y + p2->y); +} + +/** Point::- + * + * Returns a new point object that is the result of "subtracting" two points. + * + */ +RexxMethod2(RexxObjectPtr, point_subtract, RexxObjectPtr, other, CSELF, p) +{ + if ( ! context->IsOfType(other, "POINT") ) + { + wrongClassException(context->threadContext, 1, "Point"); + return NULLOBJECT; + } + + POINT *p1 = (POINT *)p; + POINT *p2 = (POINT *)context->ObjectToCSelf(other); + + return rxNewPoint(context, p1->x - p2->x, p1->y - p2->y); +} + +/** Point::incr + * + * Increments this point's x and y attributes by the specified amount. If both + * optional args are ommitted, the x and y are incremented by 1. + * + * @param x The amount to increment, (to add to,) this point's x attribute. + * If y is specified and this arg is omitted than 0 is used. + * + * @param y The amount to increment, (to add to,) this point's y attribute. + * If x is specified and this arg is omitted than 0 is used. + * + * @return No return. + * + * @remarks If either x or y are omitted, then their value will be 0. Since + * that is the default, once we check that both are not ommitted, we + * are safe to just add x and y to the current x and y. + */ +RexxMethod3(RexxObjectPtr, point_incr, OPTIONAL_int32_t, x, OPTIONAL_int32_t, y, CSELF, p) +{ + if ( argumentOmitted(1) && argumentOmitted(2) ) + { + ((POINT *)p)->x++; + ((POINT *)p)->y++; + } + else + { + ((POINT *)p)->x += x; + ((POINT *)p)->y += y; + } + + return NULLOBJECT; +} + /** * Methods for the ooDialog .Size class. */ Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oograph.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oograph.rex 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oograph.rex 2011-01-15 18:09:05 UTC (rev 6591) @@ -91,6 +91,9 @@ -- button the appearance of scrolling from the right to the left, and the 102 button -- the appearance of scrolling from the bottom to the top. + -- install.bmp 550 x 100 pixels + -- install2.bmp 450 x 120 pixels + self~createBitmapButton(101, 1, 10, self~sizeX-1, trunc(130 / self~factorY), "USEPAL", , , "bmp\install.bmp") self~createBitmapButton(102, 20, but2pos, self~sizeX - 20, but2size, , , , "bmp\install2.bmp") Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/Makefile.am =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/Makefile.am 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/Makefile.am 2011-01-15 18:09:05 UTC (rev 6591) @@ -1,6 +1,6 @@ #/*----------------------------------------------------------------------------*/ #/* */ -#/* Copyright (c) 2005-2010 Rexx Language Association. All rights reserved. */ +#/* Copyright (c) 2005-2011 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 */ @@ -39,5 +39,5 @@ MAINTAINERCLEANFILES = Makefile.in *~ -EXTRA_DIST = *.rex +EXTRA_DIST = *.rex *.h *.rc Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysInfo.h =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysInfo.h (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysInfo.h 2011-01-15 18:09:05 UTC (rev 6591) @@ -0,0 +1,40 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +#define SYSINFO_DLG 100 +#define IDC_CB_COMPONENTS 200 +#define IDC_LB_DATA 210 Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rc =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rc 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rc 2011-01-15 18:09:05 UTC (rev 6591) @@ -1,7 +1,7 @@ /*----------------------------------------------------------------------------*/ /* */ /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */ -/* Copyright (c) 2005-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2005-2011 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 */ @@ -42,17 +42,16 @@ *****************************************************************************/ #include <windows.h> +#include <sysInfo.h> -#define DIALOG_1 1 - -4711 DIALOG 80, 40, 213, 201 +SYSINFO_DLG DIALOG 80, 40, 213, 201 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "System Information" FONT 8, "MS Sans Serif" { DEFPUSHBUTTON "OK", IDOK, 158, 180, 50, 14 LTEXT "System Component", -1, 4, 6, 68, 12 - COMBOBOX 100, 75, 4, 132, 108, CBS_DROPDOWNLIST | WS_TABSTOP - LISTBOX 101, 4, 24, 204, 150, LBS_STANDARD | WS_HSCROLL + COMBOBOX IDC_CB_COMPONENTS, 75, 4, 132, 108, CBS_DROPDOWNLIST | WS_TABSTOP + LISTBOX IDC_LB_DATA, 4, 24, 204, 150, LBS_STANDARD | WS_HSCROLL } Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rex 2011-01-15 18:03:56 UTC (rev 6590) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rex 2011-01-15 18:09:05 UTC (rev 6591) @@ -35,52 +35,46 @@ /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* */ /*----------------------------------------------------------------------------*/ -/****************************************************************************/ -/* Name: sysinfo.rex */ -/* Type: Open Object Rexx Script using ooDialog and OLE */ -/* Resource: sysinfo.rc */ -/* */ -/* Description: */ -/* Demo application for inspecting some system properties using WMI */ -/* */ -/* Note: */ -/* Windows 2000 has WMI pre-installed, on WinNT/98 it has to be installed */ -/* manually. See: http://msdn.microsoft.com/downloads/sdks/wmi/eula.asp */ -/* */ -/* A complete overview of the used classes is available at: */ -/* http://msdn.microsoft.com/library/psdk/wmisdk/clascomp_3d4j.htm */ -/* */ -/****************************************************************************/ -System = .SystemClass~new -if System~InitCode = 0 then do - rc = System~Execute("SHOWTOP") -end +/** + * Name: sysinfo.rex + * Type: Open Object Rexx Script using ooDialog and OLE + * Resource: sysinfo.rc + * + * Description: + * Demo application for inspecting some system properties using WMI + * + * WMI is the acronym for Windows Management Instrumentation. Full documentation + * of WMI can be found in the Windows SDK which Microsoft provides free of + * charge. You can also locate this documentation on the web. A google search + * of: + * + * "MSDN Windows Management Instrumentation" + * + * will lead you straight to the documentation + */ -exit + sysInfoDlg = .SystemClass~new('sysinfo.rc', SYSINFO_DLG, , 'sysInfo.h') + if sysInfoDlg~initCode = 0 then do + sysInfoDlg~execute("SHOWTOP") + end +return 0 + ::requires "ooDialog.cls" -::class SystemClass subclass UserDialog +::class 'SystemClass' subclass RcDialog -::method Init - forward class (super) continue /* call parent constructor */ - InitRet = Result +::method initDialog + expose cb lb componentQueue queueHasData userHasQuit - if self~Load("sysinfo.rc", ) \= 0 then do - self~InitCode = 1 - return 1 - end + -- Connect the selection change event of the combo box to a method in this + -- dialog. + self~connectComboBoxEvent(IDC_CB_COMPONENTS, "SELCHANGE", selectionChange) - /* Connect dialog control items to class methods */ - self~connectComboBoxEvent(100,"SELCHANGE",selectionChange) - - /* Add your initialization code here */ - return InitRet - -::method InitDialog - cb = self~newComboBox(100) + -- Fill the combo box with the names of the WMI classes we will display. + cb = self~newComboBox(IDC_CB_COMPONENTS) if cb \= .nil then do cb~add("Win32_BootConfiguration") cb~add("Win32_ComputerSystem") @@ -92,44 +86,126 @@ cb~add("Win32_Service") end -::method run - self~selectionChange /* call self~selectionChanged to display information of initial selection */ - self~run:super + lb = self~newListBox(IDC_LB_DATA) + cb~select("Win32_ComputerSystem") -::method Ok - resOK = self~OK:super /* make sure self~Validate is called and self~InitCode is set to 1 */ - self~Finished = resOK /* 1 means close dialog, 0 means keep open */ - return resOK + componentQueue = .queue~new + queueHasData = .false + userHasQuit = .false + doneProcessing = .true + self~start("queueProcessor") -::method selectionChange - lc = self~newListBox(101) - if lc = .nil then return - lc~DeleteAll - component = self~newComboBox(100)~title --- Gather data on the current size and position of the dialog - parse value lc~getPos() with siX siY - parse value lc~getSize() with siW siH --- Get the current position of the cursor - parse value self~CursorPos with preCX preCY --- Set the cursor to the hour glass - ch1 = lc~Cursor_Wait --- Place the hour glass cursor in the center of the dialog being populated - lc~SetCursorPos((siX+(siW/2))*self~FactorX,(siY+(siH/2))*self~FactorY) + self~addToQueue("Win32_ComputerSystem") - WMIobject = .OLEObject~GetObject("WinMgmts:") - objects = WMIobject~InstancesOf(component) - do instance over objects - /* please note: these objects offer a lot more information than is */ - /* displayed here. for simplicity's sake only name and description */ - /* (if available) are shown */ - name = instance~name - desc = instance~description - if ((name = desc) | (desc = .nil)) then - lc~add(name) - else - lc~add(name "("desc")") +::method queueProcessor unguarded + expose queueHasData componentQueue lb userHasQuit doneProcessing + + doneProcessing = .false + + do forever + + guard on when queueHasData + + if userHasQuit then leave + + component = componentQueue~pull + do while component \== .nil + if userHasQuit then leave + + WMIObject = .OLEObject~getObject("WinMgmts:") + + if WMIObject \== .nil, component \== "" then do + -- Change the cursor to the hour glass cursor to indicate we are processing + -- and the user should be patient. + self~showHourGlass + + lb~deleteAll + objects = WMIObject~instancesOf(component) + + do instance over objects + -- Please note: these objects offer a lot more information than is + -- displayed here. For simplicity's sake only the name and description + -- (if available) are shown. + name = instance~name + desc = instance~description + if ((name = desc) | (desc = .nil)) then + lb~add(name) + else + lb~add(name "("desc")") + end + + -- Restore the cursor to its original shape and position. + self~showHourGlass(.false) + end + if userHasQuit then leave + component = componentQueue~pull + end + if userHasQuit then leave + queueHasData = .false end --- Restore the cursor to its original shape and position - lc~RestoreCursorShape(ch1) - self~SetCursorPos(preCX,preCY) + + doneProcessing = .true + +::method selectionChange unguarded + expose cb lb + + component = cb~selected + self~addToQueue(component) + + return 0 + +::method ok unguarded + expose userHasQuit queueHasData doneProcessing + + userHasQuit = .true + queueHasData = .true + + guard on when doneProcessing + + return self~ok:super + +::method cancel unguarded + expose userHasQuit queueHasData doneProcessing + + userHasQuit = .true + queueHasData = .true + + guard on when doneProcessing + + return self~cancel:super + +::method addToQueue private + expose queueHasData componentQueue + use strict arg component + + componentQueue~queue(component) + queueHasData = .true + + +::method showHourGlass private + expose lb oldCursorPosition oldCursorShape + use strict arg show = .true + + if show then do + -- Save the current cursor position. Change the list box's cursor shape to + -- the hour glass and save the old shape. + oldCursorPosition = self~getCursorPos + oldCursorShape = lb~cursor_wait + + -- Get the current size and position of the list box. + p = lb~getRealPos + s = lb~getRealSize + + -- Set the point object to the midpoint of the list box and position the + -- cursor at that posiiion + p~incr(s~width % 2, s~height % 2) + lb~setCursorPos(p) + end + else do + lb~restoreCursorShape(oldCursorShape) + self~setCursorPos(oldCursorPosition) + end + +::method initAutoDetection + self~noAutoDetection This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2011-01-17 18:10:19
|
Revision: 6600 http://oorexx.svn.sourceforge.net/oorexx/?rev=6600&view=rev Author: miesfeld Date: 2011-01-17 18:10:13 +0000 (Mon, 17 Jan 2011) Log Message: ----------- Sync sandbox ooDialog 4.2.0 with main through r6600 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rex Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-01-17 18:06:36 UTC (rev 6599) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-01-17 18:10:13 UTC (rev 6600) @@ -1000,7 +1000,7 @@ arg left,top,width,height,margin if margin~datatype('n') -then self~Margin = margin~trunc +then self~margin = margin~trunc else self~margin = max(min(height % 7,5),1) if top~datatype('n') @@ -1020,10 +1020,10 @@ else self~height = 100 -self~T = self~Top + self~Margin -self~L = self~left + self~Margin +self~T = self~Top + self~margin +self~L = self~left + self~margin self~B = self~top + self~height - self~margin -self~R = self~Left + self~Width - self~Margin +self~R = self~Left + self~Width - self~margin self~LastX = 0 self~LastY = 0 @@ -1090,7 +1090,7 @@ /* ------------------------------------------------------------------------- */ if self~LastY~pos('%') = 0 /* Y was absolute */ -then return self~Top + self~Height - self~Margin - self~LastY +then return self~Top + self~Height - self~margin - self~LastY else return self~h(100 - self~LastY~changestr('%','')||'%') /* Y was % */ /* ------------------------------------------------------------------------- */ @@ -1111,7 +1111,7 @@ /* ------------------------------------------------------------------------- */ if self~LastX~pos('%') = 0 /* X was absolute */ -then return self~Left + self~Width - self~Margin - self~LastX +then return self~Left + self~Width - self~margin - self~LastX else return self~w(100 - self~LastX~changestr('%','')||'%') /* X was % */ /* ----------------------- compatibility methods --------------------------- */ @@ -1120,20 +1120,20 @@ ::method sizeX ; return self~width ::method sizeY ; return self~height /* ------------------------------------------------------------------------- */ -::method T Attribute -::method L Attribute -::method B Attribute -::method R Attribute -::method Top Attribute -::method Left Attribute -::method Width Attribute -::method Height Attribute -::method Margin Attribute -::method LastX Attribute Private -::method LastY Attribute Private +::method T attribute +::method L attribute +::method B attribute +::method R attribute +::method Top attribute +::method Left attribute +::method Width attribute +::method Height attribute +::method margin attribute +::method LastX attribute private +::method LastY attribute private /* ========================================================================= */ -::Class 'DlgAreaU' SubClass DlgArea Public -- DlgAreaUniversal - Whole of Dialog +::class 'DlgAreaU' subclass DlgArea public -- DlgAreaUniversal - Whole of Dialog /* ========================================================================= */ /* define the Area of the calling Dialog */ /* */ @@ -1141,30 +1141,32 @@ /* */ /* methods & attributes */ /* resize Aids in Dynamically Resizing Dialogs - See Documentation */ -/* CorrectionFactor - See Documentation */ +/* correctionFactor - See Documentation */ /* */ -::method Init +::method init /* ------------------------------------------------------------------------- */ -expose DlgObjList DlgObject +expose dlgObjList dlgObject +use arg dlgObj, margin, noResize, noMove -use arg DlgObj, Margin, NoResize, NoMove +dlgObject = dlgObj -if \NoResize~isA(.Set) then NoResize = .Set~new -self~NoResize = NoResize -if \NoMove~isA(.Set) then NoMove = .Set~new -self~NoMove = NoMove +if \noResize~isA(.Set) then noResize = .Set~new +if \noMove~isA(.Set) then noMove = .Set~new +self~noResize = noResize +self~noMove = noMove +self~resolveSetIDs + if \margin~datatype('n') then margin = 5 -self~CorrectionFactor = 1.05 +self~correctionFactor = 1.05 -self~init:super(0,0,DlgObj~sizeX,DlgObj~sizeY,margin) +self~init:super(0,0,dlgObj~sizeX,dlgObj~sizeY,margin) self~updateOnResize = .true -self~OriginalWidth = DlgObj~sizeX -self~OriginalHeight = DlgObj~sizeY -self~LastError = .nil -DlgObject = DlgObj +self~originalWidth = dlgObj~sizeX +self~originalHeight = dlgObj~sizeY +self~lastError = .nil CreateControlTypes = .set~of('BITMAPBUTTON', 'CHECKBOX', 'COMBOBOXEDIT', 'TAB', - 'PUSHBUTTON', 'RADIOBUTTON', 'DATETIMEPICKER', 'LISTVIEW', 'PASSWORDEDIT', - @@ -1175,7 +1177,7 @@ ) -- Analyze the callers defineDialog Method -DDSourceArr=DlgObj~class~method('defineDialog')~source +DDSourceArr=dlgObj~class~method('defineDialog')~source DDSBuff=.mutableBuffer~new -- Remove comments prefixed by -- @@ -1192,7 +1194,7 @@ commStart = DDSource~SubStr(1,CommEnd-1)~lastPos('/'||'*') if comStart=0 then do - self~LastError='Error in DlgAreaU Class: Unbalanced comments in defineDialog class of' Dlg + self~lastError='Error in DlgAreaU Class: Unbalanced comments in defineDialog class of' Dlg leave end @@ -1225,12 +1227,12 @@ when DAMsg~Space(0) = '~NEW' -- This is a DlgArea Obj definition then interpret DAVar'=.DlgArea~new('daparms')' otherwise - self~LastError='DlgAreaU Class: Unable to parse:' SourceLine + self~lastError='DlgAreaU Class: Unable to parse:' SourceLine end end -- Now we parse out resizable widgets. -DlgObjList=.List~new +dlgObjList=.List~new delim = '00'x signal on syntax name parseerror @@ -1257,10 +1259,10 @@ else ObjId = '' -- This createXXX method is ignored - ObjId = DlgObject~resolveResourceID(ObjId~space(0)) + ObjId = dlgObject~resolveResourceID(ObjId~space(0)) if ObjId \= '', ObjId > 0 then - interpret 'DlgObjList~Insert(ObjId "@"' ObjX '"@"' ObjY '"@"' ObjW '"@"' ObjH ')' + interpret 'dlgObjList~Insert(ObjId"@"'ObjX'"@"'ObjY'"@"'ObjW'"@"'ObjH')' end else do -- skip past this create @@ -1295,10 +1297,10 @@ ObjId = '' -- This addXXX method is ignored end - ObjId = DlgObject~resolveResourceID(ObjId~space(0)) + ObjId = dlgObject~resolveResourceID(ObjId~space(0)) if ObjId \= '', ObjId > 0 then - interpret 'DlgObjList~Insert(ObjId "@"' ObjX '"@"' ObjY '"@"' ObjW '"@"' ObjH ')' + interpret 'dlgObjList~Insert(ObjId"@"'ObjX'"@"'ObjY'"@"'ObjW'"@"'ObjH')' end else do -- skip past this add @@ -1317,32 +1319,54 @@ /* ------------------------------------------------------------------------- */ ::method noResizePut /* ------------------------------------------------------------------------- */ -/* This method allows the user to place dialog controls in the NoResize set */ +/* This method allows the user to place dialog controls in the noResize set */ /* using symbolic IDs. */ /* ------------------------------------------------------------------------- */ -expose DlgObject +expose dlgObject use strict arg id - id = DlgObject~getResourceID(id) - self~NoResize~put(id) + id = dlgObject~getResourceID(id) + self~noResize~put(id) /* ------------------------------------------------------------------------- */ ::method noMovePut /* ------------------------------------------------------------------------- */ -/* This method allows the user to place dialog controls in the NoMove set */ +/* This method allows the user to place dialog controls in the noMove set */ /* using symbolic IDs. */ /* ------------------------------------------------------------------------- */ -expose DlgObject +expose dlgObject use strict arg id - id = DlgObject~getResourceID(id) - self~NoMove~put(id) + id = dlgObject~getResourceID(id) + self~noMove~put(id) /* ------------------------------------------------------------------------- */ -::method Resize +::method resolveSetIDs private /* ------------------------------------------------------------------------- */ +/* This method looks through the noMove and noResize sets and replaces any */ +/* symbolic resource IDs with the correct numeric ID. If a symbolic ID can */ +/* not be resolved, it is removed from the set. */ +/* ------------------------------------------------------------------------- */ +expose dlgObject noMove noResize + + do id over noMove + id = noMove~remove(id) + id = dlgObject~getResourceID(id) + if id > 0 then noMove~put(id) + end + + do id over noResize + id = noResize~remove(id) + id = dlgObject~getResourceID(id) + if id > 0 then noResize~put(id) + end + + +/* ------------------------------------------------------------------------- */ +::method resize +/* ------------------------------------------------------------------------- */ /* this method needs to be called as follows: */ /* in your dialog init method place this line after call to the superclass */ /* self~connectResize('OnResize') */ @@ -1352,31 +1376,30 @@ /* new width and height */ */ /* u~resize(self,sizeinfo) */ /* ------------------------------------------------------------------------- */ -expose DlgObjList +expose dlgObjList use arg dlg,data dlg~sizeX = .DlgUtil~loWord(data) % dlg~factorX dlg~sizeY = .DlgUtil~hiWord(data) % dlg~factorY - wFactor = (dlg~sizeX / self~OriginalWidth ) * self~CorrectionFactor - hFactor = (dlg~sizeY / self~OriginalHeight) * self~CorrectionFactor + wFactor = (dlg~sizeX / self~originalWidth ) * self~correctionFactor + hFactor = (dlg~sizeY / self~originalHeight) * self~correctionFactor - - do dlgObjDef over DlgObjList + do dlgObjDef over dlgObjList parse var dlgObjdef DOid'@'DOx'@'DOy'@'DOw'@'DOh - if \self~NoResize~HasIndex(DOid~strip) - then dlg~ResizeItem(Doid,DOw * wFactor,DOh * hFactor,"NOREDRAW") - if \self~NoMove~HasIndex(DOid) - then dlg~MoveItem(DOid,DOx * wFactor,DOy * hFactor,"NOREDRAW") + if \self~noResize~hasIndex(DOid) + then dlg~resizeItem(Doid,DOw * wFactor,DOh * hFactor,"NOREDRAW") + if \self~noMove~hasIndex(DOid) + then dlg~moveItem(DOid,DOx * wFactor,DOy * hFactor,"NOREDRAW") end /* DO */ if self~updateOnResize then dlg~update /* ------------------------------------------------------------------------- */ -::attribute OriginalWidth private -::attribute OriginalHeight private -::attribute DlgObject private get -::attribute NoResize -::attribute NoMove -::attribute CorrectionFactor -::attribute LastError +::attribute originalWidth private +::attribute originalHeight private +::attribute dlgObject private get +::attribute noResize +::attribute noMove +::attribute correctionFactor +::attribute lastError ::attribute updateOnResize Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex 2011-01-17 18:06:36 UTC (rev 6599) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex 2011-01-17 18:10:13 UTC (rev 6600) @@ -55,9 +55,9 @@ * the dialog. * * We keep track of whether the user is resizing, or not. When we get the size - * move ended event, if the user was resizing, we invoke the update method of - * the dialog, forcing all the dialog controls to redraw themselves in their - * new, final, position. + * move ended event, if the user was resizing, we invoke the redrawClient + * method of the dialog, forcing all the dialog controls to redraw themselves + * in their new, final, position. * * This eliminates the flicker, but also makes it appear as though the dialog * controls are not changing while the user is actively resizing. When the @@ -65,6 +65,15 @@ * size and position. * * Which approach is better is probably a matter of personal preference. + * + * After some use of this example program, a refinement to the above algorithm + * was made. This is what is used now. Since no repainting of the dialog + * controls is done until the last resize event, there is no sense in re- + * calculating the size and position of each control on every resize event. + * + * Rather than invoke u~resize(self, sizeinfo) every single time in onResize() + * u~resize is only invoked when the dialog client area is going to be forced + * to redraw. */ dlg = .ResizableDialog~new( , 'dlgAreaUDemo.h') @@ -97,15 +106,14 @@ u = .dlgAreaU~new(self) if u~lastError \= .nil then call errorDialog u~lastError - -- Tell the DialogAreaU object to not invoke the update method. We are not - -- resizing now. We have not been minimized or minMaximized. + -- Tell the DialogAreaU object to not invoke the update method. u~updateOnResize = .false - -- We use these variables to track when to update, or not. + -- We use these variables to track when to redraw, or not. sizing = .false minMaximized = .false - u~noResize~put(IDC_PB_0) + u~noResizePut(IDC_PB_0) e = .dlgArea~new(u~x , u~y , u~w('70%'), u~h('90%')) -- edit area s = .dlgArea~new(u~x , u~y('90%'), u~w('70%'), u~hr ) -- status area b = .dlgArea~new(u~x('70%'), u~y , u~wr , u~hr ) -- button area @@ -132,22 +140,27 @@ ::method onResize unguarded - expose u sizing minMaximized + expose u sizing minMaximized lastSizeInfo use arg sizingType, sizeinfo - u~resize(self, sizeinfo) + -- Save the size information so we know the final size of the dialog. + lastSizeInfo = sizeInfo - -- The size / move ended event does not occur when the user maximize, + -- The size / move ended event does not occur when the user maximizes, -- minimizes, or restores from maximized / minimized. Because of that, we - -- need to use self~update under those conditions. + -- need to redraw the client area under those conditions. if sizingType == self~SIZE_MAXIMIZED | sizingType == self~SIZE_MINIMIZED then do minMaximized = .true - if sizingType == self~SIZE_MAXIMIZED then self~update + if sizingType == self~SIZE_MAXIMIZED then do + u~resize(self, sizeinfo) + self~redrawClient(.true) + end end else if sizingType == self~SIZE_RESTORED, minMaximized then do minMaximized = .false - self~update + u~resize(self, sizeinfo) + self~redrawClient(.true) end else do -- We are resizing now. @@ -158,10 +171,13 @@ ::method onSizeMoveEnded unguarded - expose sizing + expose u sizing lastSizeInfo -- If we were resizing, force the dialog controls to redraw themselves. - if sizing then self~update + if sizing then do + u~resize(self, lastSizeInfo) + self~redrawClient(.true) + end -- We are not resizing anymore. sizing = .false Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rex 2011-01-17 18:06:36 UTC (rev 6599) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rex 2011-01-17 18:10:13 UTC (rev 6600) @@ -104,6 +104,7 @@ doneProcessing = .false do forever + if userHasQuit then leave guard on when queueHasData @@ -113,20 +114,25 @@ do while component \== .nil if userHasQuit then leave + -- Change the cursor to the hour glass cursor to indicate we are processing + -- and the user should be patient. + self~showHourGlass + WMIObject = .OLEObject~getObject("WinMgmts:") if WMIObject \== .nil, component \== "" then do - -- Change the cursor to the hour glass cursor to indicate we are processing - -- and the user should be patient. - self~showHourGlass + if userHasQuit then leave lb~deleteAll objects = WMIObject~instancesOf(component) do instance over objects + if userHasQuit then leave + -- Please note: these objects offer a lot more information than is -- displayed here. For simplicity's sake only the name and description -- (if available) are shown. + name = instance~name desc = instance~description if ((name = desc) | (desc = .nil)) then @@ -135,13 +141,12 @@ lb~add(name "("desc")") end - -- Restore the cursor to its original shape and position. - self~showHourGlass(.false) end - if userHasQuit then leave + -- Restore the cursor to its original shape and position. + self~showHourGlass(.false) + component = componentQueue~pull end - if userHasQuit then leave queueHasData = .false end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2011-02-02 01:27:13
|
Revision: 6682 http://oorexx.svn.sourceforge.net/oorexx/?rev=6682&view=rev Author: miesfeld Date: 2011-02-02 01:27:04 +0000 (Wed, 02 Feb 2011) Log Message: ----------- Sync sandbox ooDialog 4.2.0 with main up through r6681 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/ReadMe.txt sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodlist.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodtree.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/ReadMe.txt sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/SimpleUpDown.rex Added Paths: ----------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodKeyNames.hpp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/PaidHolidays.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/paidHolidays.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/paidHolidays.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/SimpleMonthCalendar.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/SimpleMonthCalendar.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/SimpleMonthCalendar.rex Removed Paths: ------------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/PaidHolidays.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/paidHolidays.rc Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-02-02 01:27:04 UTC (rev 6682) @@ -311,13 +311,14 @@ else do flag = 0 if arg(1, 'E') then flag = self~EC_LEFTMARGIN - if arg(2, 'E') then flag .DlgUtil~or(flag, self~EC_RIGHTMARGIN) - lParam = .DlgUtil~makeLParam(right, left) + if arg(2, 'E') then flag = .DlgUtil~or(flag, self~EC_RIGHTMARGIN) + lParam = .DlgUtil~makeLParam(left, right) self~sendWinIntMsg(self~EM_SETMARGINS, flag, lParam) end return 0 ::method getMargins unguarded + use strict arg marg = self~sendWinIntMsg(self~EM_GETMARGINS, 0, 0) m = .directory~new m~right = .DlgUtil~hiWord(marg) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-02-02 01:27:04 UTC (rev 6682) @@ -59,6 +59,8 @@ ::method comctl32Version class external "LIBRARY oodialog dlgutil_comctl32Version_cls" ::method hiWord class external "LIBRARY oodialog dlgutil_hiWord_cls" ::method loWord class external "LIBRARY oodialog dlgutil_loWord_cls" +::method sHiWord class external "LIBRARY oodialog dlgutil_shiWord_cls" +::method sLoWord class external "LIBRARY oodialog dlgutil_sloWord_cls" ::method makeWParam class external "LIBRARY oodialog dlgutil_makeWPARAM_cls" ::method makeLParam class external "LIBRARY oodialog dlgutil_makeLPARAM_cls" ::method and class external "LIBRARY oodialog dlgutil_and_cls" @@ -93,37 +95,38 @@ ::class 'Rect' public ::method init external "LIBRARY oodialog rect_init" -::method left external "LIBRARY oodialog rect_left" -::method 'left=' external "LIBRARY oodialog rect_setLeft" -::method top external "LIBRARY oodialog rect_top" -::method 'top=' external "LIBRARY oodialog rect_setTop" -::method right external "LIBRARY oodialog rect_right" -::method 'right=' external "LIBRARY oodialog rect_setRight" -::method bottom external "LIBRARY oodialog rect_bottom" -::method 'bottom=' external "LIBRARY oodialog rect_setBottom" +::attribute left get external "LIBRARY oodialog rect_left" +::attribute left set external "LIBRARY oodialog rect_setLeft" +::attribute top get external "LIBRARY oodialog rect_top" +::attribute top set external "LIBRARY oodialog rect_setTop" +::attribute right get external "LIBRARY oodialog rect_right" +::attribute right set external "LIBRARY oodialog rect_setRight" +::attribute bottom get external "LIBRARY oodialog rect_bottom" +::attribute bottom set external "LIBRARY oodialog rect_setBottom" ::class 'Point' public ::method init external "LIBRARY oodialog point_init" -::method x external "LIBRARY oodialog point_x" -::method 'x=' external "LIBRARY oodialog point_setX" -::method y external "LIBRARY oodialog point_y" -::method 'y=' external "LIBRARY oodialog point_setY" +::attribute x get external "LIBRARY oodialog point_x" +::attribute x set external "LIBRARY oodialog point_setX" +::attribute y get external "LIBRARY oodialog point_y" +::attribute y set external "LIBRARY oodialog point_setY" ::method '+' external "LIBRARY oodialog point_add" ::method '-' external "LIBRARY oodialog point_subtract" ::method 'incr' external "LIBRARY oodialog point_incr" +::method 'decr' external "LIBRARY oodialog point_decr" ::class 'Size' public ::method init class external "LIBRARY oodialog size_init_cls" ::method init external "LIBRARY oodialog size_init" -::method width external "LIBRARY oodialog size_cx" -::method 'width=' external "LIBRARY oodialog size_setCX" -::method height external "LIBRARY oodialog point_y" -::method 'height=' external "LIBRARY oodialog point_setY" +::attribute width get external "LIBRARY oodialog size_cx" +::attribute width set external "LIBRARY oodialog size_setCX" +::attribute height get external "LIBRARY oodialog point_y" +::attribute height set external "LIBRARY oodialog point_setY" ::class 'DayState' public ::method init external "LIBRARY oodialog ds_init" -::method dayStateValue external "LIBRARY oodialog ds_dayStateValue" +::method value external "LIBRARY oodialog ds_value" ::class 'DayStates' public @@ -144,19 +147,30 @@ use strict arg year = (.DateTime~today~year - 2), count = 3 startMonth = .DateTime~fromStandardDate(year || '0101') - endMonth = .DateTime~fromStandardDate((year + count) || '0101') + endMonth = .DateTime~fromStandardDate((year + count - 1) || '1201') years = .table~new - do i = year to year + count + do i = year to year + count - 1 years[i] = self~generateEmptyYear end +::method getDayState + expose startMonth years + use strict arg dateTime + + year = dateTime~year + month = dateTime~month + + aYear = years[year] + if aYear == .nil then return .nil + else return aYear[month] + ::method getDayStateBuffer expose startMonth years - use strict arg startDate, count + use strict arg dateTime, count - year = startDate~year - month = startDate~month + year = dateTime~year + month = dateTime~month resultArray = .array~new(count) @@ -185,10 +199,12 @@ return .DayStates~makeDayStateBuffer(resultArray) -::method addYear +::method putYear expose startMonth endMonth years - use strict arg year, values + use strict arg dateTime, values + year = dateTime~year + newYear = .DateTime~fromStandardDate(year || '0101') months = .array~new(12) do i = 1 to 12 @@ -204,21 +220,24 @@ if years[year + 1] == .nil then needFill = .true end else if newYear > endMonth then do - endMonth = newYear + endMonth = .DateTime~fromStandardDate(year || '1201') if years[year - 1] == .nil then needFill = .true end if needFill then self~doFill -::method addMonth +::method putMonth expose startMonth endMonth years - use strict arg year, month, dayState + use strict arg dateTime, dayState + year = dateTime~year + month = dateTime~month + yearArray = years[year] if yearArray == .nil then do yearArray = .array~new(12) yearArray[month] = dayState - self~addYear(year, yearArray) + self~putYear(dateTime, yearArray) end else do yearArray[month] = dayState @@ -239,7 +258,241 @@ end +::class 'VK' mixinclass Object public +-- Virtual Keys, Standard Set. Note that several of the integer values have +-- duplicate names. +::constant LBUTTON 1 +::constant RBUTTON 2 +::constant CANCEL 3 +::constant MBUTTON 4 +::constant XBUTTON1 5 +::constant XBUTTON2 6 + -- 7 : unassigned +::constant BACK 8 +::constant TAB 9 + -- 10 : reserved + -- 11 : reserved +::constant CLEAR 12 +::constant RETURN 13 + -- 14 : Microsoft does not list. + -- 15 : Microsoft does not list. +::constant SHIFT 16 +::constant CONTROL 17 +::constant MENU 18 +::constant PAUSE 19 +::constant CAPITAL 20 +::constant KANA 21 +::constant HANGEUL 21 +::constant HANGUL 21 + -- 22 : Microsoft does not list. +::constant JUNJA 23 +::constant FINAL 24 +::constant HANJA 25 +::constant KANJI 25 + -- 26 : Microsoft does not list. +::constant ESCAPE 27 +::constant CONVERT 28 +::constant NONCONVERT 29 +::constant ACCEPT 30 +::constant MODECHANGE 31 +::constant SPACE 32 +::constant PRIOR 33 +::constant NEXT 34 +::constant END 35 +::constant HOME 36 +::constant LEFT 37 +::constant UP 38 +::constant RIGHT 39 +::constant DOWN 40 +::constant SELECT 41 +::constant PRINT 42 +::constant EXECUTE 43 +::constant SNAPSHOT 44 +::constant INSERT 45 +::constant DELETE 46 +::constant HELP 47 +::constant 0 48 +::constant 1 49 +::constant 2 50 +::constant 3 51 +::constant 4 52 +::constant 5 53 +::constant 6 54 +::constant 7 55 +::constant 8 56 +::constant 9 57 + -- 58 - 63 (0x3A -0x3F) Microsoft does not list. + -- 0x40 : unassigned +::constant A 65 +::constant B 66 +::constant C 67 +::constant D 68 +::constant E 69 +::constant F 70 +::constant G 71 +::constant H 72 +::constant I 73 +::constant J 74 +::constant K 75 +::constant L 76 +::constant M 77 +::constant N 78 +::constant O 79 +::constant P 80 +::constant Q 81 +::constant R 82 +::constant S 83 +::constant T 84 +::constant U 85 +::constant V 86 +::constant W 87 +::constant X 88 +::constant Y 89 +::constant Z 90 +::constant LWIN 91 +::constant RWIN 92 +::constant APPS 93 + -- 0x5E : reserved +::constant SLEEP 95 +::constant NUMPAD0 96 +::constant NUMPAD1 97 +::constant NUMPAD2 98 +::constant NUMPAD3 99 +::constant NUMPAD4 100 +::constant NUMPAD5 101 +::constant NUMPAD6 102 +::constant NUMPAD7 103 +::constant NUMPAD8 104 +::constant NUMPAD9 105 +::constant MULTIPLY 106 +::constant ADD 107 +::constant SEPARATOR 108 +::constant SUBTRACT 109 +::constant DECIMAL 110 +::constant DIVIDE 111 +::constant F1 112 +::constant F2 113 +::constant F3 114 +::constant F4 115 +::constant F5 116 +::constant F6 117 +::constant F7 118 +::constant F8 119 +::constant F9 120 +::constant F10 121 +::constant F11 122 +::constant F12 123 +::constant F13 124 +::constant F14 125 +::constant F15 126 +::constant F16 127 +::constant F17 128 +::constant F18 129 +::constant F19 130 +::constant F20 131 +::constant F21 132 +::constant F22 133 +::constant F23 134 +::constant F24 135 + -- 0x88 - 0x8F : unassigned +::constant NUMLOCK 144 +::constant SCROLL 145 + +-- NEC PC-9800 kbd definitions +::constant OEM_NEC_EQUAL 146 -- '=' key on numpad + +-- Fujitsu/OASYS kbd definitions +::constant OEM_FJ_JISHO 146 -- 'Dictionary' key +::constant OEM_FJ_MASSHOU 147 -- 'Unregister word' key +::constant OEM_FJ_TOUROKU 148 -- 'Register word' key +::constant OEM_FJ_LOYA 149 -- 'Left OYAYUBI' key +::constant OEM_FJ_ROYA 150 -- 'Right OYAYUBI' key + -- 0x97 - 0x9F : unassigned + +::constant LSHIFT 160 +::constant RSHIFT 161 +::constant LCONTROL 162 +::constant RCONTROL 163 +::constant LMENU 164 +::constant RMENU 165 +::constant BROWSER_BACK 166 +::constant BROWSER_FORWARD 167 +::constant BROWSER_REFRESH 168 +::constant BROWSER_STOP 169 +::constant BROWSER_SEARCH 170 +::constant BROWSER_FAVORITES 171 +::constant BROWSER_HOME 172 +::constant VOLUME_MUTE 173 +::constant VOLUME_DOWN 174 +::constant VOLUME_UP 174 +::constant MEDIA_NEXT_TRACK 176 +::constant MEDIA_PREV_TRACK 177 +::constant MEDIA_STOP 178 +::constant MEDIA_PLAY_PAUSE 179 +::constant LAUNCH_MAIL 180 +::constant LAUNCH_MEDIA_SELECT 181 +::constant LAUNCH_APP1 182 +::constant LAUNCH_APP2 183 + -- 0xB8 - 0xB9 : reserved + +::constant OEM_1 186 -- ';:' for US +::constant OEM_PLUS 187 -- '+' any country +::constant OEM_COMMA 188 -- ',' any country +::constant OEM_MINUS 189 -- '-' any country +::constant OEM_PERIOD 190 -- '.' any country +::constant OEM_2 191 -- '/?' for US +::constant OEM_3 192 -- '`~' for US + -- 0xC1 - 0xD7 : reserved + -- 0xD8 - 0xDA : unassigned + +::constant OEM_4 219 -- '[{' for US +::constant OEM_5 220 -- '\|' for US +::constant OEM_6 221 -- ']}' for US +::constant OEM_7 222 -- ''"' for US +::constant OEM_8 223 + -- 0xE0 : reserved + +-- Various ended or enhanced keyboards +::constant OEM_AX 225 -- 'AX' key on Japanese AX kbd +::constant OEM_102 226 -- "<>" or "\|" on RT 102-key kbd. +::constant ICO_HELP 227 -- Help key on ICO +::constant ICO_00 228 -- 00 key on ICO +::constant PROCESSKEY 229 +::constant ICO_CLEAR 230 +::constant PACKET 231 + -- 0xE8 : unassigned + +-- Nokia/Ericsson definitions +::constant OEM_RESET 233 +::constant OEM_JUMP 234 +::constant OEM_PA1 235 +::constant OEM_PA2 236 +::constant OEM_PA3 237 +::constant OEM_WSCTRL 238 +::constant OEM_CUSEL 239 +::constant OEM_ATTN 240 +::constant OEM_FINISH 241 +::constant OEM_COPY 242 +::constant OEM_AUTO 243 +::constant OEM_ENLW 244 +::constant OEM_BACKTAB 245 +::constant ATTN 246 +::constant CRSEL 247 +::constant EXSEL 248 +::constant EREOF 249 +::constant PLAY 250 +::constant ZOOM 251 +::constant NONAME 252 +::constant PA1 253 +::constant OEM_CLEAR 254 + -- 0xFF : reserved + +::method key2name class external "LIBRARY oodialog vk_key2name" +::method key2name external "LIBRARY oodialog vk_key2name" + + + /** * Standard Dialog Control Classes. Some simple short cut dialogs. */ @@ -960,7 +1213,7 @@ /* methods */ /* x & y can take an offset argument which may be absolute or a percentage */ /* w & h can take a percentage as argument */ -/* a parm of R to W or H means the remainder of the width or height */ +/* a parm of r to w or h means the remainder of the width or height */ /* */ /* so to add a button 80% across your margined dialog for the remainder */ /* a = .DlgArea~new(10,10,150,110,5) */ @@ -995,7 +1248,7 @@ /* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */ -::method Init +::method init /* ------------------------------------------------------------------------- */ arg left,top,width,height,margin @@ -1020,19 +1273,19 @@ else self~height = 100 -self~T = self~Top + self~margin -self~L = self~left + self~margin -self~B = self~top + self~height - self~margin -self~R = self~Left + self~Width - self~margin +self~t = self~top + self~margin +self~l = self~left + self~margin +self~b = self~top + self~height - self~margin +self~r = self~left + self~width - self~margin -self~LastX = 0 -self~LastY = 0 +self~lastX = 0 +self~lastY = 0 /* ------------------------------------------------------------------------- */ -::method X +::method x /* ------------------------------------------------------------------------- */ arg offset -self~LastX='0'||Offset +self~lastX='0'||Offset if offset~pos('%') > 0 then do @@ -1051,10 +1304,10 @@ else return self~left + self~margin /* ------------------------------------------------------------------------- */ -::method Y +::method y /* ------------------------------------------------------------------------- */ arg offset -self~LastY = '0'||offset +self~lastY = '0'||offset if offset~pos('%') > 0 then do @@ -1073,7 +1326,7 @@ else return self~top + self~margin /* ------------------------------------------------------------------------- */ -::method H +::method h /* ------------------------------------------------------------------------- */ arg pc @@ -1089,12 +1342,12 @@ ::method HR /* ------------------------------------------------------------------------- */ -if self~LastY~pos('%') = 0 /* Y was absolute */ -then return self~Top + self~Height - self~margin - self~LastY -else return self~h(100 - self~LastY~changestr('%','')||'%') /* Y was % */ +if self~lastY~pos('%') = 0 /* Y was absolute */ +then return self~top + self~height - self~margin - self~lastY +else return self~h(100 - self~lastY~changestr('%','')||'%') /* Y was % */ /* ------------------------------------------------------------------------- */ -::method W +::method w /* ------------------------------------------------------------------------- */ arg pc @@ -1107,12 +1360,12 @@ else return w /* ------------------------------------------------------------------------- */ -::method WR +::method wr /* ------------------------------------------------------------------------- */ -if self~LastX~pos('%') = 0 /* X was absolute */ -then return self~Left + self~Width - self~margin - self~LastX -else return self~w(100 - self~LastX~changestr('%','')||'%') /* X was % */ +if self~lastX~pos('%') = 0 /* X was absolute */ +then return self~left + self~width - self~margin - self~lastX +else return self~w(100 - self~lastX~changestr('%','')||'%') /* X was % */ /* ----------------------- compatibility methods --------------------------- */ ::method cx ; return self~w(arg(1)) -- Compatibility version of w @@ -1120,17 +1373,17 @@ ::method sizeX ; return self~width ::method sizeY ; return self~height /* ------------------------------------------------------------------------- */ -::method T attribute -::method L attribute -::method B attribute -::method R attribute -::method Top attribute -::method Left attribute -::method Width attribute -::method Height attribute -::method margin attribute -::method LastX attribute private -::method LastY attribute private +::attribute t +::attribute l +::attribute b +::attribute r +::attribute top +::attribute left +::attribute width +::attribute height +::attribute margin +::attribute lastX private +::attribute lastY private /* ========================================================================= */ ::class 'DlgAreaU' subclass DlgArea public -- DlgAreaUniversal - Whole of Dialog @@ -1168,7 +1421,7 @@ self~originalHeight = dlgObj~sizeY self~lastError = .nil -CreateControlTypes = .set~of('BITMAPBUTTON', 'CHECKBOX', 'COMBOBOXEDIT', 'TAB', - +CreateControlTypes = .set~of('BITMAPBUTTON', 'CHECKBOX', 'COMBOBOX', 'TAB', - 'PUSHBUTTON', 'RADIOBUTTON', 'DATETIMEPICKER', 'LISTVIEW', 'PASSWORDEDIT', - 'PROGRESSBAR', 'SCROLLBAR', 'TRACKBAR', 'BLACKFRAME', 'BLACKRECT', 'LISTBOX', - 'ETCHEDHORIZONTAL', 'ETCHEDVERTICAL', 'GRAYRECT', 'GRAYFRAME', 'GROUPBOX', - Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp 2011-02-02 01:27:04 UTC (rev 6682) @@ -339,6 +339,7 @@ BOOL alt; BOOL control; BOOL and; /* If 'and' is false, filter is 'or' */ + BOOL virt; /* If virtual use GetKeyState to see if control, alt, or shift is down. */ } KEYFILTER, *PKEYFILTER; typedef struct { Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2011-02-02 01:27:04 UTC (rev 6682) @@ -1840,11 +1840,6 @@ return (Edit_ShowBalloonTip(pcdc->hCtrl, &tip) ? TheZeroObj : TheOneObj); } -/* Note that the EM_GETCUEBANNER simply does not work. At least on XP. So - * the code is removed. But, it might be worth trying on Vista. - */ - - /** Edit::setCue() * * Sets the cue, or tip, text for the edit control. This text prompts the user @@ -1897,8 +1892,8 @@ * @return The cue banner text on success, or the empty string on error and if * no cue is set * - * @remarks This simply does not seem to work under XP. However, it may work - * in Vista or Windows 7. TODO need to test this. + * @remarks This simply does not seem to work under XP. However, it does work + * in Vista and Windows 7. */ RexxMethod1(RexxStringObject, e_getCue, CSELF, pCSelf) { Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.cpp 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.cpp 2011-02-02 01:27:04 UTC (rev 6682) @@ -1015,60 +1015,64 @@ SUBCLASSDATA *pSubclassData = NULL; GetWindowSubclass(pcdc->hCtrl, KeyPressSubclassProc, pcdc->id, (DWORD_PTR *)&pSubclassData); - // If pSubclassData is not null, the subclass is still installed, otherwise - // the subclass has already been removed, (or never existed.) - if ( pSubclassData != NULL ) + // If pSubclassData is null, the subclass has already been removed, (or + // never existed.) + if ( pSubclassData == NULL ) { - // If no method name, remove the whole thing. - if ( argumentOmitted(1) ) - { - result = (removeKeyPressSubclass(pSubclassData, pcdc->hDlg, pcdc->id) ? noErr : winAPIErr); - goto done_out; - } + result = nameErr; + goto done_out; + } - // Have a method name, just remove that method from the mapping. - tmpName = strdupupr(methodName); - if ( tmpName == NULL ) - { - result = memoryErr; - goto done_out; - } + // If no method name, remove the whole thing. + if ( argumentOmitted(1) ) + { + result = (removeKeyPressSubclass(pSubclassData, pcdc->hDlg, pcdc->id) ? noErr : winAPIErr); + goto done_out; + } - KEYPRESSDATA *pKeyPressData = (KEYPRESSDATA *)pSubclassData->pData; + // Have a method name, just remove that method from the mapping. + tmpName = strdupupr(methodName); + if ( tmpName == NULL ) + { + result = memoryErr; + outOfMemoryException(context->threadContext); + goto done_out; + } - uint32_t index = seekKeyPressMethod(pKeyPressData, tmpName); - if ( index == 0 ) + KEYPRESSDATA *pKeyPressData = (KEYPRESSDATA *)pSubclassData->pData; + + uint32_t index = seekKeyPressMethod(pKeyPressData, tmpName); + if ( index == 0 ) + { + result = nameErr; + goto done_out; + } + + // If only 1 method left, remove the subclass entirely. Otherwise, + // remove the subclass, fix up the subclass data block, then reinstall + // the subclass. + BOOL success = FALSE; + if ( pKeyPressData->usedMethods == 1 ) + { + success = removeKeyPressSubclass(pSubclassData, pcdc->hDlg, pcdc->id); + } + else + { + if ( SendMessage(pcdc->hDlg, WM_USER_SUBCLASS_REMOVE, (WPARAM)KeyPressSubclassProc, (LPARAM)pcdc->id) ) { - result = nameErr; - goto done_out; - } + removeKeyPressMethod(pKeyPressData, index); + success = (BOOL)SendMessage(pcdc->hDlg, WM_USER_SUBCLASS, (WPARAM)KeyPressSubclassProc, (LPARAM)pSubclassData); - // If only 1 method left, remove the subclass entirely. Otherwise, - // remove the subclass, fix up the subclass data block, then reinstall - // the subclass. - BOOL success = FALSE; - if ( pKeyPressData->usedMethods == 1 ) - { - success = removeKeyPressSubclass(pSubclassData, pcdc->hDlg, pcdc->id); - } - else - { - if ( SendMessage(pcdc->hDlg, WM_USER_SUBCLASS_REMOVE, (WPARAM)KeyPressSubclassProc, (LPARAM)pcdc->id) ) + // If not success, then the subclass procedure is no longer + // installed, (even though it was originally,) and the memory + // will never be cleaned up, so clean it up now. + if ( ! success ) { - removeKeyPressMethod(pKeyPressData, index); - success = (BOOL)SendMessage(pcdc->hDlg, WM_USER_SUBCLASS, (WPARAM)KeyPressSubclassProc, (LPARAM)pSubclassData); - - // If not success, then the subclass procedure is no longer - // installed, (even though it was originally,) and the memory - // will never be cleaned up, so clean it up now. - if ( ! success ) - { - freeKeyPressData(pSubclassData); - } + freeKeyPressData(pSubclassData); } } - result = (success ? noErr : winAPIErr); } + result = (success ? noErr : winAPIErr); done_out: return -(int32_t)result; Added: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodKeyNames.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodKeyNames.hpp (rev 0) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodKeyNames.hpp 2011-02-02 01:27:04 UTC (rev 6682) @@ -0,0 +1,293 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +"", +"LBUTTON", +"RBUTTON", +"CANCEL", +"MBUTTON", +"XBUTTON1", +"XBUTTON2", +"", +"BACK", +"TAB", +"", +"", +"CLEAR", +"RETURN", +"", +"", +"SHIFT", +"CONTROL", +"MENU", +"PAUSE", +"CAPITAL", +"KANA", +"", +"JUNJA", +"FINAL", +"HANJA", +"", +"ESCAPE", +"CONVERT", +"NONCONVERT", +"ACCEPT", +"MODECHANGE", +"SPACE", +"PRIOR", +"NEXT", +"END", +"HOME", +"LEFT", +"UP", +"RIGHT", +"DOWN", +"SELECT", +"PRINT", +"EXECUTE", +"SNAPSHOT", +"INSERT", +"DELETE", +"HELP", +"0", +"1", +"2", +"3", +"4", +"5", +"6", +"7", +"8", +"9", +"", +"", +"", +"", +"", +"", +"", +"A", +"B", +"C", +"D", +"E", +"F", +"G", +"H", +"I", +"J", +"K", +"L", +"M", +"N", +"O", +"P", +"Q", +"R", +"S", +"T", +"U", +"V", +"W", +"X", +"Y", +"Z", +"LWIN", +"RWIN", +"APPS", +"", +"SLEEP", +"NUMPAD0", +"NUMPAD1", +"NUMPAD2", +"NUMPAD3", +"NUMPAD4", +"NUMPAD5", +"NUMPAD6", +"NUMPAD7", +"NUMPAD8", +"NUMPAD9", +"MULTIPLY", +"ADD", +"SEPARATOR", +"SUBTRACT", +"DECIMAL", +"DIVIDE", +"F1", +"F2", +"F3", +"F4", +"F5", +"F6", +"F7", +"F8", +"F9", +"F10", +"F11", +"F12", +"F13", +"F14", +"F15", +"F16", +"F17", +"F18", +"F19", +"F20", +"F21", +"F22", +"F23", +"F24", +"", +"", +"", +"", +"", +"", +"", +"", +"NUMLOCK", +"SCROLL", +"OEM_NEC_EQUAL", +"OEM_FJ_MASSHOU", +"OEM_FJ_TOUROKU", +"OEM_FJ_LOYA", +"OEM_FJ_ROYA", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"LSHIFT", +"RSHIFT", +"LCONTROL", +"RCONTROL", +"LMENU", +"RMENU", +"BROWSER_BACK", +"BROWSER_FORWARD", +"BROWSER_REFRESH", +"BROWSER_STOP", +"BROWSER_SEARCH", +"BROWSER_FAVORITES", +"BROWSER_HOME", +"VOLUME_MUTE", +"VOLUME_DOWN", +"VOLUME_UP", +"MEDIA_NEXT_TRACK", +"MEDIA_PREV_TRACK", +"MEDIA_STOP", +"MEDIA_PLAY_PAUSE", +"LAUNCH_MAIL", +"LAUNCH_MEDIA_SELECT", +"LAUNCH_APP1", +"LAUNCH_APP2", +"", +"", +"OEM_1", +"OEM_PLUS", +"OEM_COMMA", +"OEM_MINUS", +"OEM_PERIOD", +"OEM_2", +"OEM_3", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"", +"OEM_4", +"OEM_5", +"OEM_6", +"OEM_7", +"OEM_8", +"", +"OEM_AX", +"OEM_102", +"ICO_HELP", +"ICO_00", +"PROCESSKEY", +"ICO_CLEAR", +"PACKET", +"", +"OEM_RESET", +"OEM_JUMP", +"OEM_PA1", +"OEM_PA2", +"OEM_PA3", +"OEM_WSCTRL", +"OEM_CUSEL", +"OEM_ATTN", +"OEM_FINISH", +"OEM_COPY", +"OEM_AUTO", +"OEM_ENLW", +"OEM_BACKTAB", +"ATTN", +"CRSEL", +"EXSEL", +"EREOF", +"PLAY", +"ZOOM", +"NONAME", +"PA1", +"OEM_CLEAR", +"" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-02-02 01:27:04 UTC (rev 6682) @@ -680,6 +680,22 @@ return c->String(s); } +/** + * Checks if a SYSTEMTIME struct's values are all 0. + * + * @param sysTime Pointer to the struct to check. + * + * @return True if all 0 and false other wise. + * + * @remarks We don't actually check all the fields of the struct, year, month, + * day, hour seem sufficient. + */ +inline bool isZeroDate(SYSTEMTIME *sysTime) +{ + return sysTime->wYear == 0 && sysTime->wMonth == 0 && sysTime->wDay == 0 && + sysTime->wHour == 0; +} + inline bool selectionDidChange(LPNMLISTVIEW p) { return ((p->uNewState & LVIS_SELECTED) != (p->uOldState & LVIS_SELECTED)); @@ -1672,7 +1688,14 @@ sysTime2dt(c, &(pSelChange->stSelStart), &dtStart, dtDate); RexxObjectPtr dtEnd; - sysTime2dt(c, &(pSelChange->stSelEnd), &dtEnd, dtDate); + if ( isZeroDate(&(pSelChange->stSelEnd)) ) + { + dtEnd = dtStart; + } + else + { + sysTime2dt(c, &(pSelChange->stSelEnd), &dtEnd, dtDate); + } RexxArrayObject args = c->ArrayOfFour(dtStart, dtEnd, idFrom, hwndFrom); @@ -2803,20 +2826,44 @@ * * @remarks The method name (pMethod) can not be longer than 197 chars. This * is checked for in setKeyPressData() + * + * By default we use GetAsyncKeyState() to check the status of Ctrl, + * Alt, and Shift keys. But, that gets the physical state of the + * keyboard. If other applications insert key events into message + * queue of the Rexx application, when it is looking for, say Ctrl-S + * and the inserted key event is Ctrl-S, we won't find it here, + * because the physical state of the control key will be not pressed. + * + * The GetKeyState() API adjusts the state of the control, alt, shift + * keys as it processes the message queue. So, the Rexx programmer + * can specify that she wants to detect this situation by adding + * 'VIRT' to the key filter. */ void processKeyPress(SUBCLASSDATA *pSubclassData, WPARAM wParam, LPARAM lParam) { KEYPRESSDATA *pKeyData = (KEYPRESSDATA *)pSubclassData->pData; - BOOL passed = TRUE; + BOOL passed = TRUE; + BOOL bShift = FALSE; + BOOL bControl = FALSE; + BOOL bAlt = FALSE; size_t i = pKeyData->key[wParam]; char *pMethod = pKeyData->pMethods[i]; KEYFILTER *pFilter = pKeyData->pFilters[i]; - BOOL bShift = (GetAsyncKeyState(VK_SHIFT) & ISDOWN) ? 1 : 0; - BOOL bControl = (GetAsyncKeyState(VK_CONTROL) & ISDOWN) ? 1 : 0; - BOOL bAlt = (GetAsyncKeyState(VK_MENU) & ISDOWN) ? 1 : 0; + if ( pFilter && pFilter->virt ) + { + bShift = (GetKeyState(VK_SHIFT) & ISDOWN) ? 1 : 0; + bControl = (GetKeyState(VK_CONTROL) & ISDOWN) ? 1 : 0; + bAlt = (GetKeyState(VK_MENU) & ISDOWN) ? 1 : 0; + } + else + { + bShift = (GetAsyncKeyState(VK_SHIFT) & ISDOWN) ? 1 : 0; + bControl = (GetAsyncKeyState(VK_CONTROL) & ISDOWN) ? 1 : 0; + bAlt = (GetAsyncKeyState(VK_MENU) & ISDOWN) ? 1 : 0; + } if ( pFilter ) { @@ -3060,12 +3107,20 @@ if ( StrStrI(filter, "ALT" ) ) tmpFilter->alt = TRUE; } + if ( StrStrI(filter, "VIRT") ) + { + tmpFilter->virt = TRUE; + } + // Some combinations are not filters, so they are ignored. if ( ((! tmpFilter->and) && tmpFilter->shift && tmpFilter->control && tmpFilter->alt) || (tmpFilter->and && ! tmpFilter->shift && ! tmpFilter->control && ! tmpFilter->alt) ) { - LocalFree(tmpFilter); - return badFilterErr; + if ( ! tmpFilter->virt ) + { + LocalFree(tmpFilter); + return badFilterErr; + } } // Okay, we are good. Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-02-02 01:27:04 UTC (rev 6682) @@ -134,6 +134,8 @@ REXX_METHOD_PROTOTYPE(dlgutil_version_cls); REXX_METHOD_PROTOTYPE(dlgutil_hiWord_cls); REXX_METHOD_PROTOTYPE(dlgutil_loWord_cls); +REXX_METHOD_PROTOTYPE(dlgutil_shiWord_cls); +REXX_METHOD_PROTOTYPE(dlgutil_sloWord_cls); REXX_METHOD_PROTOTYPE(dlgutil_makeLPARAM_cls); REXX_METHOD_PROTOTYPE(dlgutil_makeWPARAM_cls); REXX_METHOD_PROTOTYPE(dlgutil_and_cls); @@ -735,7 +737,7 @@ // .DayState REXX_METHOD_PROTOTYPE(ds_init); -REXX_METHOD_PROTOTYPE(ds_dayStateValue); +REXX_METHOD_PROTOTYPE(ds_value); // .Rect @@ -758,6 +760,7 @@ REXX_METHOD_PROTOTYPE(point_add); REXX_METHOD_PROTOTYPE(point_subtract); REXX_METHOD_PROTOTYPE(point_incr); +REXX_METHOD_PROTOTYPE(point_decr); // .Size REXX_METHOD_PROTOTYPE(size_init_cls); @@ -767,6 +770,9 @@ REXX_METHOD_PROTOTYPE(size_cy); REXX_METHOD_PROTOTYPE(size_setCY); +// .VK +REXX_METHOD_PROTOTYPE(vk_key2name); + // Menu classes methods REXX_METHOD_PROTOTYPE(menu_menuInit_pvt); REXX_METHOD_PROTOTYPE(menu_connectCommandEvent_cls); @@ -854,6 +860,8 @@ REXX_METHOD(dlgutil_version_cls, dlgutil_version_cls), REXX_METHOD(dlgutil_hiWord_cls, dlgutil_hiWord_cls), REXX_METHOD(dlgutil_loWord_cls, dlgutil_loWord_cls), + REXX_METHOD(dlgutil_sloWord_cls, dlgutil_sloWord_cls), + REXX_METHOD(dlgutil_shiWord_cls, dlgutil_shiWord_cls), REXX_METHOD(dlgutil_makeLPARAM_cls, dlgutil_makeLPARAM_cls), REXX_METHOD(dlgutil_makeWPARAM_cls, dlgutil_makeWPARAM_cls), REXX_METHOD(dlgutil_and_cls, dlgutil_and_cls), @@ -1436,7 +1444,7 @@ REXX_METHOD(dss_makeDayStateBuffer, dss_makeDayStateBuffer), REXX_METHOD(dss_quickDayStateBuffer, dss_quickDayStateBuffer), REXX_METHOD(ds_init, ds_init), - REXX_METHOD(ds_dayStateValue, ds_dayStateValue), + REXX_METHOD(ds_value, ds_value), REXX_METHOD(rect_init, rect_init), REXX_METHOD(rect_left, rect_left), REXX_METHOD(rect_top, rect_top), @@ -1454,12 +1462,14 @@ REXX_METHOD(point_add, point_add), REXX_METHOD(point_subtract, point_subtract), REXX_METHOD(point_incr, point_incr), + REXX_METHOD(point_decr, point_decr), REXX_METHOD(size_init_cls, size_init_cls), REXX_METHOD(size_init, size_init), REXX_METHOD(size_cx, size_cx), REXX_METHOD(size_setCX, size_setCX), REXX_METHOD(size_cy, size_cy), REXX_METHOD(size_setCY, size_setCY), + REXX_METHOD(vk_key2name, vk_key2name), // Menu classes methods REXX_METHOD(menu_menuInit_pvt, menu_menuInit_pvt), Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp 2011-02-02 01:27:04 UTC (rev 6682) @@ -1143,7 +1143,7 @@ * @param y ( 2 required) Y co-ordinate * @param cx ( 3 required) width * @param cy ( 4 required) height - * @param title ( 5 required) Title for the caption bar + * @param title ( 5 optional) Title for the caption bar * @param opts ( 6 optional) Style 0ptions for the dialog * @param dlgClass ( 7 optional) The dialog class. Has never been used. * @param fontName ( 8 optional) Font name for the dialog Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-02-02 01:27:04 UTC (rev 6682) @@ -475,10 +475,14 @@ return context->String(buf); } +RexxMethod1(int16_t, dlgutil_shiWord_cls, uint32_t, dw) { return HIWORD(dw); } +RexxMethod1(int16_t, dlgutil_sloWord_cls, uint32_t, dw) { return LOWORD(dw); } + RexxMethod1(uint16_t, dlgutil_hiWord_cls, uint32_t, dw) { return HIWORD(dw); } RexxMethod1(uint16_t, dlgutil_loWord_cls, uint32_t, dw) { return LOWORD(dw); } + RexxMethod2(intptr_t, dlgutil_makeLPARAM_cls, int16_t, loWord, int16_t, hiWord) { return MAKELPARAM(loWord, hiWord); } -RexxMethod2(intptr_t, dlgutil_makeWPARAM_cls, int16_t, loWord, int16_t, hiWord) { return MAKEWPARAM(loWord, hiWord); } +RexxMethod2(uintptr_t, dlgutil_makeWPARAM_cls, int16_t, loWord, int16_t, hiWord) { return MAKEWPARAM(loWord, hiWord); } RexxMethod2(uint64_t, dlgutil_and_cls, CSTRING, s1, CSTRING, s2) { @@ -1150,6 +1154,27 @@ return NULLOBJECT; } +/** Point::decr + * + * Decrements this point's x and y attributes by the specified amount. See the + * comments above for Point::incr() for details. + */ +RexxMethod3(RexxObjectPtr, point_decr, OPTIONAL_int32_t, x, OPTIONAL_int32_t, y, CSELF, p) +{ + if ( argumentOmitted(1) && argumentOmitted(2) ) + { + ((POINT *)p)->x--; + ((POINT *)p)->y--; + } + else + { + ((POINT *)p)->x -= x; + ((POINT *)p)->y -= y; + } + + return NULLOBJECT; +} + /** * Methods for the ooDialog .Size class. */ @@ -1214,18 +1239,50 @@ RexxMethod2(RexxObjectPtr, rect_setBottom, CSELF, pRect, int32_t, bottom) { ((RECT *)pRect)->bottom = bottom; return NULLOBJECT; } +/** + * Methods for the ooDialog .VK class. + */ +#define VK_CLASS "VK" -typedef struct _dayState +/** VK::key2name() + * + * Translates a virtual key code into a string version of its symbolic name. + * I.e., 32 becomes "VK_SPACE". + * + * @param key The virtual key code. Must be between 0 and 255. + * + * @return The virtual key name. + * + * @notes Not all the numbers between 0 and 255 map to a virtual key. The + * empty string is returned for those numbers. + * + * @remarks The initializers for names, and nothing else, are kept in + * oodKeyNames.hpp. + * + */ +RexxMethod1(CSTRING, vk_key2name, uint8_t, key) { - uint32_t val; -} DAYSTATE, *PDAYSTATE; + static char *names[256] = + { +#include "oodKeyNames.hpp" + }; + return names[key]; +} + + /** * Methods for the ooDialog .DayState class. */ -#define DAYSTATE_CLASE "DayState" +#define DAYSTATE_CLASS "DayState" +typedef struct _dayState +{ + uint32_t val; +} DAYSTATE, *PDAYSTATE; + + RexxMethod1(RexxObjectPtr, ds_init, ARGLIST, args) { RexxBufferObject obj = context->NewBuffer(sizeof(DAYSTATE)); @@ -1254,7 +1311,7 @@ return NULLOBJECT; } -RexxMethod1(uint32_t, ds_dayStateValue, CSELF, ds) { return ((PDAYSTATE)ds)->val; } +RexxMethod1(uint32_t, ds_value, CSELF, ds) { return ((PDAYSTATE)ds)->val; } /** @@ -1265,55 +1322,54 @@ RexxObjectPtr makeDayStateBuffer(RexxMethodContext *c, RexxArrayObject list, size_t count, LPMONTHDAYSTATE *ppmds) { - RexxBufferObject _mds = c->NewBuffer(count * sizeof(MONTHDAYSTATE)); - if ( _mds == NULLOBJECT ) + RexxBufferObject mdsBuf = c->NewBuffer(count * sizeof(MONTHDAYSTATE)); + if ( mdsBuf != NULLOBJECT ) { - return TheFalseObj; - } + MONTHDAYSTATE *pmds = (MONTHDAYSTATE *)c->BufferData(mdsBuf); + RexxObjectPtr rxMDSVal; + PDAYSTATE pDayState; - MONTHDAYSTATE *pmds = (MONTHDAYSTATE *)c->BufferData(_mds); - if ( ppmds != NULL ) - { - *ppmds = pmds; - } + for ( size_t i = 1; i <= count; i++, pmds++ ) + { + rxMDSVal = c->ArrayAt(list, i); + if ( rxMDSVal == NULLOBJECT || ! c->IsOfType(rxMDSVal, "DAYSTATE") ) + { + wrongObjInArrayException(c->threadContext, 1, i, "a DayState object"); + mdsBuf = NULLOBJECT; + break; + } - RexxObjectPtr rxMDSVal; - PDAYSTATE pDayState; + pDayState = (PDAYSTATE)c->ObjectToCSelf(rxMDSVal); + *pmds = pDayState->val; + } - for ( size_t i = 1; i <= count; i++, pmds++ ) - { - rxMDSVal = c->ArrayAt(list, i); - if ( rxMDSVal == NULLOBJECT || ! c->IsOfType(rxMDSVal, "DAYSTATE") ) + if ( mdsBuf != NULLOBJECT && ppmds != NULL ) { - wrongObjInArrayException(c->threadContext, 1, i, "a DayState object"); - return TheFalseObj; + *ppmds = pmds; } - - pDayState = (PDAYSTATE)c->ObjectToCSelf(rxMDSVal); - *pmds = pDayState->val; } - return _mds; + return mdsBuf; } RexxObjectPtr quickDayStateBuffer(RexxMethodContext *c, uint32_t ds1, uint32_t ds2, uint32_t ds3, LPMONTHDAYSTATE *ppmds) { - RexxBufferObject _mds = c->NewBuffer(3 * sizeof(MONTHDAYSTATE)); - if ( _mds == NULLOBJECT ) + RexxBufferObject mdsBuf = c->NewBuffer(3 * sizeof(MONTHDAYSTATE)); + if ( mdsBuf != NULLOBJECT ) { - return TheFalseObj; // Need to think about this. - } + MONTHDAYSTATE *pmds = (MONTHDAYSTATE *)c->BufferData(mdsBuf); - MONTHDAYSTATE *pmds = (MONTHDAYSTATE *)c->BufferData(_mds); - *pmds = ds1; - *(pmds + 1) = ds2; - *(pmds + 2) = ds3; + *pmds = ds1; + *(pmds + 1) = ds2; + *(pmds + 2) = ds3; - if ( ppmds != NULL ) - { - *ppmds = pmds; + if ( ppmds != NULL ) + { + *ppmds = pmds; + } } - return _mds; + + return mdsBuf; } RexxMethod1(RexxObjectPtr, dss_makeDayStateBuffer, RexxArrayObject, list) @@ -1322,9 +1378,21 @@ return makeDayStateBuffer(context, list, count, NULL); } -RexxMethod3(RexxObjectPtr, dss_quickDayStateBuffer, uint32_t, ds1, uint32_t, ds2, uint32_t, ds3) +RexxMethod3(RexxObjectPtr, dss_quickDayStateBuffer, RexxObjectPtr, _ds1, RexxObjectPtr, _ds2, RexxObjectPtr, _ds3) { - return quickDayStateBuffer(context, ds1, ds2, ds3, NULL); + RexxObjectPtr result = NULLOBJECT; + + if ( requiredClass(context->threadContext, _ds1, "DAYSTATE", 1) && + requiredClass(context->threadContext, _ds2, "DAYSTATE", 2) && + requiredClass(context->threadContext, _ds3, "DAYSTATE", 3) ) + { + PDAYSTATE ds1 = (PDAYSTATE)context->ObjectToCSelf(_ds1); + PDAYSTATE ds2 = (PDAYSTATE)context->ObjectToCSelf(_ds2); + PDAYSTATE ds3 = (PDAYSTATE)context->ObjectToCSelf(_ds3); + + result = quickDayStateBuffer(context, ds1->val, ds2->val, ds3->val, NULL); + } + return result; } Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex 2011-02-02 01:08:06 UTC (rev 6681) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex 2011-02-02 01:27:04 UTC (rev 6682) @@ -153,9 +153,8 @@ exit -1 /* ========================================================================= */ ::requires "ooDialog.cls" -/* ::requires 'winsystm.cls' -- Uncomment if you inherit VirtualKeyCodes */ /* ========================================================================= */ -::class MyDlgClass subclass userdialog --inherit VirtualKeyCodes +::class MyDlgClass subclass userdialog /* */ /* The class directive */ /* Rename your object from MyDlgClass to something that makes sense to you */ @@ -165,18 +164,7 @@ /* REQUIRES directive then add the keyword PUBLIC to the class directive */ /* */ /* ---------------------- */ -/* Multiple inheritance: */ /* */ -/* If you are going to use either of these methods: */ -/* */ -/* VCODE KEYNAME */ -/* */ -/* Then you must add INHERIT VIRTUALKEYCODES to the class directive above */ -/* Simply remove the "--" comment characters from before 'inherit and un- */ -/* comment the requires winsystm.cls line. */ -/* */ -/* ---------------------- */ -/* */ /* ------------------------------------------------------------------------- */ @@ -193,8 +181,9 @@ width=300 ; height=200 /* Set the Width and height of dialog */ /* Now we create the Windows Object */ - success=self~createCenter(width,height,'This text appears in the Dialog Title',,,, - 'MS Sans Serif',8) + success=self~createCenter(width,height, - + 'This text appears in the Dialog Title',,, - + 'MS Sans Serif',8) /* The above line creates a dialog in the centre of the screen, if you */ /* Would rather specify values for x & y use the line below instead */ /* success=self~create(x,y,width,height,Title) */ Copied: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/PaidHolidays.rex (from rev 6600, sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/PaidHolidays.rex) =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/PaidHolidays.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/PaidHolidays.rex 2011-02-02 01:27:04 UTC (rev 6682) @@ -0,0 +1,190 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * Simple example of using the month calendar control. + * + * Although this example is relatively simple, it shows how to use a number of + * features of the month calendar: + * + * * How to size a month calendar to its optimal size. + * * How to restrict the range of months the calendar displays. + * * How to determine which month(s) are currently displayed in the control. + * * How to customize the calendar and display certain dates in bold. + * * How to connect and respond to the GETDAYSTATE event. + * + * The application is for a hypothetical company, used to show the paid holidays + * for the current year. The dialog displays a month calendar for the current + * year and as the user pages through the months, the paid holidays are high- + * lighted in the calendar by bolding the dates. + * + * Note that to keep this simple, the "current" year is rather hard-coded. + * However, it would not be too hard to enhance the program to calculate the + * paid holidays dynamically. + * + * To fully understand this program, please read the ooDialog doc. + */ + + dlg = .HolidayCalendarDlg~new("paidHolidays.rc", IDD_HOLIDAY_DLG, , "paidHolidays.h") + + if dlg~initCode == 0 then do + dlg~execute("SHOWTOP", IDI_DLG_OOREXX) + end + else do + say + say "Error creating dialog, aborting." + return 99 + end + +return 0 + +::requires "ooDialog.cls" + +::class 'HolidayCalendarDlg' subclass RcDialog + +::method initDialog + expose calendar + + -- Connect the GETDAYSTATE event. + self~connectMonthCalendarEvent(IDC_MC_HOLIDAYS, "GETDAYSTATE", onGetDayState) + + calendar = self~newMonthCalendar(IDC_MC_HOLIDAYS) + + -- Size the calendar to its optimal size + self~sizeCalendar(calendar) + + -- Restrict the calendar so that it only displays the year 2011. + start = .DateTime~fromStandardDate("20110101") + end = .DateTime~fromStandardDate("20111231") + + calendar~setRange(.array~of(start, end)) + + -- Determine which months are currently displayed in the calendar. The first + -- and last months showing are returned in the passed in array as .DateTime + -- objects. The return from getMonthRange() is the number of months + -- displayed. The 'P' argument means to include Partially shown months. + monthsS... [truncated message content] |
From: <mie...@us...> - 2011-02-24 04:18:22
|
Revision: 6801 http://oorexx.svn.sourceforge.net/oorexx/?rev=6801&view=rev Author: miesfeld Date: 2011-02-24 04:18:14 +0000 (Thu, 24 Feb 2011) Log Message: ----------- ooDialog - sync sandbox 4.2.0 ooDialog with trunk Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodRoutines.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodViewControls.cpp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodlist.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/ticketWizard.rex Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-02-24 04:18:14 UTC (rev 6801) @@ -1093,22 +1093,30 @@ ::method stringWidthPx unguarded external "LIBRARY oodialog lv_stringWidthPx" ::method getColumnCount unguarded external "LIBRARY oodialog lv_getColumnCount" ::method getColumnOrder unguarded external "LIBRARY oodialog lv_getColumnOrder" -::method getColumnInfo unguarded external "LIBRARY oodialog lv_getColumnInfo" ::method insertColumnPx unguarded external "LIBRARY oodialog lv_insertColumnPx" ::method modifyColumnPx unguarded external "LIBRARY oodialog lv_modifyColumnPx" -::method setColumnOrderc external "LIBRARY oodialog lv_setColumnOrder" +::method setColumnOrder external "LIBRARY oodialog lv_setColumnOrder" ::method setColumnWidthPx unguarded external "LIBRARY oodialog lv_setColumnWidthPx" ::method stringWidth unguarded -- Dialog units, not accurate. use strict arg text return self~stringWidthPx(text) / self~factorX +::method getColumnInfo unguarded external "LIBRARY oodialog lv_getColumnInfo" ::method columnInfo unguarded -- Dialog units, not accurate. use strict arg index - InternalLVColInfo. = self~getColumnInfo(index) - if InternalLVColInfo.!Width~Datatype('N') = 1 then InternalLVColInfo.!Width = InternalLVColInfo.!Width / self~factorX - return InternalLVColInfo. + d = .Directory~new + if self~getColumnInfo(index, d) then do + colInfo.!TEXT = d~text + colInfo.!WIDTH = d~width / self~factorX + colInfo.!COLUMN = d~subItem + colInfo.!ALIGN = d~alignment + return colInfo + end + colInfo.!WIDTH = 0 + return colInfo. + ::method columnWidth unguarded -- Dialog units, not accurate. use strict arg colNum return self~columnWidthPx(colNum) / self~factorX @@ -1148,7 +1156,15 @@ -- Intent is to return directory item with normal names and in itemInfo convert to old stem return ::method getItemInfo unguarded external "LIBRARY oodialog lv_getItemInfo" ::method itemInfo - forward message "getItemInfo" + use strict arg index, subItem = 0 + d = .Directory~new + if getItemInfo(index, d, subItem) then do + itemInfo.!TEXT = d~text + itemInfo.!IMAGE = d~image + itemInfo.!STATE = d~state + return itemInfo. + end + return -1 ::method checkAll unguarded return self~check(-1) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp 2011-02-24 04:18:14 UTC (rev 6801) @@ -847,7 +847,7 @@ size_t sizeArray; size_t argsUsed; POINT point; - if ( ! getPointFromArglist(context, args, &point, 1, 3, &sizeArray, &argsUsed) ) + if ( ! getPointFromArglist(context, args, &point, 1, 2, &sizeArray, &argsUsed) ) { return NULLOBJECT; } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp 2011-02-24 04:18:14 UTC (rev 6801) @@ -2065,7 +2065,7 @@ pcpbd->BT_size++; return TheZeroObj; } - else if ( addCommandMessage(pcpbd->enCSelf, id, 0x0000FFFF, 0, 0, msgToRaise, TAG_NOTHING) ) + else if ( addCommandMessage(pcpbd->enCSelf, context, id, 0x0000FFFF, 0, 0, msgToRaise, TAG_NOTHING) ) { pcpbd->BT_size++; return TheZeroObj; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-02-24 04:18:14 UTC (rev 6801) @@ -127,7 +127,7 @@ static UINT getTrackFlags(const char *); static uint32_t deleteSeparatorByID(HMENU, uint32_t); static uint32_t menuHelpID(HMENU hMenu, DWORD helpID, BOOL recurse, uint32_t *id); -static uint32_t menuConnectItems(HMENU hMenu, pCEventNotification pcen, CSTRING msg, bool isSysMenu); +static uint32_t menuConnectItems(HMENU hMenu, pCEventNotification pcen, RexxMethodContext *, CSTRING msg, bool isSysMenu); /** @@ -143,6 +143,8 @@ * @param pcen EventNotification CSelf for the dialog we are adding the method * connection to. * + * @param c Rexx method context we are operating in. + * * @param id Menu ID to connect. * * @param msg Method name we are connecting to. @@ -154,13 +156,13 @@ * high word of WPARAM is the notification code for dialog controls, it * is 0 for menu command items. */ -inline uint32_t _connectItem(pCEventNotification pcen, uint32_t id, CSTRING msg) +inline uint32_t _connectItem(pCEventNotification pcen, RexxMethodContext *c, uint32_t id, CSTRING msg) { if ( id < 3 || id == 9 ) { return 0; } - return addCommandMessage(pcen, id, 0xFFFFFFFF, 0, 0, msg, TAG_NOTHING) ? 0 : ERROR_NOT_ENOUGH_MEMORY; + return addCommandMessage(pcen, c, id, 0xFFFFFFFF, 0, 0, msg, TAG_NOTHING) ? 0 : ERROR_NOT_ENOUGH_MEMORY; } /* Same as above but connects a System Menu item */ @@ -290,6 +292,12 @@ goto done_out; } + if ( method != NULL && *method == '\0' ) + { + oodSetSysErrCode(c->threadContext, ERROR_INVALID_PARAMETER); + goto done_out; + } + WORD resInfo = 0; DWORD dwState = 0; DWORD dwType = 0; @@ -714,6 +722,10 @@ * programmer requested it. 2.) Autoconnection is on and the menu is * attached to a dialog. * + * If the programmer has both turned on Autoconnection and requests the + * item be connected, then the outcome is undefined. The programmer + * shouldn't do that. + * * @assumes id is a resource ID and not a by position ID. This menu is a menu * bar. */ @@ -731,10 +743,6 @@ success = FALSE; uint32_t rc = 0; - // TODO why? if we do doAutoConnection, why do we also do connect ?? I - // think it may have been for backwards compatiblity, but it doesn't make - // sense. - pCPlainBaseDialog pcpbd = NULL; if ( dlg != TheNilObj ) { @@ -746,14 +754,26 @@ if ( connectionMethod == NULL ) { _methodName = strdup_2methodName(text); - if ( _methodName = NULL ) + if ( _methodName == NULL ) { oodSetSysErrCode(c->threadContext, ERROR_NOT_ENOUGH_MEMORY); goto done_out; } + + // Method name can not be the empty string. + if ( *_methodName == '\0' ) + { + oodSetSysErrCode(c->threadContext, ERROR_INVALID_PARAMETER); + goto done_out; + } } + else if ( *connectionMethod == '\0' ) + { + oodSetSysErrCode(c->threadContext, ERROR_INVALID_PARAMETER); + goto done_out; + } - rc = _connectItem(pcpbd->enCSelf, id, connectionMethod == NULL ? _methodName : connectionMethod); + rc = _connectItem(pcpbd->enCSelf, c, id, connectionMethod == NULL ? _methodName : connectionMethod); if ( rc != 0 ) { oodSetSysErrCode(c->threadContext, rc); @@ -774,15 +794,27 @@ oodSetSysErrCode(c->threadContext, ERROR_NOT_ENOUGH_MEMORY); goto done_out; } + + // Method name can not be the empty string. + if ( *_methodName == '\0' ) + { + oodSetSysErrCode(c->threadContext, ERROR_INVALID_PARAMETER); + goto done_out; + } } methodName = _methodName; } + else if ( *methodName == '\0' ) + { + oodSetSysErrCode(c->threadContext, ERROR_INVALID_PARAMETER); + goto done_out; + } // If we have an owner dialog, connect the menu item now, otherwise // add it to the connection queue. if ( pcpbd != NULL ) { - rc = _connectItem(pcpbd->enCSelf, id, _methodName); + rc = _connectItem(pcpbd->enCSelf, c, id, methodName); if ( rc != 0 ) { oodSetSysErrCode(c->threadContext, rc); @@ -791,7 +823,7 @@ } else { - if ( ! addToConnectionQ(id, _methodName) ) + if ( ! addToConnectionQ(id, methodName) ) { // Couldn't allocate memory goto done_out; @@ -1250,6 +1282,12 @@ goto done_out; } + if ( *methodName == '\0' ) + { + oodSetSysErrCode(c->threadContext, ERROR_INVALID_PARAMETER); + goto done_out; + } + uint32_t rc; if ( isSystemMenu() ) { @@ -1257,7 +1295,7 @@ } else { - rc = _connectItem(pcen, id, methodName); + rc = _connectItem(pcen, c, id, methodName); } if ( rc == 0 ) { @@ -1285,7 +1323,7 @@ // We can just pass methodName along. If it was omitted, it is NULL, and // menuConnectItems() handles that correctly. - uint32_t rc = menuConnectItems(hMenu, pcen, methodName, isSystemMenu()); + uint32_t rc = menuConnectItems(hMenu, pcen, c, methodName, isSystemMenu()); if ( rc == 0 ) { success = TRUE; @@ -1318,6 +1356,12 @@ goto done_out; } + if ( *method == '\0' ) + { + oodSetSysErrCode(c->threadContext, ERROR_INVALID_PARAMETER); + goto done_out; + } + size_t count; ids = getAllIDs(rxItemIds, &count, byPosition); if ( ids == NULL ) @@ -1356,6 +1400,15 @@ oodSetSysErrCode(c->threadContext, ERROR_NOT_ENOUGH_MEMORY); goto done_out; } + + // If the programmer used a menu name like "..." we now have the + // empty string. This is an error, but it might be hard for the + // programmer to figure what the problem is. + if ( *name == '\0' ) + { + oodSetSysErrCode(c->threadContext, ERROR_INVALID_PARAMETER); + goto done_out; + } } if ( isSystemMenu() ) @@ -1364,7 +1417,7 @@ } else { - rc = _connectItem(pcen, id, method == NULL ? name : method); + rc = _connectItem(pcen, c, id, method == NULL ? name : method); } if ( rc != 0 ) @@ -1540,7 +1593,7 @@ m = connectionQ[i]; // We could run out of message table entries. - rc = _connectItem(pcen, m->id, m->methodName); + rc = _connectItem(pcen, c, m->id, m->methodName); if ( rc != 0 ) { oodSetSysErrCode(c->threadContext, rc); @@ -1565,7 +1618,7 @@ { if ( autoConnect ) { - uint32_t rc = menuConnectItems(hMenu, pcen, connectionMethod, isSystemMenu()); + uint32_t rc = menuConnectItems(hMenu, pcen, c, connectionMethod, isSystemMenu()); if ( rc != 0 ) { oodSetSysErrCode(c->threadContext, rc); @@ -2576,7 +2629,7 @@ * * @return 0 on success, the system error code on failure. */ -static uint32_t menuConnectItems(HMENU hMenu, pCEventNotification pcen, CSTRING msg, bool isSysMenu) +static uint32_t menuConnectItems(HMENU hMenu, pCEventNotification pcen, RexxMethodContext *c, CSTRING msg, bool isSysMenu) { uint32_t rc = 0; int count = GetMenuItemCount(hMenu); @@ -2598,7 +2651,7 @@ if ( _isSubMenu(&mii) ) { - rc = menuConnectItems(mii.hSubMenu, pcen, msg, isSysMenu); + rc = menuConnectItems(mii.hSubMenu, pcen, c, msg, isSysMenu); if ( rc != 0 ) { return rc; @@ -2614,7 +2667,6 @@ if ( GetMenuItemInfo(hMenu, i, TRUE, &mii) == 0 ) { return GetLastError(); - } char *pMsg = (char *)msg; @@ -2628,13 +2680,19 @@ } } + /* Can not use the empty string for a method name. */ + if ( *pMsg == '\0' ) + { + return ERROR_INVALID_FUNCTION; + } + if ( isSysMenu ) { rc = _connectSysItem(pcen, mii.wID, pMsg); } else { - rc = _connectItem(pcen, mii.wID, pMsg); + rc = _connectItem(pcen, c, mii.wID, pMsg); } if ( pMsg != msg ) @@ -2721,6 +2779,9 @@ * The system error code is set this way in addition to what the OS might * set: * + * ERROR_INVALID_FUNCTION(1) -> The method name argument can not be the + * empty string. + * * ERROR_WINDOW_NOT_DIALOG (1420) -> The dialog argument is not a * .PlainBaseDialog, (or subclass of course.) * @@ -2744,6 +2805,12 @@ goto done_out; } + if ( *methodName == '\0' ) + { + oodSetSysErrCode(context->threadContext, ERROR_INVALID_FUNCTION); + goto done_out; + } + uint32_t rc; if ( isSystemMenu ) { @@ -2751,7 +2818,7 @@ } else { - rc = _connectItem(pcen, id, methodName); + rc = _connectItem(pcen, context, id, methodName); } (rc == 0) ? success = TRUE : oodSetSysErrCode(context->threadContext, rc); @@ -3545,12 +3612,19 @@ * argument is omitted and connect is true then the method * name is automatically constructed from the text for the * menu item. If connect is false or omitted, this argument - * is ignored. + * is ignored. If connect is true and this argument is used + * it can not be the empty string. * * @return True on success, false on error. * * @note Sets .SystemErrorCode on error. * + * The system error code is set this way in addition to what the OS might + * set: + * + * ERROR_INVALID_PARAMETER (87) -> When used, the methodName argument can + * not be the empty string. + * * @note State keywords: DEFAULT NOTDEFAULT DISABLED GRAYED ENABLED UNCHECKED * CHECKED HILITE UNHILITE. * @@ -3640,7 +3714,6 @@ } success = TRUE; - // TODO what if connecting the item fails? Should we return false??? cMenu->maybeRedraw(false); @@ -4544,7 +4617,8 @@ * * @param id The resource ID of the menu item. * - * @param methodName The method to connect the item select event to. + * @param methodName The method to connect the item select event to. This can + * not be the empty string. * * @param dlg [optional] The dlg to connect the menu item select event * to. If omitted, then the menu's owning dialog is used. If @@ -4563,6 +4637,9 @@ * ERROR_INVALID_FUNCTION (1) -> The dialog argument was omitted and the * menu does not have an assigned dialog. * + * ERROR_INVALID_PARAMETER (87) -> The methodName argument can not be the + * empty string. + * * ERROR_WINDOW_NOT_DIALOG (1420) -> The dialog argument was not * ommitted, but the object is not a .PlainBaseDialog, (or subclass of * course.) @@ -4624,11 +4701,13 @@ * byPosition. However, they must be all the same type, all * resource IDs or all by position IDs. * - * @param method [optional] Connect all menu command items to the method + * @param msg [optional] Connect all menu command items to the method * by this name. The default is to connect all menu command * items to a method name composed from the text of the * command item. * + * If not omitted, method can not be the empty string. + * * @param byPosition [optional] If true, rxItemIDs are positional IDs, * otherwise the are resource IDs. The default is false, * resource IDs. @@ -4654,7 +4733,8 @@ * ERROR_NOT_ENOUGH_MEMORY (8) -> The dialog message table is full. * * ERROR_INVALID_PARAMETER (87) -> One or more of the specified item IDs - * is not a menu command item. + * is not a menu command item. Or the msg argument was used, but it is + * the empty string. * * The method quits when it encounters the first error, therefore menu * items processed before the error will be connected and menu items that @@ -4848,7 +4928,8 @@ * the itme is the last item at the current level in the menu. * * @param method [optional] A method name to connect the item to. The default - * is to not connect the menu command item. + * is to not connect the menu command item. If this argument is + * used it can not be the empty string. * * @return True on success, false on error. * @@ -4860,6 +4941,9 @@ * ERROR_INVALID_FUNCTION (1) -> The .UserMenu has already been * completed. * + * ERROR_INVALID_PARAMETER (87) -> Argument method can not be the empty + * string. + * * @note State keywords: DEFAULT DISABLED GRAYED HILITE CHECKED. The keywords: * ENABLED UNHILITE NOTDEFAULT UNCHECKED, although valid keywords are * simply ignored. By default the state will be ENABLED UNHILITE Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-02-24 04:18:14 UTC (rev 6801) @@ -2126,6 +2126,7 @@ * Adds an event connection for a command (WM_COMMAND) message to the table. * * @param pcen + * @param c * @param wParam * @param wpFilter * @param lParam @@ -2148,9 +2149,15 @@ * Caller must ensure that 'prog' is not an empty string and that * winMsg, wParam, lParam are not all 0. TODO need to recheck this. */ -bool addCommandMessage(pCEventNotification pcen, WPARAM wParam, ULONG_PTR wpFilter, LPARAM lParam, ULONG_PTR lpFilter, - CSTRING method, uint32_t tag) +bool addCommandMessage(pCEventNotification pcen, RexxMethodContext *c, WPARAM wParam, ULONG_PTR wpFilter, + LPARAM lParam, ULONG_PTR lpFilter, CSTRING method, uint32_t tag) { + if ( pcen == NULL || pcen->commandMsgs == NULL ) + { + baseClassIntializationException(c); + return false; + } + size_t index = pcen->cmSize; if ( index < MAX_COMMAND_MSGS ) { @@ -2328,13 +2335,18 @@ } pcen->cmSize = 0; - // We don't check the return of addCommandMessage() because the message - // table can not be full at this point, we are just starting out. A memory - // allocation failure, which is highly unlikely, will just be ignored. If - // this ooRexx process is out of memory, that will quickly show up. - addCommandMessage(pcen, IDOK, UINTPTR_MAX, 0, 0, "OK", TAG_NOTHING); - addCommandMessage(pcen, IDCANCEL, UINTPTR_MAX, 0, 0, "Cancel", TAG_NOTHING); - addCommandMessage(pcen, IDHELP, UINTPTR_MAX, 0, 0, "Help", TAG_NOTHING); + if ( ! addCommandMessage(pcen, c, IDOK, UINTPTR_MAX, 0, 0, "OK", TAG_NOTHING) ) + { + return false; + } + if ( ! addCommandMessage(pcen, c, IDCANCEL, UINTPTR_MAX, 0, 0, "Cancel", TAG_NOTHING) ) + { + return false; + } + if ( ! addCommandMessage(pcen, c, IDHELP, UINTPTR_MAX, 0, 0, "Help", TAG_NOTHING) ) + { + return false; + } return true; } @@ -3447,7 +3459,7 @@ context->RaiseException1(Rexx_Error_Invalid_argument_null, TheTwoObj); return 1; } - return (addCommandMessage(pcen, id, 0x0000FFFF, 0, 0, methodName, 0) ? 0 : 1); + return (addCommandMessage(pcen, context, id, 0x0000FFFF, 0, 0, methodName, 0) ? 0 : 1); } @@ -3934,7 +3946,7 @@ bool success; if ( (winMessage & wmFilter) == WM_COMMAND ) { - success = addCommandMessage(pcen, wParam, wpFilter, lParam, lpFilter, methodName, tag); + success = addCommandMessage(pcen, context, wParam, wpFilter, lParam, lpFilter, methodName, tag); } else if ( (winMessage & wmFilter) == WM_NOTIFY ) { Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.hpp 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.hpp 2011-02-24 04:18:14 UTC (rev 6801) @@ -60,7 +60,7 @@ extern MsgReplyType searchMessageTables(ULONG message, WPARAM param, LPARAM lparam, pCPlainBaseDialog); extern bool initCommandMessagesTable(RexxMethodContext *c, pCEventNotification pcen); extern bool initEventNotification(RexxMethodContext *, pCPlainBaseDialog, RexxObjectPtr, pCEventNotification *); -extern bool addCommandMessage(pCEventNotification, WPARAM, ULONG_PTR, LPARAM, ULONG_PTR, CSTRING, uint32_t); +extern bool addCommandMessage(pCEventNotification, RexxMethodContext *, WPARAM, ULONG_PTR, LPARAM, ULONG_PTR, CSTRING, uint32_t); extern bool addNotifyMessage(pCEventNotification, WPARAM, ULONG_PTR, LPARAM, ULONG_PTR, CSTRING, uint32_t); extern bool addMiscMessage(pCEventNotification, uint32_t, uint32_t, WPARAM, ULONG_PTR, LPARAM, ULONG_PTR, CSTRING, uint32_t); Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodRoutines.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodRoutines.cpp 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodRoutines.cpp 2011-02-24 04:18:14 UTC (rev 6801) @@ -134,7 +134,7 @@ { invalidTypeException(c, pos, type); } - return (uint32_t)getKeywordValue(winConstantsMap, symbol); + return (uint32_t)id; } @@ -161,9 +161,23 @@ return styles; } +/** MessageDialog() + * + * + * @param text + * @param hwnd Handle of owner window. If the user specifies 0 we do not use + * an owner window. If the user omits hwnd, then we try the to + * find and use the topmost dialog. + * + * + * @note Sets the .SystemErrorCode. + * + */ RexxRoutine6(int, messageDialog_rtn, CSTRING, text, OPTIONAL_CSTRING, hwnd, OPTIONAL_CSTRING, _title, OPTIONAL_CSTRING, button, OPTIONAL_CSTRING, icon, OPTIONAL_CSTRING, miscStyles) { + oodResetSysErrCode(context->threadContext); + int result = -1; char *uprButton = NULL; @@ -173,7 +187,7 @@ HWND hwndOwner = (HWND)string2pointer(hwnd); if ( hwndOwner == NULL ) { - if ( TopDlg != NULL && TopDlg->onTheTop ) + if ( argumentOmitted(2) && TopDlg != NULL && TopDlg->onTheTop ) { hwndOwner = TopDlg->hDlg; } @@ -242,6 +256,10 @@ } result = MessageBox(hwndOwner, text, title, flags); + if ( result == 0 ) + { + oodSetSysErrCode(context->threadContext); + } done_out: safeFree(uprButton); Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp 2011-02-24 04:18:14 UTC (rev 6801) @@ -1667,7 +1667,7 @@ if ( methName != NULL && strlen(methName) != 0 ) { - result = addCommandMessage(pcdd->pcpbd->enCSelf, id, UINTPTR_MAX, 0, 0, methName, 0) ? 0 : 1; + result = addCommandMessage(pcdd->pcpbd->enCSelf, context, id, UINTPTR_MAX, 0, 0, methName, 0) ? 0 : 1; } safeFree((void *)methName); @@ -1777,7 +1777,7 @@ strcpy(finalName, "ID"); strcat(finalName, methName); - result = addCommandMessage(pcpbd->enCSelf, id, UINTPTR_MAX, 0, 0, finalName, 0) ? 0 : 1; + result = addCommandMessage(pcpbd->enCSelf, context, id, UINTPTR_MAX, 0, 0, finalName, 0) ? 0 : 1; free((void *)methName); free((void *)finalName); } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodViewControls.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodViewControls.cpp 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodViewControls.cpp 2011-02-24 04:18:14 UTC (rev 6801) @@ -2359,11 +2359,12 @@ { width = LVSCW_AUTOSIZE_USEHEADER; } - else if ( ! context->Int32(_width, &width) ) + else if ( ! context->Int32(_width, &width) || width < 1 ) { - wrongArgValueException(context->threadContext, argPos, "AUTO, AUTOHEADER, or a numeric value", _width); + wrongArgValueException(context->threadContext, argPos, "AUTO, AUTOHEADER, or a positive whole number", _width); } } + return width; } @@ -3125,8 +3126,15 @@ return changeStyle(context, (pCDialogControl)pCSelf, removeStyle, additionalStyle, true); } -RexxMethod3(RexxObjectPtr, lv_getItemInfo, uint32_t, index, OPTIONAL_uint32_t, subItem, CSELF, pCSelf) +RexxMethod4(RexxObjectPtr, lv_getItemInfo, uint32_t, index, RexxObjectPtr, _d, OPTIONAL_uint32_t, subItem, CSELF, pCSelf) { + if ( ! context->IsDirectory(_d) ) + { + wrongClassException(context->threadContext, 2, "Directory"); + return TheFalseObj; + } + RexxDirectoryObject d = (RexxDirectoryObject)_d; + HWND hList = getDChCtrl(pCSelf); LVITEM lvi; @@ -3141,14 +3149,12 @@ if ( ! ListView_GetItem(hList, &lvi) ) { - return TheNegativeOneObj; + return TheFalseObj; } - RexxStemObject stem = context->NewStem("InternalLVItemInfo"); + context->DirectoryPut(d, context->String(lvi.pszText), "TEXT"); + context->DirectoryPut(d, context->Int32(lvi.iImage), "IMAGE"); - context->SetStemElement(stem, "!TEXT", context->String(lvi.pszText)); - context->SetStemElement(stem, "!IMAGE", context->Int32(lvi.iImage)); - *buf = '\0'; if ( lvi.state & LVIS_CUT) strcat(buf, "CUT "); if ( lvi.state & LVIS_DROPHILITED) strcat(buf, "DROP "); @@ -3159,9 +3165,9 @@ { *(buf + strlen(buf) - 1) = '\0'; } - context->SetStemElement(stem, "!STATE", context->String(buf)); + context->DirectoryPut(d, context->String(buf), "STATE"); - return stem; + return TheTrueObj; } RexxMethod1(int, lv_getColumnCount, CSELF, pCSelf) @@ -3169,8 +3175,15 @@ return getColumnCount(getDChCtrl(pCSelf)); } -RexxMethod2(RexxObjectPtr, lv_getColumnInfo, uint32_t, index, CSELF, pCSelf) +RexxMethod3(RexxObjectPtr, lv_getColumnInfo, uint32_t, index, RexxObjectPtr, _d, CSELF, pCSelf) { + if ( ! context->IsDirectory(_d) ) + { + wrongClassException(context->threadContext, 1, "Directory"); + return TheFalseObj; + } + RexxDirectoryObject d = (RexxDirectoryObject)_d; + HWND hList = getDChCtrl(pCSelf); LVCOLUMN lvi; @@ -3182,15 +3195,9 @@ if ( ! ListView_GetColumn(hList, index, &lvi) ) { - return TheNegativeOneObj; + return TheFalseObj; } - RexxStemObject stem = context->NewStem("InternalLVColInfo"); - - context->SetStemElement(stem, "!TEXT", context->String(lvi.pszText)); - context->SetStemElement(stem, "!COLUMN", context->Int32(lvi.iSubItem)); - context->SetStemElement(stem, "!WIDTH", context->Int32(lvi.cx)); - char *align = "LEFT"; if ( (LVCFMT_JUSTIFYMASK & lvi.fmt) == LVCFMT_CENTER ) { @@ -3200,9 +3207,13 @@ { align = "RIGHT"; } - context->SetStemElement(stem, "!ALIGN", context->String(align)); - return stem; + context->DirectoryPut(d, context->String(lvi.pszText), "TEXT"); + context->DirectoryPut(d, context->Int32(lvi.iSubItem), "SUBITEM"); + context->DirectoryPut(d, context->Int32(lvi.cx), "WIDTH"); + context->DirectoryPut(d, context->String(align), "FMT"); + + return TheTrueObj; } RexxMethod3(RexxObjectPtr, lv_setColumnWidthPx, uint32_t, index, OPTIONAL_RexxObjectPtr, _width, CSELF, pCSelf) @@ -3214,10 +3225,26 @@ { return TheOneObj; } + + if ( width == LVSCW_AUTOSIZE || width == LVSCW_AUTOSIZE_USEHEADER ) + { + if ( !isInReportView(hList) ) + { + userDefinedMsgException(context->threadContext, 2, "can not be AUTO or AUTOHEADER if not in report view"); + return TheOneObj; + } + } + return (ListView_SetColumnWidth(hList, index, width) ? TheZeroObj : TheOneObj); } -RexxMethod5(RexxObjectPtr, lv_modifyColumnPx, uint32_t, index, OPTIONAL_CSTRING, label, OPTIONAL_RexxObjectPtr, _width, +/** + * + * + * @remarks LVSCW_AUTOSIZE_USEHEADER and LVSCW_AUTOSIZE are *only* accepted by + * ListView_SetColumnWidth() + */ +RexxMethod5(RexxObjectPtr, lv_modifyColumnPx, uint32_t, index, OPTIONAL_CSTRING, label, OPTIONAL_uint16_t, _width, OPTIONAL_CSTRING, align, CSELF, pCSelf) { HWND hList = getDChCtrl(pCSelf); @@ -3231,11 +3258,7 @@ } if ( argumentExists(3) ) { - lvi.cx = getColumnWidthArg(context, _width, 3); - if ( lvi.cx == OOD_BAD_WIDTH_EXCEPTION ) - { - goto err_out; - } + lvi.cx = _width; lvi.mask |= LVCF_WIDTH; } if ( argumentExists(4) && *align != '\0' ) @@ -3367,6 +3390,11 @@ * being in pixels, the code actually converted it to dialog units. * This method is provided to really use pixels. * + * @remarks Not sure why there is a restriction on the length of the column + * label, or why the passed text is copied to a buffer. The + * ListView_InsertColumn() API does not impose a limit on the length, + * and just asks for a pointer to a string. Both the length + * restriction and the copy are probably not needed. */ RexxMethod5(int, lv_insertColumnPx, OPTIONAL_uint16_t, column, CSTRING, text, uint16_t, width, OPTIONAL_CSTRING, fmt, CSELF, pCSelf) @@ -4070,6 +4098,32 @@ } +/** TreeView::hitTestInfo() + * + * Determine the location of a point relative to the tree-view control. + * + * @param pHit The position, x and y co-ordinates of the point to test. This + * can be specified in two forms. + * + * Form 1: arg 1 is a .Point object. + * Form 2: arg 1 is the x co-ordinate and arg2 is the y co-ordinate. + * + * @return A directory object containing the result of the test in these + * indexes: + * + * hItem The handle to the tree-view item that occupies the + * point. This will be 0, if there is no item at the + * point. + * + * location A string of blank separated keywords describing the + * location of the point. For instance, the string might + * be "ONITEM ONLABEL" or it could be "ABOVE TORIGHT" if + * the point is not on the client area of the tree-view at + * all. + * + * @note Any x, y coordinates will work. I.e. -6000, -7000 will work. The + * hItem will be 0 and location will be "ABOVE TOLEFT" + */ RexxMethod2(RexxObjectPtr, tv_hitTestInfo, ARGLIST, args, CSELF, pCSelf) { HWND hwnd = getDChCtrl(pCSelf); @@ -4095,7 +4149,7 @@ RexxDirectoryObject result = context->NewDirectory(); - context->DirectoryPut(result, pointer2string(context, TreeView_HitTest(hwnd, &hti)), "HITEM"); + context->DirectoryPut(result, pointer2string(context, hti.hItem), "HITEM"); char buf[128]; *buf = '\0'; Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/GUI_Template.rex 2011-02-24 04:18:14 UTC (rev 6801) @@ -210,6 +210,8 @@ /* ------------------------------------------------------------------------- */ ::method defineDialog +/* expose menuBar */ /* Perhaps save a menu object if you create */ + /* one below. */ /* ------------------------------------------------------------------------- */ /* This is where we lay out the controls (widgets) in our dialog */ /* Refer to the ooDialog manual for the create methods and their parameters */ @@ -239,22 +241,28 @@ /* self~createListView(id,x,y,cx,cy,'options','attribute') */ /* self~createTreeView(id,x,y,cx,cy,'options','attribute') */ /* self~createStaticText(id, x,y,cx,cy,'options','text') */ -/* self~create[Black|White|Gray]Rect,x,y,cx,cy,'options',id) */ +/* self~create[Black|White|Gray]Rect(id,x,y,cx,cy,'options') */ /* etc. etc. ... */ /* other controls should have unique ids over 100 (or -1 for static text) */ /* ------------------------------------------------- */ - /* You can add a menu here using self~addMenuItem & */ - /* self~addMenuSeperator. */ - /* To display it add a call to setMenu in the */ - /* initDialog method */ + /* You could create a menu here, or really anywhere, */ + /* using one of the menu classes such as the */ + /* .UserMenuBar, and the menu methods. */ + /* */ + /* Save the menu and have it attach to the dialog in */ + /* the initDialog() method. It could be saved in an */ + /* exposed variable for instance. */ /* ------------------------------------------------- */ -/* self~AddPopupMenu('name','options') */ -/* self~AddMenuItem('text',id,'options','method') */ -/* self~AddMenuSeperator */ +/* menuBar = .UserMenuBar~new(200, self, ...) */ +/* menuBar~addPopUp(id, 'text', options, ...) */ +/* menuBar~addItem(id, 'someText', options, ...) */ +/* menuBar~addSeparator */ +/* menuBar~complete */ /* ------------------------------------------------------------------------- */ ::method initDialog +/* expose menuBar */ /* If you are adding a menu perhaps. */ /* ------------------------------------------------------------------------- */ /* If you have no need to initialise/populate items delete this method */ @@ -285,10 +293,12 @@ /* end */ /* ------------------------------------------------- */ - /* If you defined a menu in Define Dialog, show it: */ - /* self~SetMenu */ + /* If you created a menu in defineDialog(), attach */ + /* it: */ /* ------------------------------------------------- */ +/* menuBar~attachTo(self) */ + /* ------------------------------------------------------------------------- */ ::method ok /* ------------------------------------------------------------------------- */ @@ -314,8 +324,8 @@ /* By invoking the super class ok() method you */ /* ensure the dialog is closed properly. That is */ /* really the best way to end the dialog. The best */ - /* to not end the dialog at this point is to simply */ - /* return 0. */ + /* way to not end the dialog at this point is to */ + /* simply return 0. */ /* ------------------------------------------------- */ return self~oK:super @@ -337,7 +347,7 @@ /* continue with the normal closing of the dialog, */ /* invoke the super class's cancel method. */ /* */ - /* By invoking the super class cance.() method you */ + /* By invoking the super class cancel() method you */ /* ensure the dialog is closed properly. That is */ /* really the best way to end the dialog. The best */ /* to not end the dialog at this point is to simply */ @@ -348,7 +358,7 @@ /* ------------------------------------------------------------------------- */ ::method validate /* ------------------------------------------------------------------------- */ -/* This is called by the OK:Super Method. Returning .false stops the dialog */ +/* This is called by the ok:super method. Returning .false stops the dialog */ /* from closing. Returning .true allows the dialog to close. If you do not */ /* need this method - delete it */ valid=.true Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodlist.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodlist.rex 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodlist.rex 2011-02-24 04:18:14 UTC (rev 6801) @@ -197,14 +197,24 @@ curList = self~newListView(ID_Rep) curList~setColumnWidthPx(column,curList~columnWidthPx(column)+10) - info. = curlist~getColumnInfo(column) - call InfoDialog "Column Title : " info.!Text"d"x - - "Column Number : " info.!Column"d"x - - "Column Width : " info.!Width"d"x - - "Allignment : " info.!Align"d"x"d"x - - "Note: each time you click on a column" ||"d"x - - "its width is increased" + d = .Directory~new + if curlist~getColumnInfo(column, d) then do + tab = '09'x + msg = "Column Title:"tab d~text || .endOfLine || - + "Subitem index:"tab d~subitem || .endOfLine || - + "Column Width:"tab d~width || .endOfLine || - + "Allignment:"tab d~fmt || .endOfLine~copies(2) || - + "Note: each time you click on a column" || .endOfLine || - + "its width is increased." + j = MessageDialog(msg, self~hwnd, "Column Click Detected") + end + else do + msg = "An error ocurred getting the column information." + j = MessageDialog(msg, self~hwnd, "Windows API Error", "OK", "ERROR") + end + + /* an item was double clicked (activated in Windows terms.) */ ::method OnActivate use arg id Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/ticketWizard.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/ticketWizard.rex 2011-02-23 04:29:08 UTC (rev 6800) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/ticketWizard.rex 2011-02-24 04:18:14 UTC (rev 6801) @@ -530,7 +530,7 @@ ans = MessageDialog(msg, propSheet~dlgHandle, title, buttons, icon, style) - if ans == self~constDir[IDYES] then return 0 + if ans == .PlainBaseDialog~IDYES then return 0 movieCombo~select(movie) self~setRadioButtons(movie) @@ -729,7 +729,7 @@ ans = MessageDialog(msg, propSheet~dlgHandle, title, buttons, icon, style) - if ans == self~constDir[IDYES] then return 0 + if ans == .PlainBaseDialog~IDYES then return 0 movieCombo~select(movie) self~setRadioButtons(movie) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2011-03-21 00:03:24
|
Revision: 6865 http://oorexx.svn.sourceforge.net/oorexx/?rev=6865&view=rev Author: miesfeld Date: 2011-03-21 00:03:15 +0000 (Mon, 21 Mar 2011) Log Message: ----------- ooDialog - sync ooDialog 4.2.0 in sandbox with main, up through revision 6864 Revision Links: -------------- http://oorexx.svn.sourceforge.net/oorexx/?rev=6864&view=rev Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/BaseDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBarControls.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodData.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPropertySheetDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodResources.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoThree.rex Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/BaseDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/BaseDialog.cls 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/BaseDialog.cls 2011-03-21 00:03:15 UTC (rev 6865) @@ -154,6 +154,7 @@ ::method toID class external "LIBRARY oodialog image_toID_cls" ::method getImage class external "LIBRARY oodialog image_getImage_cls" ::method fromFiles class external "LIBRARY oodialog image_fromFiles_cls" +-- ::method getGDIImage class external "LIBRARY oodialog image_getGDIImage_cls" future enhancement ::method fromIDs class external "LIBRARY oodialog image_fromIDs_cls" ::method userIcon class external "LIBRARY oodialog image_userIcon_cls" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls 2011-03-21 00:03:15 UTC (rev 6865) @@ -72,11 +72,9 @@ ::class 'ControlDialog' mixinclass Object public -::attribute ownerDialog get external "LIBRARY oodialog chld_getOwnerDialog" -::attribute ownerDialog set external "LIBRARY oodialog chld_setOwnerDialog" +::attribute initializing get unguarded external "LIBRARY oodialog ctrlDlg_get_initializing" +::attribute initializing set unguarded external "LIBRARY oodialog ctrlDlg_set_initializing" -::attribute initializing - ::class 'ResControlDialog' public subclass ResDialog inherit ControlDialog ::method startDialog private external "LIBRARY oodialog resCtrlDlg_startDialog_pvt" @@ -103,8 +101,6 @@ ::method init use strict arg rcFile, idDlg, initData. = .nil, includeFile = "", options = "", expected = 200, ownerDlg = .nil - self~initializing = .true - newArgs = .array~new(5) if arg(3, 'E') then newArgs[1] = arg(3) if arg(4, 'E') then newArgs[2] = arg(4) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-03-21 00:03:15 UTC (rev 6865) @@ -644,10 +644,26 @@ ::class 'ScrollBar' subclass DialogControl public +::constant LINEUP 0 +::constant LINELEFT 0 +::constant LINEDOWN 1 +::constant LINERIGHT 1 +::constant PAGEUP 2 +::constant PAGELEFT 2 +::constant PAGEDOWN 3 +::constant PAGERIGHT 3 +::constant THUMBPOSITION 4 +::constant THUMBTRACK 5 +::constant TOP 6 +::constant LEFT 6 +::constant BOTTOM 7 +::constant RIGHT 7 +::constant ENDSCROLL 8 + +::method getRange unguarded external "LIBRARY oodialog sb_getRange" ::method setRange unguarded external "LIBRARY oodialog sb_setRange" -::method getRange unguarded external "LIBRARY oodialog sb_getRange" +::method getPos unguarded external "LIBRARY oodialog sb_getPosition" ::method setPos unguarded external "LIBRARY oodialog sb_setPosition" -::method getPosition unguarded external "LIBRARY oodialog sb_getPosition" ::method position unguarded external "LIBRARY oodialog sb_getPosition" ::method range unguarded @@ -657,27 +673,27 @@ ::method determinePosition unguarded use strict arg posdata, single = 1, page = 10 code = .DlgUtil~loWord(posdata) - pos = self~getPosition + pos = self~getPos r = self~getRange if .SystemErrorCode <> 0 then return pos -- getRange failed select /* Line up */ - when code = 0 then pos = max(r~min, pos - single) + when code == self~LINEUP then pos = max(r~min, pos - single) /* Line down */ - when code = 1 then pos = min(r~max, pos + single) + when code == self~LINEDOWN then pos = min(r~max, pos + single) /* page up */ - when code = 2 then pos = max(r~min, pos - page) + when code == self~PAGEUP then pos = max(r~min, pos - page) /* page down */ - when code = 3 then pos = min(r~max, pos + page) + when code =- self~PAGEDOWN then pos = min(r~max, pos + page) /* track position */ - when code = 4 then pos = .DlgUtil~hiWord(posdata) + when code == self~THUMBPOSITION then pos = .DlgUtil~hiWord(posdata) /* tracking */ - when code = 5 then pos = .DlgUtil~loWord(posdata) + when code == self~THUMBTRACK then pos = .DlgUtil~loWord(posdata) /* top */ - when code = 6 then pos = r~min + when code == self~TOP then pos = r~min /* bottom */ - when code = 7 then pos = r~max + when code == self~BOTTOM then pos = r~max otherwise nop; end self~setPos(pos) @@ -1153,12 +1169,11 @@ ::method hasCheckBoxes unguarded external "LIBRARY oodialog lv_hasCheckBoxes" ::method getCheck unguarded external "LIBRARY oodialog lv_getCheck" --- Intent is to return directory item with normal names and in itemInfo convert to old stem return ::method getItemInfo unguarded external "LIBRARY oodialog lv_getItemInfo" ::method itemInfo use strict arg index, subItem = 0 d = .Directory~new - if getItemInfo(index, d, subItem) then do + if self~getItemInfo(index, d, subItem) then do itemInfo.!TEXT = d~text itemInfo.!IMAGE = d~image itemInfo.!STATE = d~state Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-03-21 00:03:15 UTC (rev 6865) @@ -60,6 +60,11 @@ use strict arg msgToRise return self~addUserMsg(msgToRise, 0x00000005, 0xFFFFFFFF, 0, 0, 0, 0) +-- WM_SIZING +::method connectResizing + use strict arg msgToRise + return self~addUserMsg(msgToRise, 0x00000214, 0xFFFFFFFF, 0, 0, 0, 0) + -- WM_MOVE ::method connectMove use strict arg msgToRise @@ -232,87 +237,11 @@ return self~addUserMsg(msgToRise, 0x00000111, "0xFFFFFFFF", lp * x2d("10000") + id, "0xFFFFFFFF", 0, 0, tag) -::method connectScrollBarEvent /* can only be called in initDialog */ - use strict arg id, type, msgToRise = "", categoryHDlg = (.NullHandle) - if \ id~dataType("W") then id = self~resolveSymbolicId(id) - if id = -1 then return -1 - if arg(4,'O') then hnd = self~getControlHandle(id) - else hnd = self~getControlHandle(id, categoryHdlg) - if hnd = 0 then return -1 - if msgToRise == "" then msgToRise = "on" || type - type = type~translate - select - when type = "UP" then wp = 0 - when type = "DOWN" then wp = 1 - when type = "PAGEUP" then wp = 2 - when type = "PAGEDOWN" then wp = 3 - when type = "POSITION" then wp = 4 - when type = "DRAG" then wp = 5 - when type = "TOP" then wp = 6 - when type = "BOTTOM" then wp = 7 - when type = "ENDSCROLL" then wp = 8 - otherwise return -1 - end - ret = self~addUserMsg(msgToRise, 0x00000114, "0xFFFFFFFF", wp, "0x0000FFFF", hnd, "0xFFFFFFFF") /* WM_HSCROLL */ - if ret <> 0 then return ret - return self~addUserMsg(msgToRise, 0x00000115, "0xFFFFFFFF", wp, "0x0000FFFF", hnd, "0xFFFFFFFF") /* WM_VSCROLL */ +::method connectScrollBarEvent external "LIBRARY oodialog en_connectScrollBarEvent" +::method connectEachSBEvent external "LIBRARY oodialog en_connectEachSBEvent" +::method connectAllSBEvents external "LIBRARY oodialog en_connectAllSBEvents" -::method connectEachSBEvent - use arg id, progUp, progDn, progPos, min, max, pos, progPgUp, progPgDn, progTop, progBottom, progTrack, progEndSc - - if \ id~dataType("W") then id = self~resolveSymbolicId(id) - if id = -1 then return -1 - - if arg(5, 'E'), min~datatype('N'), arg(6,'E'), max~datatype('N') then self~setSBRange(id, min, max, 0) - if arg(7, 'E'), pos~datatype('N') then self~setSBPos(id, pos, 0) - - hwnd = self~getControlHandle(id) - WM_HSCROLL = 0x00000114 - WM_VSCROOL = 0x00000115 - wf = "0x0000FFFF" - nf = "0xFFFFFFFF" - /* Install hooks for WM_VSCROLL and WM_HSCROLL */ - self~addUserMsg(progDn, 0x00000114, wf, 0x00000001, wf, hwnd, nf) - self~addUserMsg(progUp, 0x00000114, wf, 0x00000000, wf, hwnd, nf) - self~addUserMsg(progDn, 0x00000115, wf, 0x00000001, wf, hwnd, nf) - self~addUserMsg(progUp, 0x00000115, wf, 0x00000000, wf, hwnd, nf) - if arg(4, 'E'), progPos \== "" then do - self~addUserMsg(progPos, 0x00000114, wf, 0x00000004, wf, hwnd, nf) - self~addUserMsg(progPos, 0x00000115, wf, 0x00000004, wf, hwnd, nf) - end - if arg(8, 'E'), progPgUp \== "" then do - self~addUserMsg(progPgUp, 0x00000114, wf, 0x00000002, wf, hwnd, nf) - self~addUserMsg(progPgUp, 0x00000115, wf, 0x00000002, wf, hwnd, nf) - end - if arg(9, 'E'), progPgDn \== "" then do - self~addUserMsg(progPgDn, 0x00000114, wf, 0x00000003, wf, hwnd, nf) - self~addUserMsg(progPgDn, 0x00000115, wf, 0x00000003, wf, hwnd, nf) - end - if arg(10, 'E'), progTop \== "" then do - self~addUserMsg(progTop, 0x00000114, wf, 0x00000006, wf, hwnd, nf) - self~addUserMsg(progTop, 0x00000115, wf, 0x00000006, wf, hwnd, nf) - end - if arg(11, 'E'), progBottom \== "" then do - self~addUserMsg(progBottom, 0x00000114, wf, 0x00000007, wf, hwnd, nf) - self~addUserMsg(progBottom, 0x00000115, wf, 0x00000007, wf, hwnd, nf) - end - if arg(12, 'E'), progTrack \== "" then do - self~addUserMsg(progTrack, 0x00000114, wf, 0x00000005, wf, hwnd, nf) - self~addUserMsg(progTrack, 0x00000115, wf, 0x00000005, wf, hwnd, nf) - end - if arg(13, 'E'), progEndSc \== "" then do - self~addUserMsg(progEndSc, 0x00000114, wf, 0x00000008, wf, hwnd, nf) - self~addUserMsg(progEndSc, 0x00000115, wf, 0x00000008, wf, hwnd, nf) - end - return 0 - - -::method connectAllSBEvents - use arg id, prog, min, max, pos - return self~connectEachSBEvent(id, prog, prog, prog, min, max, pos, prog, prog, prog, prog) - - ::method connectTreeViewEvent use strict arg id, type, msgToRise = "" if \ id~dataType("W") then id = self~resolveSymbolicId(id) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-03-21 00:03:15 UTC (rev 6865) @@ -374,9 +374,13 @@ expose dlgData. return dlgData. -::attribute parentDlg private +::attribute parentDlg get private external "LIBRARY oodialog pbdlg_getParentDlg_pvt" +::attribute parentDlg set private external "LIBRARY oodialog pbdlg_setParentDlg_pvt" ::attribute childDialogs +::attribute ownerDialog get external "LIBRARY oodialog pbdlg_getOwnerDialog" +::attribute ownerDialog set external "LIBRARY oodialog pbdlg_setOwnerDialog" + ::attribute dlgHandle get unguarded external "LIBRARY oodialog pbdlg_getDlgHandle" ::attribute fontName get external "LIBRARY oodialog pbdlg_getFontNameSize" ::attribute fontName set private external "LIBRARY oodialog pbdlg_setFontName_pvt" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-03-21 00:03:15 UTC (rev 6865) @@ -65,6 +65,10 @@ ::method makeLParam class external "LIBRARY oodialog dlgutil_makeLPARAM_cls" ::method and class external "LIBRARY oodialog dlgutil_and_cls" ::method or class external "LIBRARY oodialog dlgutil_or_cls" +::method shiftLeft class external "LIBRARY oodialog dlgutil_shiftLeft_cls" +::method shiftRight class external "LIBRARY oodialog dlgutil_shiftRight_cls" +::method sShiftLeft class external "LIBRARY oodialog dlgutil_sShiftLeft_cls" +::method sShiftRight class external "LIBRARY oodialog dlgutil_sShiftRight_cls" ::method screenSize class external "LIBRARY oodialog dlgutil_screenSize_cls" ::method screenArea class external "LIBRARY oodialog dlgutil_screenArea_cls" ::method getSystemMetrics class external "LIBRARY oodialog dlgutil_getSystemMetrics_cls" @@ -94,6 +98,7 @@ ::class 'Rect' public +::method init class external "LIBRARY oodialog rect_init_cls" ::method init external "LIBRARY oodialog rect_init" ::attribute left get external "LIBRARY oodialog rect_left" ::attribute left set external "LIBRARY oodialog rect_setLeft" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-03-21 00:03:15 UTC (rev 6865) @@ -57,6 +57,16 @@ #include "oodResourceIDs.hpp" +inline bool isValidOwner(pCPlainBaseDialog pcpbd) +{ + if ( pcpbd->isPropSheetDlg || pcpbd->isPageDlg || pcpbd->isControlDlg ) + { + return false; + } + return true; +} + + /** * Loads and returns the handle to an icon for the specified ID, of the * specified size. @@ -84,7 +94,7 @@ // Load the icon from a file, file name should be in the icon table. size_t i; - for ( i = 0; i < pcpbd->IT_size; i++ ) + for ( i = 0; i < pcpbd->IT_nextIndex; i++ ) { if ( pcpbd->IconTab[i].iconID == id ) { @@ -115,32 +125,35 @@ { size_t i; - for ( i = 0; i < pcen->cmSize; i++ ) + for ( i = 0; i < pcen->cmNextIndex; i++ ) { safeLocalFree(pcen->commandMsgs[i].rexxMethod); } LocalFree(pcen->commandMsgs); pcen->commandMsgs = NULL; pcen->cmSize = 0; + pcen->cmNextIndex = 0; if ( pcen->notifyMsgs != NULL ) { - for ( i = 0; i < pcen->nmSize; i++ ) + for ( i = 0; i < pcen->nmNextIndex; i++ ) { safeLocalFree(pcen->notifyMsgs[i].rexxMethod); } LocalFree(pcen->notifyMsgs); + pcen->nmNextIndex = 0; pcen->nmSize = 0; pcen->notifyMsgs = NULL; } if ( pcen->miscMsgs != NULL ) { - for ( i = 0; i < pcen->mmSize; i++ ) + for ( i = 0; i < pcen->mmNextIndex; i++ ) { safeLocalFree(pcen->miscMsgs[i].rexxMethod); } LocalFree(pcen->miscMsgs); + pcen->mmNextIndex = 0; pcen->mmSize = 0; pcen->miscMsgs = NULL; } @@ -154,11 +167,11 @@ if ( pcpbd != NULL && pcpbd->ColorTab != NULL ) { - while ( i < pcpbd->CT_size && pcpbd->ColorTab[i].itemID != id ) + while ( i < pcpbd->CT_nextIndex && pcpbd->ColorTab[i].itemID != id ) { i++; } - if ( i < pcpbd->CT_size ) + if ( i < pcpbd->CT_nextIndex ) { hBrush = pcpbd->ColorTab[i].ColorBrush; *index = i; @@ -476,24 +489,26 @@ // Delete the data table. safeLocalFree(pcpbd->DataTab); pcpbd->DataTab = NULL; + pcpbd->DT_nextIndex = 0; pcpbd->DT_size = 0; // Delete the color brushes. if (pcpbd->ColorTab) { - for ( i = 0; i < pcpbd->CT_size; i++ ) + for ( i = 0; i < pcpbd->CT_nextIndex; i++ ) { safeDeleteObject(pcpbd->ColorTab[i].ColorBrush); } LocalFree(pcpbd->ColorTab); pcpbd->ColorTab = NULL; + pcpbd->CT_nextIndex = 0; pcpbd->CT_size = 0; } // Delete the bitmaps and bitmap table. if (pcpbd->BmpTab) { - for ( i = 0; i < pcpbd->BT_size; i++ ) + for ( i = 0; i < pcpbd->BT_nextIndex; i++ ) { if ( (pcpbd->BmpTab[i].loaded & 0x1011) == 1 ) { @@ -514,18 +529,20 @@ LocalFree(pcpbd->BmpTab); safeDeleteObject(pcpbd->colorPalette); + pcpbd->BT_nextIndex = 0; pcpbd->BT_size = 0; } // Delete the icon resource table. if (pcpbd->IconTab) { - for ( i = 0; i < pcpbd->IT_size; i++ ) + for ( i = 0; i < pcpbd->IT_nextIndex; i++ ) { safeLocalFree(pcpbd->IconTab[i].fileName); } LocalFree(pcpbd->IconTab); pcpbd->IconTab = NULL; + pcpbd->IT_nextIndex = 0; pcpbd->IT_size = 0; } @@ -2507,6 +2524,11 @@ HWND getPBDControlWindow(RexxMethodContext *c, pCPlainBaseDialog pcpbd, RexxObjectPtr rxID) { + if ( pcpbd == NULL ) + { + return (HWND)baseClassIntializationException(c); + } + HWND hCtrl = NULL; oodResetSysErrCode(c->threadContext); @@ -2822,6 +2844,7 @@ if ( context->IsOfType(self, "CONTROLDIALOG") ) { pcpbd->isControlDlg = true; + pcpbd->isInitializing = true; } else if ( context->IsOfType(self, "CATEGORYDIALOG") ) { @@ -2872,7 +2895,6 @@ context->SetObjectVariable("USESTEM", TheFalseObj); } - context->SetObjectVariable("PARENTDLG", TheNilObj); context->SetObjectVariable("FINISHED", TheFalseObj); context->SetObjectVariable("PROCESSINGLOAD", TheFalseObj); @@ -2970,37 +2992,172 @@ */ RexxMethod1(CSTRING, pbdlg_getLibrary, CSELF, pCSelf) { - return ( ((pCPlainBaseDialog)pCSelf)->library ); + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (CSTRING)baseClassIntializationException(context); + } + return pcpbd->library; } /** PlainBaseDialog::resourceID [attribute get] */ RexxMethod1(RexxObjectPtr, pbdlg_getResourceID, CSELF, pCSelf) { - return ( ((pCPlainBaseDialog)pCSelf)->resourceID ); + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + return pcpbd->resourceID; } /** PlainBaseDialog::dlgHandle [attribute get] / PlainBaseDialog::getSelf() */ RexxMethod1(RexxObjectPtr, pbdlg_getDlgHandle, CSELF, pCSelf) { - return ( ((pCPlainBaseDialog)pCSelf)->wndBase->rexxHwnd ); + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + return pcpbd->wndBase->rexxHwnd; } /** PlainBaseDialog::autoDetect [attribute get] */ RexxMethod1(RexxObjectPtr, pbdlg_getAutoDetect, CSELF, pCSelf) { - return ( ((pCPlainBaseDialog)pCSelf)->autoDetect ? TheTrueObj : TheFalseObj ); + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + return pcpbd->autoDetect ? TheTrueObj : TheFalseObj; } /** PlainBaseDialog::autoDetect [attribute set] */ -RexxMethod2(CSTRING, pbdlg_setAutoDetect, logical_t, on, CSELF, pCSelf) +RexxMethod2(RexxObjectPtr, pbdlg_setAutoDetect, logical_t, on, CSELF, pCSelf) { - ((pCPlainBaseDialog)pCSelf)->autoDetect = on; + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + pcpbd->autoDetect = on; return NULLOBJECT; } +/** PlainBaseDialog::parentDlg [attribute get private] + */ +RexxMethod1(RexxObjectPtr, pbdlg_getParentDlg_pvt, CSELF, pCSelf) +{ + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + return pcpbd->rexxParent == NULLOBJECT ? TheNilObj : pcpbd->rexxParent; +} +/** PlainBaseDialog::parentDlg [attribute set private] + */ +RexxMethod2(RexxObjectPtr, pbdlg_setParentDlg_pvt, RexxObjectPtr, parent, CSELF, pCSelf) +{ + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + + if ( requiredClass(context->threadContext, parent, "PLAINBASEDIALOG", 1) ) + { + pcpbd->rexxParent = parent; + } + return NULLOBJECT; +} + +/** PlainBaseDialog::ownerDialog [attribute get] + * + * Returns the value of the owner dialog attribute, which is .nil if there is + * no owner dialog. + * + * @remarks Read the remarks for the ownerDialog [attribute set] below. + */ +RexxMethod1(RexxObjectPtr, pbdlg_getOwnerDialog, CSELF, pCSelf) +{ + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + return pcpbd->rexxOwner == NULLOBJECT ? TheNilObj : pcpbd->rexxOwner; +} + +/** PlainBaseDialog::ownerDialog [attribute set] + * + * Sets an owner dialog of this dialog. + * + * @note There are restraints on setting an owner dialog. The owner argument + * must be a Rexx dialog object, but can not be a PropertySheetDialog, + * PropertySheetPage, or ControlDialog. Once set, the owner dialog can + * not be changed or removed. The owner dialog can not be set once the + * underlying dialog for this dialog has been created and when the owned + * dialog is executed, the underlying owner dialog must have already + * been created. + * + * Raises error conditions if the constraints are not met. + * + * @remarks The ownerDialog attribute is used for both regular dialogs and + * ControlDialogs. A control dialog must have the owner dialog + * attribute set or it will not execute. A regular dialog does not + * need the owner dialog attribute set, and in almost all cases it + * will not be set. However, once it is set, the regular dialog + * becomes an 'owned' dialog, and from that point on the dialog + * remains an owned dialog. + * + * Although hOwnerDlg gets set here, it very well could still be + * null. When the owned dialog is executed, that is the underlying + * dialog is about to be created, there is a check that the + * underlying owner dialog has already been created. + */ +RexxMethod2(RexxObjectPtr, pbdlg_setOwnerDialog, RexxObjectPtr, owner, CSELF, pCSelf) +{ + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + + if ( pcpbd->isOwnedDlg ) + { + userDefinedMsgException(context, "Once set, the owner dialog attribute can not be changed"); + return NULLOBJECT; + } + + if ( pcpbd->hDlg != NULL ) + { + userDefinedMsgException(context, "The owner dialog attribute can not be set after the underlying dialog is created"); + return NULLOBJECT; + } + + pCPlainBaseDialog ownerPcpbd = requiredDlgCSelf(context, owner, oodPlainBaseDialog, 1); + if ( ownerPcpbd != NULL ) + { + if ( ! isValidOwner(ownerPcpbd) ) + { + userDefinedMsgException(context, "The owner dialog can not be a PropertySheetDialog or a child dialog"); + } + else + { + pcpbd->isOwnedDlg = true; + pcpbd->rexxOwner = owner; + pcpbd->hOwnerDlg = ownerPcpbd->hDlg; + } + } + + return NULLOBJECT; +} + /** PlainBaseDialog::finished [attribute get] */ RexxMethod1(RexxObjectPtr, pbdlg_getFinished, CSELF, pCSelf) @@ -3009,7 +3166,7 @@ } /** PlainBaseDialog::finished [attribute set] */ -RexxMethod2(CSTRING, pbdlg_setFinished, logical_t, val, CSELF, pCSelf) +RexxMethod2(RexxObjectPtr, pbdlg_setFinished, logical_t, val, CSELF, pCSelf) { if ( val ) { @@ -3028,14 +3185,20 @@ */ RexxMethod2(RexxObjectPtr, pbdlg_getFontNameSize, NAME, method, CSELF, pCSelf) { + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + RexxObjectPtr result; if ( *(method + 4) == 'N' ) { - result = context->String(((pCPlainBaseDialog)pCSelf)->fontName); + result = context->String(pcpbd->fontName); } else { - result = context->UnsignedInt32(((pCPlainBaseDialog)pCSelf)->fontSize); + result = context->UnsignedInt32(pcpbd->fontSize); } return result; } @@ -3044,13 +3207,19 @@ */ RexxMethod2(RexxObjectPtr, pbdlg_setFontName_pvt, CSTRING, name, CSELF, pCSelf) { + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + if ( strlen(name) > (MAX_DEFAULT_FONTNAME - 1) ) { stringTooLongException(context->threadContext, 1, MAX_DEFAULT_FONTNAME, strlen(name)); } else { - strcpy(((pCPlainBaseDialog)pCSelf)->fontName, name); + strcpy(pcpbd->fontName, name); } return NULLOBJECT; } @@ -3059,7 +3228,13 @@ */ RexxMethod2(RexxObjectPtr, pbdlg_setFontSize_pvt, uint32_t, size, CSELF, pCSelf) { - ((pCPlainBaseDialog)pCSelf)->fontSize = size; + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } + + pcpbd->fontSize = size; return NULLOBJECT; } @@ -3097,6 +3272,10 @@ RexxMethod3(RexxObjectPtr, pbdlg_setDlgFont, CSTRING, fontName, OPTIONAL_uint32_t, fontSize, CSELF, pCSelf) { pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; + if ( pcpbd == NULL ) + { + return (RexxObjectPtr)baseClassIntializationException(context); + } if ( strlen(fontName) > (MAX_DEFAULT_FONTNAME - 1) ) { @@ -4638,21 +4817,21 @@ if ( argumentOmitted(1) ) { - dumpMsgTable(pcpbd->enCSelf->notifyMsgs, pcpbd->enCSelf->nmSize, "Notify Message Table:"); - dumpMsgTable(pcpbd->enCSelf->commandMsgs, pcpbd->enCSelf->cmSize, "Command Message Table:"); - dumpMsgTable(pcpbd->enCSelf->miscMsgs, pcpbd->enCSelf->mmSize, "Miscellaneous Message Table:"); + dumpMsgTable(pcpbd->enCSelf->notifyMsgs, pcpbd->enCSelf->nmNextIndex, "Notify Message Table:"); + dumpMsgTable(pcpbd->enCSelf->commandMsgs, pcpbd->enCSelf->cmNextIndex, "Command Message Table:"); + dumpMsgTable(pcpbd->enCSelf->miscMsgs, pcpbd->enCSelf->mmNextIndex, "Miscellaneous Message Table:"); } else if( !strcmpi(table, "notify") ) { - dumpMsgTable(pcpbd->enCSelf->notifyMsgs, pcpbd->enCSelf->nmSize, "Notify Message Table:"); + dumpMsgTable(pcpbd->enCSelf->notifyMsgs, pcpbd->enCSelf->nmNextIndex, "Notify Message Table:"); } else if( !strcmpi(table, "command") ) { - dumpMsgTable(pcpbd->enCSelf->notifyMsgs, pcpbd->enCSelf->nmSize, "Command Message Table:"); + dumpMsgTable(pcpbd->enCSelf->notifyMsgs, pcpbd->enCSelf->nmNextIndex, "Command Message Table:"); } else if( !strcmpi(table, "misc") ) { - dumpMsgTable(pcpbd->enCSelf->notifyMsgs, pcpbd->enCSelf->nmSize, "Miscellaneous Message Table:"); + dumpMsgTable(pcpbd->enCSelf->notifyMsgs, pcpbd->enCSelf->mmNextIndex, "Miscellaneous Message Table:"); } else { Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp 2011-03-21 00:03:15 UTC (rev 6865) @@ -51,23 +51,27 @@ #include <CommCtrl.h> #include "oorexxapi.h" -#define NR_BUFFER 15 -#define DATA_BUFFER 8192 -#define MAX_BT_ENTRIES 300 -#define MAX_DT_ENTRIES 750 -#define MAX_CT_ENTRIES 1000 -#define MAX_IT_ENTRIES 20 -#define MAXCHILDDIALOGS 20 -#define MAXDIALOGS 20 +#define NR_BUFFER 15 +#define DATA_BUFFER 8192 +#define MAXCHILDDIALOGS 20 +#define MAXDIALOGS 20 #define DEFAULT_FONTNAME "MS Shell Dlg" -#define DEFAULT_FONTSIZE 8 +#define DEFAULT_FONTSIZE 8 #define MAX_DEFAULT_FONTNAME 256 #define MAX_LIBRARYNAME 256 -#define MAX_NOTIFY_MSGS 200 -#define MAX_COMMAND_MSGS 200 -#define MAX_MISC_MSGS 100 +/* + * The number of table entries is per dialog. 100 controls per dialog seems + * like more than plenty. + */ +#define DEF_MAX_BT_ENTRIES 50 +#define DEF_MAX_DT_ENTRIES 100 +#define DEF_MAX_CT_ENTRIES 100 +#define DEF_MAX_IT_ENTRIES 20 +#define DEF_MAX_NOTIFY_MSGS 100 +#define DEF_MAX_COMMAND_MSGS 100 +#define DEF_MAX_MISC_MSGS 50 /* User defined window messages used for RexxDlgProc() */ #define WM_USER_CREATECHILD WM_USER + 0x0601 @@ -82,7 +86,7 @@ #define WM_USER_CREATECONTROL_DLG WM_USER + 0x060A #define WM_USER_CREATECONTROL_RESDLG WM_USER + 0x060B -#define WM_USER_CREATEPROPSHEET_DLG WM_USER + 0x060C +#define WM_USER_CREATEPROPSHEET_DLG WM_USER + 0x060C #define OODDLL "oodialog.dll" #define OOD_LVL_MAJOR 4 @@ -470,9 +474,12 @@ MESSAGETABLEENTRY *notifyMsgs; MESSAGETABLEENTRY *commandMsgs; MESSAGETABLEENTRY *miscMsgs; - size_t nmSize; + size_t nmSize; // Size of table. + size_t nmNextIndex; // Next free index in table. size_t cmSize; + size_t cmNextIndex; size_t mmSize; + size_t mmNextIndex; HWND hDlg; RexxObjectPtr rexxSelf; HHOOK hHook; @@ -519,18 +526,23 @@ pCWindowBase wndBase; pCEventNotification enCSelf; pCWindowExtensions weCSelf; - RexxObjectPtr rexxSelf; + RexxObjectPtr rexxSelf; // This dialog's Rexx dialog object HWND hDlg; - RexxObjectPtr rexxOwner; + RexxObjectPtr rexxOwner; // This dialog's Rexx owner dialog object HWND hOwnerDlg; + RexxObjectPtr rexxParent; // This dialog's Rexx parent dialog object void *dlgPrivate; // Subclasses can store data unique to the subclass DATATABLEENTRY *DataTab; ICONTABLEENTRY *IconTab; COLORTABLEENTRY *ColorTab; BITMAPTABLEENTRY *BmpTab; + size_t DT_nextIndex; size_t DT_size; + size_t IT_nextIndex; size_t IT_size; + size_t CT_nextIndex; size_t CT_size; + size_t BT_nextIndex; size_t BT_size; HBRUSH bkgBrush; HBITMAP bkgBitmap; @@ -542,6 +554,8 @@ bool onTheTop; bool isCategoryDlg; // Need to use IsNestedDialogMessage() bool isControlDlg; // Dialog was created as DS_CONTROL | WS_CHILD + bool isInitializing; // ControlDialog attribute + bool isOwnedDlg; // Dialog has an owner dialog bool isPageDlg; // Dialog is a property sheet page dialog bool isPropSheetDlg; // Dialog is a property sheet dialog bool sharedIcon; @@ -575,7 +589,7 @@ typedef struct _ddCSelf { pCPlainBaseDialog pcpbd; RexxObjectPtr rexxSelf; - DLGTEMPLATEEX *base; // Base pointer to dialog template (basePtr) + DLGTEMPLATEEX *base; // Base pointer to dialog template (basePtr) void *active; // Pointer to current location in dialog template (activePtr) void *endOfTemplate; // Pointer to end of allocated memory for the template uint32_t expected; // Expected dialog item count @@ -675,6 +689,7 @@ extern RexxClassObject TheDialogControlClass; extern RexxClassObject ThePropertySheetPageClass; extern RexxClassObject TheSizeClass; +extern RexxClassObject TheRectClass; extern HBRUSH searchForBrush(pCPlainBaseDialog pcpbd, size_t *index, uint32_t id); Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBarControls.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBarControls.cpp 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBarControls.cpp 2011-03-21 00:03:15 UTC (rev 6865) @@ -263,7 +263,7 @@ RexxMethod3(logical_t, sb_setPosition, int32_t, pos, OPTIONAL_logical_t, redraw, CSELF, pCSelf) { oodResetSysErrCode(context->threadContext); - redraw = (argumentOmitted(3) ? TRUE : redraw); + redraw = (argumentOmitted(2) ? TRUE : redraw); SCROLLINFO si = {0}; si.cbSize = sizeof(SCROLLINFO); Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp 2011-03-21 00:03:15 UTC (rev 6865) @@ -108,7 +108,56 @@ return false; } + /** + * Checks that an owned dialog has an underlying owner window and sets up the + * popup as child data. + * + * All owned dialogs are treated as if they were started with popupAsChild() + * even if they weren't. If rexxParent is set, then we actually were started + * with popupAsChild(). If not set then we do that here. + * + * @param c + * @param pcpbd + * + * @remarks + */ +bool processOwnedDialog(RexxMethodContext *c, pCPlainBaseDialog pcpbd) +{ + pCPlainBaseDialog ownerPcpbd = requiredDlgCSelf(c, pcpbd->rexxOwner, oodPlainBaseDialog, 0); + if ( ownerPcpbd == NULL ) + { + goto err_out; + } + + if ( ownerPcpbd->hDlg == NULL || ! ownerPcpbd->isActive ) + { + methodCanNotBeInvokedException(c, pcpbd->rexxSelf, "owner Windows dialog does not exist"); + goto err_out; + } + pcpbd->hOwnerDlg = ownerPcpbd->hDlg; + + if ( pcpbd->rexxParent == NULLOBJECT ) + { + pcpbd->rexxParent = pcpbd->rexxOwner; + RexxObjectPtr childList = c->SendMessage0(pcpbd->rexxParent, "CHILDDIALOGS"); + if ( childList == NULLOBJECT ) + { + baseClassIntializationException(c); + goto err_out; + } + + c->SendMessage1(childList, "INSERT", pcpbd->rexxSelf); + } + + return true; + +err_out: + return false; +} + + +/** * Methods for the .ResDialog class. */ #define RESDIALOG_CLASS "ResDialog" @@ -139,7 +188,7 @@ bool *release = args->release; // Pass the pointer to the CSelf for this dialog to WM_INITDIALOG. - pcpbd->hDlg = CreateDialogParam(pcpbd->hInstance, MAKEINTRESOURCE(args->resourceId), 0, + pcpbd->hDlg = CreateDialogParam(pcpbd->hInstance, MAKEINTRESOURCE(args->resourceId), pcpbd->hOwnerDlg, (DLGPROC)RexxDlgProc, (LPARAM)pcpbd); if ( pcpbd->hDlg == NULL ) @@ -298,6 +347,15 @@ return FALSE; } + if ( pcpbd->isOwnedDlg ) + { + modeless = TRUE; + if ( ! processOwnedDialog(context, pcpbd) ) + { + return false; + } + } + ULONG thID; bool Release = false; @@ -381,42 +439,30 @@ */ #define CONTROLDIALOG_CLASS "ControlDialog" - -/** ControlDialog::parentDlg [attribute get] - * - * Raises base class initialization exception if we can't get the CSelf - * pointer. - */ -RexxMethod1(RexxObjectPtr, chld_getOwnerDialog, OSELF, self) +RexxMethod1(RexxObjectPtr, ctrlDlg_get_initializing, OSELF, self) { - pCPlainBaseDialog pcpbd = requiredDlgCSelf(context, self, oodPlainBaseDialog, 0); + pCPlainBaseDialog pcpbd = dlgToCSelf(context, self); if ( pcpbd != NULL ) { - return pcpbd->rexxOwner == NULLOBJECT ? TheNilObj : pcpbd->rexxOwner; + return pcpbd->isInitializing ? TheTrueObj : TheFalseObj; } + baseClassIntializationException(context); return NULLOBJECT; } -/** ControlDialog::parentDlg [attribute set] - * - * Raises base class initialization exception if we can't get the CSelf - * pointer. Raises wrong class exception if parent is not a PlainBaseDialog. - * - * @note Although hOwnerDlg gets set, it very well could still be null. - */ -RexxMethod2(RexxObjectPtr, chld_setOwnerDialog, RexxObjectPtr, owner, OSELF, self) + + +RexxMethod2(RexxObjectPtr, ctrlDlg_set_initializing, logical_t, initializing, OSELF, self) { - pCPlainBaseDialog pcpbd = requiredDlgCSelf(context, self, oodPlainBaseDialog, 0); - if ( pcpbd != NULL ) + pCPlainBaseDialog pcpbd = dlgToCSelf(context, self); + if ( pcpbd == NULL ) { - pCPlainBaseDialog ownerPcpbd = requiredDlgCSelf(context, owner, oodPlainBaseDialog, 1); - if ( ownerPcpbd != NULL ) - { - pcpbd->rexxOwner = owner; - pcpbd->hOwnerDlg = ownerPcpbd->hDlg; - } + baseClassIntializationException(context); } - + else + { + pcpbd->isInitializing = initializing ? true : false; + } return NULLOBJECT; } @@ -478,6 +524,8 @@ // TODO should we check result? uint32_t result = doDataAutoDetection(pcpbd); } + + pcpbd->isInitializing = false; return TheTrueObj; } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp 2011-03-21 00:03:15 UTC (rev 6865) @@ -1458,25 +1458,22 @@ } -RexxObjectPtr rxNewRect(RexxMethodContext *context, PRECT r) +RexxObjectPtr rxNewRect(RexxThreadContext *c, PRECT r) { - RexxObjectPtr rect = NULL; + RexxArrayObject args = c->ArrayOfFour(c->WholeNumber(r->left), + c->WholeNumber(r->top), + c->WholeNumber(r->right), + c->WholeNumber(r->bottom)); - RexxClassObject RectClass = rxGetContextClass(context, "RECT"); - if ( RectClass != NULL ) - { - RexxArrayObject args = context->NewArray(4); - context->ArrayAppend(args, context->WholeNumber(r->left)); - context->ArrayAppend(args, context->WholeNumber(r->top)); - context->ArrayAppend(args, context->WholeNumber(r->right)); - context->ArrayAppend(args, context->WholeNumber(r->bottom)); - - rect = context->SendMessage(RectClass, "NEW", args); - } - return rect; + return c->SendMessage(TheRectClass, "NEW", args); } +RexxObjectPtr rxNewRect(RexxMethodContext *context, PRECT r) +{ + return rxNewRect(context->threadContext, r); +} + PSIZE rxGetSize(RexxMethodContext *context, RexxObjectPtr s, size_t argPos) { if ( requiredClass(context->threadContext, s, "Size", argPos) ) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp 2011-03-21 00:03:15 UTC (rev 6865) @@ -60,8 +60,9 @@ #define OOD_RESOURCE_ERR_TITLE "ooDialog - Resource Definition Error" #define OOD_ADDICONFILE_ERR_MSG "Icon resource elements have exceeded the maximum\n" \ - "number of allocated icon table entries. The icon\n" \ - "resource will not be added." + "number of allocated icon table entries, and the\n" \ + "table could not be expanded.\n\n" \ + "The icon resource will not be added." // ooDialog return codes for special purposes, including some int32_t codes // where -1 and greater is valid. @@ -127,6 +128,7 @@ extern RexxObjectPtr rxNewPoint(RexxMethodContext *c, long x, long y); extern PRECT rxGetRect(RexxMethodContext *context, RexxObjectPtr r, size_t argPos); extern RexxObjectPtr rxNewRect(RexxMethodContext *context, long l, long t, long r, long b); +extern RexxObjectPtr rxNewRect(RexxThreadContext *context, PRECT r); extern RexxObjectPtr rxNewRect(RexxMethodContext *context, PRECT r); extern PSIZE rxGetSize(RexxMethodContext *context, RexxObjectPtr s, size_t argPos); extern RexxObjectPtr rxNewSize(RexxThreadContext *c, long cx, long cy); @@ -170,6 +172,7 @@ // These functions are defined in oodBaseDialog.cpp extern bool initWindowExtensions(RexxMethodContext *, RexxObjectPtr, HWND, pCWindowBase, pCPlainBaseDialog); extern bool validControlDlg(RexxMethodContext *c, pCPlainBaseDialog pcpbd); +extern bool processOwnedDialog(RexxMethodContext *c, pCPlainBaseDialog pcpbd); extern void setFontAttrib(RexxThreadContext *c, pCPlainBaseDialog pcpbd); // These functions are defined in oodPropertySheet.cpp Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodData.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodData.cpp 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodData.cpp 2011-03-21 00:03:15 UTC (rev 6865) @@ -72,11 +72,11 @@ if ( pcpbd->DataTab != NULL ) { register size_t ndx = 0; - while ( ndx < pcpbd->DT_size && pcpbd->DataTab[ndx].id != id ) + while ( ndx < pcpbd->DT_nextIndex && pcpbd->DataTab[ndx].id != id ) { ndx++; } - if ( ndx < pcpbd->DT_size ) + if ( ndx < pcpbd->DT_nextIndex ) { return pcpbd->DataTab[ndx].type; } @@ -143,12 +143,12 @@ // This function only checks a radio button, not unchecks a radio button. return true; } - while ( (ndx < pcpbd->DT_size) && (pcpbd->DataTab[ndx].id != id) ) + while ( (ndx < pcpbd->DT_nextIndex) && (pcpbd->DataTab[ndx].id != id) ) { ndx++; } - if ( ndx >= pcpbd->DT_size ) + if ( ndx >= pcpbd->DT_nextIndex ) { // Not found. return false; @@ -172,7 +172,7 @@ beg--; } en = ndx; - while ( ((en + 1) < pcpbd->DT_size) && isInSameDlg(pcpbd, en + 1, ndx) && ! hasGroupStyle(hW, pcpbd, en + 1) ) + while ( ((en + 1) < pcpbd->DT_nextIndex) && isInSameDlg(pcpbd, en + 1, ndx) && ! hasGroupStyle(hW, pcpbd, en + 1) ) { en++; } @@ -827,7 +827,7 @@ RexxObjectPtr dataObj; oodControl_t controlType; - for ( j = 0; j < pcpbd->DT_size; j++ ) + for ( j = 0; j < pcpbd->DT_nextIndex; j++ ) { hwnd = pcpbd->childDlg[pcpbd->DataTab[j].category]; itemID = pcpbd->DataTab[j].id; @@ -910,7 +910,7 @@ uint32_t itemID; oodControl_t controlType; - for ( j = 0; j < pcpbd->DT_size; j++ ) + for ( j = 0; j < pcpbd->DT_nextIndex; j++ ) { data[0] = '\0'; @@ -1054,7 +1054,7 @@ { if ( pcpbd->DataTab == NULL ) { - pcpbd->DataTab = (DATATABLEENTRY *)LocalAlloc(LPTR, sizeof(DATATABLEENTRY) * MAX_DT_ENTRIES); + pcpbd->DataTab = (DATATABLEENTRY *)LocalAlloc(LPTR, sizeof(DATATABLEENTRY) * DEF_MAX_DT_ENTRIES); if ( !pcpbd->DataTab ) { if ( c != NULL ) @@ -1063,22 +1063,33 @@ } return OOD_MEMORY_ERR; } - pcpbd->DT_size = 0; + pcpbd->DT_nextIndex = 0; + pcpbd->DT_size = DEF_MAX_DT_ENTRIES; } - if ( pcpbd->DT_size < MAX_DT_ENTRIES ) + if ( pcpbd->DT_nextIndex >= pcpbd->DT_size ) { - pcpbd->DataTab[pcpbd->DT_size].id = id; - pcpbd->DataTab[pcpbd->DT_size].type = type; - pcpbd->DataTab[pcpbd->DT_size].category = category; - pcpbd->DT_size ++; - return OOD_NO_ERROR; + HLOCAL temp = LocalReAlloc(pcpbd->DataTab, sizeof(DATATABLEENTRY) * pcpbd->DT_size * 2, LMEM_ZEROINIT | LMEM_MOVEABLE); + if ( temp == NULL ) + { + MessageBox(0, "Dialog data items have exceeded the maximum\n" + "number of allocated table entries, and the\n" + "table can not be expaded.\n\n" + "No data item can be added.", + "Error", MB_OK | MB_ICONHAND); + return OOD_DATATABLE_FULL; + } + + pcpbd->DT_size *= 2; + pcpbd->DataTab = (DATATABLEENTRY *)temp; } - MessageBox(0, "Dialog data items have exceeded the maximum number of\n" - "allocated table entries. No data item can be added.", - "Error", MB_OK | MB_ICONHAND); - return OOD_DATATABLE_FULL; + pcpbd->DataTab[pcpbd->DT_nextIndex].id = id; + pcpbd->DataTab[pcpbd->DT_nextIndex].type = type; + pcpbd->DataTab[pcpbd->DT_nextIndex].category = category; + pcpbd->DT_nextIndex ++; + + return OOD_NO_ERROR; } /** @@ -1092,7 +1103,7 @@ */ RexxArrayObject getDataTableIDs(RexxMethodContext *c, pCPlainBaseDialog pcpbd, RexxObjectPtr self) { - size_t count = pcpbd->DT_size; + size_t count = pcpbd->DT_nextIndex; RexxArrayObject result = c->NewArray(count); for ( size_t i = 0; i < count; i++ ) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp 2011-03-21 00:03:15 UTC (rev 6865) @@ -258,7 +258,7 @@ { if ( pcpbd->BmpTab != NULL ) { - for ( size_t i = 0; i < pcpbd->BT_size; i++ ) + for ( size_t i = 0; i < pcpbd->BT_nextIndex; i++ ) { if ( pcpbd->BmpTab[i].buttonID == id ) { @@ -483,59 +483,66 @@ { if ( pcpbd->ColorTab == NULL ) { - pcpbd->ColorTab = (COLORTABLEENTRY *)LocalAlloc(LMEM_FIXED, sizeof(COLORTABLEENTRY) * MAX_CT_ENTRIES); + pcpbd->ColorTab = (COLORTABLEENTRY *)LocalAlloc(LMEM_FIXED, sizeof(COLORTABLEENTRY) * DEF_MAX_CT_ENTRIES); if ( pcpbd->ColorTab == NULL ) { outOfMemoryException(c->threadContext); return 1; } - pcpbd->CT_size = 0; + pcpbd->CT_nextIndex = 0; + pcpbd->CT_size = DEF_MAX_CT_ENTRIES; } - if ( pcpbd->CT_size < MAX_CT_ENTRIES ) + if ( pcpbd->CT_nextIndex >= pcpbd->CT_size ) { - size_t i = 0; - - // If brush is found, then an entry for this control already exists in - // the color table. The value of i is set to the entry index. In this - // case we are replacing the entry with a (presumably) new color. - HBRUSH hbrush = searchForBrush(pcpbd, &i, id); - if ( hbrush != NULL ) + HLOCAL temp = LocalReAlloc(pcpbd->ColorTab, sizeof(COLORTABLEENTRY) * pcpbd->CT_size * 2, LMEM_ZEROINIT | LMEM_MOVEABLE); + if ( temp == NULL ) { - if ( ! pcpbd->ColorTab[i].isSysBrush ) - { - DeleteObject(hbrush); - } + MessageBox(NULL, "Dialog control elements have exceeded the maximum\n" + "number of allocated color table entries, and the table\n" + "could not be expanded.\n\n" + "The color for the dialog control can not be added.", + "Error", MB_OK | MB_ICONHAND); + return 1; } - else - { - i = pcpbd->CT_size; - pcpbd->ColorTab[i].itemID = id; - pcpbd->CT_size++; - } - pcpbd->ColorTab[i].ColorBk = bkColor; - pcpbd->ColorTab[i].ColorFG = fgColor; + pcpbd->CT_size *= 2; + pcpbd->ColorTab = (COLORTABLEENTRY *)temp; + } - if ( useSysColor ) + size_t i = 0; + + // If brush is found, then an entry for this control already exists in + // the color table. The value of i is set to the entry index. In this + // case we are replacing the entry with a (presumably) new color. + HBRUSH hbrush = searchForBrush(pcpbd, &i, id); + if ( hbrush != NULL ) + { + if ( ! pcpbd->ColorTab[i].isSysBrush ) { - pcpbd->ColorTab[i].ColorBrush = GetSysColorBrush(pcpbd->ColorTab[i].ColorBk); - pcpbd->ColorTab[i].isSysBrush = true; + DeleteObject(hbrush); } - else - { - pcpbd->ColorTab[i].ColorBrush = CreateSolidBrush(PALETTEINDEX(pcpbd->ColorTab[i].ColorBk)); - pcpbd->ColorTab[i].isSysBrush = false; - } } else { - MessageBox(NULL, "Dialog control elements have exceeded the maximum\n" - "number of allocated color table entries. The color\n" - "for the dialog control can not be added.", - "Error", MB_OK | MB_ICONHAND); - return 1; + i = pcpbd->CT_nextIndex; + pcpbd->ColorTab[i].itemID = id; + pcpbd->CT_nextIndex++; } + + pcpbd->ColorTab[i].ColorBk = bkColor; + pcpbd->ColorTab[i].ColorFG = fgColor; + + if ( useSysColor ) + { + pcpbd->ColorTab[i].ColorBrush = GetSysColorBrush(pcpbd->ColorTab[i].ColorBk); + pcpbd->ColorTab[i].isSysBrush = true; + } + else + { + pcpbd->ColorTab[i].ColorBrush = CreateSolidBrush(PALETTEINDEX(pcpbd->ColorTab[i].ColorBk)); + pcpbd->ColorTab[i].isSysBrush = false; + } return 0; } @@ -1039,7 +1046,7 @@ hpen = CreatePen(PS_NULL, 0, GetSysColor(COLOR_BTNFACE)); // Check to see if the user has set a color for dialog item background. - if ( pcpbd->CT_size != 0 ) + if ( pcpbd->CT_nextIndex != 0 ) { size_t i; hbr = searchForBrush(pcpbd, &i, id); @@ -1984,13 +1991,14 @@ if ( pcpbd->BmpTab == NULL ) { - pcpbd->BmpTab = (BITMAPTABLEENTRY *)LocalAlloc(LPTR, sizeof(BITMAPTABLEENTRY) * MAX_BT_ENTRIES); + pcpbd->BmpTab = (BITMAPTABLEENTRY *)LocalAlloc(LPTR, sizeof(BITMAPTABLEENTRY) * DEF_MAX_BT_ENTRIES); if ( pcpbd->BmpTab == NULL ) { MessageBox(0, "No memory available","Error", MB_OK | MB_ICONHAND); return TheOneObj; } - pcpbd->BT_size = 0; + pcpbd->BT_nextIndex = 0; + pcpbd->BT_size = DEF_MAX_BT_ENTRIES; } bool frame = false; @@ -2005,79 +2013,86 @@ if ( StrStrI(style, "USEPAL") != NULL ) usePalette = true; } - if ( pcpbd->BT_size < MAX_BT_ENTRIES ) + if ( pcpbd->BT_nextIndex >= pcpbd->BT_size ) { - size_t index = pcpbd->BT_size; + HLOCAL temp = LocalReAlloc(pcpbd->BmpTab, sizeof(BITMAPTABLEENTRY) * pcpbd->BT_size * 2, LMEM_ZEROINIT | LMEM_MOVEABLE); + if ( temp == NULL ) + { + MessageBox(NULL, "Bitmap buttons have exceeded the maximum\n" + "number of allocated table entries, and the table\n" + "could not be expanded.\n\n" + "No bitmap button can be added.", + "Error", MB_OK | MB_ICONHAND); + return TheOneObj; + } - pcpbd->BmpTab[index].buttonID = id; - pcpbd->BmpTab[index].frame = frame; + pcpbd->BT_size *= 2; + pcpbd->BmpTab = (BITMAPTABLEENTRY *)temp; + } - assignBitmap(pcpbd, index, bmpNormal, PBSS_NORMAL, inMemory); + size_t index = pcpbd->BT_nextIndex; - if ( argumentExists(4) && ! isEmptyString(bmpFocused) ) + pcpbd->BmpTab[index].buttonID = id; + pcpbd->BmpTab[index].frame = frame; + + assignBitmap(pcpbd, index, bmpNormal, PBSS_NORMAL, inMemory); + + if ( argumentExists(4) && ! isEmptyString(bmpFocused) ) + { + if ( isIntResource(bmpFocused) && noUnderlyingDlg ) { - if ( isIntResource(bmpFocused) && noUnderlyingDlg ) - { - noWindowsDialogException(context, self); - return TheOneObj; - } - assignBitmap(pcpbd, index, bmpFocused, PBSS_DEFAULTED, inMemory); + noWindowsDialogException(context, self); + return TheOneObj; } - if ( argumentExists(5) && ! isEmptyString(bmpSelected) ) + assignBitmap(pcpbd, index, bmpFocused, PBSS_DEFAULTED, inMemory); + } + if ( argumentExists(5) && ! isEmptyString(bmpSelected) ) + { + if ( isIntResource(bmpSelected) && noUnderlyingDlg ) { - if ( isIntResource(bmpSelected) && noUnderlyingDlg ) - { - noWindowsDialogException(context, self); - return TheOneObj; - } - assignBitmap(pcpbd, index, bmpSelected, PBSS_PRESSED, inMemory); + noWindowsDialogException(context, self); + return TheOneObj; } - if ( argumentExists(6) && ! isEmptyString(bmpDisabled) ) + assignBitmap(pcpbd, index, bmpSelected, PBSS_PRESSED, inMemory); + } + if ( argumentExists(6) && ! isEmptyString(bmpDisabled) ) + { + if ( isIntResource(bmpDisabled) && noUnderlyingDlg ) { - if ( isIntResource(bmpDisabled) && noUnderlyingDlg ) - { - noWindowsDialogException(context, self); - return TheOneObj; - } - assignBitmap(pcpbd, index, bmpDisabled, PBSS_DISABLED, inMemory); + noWindowsDialogException(context, self); + return TheOneObj; } + assignBitmap(pcpbd, index, bmpDisabled, PBSS_DISABLED, inMemory); + } - if ( stretch && pcpbd->BmpTab[index].loaded ) - { - pcpbd->BmpTab[index].loaded |= 0x0100; - } + if ( stretch && pcpbd->BmpTab[index].loaded ) + { + pcpbd->BmpTab[index].loaded |= 0x0100; + } + // Maybe create a palette that conforms to the bitmap colors. + if ( usePalette ) + { + if ( pcpbd->colorPalette != NULL ) + { + DeleteObject(pcpbd->colorPalette); + } - // Maybe create a palette that conforms to the bitmap colors. - if ( usePalette ) - { - if ( pcpbd->colorPalette != NULL ) - { - DeleteObject(pcpbd->colorPalette); - } + pcpbd->colorPalette = createDIBPalette((LPBITMAPINFO)pcpbd->BmpTab[index].bitmapID); + setSysPalColors(pcpbd->colorPalette); + } - pcpbd->colorPalette = createDIBPalette((LPBITMAPINFO)pcpbd->BmpTab[index].bitmapID); - setSysPalColors(pcpbd->colorPalette); - } - - if ( argumentOmitted(2) || msgToRaise[0] == '\0' ) - { - pcpbd->BT_size++; - return TheZeroObj; - } - else if ( addCommandMessage(pcpbd->enCSelf, context, id, 0x0000FFFF, 0, 0, msgToRaise, TAG_NOTHING) ) - { - pcpbd->BT_size++; - return TheZeroObj; - } + if ( argumentOmitted(2) || msgToRaise[0] == '\0' ) + { + pcpbd->BT_nextIndex++; + return TheZeroObj; } - else + else if ( addCommandMessage(pcpbd->enCSelf, context, id, 0x0000FFFF, 0, 0, msgToRaise, TAG_NOTHING) ) { - MessageBox(0, "Bitmap buttons have exceeded the maximum number of\n" - "allocated table entries. No bitmap button can be\n" - "added.", - "Error",MB_OK | MB_ICONHAND); + pcpbd->BT_nextIndex++; + return TheZeroObj; } + return TheOneObj; } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-03-20 21:19:00 UTC (rev 6864) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-03-21 00:03:15 UTC (rev 6865) @@ -166,10 +166,10 @@ } /* Same as above but connects a System Menu item */ -inline BOOL _connectSysItem(pCEventNotification pcen, uint32_t id, CSTRING msg) +inline BOOL _connectSysItem(pCEventNotification pcen, RexxMethodContext *c, uint32_t id, CSTRING msg) { uint32_t tag = TAG_DIALOG | TAG_SYSMENUCOMMAND; - return addMiscMessage(pcen, WM_SYSCOMMAND, UINT32_MAX, id, 0x0000FFF0, 0, 0, msg, tag) ? 0 : ERROR_NOT_ENOUGH_MEMORY; + return addMiscMessage(pcen, c, WM_SYSCOMMAND, UINT32_MAX, id, ... [truncated message content] |
From: <mie...@us...> - 2011-03-24 00:03:28
|
Revision: 6873 http://oorexx.svn.sourceforge.net/oorexx/?rev=6873&view=rev Author: miesfeld Date: 2011-03-24 00:03:18 +0000 (Thu, 24 Mar 2011) Log Message: ----------- Sync ooDialog 4.2.0 in sandbox with trunk up through revision 6872 Revision Links: -------------- http://oorexx.svn.sourceforge.net/oorexx/?rev=6872&view=rev Modified Paths: -------------- sandbox/mark/ooDialog.beta/platform/windows/install/ReleaseNotes_ooDialog.4.2.0.txt sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/PropertySheetDemo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/ReadMe.txt sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/Makefile.am Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/CheckIn.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/ClosePalette.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/CodeReview.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/LinkToWeb.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/LockModule.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/LockProject.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/ProjectReview.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SaveAll.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SaveModule.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SaveProject.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SplitModule.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/Update.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/useTools.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/useTools.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/ReadMe.txt sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise01.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02a.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02b.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Makefile.am Modified: sandbox/mark/ooDialog.beta/platform/windows/install/ReleaseNotes_ooDialog.4.2.0.txt =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/ReleaseNotes_ooDialog.4.2.0.txt 2011-03-24 00:00:46 UTC (rev 6872) +++ sandbox/mark/ooDialog.beta/platform/windows/install/ReleaseNotes_ooDialog.4.2.0.txt 2011-03-24 00:03:18 UTC (rev 6873) @@ -6,6 +6,25 @@ now, but starting to get filled in. + switch_ooDialog420_410-4.2.0.6xxx + ================================= + +Changes since switch_ooDialog420_410-4.2.0.6800 +---------------------------------------------------------------------------- + +Documentation: +-------------- + More of the ooDialog Method Reference documentation is complete. + + A ooDialog User Dialog book has been started and added to the + distribution. + + + + + + + switch_ooDialog420_410-4.2.0.6800 ================================= @@ -110,8 +129,8 @@ MonthCalendar control class UpDown control class -New dialog classes ------------------- +New dialog classes: +------------------- PropertySheetDialog: @@ -121,3 +140,16 @@ PropertySheetPage class: +New utility classes: +-------------------- + +Documentation +------------- + +Much of the ooDialog Method Reference book has been rewritten to correct +errors. The format of some sections has been changed to make finding the +relevant information easier. All method tables now give a short +description of the method within the table. + +A new book, the ooDialog User Guide, has been added to the ooDialog +distribution. Modified: sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi 2011-03-24 00:00:46 UTC (rev 6872) +++ sandbox/mark/ooDialog.beta/platform/windows/install/ooDialog420_410.nsi 2011-03-24 00:03:18 UTC (rev 6873) @@ -126,7 +126,8 @@ Var IsAdminUser ; is the installer being run by an admin: true / false Var SwitchOODialogQualifiedName ; The fully qualified switchOODialog file name. - Var RegVal_startMenuFolder ; location of, possible, alternate start menu folder + Var RegVal_startMenuFolder ; location of start menu folder we put our links in + Var RegVal_newStartMenuFolder ; if we created this folder on install (1) or not (0) Var RegVal_ourUninstallLocation ; location of ooDialog beta uninstall program Var RegVal_ourUninstallString ; ooDialog beta uninstall program @@ -194,6 +195,7 @@ DetailPrint "Creating Switch ooDialog short cut in ${REXXLONGNAME} Start Menu folder" CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" '"$SwitchOODialogQualifiedName"' ; Need to double quote. CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog Info.lnk" '"$SwitchOODialogQualifiedName"' "/I" ; Need to double quote. + CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 ${If} ${AtLeastWinVista} ShellLink::SetRunAsAdministrator "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" @@ -203,7 +205,8 @@ Pop $0 ${EndIf} - CreateShortCut "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" "$INSTDIR\${UNINSTALLER}" "" "$INSTDIR\${UNINSTALLER}" 0 + WriteRegStr HKLM "Software\${SHORTNAME}" "StartMenuFolder" "$SMPROGRAMS\${REXXLONGNAME}" + WriteRegStr HKLM "Software\${SHORTNAME}" "NewStartMenuFolder" "0" ${Else} DetailPrint "Creating Switch ooDialog short cut in ${LONGNAME} Start Menu folder" CreateDirectory "$SMPROGRAMS\${LONGNAME}" @@ -220,6 +223,7 @@ ${EndIf} WriteRegStr HKLM "Software\${SHORTNAME}" "StartMenuFolder" "$SMPROGRAMS\${LONGNAME}" + WriteRegStr HKLM "Software\${SHORTNAME}" "NewStartMenuFolder" "1" ${Endif} DetailPrint "Executing Switch ooDialog to set current version to 4.2.0." @@ -292,7 +296,7 @@ DeleteRegKey HKLM "SOFTWARE\${SHORTNAME}" DetailPrint "Removing Start Menu items." - ${If} $RegVal_startMenuFolder == "" + ${If} $RegVal_newStartMenuFolder == "0" Delete "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog.lnk" Delete "$SMPROGRAMS\${REXXLONGNAME}\Switch ooDialog Info.lnk" Delete "$SMPROGRAMS\${REXXLONGNAME}\Uninstall ${LONGNAME}.lnk" @@ -328,6 +332,7 @@ ReadRegStr $RegVal_installedLocation HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UnInstallLocation" ReadRegStr $RegVal_startMenuFolder HKLM "Software\${SHORTNAME}\" "StartMenuFolder" + ReadRegStr $RegVal_newStartMenuFolder HKLM "Software\${SHORTNAME}\" "NewStartMenuFolder" StrCpy $SwitchOODialogQualifiedName "$RegVal_installedLocation\${InstallFile}" FunctionEnd Modified: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2011-03-24 00:00:46 UTC (rev 6872) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2011-03-24 00:03:18 UTC (rev 6873) @@ -83,6 +83,7 @@ !define SHORTNAME "Switch_ooDialog" ; Must be in sync with the switch ooDialog SHORTNAME !define LONGNAME "Switch ooDialog ${VERSION} (beta)" ; Does not have to be in sync + !define OOREXXLONGNAME "Open Object Rexx" ; Must be kept in sync with ooRexx install !Define BinDir410 "${BINDIR}\oodialog410" !Define BinDir420 "${BINDIR}\oodialog420" @@ -122,6 +123,7 @@ ; Variables Var RegVal_installedLocation ; Our installed location, found in the registry + Var RegVal_startMenuFolder ; Which start menu folder is in use for ooRexx. Var RegVal_installedVersion ; Don't need this Version / level of uninstaller program. This only exists at 410 or greater Var ForceVersion ; Allows the user to force what ooDialog version is in effect. Var CurrentVersion ; The current ooDialog version, read from the registry @@ -174,6 +176,9 @@ SetOutPath $INSTDIR\doc ; Add the files ... File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" + File /oname=oodGuide.pdf "${SRCDIR}\doc\oodguide420.pdf" + + CreateShortCut "$RegVal_startMenuFolder\Documentation\ooRexx ooDialog User Guide.lnk" "$INSTDIR\doc\oodguide.pdf" "" "$INSTDIR\doc\oodguide.pdf" 0 DetailPrint "" DetailPrint "********** ooDialog 4.2.0 Samples **********" @@ -287,6 +292,16 @@ File "${SamplesDir420}\tutorial\*.rc" ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\userGuide + ; Add the files ... + File "${SamplesDir420}\userGuide\*.txt" + + ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\userGuide\exercises + ; Add the files ... + File "${SamplesDir420}\userGuide\exercises\*.rex" + + ; Set the installation directory: SetOutPath $INSTDIR\samples\oodialog\wav ; Add the files ... File "${SamplesDir420}\wav\*.wav" @@ -516,6 +531,8 @@ StrCpy $INSTDIR "$RegVal_installedLocation" + ReadRegStr $RegVal_startMenuFolder HKLM "Software\${SHORTNAME}\" "StartMenuFolder" + /* If the user did not force a version, the new version is the opposite of * the current version. */ @@ -563,6 +580,34 @@ Abort ${EndIf} + ${If} $CurrentVersion == 420 + ClearErrors + Delete $INSTDIR\oodguide.pdf + ${If} ${Errors} + MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ + "switchOODialog detected a problem with oodguide.pdf$\n$\n\ + You MUST close all the ooDialog documentation and close$\n\ + any running ooDialog programs before executing the Switch$\n\ + ooDialog program.$\n$\n\ + Please close the ooDialog User Guid documentation, and$\n\ + make sure no ooDialog programs are running.$\n$\n\ + switchOODialog is aborting." + Abort + + ; Restore the oodialog.pdf file deleted above. + SetOutPath $INSTDIR\doc + + ${If} $CurrentVersion == 420 + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" + ${Else} + File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" + ${EndIf} + + Abort + ${EndIf} + ${EndIf} + + ClearErrors Delete $INSTDIR\oodialog.dll ${If} ${Errors} MessageBox MB_OK|MB_ICONEXCLAMATION|MB_TOPMOST \ @@ -574,11 +619,12 @@ the ooDialog Method Reference documentation is closed.$\n$\n\ switchOODialog is aborting." - ; Restore the oodialog.pdf file deleted above. + ; Restore the ooDialog docs deleted above. SetOutPath $INSTDIR\doc ${If} $CurrentVersion == 420 File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog420.pdf" + File /oname=oodGuide.pdf "${SRCDIR}\doc\oodguide420.pdf" ${Else} File /oname=ooDialog.pdf "${SRCDIR}\doc\oodialog410.pdf" ${EndIf} @@ -661,6 +707,10 @@ Delete $INSTDIR\samples\oodialog\rc\ticket.rc ${Else} DetailPrint "Removing files not present in ooDialog 4.1.0" + DetailPrint "" + DetailPrint "Removing ooDialog User Guide and Start Menu shortcut" + Delete "$RegVal_startMenuFolder\Documentation\ooRexx ooDialog User Guide.lnk" + Delete $INSTDIR\doc\oodguide.pdf RMDir /r $INSTDIR\samples\oodialog\source Delete $INSTDIR\samples\oodialog\bmp\propertySheetDemoListView.bmp @@ -671,8 +721,23 @@ Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTheater.bmp Delete $INSTDIR\samples\oodialog\bmp\ticketWizardTicket.bmp RMDir /r $INSTDIR\samples\oodialog\controls + Delete $INSTDIR\samples\oodialog\dlgAreaUDemoThree.rex Delete $INSTDIR\samples\oodialog\dlgAreaUDemoTwo.rex Delete $INSTDIR\samples\oodialog\examples\ReadMe.txt + Delete $INSTDIR\samples\oodialog\examples\resources\CheckIn.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\ClosePalette.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\CodeReview.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\LinkToWeb.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\LockModule.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\LockProject.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\ProjectReview.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\SaveAll.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\SaveModule.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\SaveProject.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\SplitModule.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\Update.bmp + Delete $INSTDIR\samples\oodialog\examples\resources\useTools.h + Delete $INSTDIR\samples\oodialog\examples\useTools.rex Delete $INSTDIR\samples\oodialog\ooDraw.h Delete $INSTDIR\samples\oodialog\PropertySheetDemo.rex Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.h @@ -681,8 +746,10 @@ Delete $INSTDIR\samples\oodialog\rc\ticketWizard.h Delete $INSTDIR\samples\oodialog\rc\ticketWizard.rc RMDir /r $INSTDIR\samples\oodialog\simple + Delete $INSTDIR\samples\oodialog\sysinfo\sysInfo.h Delete $INSTDIR\samples\oodialog\TabDemo.rex Delete $INSTDIR\samples\oodialog\ticketWizard.rex + RMDir /r $INSTDIR\samples\oodialog\userGuide ${Endif} DetailPrint "" Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/Makefile.am =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/Makefile.am 2011-03-24 00:00:46 UTC (rev 6872) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/Makefile.am 2011-03-24 00:03:18 UTC (rev 6873) @@ -1,6 +1,6 @@ #/*----------------------------------------------------------------------------*/ #/* */ -#/* Copyright (c) 2005-2010 Rexx Language Association. All rights reserved. */ +#/* Copyright (c) 2005-2011 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 */ @@ -37,8 +37,8 @@ .NOTPARALLEL: -SUBDIRS = bmp controls examples oleinfo ooRexxTry rc res simple sysinfo tutorial wav winsystem -DIST_SUBDIRS = bmp controls examples oleinfo ooRexxTry rc res simple sysinfo tutorial wav winsystem +SUBDIRS = bmp controls examples oleinfo ooRexxTry rc res simple sysinfo tutorial userGuide wav winsystem +DIST_SUBDIRS = bmp controls examples oleinfo ooRexxTry rc res simple sysinfo tutorial userGuide wav winsystem MAINTAINERCLEANFILES = Makefile.in *~ Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/PropertySheetDemo.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/PropertySheetDemo.rex 2011-03-24 00:00:46 UTC (rev 6872) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/PropertySheetDemo.rex 2011-03-24 00:03:18 UTC (rev 6873) @@ -1,7 +1,7 @@ /*----------------------------------------------------------------------------*/ /* */ /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */ -/* Copyright (c) 2005-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2005-2011 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: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/Makefile.am =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/Makefile.am 2011-03-24 00:00:46 UTC (rev 6872) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/Makefile.am 2011-03-24 00:03:18 UTC (rev 6873) @@ -1,6 +1,6 @@ #/*----------------------------------------------------------------------------*/ #/* */ -#/* Copyright (c) 2005-2008 Rexx Language Association. All rights reserved. */ +#/* Copyright (c) 2005-2011 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: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/ReadMe.txt =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/ReadMe.txt 2011-03-24 00:00:46 UTC (rev 6872) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/ReadMe.txt 2011-03-24 00:03:18 UTC (rev 6873) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2007-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2007-2011 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 */ @@ -40,31 +40,40 @@ 1. ooDialog Example Programs ------------------------------- - This directory contains example ooDialog programs. They are intended to be - relatively short and simple programs that demonstrate how to use some feature - of ooDialog. + This directory contains example ooDialog programs. They are intended to + be relatively short and simple programs that demonstrate how to use some + feature of ooDialog. - publicRoutines_demo.rex ooDialog contains a number of standard dialog and public routines. The - standard dialogs and public routines are designed to be easy to use. They - allow a programmer to added simple graphical elements to a program without - any detailed knowledge of the ooDialog framework. The publicRoutines_demo - program demonstrates how to use these public routines. + standard dialogs and public routines are designed to be easy to use. + They allow a programmer to added simple graphical elements to a program + without any detailed knowledge of the ooDialog framework. The + publicRoutines_demo program demonstrates how to use these public + routines. - fileNameDialog_demo.rex - The FileNameDialog public routine allows a programmer to present the user - with the standard Windows Open or Save file dialog. The fileNameDialog_demo - program demonstrates how to use this routine. + The FileNameDialog public routine allows a programmer to present the + user with the standard Windows Open or Save file dialog. The + fileNameDialog_demo program demonstrates how to use this routine. - imageButton.rex - This example program demonstrates some of the new features introduced in - ooRexx 4.0.0, including the .Image, .Imagelist classes, and the + This example program demonstrates some of the new features introduced + in ooRexx 4.0.0, including the .Image, .Imagelist classes, and the setImageList() method of the button class. - columnClickListView.rex - An example program that shows how to determine which row and which column - in a list view control the user has clicked on. + An example program that shows how to determine which row and which + column in a list view control the user has clicked on. + + - useTools.rex + + This example program shows how to use a dialog that is an "owned" + window. Owned windows have several constraints, one of which is that + they always remain above their owner window. This makes them useful to + create "tool palette" types of programs. The example program does just + that, demonstrates a main dialog with a tool palette. Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/CheckIn.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/CheckIn.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/ClosePalette.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/ClosePalette.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/CodeReview.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/CodeReview.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/LinkToWeb.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/LinkToWeb.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/LockModule.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/LockModule.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/LockProject.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/LockProject.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/Makefile.am =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/Makefile.am 2011-03-24 00:00:46 UTC (rev 6872) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/Makefile.am 2011-03-24 00:03:18 UTC (rev 6873) @@ -1,6 +1,6 @@ #/*----------------------------------------------------------------------------*/ #/* */ -#/* Copyright (c) 2005-2008 Rexx Language Association. All rights reserved. */ +#/* Copyright (c) 2005-2011 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 */ Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/ProjectReview.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/ProjectReview.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SaveAll.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SaveAll.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SaveModule.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SaveModule.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SaveProject.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SaveProject.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SplitModule.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/SplitModule.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/Update.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/Update.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/useTools.h =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/useTools.h (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/useTools.h 2011-03-24 00:03:18 UTC (rev 6873) @@ -0,0 +1,51 @@ +#define IDC_ST_TOOL_SIMULATOR 200 +#define IDC_PB_SHOW_PALETTE 210 +#define IDC_PB_LOCKMODULE 301 +#define IDC_PB_LOCKPROJECT 302 +#define IDC_PB_SPLITMODULE 303 +#define IDC_PB_SAVEMODULE 304 +#define IDC_PB_SAVEPROJECT 305 +#define IDC_PB_SAVEALL 306 +#define IDC_PB_CHECKIN 307 +#define IDC_PB_LINKTOWEB 308 +#define IDC_PB_CODEREVIEW 309 +#define IDC_PB_UPDATE 310 +#define IDC_PB_PROJECTREVIEW 311 +#define IDC_PB_CLOSE 400 + + + + + + + + +LockModule.bmp +LockProject.bmp +SplitModule.bmp +SaveModule.bmp +SaveProject.bmp +SaveAll.bmp +CheckIn.bmp +LinkToWeb.bmp +CodeReview.bmp +Update.bmp +ProjectReview.bmp + + + + + + + +ProtectDocumentHH.bmp +ProtectFormHH.bmp +RelationshipsHH.bmp +SaveAsHH.bmp +SaveFormDesignHH.bmp +SaveHH.bmp +TaskHH.bmp +WebInsertHyperlinkHH.bmp +WebPagePreviewHH.bmp +WebRefreshHH.bmp +ZoomHH.bmp Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/resources/useTools.h ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/useTools.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/useTools.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/useTools.rex 2011-03-24 00:03:18 UTC (rev 6873) @@ -0,0 +1,309 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** Owned window example + * + * This example demonstrates how to make a dialog window owned by another dialog + * window. It simulates a tool palette, which is owned by the main dialog. + * + * Windows that are owned by another window have several constraints. The owned + * window is always above its owner window. If the owner window is minimized, + * the owned window is hidden. When the owner window is destroyed, its owned + * windows are also destroyed. + * + * The programmer creates an owned window by setting its ownerDialog attribute + * to the owner window. Once set, the owner window can not be changed. The + * ownerDialog attribute can not be set once the Windows dialog of the owned + * windows has been created. The underlying Windows dialog of the owner window + * must be created before the underlying Windows dialog of the owned window is + * created. However, the owner Windows dialog does not have to be created yet + * when it is assigned to the owned window. + * + * The owned dialog always behaves as if it were executed using the popupAsChild + * method. That is, it is a modeless dialog that operates indepenedently of its + * owner dialog and it is destroyed when its owner (parent) dialog is destroyed. + * But, the programmer does not have to use the popupAsChild method to execute + * the owned dialog, the programmer can use any of the methods that start the + * underlying Windows dialog. + */ + + dlg = .MainDialog~new( , "resources\useTools.h") + + dlgTool = .ToolPaletteDlg~new( , "resources\useTools.h" ) + dlgTool~ownerDialog = dlg + + dlg~executeAsync("SHOWTOP", IDI_DLG_OOREXX) + + dlgTool~popup("SHOWTOP") + + dlg~endAsyncExecution + + +::requires "ooDialog.cls" + +::class 'MainDialog' subclass UserDialog + +::method init + forward class (super) continue + + self~create(30, 30, 466, 323, "Main Dialog", "CENTER MINIMIZEBOX MAXIMIZEBOX") + +::method defineDialog + + self~createStaticText(IDC_ST_TOOL_SIMULATOR, 50, 50, 366, 223, "CENTER", "") + self~createPushButton(IDC_PB_SHOW_PALETTE, 20, 299, 50, 14, "HIDDEN", "Show Palette", onShowPalette) + self~createPushButton(IDOK, 342, 299, 50, 14, "DEFAULT", "Ok") + self~createPushButton(IDCANCEL, 397, 299, 50, 14, , "Cancel") + +::method initDialog + expose font toolText + + d = .directory~new + d~weight = 700 + d~quality = 2 + font = self~createFontEx("Arial", 40, d) + + toolText = self~newStatic(IDC_ST_TOOL_SIMULATOR) + toolText~setFont(font) + + +::method onShowPalette unguarded + + self~paletteButton(.false) + + dlgTool = .ToolPaletteDlg~new( , "resources\useTools.h" ) + dlgTool~ownerDialog = self + + dlgTool~popup("SHOWTOP") + + +-- The leaving method is invoked automatically by ooDialog when the underlying +-- Windows dialog is being closed. It can be used to do some final clean up, +-- such as releasing resources. Note that in this program, it is not really +-- necessary to release the created font. As soon as the program ends, the +-- operating system will automatically release the font resource. +::method leaving + expose font + self~deleteFont(font) + + +-- The following methods just display the tool being used to simulate the +-- tool the user selected. A real program would need code to actually use +-- the selected tool. + +::method lockModule + expose toolText + toolText~setText('Running lockModule tool') + +::method lockProject + expose toolText + toolText~setText('Running lockProject tool') + +::method splitModule + expose toolText + toolText~setText('Running splitModule tool') + +::method saveModule + expose toolText + toolText~setText('Running saveModule tool') + +::method saveProject + expose toolText + toolText~setText('Running saveProject tool') + +::method saveAll + expose toolText + toolText~setText('Running saveAll tool') + +::method checkIn + expose toolText + toolText~setText('Running checkIn tool') + +::method linkToWeb + expose toolText + toolText~setText('Running linkToWeb tool') + +::method codeReview + expose toolText + toolText~setText('Running codeReview tool') + +::method update + expose toolText + toolText~setText('Running update tool') + +::method projectReview + expose toolText + toolText~setText('Running projectReview tool') + +::method closePalette + expose toolText + + toolText~setText('') + self~paletteButton(.true) + +::method paletteButton private + use strict arg showButton + + if showButton then self~newPushButton(IDC_PB_SHOW_PALETTE)~show + else self~newPushButton(IDC_PB_SHOW_PALETTE)~hide + + +::class 'ToolPaletteDlg' subclass UserDialog + +::method init + expose s buttonIDs + + forward class (super) continue + + self~populateButtons + + -- The bitmaps are 32 x 32, we want the button to have a 4 pixel margin so + -- that the button high-lighting for hot, pressed, default, etc., shows. + -- Convert the size in pixels to dialog units + s = .Size~new(40, 40) + self~pixel2dlgUnit(s) + + count = buttonIDs~items + + -- The last button is the close button. We palace an empty spot the width + -- of a button between the tool buttons and the last button. + count += 1 + + -- Now size the dialog to exactly fit the buttons + self~create(0, 30, count * s~width, s~height, "Tool Pallete", "NOMENU") + +::method defineDialog + expose s buttonIDs + + do i = 1 to buttonIDs~items + x = (i - 1) * s~width + if i == buttonIDs~items then x += s~width + self~createPushButton(buttonIDs[i], x, 0, s~width, s~height, 'BITMAP', , onToolClick) + end + +::method initDialog + expose buttonIDs buttonNames + + tempButton = self~newPushButton(buttonIDs[1]) + + size = tempButton~getRealSize + size~width -= size~width - 32 + size~height -= size~height - 32 + + flags = .DlgUtil~or(.Image~toID(ILC_COLOR24), .Image~toID(ILC_MASK)) + type = .Image~toID(IMAGE_BITMAP) + cRef = .Image~colorRef(0, 0, 0) + + align = .Image~toID(BUTTON_IMAGELIST_ALIGN_CENTER) + margin = .Rect~new(4) + + do i = 1 to buttonIDs~items + bmpButton = self~newPushButton(buttonIDs[i]) + + image = .Image~getImage(buttonNames[i], type) + imageList = .ImageList~create(size, flags, 1, 0) + imageList~addMasked(image, cRef) + + bmpButton~setImageList(imageList, margin, align) + image~release + end + + +-- The event handler for the button click event. We map which button was +-- clicked to the proper method in the parent / owner dialog and invoke that +-- method +::method onToolClick + use arg id, hwnd + + select + when id == self~constdir[IDC_PB_LOCKMODULE ] then self~ownerDialog~lockModule + when id == self~constdir[IDC_PB_LOCKPROJECT ] then self~ownerDialog~lockProject + when id == self~constdir[IDC_PB_SPLITMODULE ] then self~ownerDialog~splitModule + when id == self~constdir[IDC_PB_SAVEMODULE ] then self~ownerDialog~saveModule + when id == self~constdir[IDC_PB_SAVEPROJECT ] then self~ownerDialog~saveProject + when id == self~constdir[IDC_PB_SAVEALL ] then self~ownerDialog~saveAll + when id == self~constdir[IDC_PB_CHECKIN ] then self~ownerDialog~checkIn + when id == self~constdir[IDC_PB_LINKTOWEB ] then self~ownerDialog~linkToWeb + when id == self~constdir[IDC_PB_CODEREVIEW ] then self~ownerDialog~codeReview + when id == self~constdir[IDC_PB_UPDATE ] then self~ownerDialog~update + when id == self~constdir[IDC_PB_PROJECTREVIEW] then self~ownerDialog~projectReview + when id == self~constdir[IDC_PB_CLOSE ] then do + self~cancel:super + self~ownerDialog~closePalette + end + otherwise nop + end + -- End select + +-- Over-riding the ok and cancel methods, but not doing anything, prevents the +-- user from closing the tool palette unless she uses the close tool button. +::method ok +::method cancel + +-- Private method to fill 2 arrays with the button IDs and the button bitmap +-- names. +::method populateButtons private + expose buttonIDs buttonNames + + buttonIDs = .array~of(IDC_PB_LOCKMODULE, - + IDC_PB_LOCKPROJECT, - + IDC_PB_SPLITMODULE, - + IDC_PB_SAVEMODULE, - + IDC_PB_SAVEPROJECT, - + IDC_PB_SAVEALL, - + IDC_PB_CHECKIN, - + IDC_PB_LINKTOWEB, - + IDC_PB_CODEREVIEW, - + IDC_PB_UPDATE, - + IDC_PB_PROJECTREVIEW, - + IDC_PB_CLOSE - + ) + + buttonNames = .array~of('resources\LockModule.bmp', - + 'resources\LockProject.bmp', - + 'resources\SplitModule.bmp', - + 'resources\SaveModule.bmp', - + 'resources\SaveProject.bmp', - + 'resources\SaveAll.bmp', - + 'resources\CheckIn.bmp', - + 'resources\LinkToWeb.bmp', - + 'resources\CodeReview.bmp', - + 'resources\Update.bmp', - + 'resources\ProjectReview.bmp', - + 'resources\ClosePalette.bmp' - + ) + Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/useTools.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/Makefile.am =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/Makefile.am (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/Makefile.am 2011-03-24 00:03:18 UTC (rev 6873) @@ -0,0 +1,46 @@ +#/*----------------------------------------------------------------------------*/ +#/* */ +#/* Copyright (c) 2011-2011 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 */ +#/* distribution. A copy is also available at the following address: */ +#/* http://www.oorexx.org/license.html */ +#/* */ +#/* Redistribution and use in source and binary forms, with or */ +#/* without modification, are permitted provided that the following */ +#/* conditions are met: */ +#/* */ +#/* Redistributions of source code must retain the above copyright */ +#/* notice, this list of conditions and the following disclaimer. */ +#/* Redistributions in binary form must reproduce the above copyright */ +#/* notice, this list of conditions and the following disclaimer in */ +#/* the documentation and/or other materials provided with the distribution. */ +#/* */ +#/* Neither the name of Rexx Language Association nor the names */ +#/* of its contributors may be used to endorse or promote products */ +#/* derived from this software without specific prior written permission. */ +#/* */ +#/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +#/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +#/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +#/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +#/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +#/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +#/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +#/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +#/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +#/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +#/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#/* */ +#/*----------------------------------------------------------------------------*/ + +.NOTPARALLEL: + +SUBDIRS = exercises +DIST_SUBDIRS = exercises + +MAINTAINERCLEANFILES = Makefile.in *~ + +EXTRA_DIST = ReadMe.txt + Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/Makefile.am ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/ReadMe.txt =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/ReadMe.txt (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/ReadMe.txt 2011-03-24 00:03:18 UTC (rev 6873) @@ -0,0 +1,49 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + + ReadMe + + 1. ooDialog - Programs to Accompany the ooDialog User Guide + ------------------------------------------------------------ + + This subdirectory tree contains the example programs referred to in the + ooDialog User Guide. The programs are intended to give context to the + discussions in the User Guide, and may, or may not, be of use to ooRexx + programmers by themselves. + + The structure of the subdirectory tree and the programs themselves are + explained in the ooDialog User Guide. Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/ReadMe.txt ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise01.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise01.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise01.rex 2011-03-24 00:03:18 UTC (rev 6873) @@ -0,0 +1,60 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/* Exercise 1: The "Hello World" dialog */ + +/* Part 1 - the program: */ + +dlg = .MyDialog~new -- create an instance "dlg" of MyDialog +dlg~execute("SHOWTOP", IDI_DLG_OOREXX) -- show the window + + +/* Part 2 - Tell ooRexx that ooDialog is required for this program */ + +::requires "ooDialog.cls" + + +/* Part 3 - Define the MyDialog class */ + +::class MyDialog subclass UserDialog + +::method init -- auto-invoked when an instance is created. + forward class (super) continue -- call my superclass so it can do its thing. + /* Now create a window with the title "Hello World": */ + self~create(30, 30, 257, 123, "Hello World", "CENTER") + + Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise01.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02a.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02a.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02a.rex 2011-03-24 00:03:18 UTC (rev 6873) @@ -0,0 +1,56 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/* Exercise 02a: Putting "controls" on the window */ + + dlg = .MyDialog~new + dlg~execute("SHOWTOP", IDI_DLG_OOREXX) + + ::requires "ooDialog.cls" + +/*---------------------------------------------------------------------------*/ +::class 'MyDialog' subclass UserDialog + +::method init + forward class (super) continue + self~create(30, 30, 257, 123, "Words of Wisdom", "CENTER") + +::method defineDialog -- Invoked automatically by ooDialog. + self~createPushButton(901, 142, 99, 50, 14, "DEFAULT", "More wisdom") + self~createPushButton(IDCANCEL, 197, 99, 50, 14, ,"Cancel") + self~createStaticText(902, 40, 40, 200, 20, , - + "Complex problems have simple solutions"||.endofline||"- which are wrong.") Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02a.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02b.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02b.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02b.rex 2011-03-24 00:03:18 UTC (rev 6873) @@ -0,0 +1,88 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright ... [truncated message content] |
From: <mie...@us...> - 2011-03-28 16:19:59
|
Revision: 6886 http://oorexx.svn.sourceforge.net/oorexx/?rev=6886&view=rev Author: miesfeld Date: 2011-03-28 16:19:51 +0000 (Mon, 28 Mar 2011) Log Message: ----------- Sync sandbox ooDialog 4.2.0 with trunk through r6886 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogExtensions.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/SimpleUpDown.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02b.rex Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/Makefile.am sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBar.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarOORexx.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03.rex Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-03-28 01:40:24 UTC (rev 6885) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-03-28 16:19:51 UTC (rev 6886) @@ -1531,11 +1531,11 @@ use strict arg newBase return self~sendWinIntMsg(self~UDM_SETBASE, newBase, 0) -::method getBuddy unguarded +::method getBuddy unguarded -- TODO the buddy should be Rexx Objects, NOT hwnd use strict arg return self~sendWinIntMsgH(self~UDM_GETBUDDY, 0, 0) -::method setBuddy unguarded +::method setBuddy unguarded -- TODO the buddy should be Rexx Objects, NOT hwnd use strict arg hwndBuddy return self~sendWinHandleMsgH(self~UDM_SETBUDDY, hwndBuddy, 0) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogExtensions.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogExtensions.cls 2011-03-28 01:40:24 UTC (rev 6885) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogExtensions.cls 2011-03-28 16:19:51 UTC (rev 6886) @@ -633,7 +633,7 @@ if self~menuBar == .nil then raise syntax 93.900 array("There is no MenuBar attached to this dialog") if self~menuBar~isA(.UserMenuBar), \self~menuBar~isComplete then raise syntax 93.900 array("the UserMenuBar is not complete") - return self~menuBar~checkRadioItem(idstart, idend, idset) + return self~menuBar~checkRadio(idstart, idend, idset) syntax: c = condition('O') Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls 2011-03-28 01:40:24 UTC (rev 6885) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls 2011-03-28 16:19:51 UTC (rev 6886) @@ -85,14 +85,14 @@ ::method isEnabled external "LIBRARY oodialog menu_isEnabled" ::method isDisabled external "LIBRARY oodialog menu_isDisabled" ::method isGrayed external "LIBRARY oodialog menu_isDisabled" -::method isChecked external "LIBRARY oodialog menu_isDisabled" +::method isChecked external "LIBRARY oodialog menu_isChecked" ::method enable external "LIBRARY oodialog menu_enable" ::method disable external "LIBRARY oodialog menu_disable" ::method gray external "LIBRARY oodialog menu_disable" ::method check external "LIBRARY oodialog menu_check" ::method unCheck external "LIBRARY oodialog menu_unCheck" -::method checkRadioItem external "LIBRARY oodialog menu_checkRadio" +::method checkRadio external "LIBRARY oodialog menu_checkRadio" ::method hilite external "LIBRARY oodialog menu_hilite" ::method unHilite external "LIBRARY oodialog menu_unHilite" ::method getItemState external "LIBRARY oodialog menu_getItemState" Modified: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2011-03-28 01:40:24 UTC (rev 6885) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2011-03-28 16:19:51 UTC (rev 6886) @@ -218,6 +218,14 @@ File "${SamplesDir420}\examples\resources\*.rc" ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\menus + ; Add the files ... + File "${SamplesDir420}\menus\*.rex" + File "${SamplesDir420}\menus\*.h" + File "${SamplesDir420}\menus\*.bmp" + File "${SamplesDir420}\menus\*.rc" + + ; Set the installation directory: SetOutPath $INSTDIR\samples\oodialog\oleinfo ; Add the files ... File "${SamplesDir420}\oleinfo\*.rex" @@ -738,6 +746,7 @@ Delete $INSTDIR\samples\oodialog\examples\resources\Update.bmp Delete $INSTDIR\samples\oodialog\examples\resources\useTools.h Delete $INSTDIR\samples\oodialog\examples\useTools.rex + RMDir /r $INSTDIR\samples\oodialog\menus Delete $INSTDIR\samples\oodialog\ooDraw.h Delete $INSTDIR\samples\oodialog\PropertySheetDemo.rex Delete $INSTDIR\samples\oodialog\rc\PropertySheetDemo.h Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/Makefile.am =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/Makefile.am 2011-03-28 01:40:24 UTC (rev 6885) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/Makefile.am 2011-03-28 16:19:51 UTC (rev 6886) @@ -37,8 +37,8 @@ .NOTPARALLEL: -SUBDIRS = bmp controls examples oleinfo ooRexxTry rc res simple sysinfo tutorial userGuide wav winsystem -DIST_SUBDIRS = bmp controls examples oleinfo ooRexxTry rc res simple sysinfo tutorial userGuide wav winsystem +SUBDIRS = bmp controls examples menus oleinfo ooRexxTry rc res simple sysinfo tutorial userGuide wav winsystem +DIST_SUBDIRS = bmp controls examples menus oleinfo ooRexxTry rc res simple sysinfo tutorial userGuide wav winsystem MAINTAINERCLEANFILES = Makefile.in *~ Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/Makefile.am =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/Makefile.am (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/Makefile.am 2011-03-28 16:19:51 UTC (rev 6886) @@ -0,0 +1,43 @@ +#/*----------------------------------------------------------------------------*/ +#/* */ +#/* Copyright (c) 2011-2011 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 */ +#/* distribution. A copy is also available at the following address: */ +#/* http://www.oorexx.org/license.html */ +#/* */ +#/* Redistribution and use in source and binary forms, with or */ +#/* without modification, are permitted provided that the following */ +#/* conditions are met: */ +#/* */ +#/* Redistributions of source code must retain the above copyright */ +#/* notice, this list of conditions and the following disclaimer. */ +#/* Redistributions in binary form must reproduce the above copyright */ +#/* notice, this list of conditions and the following disclaimer in */ +#/* the documentation and/or other materials provided with the distribution. */ +#/* */ +#/* Neither the name of Rexx Language Association nor the names */ +#/* of its contributors may be used to endorse or promote products */ +#/* derived from this software without specific prior written permission. */ +#/* */ +#/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +#/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +#/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +#/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +#/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +#/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +#/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +#/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +#/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +#/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +#/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#/* */ +#/*----------------------------------------------------------------------------*/ + +.NOTPARALLEL: + +MAINTAINERCLEANFILES = Makefile.in *~ + +EXTRA_DIST = *.rex *.rc *.h *.bmp + Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/Makefile.am ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBar.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBar.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBar.rex 2011-03-28 16:19:51 UTC (rev 6886) @@ -0,0 +1,650 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * A simple UserDialog with a menu, an Edit control and an UpDown control. The + * menu is used to change styles or behaviour of the two controls. + * + * About half of the menu items pop up a dialog to collect user input needed to + * carry out the menu item action. + * + * This example uses a number of up-down controls in the different dialogs, + * making it a good example of how to use up-down controls in addition, to being + * a menu bar example. + */ + + dlg = .SimpleDialog~new + if dlg~initCode <> 0 then do + return 99 + end + + dlg~execute("SHOWTOP") + +return 0 + +::requires "ooDialog.cls" + +-- We need 10 digits to work with the numbers in the full range of an up-down +-- control (-2147,483,648 to 2,147,483,647) +::options digits 10 + +::class 'SimpleDialog' subclass UserDialog + +::constant DEFAULT_TEXT "1, 2, 3, the Edit control Menu actions work better with text in the 1st edit control." +::constant WICKED_TEXT "The wicked flee when none pursueth ..." +::constant LOTUS_TEXT "Lotus 123 had its ups and downs." +::constant IDES_TEXT "Ides of March - name of March 15 in Roman calendar." +::constant TITANIC_TEXT "472 lifeboat seats not used when 1,503 people died on the Titanic." + + +::method init + expose menuBar + + forward class (super) continue + + self~addSymbolicIDs + + if \ self~createMenuBar then do + self~initCode = 1 + return + end + + self~makeMenuItemConnections + + self~create(30, 30, 225, 150, "Menu Bar Example", "CENTER") + + +::method defineDialog + + self~createStatic(IDC_ST_EDIT, 10, 32, 40, 12, "TEXT RIGHT", "Enter Text:") + self~createEdit(IDC_EDIT, 52, 30, 160, 12, "AUTOSCROLLH KEEPSELECTION") + + self~createStatic(IDC_ST_UPD, 10, 63, 40, 12, "TEXT RIGHT", "Spin Me:") + self~createEdit(IDC_EDIT_BUDDY, 52, 60, 65, 14, "RIGHT NUMBER") + self~createUpDown(IDC_UPD, 257, 66, 12, 16, "WRAP ARROWKEYS AUTOBUDDY SETBUDDYINT") + + self~createPushButton(IDOK, 107, 115, 50, 14, "DEFAULT", "Ok") + self~createPushButton(IDCANCEL, 162, 115, 50, 14, , "Cancel") + +::method initDialog + expose menuBar edit upDown + + upDown = self~newUpDown(IDC_UPD) + upDown~setRange(1, 20000) + upDown~setPosition(1000) + + if \ menuBar~attachTo(self) then do + msg = "Failed to attach menu bar System Error Code:" .SystemErrorCode + z = MessageDialog(msg, self~hwnd, "Menu Error", "OK", "WARNING") + end + + edit = self~newEdit(IDC_EDIT) + edit~setText(.SimpleDialog~DEFAULT_TEXT) + + self~setRadioChecks(ID_EDITCONTROL_UNRESTRICTED) + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +-- The methods below, all beginning with 'on' are the implementation for each +-- of the menu item command events. +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::method onHideEdit unguarded + expose menuBar edit + + if menuBar~isChecked(ID_FILES_HIDE_EDIT) then do + menuBar~uncheck(ID_FILES_HIDE_EDIT) + self~newStatic(IDC_ST_EDIT)~show + edit~show + end + else do + menuBar~check(ID_FILES_HIDE_EDIT) + self~newStatic(IDC_ST_EDIT)~hide + edit~hide + end + +::method onHideUpDown unguarded + expose menuBar upDown + + if menuBar~isChecked(ID_FILES_HIDE_UPDOWN) then do + menuBar~uncheck(ID_FILES_HIDE_UPDOWN) + self~newStatic(IDC_ST_UPD)~show + self~newEdit(IDC_EDIT_BUDDY)~show + upDown~show + end + else do + menuBar~check(ID_FILES_HIDE_UPDOWN) + self~newStatic(IDC_ST_UPD)~hide + self~newEdit(IDC_EDIT_BUDDY)~hide + upDown~hide + end + +::method onExit unguarded + self~cancel + + +::method onLower unguarded + expose menuBar edit + + alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_LOWER) + + self~setRadioChecks(ID_EDITCONTROL_LOWER) + edit~replaceStyle("UPPER NUMBER", "LOWER") + + text = edit~getText + edit~setText(text~lower) + + if \ alreadyChecked then do + edit~assignFocus + edit~select(1, 1) + + msg = "You can only enter lower case letters in" || .endOfLine || - + "the edit control now. Try it." + z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") + end + + +::method onNumber unguarded + expose menuBar edit + + alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_NUMBER) + + self~setRadioChecks(ID_EDITCONTROL_NUMBER) + edit~replaceStyle("LOWER UPPER", "NUMBER") + + text = edit~getText + edit~setText(text~translate("", xrange("00"X, "/") || xrange(":", "FF"X))~space(0)) + + if \ alreadyChecked then do + edit~assignFocus + edit~select(1, 1) + + msg = "You can only enter numbers in the" || .endOfLine || - + "edit control now. Try it." + z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") + end + + +::method onUpper unguarded + expose menuBar edit + + alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_UPPER) + + self~setRadioChecks(ID_EDITCONTROL_UPPER) + edit~replaceStyle("LOWER NUMBER", "UPPER") + + text = edit~getText + edit~setText(text~upper) + + if \ alreadyChecked then do + edit~assignFocus + edit~select(1, 1) + + msg = "You can only enter upper case letters in" || .endOfLine || - + "the edit control now. Try it." + z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") + end + + +::method onUnRestricted unguarded + expose menuBar edit + + alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_UNRESTRICTED) + + self~setRadioChecks(ID_EDITCONTROL_UNRESTRICTED) + edit~removeStyle("LOWER NUMBER UPPER") + + text = edit~getText + edit~setText(.SimpleDialog~DEFAULT_TEXT) + + if \ alreadyChecked then do + edit~assignFocus + edit~select(1, 1) + + msg = "You can now enter unrestricted text in" || .endOfLine || - + "the edit control. Try it." + z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") + end + + +::method onInsert unguarded + expose edit + + dlg = .InsertDialog~new("simpleMenuBarDialogs.rc", IDD_INSERT_DIALOG, , "simpleMenuBarDialogs.h") + + if dlg~execute("SHOWTOP", IDI_DLG_OODIALOG) == .PlainBaseDialog~IDOK then do + edit~setText(dlg~selectedText) + end + + +::method onSelect unguarded + expose edit + + dlg = .SelectDialog~new("simpleMenuBarDialogs.rc", IDD_SELECT_DIALOG, , "simpleMenuBarDialogs.h") + dlg~currentText = edit~getText + edit~select(1, 1) + + if dlg~execute("SHOWTOP", IDI_DLG_APPICON) == .PlainBaseDialog~IDOK then do + s = dlg~selection + edit~select(s~x, s~y) + end + + +::method onHexidecimal unguarded + expose menuBar upDown + + if menuBar~isChecked(ID_UPDOWNCONTROL_HEXIDECIMAL) then do + menuBar~uncheck(ID_UPDOWNCONTROL_HEXIDECIMAL) + upDown~setBase(10) + end + else do + menuBar~check(ID_UPDOWNCONTROL_HEXIDECIMAL) + upDown~setBase(16) + end + + +::method onSetAcceleration unguarded + expose upDown + + dlg = .AccelDialog~new("simpleMenuBarDialogs.rc", IDD_ACCEL_DIALOG, , "simpleMenuBarDialogs.h") + + if dlg~execute("SHOWTOP", IDI_DLG_APPICON2) == .PlainBaseDialog~IDOK then do + accel = dlg~acceleration + upDown~setAcceleration(accel) + end + + +::method onSetRange unguarded + expose upDown + + dlg = .RangeDialog~new("simpleMenuBarDialogs.rc", IDD_RANGE_DIALOG, , "simpleMenuBarDialogs.h") + + if dlg~execute("SHOWTOP", IDI_DLG_OOREXX) == .PlainBaseDialog~IDOK then do + r = dlg~range + upDown~setRange(r~x, r~y) + end + + +::method onPosition unguarded + expose upDown + + dlg = .PositionDialog~new("simpleMenuBarDialogs.rc", IDD_POSITION_DIALOG, , "simpleMenuBarDialogs.h") + dlg~upDown = upDown + + if dlg~execute("SHOWTOP", IDI_DLG_DEFAULT) == .PlainBaseDialog~IDOK then do + p = dlg~position + upDown~setPosition(p) + end + + +::method onAbout unguarded + + dlg = .AboutDialog~new("simpleMenuBarDialogs.rc", IDD_ABOUT_DIALOG, , "simpleMenuBarDialogs.h") + + dlg~execute("SHOWTOP", IDI_DLG_DEFAULT) + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +-- End of the implementation methods for each of the menu item command events. +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ + + +-- Convenience method to set the radio button menu items. The checkRadio() +-- method takes a start resource ID and an end resource, and the resource ID for +-- a single menu item within that range of IDs. It removes the radio button +-- check mark from all the menu items in the range and adds the radio button +-- check mark to item specified by the third argument. +::method setRadioChecks private + expose menuBar + use strict arg item + + menuBar~checkRadio(ID_EDITCONTROL_LOWER, ID_EDITCONTROL_UNRESTRICTED, item) + + +-- Creates a UserMenuBar +::method createMenuBar private + expose menuBar + + -- Create a menu bar whose constdir attribute is copied from this dialog's + -- constdir, and has a symbolic resource ID of IDM_MENUBAR. + menuBar = .UserMenuBar~new(IDM_MENUBAR, self) + + -- Create the menu bar template. + menuBar~addPopup(IDM_POP_FILES, "Files") + menuBar~addItem(ID_FILES_HIDE_EDIT, "Hide Edit Control", "DEFAULT CHECK") + menuBar~addItem(ID_FILES_HIDE_UPDOWN, "Hide UpDown Control", " CHECK") + menuBar~addSeparator(IDM_SEP_FILES) + menuBar~addItem(ID_FILES_EXIT, "Exit", "END") + + menuBar~addPopup(IDM_POP_EDITCONTROL, "Edit Control") + menuBar~addItem(ID_EDITCONTROL_LOWER, "Lower Case Only", "CHECK RADIO") + menuBar~addItem(ID_EDITCONTROL_NUMBER, "Numbers Only", "CHECK RADIO") + menuBar~addItem(ID_EDITCONTROL_UPPER, "Upper Case Only", "CHECK RADIO") + menuBar~addItem(ID_EDITCONTROL_UNRESTRICTED, "No Restriction", "CHECK RADIO DEFAULT") + menuBar~addSeparator(IDM_SEP_EDITCONTROL) + menuBar~addItem(ID_EDITCONTROL_INSERT, "Insert Text ...") + menuBar~addItem(ID_EDITCONTROL_SELECT, "Select Text ...", "END") + + menuBar~addPopup(IDM_POP_UPDOWNCONTROL, "UpDown Control") + menuBar~addItem(ID_UPDOWNCONTROL_HEXIDECIMAL, "Hexidecimal", "CHECK") + menuBar~addSeparator(IDM_SEP_UPDOWNCONTROL) + menuBar~addItem(ID_UPDOWNCONTROL_SET_ACCELERATION, "Set Acceleration ...") + menuBar~addItem(ID_UPDOWNCONTROL_SET_RANGE, "Set Range ...") + menuBar~addItem(ID_UPDOWNCONTROL_SET_POSITION, "Set Position ...", "END") + + menuBar~addPopup( IDM_POP_HELP, "Help", "END") + menuBar~addItem(ID_HELP_ABOUT, "About Simple Menu", "END") + + if \ menuBar~complete then do + say 'User menu bar completion error:' .SystemErrorCode SysGetErrortext(.SystemErrorCode) + return .false + end + + return .true + +-- Connect each of the command menu items with a method. +::method makeMenuItemConnections private + expose menuBar + + menuBar~connectCommandEvent(ID_FILES_HIDE_EDIT, onHideEdit, self) + menuBar~connectCommandEvent(ID_FILES_HIDE_UPDOWN, onHideUpDown, self) + menuBar~connectCommandEvent(ID_FILES_EXIT, onExit, self) + + menuBar~connectCommandEvent(ID_EDITCONTROL_LOWER, onLower, self) + menuBar~connectCommandEvent(ID_EDITCONTROL_NUMBER, onNumber, self) + menuBar~connectCommandEvent(ID_EDITCONTROL_UPPER, onUpper, self) + menuBar~connectCommandEvent(ID_EDITCONTROL_UNRESTRICTED, onUnRestricted, self) + menuBar~connectCommandEvent(ID_EDITCONTROL_INSERT, onInsert, self) + menuBar~connectCommandEvent(ID_EDITCONTROL_SELECT, onSelect, self) + + menuBar~connectCommandEvent(ID_UPDOWNCONTROL_HEXIDECIMAL, onHexiDecimal, self) + menuBar~connectCommandEvent(ID_UPDOWNCONTROL_SET_ACCELERATION, onSetAcceleration, self) + menuBar~connectCommandEvent(ID_UPDOWNCONTROL_SET_RANGE, onSetRange, self) + menuBar~connectCommandEvent(ID_UPDOWNCONTROL_SET_POSITION, onPosition, self) + + menuBar~connectCommandEvent(ID_HELP_ABOUT, onAbout, self) + +-- Populate the constdir with symbolic resource IDs. +-- +-- This is done just to demonstrate that there is no reason why the constdir has +-- to be populated automatically through the use of a header file or #define +-- lines in a resource script. Normally these symbolic IDs whould be in the +-- simpleMenuBarDialogs.h file. +::method addSymbolicIDs private + + self~constDir[IDC_EDIT] = 900 + self~constDir[IDC_ST_EDIT] = 901 + self~constDir[IDC_UPD] = 902 + self~constDir[IDC_ST_UPD] = 903 + self~constDir[IDC_EDIT_BUDDY] = 904 + + self~constDir[IDM_MENUBAR] = 800 + self~constDir[IDM_POP_FILES] = 810 + self~constDir[ID_FILES_HIDE_EDIT] = 811 + self~constDir[ID_FILES_HIDE_UPDOWN] = 812 + self~constDir[IDM_SEP_FILES] = 813 + self~constDir[ID_FILES_EXIT] = 814 + self~constDir[IDM_POP_EDITCONTROL] = 820 + self~constDir[ID_EDITCONTROL_LOWER] = 821 + self~constDir[ID_EDITCONTROL_NUMBER] = 822 + self~constDir[ID_EDITCONTROL_UPPER] = 823 + self~constDir[ID_EDITCONTROL_UNRESTRICTED] = 824 + self~constDir[IDM_SEP_EDITCONTROL] = 825 + self~constDir[ID_EDITCONTROL_INSERT] = 826 + self~constDir[ID_EDITCONTROL_SELECT] = 827 + self~constDir[IDM_POP_UPDOWNCONTROL] = 830 + self~constDir[ID_UPDOWNCONTROL_HEXIDECIMAL] = 831 + self~constDir[IDM_SEP_UPDOWNCONTROL] = 832 + self~constDir[ID_UPDOWNCONTROL_SET_ACCELERATION] = 833 + self~constDir[ID_UPDOWNCONTROL_SET_RANGE] = 834 + self~constDir[ID_UPDOWNCONTROL_SET_POSITION] = 835 + self~constDir[IDM_POP_HELP] = 840 + self~constDir[ID_HELP_ABOUT] = 841 + +::method initAutoDetection + self~noAutoDetection + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +-- The following classes all implement a single dialog that is used to collect +-- information for the user needed to carry out one of the menu item commands. +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ + +::class 'InsertDialog' subclass RcDialog + +::attribute selectedText + +::method initDialog + self~newRadioButton(IDC_RB_WICKED)~check + +::method ok unguarded + + select + when self~newRadioButton(IDC_RB_WICKED)~checked then self~selectedText = .SimpleDialog~WICKED_TEXT + when self~newRadioButton(IDC_RB_LOTUS)~checked then self~selectedText = .SimpleDialog~LOTUS_TEXT + when self~newRadioButton(IDC_RB_IDES)~checked then self~selectedText = .SimpleDialog~IDES_TEXT + when self~newRadioButton(IDC_RB_TITANIC)~checked then self~selectedText = .SimpleDialog~TITANIC_TEXT + otherwise self~selectedText = "" + end + -- End select + + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'SelectDialog' subclass RcDialog + +::attribute selection +::attribute currentText + +::method initDialog + expose updStart updEnd currentText + + self~newStatic(IDC_ST_CURRENT_TEXT)~setText(currentText) + + updStart = self~newUpDown(IDC_UPD_START) + updStart~setRange(0, currentText~length) + updStart~setPosition(1) + + updEnd = self~newUpDown(IDC_UPD_END) + updEnd~setRange(0, currentText~length) + updEnd~setPosition(1) + +::method ok unguarded + expose updStart updEnd + + self~selection = .Point~new(updStart~getPosition, updEnd~getPosition) + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'AccelDialog' subclass RcDialog + +::attribute acceleration + +::method initDialog + + upd = self~newUpDown(IDC_UPD_ACCEL_SECONDS0) + upd~setPosition(0) + upd~disable + self~newEdit(IDC_EDIT_ACCEL_SECONDS0)~disable + + upd = self~newUpDown(IDC_UPD_ACCEL0) + upd~setPosition(1) + upd~disable + self~newEdit(IDC_EDIT_ACCEL0)~disable + + do i = 1 to 3 + upd = self~newUpDown(IDC_UPD_ACCEL_SECONDS || i) + upd~setRange(i, 32) + upd~setPosition(i) + + upd = self~newUpDown(IDC_UPD_ACCEL || i) + upd~setRange(2 ** i, 256) + upd~setPosition(2 ** i) + end + + self~newUpDown(IDC_UPD_ACCEL_SECONDS1)~assignFocus + + +::method ok unguarded + + a = .array~new(3) + + do i = 1 to 3 + d = .directory~new + + updS = self~newUpDown(IDC_UPD_ACCEL_SECONDS || i) + updA = self~newUpDown(IDC_UPD_ACCEL || i) + + d~seconds = updS~getPosition + d~increment = updA~getPosition + a[i] = d + end + + -- Check that the user has an unique value for each acceleration entry. + check = .set~of(a[1]~seconds, a[2]~seconds, a[3]~seconds) + if check~items <> 3 then do + msg = "For each of the 3 acceleration input" || .endOfLine || - + "lines, you must use a unique value for" || .endOfLine || - + "seconds. Found:" a[1]~seconds',' a[2]~seconds', and' a[3]~seconds'.' + + z = MessageDialog(msg, self~hwnd, "Acceleration Input Error", "OK", "STOP") + return .false + end + + -- Sort the entries by seconds, ascending, using brute force. + max = 0; min = 4 + do i = 1 to 3 + if a[i]~seconds > max then max = i + if a[i]~seconds < min then min = i + end + + -- The user only has 3 up-down pairs she can set. But, we also have the + -- first disabled up-down pair for seconds == 0, increment == 1 + aa = .array~new(4) + aa[1] = .directory~new~~setEntry("SECONDS", 0)~~setEntry("INCREMENT", 1) + + aa[2] = a[min] + aa[4] = a[max] + + do i = 1 to 3 + if i \== min, i \== max then do + aa[3] = a[i] + leave + end + end + + self~acceleration = aa + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'RangeDialog' subclass RcDialog + +::attribute range + +::method initDialog + expose updLow updHigh + + accel = .array~new(4) + accel[1] = .directory~new~~setEntry("SECONDS", 0)~~setEntry("INCREMENT", 1) + accel[2] = .directory~new~~setEntry("SECONDS", 1)~~setEntry("INCREMENT", 32) + accel[3] = .directory~new~~setEntry("SECONDS", 2)~~setEntry("INCREMENT", 64) + accel[4] = .directory~new~~setEntry("SECONDS", 3)~~setEntry("INCREMENT", 256) + + updLow = self~newUpDown(IDC_UPD_LOW) + updLow~setRange(-2147483648, 2147483647) + updLow~setPosition(0) + updLow~setAcceleration(accel) + + updHigh = self~newUpDown(IDC_UPD_HIGH) + updHigh~setRange(-2147483648, 2147483647) + updHigh~setPosition(0) + updHigh~setAcceleration(accel) + +::method ok unguarded + expose updLow updHigh + + self~range = .Point~new(updLow~getPosition, updHigh~getPosition) + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'PositionDialog' subclass RcDialog + +::attribute position +::attribute upDown + +::method initDialog + expose upDown upd + + upd = self~newUpDown(IDC_UPD_POSITION) + + upd~setRange(upDown~getRange) + upd~setPosition(upDown~getPosition) + +::method ok unguarded + expose upd + + self~position = upd~getPosition + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'AboutDialog' subclass RcDialog + +::method initDialog + expose font + + bitmap = .Image~getImage("simpleMenuBarOORexx.bmp") + self~newStatic(IDC_ST_BITMAP)~setImage(bitmap) + + font = self~createFontEx("Ariel", 14) + self~newStatic(IDC_ST_ABOUT)~setFont(font) + +::method leafing + expose font + self~deleteFont(font) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBar.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.h =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.h (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.h 2011-03-28 16:19:51 UTC (rev 6886) @@ -0,0 +1,77 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +#define IDD_INSERT_DIALOG 101 +#define IDD_SELECT_DIALOG 103 +#define IDD_ACCEL_DIALOG 105 +#define IDD_RANGE_DIALOG 107 +#define IDD_POSITION_DIALOG 109 +#define IDD_ABOUT_DIALOG 111 +#define IDC_ST_BITMAP 1000 +#define IDC_ST_CURRENT_TEXT 1001 +#define IDC_ST_EXPLANATION 1002 +#define IDC_UPD_ACCEL2 1003 +#define IDC_UPD_POSITION 1004 +#define IDC_EDIT_ACCEL2 1005 +#define IDC_EDIT_POSITION 1006 +#define IDC_UPD_ACCEL_SECONDS1 1007 +#define IDC_UPD_LOW 1008 +#define IDC_RB_WICKED 1009 +#define IDC_UPD_ACCEL_SECONDS2 1010 +#define IDC_UPD_START 1011 +#define IDC_EDIT_ACCEL_SECONDS2 1012 +#define IDC_UPD_HIGH 1013 +#define IDC_EDIT_LOW 1014 +#define IDC_UPD_ACCEL3 1015 +#define IDC_EDIT_ACCEL3 1016 +#define IDC_EDIT_HIGH 1017 +#define IDC_RB_LOTUS 1018 +#define IDC_UPD_ACCEL_SECONDS3 1019 +#define IDC_EDIT_ACCEL_SECONDS3 1020 +#define IDC_RB_IDES 1021 +#define IDC_EDIT_START 1022 +#define IDC_RB_TITANIC 1023 +#define IDC_UPD_ACCEL_SECONDS0 1024 +#define IDC_EDIT_END 1025 +#define IDC_EDIT_ACCEL_SECONDS0 1026 +#define IDC_UPD_END 1027 +#define IDC_EDIT_ACCEL0 1028 +#define IDC_UPD_ACCEL1 1029 +#define IDC_EDIT_ACCEL_SECONDS1 1030 +#define IDC_EDIT_ACCEL1 1031 +#define IDC_UPD_ACCEL0 1032 +#define IDC_ST_ABOUT 1033 Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.h ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.rc =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.rc (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.rc 2011-03-28 16:19:51 UTC (rev 6886) @@ -0,0 +1,166 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +#include <windows.h> +#include "simpleMenuBarDialogs.h" + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_ABOUT_DIALOG DIALOGEX 0, 0, 231, 105 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "About Menu Bar Example" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + CONTROL "", IDC_ST_BITMAP, WC_STATIC, SS_BITMAP | 0x00000040, 16, 7, 102, 71 + CTEXT "An example of using a menu bar in ooDialog.", IDC_ST_ABOUT, 141, 10, 76, 56, SS_CENTER + LTEXT "ooDialog an ooRexx Extenstion", IDC_STATIC, 16, 83, 107, 15, SS_LEFT + DEFPUSHBUTTON "OK", IDOK, 170, 84, 50, 14 +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_ACCEL_DIALOG DIALOGEX 0, 0, 227, 163 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Set Acceleration" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + CTEXT "Example: After 1 second(s) accelerate 2x.", IDC_STATIC, 9, 9, 224, 8, SS_CENTER + LTEXT "After", IDC_STATIC, 15, 38, 16, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL_SECONDS0, 36, 35, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL_SECONDS0, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 53, 35, 12, 14 + LTEXT "second(s) accelerate", IDC_STATIC, 73, 38, 67, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL0, 145, 36, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL0, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 163, 36, 12, 14 + LTEXT "X.", IDC_STATIC, 178, 38, 8, 8, SS_LEFT + LTEXT "After", IDC_STATIC, 15, 63, 16, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL_SECONDS1, 36, 60, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL_SECONDS1, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 53, 60, 12, 14 + LTEXT "second(s) accelerate", IDC_STATIC, 73, 63, 67, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL1, 145, 61, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL1, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 163, 61, 12, 14 + LTEXT "X.", IDC_STATIC, 178, 63, 8, 8, SS_LEFT + LTEXT "After", IDC_STATIC, 15, 89, 16, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL_SECONDS2, 36, 86, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL_SECONDS2, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 53, 86, 12, 14 + LTEXT "second(s) accelerate", IDC_STATIC, 73, 89, 67, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL2, 145, 87, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL2, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 163, 87, 12, 14 + LTEXT "X.", IDC_STATIC, 178, 117, 8, 8, SS_LEFT + LTEXT "After", IDC_STATIC, 15, 117, 16, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL_SECONDS3, 36, 114, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL_SECONDS3, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 53, 114, 12, 14 + LTEXT "second(s) accelerate", IDC_STATIC, 73, 117, 67, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL3, 145, 115, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL3, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 163, 115, 12, 14 + LTEXT "X.", IDC_STATIC, 178, 89, 8, 8, SS_LEFT + DEFPUSHBUTTON "OK", IDOK, 115, 142, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 170, 142, 50, 14 +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_INSERT_DIALOG DIALOGEX 0, 0, 283, 149 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Insert Text" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + DEFPUSHBUTTON "OK", IDOK, 171, 128, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 226, 128, 50, 14 + CTEXT "Select the Text to Insert", IDC_STATIC, 7, 11, 269, 8, SS_CENTER + AUTORADIOBUTTON "The wicked flee when none pursueth ...", IDC_RB_WICKED, 11, 33, 141, 8, WS_TABSTOP + AUTORADIOBUTTON "Lotus 123 had its ups and downs.", IDC_RB_LOTUS, 11, 53, 122, 8 + AUTORADIOBUTTON "Ides of March - name of March 15 in Roman calendar.", IDC_RB_IDES, 11, 74, 186, 8, WS_TABSTOP + AUTORADIOBUTTON "472 lifeboat seats not used when 1,503 people died on the Titanic.", IDC_RB_TITANIC, 11, 95, 226, 8, WS_TABSTOP +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_POSITION_DIALOG DIALOGEX 0, 0, 186, 95 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Set New Position" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + DEFPUSHBUTTON "OK", IDOK, 74, 74, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 129, 74, 50, 14 + CTEXT "Pick a new position for the up-down control.", IDC_STATIC, 9, 11, 170, 8, SS_CENTER + LTEXT "New Position:", IDC_STATIC, 11, 41, 44, 8, SS_LEFT + EDITTEXT IDC_EDIT_POSITION, 56, 38, 68, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_POSITION, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 112, 38, 12, 14 +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_RANGE_DIALOG DIALOGEX 0, 0, 203, 164 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Set UpDown Range" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + CTEXT "Set the start and end values for the range.", IDC_STATIC, 11, 9, 185, 13, SS_CENTER + LTEXT "The complete possible range for an UpDown control is -2147,483,648 to 2,147,483,647. The start value does not have to be lower than the end value. 5 to -5 is a valid range.", IDC_ST_EXPLANATION, 11, 36, 180, 35, SS_LEFT + RTEXT "Start value:", IDC_STATIC, 8, 85, 41, 8, SS_RIGHT + EDITTEXT IDC_EDIT_LOW, 51, 84, 70, 12, ES_AUTOHSCROLL + CONTROL "", IDC_UPD_LOW, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 109, 84, 12, 12 + RTEXT "End value:", IDC_STATIC, 8, 117, 41, 8, SS_RIGHT + EDITTEXT IDC_EDIT_HIGH, 51, 116, 70, 12, ES_AUTOHSCROLL + CONTROL "", IDC_UPD_HIGH, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 109, 116, 12, 12 + DEFPUSHBUTTON "OK", IDOK, 91, 143, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 146, 143, 50, 14 +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_SELECT_DIALOG DIALOGEX 0, 0, 277, 122 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Select Text" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + GROUPBOX "The current text in the edit control available for selection is:", IDC_STATIC, 7, 10, 261, 34 + DEFPUSHBUTTON "OK", IDOK, 165, 101, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 220, 101, 50, 14 + LTEXT "Static", IDC_ST_CURRENT_TEXT, 11, 26, 256, 10, SS_LEFT | SS_WORDELLIPSIS + LTEXT "Selection start position", IDC_STATIC, 11, 58, 86, 8, SS_LEFT + LTEXT "Selection end position", IDC_STATIC, 120, 58, 70, 8, SS_LEFT + EDITTEXT IDC_EDIT_START, 11, 72, 40, 14, ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + CONTROL "", IDC_UPD_START, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_WRAP | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 39, 72, 12, 14 + EDITTEXT IDC_EDIT_END, 120, 72, 40, 14, ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + CONTROL "", IDC_UPD_END, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_WRAP | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 148, 72, 12, 14 +} Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.rc ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarOORexx.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarOORexx.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/SimpleUpDown.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/SimpleUpDown.rex 2011-03-28 01:40:24 UTC (rev 6885) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/simple/SimpleUpDown.rex 2011-03-28 16:19:51 UTC (rev 6886) @@ -41,8 +41,7 @@ dlg = .SimpleDialog~new - dlg~Execute("SHOWTOP") - dlg~deinstall + dlg~execute("SHOWTOP") return 0 @@ -63,8 +62,8 @@ self~createStatic(IDC_STATIC, 20, 21, 40, 12, "TEXT RIGHT", "Spin Me:") self~createEdit(IDC_EDIT_BUDDY, 62, 20, 65, 12, "RIGHT NUMBER") self~createUpDown(IDC_UPD, 81, 26, 12, 16, "WRAP ARROWKEYS AUTOBUDDY SETBUDDYINT") - self~addButton(IDOK, 22, 45, 50, 14, "Ok", , "DEFAULT") - self~addButton(IDCANCEL, 77, 45, 50, 14, "Cancel") + self~createPushButton(IDOK, 22, 45, 50, 14, "DEFAULT", "Ok") + self~createPushButton(IDCANCEL, 77, 45, 50, 14, , "Cancel") ::method initDialog Modified: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02b.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02b.rex 2011-03-28 01:40:24 UTC (rev 6885) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise02b.rex 2011-03-28 16:19:51 UTC (rev 6886) @@ -77,12 +77,7 @@ say "'More wisdom' button clicked" newText = self~newStatic(902) - if newText == .nil then do - say "Method okClicked: newStatic bad!" - return - end i = random(1,7) newText~setText(arrWow[i]) - newText~show return Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03.rex 2011-03-28 16:19:51 UTC (rev 6886) @@ -0,0 +1,214 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/* Exercise 03: Re-structuring the "Words of Widom" application */ + +/******************************************************************************* + ooDialog User Guide + Exercise03 v00-01 24Mar11 + -------- + + A re-structuring of the "Words of Wisdom" code. + + ******************************************************************************/ + +dlg = .MyDialog~new +dlg~execute("SHOWTOP", IDI_DLG_OOREXX) + + +::requires "ooDialog.cls" + +/*////////////////////////////////////////////////////////////////////////////// + ============================================================================== + UI - Class 'MyDialog' v00-01 24Mar11 + --------------------- + Defines the UI + = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ + +::class 'MyDialog' subclass UserDialog + + /*---------------------------------------------------------------------------- + init - initialises the dialog + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + ::method init + expose wowPicker + forward class (super) continue + self~create(30, 30, 257, 123, "Words of Wisdom", "CENTER") + wowPicker = .WowPicker~new + return + + /*---------------------------------------------------------------------------- + defineDialog - defines the "Words of Wisdom" controls + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + ::method defineDialog -- Invoked automatically by ooDialog. + self~createPushButton(901, 142, 99, 50, 14, "DEFAULT", "More wisdom", OkClicked) + self~createPushButton(IDCANCEL, 197, 99, 50, 14, ,"Cancel") + self~createStaticText(902, 40, 40, 200, 40, , "Click 'More wisdom'") + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*---------------------------------------------------------------------------- + okClicked - Actions the "More wisdom" control + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + ::method okClicked + expose wowPicker +/* + arrWow = .array~new + arrWow[1] = "Agnes Allen's Law:"||.endofline|| - + "Almost anything is easier to get into than out of." + arrWow[2] = "Airplane Law:"||.endofline||"When the plane you are on is late," - + ||.endofline||"the plane you want to transfer to is on time." + arrWow[3] = "Fourteenth Corollary of Atwood's General Law of Dynamic Negatives:" - + ||.endofline||"No books are lost by loaning"||.endofline|| - + "except those you particularly wanted to keep." + arrWow[4] = "Baker's Byroad:"||.endofline||"When you're over the hill, you pick up speed." + arrWow[5] = "First Law of Bicycling:"||.endofline|| - + "No matter which way you ride, it's uphill and against the wind." + arrWow[6] = "Brooks's Law:"||.endofline|| - + "Adding manpower to a late software project makes it later." + arrWow[7] = "Grossman's Misquote of H. L. Mencken"||.endofline|| - + "Complex problems have simple, easy-to-understand wrong answers." +*/ + newText = self~newStatic(902) + wow = wowPicker~pickWow + newText~setText(wow) + return + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + +/*============================================================================*/ + +/*////////////////////////////////////////////////////////////////////////////// + ============================================================================== + WowPicker v00-01 24Mar11 + ------------- + Single-method class that returns a set of Words of Wisdom, or a different + set than that currently returned (makes the new set the current set). + The size of the set is defined by configuration (but not in this version) + + interface{ + pickWow( out string wow ) + } + = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ + +::CLASS WowPicker + +/*---------------------------------------------------------------------------- + init - gets an initial Wow set from the WowData object. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + ::METHOD init + expose dataSource wowSet + dataSource = .WowData~new + wowSet = dataSource~readWowSet + return + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - -... [truncated message content] |
From: <mie...@us...> - 2011-04-21 22:56:18
|
Revision: 6930 http://oorexx.svn.sourceforge.net/oorexx/?rev=6930&view=rev Author: miesfeld Date: 2011-04-21 22:56:09 +0000 (Thu, 21 Apr 2011) Log Message: ----------- Sync up sandbox ooDialog 4.2.0 with main through r6929 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/BinaryMenuBar.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03a.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03b-app.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03b-bus.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03b-dat.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03b-gui.rex Removed Paths: ------------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBar.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarDialogs.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBarOORexx.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise03.rex Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls 2011-04-21 22:54:46 UTC (rev 6929) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls 2011-04-21 22:56:09 UTC (rev 6930) @@ -289,6 +289,7 @@ end found = 0; n = 0 + menuName = menuName~translate isMenuEx = .false fl = f~lines do while found = 0, fl > 0 Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-04-21 22:54:46 UTC (rev 6929) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-04-21 22:56:09 UTC (rev 6930) @@ -5743,15 +5743,15 @@ * simple string. We have to special case these things both in * menuInit() and in the call to load(). */ -RexxMethod8(RexxObjectPtr, scriptMenu_init, RexxStringObject, rcFile, RexxObjectPtr, id, OPTIONAL_RexxObjectPtr, symbolSrc, - OPTIONAL_RexxObjectPtr, helpID, OPTIONAL_uint32_t, count, OPTIONAL_logical_t, connect, OPTIONAL_logical_t, attach, - OSELF, self) +RexxMethod8(RexxObjectPtr, scriptMenu_init, RexxStringObject, rcFile, OPTIONAL_RexxObjectPtr, id, + OPTIONAL_RexxObjectPtr, symbolSrc, OPTIONAL_RexxObjectPtr, helpID, OPTIONAL_uint32_t, count, + OPTIONAL_logical_t, connect, OPTIONAL_logical_t, attach, OSELF, self) { CppMenu *cMenu = new CppMenu(self, ScriptMenuBar, context); RexxPointerObject cMenuPtr = context->NewPointer(cMenu); context->SendMessage1(self, "MENUINIT", cMenuPtr); - bool idOmitted = isInt(-1, id, context->threadContext); + bool idOmitted = argumentOmitted(2) ? true : false; if ( ! cMenu->menuInit(id, symbolSrc, rcFile) ) { @@ -5784,8 +5784,9 @@ // load() will raise an exception, so that's ok. RexxObjectPtr menuName = (cMenu->wID == -1 && ! idOmitted) ? id : context->NullString(); - RexxArrayObject args = context->ArrayOfFour(rcFile, context->UnsignedInt32(cMenu->wID), - context->Logical(connect), context->UnsignedInt32(count)); + RexxMethodContext *c = context; + RexxArrayObject args = context->ArrayOfFour(rcFile, c->Int32(cMenu->wID), context->Logical(connect), + context->UnsignedInt32(count)); context->ArrayAppend(args, idOmitted ? TheTrueObj : TheFalseObj); context->ArrayAppend(args, menuName); Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/BinaryMenuBar.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/BinaryMenuBar.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/BinaryMenuBar.rex 2011-04-21 22:56:09 UTC (rev 6930) @@ -0,0 +1,129 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * Very, very simple example of a BinaryMenuBar. Please use the ooDialog + * reference manual to look up the meaning of the arguments to the methods of + * the menu objects. + */ + + dlg = .MenuDlg~new + dlg~execute('ShowTop') + +::requires 'ooDialog.cls' + +::class 'MenuDlg' subclass Userdialog + +::method init + forward class (super) continue + + self~createCenter(160, 80, 'Dialog with a menu') + +::method defineDialog + + text = "Choosing the 'Leave' menu item will close the dialog " - + "with 'Cancel', the 'Exit' menu item will close with 'Ok.'" + + self~createStaticText(200, 10, 10, 140, 60, , text) + + +::method initDialog + expose staticText + + -- A subtle point here. We can either attach automatically, or connect menu + -- items automatically, be we can not do both. If we attach automatically, + -- then the menu bar is empty at this point, so there are no menu items to + -- automatically connect. In this case, we attach automatically, then when + -- the menu bar is populated, we automatically connect all menu items. + menu = .BinaryMenuBar~new(.nil, 1000, self, , .true) + + subMenu = .PopupMenu~new(1300, self) + subMenu~insertItem(0, 1301, "About") + + menu~insertPopup(0, 1300, subMenu, "Help") + + subMenu = .PopupMenu~new(1200, self) + subMenu~insertItem(0, IDOK, "Exit") + subMenu~insertItem(IDOK, 1201, "Leave") + subMenu~insertItem(1201, 1202, "Test Item") + subMenu~insertItem(1201, 1203, "Context") + subMenu~insertSeparator(1201, 1204) + + menu~insertPopup(1300, 1200, subMenu, "File") + + menu~connectAllCommandEvents + + staticText = self~newStatic(200) + +::method about + expose staticText + + staticText~setText(self~getMsg("About")) + +::method testItem + expose staticText + + staticText~setText(self~getMsg("Test Item")) + +::method context + expose staticText + + staticText~setText(self~getMsg("Context")) + +::method leave + expose staticText + + -- User will probably not see this blur by, so we sleep for a second. + staticText~setText(self~getMsg("Leave")) + j = SysSleep(1) + + self~cancel:super + +::method getMsg private + use strict arg item + + return "Menu item:".endOfLine~copies(2) || '9'x || item || - + .endOfLine~copies(2) || "was last selected." + + +-- We over-ride the cancel method and do nothing so that the user can only +-- close the dialog through the menu. +::method cancel unguarded + expose staticText + + msg = "You must use the 'Leave' or 'Exit' menu items to close the dialog." + staticText~setText(msg) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/BinaryMenuBar.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.bmp =================================================================== (Binary files differ) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.bmp ___________________________________________________________________ Added: svn:mime-type + image/bmp Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.h =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.h (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.h 2011-04-21 22:56:09 UTC (rev 6930) @@ -0,0 +1,111 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +#ifndef IDC_STATIC +#define IDC_STATIC (-1) +#endif + +#define IDD_MAIN_DIALOG 101 +#define IDD_INSERT_DIALOG 103 +#define IDD_SELECT_DIALOG 105 +#define IDD_ACCEL_DIALOG 107 +#define IDD_RANGE_DIALOG 109 +#define IDD_POSITION_DIALOG 111 +#define IDD_ABOUT_DIALOG 113 +#define IDC_ST_BITMAP 1000 +#define IDC_ST_CURRENT_TEXT 1001 +#define IDC_EDIT 1002 +#define IDC_ST_EXPLANATION 1003 +#define IDC_UPD_ACCEL2 1004 +#define IDC_ST_UPD 1005 +#define IDC_UPD_POSITION 1006 +#define IDC_EDIT_ACCEL2 1007 +#define IDC_EDIT_BUDDY 1008 +#define IDC_EDIT_POSITION 1009 +#define IDC_ST_EDIT 1010 +#define IDC_UPD_ACCEL_SECONDS1 1011 +#define IDC_UPD 1012 +#define IDC_UPD_LOW 1013 +#define IDC_RB_WICKED 1014 +#define IDC_UPD_ACCEL_SECONDS2 1015 +#define IDC_UPD_START 1016 +#define IDC_EDIT_ACCEL_SECONDS2 1017 +#define IDC_UPD_HIGH 1018 +#define IDC_EDIT_LOW 1019 +#define IDC_UPD_ACCEL3 1020 +#define IDC_EDIT_ACCEL3 1021 +#define IDC_EDIT_HIGH 1022 +#define IDC_RB_LOTUS 1023 +#define IDC_UPD_ACCEL_SECONDS3 1024 +#define IDC_EDIT_ACCEL_SECONDS3 1025 +#define IDC_RB_IDES 1026 +#define IDC_EDIT_START 1027 +#define IDC_RB_TITANIC 1028 +#define IDC_UPD_ACCEL_SECONDS0 1029 +#define IDC_EDIT_END 1030 +#define IDC_EDIT_ACCEL_SECONDS0 1031 +#define IDC_UPD_END 1032 +#define IDC_EDIT_ACCEL0 1033 +#define IDC_UPD_ACCEL1 1034 +#define IDC_EDIT_ACCEL_SECONDS1 1035 +#define IDC_EDIT_ACCEL1 1036 +#define IDC_UPD_ACCEL0 1037 +#define IDC_ST_ABOUT 1039 + + +#define IDM_MENUBAR 800 +#define IDM_POP_FILES 810 +#define ID_FILES_HIDE_EDIT 811 +#define ID_FILES_HIDE_UPDOWN 812 +#define IDM_SEP_FILES 813 +#define ID_FILES_EXIT 814 +#define IDM_POP_EDITCONTROL 820 +#define ID_EDITCONTROL_LOWER 821 +#define ID_EDITCONTROL_NUMBER 822 +#define ID_EDITCONTROL_UPPER 823 +#define ID_EDITCONTROL_UNRESTRICTED 824 +#define IDM_SEP_EDITCONTROL 825 +#define ID_EDITCONTROL_INSERT 826 +#define ID_EDITCONTROL_SELECT 827 +#define IDM_POP_UPDOWNCONTROL 830 +#define ID_UPDOWNCONTROL_HEXIDECIMAL 831 +#define IDM_SEP_UPDOWNCONTROL 832 +#define ID_UPDOWNCONTROL_SET_ACCELERATION 833 +#define ID_UPDOWNCONTROL_SET_RANGE 834 +#define ID_UPDOWNCONTROL_SET_POSITION 835 +#define IDM_POP_HELP 840 +#define ID_HELP_ABOUT 841 Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.h ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rc =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rc (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rc 2011-04-21 22:56:09 UTC (rev 6930) @@ -0,0 +1,184 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +#include <windows.h> +#include <commctrl.h> +#include "UserMenuBar.h" + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_ABOUT_DIALOG DIALOGEX 0, 0, 231, 105 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "About User Menu Bar Example" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + CONTROL "", IDC_ST_BITMAP, WC_STATIC, SS_BITMAP | SS_REALSIZECONTROL, 16, 7, 102, 71 + CTEXT "An example of using a menu bar in ooDialog.", IDC_ST_ABOUT, 141, 10, 76, 56, SS_CENTER + LTEXT "ooDialog an ooRexx Extenstion", IDC_STATIC, 16, 83, 107, 15, SS_LEFT + DEFPUSHBUTTON "OK", IDOK, 170, 84, 50, 14 +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_ACCEL_DIALOG DIALOGEX 0, 0, 227, 163 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Set Acceleration" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + CTEXT "Example: After 1 second(s) accelerate 2x.", IDC_STATIC, 9, 9, 224, 8, SS_CENTER + LTEXT "After", IDC_STATIC, 15, 38, 16, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL_SECONDS0, 36, 35, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL_SECONDS0, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 53, 35, 12, 14 + LTEXT "second(s) accelerate", IDC_STATIC, 73, 38, 67, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL0, 145, 36, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL0, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 163, 36, 12, 14 + LTEXT "X.", IDC_STATIC, 178, 38, 8, 8, SS_LEFT + LTEXT "After", IDC_STATIC, 15, 63, 16, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL_SECONDS1, 36, 60, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL_SECONDS1, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 53, 60, 12, 14 + LTEXT "second(s) accelerate", IDC_STATIC, 73, 63, 67, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL1, 145, 61, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL1, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 163, 61, 12, 14 + LTEXT "X.", IDC_STATIC, 178, 63, 8, 8, SS_LEFT + LTEXT "After", IDC_STATIC, 15, 89, 16, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL_SECONDS2, 36, 86, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL_SECONDS2, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 53, 86, 12, 14 + LTEXT "second(s) accelerate", IDC_STATIC, 73, 89, 67, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL2, 145, 87, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL2, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 163, 87, 12, 14 + LTEXT "X.", IDC_STATIC, 178, 117, 8, 8, SS_LEFT + LTEXT "After", IDC_STATIC, 15, 117, 16, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL_SECONDS3, 36, 114, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL_SECONDS3, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 53, 114, 12, 14 + LTEXT "second(s) accelerate", IDC_STATIC, 73, 117, 67, 8, SS_LEFT + EDITTEXT IDC_EDIT_ACCEL3, 145, 115, 29, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_ACCEL3, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 163, 115, 12, 14 + LTEXT "X.", IDC_STATIC, 178, 89, 8, 8, SS_LEFT + DEFPUSHBUTTON "OK", IDOK, 115, 142, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 170, 142, 50, 14 +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_MAIN_DIALOG DIALOG 0, 0, 223, 150 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "User Menu Bar Example" +FONT 8, "Ms Shell Dlg" +{ + RTEXT "Enter text:", IDC_ST_EDIT, 10, 32, 40, 12, SS_RIGHT + EDITTEXT IDC_EDIT, 52, 30, 160, 12, ES_AUTOHSCROLL + RTEXT "Spin Me:", IDC_ST_UPD, 10, 63, 40, 12, SS_RIGHT + EDITTEXT IDC_EDIT_BUDDY, 52, 60, 65, 14, ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + CONTROL "", IDC_UPD, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_WRAP | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 257, 66, 12, 16 + DEFPUSHBUTTON "OK", IDOK, 107, 115, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 162, 115, 50, 14 +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_INSERT_DIALOG DIALOGEX 0, 0, 283, 149 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Insert Text" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + DEFPUSHBUTTON "OK", IDOK, 171, 128, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 226, 128, 50, 14 + CTEXT "Select the Text to Insert", IDC_STATIC, 7, 11, 269, 8, SS_CENTER + AUTORADIOBUTTON "The wicked flee when none pursueth ...", IDC_RB_WICKED, 11, 33, 141, 8, WS_TABSTOP + AUTORADIOBUTTON "Lotus 123 had its ups and downs.", IDC_RB_LOTUS, 11, 53, 122, 8 + AUTORADIOBUTTON "Ides of March - name of March 15 in Roman calendar.", IDC_RB_IDES, 11, 74, 186, 8, WS_TABSTOP + AUTORADIOBUTTON "472 lifeboat seats not used when 1,503 people died on the Titanic.", IDC_RB_TITANIC, 11, 95, 226, 8, WS_TABSTOP +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_POSITION_DIALOG DIALOGEX 0, 0, 186, 95 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Set New Position" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + DEFPUSHBUTTON "OK", IDOK, 74, 74, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 129, 74, 50, 14 + CTEXT "Pick a new position for the up-down control.", IDC_STATIC, 9, 11, 170, 8, SS_CENTER + LTEXT "New Position:", IDC_STATIC, 11, 41, 44, 8, SS_LEFT + EDITTEXT IDC_EDIT_POSITION, 56, 38, 68, 14, ES_RIGHT | ES_AUTOHSCROLL + CONTROL "", IDC_UPD_POSITION, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 112, 38, 12, 14 +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_RANGE_DIALOG DIALOGEX 0, 0, 203, 164 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Set UpDown Range" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + CTEXT "Set the start and end values for the range.", IDC_STATIC, 11, 9, 185, 13, SS_CENTER + LTEXT "The complete possible range for an UpDown control is -2147,483,648 to 2,147,483,647. The start value does not have to be lower than the end value. 5 to -5 is a valid range.", IDC_ST_EXPLANATION, 11, 36, 180, 35, SS_LEFT + RTEXT "Start value:", IDC_STATIC, 8, 85, 41, 8, SS_RIGHT + EDITTEXT IDC_EDIT_LOW, 51, 84, 70, 12, ES_AUTOHSCROLL + CONTROL "", IDC_UPD_LOW, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 109, 84, 12, 12 + RTEXT "End value:", IDC_STATIC, 8, 117, 41, 8, SS_RIGHT + EDITTEXT IDC_EDIT_HIGH, 51, 116, 70, 12, ES_AUTOHSCROLL + CONTROL "", IDC_UPD_HIGH, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 109, 116, 12, 12 + DEFPUSHBUTTON "OK", IDOK, 91, 143, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 146, 143, 50, 14 +} + + + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +IDD_SELECT_DIALOG DIALOGEX 0, 0, 277, 122 +STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU +CAPTION "Select Text" +FONT 8, "Ms Shell Dlg", 400, 0, 1 +{ + GROUPBOX "The current text in the edit control available for selection is:", IDC_STATIC, 7, 10, 261, 34 + DEFPUSHBUTTON "OK", IDOK, 165, 101, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 220, 101, 50, 14 + LTEXT "Static", IDC_ST_CURRENT_TEXT, 11, 26, 256, 10, SS_LEFT | SS_WORDELLIPSIS + LTEXT "Selection start position", IDC_STATIC, 11, 58, 86, 8, SS_LEFT + LTEXT "Selection end position", IDC_STATIC, 120, 58, 70, 8, SS_LEFT + EDITTEXT IDC_EDIT_START, 11, 72, 40, 14, ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + CONTROL "", IDC_UPD_START, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_WRAP | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 39, 72, 12, 14 + EDITTEXT IDC_EDIT_END, 120, 72, 40, 14, ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + CONTROL "", IDC_UPD_END, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_WRAP | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 148, 72, 12, 14 +} Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rc ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rex 2011-04-21 22:56:09 UTC (rev 6930) @@ -0,0 +1,585 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * A simple UserDialog with a menu, an Edit control and an UpDown control. The + * menu is used to change styles or behaviour of the two controls. + * + * About half of the menu items pop up a dialog to collect user input needed to + * carry out the menu item action. + * + * This example uses a number of up-down controls in the different dialogs, + * making it a good example of how to use up-down controls in addition, to being + * a menu bar example. + */ + + dlg = .SimpleDialog~new("UserMenuBar.rc", IDD_MAIN_DIALOG, , "UserMenuBar.h") + if dlg~initCode <> 0 then do + return 99 + end + + dlg~execute("SHOWTOP") + +return 0 + +::requires "ooDialog.cls" + +-- We need 10 digits to work with the numbers in the full range of an up-down +-- control (-2147,483,648 to 2,147,483,647) +::options digits 10 + +::class 'SimpleDialog' subclass RcDialog + +::constant DEFAULT_TEXT "1, 2, 3, the Edit control Menu actions work better with text in the 1st edit control." +::constant WICKED_TEXT "The wicked flee when none pursueth ..." +::constant LOTUS_TEXT "Lotus 123 had its ups and downs." +::constant IDES_TEXT "Ides of March - name of March 15 in Roman calendar." +::constant TITANIC_TEXT "472 lifeboat seats not used when 1,503 people died on the Titanic." + + +::method init + + forward class (super) continue + + if \ self~createMenuBar then do + self~initCode = 1 + return + end + + +::method initDialog + expose menuBar edit upDown + + upDown = self~newUpDown(IDC_UPD) + upDown~setRange(1, 20000) + upDown~setPosition(1000) + + if \ menuBar~attachTo(self) then do + msg = "Failed to attach menu bar System Error Code:" .SystemErrorCode + z = MessageDialog(msg, self~hwnd, "Menu Error", "OK", "WARNING") + end + + edit = self~newEdit(IDC_EDIT) + edit~setText(.SimpleDialog~DEFAULT_TEXT) + + self~setRadioChecks(ID_EDITCONTROL_UNRESTRICTED) + + +-- Creates a UserMenuBar +::method createMenuBar private + expose menuBar + + -- Create a menu bar that has a symbolic resource ID of IDM_MENUBAR, whose + -- constDir attribute is copied from this dialog's constdir, has no help ID, + -- does not attach to a dialog at this point, and autoconnects all command + -- menu items when it is attached to a dialog. + menuBar = .UserMenuBar~new(IDM_MENUBAR, self, , .false, .true) + + -- Create the menu bar template. + menuBar~addPopup(IDM_POP_FILES, "Files") + menuBar~addItem(ID_FILES_HIDE_EDIT, "Hide Edit Control", "DEFAULT CHECK") + menuBar~addItem(ID_FILES_HIDE_UPDOWN, "Hide UpDown Control", " CHECK") + menuBar~addSeparator(IDM_SEP_FILES) + menuBar~addItem(ID_FILES_EXIT, "Exit", "END") + + menuBar~addPopup(IDM_POP_EDITCONTROL, "Edit Control") + menuBar~addItem(ID_EDITCONTROL_LOWER, "Lower Case Only", "CHECK RADIO") + menuBar~addItem(ID_EDITCONTROL_NUMBER, "Numbers Only", "CHECK RADIO") + menuBar~addItem(ID_EDITCONTROL_UPPER, "Upper Case Only", "CHECK RADIO") + menuBar~addItem(ID_EDITCONTROL_UNRESTRICTED, "No Restriction", "CHECK RADIO DEFAULT") + menuBar~addSeparator(IDM_SEP_EDITCONTROL) + menuBar~addItem(ID_EDITCONTROL_INSERT, "Insert Text ...") + menuBar~addItem(ID_EDITCONTROL_SELECT, "Select Text ...", "END") + + menuBar~addPopup(IDM_POP_UPDOWNCONTROL, "UpDown Control") + menuBar~addItem(ID_UPDOWNCONTROL_HEXIDECIMAL, "Hexidecimal", "CHECK") + menuBar~addSeparator(IDM_SEP_UPDOWNCONTROL) + menuBar~addItem(ID_UPDOWNCONTROL_SET_ACCELERATION, "Set Acceleration ...") + menuBar~addItem(ID_UPDOWNCONTROL_SET_RANGE, "Set Range ...") + menuBar~addItem(ID_UPDOWNCONTROL_SET_POSITION, "Set Position ...", "END") + + menuBar~addPopup( IDM_POP_HELP, "Help", "END") + menuBar~addItem(ID_HELP_ABOUT, "About User Menu Bar", "END") + + if \ menuBar~complete then do + say 'User menu bar completion error:' .SystemErrorCode SysGetErrortext(.SystemErrorCode) + return .false + end + + return .true + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +-- The methods below, up to the next dividing lines, are the implementation +-- for each of the menu item command events. +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::method hideEditControl unguarded + expose menuBar edit + + if menuBar~isChecked(ID_FILES_HIDE_EDIT) then do + menuBar~uncheck(ID_FILES_HIDE_EDIT) + self~newStatic(IDC_ST_EDIT)~show + edit~show + end + else do + menuBar~check(ID_FILES_HIDE_EDIT) + self~newStatic(IDC_ST_EDIT)~hide + edit~hide + end + +::method hideUpDownControl unguarded + expose menuBar upDown + + if menuBar~isChecked(ID_FILES_HIDE_UPDOWN) then do + menuBar~uncheck(ID_FILES_HIDE_UPDOWN) + self~newStatic(IDC_ST_UPD)~show + self~newEdit(IDC_EDIT_BUDDY)~show + upDown~show + end + else do + menuBar~check(ID_FILES_HIDE_UPDOWN) + self~newStatic(IDC_ST_UPD)~hide + self~newEdit(IDC_EDIT_BUDDY)~hide + upDown~hide + end + +::method exit unguarded + self~cancel + + +::method lowerCaseOnly unguarded + expose menuBar edit + + alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_LOWER) + + self~setRadioChecks(ID_EDITCONTROL_LOWER) + edit~replaceStyle("UPPER NUMBER", "LOWER") + + text = edit~getText + edit~setText(text~lower) + + if \ alreadyChecked then do + edit~assignFocus + edit~select(1, 1) + + msg = "You can only enter lower case letters in" || .endOfLine || - + "the edit control now. Try it." + z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") + end + + +::method numbersOnly unguarded + expose menuBar edit + + alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_NUMBER) + + self~setRadioChecks(ID_EDITCONTROL_NUMBER) + edit~replaceStyle("LOWER UPPER", "NUMBER") + + text = edit~getText + edit~setText(text~translate("", xrange("00"X, "/") || xrange(":", "FF"X))~space(0)) + + if \ alreadyChecked then do + edit~assignFocus + edit~select(1, 1) + + msg = "You can only enter numbers in the" || .endOfLine || - + "edit control now. Try it." + z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") + end + + +::method upperCaseOnly unguarded + expose menuBar edit + + alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_UPPER) + + self~setRadioChecks(ID_EDITCONTROL_UPPER) + edit~replaceStyle("LOWER NUMBER", "UPPER") + + text = edit~getText + edit~setText(text~upper) + + if \ alreadyChecked then do + edit~assignFocus + edit~select(1, 1) + + msg = "You can only enter upper case letters in" || .endOfLine || - + "the edit control now. Try it." + z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") + end + + +::method noRestriction unguarded + expose menuBar edit + + alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_UNRESTRICTED) + + self~setRadioChecks(ID_EDITCONTROL_UNRESTRICTED) + edit~removeStyle("LOWER NUMBER UPPER") + + text = edit~getText + edit~setText(.SimpleDialog~DEFAULT_TEXT) + + if \ alreadyChecked then do + edit~assignFocus + edit~select(1, 1) + + msg = "You can now enter unrestricted text in" || .endOfLine || - + "the edit control. Try it." + z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") + end + + +::method insertText unguarded + expose edit + + dlg = .InsertDialog~new("UserMenuBar.rc", IDD_INSERT_DIALOG, , "UserMenuBar.h") + + if dlg~execute("SHOWTOP", IDI_DLG_OODIALOG) == .PlainBaseDialog~IDOK then do + edit~setText(dlg~selectedText) + end + + +::method selectText unguarded + expose edit + + dlg = .SelectDialog~new("UserMenuBar.rc", IDD_SELECT_DIALOG, , "UserMenuBar.h") + dlg~currentText = edit~getText + edit~select(1, 1) + + if dlg~execute("SHOWTOP", IDI_DLG_APPICON) == .PlainBaseDialog~IDOK then do + s = dlg~selection + edit~select(s~x, s~y) + end + + +::method hexidecimal unguarded + expose menuBar upDown + + if menuBar~isChecked(ID_UPDOWNCONTROL_HEXIDECIMAL) then do + menuBar~uncheck(ID_UPDOWNCONTROL_HEXIDECIMAL) + upDown~setBase(10) + end + else do + menuBar~check(ID_UPDOWNCONTROL_HEXIDECIMAL) + upDown~setBase(16) + end + + +::method setAcceleration unguarded + expose upDown + + dlg = .AccelDialog~new("UserMenuBar.rc", IDD_ACCEL_DIALOG, , "UserMenuBar.h") + + if dlg~execute("SHOWTOP", IDI_DLG_APPICON2) == .PlainBaseDialog~IDOK then do + accel = dlg~acceleration + upDown~setAcceleration(accel) + end + + +::method setRange unguarded + expose upDown + + dlg = .RangeDialog~new("UserMenuBar.rc", IDD_RANGE_DIALOG, , "UserMenuBar.h") + + if dlg~execute("SHOWTOP", IDI_DLG_OOREXX) == .PlainBaseDialog~IDOK then do + r = dlg~range + upDown~setRange(r~x, r~y) + + -- If the current position was no longer within the new range, the up-down + -- control will have internally reset its position so that it is within the + -- new range. But, the value displayed will still be the old value. This + -- forces the value displayed to match the current position. + upDown~setPosition(upDown~getPosition) + end + + +::method setPosition unguarded + expose upDown + + dlg = .PositionDialog~new("UserMenuBar.rc", IDD_POSITION_DIALOG, , "UserMenuBar.h") + dlg~upDown = upDown + + if dlg~execute("SHOWTOP", IDI_DLG_DEFAULT) == .PlainBaseDialog~IDOK then do + p = dlg~position + upDown~setPosition(p) + end + + +::method aboutUserMenuBar unguarded + + dlg = .AboutDialog~new("UserMenuBar.rc", IDD_ABOUT_DIALOG, , "UserMenuBar.h") + + dlg~execute("SHOWTOP", IDI_DLG_DEFAULT) + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +-- End of the implementation methods for each of the menu item command events. +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ + + + +-- Convenience method to set the radio button menu items. The checkRadio() +-- method takes a start resource ID and an end resource, and the resource ID for +-- a single menu item within that range of IDs. It removes the radio button +-- check mark from all the menu items in the range and adds the radio button +-- check mark to item specified by the third argument. +::method setRadioChecks private + expose menuBar + use strict arg item + + menuBar~checkRadio(ID_EDITCONTROL_LOWER, ID_EDITCONTROL_UNRESTRICTED, item) + + +::method initAutoDetection + self~noAutoDetection + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +-- The following classes all implement a single dialog that is used to collect +-- information, from the user, needed to carry out one of the menu item +-- commands. +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ + +::class 'InsertDialog' subclass RcDialog + +::attribute selectedText + +::method initDialog + self~newRadioButton(IDC_RB_WICKED)~check + +::method ok unguarded + + select + when self~newRadioButton(IDC_RB_WICKED)~checked then self~selectedText = .SimpleDialog~WICKED_TEXT + when self~newRadioButton(IDC_RB_LOTUS)~checked then self~selectedText = .SimpleDialog~LOTUS_TEXT + when self~newRadioButton(IDC_RB_IDES)~checked then self~selectedText = .SimpleDialog~IDES_TEXT + when self~newRadioButton(IDC_RB_TITANIC)~checked then self~selectedText = .SimpleDialog~TITANIC_TEXT + otherwise self~selectedText = "" + end + -- End select + + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'SelectDialog' subclass RcDialog + +::attribute selection +::attribute currentText + +::method initDialog + expose updStart updEnd currentText + + self~newStatic(IDC_ST_CURRENT_TEXT)~setText(currentText) + + updStart = self~newUpDown(IDC_UPD_START) + updStart~setRange(0, currentText~length) + updStart~setPosition(1) + + updEnd = self~newUpDown(IDC_UPD_END) + updEnd~setRange(0, currentText~length) + updEnd~setPosition(1) + +::method ok unguarded + expose updStart updEnd + + self~selection = .Point~new(updStart~getPosition, updEnd~getPosition) + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'AccelDialog' subclass RcDialog + +::attribute acceleration + +::method initDialog + + upd = self~newUpDown(IDC_UPD_ACCEL_SECONDS0) + upd~setPosition(0) + upd~disable + self~newEdit(IDC_EDIT_ACCEL_SECONDS0)~disable + + upd = self~newUpDown(IDC_UPD_ACCEL0) + upd~setPosition(1) + upd~disable + self~newEdit(IDC_EDIT_ACCEL0)~disable + + do i = 1 to 3 + upd = self~newUpDown(IDC_UPD_ACCEL_SECONDS || i) + upd~setRange(i, 32) + upd~setPosition(i) + + upd = self~newUpDown(IDC_UPD_ACCEL || i) + upd~setRange(2 ** i, 256) + upd~setPosition(2 ** i) + end + + self~newUpDown(IDC_UPD_ACCEL_SECONDS1)~assignFocus + + +::method ok unguarded + + a = .array~new(3) + + do i = 1 to 3 + d = .directory~new + + updS = self~newUpDown(IDC_UPD_ACCEL_SECONDS || i) + updA = self~newUpDown(IDC_UPD_ACCEL || i) + + d~seconds = updS~getPosition + d~increment = updA~getPosition + a[i] = d + end + + -- Check that the user has an unique value for each acceleration entry. + check = .set~of(a[1]~seconds, a[2]~seconds, a[3]~seconds) + if check~items <> 3 then do + msg = "For each of the 3 acceleration input" || .endOfLine || - + "lines, you must use a unique value for" || .endOfLine || - + "seconds. Found:" a[1]~seconds',' a[2]~seconds', and' a[3]~seconds'.' + + z = MessageDialog(msg, self~hwnd, "Acceleration Input Error", "OK", "STOP") + return .false + end + + -- Sort the entries by seconds, ascending, using brute force. + max = 0; min = 4 + do i = 1 to 3 + if a[i]~seconds > max then max = i + if a[i]~seconds < min then min = i + end + + -- The user only has 3 up-down pairs she can set. But, we also have the + -- first disabled up-down pair for seconds == 0, increment == 1 + aa = .array~new(4) + aa[1] = .directory~new~~setEntry("SECONDS", 0)~~setEntry("INCREMENT", 1) + + aa[2] = a[min] + aa[4] = a[max] + + do i = 1 to 3 + if i \== min, i \== max then do + aa[3] = a[i] + leave + end + end + + self~acceleration = aa + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'RangeDialog' subclass RcDialog + +::attribute range + +::method initDialog + expose updLow updHigh + + -- Set an acceleration that goes very fast if the user hold down the arrow + -- keys, or holds down the mouse on the up / down arrows. + accel = .array~new(4) + accel[1] = .directory~new~~setEntry("SECONDS", 0)~~setEntry("INCREMENT", 1) + accel[2] = .directory~new~~setEntry("SECONDS", 1)~~setEntry("INCREMENT", 32) + accel[3] = .directory~new~~setEntry("SECONDS", 2)~~setEntry("INCREMENT", 64) + accel[4] = .directory~new~~setEntry("SECONDS", 3)~~setEntry("INCREMENT", 256) + + updLow = self~newUpDown(IDC_UPD_LOW) + updLow~setRange(-2147483648, 2147483647) + updLow~setPosition(0) + updLow~setAcceleration(accel) + + updHigh = self~newUpDown(IDC_UPD_HIGH) + updHigh~setRange(-2147483648, 2147483647) + updHigh~setPosition(0) + updHigh~setAcceleration(accel) + +::method ok unguarded + expose updLow updHigh + + self~range = .Point~new(updLow~getPosition, updHigh~getPosition) + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'PositionDialog' subclass RcDialog + +::attribute position +::attribute upDown + +::method initDialog + expose upDown upd + + upd = self~newUpDown(IDC_UPD_POSITION) + + upd~setRange(upDown~getRange) + upd~setPosition(upDown~getPosition) + +::method ok unguarded + expose upd + + self~position = upd~getPosition + self~ok:super + +::method initAutoDetection + self~noAutoDetection + + +::class 'AboutDialog' subclass RcDialog + +::method initDialog + expose font + + bitmap = .Image~getImage("UserMenuBar.bmp") + self~newStatic(IDC_ST_BITMAP)~setImage(bitmap) + + font = self~createFontEx("Ariel", 14) + self~newStatic(IDC_ST_ABOUT)~setFont(font) + +::method leaving + expose font + self~deleteFont(font) Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Deleted: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBar.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBar.rex 2011-04-21 22:54:46 UTC (rev 6929) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/simpleMenuBar.rex 2011-04-21 22:56:09 UTC (rev 6930) @@ -1,650 +0,0 @@ -/*----------------------------------------------------------------------------*/ -/* */ -/* Copyright (c) 2011-2011 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 */ -/* distribution. A copy is also available at the following address: */ -/* http://www.oorexx.org/license.html */ -/* */ -/* Redistribution and use in source and binary forms, with or */ -/* without modification, are permitted provided that the following */ -/* conditions are met: */ -/* */ -/* Redistributions of source code must retain the above copyright */ -/* notice, this list of conditions and the following disclaimer. */ -/* Redistributions in binary form must reproduce the above copyright */ -/* notice, this list of conditions and the following disclaimer in */ -/* the documentation and/or other materials provided with the distribution. */ -/* */ -/* Neither the name of Rexx Language Association nor the names */ -/* of its contributors may be used to endorse or promote products */ -/* derived from this software without specific prior written permission. */ -/* */ -/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ -/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ -/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ -/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ -/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ -/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ -/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ -/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ -/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ -/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ -/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* */ -/*----------------------------------------------------------------------------*/ - -/** - * A simple UserDialog with a menu, an Edit control and an UpDown control. The - * menu is used to change styles or behaviour of the two controls. - * - * About half of the menu items pop up a dialog to collect user input needed to - * carry out the menu item action. - * - * This example uses a number of up-down controls in the different dialogs, - * making it a good example of how to use up-down controls in addition, to being - * a menu bar example. - */ - - dlg = .SimpleDialog~new - if dlg~initCode <> 0 then do - return 99 - end - - dlg~execute("SHOWTOP") - -return 0 - -::requires "ooDialog.cls" - --- We need 10 digits to work with the numbers in the full range of an up-down --- control (-2147,483,648 to 2,147,483,647) -::options digits 10 - -::class 'SimpleDialog' subclass UserDialog - -::constant DEFAULT_TEXT "1, 2, 3, the Edit control Menu actions work better with text in the 1st edit control." -::constant WICKED_TEXT "The wicked flee when none pursueth ..." -::constant LOTUS_TEXT "Lotus 123 had its ups and downs." -::constant IDES_TEXT "Ides of March - name of March 15 in Roman calendar." -::constant TITANIC_TEXT "472 lifeboat seats not used when 1,503 people died on the Titanic." - - -::method init - expose menuBar - - forward class (super) continue - - self~addSymbolicIDs - - if \ self~createMenuBar then do - self~initCode = 1 - return - end - - self~makeMenuItemConnections - - self~create(30, 30, 225, 150, "Menu Bar Example", "CENTER") - - -::method defineDialog - - self~createStatic(IDC_ST_EDIT, 10, 32, 40, 12, "TEXT RIGHT", "Enter Text:") - self~createEdit(IDC_EDIT, 52, 30, 160, 12, "AUTOSCROLLH KEEPSELECTION") - - self~createStatic(IDC_ST_UPD, 10, 63, 40, 12, "TEXT RIGHT", "Spin Me:") - self~createEdit(IDC_EDIT_BUDDY, 52, 60, 65, 14, "RIGHT NUMBER") - self~createUpDown(IDC_UPD, 257, 66, 12, 16, "WRAP ARROWKEYS AUTOBUDDY SETBUDDYINT") - - self~createPushButton(IDOK, 107, 115, 50, 14, "DEFAULT", "Ok") - self~createPushButton(IDCANCEL, 162, 115, 50, 14, , "Cancel") - -::method initDialog - expose menuBar edit upDown - - upDown = self~newUpDown(IDC_UPD) - upDown~setRange(1, 20000) - upDown~setPosition(1000) - - if \ menuBar~attachTo(self) then do - msg = "Failed to attach menu bar System Error Code:" .SystemErrorCode - z = MessageDialog(msg, self~hwnd, "Menu Error", "OK", "WARNING") - end - - edit = self~newEdit(IDC_EDIT) - edit~setText(.SimpleDialog~DEFAULT_TEXT) - - self~setRadioChecks(ID_EDITCONTROL_UNRESTRICTED) - - -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ --- The methods below, all beginning with 'on' are the implementation for each --- of the menu item command events. -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ -::method onHideEdit unguarded - expose menuBar edit - - if menuBar~isChecked(ID_FILES_HIDE_EDIT) then do - menuBar~uncheck(ID_FILES_HIDE_EDIT) - self~newStatic(IDC_ST_EDIT)~show - edit~show - end - else do - menuBar~check(ID_FILES_HIDE_EDIT) - self~newStatic(IDC_ST_EDIT)~hide - edit~hide - end - -::method onHideUpDown unguarded - expose menuBar upDown - - if menuBar~isChecked(ID_FILES_HIDE_UPDOWN) then do - menuBar~uncheck(ID_FILES_HIDE_UPDOWN) - self~newStatic(IDC_ST_UPD)~show - self~newEdit(IDC_EDIT_BUDDY)~show - upDown~show - end - else do - menuBar~check(ID_FILES_HIDE_UPDOWN) - self~newStatic(IDC_ST_UPD)~hide - self~newEdit(IDC_EDIT_BUDDY)~hide - upDown~hide - end - -::method onExit unguarded - self~cancel - - -::method onLower unguarded - expose menuBar edit - - alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_LOWER) - - self~setRadioChecks(ID_EDITCONTROL_LOWER) - edit~replaceStyle("UPPER NUMBER", "LOWER") - - text = edit~getText - edit~setText(text~lower) - - if \ alreadyChecked then do - edit~assignFocus - edit~select(1, 1) - - msg = "You can only enter lower case letters in" || .endOfLine || - - "the edit control now. Try it." - z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") - end - - -::method onNumber unguarded - expose menuBar edit - - alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_NUMBER) - - self~setRadioChecks(ID_EDITCONTROL_NUMBER) - edit~replaceStyle("LOWER UPPER", "NUMBER") - - text = edit~getText - edit~setText(text~translate("", xrange("00"X, "/") || xrange(":", "FF"X))~space(0)) - - if \ alreadyChecked then do - edit~assignFocus - edit~select(1, 1) - - msg = "You can only enter numbers in the" || .endOfLine || - - "edit control now. Try it." - z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") - end - - -::method onUpper unguarded - expose menuBar edit - - alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_UPPER) - - self~setRadioChecks(ID_EDITCONTROL_UPPER) - edit~replaceStyle("LOWER NUMBER", "UPPER") - - text = edit~getText - edit~setText(text~upper) - - if \ alreadyChecked then do - edit~assignFocus - edit~select(1, 1) - - msg = "You can only enter upper case letters in" || .endOfLine || - - "the edit control now. Try it." - z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") - end - - -::method onUnRestricted unguarded - expose menuBar edit - - alreadyChecked = menuBar~isChecked(ID_EDITCONTROL_UNRESTRICTED) - - self~setRadioChecks(ID_EDITCONTROL_UNRESTRICTED) - edit~removeStyle("LOWER NUMBER UPPER") - - text = edit~getText - edit~setText(.SimpleDialog~DEFAULT_TEXT) - - if \ alreadyChecked then do - edit~assignFocus - edit~select(1, 1) - - msg = "You can now enter unrestricted text in" || .endOfLine || - - "the edit control. Try it." - z = MessageDialog(msg, self~hwnd, 'Edit Control Style Change', "OK", "INFORMATION") - end - - -::method onInsert unguarded - expose edit - - dlg = .InsertDialog~new("simpleMenuBarDialogs.rc", IDD_INSERT_DIALOG, , "simpleMenuBarDialogs.h") - - if dlg~execute("SHOWTOP", IDI_DLG_OODIALOG) == .PlainBaseDialog~IDOK then do - edit~setText(dlg~selectedText) - end - - -::method onSelect unguarded - expose edit - - dlg = .SelectDialog~new("simpleMenuBarDialogs.rc", IDD_SELECT_DIALOG, , "simpleMenuBarDialogs.h") - dlg~currentText = edit~getText - edit~select(1, 1) - - if dlg~execute("SHOWTOP", IDI_DLG_APPICON) == .PlainBaseDialog~IDOK then do - s = dlg~selection - edit~select(s~x, s~y) - end - - -::method onHexidecimal unguarded - expose menuBar upDown - - if menuBar~isChecked(ID_UPDOWNCONTROL_HEXIDECIMAL) then do - menuBar~uncheck(ID_UPDO... [truncated message content] |
From: <mie...@us...> - 2011-05-03 03:07:31
|
Revision: 6959 http://oorexx.svn.sourceforge.net/oorexx/?rev=6959&view=rev Author: miesfeld Date: 2011-05-03 03:07:20 +0000 (Tue, 03 May 2011) Log Message: ----------- Sync ooDialog 4.2.0 sandbox version with main up through r6959 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBarControls.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPropertySheetDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodViewControls.cpp sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/Startup.rex Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-05-03 03:07:20 UTC (rev 6959) @@ -1515,8 +1515,6 @@ ::class 'UpDown' subclass DialogControl public -::constant UDM_SETBUDDY "0x0469" -::constant UDM_GETBUDDY "0x046A" ::constant UDM_SETBASE "0x046D" ::constant UDM_GETBASE "0x046E" ::constant UDM_SETPOS32 "0x0471" @@ -1531,19 +1529,13 @@ use strict arg newBase return self~sendWinIntMsg(self~UDM_SETBASE, newBase, 0) -::method getBuddy unguarded -- TODO the buddy should be Rexx Objects, NOT hwnd - use strict arg - return self~sendWinIntMsgH(self~UDM_GETBUDDY, 0, 0) - -::method setBuddy unguarded -- TODO the buddy should be Rexx Objects, NOT hwnd - use strict arg hwndBuddy - return self~sendWinHandleMsgH(self~UDM_SETBUDDY, hwndBuddy, 0) - ::method getPosition unguarded external "LIBRARY oodialog ud_getPosition" ::method setPosition unguarded use strict arg newPos return self~sendWinIntMsg(self~UDM_SETPOS32, 0, newPos) +::method getBuddy unguarded external "LIBRARY oodialog ud_getBuddy" +::method setBuddy unguarded external "LIBRARY oodialog ud_setBuddy" ::method getRange unguarded external "LIBRARY oodialog ud_getRange" ::method setRange unguarded external "LIBRARY oodialog ud_setRange" ::method getAcceleration unguarded external "LIBRARY oodialog ud_getAcceleration" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-05-03 03:07:20 UTC (rev 6959) @@ -338,17 +338,17 @@ ::method defListDragHandler use arg id, item, pt lc = self~newListView(id) - hc = lc~Cursor_Cross /* change cursor and store current */ - parse value lc~GetRect with left top right bottom + hc = lc~cursor_Cross /* change cursor and store current */ + parse value lc~getRect with left top right bottom parse var pt oldx oldy - origin = lc~ItemPos(item) - lmb = self~IsMouseButtonDown("LEFT") - rmb = self~IsMouseButtonDown("RIGHT") + origin = lc~itemPos(item) + lmb = self~isMouseButtonDown("LEFT") + rmb = self~isMouseButtonDown("RIGHT") do while (lmb \= 0 | rmb \= 0) & \(lmb \= 0 & rmb \= 0) - pos = self~CursorPos + pos = self~cursorPos parse var pos x y - parse value lc~ScreenToClient(x, y) with newx newy - hs = lc~HScrollPos; vs = lc~VScrollPos + parse value lc~screenToClient(x, y) with newx newy + hs = lc~hScrollPos; vs = lc~VScrollPos sx = x-right sy = y-bottom in_rx = (sx <= 30) & (newx >= -30) @@ -360,11 +360,11 @@ if newx < 0 then newx = 0 if newy < 0 then newy = 0 if (in_rx & oldx \= newx) | (in_ry & oldy \= newy) then do - lc~SetItemPos(item, newx, newy) + lc~setItemPos(item, newx, newy) oldx = newx oldy = newy if sx \= 0 | sy \= 0 then do - lc~Scroll(sx, sy) + lc~scroll(sx, sy) call msSleep 30 end end @@ -374,27 +374,27 @@ if sx > 30 then newx = (right-left) + 28 if newy < -30 then newy = -30 if sy > 30 then newy = (bottom-top) + 28 - parse value lc~ClientToSCreen(newx, newy) with x y - self~SetCursorPos(x, y) + parse value lc~clientToSCreen(newx, newy) with x y + self~setCursorPos(x, y) end - lmb = self~IsMouseButtonDown("LEFT") - rmb = self~IsMouseButtonDown("RIGHT") + lmb = self~isMouseButtonDown("LEFT") + rmb = self~isMouseButtonDown("RIGHT") end if (lmb \= 0 & rmb \= 0) then do /* if both buttons pressed restore origin. pos */ parse var origin x y - lc~SetItemPos(item, x, y) + lc~setItemPos(item, x, y) end - lc~RestoreCursorShape(hc) /* restore old cursor */ - pos = self~CursorPos + lc~restoreCursorShape(hc) /* restore old cursor */ + pos = self~cursorPos parse var pos x y - self~SetCursorPos(x+1, y+1) /* move cursor to force redraw */ + self~setCursorPos(x+1, y+1) /* move cursor to force redraw */ ::method defTreeEditStarter use arg id, dummy, category if arg(3,'o') = 1 then tc = self~newTreeView(id) else tc = self~newTreeView(id, category) - if tc \= .nil then tc~SubclassEdit + if tc \= .nil then tc~subclassEdit ::method defTreeEditHandler use arg id, item, newText, category Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-05-03 03:07:20 UTC (rev 6959) @@ -724,10 +724,6 @@ return id --- Internal use only. - Do not document. -::method setDlgDataFromStem private unguarded external "LIBRARY oodialog pbdlg_setDlgDataFromStem_pvt" -- Not to be doumented. -::method putDlgDataInStem private unguarded external "LIBRARY oodialog pbdlg_putDlgDataInStem_pvt" -- Not to be doumented. - -- The method returns an array that contains the value of each of the attributes associated with a dialog -- control. MM What good is this, you don't know which control is associated with each of the 'data' pieces? ::method makeArray unguarded -- Never documented, do not intend to document now -- Last data attribute method. @@ -743,8 +739,13 @@ return a +-- Internal use *only*, do *not* use. - Do not document. +::method setDlgDataFromStem private unguarded external "LIBRARY oodialog pbdlg_setDlgDataFromStem_pvt" -- Not to be doumented. +::method putDlgDataInStem private unguarded external "LIBRARY oodialog pbdlg_putDlgDataInStem_pvt" -- Not to be doumented. +::method putControl unguarded external "LIBRARY oodialog pbdlg_putControl" -- Not to be doumented. + -- Methods to manipulate a ComboBox ::method addComboEntry unguarded @@ -932,7 +933,6 @@ ::method newMonthCalendar unguarded external "LIBRARY oodialog pbdlg_newControl" ::method newDateTimePicker unguarded external "LIBRARY oodialog pbdlg_newControl" ::method newUpDown unguarded external "LIBRARY oodialog pbdlg_newControl" -::method putControl private unguarded external "LIBRARY oodialog pbdlg_putControl_pvt" ::method dumpMessageTable unguarded external "LIBRARY oodialog pbdlg_dumpMessageTable" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -4771,7 +4771,7 @@ return result; } -RexxMethod2(RexxObjectPtr, pbdlg_putControl_pvt, RexxObjectPtr, control, OSELF, self) +RexxMethod2(RexxObjectPtr, pbdlg_putControl, RexxObjectPtr, control, OSELF, self) { RexxObjectPtr bag = context->GetObjectVariable(CONTROLBAG_ATTRIBUTE); if ( bag == NULLOBJECT ) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBarControls.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBarControls.cpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBarControls.cpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -476,6 +476,50 @@ } +/** UpDown::getBuddy() + * + * Returns the buddy dialog control ojbect, or .nil if there is no buddy. + * + * @remarks createControlFromHwnd() can handle a null window handle, or a + * winUnknown type for the control type. In both cases, it simply + * returns the .nil object. This is what we want, so we don't check + * for those things. + */ +RexxMethod1(RexxObjectPtr, ud_getBuddy, CSELF, pCSelf) +{ + HWND hUpDown = getDChCtrl(pCSelf); + + HWND hBuddy = (HWND)SendMessage(hUpDown, UDM_GETBUDDY, 0, 0); + oodControl_t ctrl = control2controlType(hBuddy); + + return createControlFromHwnd(context, (pCDialogControl)pCSelf, hBuddy, ctrl, true); +} + + +/** UpDown::setBuddy() + * + * Sets the buddy control for the up-down and returns the old buddy, if there + * was one. + * + */ +RexxMethod2(RexxObjectPtr, ud_setBuddy, RexxObjectPtr, buddy, CSELF, pCSelf) +{ + RexxObjectPtr result = TheNilObj; + + if ( requiredClass(context->threadContext, buddy, "DIALOGCONTROL", 1) ) + { + pCDialogControl pcdc = controlToCSelf(context, buddy); + HWND hUpDown = getDChCtrl(pCSelf); + + HWND hOldBuddy = (HWND)SendMessage(hUpDown, UDM_SETBUDDY, (WPARAM)pcdc->hCtrl, 0); + + oodControl_t ctrl = control2controlType(hOldBuddy); + result = createControlFromHwnd(context, (pCDialogControl)pCSelf, hOldBuddy, ctrl, true); + } + return result; +} + + /** UpDown::getPosition() * * Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.cpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.cpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -401,11 +401,14 @@ * code. Actually, this is the only case so far, but the code is made generic * in the assumption that other uses will come up. * - * @param c The method context we are operating in. - * @param pcpbd The CSelf struct of the dialog the control resides in. - * @param hCtrl The window handle of the companion control. This can be null, - * in which case .nil is returned. - * @param type The type of the dialog control. + * @param c The method context we are operating in. + * @param pcpbd The CSelf struct of the dialog the control resides in. + * @param hCtrl The window handle of the companion control. This can be + * null, in which case .nil is returned. + * @param type The type of the dialog control. + * @param putInBag Whether the new Rexx dialog control object should be + * protected from garbage collection by being placed in the + * Rexx dialog object's control bag. * * @return A Rexx dialog control object that represents the dialo control, or * .nil if the object is not instantiated. @@ -414,7 +417,8 @@ * the parent dialog is a CategoryDialog, otherwise false. Since the * CategoryDialog is now deprecated, we just pass false. */ -RexxObjectPtr createControlFromHwnd(RexxMethodContext *c, pCPlainBaseDialog pcpbd, HWND hCtrl, oodControl_t type) +RexxObjectPtr createControlFromHwnd(RexxMethodContext *c, pCPlainBaseDialog pcpbd, HWND hCtrl, + oodControl_t type, bool putInBag) { RexxObjectPtr result = TheNilObj; @@ -425,7 +429,7 @@ uint32_t id = (uint32_t)GetDlgCtrlID(hCtrl); - result = createRexxControl(c, hCtrl, pcpbd->hDlg, id, type, pcpbd->rexxSelf, false, true); + result = createRexxControl(c, hCtrl, pcpbd->hDlg, id, type, pcpbd->rexxSelf, false, putInBag); done_out: return result; @@ -445,16 +449,20 @@ * In these cases, this function will convert the window handle to a Rexx dialog * control object. * - * @param c The method context we are operating in. - * @param pcdc The CSelf struct of the originating control. - * @param hCtrl The window handle of the dialog control. This can be null, in - * which case .nil is returned. - * @param type The type of the dialog control. + * @param c The method context we are operating in. + * @param pcdc The CSelf struct of the originating control. + * @param hCtrl The window handle of the dialog control. This can be null, + * in which case .nil is returned. + * @param type The type of the dialog control. + * @param putInBag Whether the new Rexx dialog control object should be + * protected from garbage collection by being placed in the + * Rexx dialog object's control bag. * * @return A Rexx dialog control object that represents the underlying Windows * dialog control, or .nil if the object is not instantiated. */ -RexxObjectPtr createControlFromHwnd(RexxMethodContext *c, pCDialogControl pcdc, HWND hCtrl, oodControl_t type) +RexxObjectPtr createControlFromHwnd(RexxMethodContext *c, pCDialogControl pcdc, HWND hCtrl, + oodControl_t type, bool putInBag) { RexxObjectPtr result = TheNilObj; @@ -466,7 +474,7 @@ bool isCategoryDlg = (c->IsOfType(pcdc->oDlg, "CATEGORYDIALOG") ? true : false); uint32_t id = (uint32_t)GetDlgCtrlID(hCtrl); - result = createRexxControl(c, hCtrl, pcdc->hDlg, id, type, pcdc->oDlg, isCategoryDlg, false); + result = createRexxControl(c, hCtrl, pcdc->hDlg, id, type, pcdc->oDlg, isCategoryDlg, putInBag); done_out: return result; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.hpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodControl.hpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -69,8 +69,8 @@ extern bool dt2sysTime(RexxThreadContext *c, RexxObjectPtr dateTime, SYSTEMTIME *sysTime, DateTimePart part); extern RexxStringObject objectStateToString(RexxMethodContext *c, uint32_t state); extern RexxObjectPtr createRexxControl(RexxMethodContext *, HWND, HWND, uint32_t, oodControl_t, RexxObjectPtr, bool, bool); -extern RexxObjectPtr createControlFromHwnd(RexxMethodContext *c, pCDialogControl pcdc, HWND hCtrl, oodControl_t type); -extern RexxObjectPtr createControlFromHwnd(RexxMethodContext *c, pCPlainBaseDialog pcpbd, HWND hCtrl, oodControl_t type); +extern RexxObjectPtr createControlFromHwnd(RexxMethodContext *, pCDialogControl, HWND, oodControl_t, bool); +extern RexxObjectPtr createControlFromHwnd(RexxMethodContext *, pCPlainBaseDialog, HWND, oodControl_t, bool); #define ButtonAtom 0x0080 #define EditAtom 0x0081 Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -2779,7 +2779,7 @@ * The system error code is set this way in addition to what the OS might * set: * - * ERROR_INVALID_FUNCTION(1) -> The method name argument can not be the + * ERROR_INVALID_PARAMETER(87) -> The method name argument can not be the * empty string. * * ERROR_WINDOW_NOT_DIALOG (1420) -> The dialog argument is not a @@ -2787,8 +2787,8 @@ * * ERROR_NOT_ENOUGH_MEMORY (8) -> The dialog message table is full. */ -RexxMethod5(logical_t, menu_connectCommandEvent_cls, RexxObjectPtr, rxID, CSTRING, methodName, - RexxObjectPtr, dlg, OPTIONAL_logical_t, isHandled, OSELF, self) +RexxMethod4(logical_t, menu_connectCommandEvent_cls, RexxObjectPtr, rxID, CSTRING, methodName, + RexxObjectPtr, dlg, OSELF, self) { logical_t success = FALSE; bool isSystemMenu = isOfClassType(context, self, "SystemMenu"); @@ -2807,7 +2807,7 @@ if ( *methodName == '\0' ) { - oodSetSysErrCode(context->threadContext, ERROR_INVALID_FUNCTION); + oodSetSysErrCode(context->threadContext, ERROR_INVALID_PARAMETER); goto done_out; } @@ -5712,10 +5712,8 @@ * is 0 indicating no help ID. * * @param count [optional] The count of menu items. This determines - * the size of memory allocated for the template, and is - * currently dangerous. If it is too small, we crash. - * The default is 100. - * TODO - we need to fix this. + * the size of memory allocated for the template. The + * default if omitted is 100. * * @param connect [optional] If true, each menu command item in the menu * is connected to a method. The name of the method is Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -4475,6 +4475,8 @@ * method is invoked through ~startWith(), which of course * returns immediately. * + * @return True if the event notification was connected, otherwsie false. + * * @note If a symbolic ID is used and it can not be resolved to a numeric * number an exception is raised. * Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -323,7 +323,7 @@ REXX_METHOD_PROTOTYPE(pbdlg_setControlData); REXX_METHOD_PROTOTYPE(pbdlg_getTextSizeDlg); REXX_METHOD_PROTOTYPE(pbdlg_newControl); -REXX_METHOD_PROTOTYPE(pbdlg_putControl_pvt); +REXX_METHOD_PROTOTYPE(pbdlg_putControl); REXX_METHOD_PROTOTYPE(pbdlg_dumpMessageTable); REXX_METHOD_PROTOTYPE(pbdlg_unInit); @@ -666,6 +666,8 @@ REXX_METHOD_PROTOTYPE(ud_getRange); REXX_METHOD_PROTOTYPE(ud_setRange); REXX_METHOD_PROTOTYPE(ud_getPosition); +REXX_METHOD_PROTOTYPE(ud_getBuddy); +REXX_METHOD_PROTOTYPE(ud_setBuddy); REXX_METHOD_PROTOTYPE(ud_getAcceleration); REXX_METHOD_PROTOTYPE(ud_setAcceleration); @@ -1054,7 +1056,7 @@ REXX_METHOD(pbdlg_setTabGroup, pbdlg_setTabGroup), REXX_METHOD(pbdlg_stopIt, pbdlg_stopIt), REXX_METHOD(pbdlg_newControl, pbdlg_newControl), - REXX_METHOD(pbdlg_putControl_pvt, pbdlg_putControl_pvt), + REXX_METHOD(pbdlg_putControl, pbdlg_putControl), REXX_METHOD(pbdlg_dumpMessageTable, pbdlg_dumpMessageTable), REXX_METHOD(pbdlg_unInit, pbdlg_unInit), @@ -1498,6 +1500,8 @@ REXX_METHOD(ud_getRange, ud_getRange), REXX_METHOD(ud_setRange, ud_setRange), REXX_METHOD(ud_getPosition, ud_getPosition), + REXX_METHOD(ud_getBuddy, ud_getBuddy), + REXX_METHOD(ud_setBuddy, ud_setBuddy), REXX_METHOD(ud_getAcceleration, ud_getAcceleration), REXX_METHOD(ud_setAcceleration, ud_setAcceleration), Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPropertySheetDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPropertySheetDialog.cpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPropertySheetDialog.cpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -3179,11 +3179,14 @@ * Retrieves the Rexx tab control object for the tab control of the property * sheet. * + * Note that in this case, once we instantiate the Rexx tab object, we do not + * want it garbage collected so we use specify true in the + * createControlFromHwnd() call to have it put in the dialog's control bag. */ RexxMethod1(RexxObjectPtr, psdlg_getTabControl, CSELF, pCSelf) { pCPropertySheetDialog pcpsd = (pCPropertySheetDialog)pCSelf; - return createControlFromHwnd(context, pcpsd->pcpbd, PropSheet_GetTabControl(pcpsd->hDlg), winTab); + return createControlFromHwnd(context, pcpsd->pcpbd, PropSheet_GetTabControl(pcpsd->hDlg), winTab, true); } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -1361,7 +1361,8 @@ RexxObjectPtr rxMDSVal; PDAYSTATE pDayState; - for ( size_t i = 1; i <= count; i++, pmds++ ) + MONTHDAYSTATE *p = pmds; + for ( size_t i = 1; i <= count; i++, p++ ) { rxMDSVal = c->ArrayAt(list, i); if ( rxMDSVal == NULLOBJECT || ! c->IsOfType(rxMDSVal, "DAYSTATE") ) @@ -1372,7 +1373,7 @@ } pDayState = (PDAYSTATE)c->ObjectToCSelf(rxMDSVal); - *pmds = pDayState->val; + *p = pDayState->val; } if ( mdsBuf != NULLOBJECT && ppmds != NULL ) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodViewControls.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodViewControls.cpp 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodViewControls.cpp 2011-05-03 03:07:20 UTC (rev 6959) @@ -428,14 +428,14 @@ char buf[256]; buf[0] = '\0'; - if ( style & MCS_DAYSTATE ) strcat(buf, "DAYSTATE" ); - if ( style & MCS_MULTISELECT ) strcat(buf, "MULTI" ); - if ( style & MCS_NOTODAY ) strcat(buf, "NOTODAY" ); - if ( style & MCS_NOTODAYCIRCLE ) strcat(buf, "NOCIRCLE" ); - if ( style & MCS_WEEKNUMBERS ) strcat(buf, "WEEKNUMBERS"); - if ( style & MCS_NOTRAILINGDATES ) strcat(buf, "NOTRAILING" ); - if ( style & MCS_SHORTDAYSOFWEEK ) strcat(buf, "SHORTDAYS" ); - if ( style & MCS_NOSELCHANGEONNAV ) strcat(buf, "NOSELCHANGE"); + if ( style & MCS_DAYSTATE ) strcat(buf, "DAYSTATE " ); + if ( style & MCS_MULTISELECT ) strcat(buf, "MULTI " ); + if ( style & MCS_NOTODAY ) strcat(buf, "NOTODAY " ); + if ( style & MCS_NOTODAYCIRCLE ) strcat(buf, "NOCIRCLE " ); + if ( style & MCS_WEEKNUMBERS ) strcat(buf, "WEEKNUMBERS "); + if ( style & MCS_NOTRAILINGDATES ) strcat(buf, "NOTRAILING " ); + if ( style & MCS_SHORTDAYSOFWEEK ) strcat(buf, "SHORTDAYS " ); + if ( style & MCS_NOSELCHANGEONNAV ) strcat(buf, "NOSELCHANGE "); *(buf + strlen(buf)) = '\0'; return c->String(buf); @@ -575,13 +575,16 @@ context->DirectoryPut(result, rxNewRect(context, &(info.rcButton)), "BUTTONRECT"); context->DirectoryPut(result, objectStateToString(context, info.stateButton), "BUTTONSTATE"); - RexxObjectPtr ctrl = createControlFromHwnd(context, (pCDialogControl)pCSelf, info.hwndDropDown, winMonthCalendar); + // TODO this really needs testing. MSN docs do not specifically say this is + // a month calendar control, rather they call it a drop down grid?? + // Assuming for now it is a month calendar. + RexxObjectPtr ctrl = createControlFromHwnd(context, (pCDialogControl)pCSelf, info.hwndDropDown, winMonthCalendar, false); context->DirectoryPut(result, ctrl, "DROPDOWN"); - ctrl = createControlFromHwnd(context, (pCDialogControl)pCSelf, info.hwndEdit, winEdit); + ctrl = createControlFromHwnd(context, (pCDialogControl)pCSelf, info.hwndEdit, winEdit, true); context->DirectoryPut(result, ctrl, "EDIT"); - ctrl = createControlFromHwnd(context, (pCDialogControl)pCSelf, info.hwndUD, winUpDown); + ctrl = createControlFromHwnd(context, (pCDialogControl)pCSelf, info.hwndUD, winUpDown, true); context->DirectoryPut(result, ctrl, "UPDOWN"); return result; @@ -645,11 +648,14 @@ * month calendar control is destroyed. Once the close up event is * received, the MonthCalendar object will no longer be valid. Invoking * methods on the object will raise a syntax condition. + * + * @note We do *not* have the new Rexx month calendar object put in the Rexx + * dialog's control bag to protect it from garbage collection. */ RexxMethod1(RexxObjectPtr, dtp_getMonthCal, CSELF, pCSelf) { HWND hDTP = getDChCtrl(pCSelf); - return createControlFromHwnd(context, (pCDialogControl)pCSelf, DateTime_GetMonthCal(hDTP), winMonthCalendar); + return createControlFromHwnd(context, (pCDialogControl)pCSelf, DateTime_GetMonthCal(hDTP), winMonthCalendar, false); } @@ -899,7 +905,7 @@ inline RexxObjectPtr setDayState(HWND hMC, LPMONTHDAYSTATE pmds, int count, RexxObjectPtr result) { - if ( result != TheFalseObj ) + if ( result != NULLOBJECT ) { result = (MonthCal_SetDayState(hMC, count, pmds) == 0 ? TheFalseObj : TheTrueObj); } @@ -1018,7 +1024,7 @@ bool putHitInfo(RexxMethodContext *c, RexxDirectoryObject hitInfo, MCHITTESTINFO *info) { - bool done = true; + bool done = true; // TODO TODO logic seems backwards here - default should be false, set to true if MCHT_NOWHERE bool needDate = false; switch ( info->uHit ) @@ -1334,7 +1340,7 @@ { if ( ! _isAtLeastVista() ) { - return wrongWindowsVersionException(context, "getBorder", "Vista"); + return wrongWindowsVersionException(context, "getCurrentView", "Vista"); } HWND hMC = getMonthCalendar(context, pCSelf); @@ -1387,10 +1393,6 @@ uint32_t ret = MonthCal_GetFirstDayOfWeek(hMC); - int32_t iDay = LOWORD(ret); - RexxObjectPtr usesLocale = HIWORD(ret) == 0 ? TheTrueObj : TheFalseObj; - CSTRING dayName = day2dayName(iDay); - if ( argumentExists(1) ) { if ( ! context->IsOfType(result, "DIRECTORY") ) Modified: sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi =================================================================== --- sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2011-05-03 03:05:12 UTC (rev 6958) +++ sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi 2011-05-03 03:07:20 UTC (rev 6959) @@ -310,6 +310,13 @@ File "${SamplesDir420}\userGuide\exercises\*.rex" ; Set the installation directory: + SetOutPath $INSTDIR\samples\oodialog\userGuide\exercises\Exercise04a + ; Add the files ... + File "${SamplesDir420}\userGuide\exercises\Exercise04a\*.h" + File "${SamplesDir420}\userGuide\exercises\Exercise04a\*.rc" + File "${SamplesDir420}\userGuide\exercises\Exercise04a\*.rex" + + ; Set the installation directory: SetOutPath $INSTDIR\samples\oodialog\wav ; Add the files ... File "${SamplesDir420}\wav\*.wav" Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.h =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.h (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.h 2011-05-03 03:07:20 UTC (rev 6959) @@ -0,0 +1,64 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/* Symbolic resource IDs for exercise 4a. */ + +#ifndef IDC_STATIC +#define IDC_STATIC (-1) +#endif + +#define IDD_DIALOG1 100 +#define IDR_MENU1 101 +#define IDC_ERROR_MSG 1000 +#define IDC_RECORD_CHANGES 1001 +#define IDM_NEWCUST___1 40000 +#define IDM_UPDATE___1 40001 +#define IDM_PRINT___1 40002 +#define IDC_CUST_ZIP 40003 +#define IDM_XXYYZZ 40003 +#define IDC_LAST_ORDER_DETAILS 40005 +#define IDC_EDIT_CUST_NO 40008 +#define IDC_EDIT_CUST_NAME 40009 +#define IDC_EDIT_CUST_ADDR 40010 +#define IDC_EDIT_CUST_ZIP 40011 +#define IDC_EDIT_CUST_DISCOUNT 40012 +#define IDC_LBL_CUST_DISCOUNT 40013 +#define IDC_LBL_CUST_LAST_ORDER 40014 +#define IDC_LBL_CUST_ADDR 40015 +#define IDC_LBL_CUST_NAME 40016 +#define IDC_LBL_CUST_NO 40017 +#define IDC_SHOW_LAST_ORDER 40028 Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.h ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rc =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rc (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rc 2011-05-03 03:07:20 UTC (rev 6959) @@ -0,0 +1,77 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +#include <windows.h> +#include <commctrl.h> +#include <richedit.h> +#include "CustomerView.h" + + +IDR_MENU1 MENU +{ + POPUP "Actions" + { + MENUITEM "New Customer...", IDM_NEWCUST___1 + MENUITEM "Update...", IDM_UPDATE___1 + MENUITEM "Print...", IDM_PRINT___1 + MENUITEM "Last Order", IDM_XXYYZZ + } +} + + +IDD_DIALOG1 DIALOG 0, 0, 275, 239 +STYLE DS_3DLOOK | DS_CENTER | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_THICKFRAME | WS_SYSMENU +EXSTYLE WS_EX_WINDOWEDGE +CAPTION "*CustomerName*" +FONT 8, "Microsoft Sans Serif" +{ + LTEXT "Name:", IDC_LBL_CUST_NAME, 18, 47, 22, 8, SS_LEFT + EDITTEXT IDC_EDIT_CUST_NO, 85, 20, 65, 15, ES_AUTOHSCROLL | ES_READONLY + LTEXT "Customer Number:", IDC_LBL_CUST_NO, 18, 22, 59, 8, SS_LEFT + EDITTEXT IDC_EDIT_CUST_NAME, 85, 45, 165, 14, ES_AUTOHSCROLL | ES_READONLY + LTEXT "Address:", IDC_LBL_CUST_ADDR, 18, 72, 28, 8, SS_LEFT + EDITTEXT IDC_EDIT_CUST_ADDR, 85, 70, 167, 40, ES_AUTOHSCROLL | ES_MULTILINE | ES_READONLY + LTEXT "Zip Code:", IDC_CUST_ZIP, 18, 122, 32, 8, SS_LEFT + EDITTEXT IDC_EDIT_CUST_ZIP, 85, 120, 65, 14, ES_AUTOHSCROLL | ES_READONLY + LTEXT "Last Order:", IDC_LBL_CUST_LAST_ORDER, 18, 177, 36, 8, SS_LEFT + LTEXT " ", IDC_LAST_ORDER_DETAILS, 88, 177, 145, 8, SS_LEFT + LTEXT "Discount Code:", IDC_LBL_CUST_DISCOUNT, 18, 149, 50, 8, SS_LEFT + EDITTEXT IDC_EDIT_CUST_DISCOUNT, 85, 145, 20, 14, ES_AUTOHSCROLL | ES_READONLY + LTEXT " ", IDC_ERROR_MSG, 18, 215, 8, 8, SS_LEFT + DEFPUSHBUTTON "Record Changes", IDC_RECORD_CHANGES, 130, 195, 58, 14, WS_DISABLED + PUSHBUTTON "Show Last Order", IDC_SHOW_LAST_ORDER, 195, 195, 58, 14 +} Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rc ___________________________________________________________________ Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rex 2011-05-03 03:07:20 UTC (rev 6959) @@ -0,0 +1,321 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +/* ooDialog User Guide + Exercise 04a: The CustomerView class + CustomerView.rex v00-02 08Apr11 + + Contains: class "CustomerView"; routine "startCustomerView". + Pre-requisite files: CustomerView.rc, CustomerView.h. + + Changes: + v00-02: Prevented close on enter key by providing no-op "ok" method. + Changed tab order on window by changing sequence of controls in .rc file +------------------------------------------------------------------------------*/ + +::requires "ooDialog.cls" + +/*////////////////////////////////////////////////////////////////////////////// + ============================================================================== + CustomerView v00-01 ddMmmyy + ------------- + The "view" (or "gui") part of the Customer component. + It is part of the sample Order Management application. + [interface (idl format)] + = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ +::CLASS CustomerView SUBCLASS RcDialog PUBLIC + --::ATTRIBUTE CustNo + --::ATTRIBUTE CustName + + /*---------------------------------------------------------------------------- + Init - creates the dialog instance but does not make it visible. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + ::METHOD init + expose menuBar + say "CustomerView-init-01" + + forward class (super) continue + + if \ self~createMenuBar then do -- if there was a problem + self~initCode = 1 + return + end + /* Comment: + 'initCode' is an attribute of a .Dialog - it represents the success + of initialization of a dialog object. For a dialog object, after the + init method has executed the initCode attribute will be 0 if the + dialog initialization detected no errors. The attribute will be non-zero + if initialization failed or an error was detected. + */ + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + + /*---------------------------------------------------------------------------- + createMenuBar - Creates the menu bar on the dialog. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + ::METHOD createMenuBar + expose menuBar + say "CustomerView-createMenuBar-01" + menuBar = .scriptMenuBar~new("CustomerView.rc", "IDR_MENU1", self, , , .true) + return .true + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + + /*---------------------------------------------------------------------------- + Activate - Shows the Dialog - i.e. makes it visible to the user. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + ::METHOD activate unguarded + say "CustomerView-activate-01" + self~execute("SHOWTOP") -- MUST be last! + return + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + + /*---------------------------------------------------------------------------- + InitDialog - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + ::METHOD initDialog -- Called by ooDialog + expose menuBar custControls + say "CustomerView-initDialog-01"; say + menuBar~attachTo(self) + + -- Create objects that map to the controls defined by the "customer.rc" file: + custControls = .Directory~new + custControls[ecCustNo] = self~newEdit("IDC_EDIT_CUST_NO") + custControls[ecCustName] = self~newEdit("IDC_EDIT_CUST_NAME") + custControls[ecCustAddr] = self~newEdit("IDC_EDIT_CUST_ADDR") + custControls[ecCustZip] = self~newEdit("IDC_EDIT_CUST_ZIP") + custControls[ecCustDiscount] = self~newEdit("IDC_EDIT_CUST_DISCOUNT") + -- Include the 'Record Changes' button to be able to change its focus later: + custControls[recordChangesBtn] = self~newPushButton("IDC_RECORD_CHANGES") + + -- Define event handler methods for push-buttons: + self~connectButtonEvent("IDC_RECORD_CHANGES","CLICKED",recordChanges) + self~connectButtonEvent("IDC_SHOW_LAST_ORDER","CLICKED",showLastOrder) + + -- Get app data and then show it: + self~getData + self~showData + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + + /*---------------------------------------------------------------------------- + MenuBar Methods: + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Actions->New... - Not fully implemented - merely tells user to use the + Customer List object (but this not implemented either!).*/ + ::METHOD newCustomer + msg = "You must use the Customer List to create a new Customer."||.endofline||, + "Would you like to open the Customer List now?" + hwnd = self~dlgHandle + answer = MessageDialog(msg,hwnd,"Create New Customer","YESNO","WARNING","DEFBUTTON2 APPLMODAL") + if answer = 6 then say "CustomerView-newCustomer-01: Customer List not yet implemented." + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Update - "Actions" - "Update..." + Sets fields to edit mode so that user can change the data. + Business Rule: Customer Number cannot be changed. */ + ::METHOD update + expose custControls + say "CustomerView-Update-01" + custControls[ecCustName]~setReadOnly(.false) + custControls[ecCustAddr]~setReadOnly(.false) + custControls[ecCustZip]~setReadOnly(.false) + custControls[ecCustDiscount]~setReadOnly(.false) + self~enableControl("IDC_RECORD_CHANGES") + custControls[recordChangesBtn]~state = "FOCUS" + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + LastOrder - "Actions" - "Show Last Order" + + Displays info about the last order placed by this customer. */ + ::METHOD lastOrder + orderDate="31/12/11"; orderNum = "ZZ999"; orderTotal = "$999.99" + lastOrder = orderDate " " orderNum " " orderTotal + self~newStatic("IDC_LAST_ORDER_DETAILS")~setText(lastOrder) + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + + /*---------------------------------------------------------------------------- + PushButton Methods + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "Record Changes" - Collects new data, checks if there has indeed been a + change, and if not, issues a warnign msg and disables + the button. */ + ::METHOD recordChanges + expose custControls custData newCustData + say "CustomerView-recordChanges-01" + + newCustData = .directory~new + newCustData[custName] = custControls[ecCustName]~getLine(1) + newCustData[custAddr] = .array~new + do i=1 to custControls[ecCustAddr]~lines + newCustData[custAddr][i] = custControls[ecCustAddr]~getLine(i) + end + newCustData[custZip] = custControls[ecCustZip]~getLine(1) + newCustData[custDiscount] = custControls[ecCustDiscount]~getLine(1) + + -- Check if anything's changed: + result = self~checkForChanges + if result then say "CustomerView-recordChanges-01: There were changes!" + else say "CustomerView-recordChanges-02: No Changes Found" + + /* Send new data to be checked by CustomerModel object (not implemented). */ + + /* Disable controls that were enabled by menu "File-Update" selection: */ + custControls[ecCustName]~setReadOnly(.true) + custControls[ecCustAddr]~setReadOnly(.true) + custControls[ecCustZip]~setReadOnly(.true) + custControls[ecCustDiscount]~setReadOnly(.true) + self~disableControl("IDC_RECORD_CHANGES") + + /*---------------------------------------------------------------------------- + "Show Last Order" - displays mock sales order info in the Last_Order_Details + field; info is hard-coded in this method. */ + ::METHOD showLastOrder + -- Notionally get last order from "OrderList" component. + orderDate="12/2/11"; orderNum = "AB123"; orderTotal = "$524.58" + lastOrder = orderDate " " orderNum " " orderTotal + self~newStatic("IDC_LAST_ORDER_DETAILS")~setText(lastOrder) + + /*---------------------------------------------------------------------------- + "OK" - This no-op method is provided to over-ride the default Windows action + resulting from pressing the Enter key. The default action is to close + the wiundow - even if there is no "OK" button on the dialog. */ + ::METHOD ok + + + /*---------------------------------------------------------------------------- + Application Methods + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + + /*---------------------------------------------------------------------------- + getData - gets data from the CustomerModel component (but data is hard-coded + in this version) and displays it in the appropriate controls. + The data would be returned from the CustomerModel component in a + collection - here we're using a directory. */ + ::METHOD getData + expose custData + + custData = .directory~new + arrCustAddr = .array~new + arrCustAddr[1] = "28 Frith Street" + arrCustAddr[2] = "Hardington" + arrCustAddr[3] = "Blockshire" + custData[custNo] = "AB15784" + custData[custName] = "Joe Bloggs & Co Ltd" + custData[CustAddr] = arrCustAddr + custData[custZip] = "LB7 4EJ" + custData[custDiscount]= "B1" + + /*---------------------------------------------------------------------------- + showData - displays data in the dialog's controls. */ + ::METHOD showData + expose custData custControls + -- Show CustNo and CustName: + custControls[ecCustNo]~setText(custData[custNo]) + custControls[ecCustName]~setText(custData[custName]) + -- Re-format Cust Address from an array into a string with line-ends + -- after each array element except the last, then show it. + arrCustAddr = custData[CustAddr] + strCustAddr = "" + do i=1 to arrCustAddr~items + if i < arrCustAddr~items then do + strCustAddr = strCustAddr||arrCustAddr[i] || .endofline + end + else do + strCustAddr = strCustAddr || arrCustAddr[i] + end + end + custControls[ecCustAddr]~setText(strCustAddr) + -- Finally, show Zip and Discount: + custControls[ecCustZip]~setText(custData[custZip]) + custControls[ecCustDiscount]~setText(custData[custDiscount]) + + /*-------------------------------------------------------------------------- + checkForChanges - after "Record Changes" actioned by the user, check whether + any data has actually changed. If it has: (a) assign new data to old data, + (b) return .true. If it hasn't: return .false. */ + ::METHOD checkForChanges + expose custData newCustData + + changed = .false + if newCustData[custName] \= custData[custName] then do + custData[custName] = newCustData[custName] + changed = .true + end + if custData[CustAddr]~items \= newCustData[CustAddr]~items then changed = .true + else + do i=1 to custData[custAddr]~items + if custData[custAddr][i] \= newCustData[custAddr][i] then do + changed = .true + leave + end + end + if newCustData[custZip] \= custData[custZip] then do + custdata[custZip] = newCustData[custZip] + changed = .true + end + if newCustData[custDiscount] \= custData[custDiscount] then do + custData[custDiscount] = newCustData[custDiscount] + changed = .true + end + -- If no changes after all, display message box: + if \changed then do + msg = "CustomerView-checkForChanges-01: Nothing was changed! Update not done." + hwnd = self~dlgHandle + answer = MessageDialog(msg,hwnd,"Update Customer","OK","WARNING","DEFBUTTON2 APPLMODAL") + end + say "CustomerView-checkForChanges-02: changed =" changed + return changed + +/*============================================================================*/ + + + +/*============================================================================*/ +::ROUTINE startCustomerView PUBLIC + + say "StartCustomerView Routine-01: .CustomerView~new..." + dlg = .CustomerView~new("customerView.rc", IDD_DIALOG1, dlgData., "customerView.h") + say "StartCustomerView Routine-02: dlg~activate..." + dlg~activate -- Must be the last statement. +/*============================================================================*/ Property changes on: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/Startup.rex =================================================================== --- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/Startup.rex (rev 0) +++ sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/Startup.rex 2011-05-03 03:07:20 UTC (rev 6959) @@ -0,0 +1,52 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2011-2011 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 */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHE... [truncated message content] |
From: <mie...@us...> - 2011-05-27 00:30:16
|
Revision: 6972 http://oorexx.svn.sourceforge.net/oorexx/?rev=6972&view=rev Author: miesfeld Date: 2011-05-27 00:30:06 +0000 (Fri, 27 May 2011) Log Message: ----------- Update sandbox version of ooDialog 4.2.0 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DynamicDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/RcDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UserDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodData.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodData.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPropertySheetDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodResources.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp sandbox/mark/ooDialog.beta/oorexx.ver sandbox/mark/ooDialog.beta/platform/windows/install/switchOODialog420_410.nsi sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/upDown.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/PropertySheetDemo.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/PropertySheetDemo.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/TabDemo.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sample.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Makefile.am Added Paths: ----------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/bmp/oodListViews1.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/bmp/oodListViews2.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodListViews.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/oodListViews.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/oodListViews.rc sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/Makefile.am Removed Paths: ------------- sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/bmp/oodlist1.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/bmp/oodlist2.bmp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodlist.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/oodlist.rc Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls 2011-05-27 00:30:06 UTC (rev 6972) @@ -62,44 +62,193 @@ /* Owner and Control Dialogs */ -::class 'OwnerDialog' mixinclass Object public +::class 'TabOwnerDialog' mixinclass Object public ::method init - say 'In OwnerDialog::init()' - --forward class (super) continue - say 'Back in OwnerDialog::init()' + use strict arg cSelf, initData + say 'In TabOwnerDialog::init() cSelf:' cSelf 'initData:' initData +::class 'ControlDlgInfo' subclass Object public + +::method init + use strict arg owner = .nil, title = "", size = (.size~new(200, 150)), wantNotifications = .false, - + tabIcon = (-1), resources = .nil, managed = .false + ::class 'ControlDialog' mixinclass Object public -::attribute initializing get unguarded external "LIBRARY oodialog ctrlDlg_get_initializing" -::attribute initializing set unguarded external "LIBRARY oodialog ctrlDlg_set_initializing" +::attribute isManaged get external "LIBRARY oodialog ctrlDlg_get_isManaged" +::attribute initializing get external "LIBRARY oodialog ctrlDlg_get_initializing" +::attribute initializing set external "LIBRARY oodialog ctrlDlg_set_initializing" + +::attribute pageTitle get external "LIBRARY oodialog ctrlDlg_getPageTitle" +::attribute pageTitle set external "LIBRARY oodialog ctrlDlg_setPageTitle" + +/*::attribute size get external "LIBRARY oodialog ctrlDlg_get_size" +::attribute size set external "LIBRARY oodialog ctrlDlg_set_size" + +::attribute wantAllNotifications get external "LIBRARY oodialog ctrlDlg_get_wantAllNotifications" +::attribute wantAllNotifications set external "LIBRARY oodialog ctrlDlg_set_wantAllNotifications" + +::attribute resources get unguarded +::attribute resources set external "LIBRARY oodialog psp_setResources_atr" + +::attribute tabIcon get unguarded +::attribute tabIcon set external "LIBRARY oodialog psp_setTabIcon_atr"*/ + + +::method controlDlgInit private external "LIBRARY oodialog ctrlDlg_controlDlgInit" + +::method beginExecution unguarded + + dlgData. = self~dlgData + + if self~startIt then do + if self~useStem then self~setDataStem(dlgData.) + else self~setData + + do while self~automaticMethods~Items > 0 + p = self~automaticMethods~pull + m = self~automaticMethods~pull + c = self~automaticMethods~pull + o = c~new(p, self) + o~start(m) + end + + self~waitForDialog + end + else do + self~finished = .true + self~stopIt + end + return 0 + + +::method endExecution unguarded + use strict arg isOkay = .false + + if isOkay then do + self~initCode = 1 + if self~useStem then self~getDataStem(self~dlgData) + self~getData + end + else do + self~initCode = 2 + end + self~finished = .true + + self~stopIt + return self~initCode + + +-- Return .true, it's okay to leave the page, .false it is not okay, stay on the page +::method tabPageKillActive + use strict arg owner + say "In ControlDialog::tabPageKillActive dlg:" self + return .true + + +::method initUpdateListView private + use strict arg lvID, pause = .005 + + self~addNewAttribute('updateListViewID', lvID, .true) + + src = .array~new + src[1] = "use strict arg hwnd" + src[2] = "" + src[3] = "lv = self~newListView(self~updateListViewID)" + src[4] = "if lv == .nil then return .false" + src[5] = "" + src[6] = "if hwnd == lv~hwnd then do" + src[7] = " j = SysSleep("pause")" + src[8] = " self~redraw" + src[9] = " return .true" + src[10] = "end" + src[11] = "return .false" + self~setMethod('updateListView', src) + + owner = self~ownerDialog + + owner~addNewAttribute(updateListViewPageDialog, self, .true, .true) + owner~addNewAttribute(updateListViewLastFocused, 0, .true, .true) + + src = .array~new + src[1] = "expose updateListViewPageDialog updateListViewLastFocused" + src[2] = "use arg flag, hwnd, hFocused, isMinimized" + src[3] = "" + src[4] = "reply .false" + src[5] = "" + src[6] = "if flag == INACTIVE then updateListViewLastFocused = hFocused" + src[7] = "else updateListViewPageDialog~updateListView(updateListViewLastFocused)" + owner~addNewMethod('onUpdateListViewActivate', src, .true) + + owner~connectActivate('onUpdateListViewActivate') + + ::class 'ResControlDialog' public subclass ResDialog inherit ControlDialog +::method startIt + + if self~startDialog(self~library, self~resourceID) then do + -- if autodetection is on, create the data attributes + if self~autoDetect then do + ids = self~getDataTableIDs + do id over ids + text = self~getControlText(id) + self~addAttribute(id, text) + end + end + + self~initDialog + self~initializing = .false + return .true + end + + return .false + ::method startDialog private external "LIBRARY oodialog resCtrlDlg_startDialog_pvt" +::method execute + self~start("BEGINEXECUTION") +::method popup + self~start("BEGINEXECUTION") +::method popupAsChild + self~start("BEGINEXECUTION") +::method executeAsync abstract +::method endAsyncExecution abstract + + ::class 'UserControlDialog' public subclass UserDialog inherit ControlDialog --- Over-ride the superclass startIt(). The superclass startIt() creates a top- --- level dialog and takes an 'icon' and a 'modeless' icon. We need to accept --- those arguments, but we don't use them. So we just ignore all args +-- Over-ride the superclass startIt(). This is invoked from +-- ControlDialog::beginExecution. ::method startIt - if self~basePtr = 0 then return 0 + if self~basePtr = 0 then return .false - if self~startChildDialog(self~basePtr, 0) == 0 then return 0 + if self~startChildDialog(self~basePtr, 0) == 0 then return .false self~initDialog self~initializing = .false; - return self~dlgHandle + return .true +::method execute + self~start("BEGINEXECUTION") +::method popup + self~start("BEGINEXECUTION") +::method popupAsChild + self~start("BEGINEXECUTION") +::method executeAsync abstract +::method endAsyncExecution abstract + + ::class 'RcControlDialog' subclass UserControlDialog public ::method init - use strict arg rcFile, idDlg, initData. = .nil, includeFile = "", options = "", expected = 200, ownerDlg = .nil + use strict arg rcFile, idDlg, initData. = .nil, includeFile = "", options = "", expected = 200, ownerData = .nil newArgs = .array~new(5) if arg(3, 'E') then newArgs[1] = arg(3) @@ -111,12 +260,25 @@ forward class (super) arguments (newArgs) continue if result <> 0 then return result - self~initCode = self~load(rcFile, idDlg, options, expected) + if \ self~isManaged then do + self~initCode = self~load(rcFile, idDlg, options, expected) + end return self~initCode +::method execute + self~start("BEGINEXECUTION") +::method popup + self~start("BEGINEXECUTION") +::method popupAsChild + self~start("BEGINEXECUTION") +::method executeAsync abstract +::method endAsyncExecution abstract + + + /* Property sheets and pages */ ::class 'PropertySheetDialog' public subclass PlainBaseDialog Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DialogControls.cls 2011-05-27 00:30:06 UTC (rev 6972) @@ -892,8 +892,18 @@ return sr~start sr~end -/******************* Tab Control Class ****************************************/ +/*********** Tab Control Class & Related **************************************/ +::class 'OwnedTabInfo' subclass Object public + +::attribute nID +::attribute sID +::attribute pages +::attribute tab + +::method init + use strict arg id, pages = (.array~new) + ::class 'TabControl' subclass DialogControl public ::class 'Tab' subclass TabControl public @@ -906,6 +916,7 @@ ::constant TCM_GETCURFOCUS "0x132F" ::constant TCM_DELETEALLITEMS "0x1309" ::constant TCM_DELETEITEM "0x1308" +::constant TCM_SETMINTABWIDTH "0x1331" ::method items unguarded use strict arg @@ -946,6 +957,10 @@ ret = self~sendWinIntMsg(self~TCM_DELETEALLITEMS, 0, 0) return ret == 0 +::method setMinTabWidth unguarded + use strict arg width + return self~sendWinIntMsg(self~TCM_SETMINTABWIDTH, 0, width) + ::method getItemRect unguarded external "LIBRARY oodialog tab_getItemRect" ::method setPadding unguarded external "LIBRARY oodialog tab_setPadding" ::method setItemSize unguarded external "LIBRARY oodialog tab_setItemSize" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DynamicDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DynamicDialog.cls 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/DynamicDialog.cls 2011-05-27 00:30:06 UTC (rev 6972) @@ -434,7 +434,8 @@ -- can be started correctly for DS_CONTROL dialogs. ::method loadFrame private use arg resfile, dialogid, options, expected - if arg(4,"o") | expected = 0 then expected = 200 + + if arg(4,"O") | expected = 0 then expected = 200 if options~translate~wordpos("CENTER") > 0 then internopts = "CENTER " else internopts = "" @@ -446,6 +447,7 @@ return 1 end + global = .constDirUsage == 'use only' found = 0; n = 0 fl = f~lines do while found = 0 @@ -462,8 +464,9 @@ end when s~wordpos("#define") > 0 then do s = s~translate(" ", "9"x) - parse var s "#define " symb iid - self~ConstDir[symb~space(0)~translate] = iid + parse var s "#define " symb iid . + if global then .constDir[symb] = iid + else self~constDir[symb~space(0)~translate] = iid end otherwise nop @@ -471,7 +474,7 @@ -- End select end if (self~checkfile(f) = 1) then return 1 - if arg(2,'o') = 1 | dialogid = "DIALOGID" then found = 1 + if arg(2,'O') | dialogid = "DIALOGID" then found = 1 else do foundID = s~word(n-1)~translate if foundID = dialogid~translate then found = 1 @@ -530,8 +533,9 @@ end when s~wordpos("#define") > 0 then do s = s~translate(" ", "9"x) - parse var s "#define " symb iid - self~ConstDir[symb~space(0)~translate] = iid + parse var s "#define " symb iid . + if global then .constDir[symb] = iid + else self~constDir[symb~space(0)~translate] = iid end otherwise nop @@ -560,23 +564,26 @@ say "Resource file not found --> " op return 1 end - if arg(3, "o") = 1 then loadOptions = ""; else loadOptions = loadOptions~translate + + global = .constDirUsage == 'use only' + if arg(3, "O") then loadOptions = ""; else loadOptions = loadOptions~translate 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 */ + -- This seems redundent, #defines were probably already caught in loadFrame() 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 + parse var s "#define " symb iid . + if global then .constDir[symb] = iid + else self~constDir[symb~space(0)~translate] = iid end n = s~wordpos("DIALOG") if n = 0 then n = s~wordpos("DIALOGEX") end if self~checkfile(f)=1 then return 1 - if arg(2,'o') = 1 | dialogid = "DIALOGID" then found = 1 + if arg(2, 'O') | dialogid = "DIALOGID" then found = 1 else do foundID = s~word(n-1)~translate if foundID = dialogid~translate then found = 1 @@ -592,7 +599,7 @@ end if self~checkfile(f)=1 then return 1 - self~ProcessingLoad = 1 + self~processingLoad = 1 do while fl > 0 & s~wordpos("END") = 0 & s~pos("}") = 0 s = f~linein; fl = fl - 1 if s~wordpos("END") > 0 | s~pos("}") > 0 then leave; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-05-27 00:30:06 UTC (rev 6972) @@ -52,49 +52,53 @@ -- WM_HELP (F1) ::method connectHelp - use strict arg msgToRise - return self~addUserMsg(msgToRise, "0x00000053", "0xFFFFFFFF", 0, 0, 0, 0, 0x00000101) + use strict arg msgToRise = 'onHelp' + return self~addUserMsg(msgToRise, 0x00000053, 0xFFFFFFFF, 0, 0, 0, 0, 0x00000101) -- WM_SIZE ::method connectResize - use strict arg msgToRise + use strict arg msgToRise = 'onResize' return self~addUserMsg(msgToRise, 0x00000005, 0xFFFFFFFF, 0, 0, 0, 0) -- WM_SIZING ::method connectResizing - use strict arg msgToRise + use strict arg msgToRise = 'onResizing' return self~addUserMsg(msgToRise, 0x00000214, 0xFFFFFFFF, 0, 0, 0, 0) -- WM_MOVE ::method connectMove - use strict arg msgToRise + use strict arg msgToRise = 'onMove' return self~addUserMsg(msgToRise, 0x00000003, 0xFFFFFFFF, 0, 0, 0, 0) +-- WM_ACTIVATE +::method connectActivate + use strict arg msgToRise = 'onActivate' + return self~addUserMsg(msgToRise, 0x00000006, 0xFFFFFFFF, 0, 0, 0, 0) + -- WM_EXITSIZEMOVE ::method connectSizeMoveEnded - use strict arg msgToRise, willReply = .true + use strict arg msgToRise = 'onSizeMoveEnded', willReply = .true tag = 0 if willReply then tag = 0x02000000 self~addUserMsg(msgToRise, "0x00000232", "0xFFFFFFFF", 0, 0, 0, 0, tag) -- WM_WINDOWPOSCHANGED ::method connectPosChanged - use strict arg msgToRise + use strict arg msgToRise = 'onPosChaged' return self~addUserMsg(msgToRise, 0x00000047, 0xFFFFFFFF, 0, 0, 0, 0) -- WM_DRAWITEM ::method connectDraw - use strict arg id = 0, msgToRaise = "" + use strict arg id = 0, msgToRaise = "onDraw" if \ id~dataType("W") then id = self~resolveSymbolicId(id) if id = -1 then return -1 - if msgToRaise == "" then msgToRaise = "onDraw" if id == 0 then return self~addUserMsg(msgToRaise, 0x0000002B, 0xFFFFFFFF, 0, 0, 0, 0) else return self~addUserMsg(msgToRaise, 0x0000002B, 0xFFFFFFFF, '0x0000'||id~d2x(4), 0xFFFFFFFF, 0, 0) -- WM_CAPTURECHANGED ::method connectMouseCapture - use strict arg msgToRise + use strict arg msgToRise = 'onCaptureChanged' return self~addUserMsg(msgToRise, 0x00000215, 0xFFFFFFFF, 0, 0, 0, 0) -- These methods map or unmap keyboard events to a method, or query if the mapping exists. Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls 2011-05-27 00:30:06 UTC (rev 6972) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2008-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2008-2011 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: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-05-27 00:30:06 UTC (rev 6972) @@ -195,119 +195,11 @@ return 0 -::class 'ResourceUtils' public mixinclass object - -/* Directory object containing symbolic constants */ -::attribute constDir get -::attribute constDir set private - -::attribute processingLoad private -- in loadItems ? - -::method parseIncludeFile - use strict arg hFile - - if \ SysIsFile(hFile) then do - -- TODO Revisit. Should a syntax condition be raised if the file is not found or readable? - hFile = SysSearchPath("PATH", hFile) - if hFile == "" then return .false - end - - 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 .true - -::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 = errorDialog("Error reading resource file!" f) - return 1 - end - return 0 - -::method errorfile private - use arg f, s - f~close - self~processingLoad = 0 - ret = errorDialog("Error reading resource file:" f "("s")") - -::method idError private external "LIBRARY oodialog rsrcUtils_idError" -::method resolveIconID private external "LIBRARY oodialog rsrcUtils_resolveIconID_pvt" -::method resolveSymbolicId unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" -::method resolveResourceID unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" -::method getResourceID unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" -::method checkID external "LIBRARY oodialog rsrcUtils_checkID" - -/** - * Return the 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 - symbol = self~constDir~index(numericID) - if symbol == .nil then return -1 - else return symbol - -::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 - ::class 'Window' public inherit WindowBase ::method init external "LIBRARY oodialog window_init" ::method unInit external "LIBRARY oodialog window_unInit" + /** * Used to return an object that is not a dialog object. See the * PlainBaseDialog::new() class method for details (pbdlg_new_cls.) @@ -718,8 +610,8 @@ attributeName = "DATA"id~space(0) self~dataConnection[id] = attributeName - self~setmethod(attributeName, "expose "attributeName"; return "attributeName) - self~setmethod(attributeName || "=", "expose "attributeName"; use arg "attributeName) + self~setMethod(attributeName, "expose "attributeName"; return "attributeName) + self~setMethod(attributeName || "=", "expose "attributeName"; use arg "attributeName) self~sendWith(attributeName || '=', .array~of("")) /* initial value = "" */ return id @@ -745,7 +637,35 @@ ::method putControl unguarded external "LIBRARY oodialog pbdlg_putControl" -- Not to be doumented. +-- Allow the user to dynamically add attributes or methods to a dialog. +::method addNewAttribute + use strict arg name, value = "", makeUnguarded = .false, makePrivate = .false + + self~setMethod(name, "expose "name"; return "name, "OBJECT") + self~setMethod(name || "=", "expose "name"; use arg "name, "OBJECT") + + if makeUnguarded then do + self~instanceMethod(name)~setUnguarded + self~instanceMethod(name || '=')~setUnguarded + end + + if makePrivate then do + self~instanceMethod(name)~setPrivate + self~instanceMethod(name || '=')~setPrivate + end + + self~sendWith(name || '=', .array~of(value)) + +::method addNewMethod + use strict arg name, src, makeUnguarded = .false, makePrivate = .false + + self~setMethod(name, src, "OBJECT") + + if makeUnguarded then self~instanceMethod(name)~setUnguarded + if makePrivate then self~instanceMethod(name)~setPrivate + + -- Methods to manipulate a ComboBox ::method addComboEntry unguarded Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/RcDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/RcDialog.cls 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/RcDialog.cls 2011-05-27 00:30:06 UTC (rev 6972) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2007-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2007-2011 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 */ @@ -48,13 +48,14 @@ ::class 'RcDialog' subclass UserDialog public ::method init - use arg rcFile, idDlg, initData., includeFile, options = "", expected = 200 + use strict arg rcFile, idDlg, initData. = .nil, includeFile = "", options = "", expected = 200, ownerExtra = .nil newArgs = .array~new(5) if arg(3, 'E') then newArgs[1] = arg(3) if arg(4, 'E') then newArgs[2] = arg(4) newArgs[3] = rcFile newArgs[4] = idDlg + if arg(5, 'E') then newArgs[5] = ownerExtra forward class (super) arguments (newArgs) continue if result <> 0 then return result Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UserDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UserDialog.cls 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UserDialog.cls 2011-05-27 00:30:06 UTC (rev 6972) @@ -1,7 +1,7 @@ /*----------------------------------------------------------------------------*/ /* */ /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */ -/* Copyright (c) 2005-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2005-2011 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: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-05-27 00:30:06 UTC (rev 6972) @@ -1,7 +1,7 @@ /*----------------------------------------------------------------------------*/ /* */ /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */ -/* Copyright (c) 2005-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2005-2011 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 */ @@ -42,9 +42,9 @@ * Utility Classes, "short-cut" dialogs and routines, public routines, and * utility dialogs. * - * Includes the .DlgUtil class which must be defined as the the first class. - * The class init() method of .DlgUtil controls the basic set up for the - * ooDialog framework. + * The mechanism for putting the .ApplicationClass object in the .local + * environment relies on maintaining the first class definitions in this file as + * being: .ResourceUtils, .ApplicationClass, and then .DlgUtils. * * Note: This "class" file can not be used by itself, as for instance * UserDialog.cls could. It is intended to be merged into the main @@ -53,6 +53,143 @@ * file, but are not present in this file. */ + +::class 'ResourceUtils' public mixinclass object + +/* Directory object containing symbolic constants */ +::attribute constDir get +::attribute constDir set private + +::attribute processingLoad private -- in loadItems ? + +::method parseIncludeFile + use strict arg hFile + + if \ SysIsFile(hFile) then do + hFile = SysSearchPath("PATH", hFile) + if hFile == "" then do + msg = 'Unable to find header file "'hFile'"' + j = MessageDialog(msg, 0, "File Not Found Error", "OK", "WARNING", "SYSTEMMODAL") + return .false + end + end + + f = .stream~new(hFile) + ret = f~open(read) + if ret \= "READY:" then do + msg = 'Header file "'hFile'" is not readable:' ret + j = MessageDialog(msg, 0, "File Open Error", "OK", "WARNING", "SYSTEMMODAL") + return .false + end + + global = .constDirUsage == 'use only' + + 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 do + if global then .constDir[symbol] = numericID + else self~constDir[symbol~translate] = numericID + end + end + end + f~close + return .true + +::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 = errorDialog("Error reading resource file!" f) + return 1 + end + return 0 + +::method errorfile private + use arg f, s + f~close + self~processingLoad = 0 + ret = errorDialog("Error reading resource file:" f "("s")") + +::method idError private external "LIBRARY oodialog rsrcUtils_idError" +::method resolveIconID private external "LIBRARY oodialog rsrcUtils_resolveIconID_pvt" +::method resolveSymbolicId unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" +::method resolveResourceID unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" +::method getResourceID unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" +::method checkID external "LIBRARY oodialog rsrcUtils_checkID" + +/** + * Return the 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 + symbol = self~constDir~index(numericID) + if symbol == .nil then return -1 + else return symbol + +::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 + + +::class 'ApplicationClass' public inherit ResourceUtils + +::method init external "LIBRARY oodialog app_init" +::method useGlobalConstDir external "LIBRARY oodialog app_useGlobalConstDir" + +::method speak + say "Hello to you" + +::method add + use strict arg hFile + say 'In ApplicationClass::add()' + self~parseIncludeFile(hFile) + ::class 'DlgUtil' public ::method init class external "LIBRARY oodialog dlgutil_init_cls" ::method version class external "LIBRARY oodialog dlgutil_version_cls" @@ -76,7 +213,6 @@ ::method threadID class external "LIBRARY oodialog dlgutil_threadID_cls" ::method test class external "LIBRARY oodialog dlgutil_test_cls" - ::class 'OS' public ::method is64bit class external "LIBRARY oodialog os_is64bit" ::method is32on64bit class external "LIBRARY oodialog os_is32on64bit" @@ -497,7 +633,69 @@ ::method key2name external "LIBRARY oodialog vk_key2name" +::class 'OEM' mixinclass Object public +::constant OBM_CLOSE 32754 +::constant OBM_UPARROW 32753 +::constant OBM_DNARROW 32752 +::constant OBM_RGARROW 32751 +::constant OBM_LFARROW 32750 +::constant OBM_REDUCE 32749 +::constant OBM_ZOOM 32748 +::constant OBM_RESTORE 32747 +::constant OBM_REDUCED 32746 +::constant OBM_ZOOMD 32745 +::constant OBM_RESTORED 32744 +::constant OBM_UPARROWD 32743 +::constant OBM_DNARROWD 32742 +::constant OBM_RGARROWD 32741 +::constant OBM_LFARROWD 32740 +::constant OBM_MNARROW 32739 +::constant OBM_COMBO 32738 +::constant OBM_UPARROWI 32737 +::constant OBM_DNARROWI 32736 +::constant OBM_RGARROWI 32735 +::constant OBM_LFARROWI 32734 +::constant OBM_OLD_CLOSE 32767 +::constant OBM_SIZE 32766 +::constant OBM_OLD_UPARROW 32765 +::constant OBM_OLD_DNARROW 32764 +::constant OBM_OLD_RGARROW 32763 +::constant OBM_OLD_LFARROW 32762 +::constant OBM_BTSIZE 32761 +::constant OBM_CHECK 32760 +::constant OBM_CHECKBOXES 32759 +::constant OBM_BTNCORNERS 32758 +::constant OBM_OLD_REDUCE 32757 +::constant OBM_OLD_ZOOM 32756 +::constant OBM_OLD_RESTORE 32755 + +::constant OCR_NORMAL 32512 +::constant OCR_IBEAM 32513 +::constant OCR_WAIT 32514 +::constant OCR_CROSS 32515 +::constant OCR_UP 32516 +::constant OCR_SIZENWSE 32642 +::constant OCR_SIZENESW 32643 +::constant OCR_SIZEWE 32644 +::constant OCR_SIZENS 32645 +::constant OCR_SIZEALL 32646 +::constant OCR_NO 32648 +::constant OCR_HAND 32649 +::constant OCR_APPSTARTING 32650 + +::constant OIC_SAMPLE 32512 +::constant OIC_HAND 32513 +::constant OIC_QUES 32514 +::constant OIC_BANG 32515 +::constant OIC_NOTE 32516 +::constant OIC_WINLOGO 32517 +::constant OIC_WARNING 32515 +::constant OIC_ERROR 32513 +::constant OIC_INFORMATION 32516 +::constant OIC_SHIELD 32518 + + /** * Standard Dialog Control Classes. Some simple short cut dialogs. */ @@ -1584,7 +1782,7 @@ use strict arg id id = dlgObject~getResourceID(id) - self~noResize~put(id) + if id > 0 then self~noResize~put(id) /* ------------------------------------------------------------------------- */ @@ -1597,7 +1795,7 @@ use strict arg id id = dlgObject~getResourceID(id) - self~noMove~put(id) + if id > 0 then self~noMove~put(id) /* ------------------------------------------------------------------------- */ Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-05-27 00:30:06 UTC (rev 6972) @@ -2671,6 +2671,93 @@ return pointer2string(c, hwndPrevious); } +/** + * Convenience function, called from PlainBaseDialog::init(). + * + * @param c + * @param self + * @param pcpbd + * @param ownerData + * + * @return bool + */ +static bool checkDlgType(RexxMethodContext *c, RexxObjectPtr self, pCPlainBaseDialog pcpbd, RexxObjectPtr ownerData) +{ + bool arg5Exists = (c->arguments[5].flags & ARGUMENT_EXISTS) != 0; + + if ( c->IsOfType(self, "CATEGORYDIALOG") ) + { + pcpbd->isCategoryDlg = true; + } + else if ( c->IsOfType(self, "CONTROLDIALOG") ) + { + if ( arg5Exists ) + { + if ( c->IsOfType(ownerData, "PLAINBASEDIALOG") ) + { + pCPlainBaseDialog ownerPcpbd = requiredDlgCSelf(c, ownerData, oodPlainBaseDialog, 5); + if ( ownerPcpbd == NULL ) + { + goto err_out; + } + + pcpbd->rexxOwner = ownerData; + pcpbd->hOwnerDlg = ownerPcpbd->hDlg; + pcpbd->initPrivate = TheNilObj; + } + else if( c->IsOfType(ownerData, "CONTROLDLGINFO") ) + { + pCControlDialogInfo pccid = (pCControlDialogInfo)c->ObjectToCSelf(ownerData); + if ( pccid->owner != NULLOBJECT ) + { + pCPlainBaseDialog ownerPcpbd = dlgToCSelf(c, pccid->owner); + + pcpbd->rexxOwner = pccid->owner; + pcpbd->hOwnerDlg = ownerPcpbd->hDlg; + pcpbd->initPrivate = ownerData; + } + } + else + { + wrongArgValueException(c->threadContext, 5, "a PlainBaseDialog or a ControlDialogInfo object", ownerData); + goto err_out; + } + } + + pcpbd->isControlDlg = true; + } + else if ( c->IsOfType(self, "TABOWNERDIALOG") ) + { + if ( arg5Exists ) + { + if ( ! c->IsOfType(ownerData, "DIRECTORY") ) + { + wrongClassException(c->threadContext, 5, "Directory"); + goto err_out; + } + pcpbd->initPrivate = ownerData; + } + else + { + pcpbd->initPrivate = TheNilObj; + } + pcpbd->isTabOwnerDlg = true; + } + else if ( c->IsOfType(self, "PROPERTYSHEETDIALOG") ) + { + pcpbd->isPropSheetDlg = true; + } + else if ( c->IsOfType(self, "PROPERTYSHEETPAGE") ) + { + pcpbd->isPageDlg = true; + } + + return true; + +err_out: + return false; +} + RexxMethod1(RexxObjectPtr, pbdlg_init_cls, OSELF, self) { if ( isOfClassType(context, self, PLAINBASEDIALOG_CLASS) ) @@ -2765,11 +2852,17 @@ return dlgObj; } - /** PlainBaseDialog::init() * * The initialization of the base dialog. * + * @params library DLL or .rc file for ResDialog or RcDialog dialogs. + * @params resource Resource ID for ResDialog or RcDialog dialogs. + * @params dlgDataStem Data stem. + * @params hFile Header file. + * @params ownerData Owner data can be either a Rexx owner dialog if this + * is a ControlDialog, or a .directory object with + * initialization data if this is a TabOwnerDialog. * * @remarks Prior to 4.0.1, if something failed here, the 'init code' was set * to non-zero. One problem with this is that it relies on the user @@ -2791,11 +2884,12 @@ * number of active dialogs has been reached. (See * PlainBaseDialog::new().) */ -RexxMethod5(wholenumber_t, pbdlg_init, CSTRING, library, RexxObjectPtr, resource, - OPTIONAL_RexxObjectPtr, dlgDataStem, OPTIONAL_RexxObjectPtr, hFile, OSELF, self) +RexxMethod6(RexxObjectPtr, pbdlg_init, CSTRING, library, RexxObjectPtr, resource, + OPTIONAL_RexxObjectPtr, dlgDataStem, OPTIONAL_RexxObjectPtr, hFile, + OPTIONAL_RexxObjectPtr, ownerData, OSELF, self) { // This is an error return, but see remarks. - wholenumber_t result = 1; + RexxObjectPtr result = TheOneObj; // Before processing the arguments, do everything that might raise an error // condition. @@ -2806,6 +2900,7 @@ { goto terminate_out; } + context->SetObjectVariable("CSELF", cselfBuffer); pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)context->BufferData(cselfBuffer); memset(pcpbd, 0, sizeof(CPlainBaseDialog)); @@ -2841,31 +2936,15 @@ strcpy(pcpbd->library, library); pcpbd->resourceID = resource; - if ( context->IsOfType(self, "CONTROLDIALOG") ) + if ( ! checkDlgType(context, self, pcpbd, ownerData) ) { - pcpbd->isControlDlg = true; - pcpbd->isInitializing = true; + goto terminate_out; } - else if ( context->IsOfType(self, "CATEGORYDIALOG") ) - { - pcpbd->isCategoryDlg = true; - } - else if ( context->IsOfType(self, "PROPERTYSHEETDIALOG") ) - { - pcpbd->isPropSheetDlg = true; - } - else if ( context->IsOfType(self, "PROPERTYSHEETPAGE") ) - { - pcpbd->isPageDlg = true; - } - pcpbd->interpreter = context->threadContext->instance; - pcpbd->dlgAllocated = true; - pcpbd->autoDetect = (pcpbd->isPropSheetDlg ? FALSE : TRUE); - pcpbd->rexxSelf = self; + pcpbd->interpreter = context->threadContext->instance; + pcpbd->autoDetect = (pcpbd->isPropSheetDlg ? FALSE : TRUE); + pcpbd->rexxSelf = self; - context->SetObjectVariable("CSELF", cselfBuffer); - // Set our default font to the PlainBaseDialog class default font. pCPlainBaseDialogClass pcpbdc = dlgToClassCSelf(context); strcpy(pcpbd->fontName, pcpbdc->fontName); @@ -2880,9 +2959,10 @@ CountDialogs++; DialogTable[pcpbd->tableIndex] = pcpbd; } + pcpbd->dlgAllocated = true; // Now process the arguments and do the rest of the initialization. - result = 0; + result = TheZeroObj; if ( argumentExists(3) ) { @@ -2906,36 +2986,26 @@ context->SendMessage1(self, "MENUBAR=", TheNilObj); context->SendMessage1(self, "ISLINKED=", TheFalseObj); - RexxDirectoryObject constDir = context->NewDirectory(); - context->SendMessage1(self, "CONSTDIR=", constDir); // self~constDir = .directory~new + if ( TheConstDirUsage == globalOnly ) + { + context->SendMessage1(self, "CONSTDIR=", TheConstDir); // self~constDir = .constDir (global) + } + else + { + RexxDirectoryObject constDir = context->NewDirectory(); + context->SendMessage1(self, "CONSTDIR=", constDir); // self~constDir = .directory~new + putDefaultSymbols(context, constDir); + } - context->DirectoryPut(constDir, context->Int32(IDC_STATIC), "IDC_STATIC"); // -1 - context->DirectoryPut(constDir, context->Int32(IDOK ), "IDOK"); // 1 - context->DirectoryPut(constDir, context->Int32(IDCANCEL ), "IDCANCEL"); // 2 - context->DirectoryPut(constDir, context->Int32(IDABORT ), "IDABORT"); // ... - context->DirectoryPut(constDir, context->Int32(IDRETRY ), "IDRETRY"); - context->DirectoryPut(constDir, context->Int32(IDIGNORE ), "IDIGNORE"); - context->DirectoryPut(constDir, context->Int32(IDYES ), "IDYES"); - context->DirectoryPut(constDir, context->Int32(IDNO ), "IDNO"); - context->DirectoryPut(constDir, context->Int32(IDCLOSE ), "IDCLOSE"); - context->DirectoryPut(constDir, context->Int32(IDHELP ), "IDHELP"); // 9 - context->DirectoryPut(constDir, context->Int32(IDTRYAGAIN), "IDTRYAGAIN"); // 10 - context->DirectoryPut(constDir, context->Int32(IDCONTINUE), "IDCONTINUE"); // 11 - context->DirectoryPut(constDir, context->Int32(IDI_DLG_OODIALOG), "IDI_DLG_OODIALOG"); // This is 12 - context->DirectoryPut(constDir, context->Int32(IDI_DLG_APPICON), "IDI_DLG_APPICON"); - context->DirectoryPut(constDir, context->Int32(IDI_DLG_APPICON2), "IDI_DLG_APPICON2"); - context->DirectoryPut(constDir, context->Int32(IDI_DLG_OOREXX), "IDI_DLG_OOREXX"); - context->DirectoryPut(constDir, context->Int32(IDI_DLG_DEFAULT), "IDI_DLG_DEFAULT"); - if ( argumentExists(4) ) { context->SendMessage1(self, "PARSEINCLUDEFILE", hFile); } - if ( context->IsOfType(self, "OwnerDialog") ) - { - RexxClassObject ownerClass = rxGetContextClass(context, "OWNERDIALOG"); - RexxArrayObject args = context->ArrayOfOne(cselfBuffer); + if ( pcpbd->isTabOwnerDlg ) + { // TODO move to subclass init + RexxClassObject ownerClass = rxGetContextClass(context, "TABOWNERDIALOG"); + RexxArrayObject args = context->ArrayOfTwo(cselfBuffer, ownerData); context->ForwardMessage(NULL, NULL, ownerClass, args); } @@ -2946,7 +3016,7 @@ return result; done_out: - pWB->initCode = result; + pWB->initCode = (result == TheZeroObj ? 0 : 1); return result; } @@ -2970,8 +3040,10 @@ LeaveCriticalSection(&crit_sec); + // If we are terminating the interpreter from PlainBaseDialog::init on + // an error condition, it possible for pcwb to be NULL. pCWindowBase pcwb = pcpbd->wndBase; - if ( pcwb->rexxHwnd != TheZeroObj ) + if ( pcwb != NULL && pcwb->rexxHwnd != TheZeroObj ) { context->ReleaseGlobalReference(pcwb->rexxHwnd); pcwb->rexxHwnd = TheZeroObj; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp 2011-05-27 00:30:06 UTC (rev 6972) @@ -229,13 +229,16 @@ // Enum for the type of an ooDialog class. Types to be added as needed. typedef enum { - oodPlainBaseDialog, oodCategoryDialog, oodUserDialog, oodRcDialog, oodResDialog, - oodControlDialog, oodUserPSPDialog, oodRcPSPDialog, oodResPSPDialog, oodDialogControl, - oodStaticControl, oodButtonControl, oodEditControl, oodListBox, oodProgressBar, - oodUnknown + oodPlainBaseDialog, oodCategoryDialog, oodUserDialog, oodRcDialog, oodResDialog, + oodControlDialog, oodUserControlDialog, oodRcControlDialog, oodResControlDialog, oodUserPSPDialog, + oodRcPSPDialog, oodResPSPDialog, oodDialogControl, oodStaticControl, oodButtonControl, + oodEditControl, oodListBox, oodProgressBar, oodUnknown } oodClass_t; +// How the Global constDir is to be used +typedef enum {globalOnly, globalFirst, globalLast, globalNever} oodConstDir_t; + inline LONG_PTR setWindowPtr(HWND hwnd, int index, LONG_PTR newPtr) { #ifndef __REXX64__ @@ -532,6 +535,7 @@ HWND hOwnerDlg; RexxObjectPtr rexxParent; // This dialog's Rexx parent dialog object void *dlgPrivate; // Subclasses can store data unique to the subclass + void *initPrivate; // Subclasses can store init data unique to the subclass DATATABLEENTRY *DataTab; ICONTABLEENTRY *IconTab; COLORTABLEENTRY *ColorTab; @@ -554,10 +558,10 @@ bool onTheTop; bool isCategoryDlg; // Need to use IsNestedDialogMessage() bool isControlDlg; // Dialog was created as DS_CONTROL | WS_CHILD - bool isInitializing; // ControlDialog attribute bool isOwnedDlg; // Dialog has an owner dialog bool isPageDlg; // Dialog is a property sheet page dialog bool isPropSheetDlg; // Dialog is a property sheet dialog + bool isTabOwnerDlg; // Dialog is a tab owner dialog bool sharedIcon; bool didChangeIcon; bool isActive; @@ -597,6 +601,30 @@ } CDynamicDialog; typedef CDynamicDialog *pCDynamicDialog; +/* Struct for the ControlDialogInfo object CSelf. */ +typedef struct _cdiCSelf { + SIZE size; + RexxObjectPtr owner; + CSTRING title; + HINSTANCE hInstance; // resources attribute, C++ part of .ResourceImage + HICON hIcon; // tabIcon attribute, C++ part if using .Image + uint32_t iconID; // tabIcon attribute, C++ part if using resource ID + bool wantNotifications; + bool managed; +} CControlDialogInfo; +typedef CControlDialogInfo *pCControlDialogInfo; + +/* Struct for the ControlDialog object CSelf. */ +typedef struct _cdCSelf { + pCPlainBaseDialog pcpbd; + RexxObjectPtr rexxSelf; + char *pageTitle; + oodClass_t pageType; + bool isInitializing; + bool isManaged; +} CControlDialog; +typedef CControlDialog *pCControlDialog; + /* Struct for the PropertySheetPage object CSelf. */ typedef struct _pspCSelf { RexxInstance *interpreter; @@ -681,6 +709,9 @@ extern RexxObjectPtr TheTwoObj; extern RexxObjectPtr TheOneObj; extern RexxObjectPtr TheNegativeOneObj; +extern RexxObjectPtr TheApplicationObj; +extern RexxDirectoryObject TheConstDir; +extern oodConstDir_t TheConstDirUsage; extern RexxDirectoryObject TheDotLocalObj; extern RexxPointerObject TheNullPtrObj; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp 2011-05-27 00:27:08 UTC (rev 6971) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp 2011-05-27 00:30:06 UTC (rev 6972) @@ -187,9 +187,14 @@ pCPlainBaseDialog pcpbd = args->pcpbd; bool *release = args->release; - // Pass the pointer to the CSelf for this dialog to WM_INITDIALOG. + DLGPROC dlgProc = (DLGPROC)RexxDlgProc; + if ( pcpbd->isTabOwnerDlg ) + { + dlgProc = (DLGPROC)RexxTabOwnerDlgProc; + } + pcpbd->hDlg = CreateDialogParam(pcpbd->hInstance, MAKEINTRESOURCE(args->resourceId), pcpbd->hOwnerDlg, - (DLGPROC)RexxDlgProc, (LPARAM)pcpbd); + dlgProc, (LPARAM)pcpbd); if ( pcpbd->hDlg == NULL ) { @@ -201,7 +206,7 @@ if ( pcpbd->autoDetect ) { - args->autoDetectResult = doDataAutoDetection(pcpbd); + args->autoDetectResult = doDataAutoDetection(NULL, pcpbd); if ( args->autoDetectResult == OOD_MEMORY_ERR ) { pcpbd->hDlgProcThread = NULL; @@ -286,10 +291,10 @@ RexxMethod7(RexxObjectPtr, resdlg_init, RexxObjectPtr, library, RexxObjectPtr, resourceID, OPTIONAL_RexxObjectPtr, dlgData, - OPTIONAL_RexxObjectPtr, includeFile, OPTIONAL_RexxObjectPtr, owner, + OPTIONAL_RexxObjectPtr, includeFile, OPTIONAL_RexxObjectPtr, ownerData, SUPER, super, OSELF, self) { - RexxArrayObject newArgs = context->NewArray(4); + RexxArrayObject newArgs = context->NewArray(5); context->ArrayPut(newArgs, library, 1); context->ArrayPut(newArgs, resourceID, 2); @@ -301,22 +306,32 @@ { context->ArrayPut(newArgs, includeFile, 4); } + if ( argumentExists(5) ) + { + context->ArrayPut(newArgs, ownerData, 5); + } + RexxObjectPtr result = context->ForwardMessage(NULL, NULL, super, newArgs); - if ( isInt(0, result, context->threadContext) ) + if ( result == TheZeroObj ) { pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)context->GetCSelf(); - if ( argumentExists(5) ) + if ( pcpbd->isControlDlg || pcpbd->isTabOwnerDlg) { - pCPlainBaseDialog ownerPcpbd = requiredDlgCSelf(context, owner, oodPlainBaseDialog, 5); - if ( ownerPcpbd == NULL ) + RexxPointerObject p = context->NewPointer(pcpbd); + + if ( pcpbd->isControlDlg ) { - return TheOneObj; + result = context->SendMessage1(self, "CONTROLDLGINIT", p); } - pcpbd->rexxOwner = owner; - pcpbd->hOwnerDlg = ownerPcpbd->hDlg; + /* Going to need TabOwnerDialog also, save space + if ( result == TheZeroObj && pcpbd->isTabOwnerDlg ) + { + result = context->SendMessage1(self, "TABOWNERDLGINIT", p); + } + */ } } @@ -435,38 +450,202 @@ /** + * Methods for the .ControlDlgInfo class. + */ +#define CONTROLDLGINFO_CLASS "ControlDlgInfo" + + +RexxMethod8(RexxObjectPtr, cdi_init, OPTIONAL_RexxObjectPtr, owner, OPTIONAL_CSTRING, title, OPTIONAL_RexxObjectPtr, _size, + OPTIONAL_logical_t, wantNotifications, OPTIONAL_RexxObjectPtr, tabIcon, OPTIONAL_RexxObjectPtr, resources, + OPTIONAL_logical_t, managed, OSELF, self) +{ + RexxBufferObject obj = context->NewBuffer(sizeof(CControlDialogInfo)); + context->SetObjectVariable("CSELF", obj); + + RexxMethodContext *c = context; + + pCControlDialogInfo pccdi = (pCControlDialogInfo)context->BufferData(obj); + memset(pccdi, 0, sizeof(CControlDialogInfo)); + + if ( argumentExists(1) ) + { + if ( ! c->IsOfType(owner, "CONTROLDLGINFO") ) + { + wrongClassException(c->threadContext, 1, "ControlDlgInfo"); + goto done_out; + } + pccdi->owner; + } + + if ( argumentExists(2) ) + { + char *t = (char *)LocalAlloc(LPTR, strlen(title) + 1); + if ( t == NULL ) + { + outOfMemoryException(context->threadContext); + goto done_out; + } + + strcpy((char *)pccdi->title, title); + } + + if ( argumentExists(3) ) + { + SIZE *s = rxGetSize(context, _size, 3); + if ( s == NULL ) + { + goto done_out; + } + pccdi->size.cx = s->cx; + pccdi->size.cy = s->cy; + } + else + { + pccdi->size.cx = 200; + pccdi->size.cy = 150; + } + + pccdi->wantNotifications = wantNotifications ? true : false; + + +done_out: + return NULLOBJECT; +} + +/** * Methods for the .ControlDialog class. */ #define CONTROLDIALOG_CLASS "ControlDialog" -RexxMethod1(RexxObjectPtr, ctrlDlg_get_initializing, OSELF, self) +static inline pCControlDialog validateCdCSelf(RexxMethodContext *c, void *pCSelf) { - pCPlainBaseDialog pcpbd = dlgToCSelf(context, self); - if ( pcpbd != NULL ) + pCControlDialog pccd = (pCControlDialog)pCSelf; + if ( pccd == NULL ) { - return pcpbd->isInitializing ? TheTrueObj : TheFalseObj; + baseClassIntializationException(c); } + return pccd; +} - baseClassIntializationException(context); + +/** ControlDialog::controlDlgInit() [private] + * + * @param cpbd Pointer to the PlainBaseDialog CSelf. + * @param ownerData Owner data. + */ +RexxMethod2(RexxObjectPtr, ctrlDlg_controlDlgInit, POINTER, cpbd, OSELF, self) +{ + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)cpbd; + + RexxBufferObject pcdBuffer = context->NewBuffer(sizeof(CControlDialog)); + if ( pcdBuffer == NULLOBJECT ) + { + return TheOneObj; + } + + pCControlDialog pccd = (pCControlDialog)context->BufferData(pcdBuffer); + memset(pccd, 0, sizeof(CControlDialog)); + + pccd->pcpbd = pcpbd; + pccd->rexxSelf = self; + pccd->isInitializing = true; + pccd->isManaged = false; + pccd->pcpbd->dlgPrivate = pccd; + + if ( context->IsOfType(self, "USERCONTROLDIALOG") ) + { + pccd->pageType = oodUserControlDialog; + } + else if( context->IsOfType(self, "RCCONTROLDIALOG") ) + { + pccd->pageType = oodRcControlDialog; + } + else + { + pccd->pageType = oodResControlDialog; + } + + context->SetObjectVariable("CSELF", pcdBuffer); + + return TheZeroObj; +} + +/** ControlDialog::initializing() [Attribute get] + */ +RexxMethod1(RexxObjectPtr, ctrlDlg_get_initializing, CSELF, pCSelf) +{ + pCControlDialog pccd = validateCdCSelf(context, pCSelf); + if ( pccd != NULL ) + { + return pccd->isInitializing ? TheTrueObj : TheFalseObj; + } return NULLOBJECT; } +/** ControlDialog::initializing() [Attribute set] + */ +RexxMethod2(RexxObjectPtr, ctrlDlg_set_initializing, logical_t, initializing, CSELF, pCSelf) +{ + pCControlDialog pccd = validateCdCSelf(context, pCSelf); + if ( pccd != NULL ) + { + pccd->isInitializing = initializing ? true : false; + } + return NULLOBJECT; +} -RexxMethod2(RexxObjectPtr, ctrlDlg_set_initializing, logical_t, initializing, OSELF, self) +/** ControlDialog::isManaged() [Attribute get] + */ +RexxMethod1(RexxObjectPtr, ctrlDlg_get_isManaged, CSELF, pCSelf) { - pCPlainBaseDialog pcpbd = dlgToCSelf(context, self); - if ( pcpbd == NULL ) + pCControlDialog pccd = validateCdCSelf(context, pCSelf); + if ( pccd != NULL ) { - baseClassIntializationException(context); + return pccd->isManaged ? TheTrueObj : TheFalseObj; } - else + return NULLOBJECT; +} + +/** ControlDialog::pageTitle() [Attribute get] + */ +RexxMethod1(RexxObjectPtr, ctrlDlg_getPageTitle, CSELF, pCSelf) +{ + pCControlDialog pccd = validateCdCSelf(context, pCSelf); + if ( pccd != NULL ) { - pcpbd->isInitializing = initializing ? true : false; + return pccd->pageTitle == NULL ? TheNilObj : context->String(pccd->pageTitle); } ... [truncated message content] |
From: <mie...@us...> - 2011-05-27 03:43:24
|
Revision: 6974 http://oorexx.svn.sourceforge.net/oorexx/?rev=6974&view=rev Author: miesfeld Date: 2011-05-27 03:43:14 +0000 (Fri, 27 May 2011) Log Message: ----------- Sync sandbox ooDialog 4.2.0 with main thtough r6973 Modified Paths: -------------- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/APICommon.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/APICommon.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMessaging.hpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPackageEntry.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodPropertySheetDialog.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodResources.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUser.cpp sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodUtilities.cpp sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/PropertySheetDemo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/TabDemo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/PaidHolidays.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/controls/upDown.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoThree.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/dlgAreaUDemoTwo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/imageButton.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/examples/useTools.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/BinaryMenuBar.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/menus/UserMenuBar.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oleinfo/oleinfo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodListViews.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/oodraw.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/TabDemo.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/rc/ticketWizard.h sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/sysinfo/sysinfo.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/ticketWizard.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/userGuide/exercises/Exercise04a/CustomerView.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/winsystem/displayAnyMenu.rex sandbox/mark/ooDialog.beta/samples/windows/oodialog.4.2.0/winsystem/displayWindowTree.rex Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/APICommon.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/APICommon.cpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/APICommon.cpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -411,6 +411,13 @@ userDefinedMsgException(c, buffer); } +void arrayToLargeException(RexxThreadContext *c, uint32_t found, uint32_t max, int argPos) +{ + TCHAR buffer[256]; + _snprintf(buffer, sizeof(buffer), "Argument %d, array items (%d) exceeds maximum (%d) allowed (%d)", argPos, found, max); + userDefinedMsgException(c, buffer); +} + void sparseArrayException(RexxThreadContext *c, size_t argPos, size_t index) { TCHAR buffer[256]; @@ -789,6 +796,23 @@ } +bool isOutOfMemoryException(RexxThreadContext *c) +{ + RexxCondition condition; + RexxDirectoryObject condObj = c->GetConditionInfo(); + + if ( condObj != NULLOBJECT ) + { + c->DecodeConditionInfo(condObj, &condition); + if ( condition.code == 48900 ) + { + return true; + } + } + return false; +} + + /** * Outputs the typical condition message. For example: * Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/APICommon.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/APICommon.hpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/APICommon.hpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -77,6 +77,7 @@ extern void directoryIndexException(RexxThreadContext *c, size_t pos, CSTRING index, CSTRING msg, RexxObjectPtr actual); extern void wrongValueAtDirectoryIndexException(RexxThreadContext *, size_t pos, CSTRING index, CSTRING list, RexxObjectPtr actual); extern void emptyArrayException(RexxThreadContext *c, int argPos); +extern void arrayToLargeException(RexxThreadContext *c, uint32_t found, uint32_t max, int argPos); extern void sparseArrayException(RexxThreadContext *c, size_t argPos, size_t index); extern void nullObjectException(RexxThreadContext *c, CSTRING name, size_t pos); extern void nullObjectException(RexxThreadContext *c, CSTRING name); @@ -106,14 +107,16 @@ extern RexxObjectPtr rxSetObjVar(RexxMethodContext *c, CSTRING varName, RexxObjectPtr val); extern RexxObjectPtr rxNewBuiltinObject(RexxMethodContext *c, CSTRING className); extern RexxObjectPtr rxNewBuiltinObject(RexxThreadContext *c, CSTRING className); -extern bool checkForCondition(RexxThreadContext *c, bool clear); -extern void standardConditionMsg(RexxThreadContext *c, RexxDirectoryObject condObj, RexxCondition *condition); -extern bool isInt(int, RexxObjectPtr, RexxThreadContext *); -extern bool isOfClassType(RexxMethodContext *, RexxObjectPtr, CSTRING); -extern void dbgPrintClassID(RexxThreadContext *c, RexxObjectPtr obj); -extern void dbgPrintClassID(RexxMethodContext *c, RexxObjectPtr obj); +extern bool isOutOfMemoryException(RexxThreadContext *c); +extern bool checkForCondition(RexxThreadContext *c, bool clear); +extern void standardConditionMsg(RexxThreadContext *c, RexxDirectoryObject condObj, RexxCondition *condition); +extern bool isInt(int, RexxObjectPtr, RexxThreadContext *); +extern bool isOfClassType(RexxMethodContext *, RexxObjectPtr, CSTRING); +extern void dbgPrintClassID(RexxThreadContext *c, RexxObjectPtr obj); +extern void dbgPrintClassID(RexxMethodContext *c, RexxObjectPtr obj); + /** * Missing argument; argument 'argument' is required * Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ControlDialog.cls 2011-05-27 03:43:14 UTC (rev 6974) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2010-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2010-2011 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 */ @@ -62,29 +62,43 @@ /* Owner and Control Dialogs */ +::class 'TabOwnerDlgInfo' subclass Object public + +::method init external "LIBRARY oodialog todi_init" + ::class 'TabOwnerDialog' mixinclass Object public -::method init - use strict arg cSelf, initData - say 'In TabOwnerDialog::init() cSelf:' cSelf 'initData:' initData +::method tabOwnerDlginit external "LIBRARY oodialog tod_tabOwnerDlgInit" +::method getTabPage external "LIBRARY oodialog tod_getTabPage" +::class 'ManagedTab' subclass Object public + +::method init external "LIBRARY oodialog mt_init" + + ::class 'ControlDlgInfo' subclass Object public -::method init - use strict arg owner = .nil, title = "", size = (.size~new(200, 150)), wantNotifications = .false, - - tabIcon = (-1), resources = .nil, managed = .false +::attribute title set external "LIBRARY oodialog cdi_set_title" +::method init external "LIBRARY oodialog cdi_init" +::method setSize external "LIBRARY oodialog cdi_setSize" ::class 'ControlDialog' mixinclass Object public -::attribute isManaged get external "LIBRARY oodialog ctrlDlg_get_isManaged" +::method init class external "LIBRARY oodialog cd_init_cls" -- Not to be documented -::attribute initializing get external "LIBRARY oodialog ctrlDlg_get_initializing" -::attribute initializing set external "LIBRARY oodialog ctrlDlg_set_initializing" +/*::attribute pageNumber get external "LIBRARY oodialog cd_get_pageNumber" +::attribute pageNumber set external "LIBRARY oodialog cd_set_pageNumber"*/ -::attribute pageTitle get external "LIBRARY oodialog ctrlDlg_getPageTitle" -::attribute pageTitle set external "LIBRARY oodialog ctrlDlg_setPageTitle" +::attribute isManaged get external "LIBRARY oodialog cd_get_isManaged" +::attribute wasActivated get external "LIBRARY oodialog cd_get_wasActivated" +::attribute initializing get external "LIBRARY oodialog cd_get_initializing" +::attribute initializing set external "LIBRARY oodialog cd_set_initializing" + +::attribute pageTitle get external "LIBRARY oodialog cd_get_pageTitle" +::attribute pageTitle set external "LIBRARY oodialog cd_set_pageTitle" + /*::attribute size get external "LIBRARY oodialog ctrlDlg_get_size" ::attribute size set external "LIBRARY oodialog ctrlDlg_set_size" @@ -98,7 +112,7 @@ ::attribute tabIcon set external "LIBRARY oodialog psp_setTabIcon_atr"*/ -::method controlDlgInit private external "LIBRARY oodialog ctrlDlg_controlDlgInit" +::method controlDlgInit private external "LIBRARY oodialog cd_controlDlgInit" ::method beginExecution unguarded @@ -128,7 +142,7 @@ ::method endExecution unguarded use strict arg isOkay = .false - if isOkay then do + if isOkay, self~wasActivated then do self~initCode = 1 if self~useStem then self~getDataStem(self~dlgData) self~getData Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/EventNotification.cls 2011-05-27 03:43:14 UTC (rev 6974) @@ -148,7 +148,7 @@ ::method connectButtonEvent use strict arg id, type, msgToRise = "" - if id~dataType("W") = 0 then id = self~resolveSymbolicId(id) + if \ id~dataType("W") then id = self~resolveSymbolicId(id) if id = -1 then return -1 if msgToRise == "" then msgToRise = "on" || type type = type~translate Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/Menu.cls 2011-05-27 03:43:14 UTC (rev 6974) @@ -163,7 +163,7 @@ menus. It is the menu that appears when clicking on the icon in the upper left corner of a window. \* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ -::class 'SystemMenu' public subclass Object inherit Menu ResourceUtils +::class 'SystemMenu' public subclass Object inherit Menu ::constant WM_SYSCOMMAND "0x0112" @@ -197,7 +197,7 @@ A menu bar menu created from a binary resource, or created as an empty menu. \* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ -::class 'BinaryMenuBar' public subclass Object inherit MenuBar ResourceUtils +::class 'BinaryMenuBar' public subclass Object inherit MenuBar ::method init external "LIBRARY oodialog binMenu_init" @@ -206,7 +206,7 @@ A popup menu. (Popup menus are also called, at various times, submenus, drop down menus, or context menus.) \* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ -::class 'PopupMenu' public subclass Object inherit Menu ResourceUtils +::class 'PopupMenu' public subclass Object inherit Menu ::method connectContextMenu class external "LIBRARY oodialog popMenu_connectContextMenu_cls" ::method init external "LIBRARY oodialog popMenu_init" @@ -226,7 +226,7 @@ memory. This a private, internal use only, class. The methods are doc- umented as part of the UserMenuBar, the class itself is not documented. \* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ -::class 'MenuTemplate' private mixinclass ResourceUtils +::class 'MenuTemplate' private mixinclass Object ::method addPopup external "LIBRARY oodialog menuTemplate_addPopup" ::method addItem external "LIBRARY oodialog menuTemplate_addItem" @@ -251,6 +251,7 @@ ::class 'ScriptMenuBar' public subclass Object inherit MenuBar MenuTemplate ::method init external "LIBRARY oodialog scriptMenu_init" +::method resolveSymbolicID external "LIBRARY oodialog global_resolveSymbolicID" /** load() Parses a menu definition in a resource script file and loads it into * memory (through a MenuTemplate.) The MENU resource definition @@ -313,7 +314,7 @@ if noMenuID then found = 1 else if menuid == -1, s~word(n-1)~translate == menuName then found = 1 - else if menuid \== -1, self~resolveResourceID(s~word(n-1)) == menuid then found = 1 + else if menuid \== -1, self~resolveSymbolicID(s~word(n-1)) == menuid then found = 1 else n = 0 if n \= 0, keyWord == "MENUEX" then isMenuEx = .true @@ -405,6 +406,7 @@ when s~wordpos("MENUITEM") > 0 then do parse var s type '"'name'"' "," id "," opt + id = id~strip if rcarray[i+1]~wordpos("END") > 0 | rcarray[i+1]~pos("}") > 0 then opt = opt || " END" if connect then self~addItem(id, name, opt, self~itemTextToMethodName(name)) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/PlainBaseDialog.cls 2011-05-27 03:43:14 UTC (rev 6974) @@ -534,7 +534,8 @@ if dataStem.~items == 0 then return 1 do k over dataStem. if k~dataType('W') then numericID = k - else numericID = self~ResolveSymbolicID(k) + else numericID = self~resolveSymbolicID(k) + if numericID == -1 then continue InternDlgData.numericID = dataStem.k if InternDlgData.numericID = "INTERNDLGDATA."numericID then InternDlgData.numericID = "" end Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/UtilityClasses.cls 2011-05-27 03:43:14 UTC (rev 6974) @@ -139,7 +139,6 @@ ::method idError private external "LIBRARY oodialog rsrcUtils_idError" ::method resolveIconID private external "LIBRARY oodialog rsrcUtils_resolveIconID_pvt" ::method resolveSymbolicId unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" -::method resolveResourceID unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" ::method getResourceID unguarded external "LIBRARY oodialog rsrcUtils_resolveResourceID" ::method checkID external "LIBRARY oodialog rsrcUtils_checkID" @@ -1715,9 +1714,9 @@ else ObjId = '' -- This createXXX method is ignored - ObjId = dlgObject~resolveResourceID(ObjId~space(0)) + ObjId = dlgObject~resolveSymbolicID(ObjId~space(0)) - if ObjId \= '', ObjId > 0 then + if ObjId > 0 then interpret 'dlgObjList~Insert(ObjId"@"'ObjX'"@"'ObjY'"@"'ObjW'"@"'ObjH')' end else do @@ -1753,9 +1752,9 @@ ObjId = '' -- This addXXX method is ignored end - ObjId = dlgObject~resolveResourceID(ObjId~space(0)) + ObjId = dlgObject~resolveSymbolicID(ObjId~space(0)) - if ObjId \= '', ObjId > 0 then + if ObjId > 0 then interpret 'dlgObjList~Insert(ObjId"@"'ObjX'"@"'ObjY'"@"'ObjW'"@"'ObjH')' end else do @@ -1782,7 +1781,7 @@ use strict arg id id = dlgObject~getResourceID(id) - if id > 0 then self~noResize~put(id) + self~noResize~put(id) /* ------------------------------------------------------------------------- */ @@ -1795,7 +1794,7 @@ use strict arg id id = dlgObject~getResourceID(id) - if id > 0 then self~noMove~put(id) + self~noMove~put(id) /* ------------------------------------------------------------------------- */ @@ -1810,13 +1809,13 @@ do id over noMove id = noMove~remove(id) id = dlgObject~getResourceID(id) - if id > 0 then noMove~put(id) + noMove~put(id) end do id over noResize id = noResize~remove(id) id = dlgObject~getResourceID(id) - if id > 0 then noResize~put(id) + noResize~put(id) end Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.cpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -2532,8 +2532,8 @@ HWND hCtrl = NULL; oodResetSysErrCode(c->threadContext); - uint32_t id; - if ( ! oodSafeResolveID(&id, c, pcpbd->rexxSelf, rxID, -1, 1) || (int)id < 0 ) + int32_t id; + if ( ! oodSafeResolveID(&id, c, pcpbd->rexxSelf, rxID, -1, 1, true) ) { oodSetSysErrCode(c->threadContext, ERROR_INVALID_WINDOW_HANDLE); } @@ -2701,20 +2701,26 @@ goto err_out; } + pcpbd->isOwnedDlg = true; pcpbd->rexxOwner = ownerData; pcpbd->hOwnerDlg = ownerPcpbd->hDlg; pcpbd->initPrivate = TheNilObj; } else if( c->IsOfType(ownerData, "CONTROLDLGINFO") ) { + pcpbd->initPrivate = ownerData; + pCControlDialogInfo pccid = (pCControlDialogInfo)c->ObjectToCSelf(ownerData); + + // For a control dialog used with a tab owner dialog, it is not + // likely that the owner will be set yet. if ( pccid->owner != NULLOBJECT ) { pCPlainBaseDialog ownerPcpbd = dlgToCSelf(c, pccid->owner); + pcpbd->isOwnedDlg = true; pcpbd->rexxOwner = pccid->owner; pcpbd->hOwnerDlg = ownerPcpbd->hDlg; - pcpbd->initPrivate = ownerData; } } else @@ -2730,9 +2736,9 @@ { if ( arg5Exists ) { - if ( ! c->IsOfType(ownerData, "DIRECTORY") ) + if ( ! c->IsOfType(ownerData, "TABOWNERDLGINFO") ) { - wrongClassException(c->threadContext, 5, "Directory"); + wrongClassException(c->threadContext, 5, "TabOwnerDlgInfo"); goto err_out; } pcpbd->initPrivate = ownerData; @@ -3002,13 +3008,6 @@ context->SendMessage1(self, "PARSEINCLUDEFILE", hFile); } - if ( pcpbd->isTabOwnerDlg ) - { // TODO move to subclass init - RexxClassObject ownerClass = rxGetContextClass(context, "TABOWNERDIALOG"); - RexxArrayObject args = context->ArrayOfTwo(cselfBuffer, ownerData); - context->ForwardMessage(NULL, NULL, ownerClass, args); - } - goto done_out; terminate_out: @@ -4403,8 +4402,8 @@ oodResetSysErrCode(context->threadContext); pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; - uint32_t id; - if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1) || (int)id < 0 ) + int32_t id; + if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1, true) ) { oodSetSysErrCode(context->threadContext, ERROR_INVALID_WINDOW_HANDLE); return TheZeroObj; @@ -4491,8 +4490,8 @@ return TheFalseObj; } - uint32_t id; - if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1) || (int)id < 0 ) + int32_t id; + if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1, true) ) { return TheNegativeOneObj; } @@ -4642,8 +4641,8 @@ return TheNegativeOneObj; } - uint32_t id; - if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1) || (int)id < 0 ) + int32_t id; + if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1, true) ) { return TheNegativeOneObj; } @@ -4690,8 +4689,8 @@ return -1; } - uint32_t id; - if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1) || (int)id < 0 ) + int32_t id; + if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1, true) ) { return -1; } @@ -4808,8 +4807,8 @@ } } - uint32_t id; - if ( ! oodSafeResolveID(&id, c, self, rxID, -1, 1) || (int)id < 0 ) + int32_t id; + if ( ! oodSafeResolveID(&id, c, self, rxID, -1, 1, true) ) { goto out; } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/ooDialog.hpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -56,6 +56,9 @@ #define MAXCHILDDIALOGS 20 #define MAXDIALOGS 20 +#define MAXTABPAGES MAXPROPPAGES +#define MAXMANAGEDTABS 4 + #define DEFAULT_FONTNAME "MS Shell Dlg" #define DEFAULT_FONTSIZE 8 #define MAX_DEFAULT_FONTNAME 256 @@ -559,6 +562,7 @@ bool isCategoryDlg; // Need to use IsNestedDialogMessage() bool isControlDlg; // Dialog was created as DS_CONTROL | WS_CHILD bool isOwnedDlg; // Dialog has an owner dialog + bool isManagedDlg; // Dialog has an owner dialog, which is a tab owner dialog bool isPageDlg; // Dialog is a property sheet page dialog bool isPropSheetDlg; // Dialog is a property sheet dialog bool isTabOwnerDlg; // Dialog is a tab owner dialog @@ -601,30 +605,69 @@ } CDynamicDialog; typedef CDynamicDialog *pCDynamicDialog; + /* Struct for the ControlDialogInfo object CSelf. */ typedef struct _cdiCSelf { SIZE size; RexxObjectPtr owner; - CSTRING title; + char *title; HINSTANCE hInstance; // resources attribute, C++ part of .ResourceImage HICON hIcon; // tabIcon attribute, C++ part if using .Image uint32_t iconID; // tabIcon attribute, C++ part if using resource ID - bool wantNotifications; bool managed; } CControlDialogInfo; typedef CControlDialogInfo *pCControlDialogInfo; /* Struct for the ControlDialog object CSelf. */ typedef struct _cdCSelf { + SIZE size; pCPlainBaseDialog pcpbd; RexxObjectPtr rexxSelf; char *pageTitle; oodClass_t pageType; + HICON hIcon; // tabIcon attribute, C++ part if using .Image + uint32_t iconID; // tabIcon attribute, C++ part if using resource ID + uint32_t pageNumber; // Page number, zero-based index + bool activated; // Was the page visited by the user bool isInitializing; bool isManaged; } CControlDialog; typedef CControlDialog *pCControlDialog; + +/* Struct for the ManagedTab object CSelf. */ +typedef struct _mtCSelf { + RexxArrayObject pages; // Used to protect from garbage collection, until transferred to tab owner dialog + RexxObjectPtr *rexxPages; + pCControlDialog *cppPages; + uint32_t tabID; // tab resource ID + uint32_t count; // count of pages + bool wantNotifications; // Send the dialog all tab notifications. +} CManagedTab; +typedef CManagedTab *pCManagedTab; + +/* Struct for the TabOwnerDlgInfo object CSelf. */ +typedef struct _todiCSelf { + RexxArrayObject pages[MAXMANAGEDTABS]; // Used to protect from garbage collection, for a space. + pCManagedTab mts[MAXMANAGEDTABS]; + uint32_t count; + bool useResourceImage; +} CTabOwnerDlgInfo; +typedef CTabOwnerDlgInfo *pCTabOwnerDlgInfo; + +/* Struct for the TabOwnerDialog object CSelf. */ +typedef struct _todCSelf { + pCManagedTab mts[MAXMANAGEDTABS]; + uint32_t tabIDs[MAXMANAGEDTABS]; + RexxThreadContext *dlgProcContext; + RexxObjectPtr rexxSelf; + HWND hDlg; + pCPlainBaseDialog pcpbd; + uint32_t countMTs; +} CTabOwnerDialog; +typedef CTabOwnerDialog *pCTabOwnerDialog; + + /* Struct for the PropertySheetPage object CSelf. */ typedef struct _pspCSelf { RexxInstance *interpreter; @@ -719,6 +762,7 @@ extern RexxClassObject TheDynamicDialogClass; extern RexxClassObject TheDialogControlClass; extern RexxClassObject ThePropertySheetPageClass; +extern RexxClassObject TheControlDialogClass; extern RexxClassObject TheSizeClass; extern RexxClassObject TheRectClass; Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBaseDialog.cpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -1,7 +1,7 @@ /*----------------------------------------------------------------------------*/ /* */ /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */ -/* Copyright (c) 2005-2010 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2005-2011 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 */ @@ -326,12 +326,10 @@ result = context->SendMessage1(self, "CONTROLDLGINIT", p); } - /* Going to need TabOwnerDialog also, save space - if ( result == TheZeroObj && pcpbd->isTabOwnerDlg ) + if ( pcpbd->isTabOwnerDlg && result == TheZeroObj ) { result = context->SendMessage1(self, "TABOWNERDLGINIT", p); } - */ } } @@ -356,7 +354,7 @@ { pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)pCSelf; - uint32_t dlgID = oodResolveSymbolicID(context, pcpbd->rexxSelf, _dlgID, -1, 2); + int32_t dlgID = oodResolveSymbolicID(context->threadContext, pcpbd->rexxSelf, _dlgID, -1, 2, true); if ( dlgID == OOD_ID_EXCEPTION ) { return FALSE; @@ -450,271 +448,6 @@ /** - * Methods for the .ControlDlgInfo class. - */ -#define CONTROLDLGINFO_CLASS "ControlDlgInfo" - - -RexxMethod8(RexxObjectPtr, cdi_init, OPTIONAL_RexxObjectPtr, owner, OPTIONAL_CSTRING, title, OPTIONAL_RexxObjectPtr, _size, - OPTIONAL_logical_t, wantNotifications, OPTIONAL_RexxObjectPtr, tabIcon, OPTIONAL_RexxObjectPtr, resources, - OPTIONAL_logical_t, managed, OSELF, self) -{ - RexxBufferObject obj = context->NewBuffer(sizeof(CControlDialogInfo)); - context->SetObjectVariable("CSELF", obj); - - RexxMethodContext *c = context; - - pCControlDialogInfo pccdi = (pCControlDialogInfo)context->BufferData(obj); - memset(pccdi, 0, sizeof(CControlDialogInfo)); - - if ( argumentExists(1) ) - { - if ( ! c->IsOfType(owner, "CONTROLDLGINFO") ) - { - wrongClassException(c->threadContext, 1, "ControlDlgInfo"); - goto done_out; - } - pccdi->owner; - } - - if ( argumentExists(2) ) - { - char *t = (char *)LocalAlloc(LPTR, strlen(title) + 1); - if ( t == NULL ) - { - outOfMemoryException(context->threadContext); - goto done_out; - } - - strcpy((char *)pccdi->title, title); - } - - if ( argumentExists(3) ) - { - SIZE *s = rxGetSize(context, _size, 3); - if ( s == NULL ) - { - goto done_out; - } - pccdi->size.cx = s->cx; - pccdi->size.cy = s->cy; - } - else - { - pccdi->size.cx = 200; - pccdi->size.cy = 150; - } - - pccdi->wantNotifications = wantNotifications ? true : false; - - -done_out: - return NULLOBJECT; -} - -/** - * Methods for the .ControlDialog class. - */ -#define CONTROLDIALOG_CLASS "ControlDialog" - -static inline pCControlDialog validateCdCSelf(RexxMethodContext *c, void *pCSelf) -{ - pCControlDialog pccd = (pCControlDialog)pCSelf; - if ( pccd == NULL ) - { - baseClassIntializationException(c); - } - return pccd; -} - - -/** ControlDialog::controlDlgInit() [private] - * - * @param cpbd Pointer to the PlainBaseDialog CSelf. - * @param ownerData Owner data. - */ -RexxMethod2(RexxObjectPtr, ctrlDlg_controlDlgInit, POINTER, cpbd, OSELF, self) -{ - pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)cpbd; - - RexxBufferObject pcdBuffer = context->NewBuffer(sizeof(CControlDialog)); - if ( pcdBuffer == NULLOBJECT ) - { - return TheOneObj; - } - - pCControlDialog pccd = (pCControlDialog)context->BufferData(pcdBuffer); - memset(pccd, 0, sizeof(CControlDialog)); - - pccd->pcpbd = pcpbd; - pccd->rexxSelf = self; - pccd->isInitializing = true; - pccd->isManaged = false; - pccd->pcpbd->dlgPrivate = pccd; - - if ( context->IsOfType(self, "USERCONTROLDIALOG") ) - { - pccd->pageType = oodUserControlDialog; - } - else if( context->IsOfType(self, "RCCONTROLDIALOG") ) - { - pccd->pageType = oodRcControlDialog; - } - else - { - pccd->pageType = oodResControlDialog; - } - - context->SetObjectVariable("CSELF", pcdBuffer); - - return TheZeroObj; -} - -/** ControlDialog::initializing() [Attribute get] - */ -RexxMethod1(RexxObjectPtr, ctrlDlg_get_initializing, CSELF, pCSelf) -{ - pCControlDialog pccd = validateCdCSelf(context, pCSelf); - if ( pccd != NULL ) - { - return pccd->isInitializing ? TheTrueObj : TheFalseObj; - } - return NULLOBJECT; -} - -/** ControlDialog::initializing() [Attribute set] - */ -RexxMethod2(RexxObjectPtr, ctrlDlg_set_initializing, logical_t, initializing, CSELF, pCSelf) -{ - pCControlDialog pccd = validateCdCSelf(context, pCSelf); - if ( pccd != NULL ) - { - pccd->isInitializing = initializing ? true : false; - } - return NULLOBJECT; -} - -/** ControlDialog::isManaged() [Attribute get] - */ -RexxMethod1(RexxObjectPtr, ctrlDlg_get_isManaged, CSELF, pCSelf) -{ - pCControlDialog pccd = validateCdCSelf(context, pCSelf); - if ( pccd != NULL ) - { - return pccd->isManaged ? TheTrueObj : TheFalseObj; - } - return NULLOBJECT; -} - -/** ControlDialog::pageTitle() [Attribute get] - */ -RexxMethod1(RexxObjectPtr, ctrlDlg_getPageTitle, CSELF, pCSelf) -{ - pCControlDialog pccd = validateCdCSelf(context, pCSelf); - if ( pccd != NULL ) - { - return pccd->pageTitle == NULL ? TheNilObj : context->String(pccd->pageTitle); - } - return NULLOBJECT; -} - - -/** ControlDialog::pageTitle() [Attribute set] - */ -RexxMethod2(RexxObjectPtr, ctrlDlg_setPageTitle, CSTRING, text, CSELF, pCSelf) -{ - pCControlDialog pccd = validateCdCSelf(context, pCSelf); - if ( pccd != NULL ) - { - goto out; - } - - char *t = (char *)LocalAlloc(LPTR, strlen(text) + 1); - if ( t == NULL ) - { - outOfMemoryException(context->threadContext); - goto out; - } - - strcpy(t, text); - - safeLocalFree(pccd->pageTitle); - pccd->pageTitle = t; - -out: - return TheZeroObj; -} - - -/** - * Methods for the .ResControlDialog class. - */ -#define RESControlDialog_CLASS "ResControlDialog" - -/** ResControlDialog::startDialog() - * - * This method over-rides the superclass (ResDialog) startDialog(). - * - * We only need library and id, the owner dialog we pull from the CSelf - * struct. - */ -RexxMethod3(RexxObjectPtr, resCtrlDlg_startDialog_pvt, CSTRING, library, RexxObjectPtr, _dlgID, CSELF, pCSelf) -{ - pCPlainBaseDialog pcpbd = getPBDCSelf(context, pCSelf); - if ( pcpbd == NULL ) - { - goto err_out; - } - - if ( ! validControlDlg(context, pcpbd) ) - { - goto err_out; - } - - uint32_t dlgID = oodResolveSymbolicID(context, pcpbd->rexxSelf, _dlgID, -1, 2); - if ( dlgID == OOD_ID_EXCEPTION ) - { - goto err_out; - } - if ( dlgID == 0 ) - { - wrongArgValueException(context->threadContext, 2, "a valid numeric resource ID or a valid symbolic ID", _dlgID); - goto err_out; - } - - if ( !loadResourceDLL(pcpbd, library) ) - { - goto err_out; - } - - HWND hChild = (HWND)SendMessage(pcpbd->hOwnerDlg, WM_USER_CREATECONTROL_RESDLG, (WPARAM)pcpbd, (LPARAM)dlgID); - if ( hChild ) - { - pcpbd->hDlg = hChild; - pcpbd->isActive = true; - pcpbd->childDlg[0] = hChild; - - setDlgHandle(context->threadContext, pcpbd); - setFontAttrib(context->threadContext, pcpbd); - - if ( pcpbd->autoDetect ) - { - if ( doDataAutoDetection(context, pcpbd) != OOD_NO_ERROR ) - { - goto err_out; - } - } - - return TheTrueObj; - } - -err_out: - return TheFalseObj; -} - - - -/** * Methods for the .WindowExtensions class. */ #define WINDOWEXTENSIONS_CLASS "WindowExtensions" Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodBasicControls.cpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -1210,26 +1210,51 @@ } -RexxMethod4(int, rb_checkInGroup_cls, RexxObjectPtr, dlg, RexxObjectPtr, idFirst, - RexxObjectPtr, idLast, RexxObjectPtr, idCheck) +/** RadioButton::checkInGroup() [class method] + * + * Checks the button specified in a group of buttons and unchecks all the rest. + * + * @param dlg [required] Dialog that contains the radio buttons + * @param idFirst [required] Fist button in group. + * @param idLast [required] Second button in group. + * @param idCheck [optional] If omitted all radio buttons are unchecked. If + * 0 or -1, all radio buttons are unchecked. + * Otherwise, this is the button checked. + * + * @return O on success, the system error code on error. + * + * @notes Sets the .SystemErrorCode. Experimentation has shown, that with + * many things that might be considered errors, the OS does not set + * LastError(). + * + */ +RexxMethod4(uint32_t, rb_checkInGroup_cls, RexxObjectPtr, dlg, RexxObjectPtr, idFirst, + RexxObjectPtr, idLast, OPTIONAL_RexxObjectPtr, idCheck) { - int result = 0; + oodResetSysErrCode(context->threadContext); + + uint32_t result = 0; if ( requiredClass(context->threadContext, dlg, "PlainBaseDialog", 1) ) { HWND hwnd = dlgToHDlg(context, dlg); - int first = oodResolveSymbolicID(context, dlg, idFirst, -1, 2); - int last = oodResolveSymbolicID(context, dlg, idLast, -1, 3); - int check = oodResolveSymbolicID(context, dlg, idCheck, -1, 4); + if ( argumentOmitted(4) ) + { + idCheck = TheZeroObj; + } - if ( first != OOD_ID_EXCEPTION && last != OOD_ID_EXCEPTION && check != OOD_ID_EXCEPTION ) + int32_t first = oodResolveSymbolicID(context->threadContext, dlg, idFirst, -1, 2, true); + int32_t last = oodResolveSymbolicID(context->threadContext, dlg, idLast, -1, 3, true); + int32_t check = oodResolveSymbolicID(context->threadContext, dlg, idCheck, -1, 4, false); + + if ( first != OOD_ID_EXCEPTION && last != OOD_ID_EXCEPTION && check != OOD_ID_EXCEPTION ) { if ( CheckRadioButton(hwnd, first, last, check) == 0 ) { - result = (int)GetLastError(); + uint32_t result = GetLastError(); + oodSetSysErrCode(context->threadContext, result); } } - } return result; } @@ -1298,7 +1323,7 @@ return 0; } -/** Button::test() [class method] +/** Button::test() [class method] * * This method is used as a convenient way to test code. */ Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.cpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -239,6 +239,32 @@ * The specified method, built-in function, or external routine exists, * but you used it incorrectly. * + * There is no tab control with ID (id) and a page at index (index) + * + * There is no tab control with ID 200 and a page at index 15 + * + * @param c + * @param tabID + * @param index + * + * @remarks Sort of like the exception for a property sheet, but for a + * TabOwnerDialog. + */ +RexxObjectPtr noSuchPageException(RexxMethodContext *c, int32_t id, uint32_t index) +{ + TCHAR buf[256]; + _snprintf(buf, sizeof(buf), "There is no tab control with ID %d and a page at index %d", id, index); + c->RaiseException1(Rexx_Error_Incorrect_method_user_defined, c->String(buf)); + return NULLOBJECT; +} + + +/** + * 93.900 + * Error 93 - Incorrect call to method + * The specified method, built-in function, or external routine exists, + * but you used it incorrectly. + * * The Windows property sheet page, (argument position, page number,) has not * been created * @@ -541,33 +567,6 @@ return oodUnknown; } -/** - * Checks if a Rexx object is either -1 or IDC_STATIC. - * - * @param c The method context we are operating under. - * @param id The object to check - * - * @return True if the object is -1 or IDC_STATIC, otherwise false. - */ -static bool isStaticID(RexxMethodContext *c, RexxObjectPtr id) -{ - int tmp; - if ( c->ObjectToInt32(id, &tmp) ) - { - if ( tmp == -1 ) - { - return true; - } - } - else - { - if ( stricmp(c->ObjectToStringValue(id), "IDC_STATIC") == 0 ) - { - return true; - } - } - return false; -} /** * Puts up an error message box when a symbolic ID could not be resolved. @@ -593,36 +592,43 @@ /** + * Used to resolve a resource ID that may be numeric or symbolic to its numeric + * value, using the .constDir rather than a .ResourceUtils object. * + * Raises an exception if the ID can not be resolved, or is not valid for a + * resource ID. 'Valid' depends on the strict arg. * + * @param c Thread context we are operating in. + * @param id Resource ID to resolve. + * @param argPosID Arg position used for exceptions + * @param strict If true the resolved ID must be 1 or greater, if false the + * resolved ID must be -1 or greater. * - * @param c - * @param id - * @param argPosID - * - * @return uint32_t + * @return The resolved numeric ID, or OOD_ID_EXCEPTION on error. If, + * OOD_ID_EXCEPTION is returned an exception has been raised. */ -uint32_t oodGlobalID(RexxMethodContext *c, RexxObjectPtr id, size_t argPosID) +int32_t oodGlobalID(RexxThreadContext *c, RexxObjectPtr id, size_t argPosID, bool strict) { - uint32_t result = OOD_ID_EXCEPTION; - int32_t tmp = -2; + int32_t result = OOD_ID_EXCEPTION; - if ( ! c->ObjectToInt32(id, &tmp) ) + if ( ! c->ObjectToInt32(id, &result) ) { RexxObjectPtr item = c->DirectoryAt(TheConstDir, c->ObjectToStringValue(id)); if ( item != NULLOBJECT ) { - c->ObjectToInt32(item, &tmp); + c->ObjectToInt32(item, &result); } } - if ( tmp < -1 ) + if ( strict && result < 1 ) { - wrongArgValueException(c->threadContext, argPosID, "a valid numeric ID or a valid symbolic ID" , id); + wrongArgValueException(c, argPosID, "a positive numeric ID or a valid symbolic ID", id); + result = OOD_ID_EXCEPTION; } - else + else if ( result < -1 ) { - result = (uint32_t)tmp; + wrongArgValueException(c, argPosID, "a valid numeric or symbolic resource ID", id); + result = OOD_ID_EXCEPTION; } return result; @@ -631,57 +637,60 @@ /** * Resolves a resource ID used in a native API method call to its numeric value. * The resource ID may be numeric or symbolic. An exception is raised if the ID - * can not be resolved. + * can not be resolved, or depending on the other args if it is less than 1. * - * @param c Method context for the method call. + * @param c Thread context for the method call. * @param oodObj ooDialog object that has inherited .ResourceUtils. * <Assumed> * @param id Resource ID. * @param argPosObj Arg position of the assumed ooDialog object. Used for - * raised exceptions. + * raised exceptions. If this is -1, then oodObj is not + * checked to ensure it is a .ResourceUtils * @param argPosID Arg position of the ID, used for raised exceptions. + * @param strict If 0 and -1 are considered valid resource IDs. If true, + * then 0 and -1 can be returned without generating an + * exception. If false, if the resource ID resolves to 0 or + * -1, than an exceptions is raised. * - * @return The resolved numeric ID or -1 cast as an uint32_t on success, - * OOD_ID_EXCEPTION on error. + * @return The resolved numeric ID on success, OOD_ID_EXCEPTION or + * ODD_MEMORY_ERR on error. * - * @remarks When the oodObj argument is known to be a .ResourceUtils, then use - * -1 for the argPosObj argument. In this case the required class - * check can be / is skipped. - * - * This function special cases -1 or IDC_STATIC. When id is -1 or - * IDC_STATIC then the return will be: (uint32_t)-1. Otherwise, id - * has to be a non-zero number or a symbol that resolves to a non-zero - * number. This is slightly different than how things work on the - * Rexx side where the user could put anything into constDir. - * - * New methods / functions added to ooDialog will raise an exception + * @remarks New methods / functions added to ooDialog will raise an exception * if the resource ID can not be resolved. But, older existing * ooDialog methods always returned -1, and that behavior is currently * being preserved. Use oodSafeResolveID() for those cases. */ -uint32_t oodResolveSymbolicID(RexxMethodContext *c, RexxObjectPtr oodObj, RexxObjectPtr id, - int argPosObj, size_t argPosID) +int32_t oodResolveSymbolicID(RexxThreadContext *c, RexxObjectPtr oodObj, RexxObjectPtr id, + int argPosObj, size_t argPosID, bool strict) { if ( TheConstDirUsage == globalOnly ) { - return oodGlobalID(c, id, argPosID); + return oodGlobalID(c, id, argPosID, strict); } - uint32_t result = OOD_ID_EXCEPTION; + int32_t result = OOD_ID_EXCEPTION; - if ( argPosObj != -1 && ! requiredClass(c->threadContext, oodObj, "ResourceUtils", argPosObj) ) + if ( TheConstDirUsage == globalFirst ) { - goto done_out; + result = oodGlobalID(c, id, argPosID, strict); + if ( result == OOD_ID_EXCEPTION ) + { + c->ClearCondition(); + } + else + { + goto done_out; + } } - if ( isStaticID(c, id) ) + + if ( argPosObj != -1 && ! requiredClass(c, oodObj, "ResourceUtils", argPosObj) ) { - result = (uint32_t)-1; goto done_out; } char *symbol = NULL; - if ( ! c->ObjectToUnsignedInt32(id, &result) ) + if ( ! c->ObjectToInt32(id, &result) ) { RexxDirectoryObject constDir = (RexxDirectoryObject)c->SendMessage0(oodObj, "CONSTDIR"); if ( constDir != NULLOBJECT ) @@ -695,14 +704,22 @@ symbol = strdupupr_nospace(c->ObjectToStringValue(id)); if ( symbol == NULL ) { - outOfMemoryException(c->threadContext); + outOfMemoryException(c); goto done_out; } RexxObjectPtr item = c->DirectoryAt(constDir, symbol); if ( item != NULLOBJECT ) { - c->ObjectToUnsignedInt32(item, &result); + c->ObjectToInt32(item, &result); + if ( strict && result < 1 ) + { + result = OOD_ID_EXCEPTION; + } + else if ( result < -1 ) + { + result = OOD_ID_EXCEPTION; + } } } } @@ -711,7 +728,11 @@ if ( result == OOD_ID_EXCEPTION ) { - wrongArgValueException(c->threadContext, argPosID, "a valid numeric ID or a valid symbolic ID" , id); + if ( TheConstDirUsage == globalLast ) + { + return oodGlobalID(c, id, argPosID, strict); + } + wrongArgValueException(c, argPosID, "a valid numeric ID or a valid symbolic ID" , id); } done_out: @@ -738,22 +759,25 @@ * @note This function merely calls oodResolveSymbolicID() to do the work. If * an exception is raised, it is cleared and false returned. */ -bool oodSafeResolveID(uint32_t *pID, RexxMethodContext *context, RexxObjectPtr oodObj, RexxObjectPtr id, - int argPosObj, size_t argPosID) +bool oodSafeResolveID(int32_t *pID, RexxMethodContext *context, RexxObjectPtr oodObj, RexxObjectPtr id, + int argPosObj, size_t argPosID, bool strict) { if ( TheConstDirUsage == globalOnly ) { - *pID = oodGlobalID(context, id, argPosID); + *pID = oodGlobalID(context->threadContext, id, argPosID, strict); return *pID == OOD_ID_EXCEPTION ? false : true; } - uint32_t tmp = oodResolveSymbolicID(context, oodObj, id, argPosObj, argPosID); - if ( tmp == OOD_ID_EXCEPTION ) + *pID = oodResolveSymbolicID(context->threadContext, oodObj, id, argPosObj, argPosID, strict); + if ( *pID == OOD_ID_EXCEPTION ) { - context->ClearCondition(); + if ( ! isOutOfMemoryException(context->threadContext) ) + { + context->ClearCondition(); + } return false; } - *pID = tmp; + return true; } @@ -777,19 +801,33 @@ */ int32_t checkID(RexxMethodContext *c, RexxObjectPtr rxID, RexxObjectPtr self) { - uint32_t id; - if ( ! oodSafeResolveID(&id, c, self, rxID, -1, 1) ) + int32_t id; + if ( ! oodSafeResolveID(&id, c, self, rxID, -1, 1, false) ) { return idError(c, rxID); } - return (int)id; + return id; } +/** + * This is really the implementation for the ooDialog method + * resolveSymbolicID(). It needs to return -1 for error, but not raise any + * exceptions. The resource ID is expected to be 1 or greater. + * + * @param c + * @param rxID + * @param self + * + * @return int32_t + */ int32_t resolveResourceID(RexxMethodContext *c, RexxObjectPtr rxID, RexxObjectPtr self) { - uint32_t id = (uint32_t)-1; - oodSafeResolveID(&id, c, self, rxID, -1, 1); - return (int)id; + int32_t id; + if ( ! oodSafeResolveID(&id, c, self, rxID, -1, 1, true) ) + { + id = -1; + } + return id; } /** @@ -798,8 +836,8 @@ * This is the implementation for ResourceUtils::resolveIconID() which is * invoked to resolve the application icon IDs. These IDs are special cased: * - * 1.) -1, (a symbolic ID did not resolve) is changed to 0. A 0 for the ID - * tells the underlying code to use the default application icon. + * 1.) less than 0, (a symbolic ID did not resolve) is changed to 0. A 0 for + * the ID tells the underlying code to use the default application icon. * * 2.) IDs from 1 to 4 have 10 added to them. When the ability to use an * application icon was first added to ooDialog, the internal ooDialog icon @@ -809,6 +847,11 @@ * existing code. The actual resource IDs have been changed to 11 through 14 * and we need to adjust for that. * + * No exceptions are raised, except an out of memory exception, unless + * TheConstDirUsage == globalOnly. But, we do need to accept 0. If we get + * -1, we just change it and let it slide. (Although techinically with + * globalOnly -1 should raise an exception.) + * * @param c Method context we are operating in. * @param rxIconID Resource ID, which may be symbolic * @param self The self object of the method context. @@ -817,10 +860,9 @@ */ int32_t resolveIconID(RexxMethodContext *c, RexxObjectPtr rxIconID, RexxObjectPtr self) { - uint32_t id = (uint32_t)-1; - oodSafeResolveID(&id, c, self, rxIconID, -1, 1); - - if ( (int)id == -1 ) + int32_t id; + oodSafeResolveID(&id, c, self, rxIconID, -1, 1, false); + if ( id == -1 ) { id = 0; } @@ -829,7 +871,7 @@ id += 10; } - return (int)id; + return id; } DWORD oodGetSysErrCode(RexxThreadContext *c) Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodCommon.hpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -115,9 +115,9 @@ extern int32_t checkID(RexxMethodContext *c, RexxObjectPtr rxID, RexxObjectPtr self); extern int32_t idError(RexxMethodContext *c, RexxObjectPtr rxID); -extern uint32_t oodGlobalID(RexxMethodContext *c, RexxObjectPtr id, size_t argPosID); -extern uint32_t oodResolveSymbolicID(RexxMethodContext *, RexxObjectPtr, RexxObjectPtr, int, size_t); -extern bool oodSafeResolveID(uint32_t *, RexxMethodContext *, RexxObjectPtr, RexxObjectPtr, int, size_t); +extern int32_t oodGlobalID(RexxThreadContext *c, RexxObjectPtr id, size_t argPosID, bool strict); +extern int32_t oodResolveSymbolicID(RexxThreadContext *, RexxObjectPtr, RexxObjectPtr, int, size_t, bool); +extern bool oodSafeResolveID(int32_t *, RexxMethodContext *, RexxObjectPtr, RexxObjectPtr, int, size_t, bool); extern int32_t resolveResourceID(RexxMethodContext *c, RexxObjectPtr rxID, RexxObjectPtr self); extern int32_t resolveIconID(RexxMethodContext *c, RexxObjectPtr rxIconID, RexxObjectPtr self); @@ -189,6 +189,18 @@ extern BUTTONTYPE getButtonInfo(HWND, PBUTTONSUBTYPE, DWORD *); + +inline int32_t oodGlobalID(RexxMethodContext *c, RexxObjectPtr id, size_t argPosID, bool strict) +{ + return oodGlobalID(c->threadContext, id, argPosID, strict); +} + +inline int32_t oodResolveSymbolicID(RexxMethodContext *c, RexxObjectPtr oodObj, RexxObjectPtr id, + int posObj, size_t posID, bool strict) +{ + return oodResolveSymbolicID(c->threadContext, oodObj, id, posObj, posID, strict); +} + inline void safeLocalFree(void *p) { if (p != NULL) @@ -288,6 +300,7 @@ extern RexxObjectPtr invalidCategoryPageException(RexxMethodContext *c, int, int); extern RexxObjectPtr noSuchPageException(RexxMethodContext *c, RexxObjectPtr page, size_t pos); extern RexxObjectPtr noWindowsPageException(RexxMethodContext *c, size_t pageID, size_t pos); +extern RexxObjectPtr noSuchPageException(RexxMethodContext *c, int32_t id, uint32_t index); extern void *noWindowsPageDlgException(RexxMethodContext *c, size_t pos); extern void *wrongClassReplyException(RexxThreadContext *c, const char *n); extern void controlFailedException(RexxThreadContext *, CSTRING, CSTRING, CSTRING); @@ -453,6 +466,24 @@ } /** + * Retrieves the ControlDialog CSelf pointer for a dialog object when the + * dialog object is not the direct object the method was invoked on. This + * performs a scoped CSelf lookup. + * + * @param c The method context we are operating in. + * @param dlg The dialog object whose ControlDialog CSelf pointer is needed. + * + * @return A pointer to the ControlDialog CSelf of the dlg object. + * + * @assumes The caller has ensured dlg is in fact a ooDialog Rexx ControlDialog + * dialog object. + */ +inline pCControlDialog dlgToCDCSelf(RexxMethodContext *c, RexxObjectPtr dlg) +{ + return (pCControlDialog)c->ObjectToCSelf(dlg, TheControlDialogClass); +} + +/** * Retrieves the window handle for a property sheet page from an ooDialog dialog * object which was not the direct object the method was invoked on. This * performs a scoped CSelf lookup. Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodDeviceGraphics.cpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -1469,8 +1469,8 @@ return TheOneObj; } - uint32_t id; - if ( ! oodSafeResolveID(&id, c, pcpbd->rexxSelf, rxID, -1, 1) || (int)id < 0 ) + int32_t id; + if ( ! oodSafeResolveID(&id, c, pcpbd->rexxSelf, rxID, -1, 1, true) ) { oodSetSysErrCode(c->threadContext, ERROR_INVALID_WINDOW_HANDLE); return TheNegativeOneObj; @@ -2755,8 +2755,8 @@ return 0; } - uint32_t id; - if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1) || (int)id < 0 ) + int32_t id; + if ( ! oodSafeResolveID(&id, context, pcpbd->rexxSelf, rxID, -1, 1, true) ) { return -1; } Modified: sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp =================================================================== --- sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-05-27 00:34:21 UTC (rev 6973) +++ sandbox/mark/ooDialog.beta/extensions/platform/windows/oodialog.4.2.0/oodMenu.cpp 2011-05-27 03:43:14 UTC (rev 6974) @@ -117,7 +117,7 @@ // Local function prototypes. -static uint32_t resolveItemID(RexxMethodContext *, RexxObjectPtr, logical_t, RexxObjectPtr, size_t); +static uint32_t resolveItemID(RexxMethodContext *, RexxObjectPtr, logical_t, size_t); static bool getMII(CppMenu *, RexxObjectPtr, BOOL, uint32_t, uint32_t *, UINT, MENUITEMINFO *); static UINT getPopupTypeOpts(const char *, UINT); static UINT getPopupStateOpts(const char *, UINT); @@ -224,7 +224,7 @@ oodResetSysErrCode(c->threadContext); char *upperOpts = NULL; - uint32_t id = oodResolveSymbolicID(c, self, rxID, -1, 1); + int32_t id = oodGlobalID(c, rxID, 1, false); if ( id == OOD_ID_EXCEPTION ) { goto done_out; @@ -280,7 +280,7 @@ oodResetSysErrCode(c->threadContext); char *upperOpts = NULL; - uint32_t id = oodResolveSymbolicID(c, self, rxID, -1, 1); + int32_t id = oodGlobalID(c, rxID, 1, true); if ( id == OOD_ID_EXCEPTION ) { goto done_out; @@ -348,6 +348,9 @@ * @return logical_t * * @note Text is required to not be null, the empty string is okay. + * + * @remarks We need to allow 0 for rxID, so don't use 'strict' with + * oodGlobalID(). */ logical_t CppMenu::addTemplatePopup(RexxObjectPtr rxID, CSTRING text, CSTRING opts, RexxObjectPtr helpID) { @@ -355,7 +358,7 @@ oodResetSysErrCode(c->threadContext); char *upperOpts = NULL; - uint32_t id = oodResolveSymbolicID(c, self, rxID, -1, 1); + int32_t id = oodGlobalID(c, rxID, 1, false); if ( id == OOD_ID_EXCEPTION ) { goto done_out; @@ -364,7 +367,7 @@ DWORD dwHelpID = 0; if ( helpID != NULLOBJECT ) { - dwHelpID = oodResolveSymbolicID(c, self, helpID, -1, 4); + dwHelpID = oodGlobalID(c, helpID, 4, false); if ( id == OOD_ID_EXCEPTION ) { goto done_out; @@ -603,91 +606,25 @@ /** - * Finish up the basic initialization for the Rexx Menu object. This sets up - * the constDir for the menu object so that symbolic IDs can be used. Then, - * once the constDir is set up, the menu ID argument can be resolved. + * Sets the menu ID for this menu. The default ID of -1 is already set. * - * @param rxID - * @param symbolSrc - * @param rcFile + * @param m... [truncated message content] |