From: <mie...@us...> - 2012-12-30 03:51:21
|
Revision: 8744 http://sourceforge.net/p/oorexx/code-0/8744 Author: miesfeld Date: 2012-12-30 03:51:17 +0000 (Sun, 30 Dec 2012) Log Message: ----------- Feature request: #249 Add support for generalized resizable dialogs See ticket [Feature-Requests:#249] Modified Paths: -------------- ooDialog/trunk/ooDialog/APICommon.cpp ooDialog/trunk/ooDialog/APICommon.hpp ooDialog/trunk/ooDialog/BaseDialog.cls ooDialog/trunk/ooDialog/ooDialog.cpp ooDialog/trunk/ooDialog/ooDialog.hpp ooDialog/trunk/ooDialog/oodCommon.cpp ooDialog/trunk/ooDialog/oodCommon.hpp ooDialog/trunk/ooDialog/oodPackageEntry.cpp ooDialog/trunk/ooDialog/oodResizableDialog.cpp ooDialog/trunk/ooDialog/oodialog.mak Added Paths: ----------- ooDialog/trunk/ooDialog/oodResizableDialog.hpp Modified: ooDialog/trunk/ooDialog/APICommon.cpp =================================================================== --- ooDialog/trunk/ooDialog/APICommon.cpp 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/APICommon.cpp 2012-12-30 03:51:17 UTC (rev 8744) @@ -617,11 +617,12 @@ userDefinedMsgException(c, buffer); } -void sparseArrayException(RexxThreadContext *c, size_t argPos, size_t index) +RexxObjectPtr sparseArrayException(RexxThreadContext *c, size_t argPos, size_t index) { char buffer[256]; snprintf(buffer, sizeof(buffer), "Argument %d must be a non-sparse array, index %d is missing", argPos, index); userDefinedMsgException(c, buffer); + return NULLOBJECT; } /** @@ -782,6 +783,30 @@ /** * Similar to 93.915 and 93.914 (actually a combination of the two.) * + * Method argument <pos>, keyword must be exactly one of <list>; found + * "<actual>" + * + * Method argument 2 must be exactly one of left, right, top, or bottom found + * "Side" + * + * @param c + * @param pos + * @param list + * @param actual String, actual keyword + * + * @return RexxObjectPtr + */ +RexxObjectPtr wrongArgKeywordException(RexxMethodContext *c, size_t pos, CSTRING list, CSTRING actual) +{ + char buffer[512]; + snprintf(buffer, sizeof(buffer), "Method argument %d, keyword must be exactly one of %s; found \"%s\"", pos, list, actual); + userDefinedMsgException(c, buffer); + return NULLOBJECT; +} + +/** + * Similar to 93.915 and 93.914 (actually a combination of the two.) + * * Method argument <pos>, option must be one of <list>; found "<actual>" * * Method argument 2 must be one of [P]artially, or [E]ntirely; found "G" Modified: ooDialog/trunk/ooDialog/APICommon.hpp =================================================================== --- ooDialog/trunk/ooDialog/APICommon.hpp 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/APICommon.hpp 2012-12-30 03:51:17 UTC (rev 8744) @@ -82,12 +82,12 @@ extern void stemIndexZeroException(RexxMethodContext *c, size_t pos); 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); extern void nullPointerException(RexxThreadContext *c, int pos); extern void nullStringMethodException(RexxMethodContext *c, size_t pos); +extern RexxObjectPtr sparseArrayException(RexxThreadContext *c, size_t argPos, size_t index); extern RexxObjectPtr wrongClassException(RexxThreadContext *c, size_t pos, const char *n); extern RexxObjectPtr wrongClassException(RexxThreadContext *c, size_t pos, const char *n, RexxObjectPtr actual); extern RexxObjectPtr wrongClassListException(RexxThreadContext *c, size_t pos, const char *n, RexxObjectPtr _actual); @@ -95,6 +95,7 @@ extern RexxObjectPtr wrongArgValueException(RexxThreadContext *c, size_t pos, const char *list, const char *actual); extern RexxObjectPtr wrongArgKeywordsException(RexxThreadContext *c, size_t pos, CSTRING list, CSTRING actual); extern RexxObjectPtr wrongArgKeywordsException(RexxThreadContext *c, size_t pos, CSTRING list, RexxObjectPtr actual); +extern RexxObjectPtr wrongArgKeywordException(RexxMethodContext *c, size_t pos, CSTRING list, CSTRING actual); extern RexxObjectPtr wrongRangeException(RexxThreadContext *c, size_t pos, int min, int max, RexxObjectPtr actual); extern RexxObjectPtr wrongRangeException(RexxThreadContext *c, size_t pos, int min, int max, int actual); extern RexxObjectPtr wrongRangeException(RexxThreadContext *c, size_t pos, uint32_t min, uint32_t max, RexxObjectPtr actual); @@ -256,6 +257,27 @@ } /** + * Similar to 93.915 and 93.914 (actually a combination of the two.) + * + * Method argument <pos>, keyword must be exactly one of <list>; found + * "<actual>" + * + * Method argument 2 must be exactly one of left, right, top, or bottom found + * "Side" + * + * @param c + * @param pos + * @param list + * @param actual Rexx object, actual object + * + * @return RexxObjectPtr + */ +inline RexxObjectPtr wrongArgKeywordException(RexxMethodContext *c, size_t pos, CSTRING list, RexxObjectPtr actual) +{ + return wrongArgKeywordException(c, pos, list, c->ObjectToStringValue(actual)); +} + +/** * Index, <index>, of argument <pos> must be one of <list>; found "<actual>" * * Index, PART, of argument 1 must be one of calendar, next, prev, or none; Modified: ooDialog/trunk/ooDialog/BaseDialog.cls =================================================================== --- ooDialog/trunk/ooDialog/BaseDialog.cls 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/BaseDialog.cls 2012-12-30 03:51:17 UTC (rev 8744) @@ -243,3 +243,15 @@ ::class 'ResizingAdmin' public mixinclass Object +::method defaultBottom external "LIBRARY oodialog ra_defaultSide" +::method defaultLeft external "LIBRARY oodialog ra_defaultSide" +::method defaultRight external "LIBRARY oodialog ra_defaultSide" +::method defaultSizing external "LIBRARY oodialog ra_defaultSizing" +::method defaultTop external "LIBRARY oodialog ra_defaultSide" +::method defineSizing + + say 'In defineSizing()' + return 0 + +-- Internal use only +::method initResizing private external "LIBRARY oodialog ra_initResizing" -- Do not document Modified: ooDialog/trunk/ooDialog/ooDialog.cpp =================================================================== --- ooDialog/trunk/ooDialog/ooDialog.cpp 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/ooDialog.cpp 2012-12-30 03:51:17 UTC (rev 8744) @@ -54,6 +54,7 @@ #include "oodMessaging.hpp" #include "oodData.hpp" #include "oodDeviceGraphics.hpp" +#include "oodResizableDialog.hpp" #include "oodResourceIDs.hpp" @@ -3183,6 +3184,25 @@ context->SendMessage1(self, "PARSEINCLUDEFILE", hFile); } + if ( pcpbd->isResizableDlg ) + { + if ( ! allocateResizeInfo(context, pcpbd) ) + { + result = TheOneObj; + goto done_out; + } + + pcpbd->resizeInfo->inDefineSizing = true; + + RexxObjectPtr reply = context->SendMessage0(self, "DEFINESIZING"); + if ( ! isInt(0, reply, context->threadContext) ) + { + result = TheOneObj; + } + + pcpbd->resizeInfo->inDefineSizing = false; + } + goto done_out; terminate_out: Modified: ooDialog/trunk/ooDialog/ooDialog.hpp =================================================================== --- ooDialog/trunk/ooDialog/ooDialog.hpp 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/ooDialog.hpp 2012-12-30 03:51:17 UTC (rev 8744) @@ -547,14 +547,17 @@ } WinMessageFilter; typedef WinMessageFilter *pWinMessageFilter; +/* Stuff for the ResizingAdmin class (resizable dialogs.) */ + // How an edge of a control is pinned to the edge of another window. typedef enum { - stationaryPin = 1, // control position is unchanged from pinned edge + myLeftPin = 1, // control width does not change + myTopPin, // control height does not change proportionalPin, // control position is proportional to pinned edge - widthPin, // control width does not change - heightPin // control height does not change -} edgePin_t; + stationaryPin, // control position is unchanged from pinned edge + notAPin // invalid +} pinType_t; // Which edge of another window the control's edge is pinned to. typedef enum @@ -564,26 +567,47 @@ rightEdge, // pinned to the right edge bottomEdge, // pinned to the bottom edge xCenterEdge, // centered horizontally ... - yCenterEdge // centered vertically ... + yCenterEdge, // centered vertically ... + notAnEdge // invalid } pinnedEdge_t; -typedef struct _edge -{ - edgePin_t pin; // how this edge is pinned +// Defines how one edge of a dialog control is pinned to some other window. +typedef struct _edge { + pinnedEdge_t pinToEdge; // which edge of the pinned to window is pinned + pinType_t pinType; // how this edge is pinned uint32_t pinToID; // the window this edge is pinned to - pinnedEdge_t pinToEdge; // which edge of the pinned to window is pinned -}; +} Edge; +typedef Edge *pEdge; +// Defines how all 4 edges of a dialog control are pinned to other windows +typedef struct _controlEdges { + Edge left; + Edge top; + Edge right; + Edge bottom; +} ControlEdges; +typedef ControlEdges *pControlEdges; + /* Struct for the resizing information for a single control */ typedef struct _resizeInfoCtrl { - uint32_t id; - RECT originalR; + RECT originalRect; + RECT currentRect; + pControlEdges edges; + HWND hCtrl; + uint32_t id; } ResizeInfoCtrl; typedef ResizeInfoCtrl *pResizeInfoCtrl; -/* Struct for the resizable dialog information struct (ResizingAdmin.) */ +/* Struct for the resizable dialog information (ResizingAdmin.) */ typedef struct _resizeInfoDlg { - size_t countCtrls; + ControlEdges defEdges; + RECT originalRect; + SIZE minSize; + SIZE maxSize; + pResizeInfoCtrl riCtrls; + size_t tableSize; + size_t countCtrls; + bool inDefineSizing; } ResizeInfoDlg; typedef ResizeInfoDlg *pResizeInfoDlg; @@ -628,7 +652,6 @@ typedef struct _pbdcCSelf { char fontName[MAX_DEFAULT_FONTNAME]; uint32_t fontSize; - } CPlainBaseDialogClass; typedef CPlainBaseDialogClass *pCPlainBaseDialogClass; @@ -663,7 +686,7 @@ pCWindowBase wndBase; pCEventNotification enCSelf; pCWindowExtensions weCSelf; - pCResizeInfoDlg resizeInfo; + pResizeInfoDlg resizeInfo; RexxObjectPtr rexxSelf; // This dialog's Rexx dialog object RexxObjectPtr rexxParent; // This dialog's Rexx parent dialog object HWND hDlg; // The handle to this dialog's underlying Windows dialog Modified: ooDialog/trunk/ooDialog/oodCommon.cpp =================================================================== --- ooDialog/trunk/ooDialog/oodCommon.cpp 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/oodCommon.cpp 2012-12-30 03:51:17 UTC (rev 8744) @@ -98,6 +98,35 @@ * The specified method, built-in function, or external routine exists, * but you used it incorrectly. * + * The "methName" method can only be invoked on "objectName" "msg" + * + * The defaultLeft method can only be invoked on a ResizableDlg during the + * defineSizing method. + * + * @param c The method context we are operationg in. + * @param methodName Method name. + * @param msg + * @param rxObj + * + * @note This is an argument rearrangement to produce a message similar to, but + * slightly different, than the other methodCanNotBeInvokedExeception + * functions. + */ +RexxObjectPtr methodCanOnlyBeInvokedException(RexxMethodContext *c, CSTRING methodName, CSTRING msg, RexxObjectPtr rxObj) +{ + TCHAR buf[512]; + _snprintf(buf, sizeof(buf), "The %s method can only be invoked on %s %s", + methodName, c->ObjectToStringValue(rxObj), msg); + 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 "methName" method can not be invoked on "objectName" "msg" * * The execute method can not be invoked on a PropertyPage using an owner Modified: ooDialog/trunk/ooDialog/oodCommon.hpp =================================================================== --- ooDialog/trunk/ooDialog/oodCommon.hpp 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/oodCommon.hpp 2012-12-30 03:51:17 UTC (rev 8744) @@ -393,6 +393,7 @@ extern void wrongWindowStyleException(RexxMethodContext *c, CSTRING, CSTRING); extern void bitmapTypeMismatchException(RexxMethodContext *c, CSTRING orig, CSTRING found, size_t pos); extern void customDrawMismatchException(RexxThreadContext *c, uint32_t id, oodControl_t type); +extern RexxObjectPtr methodCanOnlyBeInvokedException(RexxMethodContext *c, CSTRING methodName, CSTRING msg, RexxObjectPtr rxObj); extern RexxObjectPtr methodCanNotBeInvokedException(RexxMethodContext *c, CSTRING methodName, RexxObjectPtr rxDlg, CSTRING msg); extern RexxObjectPtr methodCanNotBeInvokedException(RexxMethodContext *c, CSTRING methodName, CSTRING msg, RexxObjectPtr rxDlg); extern RexxObjectPtr invalidAttributeException(RexxMethodContext *c, RexxObjectPtr rxDlg); Modified: ooDialog/trunk/ooDialog/oodPackageEntry.cpp =================================================================== --- ooDialog/trunk/ooDialog/oodPackageEntry.cpp 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/oodPackageEntry.cpp 2012-12-30 03:51:17 UTC (rev 8744) @@ -693,7 +693,12 @@ REXX_METHOD_PROTOTYPE(dyndlg_addIconResource); REXX_METHOD_PROTOTYPE(dyndlg_stop); -// ResourceDialog +// ResizingAdmin +REXX_METHOD_PROTOTYPE(ra_defaultSide); +REXX_METHOD_PROTOTYPE(ra_defaultSizing); +REXX_METHOD_PROTOTYPE(ra_initResizing); + +// ResDialog REXX_METHOD_PROTOTYPE(resdlg_init); REXX_METHOD_PROTOTYPE(resdlg_getDataTableIDs_pvt); REXX_METHOD_PROTOTYPE(resdlg_startDialog_pvt); @@ -1746,6 +1751,11 @@ REXX_METHOD(window_init, window_init), REXX_METHOD(window_unInit, window_unInit), + // ResizingAdmin + REXX_METHOD(ra_defaultSide, ra_defaultSide), + REXX_METHOD(ra_defaultSizing, ra_defaultSizing), + REXX_METHOD(ra_initResizing, ra_initResizing), + // ResDialog REXX_METHOD(resdlg_init, resdlg_init), REXX_METHOD(resdlg_getDataTableIDs_pvt, resdlg_getDataTableIDs_pvt), Modified: ooDialog/trunk/ooDialog/oodResizableDialog.cpp =================================================================== --- ooDialog/trunk/ooDialog/oodResizableDialog.cpp 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/oodResizableDialog.cpp 2012-12-30 03:51:17 UTC (rev 8744) @@ -40,19 +40,162 @@ */ #include "ooDialog.hpp" // Must be first, includes windows.h, commctrl.h, and oorexxapi.h -//#include <stdio.h> -//#include <dlgs.h> -//#include <shlwapi.h> -//#include <WindowsX.h> +#include <shlwapi.h> #include "APICommon.hpp" #include "oodCommon.hpp" -//#include "oodControl.hpp" #include "oodDeviceGraphics.hpp" #include "oodMessaging.hpp" -//#include "oodMouse.hpp" -//#include "oodData.hpp" #include "oodResizableDialog.hpp" +/** + * Validates that the CSelf pointer for a ResizingAdmin object is not null and + * that the resizeInfo pointer is not null. + */ +inline pCResizingAdmin validateRACSelf(RexxMethodContext *c, void *pcra, pResizeInfoDlg *pprid) +{ + if ( pcra == NULL || ((pCResizingAdmin)pcra)->resizeInfo == NULL) + { + baseClassInitializationException(c, "ResizingAdmin"); + } + + *pprid = ((pCResizingAdmin)pcra)->resizeInfo; + return (pCResizingAdmin)pcra; +} + +static pinType_t keyword2pinType(RexxMethodContext *c, CSTRING keyWord, size_t pos, bool isLeftTop) +{ + pinType_t pinType = notAPin; + + if ( isLeftTop ) + { + if ( StrCmpI(keyWord, "PROPORTIONAL") == 0 ) pinType = proportionalPin; + else if ( StrCmpI(keyWord, "STATIONARY") == 0 ) pinType = stationaryPin; + else wrongArgKeywordException(c, pos, PIN_TYPE_SHORT_LIST, keyWord); + + return pinType; + } + + if ( StrCmpI(keyWord, "MYLEFT") == 0 ) pinType = myLeftPin; + else if ( StrCmpI(keyWord, "MYTOP") == 0 ) pinType = myTopPin; + else if ( StrCmpI(keyWord, "PROPORTIONAL") == 0 ) pinType = proportionalPin; + else if ( StrCmpI(keyWord, "STATIONARY") == 0 ) pinType = stationaryPin; + else wrongArgKeywordException(c, pos, PIN_TYPE_LIST, keyWord); + + return pinType; +} + +static pinnedEdge_t keyword2pinnedEdge(RexxMethodContext *c, CSTRING keyWord, size_t pos) +{ + pinnedEdge_t edge = notAnEdge; + + if ( StrCmpI(keyWord, "LEFT") == 0 ) edge = leftEdge; + else if ( StrCmpI(keyWord, "TOP") == 0 ) edge = topEdge; + else if ( StrCmpI(keyWord, "RIGHT") == 0 ) edge = rightEdge; + else if ( StrCmpI(keyWord, "BOTTOM") == 0 ) edge = bottomEdge; + else if ( StrCmpI(keyWord, "XCENTER") == 0 ) edge = xCenterEdge; + else if ( StrCmpI(keyWord, "YCENTER") == 0 ) edge = yCenterEdge; + else wrongArgKeywordException(c, pos, PINNED_EDGE_LIST, keyWord); + + return edge; +} + +static RexxObjectPtr defaultLeft(RexxMethodContext *c, CSTRING howPinned, CSTRING whichEdge, pResizeInfoDlg prid) +{ + prid->defEdges.left.pinType = keyword2pinType(c, howPinned, 1, true); + prid->defEdges.left.pinToEdge = keyword2pinnedEdge(c, whichEdge, 2); + + if ( prid->defEdges.left.pinType == notAPin || prid->defEdges.left.pinToEdge == notAnEdge ) + { + return TheOneObj; + } + return TheZeroObj; +} + +static RexxObjectPtr defaultTop(RexxMethodContext *c, CSTRING howPinned, CSTRING whichEdge, pResizeInfoDlg prid) +{ + prid->defEdges.top.pinType = keyword2pinType(c, howPinned, 1, true); + prid->defEdges.top.pinToEdge = keyword2pinnedEdge(c, whichEdge, 2); + + if ( prid->defEdges.top.pinType == notAPin || prid->defEdges.top.pinToEdge == notAnEdge ) + { + return TheOneObj; + } + return TheZeroObj; +} + +static RexxObjectPtr defaultRight(RexxMethodContext *c, CSTRING howPinned, CSTRING whichEdge, pResizeInfoDlg prid) +{ + prid->defEdges.right.pinType = keyword2pinType(c, howPinned, 1, false); + prid->defEdges.right.pinToEdge = keyword2pinnedEdge(c, whichEdge, 2); + + if ( prid->defEdges.right.pinType == notAPin || prid->defEdges.right.pinToEdge == notAnEdge ) + { + return TheOneObj; + } + return TheZeroObj; +} + +static RexxObjectPtr defaultBottom(RexxMethodContext *c, CSTRING howPinned, CSTRING whichEdge, pResizeInfoDlg prid) +{ + prid->defEdges.bottom.pinType = keyword2pinType(c, howPinned, 1, false); + prid->defEdges.bottom.pinToEdge = keyword2pinnedEdge(c, whichEdge, 2); + + if ( prid->defEdges.bottom.pinType == notAPin || prid->defEdges.bottom.pinToEdge == notAnEdge ) + { + return TheOneObj; + } + return TheZeroObj; +} + +bool allocateResizeInfo(RexxMethodContext *c, pCPlainBaseDialog pcpbd) +{ + printf("In allocateResizeInfo()\n"); + + pResizeInfoDlg prid = (pResizeInfoDlg)LocalAlloc(LPTR, sizeof(ResizeInfoDlg)); + if ( prid == NULL ) + { + goto err_out; + } + + prid->riCtrls = (pResizeInfoCtrl)LocalAlloc(LPTR, DEFAULT_RESIZABLE_CONTROLS * sizeof(ResizeInfoCtrl)); + if ( prid->riCtrls == NULL ) + { + goto err_out; + } + prid->tableSize = DEFAULT_RESIZABLE_CONTROLS; + + prid->defEdges.left.pinToEdge = leftEdge; + prid->defEdges.left.pinType = proportionalPin; + prid->defEdges.top.pinToEdge = topEdge; + prid->defEdges.top.pinType = proportionalPin; + prid->defEdges.right.pinToEdge = rightEdge; + prid->defEdges.right.pinType = proportionalPin; + prid->defEdges.bottom.pinToEdge = bottomEdge; + prid->defEdges.bottom.pinType = proportionalPin; + + pcpbd->resizeInfo = prid; + + RexxObjectPtr reply = c->SendMessage1(pcpbd->rexxSelf, "INITRESIZING", c->NewPointer(pcpbd)); + if ( reply != TheZeroObj ) + { + goto err_out; + } + + return true; + +err_out: + outOfMemoryException(c->threadContext); + if ( prid != NULL ) + { + safeLocalFree(prid->riCtrls); + } + safeLocalFree(prid); + pcpbd->resizeInfo = NULL; + + return false; +} + + LRESULT CALLBACK RexxResizableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { if ( uMsg == WM_INITDIALOG ) @@ -171,3 +314,160 @@ } +/** ResizingAdmin::defaultLeft() + ** ResizingAdmin::defaultTop() + ** ResizingAdmin::defaultRight() + ** ResizingAdmin::defaultBottom() + * + */ +RexxMethod4(RexxObjectPtr, ra_defaultSide, CSTRING, howPinned, CSTRING, whichEdge, NAME, method, CSELF, pCSelf) +{ + pResizeInfoDlg prid = NULL; + pCResizingAdmin pcra = validateRACSelf(context, pCSelf, &prid); + if ( pcra == NULL ) + { + return TheOneObj; + } + + if ( ! prid->inDefineSizing ) + { + return methodCanOnlyBeInvokedException(context, method, "during the defineSizing method", pcra->pcpbd->rexxSelf); + } + + switch ( method[7] ) + { + case 'L' : return defaultLeft(context, howPinned, whichEdge, prid); + case 'T' : return defaultTop(context, howPinned, whichEdge, prid); + case 'R' : return defaultRight(context, howPinned, whichEdge, prid); + case 'B' : return defaultBottom(context, howPinned, whichEdge, prid); + } + return TheOneObj; +} + + +RexxMethod5(RexxObjectPtr, ra_defaultSizing, OPTIONAL_RexxArrayObject, left, OPTIONAL_RexxArrayObject, top, + OPTIONAL_RexxArrayObject, right, OPTIONAL_RexxArrayObject, bottom, CSELF, pCSelf) +{ + RexxMethodContext *c = context; + + pResizeInfoDlg prid = NULL; + pCResizingAdmin pcra = validateRACSelf(context, pCSelf, &prid); + if ( pcra == NULL ) + { + return TheOneObj; + } + + if ( ! prid->inDefineSizing ) + { + return methodCanOnlyBeInvokedException(context, "defaultSizing", "during the defineSizing method", pcra->pcpbd->rexxSelf); + } + + RexxObjectPtr rxHowPinned; + RexxObjectPtr rxWhichEdge; + + if ( argumentExists(1) ) + { + rxHowPinned = context->ArrayAt(left, 1); + rxWhichEdge = context->ArrayAt(left, 2); + if ( rxHowPinned == NULLOBJECT ) + { + return sparseArrayException(context->threadContext, 1, 1); + } + if ( rxWhichEdge == NULLOBJECT ) + { + return sparseArrayException(context->threadContext, 1, 2); + } + + if ( defaultLeft(context, context->ObjectToStringValue(rxHowPinned), context->ObjectToStringValue(rxWhichEdge), prid) == TheOneObj ) + { + return NULLOBJECT; + } + } + + if ( argumentExists(2) ) + { + rxHowPinned = context->ArrayAt(top, 1); + rxWhichEdge = context->ArrayAt(top, 2); + if ( rxHowPinned == NULLOBJECT ) + { + return sparseArrayException(context->threadContext, 2, 1); + } + if ( rxWhichEdge == NULLOBJECT ) + { + return sparseArrayException(context->threadContext, 2, 2); + } + + if ( defaultTop(context, context->ObjectToStringValue(rxHowPinned), context->ObjectToStringValue(rxWhichEdge), prid) == TheOneObj ) + { + return NULLOBJECT; + } + } + + if ( argumentExists(3) ) + { + rxHowPinned = context->ArrayAt(right, 1); + rxWhichEdge = context->ArrayAt(right, 2); + if ( rxHowPinned == NULLOBJECT ) + { + return sparseArrayException(context->threadContext, 3, 1); + } + if ( rxWhichEdge == NULLOBJECT ) + { + return sparseArrayException(context->threadContext, 3, 2); + } + + if ( defaultRight(context, context->ObjectToStringValue(rxHowPinned), context->ObjectToStringValue(rxWhichEdge), prid) == TheOneObj ) + { + return NULLOBJECT; + } + } + + if ( argumentExists(4) ) + { + rxHowPinned = context->ArrayAt(bottom, 1); + rxWhichEdge = context->ArrayAt(bottom, 2); + if ( rxHowPinned == NULLOBJECT ) + { + return sparseArrayException(context->threadContext, 4, 1); + } + if ( rxWhichEdge == NULLOBJECT ) + { + return sparseArrayException(context->threadContext, 4, 2); + } + + if ( defaultBottom(context, context->ObjectToStringValue(rxHowPinned), context->ObjectToStringValue(rxWhichEdge), prid) == TheOneObj ) + { + return NULLOBJECT; + } + } + + return TheZeroObj; +} + + +/** ResizingAdmin::initResizing() [private ??] + */ +RexxMethod2(RexxObjectPtr, ra_initResizing, POINTER, arg, OSELF, self) +{ + pCPlainBaseDialog pcpbd = (pCPlainBaseDialog)arg; + printf("In ra_initResizing()\n"); + + RexxBufferObject praBuffer = context->NewBuffer(sizeof(CResizingAdmin)); + if ( praBuffer == NULLOBJECT ) + { + return TheOneObj; + } + + pCResizingAdmin pcra = (pCResizingAdmin)context->BufferData(praBuffer); + memset(pcra, 0, sizeof(CResizingAdmin)); + + pcra->pcpbd = pcpbd; + pcra->rexxSelf = self; + pcra->resizeInfo = pcpbd->resizeInfo; + + context->SetObjectVariable("CSELF", praBuffer); + + return TheZeroObj; +} + + Added: ooDialog/trunk/ooDialog/oodResizableDialog.hpp =================================================================== --- ooDialog/trunk/ooDialog/oodResizableDialog.hpp (rev 0) +++ ooDialog/trunk/ooDialog/oodResizableDialog.hpp 2012-12-30 03:51:17 UTC (rev 8744) @@ -0,0 +1,58 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2012-2012 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 oodResizableDialog_Included +#define oodResizableDialog_Included + +#define DEFAULT_RESIZABLE_CONTROLS 20 +#define PIN_TYPE_SHORT_LIST "proportional, or stationary" +#define PIN_TYPE_LIST "myLeft, myTop, proportional, or stationary" +#define PINNED_EDGE_LIST "left, top, right, bottom, xCenter, or yCenter" + +/* Struct for the ResizingAdmin object CSelf. */ +typedef struct _raCSelf { + pCPlainBaseDialog pcpbd; + RexxObjectPtr rexxSelf; + pResizeInfoDlg resizeInfo; +} CResizingAdmin; +typedef CResizingAdmin *pCResizingAdmin; + + +extern LRESULT CALLBACK RexxResizableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +extern bool allocateResizeInfo(RexxMethodContext *c, pCPlainBaseDialog pcpbd); + +#endif Property changes on: ooDialog/trunk/ooDialog/oodResizableDialog.hpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Modified: ooDialog/trunk/ooDialog/oodialog.mak =================================================================== --- ooDialog/trunk/ooDialog/oodialog.mak 2012-12-28 03:31:56 UTC (rev 8743) +++ ooDialog/trunk/ooDialog/oodialog.mak 2012-12-30 03:51:17 UTC (rev 8744) @@ -90,48 +90,61 @@ $(OOD_OUTDIR)\oodUtilities.obj $(OOD_OUTDIR)\oodViewControls.obj $(OOD_OUTDIR)\oodialog.res # All Source files that include APICommon.hpp -APICOMMON_SOURCEF = $(OOD_OUTDIR)\APICommon.obj $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\oodBasicControls.obj \ - $(OOD_OUTDIR)\oodCommon.obj $(OOD_OUTDIR)\oodControl.obj $(OOD_OUTDIR)\oodData.obj \ - $(OOD_OUTDIR)\oodDeviceGraphics.obj $(OOD_OUTDIR)\ooDialog.obj $(OOD_OUTDIR)\oodListView.obj \ - $(OOD_OUTDIR)\oodMenu.obj $(OOD_OUTDIR)\oodMessaging.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj \ - $(OOD_OUTDIR)\oodRoutines.obj $(OOD_OUTDIR)\oodToolTip.obj $(OOD_OUTDIR)\oodTreeView.obj \ - $(OOD_OUTDIR)\oodUser.obj $(OOD_OUTDIR)\oodUtilities.obj $(OOD_OUTDIR)\oodViewControls.obj +APICOMMON_SOURCEF = $(OOD_OUTDIR)\APICommon.obj $(OOD_OUTDIR)\oodBarControls.obj $(OOD_OUTDIR)\oodBaseDialog.obj \ + $(OOD_OUTDIR)\oodBasicControls.obj $(OOD_OUTDIR)\oodCommon.obj $(OOD_OUTDIR)\oodControl.obj \ + $(OOD_OUTDIR)\oodData.obj $(OOD_OUTDIR)\oodDeviceGraphics.obj $(OOD_OUTDIR)\ooDialog.obj \ + $(OOD_OUTDIR)\oodListView.obj $(OOD_OUTDIR)\oodMenu.obj $(OOD_OUTDIR)\oodMessaging.obj \ + $(OOD_OUTDIR)\oodMouse.obj $(OOD_OUTDIR)\oodPackageEntry.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj \ + $(OOD_OUTDIR)\oodResizableDialog.obj $(OOD_OUTDIR)\oodResources.obj $(OOD_OUTDIR)\oodRoutines.obj \ + $(OOD_OUTDIR)\oodToolTip.obj $(OOD_OUTDIR)\oodTreeView.obj $(OOD_OUTDIR)\oodUser.obj \ + $(OOD_OUTDIR)\oodUtilities.obj $(OOD_OUTDIR)\oodViewControls.obj # All Source files that include oodCommon.hpp -COMMON_SOURCEF = $(OOD_OUTDIR)\oodBarControls.obj $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\oodBasicControls.obj \ - $(OOD_OUTDIR)\oodCommon.obj $(OOD_OUTDIR)\oodData.obj $(OOD_OUTDIR)\oodDeviceGraphics.obj $(OOD_OUTDIR)\oodMenu.obj \ - $(OOD_OUTDIR)\oodMessaging.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodRoutines.obj \ - $(OOD_OUTDIR)\oodUser.obj $(OOD_OUTDIR)\oodUtilities.obj $(OOD_OUTDIR)\oodViewControls.obj +COMMON_SOURCEF = $(OOD_OUTDIR)\oodBarControls.obj $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\oodBasicControls.obj \ + $(OOD_OUTDIR)\oodCommon.obj $(OOD_OUTDIR)\oodData.obj $(OOD_OUTDIR)\oodDeviceGraphics.obj \ + $(OOD_OUTDIR)\oodMenu.obj $(OOD_OUTDIR)\oodMessaging.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj \ + $(OOD_OUTDIR)\oodResizableDialog.obj $(OOD_OUTDIR)\oodRoutines.obj $(OOD_OUTDIR)\oodUser.obj \ + $(OOD_OUTDIR)\oodUtilities.obj $(OOD_OUTDIR)\oodViewControls.obj # All Source files that include oodDeviceGraphics.hpp -OODEVICEGRAPHICS_SOURCEF = $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\oodControl.cpp $(OOD_OUTDIR)\ooDeviceGraphics.cpp \ - $(OOD_OUTDIR)\ooDialog.cpp $(OOD_OUTDIR)\oodRoutines.obj $(OOD_OUTDIR)\oodMessaging.obj \ - $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodUser.obj $(OOD_OUTDIR)\oodUtilities.obj +OODDEVICEGRAPHICS_SOURCEF = \ + $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\oodControl.cpp $(OOD_OUTDIR)\ooDeviceGraphics.cpp \ + $(OOD_OUTDIR)\ooDialog.cpp $(OOD_OUTDIR)\oodMessaging.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj \ + $(OOD_OUTDIR)\oodResizableDialog.obj $(OOD_OUTDIR)\oodRoutines.obj $(OOD_OUTDIR)\oodUser.obj \ + $(OOD_OUTDIR)\oodUtilities.obj # All Source files that include oodData.hpp -OODDATA_SOURCEF = $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\ooDialog.cpp $(OOD_OUTDIR)\oodData.obj $(OOD_OUTDIR)\oodMessaging.obj \ - $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodUser.obj +OODDATA_SOURCEF = $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\ooDialog.cpp $(OOD_OUTDIR)\oodData.obj \ + $(OOD_OUTDIR)\oodMessaging.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodUser.obj - # All Source files that include oodControl.hpp -OODCONTROL_SOURCEF = $(OOD_OUTDIR)\oodBarControls.obj $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\oodBasicControls.obj \ - $(OOD_OUTDIR)\oodControl.obj $(OOD_OUTDIR)\oodData.obj $(OOD_OUTDIR)\oodDevicGraphics.obj \ - $(OOD_OUTDIR)\ooDialog.cpp $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodUser.obj \ +OODCONTROL_SOURCEF = $(OOD_OUTDIR)\oodBarControls.obj $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\oodBasicControls.obj \ + $(OOD_OUTDIR)\oodControl.obj $(OOD_OUTDIR)\oodData.obj $(OOD_OUTDIR)\oodDevicGraphics.obj \ + $(OOD_OUTDIR)\ooDialog.cpp $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodUser.obj \ $(OOD_OUTDIR)\oodViewControls.obj # All Source files that include oodMessaging.hpp -OODMESSAGING_SOURCEF = $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\oodBasicControls.obj $(OOD_OUTDIR)\oodControl.obj \ - $(OOD_OUTDIR)\oodDeviceGraphics.obj $(OOD_OUTDIR)\ooDialog.obj $(OOD_OUTDIR)\oodMenu.obj \ - $(OOD_OUTDIR)\oodMessaging.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodUser.obj \ - $(OOD_OUTDIR)\oodViewControls.obj +OODMESSAGING_SOURCEF = \ + $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\oodBasicControls.obj $(OOD_OUTDIR)\oodControl.obj \ + $(OOD_OUTDIR)\oodDeviceGraphics.obj $(OOD_OUTDIR)\ooDialog.obj $(OOD_OUTDIR)\oodMenu.obj \ + $(OOD_OUTDIR)\oodMessaging.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodResizableDialog.obj \ + $(OOD_OUTDIR)\oodUser.obj $(OOD_OUTDIR)\oodViewControls.obj +# All Source files that include oodResizableDialog.hpp +OODRESIZABLEDIALOG_SOURCEF = \ + $(OOD_OUTDIR)\oodBaseDialog.obj $(OOD_OUTDIR)\ooDialog.cpp $(OOD_OUTDIR)\oodResizable.obj \ + $(OOD_OUTDIR)\oodUser.obj + # All Source files that include oodResources.hpp -OODRESOURCES_SOURCEF = $(OOD_OUTDIR)\oodBasicControls.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodResources.obj \ - $(OOD_OUTDIR)\oodViewControls.obj +OODRESOURCES_SOURCEF = \ + $(OOD_OUTDIR)\oodBasicControls.obj $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodResources.obj \ + $(OOD_OUTDIR)\oodViewControls.obj # All Source files that include oodUser.hpp OODUSER_SOURCEF = $(OOD_OUTDIR)\oodPropertySheetDialog.obj $(OOD_OUTDIR)\oodUser.obj + + .c{$(OOD_OUTDIR)}.obj: $(C) $(OPTIONS) /DINCL_32 -c $(@B).c /Fo$(OOD_OUTDIR)\$(@B).obj @@ -177,10 +190,11 @@ $(SOURCEF) : ooDialog.hpp $(COMMON_SOURCEF) : oodCommon.hpp $(APICOMMON_SOURCEF) : APICommon.hpp -$(OODEVICEGRAPHICS_SOURCEF) : oodDeviceGraphics.hpp +$(OODDEVICEGRAPHICS_SOURCEF) : oodDeviceGraphics.hpp $(OODDATA_SOURCEF) : oodData.hpp $(OODCONTROL_SOURCEF) : oodControl.hpp $(OODMESSAGING_SOURCEF) : oodMessaging.hpp +$(OODRESIZABLEDIALOG_SOURCEF) : oodResizableDialog.hpp $(OODRESOURCES_SOURCEF) : oodResources.hpp $(OODUSER_SOURCEF) : oodUser.hpp $(OOD_OUTDIR)\oodMenu.obj : oodMenu.hpp |