Mercurial > dwindows
diff os2/dw.c @ 643:9ab89d89e6b4
Add dw_listview_insert()
Default to using webkit for Gtk+ HTML widget
Add option to build with libgtkhtml2 - incomplete
Initial attempt to use customdraw for Win32 container - not working
Added dw_window_get_font() for Gtk+ - not implemented in other ports yet
Change package name from dw to dwindows for Linux ports - use dwindows-config now
Add debian package build target
author | mhessling@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sun, 03 Oct 2010 00:34:36 +0000 |
parents | 9fa3cb5b3290 |
children | c60a4f6cfae8 |
line wrap: on
line diff
--- a/os2/dw.c Sun Apr 12 01:41:50 2009 +0000 +++ b/os2/dw.c Sun Oct 03 00:34:36 2010 +0000 @@ -60,22 +60,22 @@ HMOD wpconfig = 0; unsigned long _colors[] = { - CLR_BLACK, - CLR_DARKRED, - CLR_DARKGREEN, - CLR_BROWN, - CLR_DARKBLUE, - CLR_DARKPINK, - CLR_DARKCYAN, - CLR_PALEGRAY, - CLR_DARKGRAY, - CLR_RED, - CLR_GREEN, - CLR_YELLOW, - CLR_BLUE, - CLR_PINK, - CLR_CYAN, - CLR_WHITE + CLR_BLACK, + CLR_DARKRED, + CLR_DARKGREEN, + CLR_BROWN, + CLR_DARKBLUE, + CLR_DARKPINK, + CLR_DARKCYAN, + CLR_PALEGRAY, + CLR_DARKGRAY, + CLR_RED, + CLR_GREEN, + CLR_YELLOW, + CLR_BLUE, + CLR_PINK, + CLR_CYAN, + CLR_WHITE }; #define IS_WARP4() (aulBuffer[0] == 20 && aulBuffer[1] >= 40) @@ -86,12 +86,12 @@ typedef struct _sighandler { - struct _sighandler *next; - ULONG message; - HWND window; - int id; - void *signalfunction; - void *data; + struct _sighandler *next; + ULONG message; + HWND window; + int id; + void *signalfunction; + void *data; } SignalHandler; @@ -99,8 +99,8 @@ typedef struct { - ULONG message; - char name[30]; + ULONG message; + char name[30]; } SignalList; @@ -108,131 +108,131 @@ #define SIGNALMAX 16 SignalList SignalTranslate[SIGNALMAX] = { - { WM_SIZE, DW_SIGNAL_CONFIGURE }, - { WM_CHAR, DW_SIGNAL_KEY_PRESS }, - { WM_BUTTON1DOWN, DW_SIGNAL_BUTTON_PRESS }, - { WM_BUTTON1UP, DW_SIGNAL_BUTTON_RELEASE }, - { WM_MOUSEMOVE, DW_SIGNAL_MOTION_NOTIFY }, - { WM_CLOSE, DW_SIGNAL_DELETE }, - { WM_PAINT, DW_SIGNAL_EXPOSE }, - { WM_COMMAND, DW_SIGNAL_CLICKED }, - { CN_ENTER, DW_SIGNAL_ITEM_ENTER }, - { CN_CONTEXTMENU, DW_SIGNAL_ITEM_CONTEXT }, - { LN_SELECT, DW_SIGNAL_LIST_SELECT }, - { CN_EMPHASIS, DW_SIGNAL_ITEM_SELECT }, - { WM_SETFOCUS, DW_SIGNAL_SET_FOCUS }, - { SLN_SLIDERTRACK, DW_SIGNAL_VALUE_CHANGED }, - { BKN_PAGESELECTED,DW_SIGNAL_SWITCH_PAGE }, - { CN_EXPANDTREE, DW_SIGNAL_TREE_EXPAND } + { WM_SIZE, DW_SIGNAL_CONFIGURE }, + { WM_CHAR, DW_SIGNAL_KEY_PRESS }, + { WM_BUTTON1DOWN, DW_SIGNAL_BUTTON_PRESS }, + { WM_BUTTON1UP, DW_SIGNAL_BUTTON_RELEASE }, + { WM_MOUSEMOVE, DW_SIGNAL_MOTION_NOTIFY }, + { WM_CLOSE, DW_SIGNAL_DELETE }, + { WM_PAINT, DW_SIGNAL_EXPOSE }, + { WM_COMMAND, DW_SIGNAL_CLICKED }, + { CN_ENTER, DW_SIGNAL_ITEM_ENTER }, + { CN_CONTEXTMENU, DW_SIGNAL_ITEM_CONTEXT }, + { LN_SELECT, DW_SIGNAL_LIST_SELECT }, + { CN_EMPHASIS, DW_SIGNAL_ITEM_SELECT }, + { WM_SETFOCUS, DW_SIGNAL_SET_FOCUS }, + { SLN_SLIDERTRACK, DW_SIGNAL_VALUE_CHANGED }, + { BKN_PAGESELECTED,DW_SIGNAL_SWITCH_PAGE }, + { CN_EXPANDTREE, DW_SIGNAL_TREE_EXPAND } }; /* This function adds a signal handler callback into the linked list. */ void _new_signal(ULONG message, HWND window, int id, void *signalfunction, void *data) { - SignalHandler *new = malloc(sizeof(SignalHandler)); - - new->message = message; - new->window = window; - new->id = id; - new->signalfunction = signalfunction; - new->data = data; - new->next = NULL; - - if (!Root) - Root = new; - else - { - SignalHandler *prev = NULL, *tmp = Root; - while(tmp) - { - if(tmp->message == message && - tmp->window == window && - tmp->id == id && - tmp->signalfunction == signalfunction) - { - tmp->data = data; - free(new); - return; - } - prev = tmp; - tmp = tmp->next; - } - if(prev) - prev->next = new; - else - Root = new; - } + SignalHandler *new = malloc(sizeof(SignalHandler)); + + new->message = message; + new->window = window; + new->id = id; + new->signalfunction = signalfunction; + new->data = data; + new->next = NULL; + + if (!Root) + Root = new; + else + { + SignalHandler *prev = NULL, *tmp = Root; + while(tmp) + { + if(tmp->message == message && + tmp->window == window && + tmp->id == id && + tmp->signalfunction == signalfunction) + { + tmp->data = data; + free(new); + return; + } + prev = tmp; + tmp = tmp->next; + } + if(prev) + prev->next = new; + else + Root = new; + } } /* Finds the message number for a given signal name */ ULONG _findsigmessage(char *signame) { - int z; - - for(z=0;z<SIGNALMAX;z++) - { - if(stricmp(signame, SignalTranslate[z].name) == 0) - return SignalTranslate[z].message; - } - return 0L; + int z; + + for(z=0;z<SIGNALMAX;z++) + { + if(stricmp(signame, SignalTranslate[z].name) == 0) + return SignalTranslate[z].message; + } + return 0L; } typedef struct _CNRITEM { - MINIRECORDCORE rc; - HPOINTER hptrIcon; - PVOID user; - HTREEITEM parent; + MINIRECORDCORE rc; + HPOINTER hptrIcon; + PVOID user; + HTREEITEM parent; } CNRITEM, *PCNRITEM; int _null_key(HWND window, int key, void *data) { - window = window; /* keep compiler happy */ - key = key; /* keep compiler happy */ - data = data; /* keep compiler happy */ - return TRUE; + window = window; /* keep compiler happy */ + key = key; /* keep compiler happy */ + data = data; /* keep compiler happy */ + return TRUE; } /* Find the desktop window handle */ HWND _toplevel_window(HWND handle) { - HWND box, lastbox = WinQueryWindow(handle, QW_PARENT); - - /* Find the toplevel window */ - while((box = WinQueryWindow(lastbox, QW_PARENT)) != desktop && box > 0) - { - lastbox = box; - } - if(box > 0) - return lastbox; - return handle; + HWND box, lastbox = WinQueryWindow(handle, QW_PARENT); + + /* Find the toplevel window */ + while((box = WinQueryWindow(lastbox, QW_PARENT)) != desktop && box > 0) + { + lastbox = box; + } + if(box > 0) + return lastbox; + return handle; } /* Returns height of specified window. */ int _get_height(HWND handle) { - unsigned long height; - dw_window_get_pos_size(handle, NULL, NULL, NULL, &height); - return (int)height; + unsigned long height; + dw_window_get_pos_size(handle, NULL, NULL, NULL, &height); + return (int)height; } /* Find the height of the frame a desktop style window is sitting on */ int _get_frame_height(HWND handle) { - while(handle) - { - HWND client; - if((client = WinWindowFromID(handle, FID_CLIENT)) != NULLHANDLE) - { + while(handle) + { + HWND client; + if((client = WinWindowFromID(handle, FID_CLIENT)) != NULLHANDLE) + { return _get_height(WinQueryWindow(handle, QW_PARENT)); - } + } handle = WinQueryWindow(handle, QW_PARENT); - } - return dw_screen_height(); + } + return dw_screen_height(); } /* A "safe" WinSendMsg() that tries multiple times in case the @@ -240,46 +240,46 @@ */ MRESULT _dw_send_msg(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2, int failure) { - MRESULT res; - int z = 0; - - while((int)(res = WinSendMsg(hwnd, msg, mp1, mp2)) == failure) - { - z++; - if(z > 5000000) - return (MRESULT)failure; - dw_main_sleep(1); - } - return res; + MRESULT res; + int z = 0; + + while((int)(res = WinSendMsg(hwnd, msg, mp1, mp2)) == failure) + { + z++; + if(z > 5000000) + return (MRESULT)failure; + dw_main_sleep(1); + } + return res; } /* Used in the slider and percent classes internally */ unsigned int _dw_percent_get_range(HWND handle) { - return SHORT2FROMMP(WinSendMsg(handle, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION,SMA_RANGEVALUE), 0)); + return SHORT2FROMMP(WinSendMsg(handle, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION,SMA_RANGEVALUE), 0)); } /* Return the entryfield child of a window */ HWND _find_entryfield(HWND handle) { - HENUM henum; - HWND child, entry = 0; - - henum = WinBeginEnumWindows(handle); - while((child = WinGetNextWindow(henum)) != NULLHANDLE) - { - char tmpbuf[100]; - - WinQueryClassName(child, 99, tmpbuf); - - if(strncmp(tmpbuf, "#6", 3)==0) /* Entryfield */ - { - entry = child; - break; - } - } - WinEndEnumWindows(henum); - return entry; + HENUM henum; + HWND child, entry = 0; + + henum = WinBeginEnumWindows(handle); + while((child = WinGetNextWindow(henum)) != NULLHANDLE) + { + char tmpbuf[100]; + + WinQueryClassName(child, 99, tmpbuf); + + if(strncmp(tmpbuf, "#6", 3)==0) /* Entryfield */ + { + entry = child; + break; + } + } + WinEndEnumWindows(henum); + return entry; } /* This function changes the owner of buttons in to the @@ -287,58 +287,58 @@ */ void _fix_button_owner(HWND handle, HWND dw) { - HENUM henum; - HWND child; - - henum = WinBeginEnumWindows(handle); - while((child = WinGetNextWindow(henum)) != NULLHANDLE) - { - char tmpbuf[100]; - - WinQueryClassName(child, 99, tmpbuf); - - if(strncmp(tmpbuf, "#3", 3)==0 && dw) /* Button */ - WinSetOwner(child, dw); - else if(strncmp(tmpbuf, "dynamicwindows", 14) == 0) - dw = child; - - _fix_button_owner(child, dw); - } - WinEndEnumWindows(henum); - return; + HENUM henum; + HWND child; + + henum = WinBeginEnumWindows(handle); + while((child = WinGetNextWindow(henum)) != NULLHANDLE) + { + char tmpbuf[100]; + + WinQueryClassName(child, 99, tmpbuf); + + if(strncmp(tmpbuf, "#3", 3)==0 && dw) /* Button */ + WinSetOwner(child, dw); + else if(strncmp(tmpbuf, "dynamicwindows", 14) == 0) + dw = child; + + _fix_button_owner(child, dw); + } + WinEndEnumWindows(henum); + return; } /* Free bitmap data associated with a window */ void _free_bitmap(HWND handle) { - HBITMAP hbm = (HBITMAP)dw_window_get_data(handle, "_dw_bitmap"); - HPS hps = (HPS)dw_window_get_data(handle, "_dw_hps"); - HDC hdc = (HDC)dw_window_get_data(handle, "_dw_hdc"); - HPIXMAP pixmap = (HPIXMAP)dw_window_get_data(handle, "_dw_hpixmap"); - HPIXMAP disable = (HPIXMAP)dw_window_get_data(handle, "_dw_hpixmap_disabled"); - HPOINTER icon = (HPOINTER)dw_window_get_data(handle, "_dw_button_icon"); - - if(icon) - WinDestroyPointer(icon); - - if(pixmap) - dw_pixmap_destroy(pixmap); - - if(disable) - dw_pixmap_destroy(disable); - - if(hps) - { - GpiSetBitmap(hps, NULLHANDLE); - GpiAssociate(hps, NULLHANDLE); - GpiDestroyPS(hps); - } - - if(hdc) - DevCloseDC(hdc); - - if(hbm) - GpiDeleteBitmap(hbm); + HBITMAP hbm = (HBITMAP)dw_window_get_data(handle, "_dw_bitmap"); + HPS hps = (HPS)dw_window_get_data(handle, "_dw_hps"); + HDC hdc = (HDC)dw_window_get_data(handle, "_dw_hdc"); + HPIXMAP pixmap = (HPIXMAP)dw_window_get_data(handle, "_dw_hpixmap"); + HPIXMAP disable = (HPIXMAP)dw_window_get_data(handle, "_dw_hpixmap_disabled"); + HPOINTER icon = (HPOINTER)dw_window_get_data(handle, "_dw_button_icon"); + + if(icon) + WinDestroyPointer(icon); + + if(pixmap) + dw_pixmap_destroy(pixmap); + + if(disable) + dw_pixmap_destroy(disable); + + if(hps) + { + GpiSetBitmap(hps, NULLHANDLE); + GpiAssociate(hps, NULLHANDLE); + GpiDestroyPS(hps); + } + + if(hdc) + DevCloseDC(hdc); + + if(hbm) + GpiDeleteBitmap(hbm); } /* This function removes any handlers on windows and frees @@ -346,100 +346,100 @@ */ void _free_window_memory(HWND handle) { - HENUM henum; - HWND child; - void *ptr = (void *)WinQueryWindowPtr(handle, QWP_USER); - - dw_signal_disconnect_by_window(handle); - - if((child = WinWindowFromID(handle, FID_MENU)) != NULLHANDLE) - _free_menu_data(child); - - if((child = WinWindowFromID(handle, FID_CLIENT)) != NULLHANDLE) - { - Box *box = (Box *)WinQueryWindowPtr(child, QWP_USER); - - if(box) - { - if(box->count && box->items) - free(box->items); - - WinSetWindowPtr(child, QWP_USER, 0); - free(box); - } - } - - if(ptr) - { - WindowData *wd = (WindowData *)ptr; - char tmpbuf[100]; - - WinQueryClassName(handle, 99, tmpbuf); - - if(strncmp(tmpbuf, "ColorSelectClass", 17)!=0) - { - /* If this window has an associate bitmap destroy it. */ - _free_bitmap(handle); - - if(strncmp(tmpbuf, "#1", 3)==0 && !WinWindowFromID(handle, FID_CLIENT)) - { - Box *box = (Box *)ptr; - - if(box->count && box->items) - free(box->items); - } - else if(strncmp(tmpbuf, SplitbarClassName, strlen(SplitbarClassName)+1)==0) - { - void *data = dw_window_get_data(handle, "_dw_percent"); - - if(data) - free(data); - } - else if(strncmp(tmpbuf, "#37", 4)==0) - { - dw_container_clear(handle, FALSE); - if(wd && dw_window_get_data(handle, "_dw_container")) - { - void *oldflags = wd->data; - - wd->data = NULL; - free(oldflags); - } - } - - if(wd->oldproc) - WinSubclassWindow(handle, wd->oldproc); - - dw_window_set_data(handle, NULL, NULL); - WinSetWindowPtr(handle, QWP_USER, 0); - free(ptr); - } - } - - henum = WinBeginEnumWindows(handle); - while((child = WinGetNextWindow(henum)) != NULLHANDLE) - _free_window_memory(child); - - WinEndEnumWindows(henum); - return; + HENUM henum; + HWND child; + void *ptr = (void *)WinQueryWindowPtr(handle, QWP_USER); + + dw_signal_disconnect_by_window(handle); + + if((child = WinWindowFromID(handle, FID_MENU)) != NULLHANDLE) + _free_menu_data(child); + + if((child = WinWindowFromID(handle, FID_CLIENT)) != NULLHANDLE) + { + Box *box = (Box *)WinQueryWindowPtr(child, QWP_USER); + + if(box) + { + if(box->count && box->items) + free(box->items); + + WinSetWindowPtr(child, QWP_USER, 0); + free(box); + } + } + + if(ptr) + { + WindowData *wd = (WindowData *)ptr; + char tmpbuf[100]; + + WinQueryClassName(handle, 99, tmpbuf); + + if(strncmp(tmpbuf, "ColorSelectClass", 17)!=0) + { + /* If this window has an associate bitmap destroy it. */ + _free_bitmap(handle); + + if(strncmp(tmpbuf, "#1", 3)==0 && !WinWindowFromID(handle, FID_CLIENT)) + { + Box *box = (Box *)ptr; + + if(box->count && box->items) + free(box->items); + } + else if(strncmp(tmpbuf, SplitbarClassName, strlen(SplitbarClassName)+1)==0) + { + void *data = dw_window_get_data(handle, "_dw_percent"); + + if(data) + free(data); + } + else if(strncmp(tmpbuf, "#37", 4)==0) + { + dw_container_clear(handle, FALSE); + if(wd && dw_window_get_data(handle, "_dw_container")) + { + void *oldflags = wd->data; + + wd->data = NULL; + free(oldflags); + } + } + + if(wd->oldproc) + WinSubclassWindow(handle, wd->oldproc); + + dw_window_set_data(handle, NULL, NULL); + WinSetWindowPtr(handle, QWP_USER, 0); + free(ptr); + } + } + + henum = WinBeginEnumWindows(handle); + while((child = WinGetNextWindow(henum)) != NULLHANDLE) + _free_window_memory(child); + + WinEndEnumWindows(henum); + return; } void _free_menu_data(HWND menu) { - int i, count = (int)WinSendMsg(menu, MM_QUERYITEMCOUNT, 0, 0); - - dw_signal_disconnect_by_name(menu, DW_SIGNAL_CLICKED); - _free_window_memory(menu); - - for(i=0;i<count;i++) - { - SHORT menuid = (SHORT)WinSendMsg(menu, MM_ITEMIDFROMPOSITION, MPFROMSHORT(i), 0); - MENUITEM mi; - - if(WinSendMsg(menu, MM_QUERYITEM, MPFROMSHORT(menuid), MPFROMP(&mi)) - && mi.hwndSubMenu) - _free_menu_data(mi.hwndSubMenu); - } + int i, count = (int)WinSendMsg(menu, MM_QUERYITEMCOUNT, 0, 0); + + dw_signal_disconnect_by_name(menu, DW_SIGNAL_CLICKED); + _free_window_memory(menu); + + for(i=0;i<count;i++) + { + SHORT menuid = (SHORT)WinSendMsg(menu, MM_ITEMIDFROMPOSITION, MPFROMSHORT(i), 0); + MENUITEM mi; + + if(WinSendMsg(menu, MM_QUERYITEM, MPFROMSHORT(menuid), MPFROMP(&mi)) + && mi.hwndSubMenu) + _free_menu_data(mi.hwndSubMenu); + } } /* This function returns 1 if the window (widget) handle @@ -447,274 +447,274 @@ */ int _validate_focus(HWND handle) { - char tmpbuf[100]; - - if(!handle) - return 0; - - WinQueryClassName(handle, 99, tmpbuf); - - if(!WinIsWindowEnabled(handle) || - (strncmp(tmpbuf, "ColorSelectClass", 17) && dw_window_get_data(handle, "_dw_disabled"))) - return 0; - - /* These are the window classes which can - * obtain input focus. - */ - if(strncmp(tmpbuf, "#2", 3)==0 || /* Combobox */ - strncmp(tmpbuf, "#3", 3)==0 || /* Button */ - strncmp(tmpbuf, "#6", 3)==0 || /* Entryfield */ - strncmp(tmpbuf, "#7", 3)==0 || /* List box */ - strncmp(tmpbuf, "#10", 4)==0 || /* MLE */ - strncmp(tmpbuf, "#32", 4)==0 || /* Spinbutton */ - strncmp(tmpbuf, "#37", 4)==0 || /* Container */ - strncmp(tmpbuf, "#38", 4)== 0) /* Slider */ - return 1; - return 0; + char tmpbuf[100]; + + if(!handle) + return 0; + + WinQueryClassName(handle, 99, tmpbuf); + + if(!WinIsWindowEnabled(handle) || + (strncmp(tmpbuf, "ColorSelectClass", 17) && dw_window_get_data(handle, "_dw_disabled"))) + return 0; + + /* These are the window classes which can + * obtain input focus. + */ + if(strncmp(tmpbuf, "#2", 3)==0 || /* Combobox */ + strncmp(tmpbuf, "#3", 3)==0 || /* Button */ + strncmp(tmpbuf, "#6", 3)==0 || /* Entryfield */ + strncmp(tmpbuf, "#7", 3)==0 || /* List box */ + strncmp(tmpbuf, "#10", 4)==0 || /* MLE */ + strncmp(tmpbuf, "#32", 4)==0 || /* Spinbutton */ + strncmp(tmpbuf, "#37", 4)==0 || /* Container */ + strncmp(tmpbuf, "#38", 4)== 0) /* Slider */ + return 1; + return 0; } int _focus_check_box(Box *box, HWND handle, int start, HWND defaultitem) { - int z; - static HWND lasthwnd, firsthwnd; + int z; + static HWND lasthwnd, firsthwnd; static int finish_searching; - /* Start is 2 when we have cycled completely and - * need to set the focus to the last widget we found - * that was valid. - */ - if(start == 2) - { - if(lasthwnd) - WinSetFocus(HWND_DESKTOP, lasthwnd); - return 0; - } - - /* Start is 1 when we are entering the function - * for the first time, it is zero when entering - * the function recursively. - */ - if(start == 1) - { - lasthwnd = handle; - finish_searching = 0; - firsthwnd = 0; - } - - for(z=box->count-1;z>-1;z--) - { - if(box->items[z].type == TYPEBOX) - { - Box *thisbox = WinQueryWindowPtr(box->items[z].hwnd, QWP_USER); - - if(thisbox && _focus_check_box(thisbox, handle, start == 3 ? 3 : 0, defaultitem)) - return 1; - } - else - { - if(box->items[z].hwnd == handle) - { - if(lasthwnd == handle && firsthwnd) - WinSetFocus(HWND_DESKTOP, firsthwnd); - else if(lasthwnd == handle && !firsthwnd) - finish_searching = 1; - else - WinSetFocus(HWND_DESKTOP, lasthwnd); - - /* If we aren't looking for the last handle, - * return immediately. - */ - if(!finish_searching) - return 1; - } - if(_validate_focus(box->items[z].hwnd)) - { - /* Start is 3 when we are looking for the - * first valid item in the layout. - */ - if(start == 3) - { - if(!defaultitem || (defaultitem && defaultitem == box->items[z].hwnd)) - { - WinSetFocus(HWND_DESKTOP, box->items[z].hwnd); - return 1; - } - } - - if(!firsthwnd) - firsthwnd = box->items[z].hwnd; - - lasthwnd = box->items[z].hwnd; - } - else - { - char tmpbuf[100] = ""; - - WinQueryClassName(box->items[z].hwnd, 99, tmpbuf); - if(strncmp(tmpbuf, SplitbarClassName, strlen(SplitbarClassName)+1)==0) - { - /* Then try the bottom or right box */ - HWND mybox = (HWND)dw_window_get_data(box->items[z].hwnd, "_dw_bottomright"); - - if(mybox) - { - Box *splitbox = (Box *)WinQueryWindowPtr(mybox, QWP_USER); - - if(splitbox && _focus_check_box(splitbox, handle, start == 3 ? 3 : 0, defaultitem)) - return 1; - } - - /* Try the top or left box */ - mybox = (HWND)dw_window_get_data(box->items[z].hwnd, "_dw_topleft"); - - if(mybox) - { - Box *splitbox = (Box *)WinQueryWindowPtr(mybox, QWP_USER); - - if(splitbox && _focus_check_box(splitbox, handle, start == 3 ? 3 : 0, defaultitem)) - return 1; - } - } - else if(strncmp(tmpbuf, "#40", 4)==0) /* Notebook */ - { - Box *notebox; - HWND page = (HWND)WinSendMsg(box->items[z].hwnd, BKM_QUERYPAGEWINDOWHWND, - (MPARAM)dw_notebook_page_get(box->items[z].hwnd), 0); - - if(page) - { - notebox = (Box *)WinQueryWindowPtr(page, QWP_USER); - - if(notebox && _focus_check_box(notebox, handle, start == 3 ? 3 : 0, defaultitem)) - return 1; - } - } - } - } - } - return 0; + /* Start is 2 when we have cycled completely and + * need to set the focus to the last widget we found + * that was valid. + */ + if(start == 2) + { + if(lasthwnd) + WinSetFocus(HWND_DESKTOP, lasthwnd); + return 0; + } + + /* Start is 1 when we are entering the function + * for the first time, it is zero when entering + * the function recursively. + */ + if(start == 1) + { + lasthwnd = handle; + finish_searching = 0; + firsthwnd = 0; + } + + for(z=box->count-1;z>-1;z--) + { + if(box->items[z].type == TYPEBOX) + { + Box *thisbox = WinQueryWindowPtr(box->items[z].hwnd, QWP_USER); + + if(thisbox && _focus_check_box(thisbox, handle, start == 3 ? 3 : 0, defaultitem)) + return 1; + } + else + { + if(box->items[z].hwnd == handle) + { + if(lasthwnd == handle && firsthwnd) + WinSetFocus(HWND_DESKTOP, firsthwnd); + else if(lasthwnd == handle && !firsthwnd) + finish_searching = 1; + else + WinSetFocus(HWND_DESKTOP, lasthwnd); + + /* If we aren't looking for the last handle, + * return immediately. + */ + if(!finish_searching) + return 1; + } + if(_validate_focus(box->items[z].hwnd)) + { + /* Start is 3 when we are looking for the + * first valid item in the layout. + */ + if(start == 3) + { + if(!defaultitem || (defaultitem && defaultitem == box->items[z].hwnd)) + { + WinSetFocus(HWND_DESKTOP, box->items[z].hwnd); + return 1; + } + } + + if(!firsthwnd) + firsthwnd = box->items[z].hwnd; + + lasthwnd = box->items[z].hwnd; + } + else + { + char tmpbuf[100] = ""; + + WinQueryClassName(box->items[z].hwnd, 99, tmpbuf); + if(strncmp(tmpbuf, SplitbarClassName, strlen(SplitbarClassName)+1)==0) + { + /* Then try the bottom or right box */ + HWND mybox = (HWND)dw_window_get_data(box->items[z].hwnd, "_dw_bottomright"); + + if(mybox) + { + Box *splitbox = (Box *)WinQueryWindowPtr(mybox, QWP_USER); + + if(splitbox && _focus_check_box(splitbox, handle, start == 3 ? 3 : 0, defaultitem)) + return 1; + } + + /* Try the top or left box */ + mybox = (HWND)dw_window_get_data(box->items[z].hwnd, "_dw_topleft"); + + if(mybox) + { + Box *splitbox = (Box *)WinQueryWindowPtr(mybox, QWP_USER); + + if(splitbox && _focus_check_box(splitbox, handle, start == 3 ? 3 : 0, defaultitem)) + return 1; + } + } + else if(strncmp(tmpbuf, "#40", 4)==0) /* Notebook */ + { + Box *notebox; + HWND page = (HWND)WinSendMsg(box->items[z].hwnd, BKM_QUERYPAGEWINDOWHWND, + (MPARAM)dw_notebook_page_get(box->items[z].hwnd), 0); + + if(page) + { + notebox = (Box *)WinQueryWindowPtr(page, QWP_USER); + + if(notebox && _focus_check_box(notebox, handle, start == 3 ? 3 : 0, defaultitem)) + return 1; + } + } + } + } + } + return 0; } int _focus_check_box_back(Box *box, HWND handle, int start, HWND defaultitem) { - int z; - static HWND lasthwnd, firsthwnd; + int z; + static HWND lasthwnd, firsthwnd; static int finish_searching; - /* Start is 2 when we have cycled completely and - * need to set the focus to the last widget we found - * that was valid. - */ - if(start == 2) - { - if(lasthwnd) - WinSetFocus(HWND_DESKTOP, lasthwnd); - return 0; - } - - /* Start is 1 when we are entering the function - * for the first time, it is zero when entering - * the function recursively. - */ - if(start == 1) - { - lasthwnd = handle; - finish_searching = 0; - firsthwnd = 0; - } - - for(z=0;z<box->count;z++) - { - if(box->items[z].type == TYPEBOX) - { - Box *thisbox = WinQueryWindowPtr(box->items[z].hwnd, QWP_USER); - - if(thisbox && _focus_check_box_back(thisbox, handle, start == 3 ? 3 : 0, defaultitem)) - return 1; - } - else - { - if(box->items[z].hwnd == handle) - { - if(lasthwnd == handle && firsthwnd) - WinSetFocus(HWND_DESKTOP, firsthwnd); - else if(lasthwnd == handle && !firsthwnd) - finish_searching = 1; - else - WinSetFocus(HWND_DESKTOP, lasthwnd); - - /* If we aren't looking for the last handle, - * return immediately. - */ - if(!finish_searching) - return 1; - } - if(_validate_focus(box->items[z].hwnd)) - { - /* Start is 3 when we are looking for the - * first valid item in the layout. - */ - if(start == 3) - { - if(!defaultitem || (defaultitem && defaultitem == box->items[z].hwnd)) - { - WinSetFocus(HWND_DESKTOP, box->items[z].hwnd); - return 1; - } - } - - if(!firsthwnd) - firsthwnd = box->items[z].hwnd; - - lasthwnd = box->items[z].hwnd; - } - else - { - char tmpbuf[100] = ""; - - WinQueryClassName(box->items[z].hwnd, 99, tmpbuf); - if(strncmp(tmpbuf, SplitbarClassName, strlen(SplitbarClassName)+1)==0) - { - /* Try the top or left box */ - HWND mybox = (HWND)dw_window_get_data(box->items[z].hwnd, "_dw_topleft"); - - if(mybox) - { - Box *splitbox = (Box *)WinQueryWindowPtr(mybox, QWP_USER); - - if(splitbox && _focus_check_box_back(splitbox, handle, start == 3 ? 3 : 0, defaultitem)) - return 1; - } - - /* Then try the bottom or right box */ - mybox = (HWND)dw_window_get_data(box->items[z].hwnd, "_dw_bottomright"); - - if(mybox) - { - Box *splitbox = (Box *)WinQueryWindowPtr(mybox, QWP_USER); - - if(splitbox && _focus_check_box_back(splitbox, handle, start == 3 ? 3 : 0, defaultitem)) - return 1; - } - } - else if(strncmp(tmpbuf, "#40", 4)==0) /* Notebook */ - { - Box *notebox; - HWND page = (HWND)WinSendMsg(box->items[z].hwnd, BKM_QUERYPAGEWINDOWHWND, - (MPARAM)dw_notebook_page_get(box->items[z].hwnd), 0); - - if(page) - { - notebox = (Box *)WinQueryWindowPtr(page, QWP_USER); - - if(notebox && _focus_check_box_back(notebox, handle, start == 3 ? 3 : 0, defaultitem)) - return 1; - } - } - } - } - } - return 0; + /* Start is 2 when we have cycled completely and + * need to set the focus to the last widget we found + * that was valid. + */ + if(start == 2) + { + if(lasthwnd) + WinSetFocus(HWND_DESKTOP, lasthwnd); + return 0; + } + + /* Start is 1 when we are entering the function + * for the first time, it is zero when entering + * the function recursively. + */ + if(start == 1) + { + lasthwnd = handle; + finish_searching = 0; + firsthwnd = 0; + } + + for(z=0;z<box->count;z++) + { + if(box->items[z].type == TYPEBOX) + { + Box *thisbox = WinQueryWindowPtr(box->items[z].hwnd, QWP_USER); + + if(thisbox && _focus_check_box_back(thisbox, handle, start == 3 ? 3 : 0, defaultitem)) + return 1; + } + else + { + if(box->items[z].hwnd == handle) + { + if(lasthwnd == handle && firsthwnd) + WinSetFocus(HWND_DESKTOP, firsthwnd); + else if(lasthwnd == handle && !firsthwnd) + finish_searching = 1; + else + WinSetFocus(HWND_DESKTOP, lasthwnd); + + /* If we aren't looking for the last handle, + * return immediately. + */ + if(!finish_searching) + return 1; + } + if(_validate_focus(box->items[z].hwnd)) + { + /* Start is 3 when we are looking for the + * first valid item in the layout. + */ + if(start == 3) + { + if(!defaultitem || (defaultitem && defaultitem == box->items[z].hwnd)) + { + WinSetFocus(HWND_DESKTOP, box->items[z].hwnd); + return 1; + } + } + + if(!firsthwnd) + firsthwnd = box->items[z].hwnd; + + lasthwnd = box->items[z].hwnd; + } + else + { + char tmpbuf[100] = ""; + + WinQueryClassName(box->items[z].hwnd, 99, tmpbuf); + if(strncmp(tmpbuf, SplitbarClassName, strlen(SplitbarClassName)+1)==0) + { + /* Try the top or left box */ + HWND mybox = (HWND)dw_window_get_data(box->items[z].hwnd, "_dw_topleft"); + + if(mybox) + { + Box *splitbox = (Box *)WinQueryWindowPtr(mybox, QWP_USER); + + if(splitbox && _focus_check_box_back(splitbox, handle, start == 3 ? 3 : 0, defaultitem)) + return 1; + } + + /* Then try the bottom or right box */ + mybox = (HWND)dw_window_get_data(box->items[z].hwnd, "_dw_bottomright"); + + if(mybox) + { + Box *splitbox = (Box *)WinQueryWindowPtr(mybox, QWP_USER); + + if(splitbox && _focus_check_box_back(splitbox, handle, start == 3 ? 3 : 0, defaultitem)) + return 1; + } + } + else if(strncmp(tmpbuf, "#40", 4)==0) /* Notebook */ + { + Box *notebox; + HWND page = (HWND)WinSendMsg(box->items[z].hwnd, BKM_QUERYPAGEWINDOWHWND, + (MPARAM)dw_notebook_page_get(box->items[z].hwnd), 0); + + if(page) + { + notebox = (Box *)WinQueryWindowPtr(page, QWP_USER); + + if(notebox && _focus_check_box_back(notebox, handle, start == 3 ? 3 : 0, defaultitem)) + return 1; + } + } + } + } + } + return 0; } /* This function finds the first widget in the @@ -722,18 +722,18 @@ */ int _initial_focus(HWND handle) { - Box *thisbox = NULL; - HWND box; - - box = WinWindowFromID(handle, FID_CLIENT); - if(box) - thisbox = WinQueryWindowPtr(box, QWP_USER); - else - return 1; - - if(thisbox) - _focus_check_box(thisbox, handle, 3, thisbox->defaultitem); - return 0; + Box *thisbox = NULL; + HWND box; + + box = WinWindowFromID(handle, FID_CLIENT); + if(box) + thisbox = WinQueryWindowPtr(box, QWP_USER); + else + return 1; + + if(thisbox) + _focus_check_box(thisbox, handle, 3, thisbox->defaultitem); + return 0; } /* This function finds the current widget in the @@ -741,20 +741,20 @@ */ void _shift_focus(HWND handle) { - Box *thisbox; - HWND box, lastbox = _toplevel_window(handle); - - box = WinWindowFromID(lastbox, FID_CLIENT); - if(box) - thisbox = WinQueryWindowPtr(box, QWP_USER); - else - thisbox = WinQueryWindowPtr(lastbox, QWP_USER); - - if(thisbox) - { - if(_focus_check_box(thisbox, handle, 1, 0) == 0) - _focus_check_box(thisbox, handle, 2, 0); - } + Box *thisbox; + HWND box, lastbox = _toplevel_window(handle); + + box = WinWindowFromID(lastbox, FID_CLIENT); + if(box) + thisbox = WinQueryWindowPtr(box, QWP_USER); + else + thisbox = WinQueryWindowPtr(lastbox, QWP_USER); + + if(thisbox) + { + if(_focus_check_box(thisbox, handle, 1, 0) == 0) + _focus_check_box(thisbox, handle, 2, 0); + } } /* This function finds the current widget in the @@ -762,80 +762,80 @@ */ void _shift_focus_back(HWND handle) { - Box *thisbox; - HWND box, lastbox = _toplevel_window(handle); - - box = WinWindowFromID(lastbox, FID_CLIENT); - if(box) - thisbox = WinQueryWindowPtr(box, QWP_USER); - else - thisbox = WinQueryWindowPtr(lastbox, QWP_USER); - - if(thisbox) - { - if(_focus_check_box_back(thisbox, handle, 1, 0) == 0) - _focus_check_box_back(thisbox, handle, 2, 0); - } + Box *thisbox; + HWND box, lastbox = _toplevel_window(handle); + + box = WinWindowFromID(lastbox, FID_CLIENT); + if(box) + thisbox = WinQueryWindowPtr(box, QWP_USER); + else + thisbox = WinQueryWindowPtr(lastbox, QWP_USER); + + if(thisbox) + { + if(_focus_check_box_back(thisbox, handle, 1, 0) == 0) + _focus_check_box_back(thisbox, handle, 2, 0); + } } /* This function will recursively search a box and add up the total height of it */ void _count_size(HWND box, int type, int *xsize, int *xorigsize) { - int size = 0, origsize = 0, z; - Box *tmp = WinQueryWindowPtr(box, QWP_USER); - - if(!tmp) - { - *xsize = *xorigsize = 0; - return; - } - - if(type == tmp->type) - { - /* If the box is going in the direction we want, then we - * return the entire sum of the items. - */ - for(z=0;z<tmp->count;z++) - { - if(tmp->items[z].type == TYPEBOX) - { - int s, os; - - _count_size(tmp->items[z].hwnd, type, &s, &os); - size += s; - origsize += os; - } - else - { - size += (type == DW_HORZ ? tmp->items[z].width : tmp->items[z].height); - origsize += (type == DW_HORZ ? tmp->items[z].origwidth : tmp->items[z].origheight); - } - } - } - else - { - /* If the box is not going in the direction we want, then we only - * want to return the maximum value. - */ - int tmpsize = 0, tmporigsize = 0; - - for(z=0;z<tmp->count;z++) - { - if(tmp->items[z].type == TYPEBOX) - _count_size(tmp->items[z].hwnd, type, &tmpsize, &tmporigsize); - else - { - tmpsize = (type == DW_HORZ ? tmp->items[z].width : tmp->items[z].height); - tmporigsize = (type == DW_HORZ ? tmp->items[z].origwidth : tmp->items[z].origheight); - } - - if(tmpsize > size) - size = tmpsize; - } - } - - *xsize = size; - *xorigsize = origsize; + int size = 0, origsize = 0, z; + Box *tmp = WinQueryWindowPtr(box, QWP_USER); + + if(!tmp) + { + *xsize = *xorigsize = 0; + return; + } + + if(type == tmp->type) + { + /* If the box is going in the direction we want, then we + * return the entire sum of the items. + */ + for(z=0;z<tmp->count;z++) + { + if(tmp->items[z].type == TYPEBOX) + { + int s, os; + + _count_size(tmp->items[z].hwnd, type, &s, &os); + size += s; + origsize += os; + } + else + { + size += (type == DW_HORZ ? tmp->items[z].width : tmp->items[z].height); + origsize += (type == DW_HORZ ? tmp->items[z].origwidth : tmp->items[z].origheight); + } + } + } + else + { + /* If the box is not going in the direction we want, then we only + * want to return the maximum value. + */ + int tmpsize = 0, tmporigsize = 0; + + for(z=0;z<tmp->count;z++) + { + if(tmp->items[z].type == TYPEBOX) + _count_size(tmp->items[z].hwnd, type, &tmpsize, &tmporigsize); + else + { + tmpsize = (type == DW_HORZ ? tmp->items[z].width : tmp->items[z].height); + tmporigsize = (type == DW_HORZ ? tmp->items[z].origwidth : tmp->items[z].origheight); + } + + if(tmpsize > size) + size = tmpsize; + } + } + + *xsize = size; + *xorigsize = origsize; } @@ -849,734 +849,734 @@ BOOL _TrackRectangle(HWND hwndBase, RECTL* rclTrack, RECTL* rclBounds) { - TRACKINFO track; - APIRET rc; - - track.cxBorder = 1; - track.cyBorder = 1; - track.cxGrid = 1; - track.cyGrid = 1; - track.cxKeyboard = 8; - track.cyKeyboard = 8; - - if(!rclTrack) - return FALSE; - - if(rclBounds) - { - track.rclBoundary = *rclBounds; - } - else - { - track.rclBoundary.yTop = - track.rclBoundary.xRight = 3000; - track.rclBoundary.yBottom = - track.rclBoundary.xLeft = -3000; - } - - track.rclTrack = *rclTrack; - - WinMapWindowPoints(hwndBase, - HWND_DESKTOP, - (PPOINTL)&track.rclTrack, - 2); - - track.ptlMinTrackSize.x = track.rclTrack.xRight - - track.rclTrack.xLeft; - track.ptlMinTrackSize.y = track.rclTrack.yTop - - track.rclTrack.yBottom; - track.ptlMaxTrackSize.x = track.rclTrack.xRight - - track.rclTrack.xLeft; - track.ptlMaxTrackSize.y = track.rclTrack.yTop - - track.rclTrack.yBottom; - - track.fs = TF_MOVE | TF_ALLINBOUNDARY; - - rc = WinTrackRect(HWND_DESKTOP, 0, &track); - - if(rc) - *rclTrack = track.rclTrack; - - return rc; + TRACKINFO track; + APIRET rc; + + track.cxBorder = 1; + track.cyBorder = 1; + track.cxGrid = 1; + track.cyGrid = 1; + track.cxKeyboard = 8; + track.cyKeyboard = 8; + + if(!rclTrack) + return FALSE; + + if(rclBounds) + { + track.rclBoundary = *rclBounds; + } + else + { + track.rclBoundary.yTop = + track.rclBoundary.xRight = 3000; + track.rclBoundary.yBottom = + track.rclBoundary.xLeft = -3000; + } + + track.rclTrack = *rclTrack; + + WinMapWindowPoints(hwndBase, + HWND_DESKTOP, + (PPOINTL)&track.rclTrack, + 2); + + track.ptlMinTrackSize.x = track.rclTrack.xRight + - track.rclTrack.xLeft; + track.ptlMinTrackSize.y = track.rclTrack.yTop + - track.rclTrack.yBottom; + track.ptlMaxTrackSize.x = track.rclTrack.xRight + - track.rclTrack.xLeft; + track.ptlMaxTrackSize.y = track.rclTrack.yTop + - track.rclTrack.yBottom; + + track.fs = TF_MOVE | TF_ALLINBOUNDARY; + + rc = WinTrackRect(HWND_DESKTOP, 0, &track); + + if(rc) + *rclTrack = track.rclTrack; + + return rc; } void _check_resize_notebook(HWND hwnd) { - char tmpbuf[100]; - - WinQueryClassName(hwnd, 99, tmpbuf); - - /* If we have a notebook we resize the page again. */ - if(strncmp(tmpbuf, "#40", 4)==0) - { - unsigned long x, y, width, height; - ULONG page = (ULONG)WinSendMsg(hwnd, BKM_QUERYPAGEID, 0, MPFROM2SHORT(BKA_FIRST, BKA_MAJOR)); - - while(page) - { - HWND pagehwnd = (HWND)WinSendMsg(hwnd, BKM_QUERYPAGEWINDOWHWND, MPFROMLONG(page), 0); - RECTL rc; - - Box *pagebox = (Box *)WinQueryWindowPtr(pagehwnd, QWP_USER); - if(pagebox) - { - dw_window_get_pos_size(hwnd, &x, &y, &width, &height); - - rc.xLeft = x; - rc.yBottom = y; - rc.xRight = x + width; - rc.yTop = y + height; - - WinSendMsg(hwnd, BKM_CALCPAGERECT, (MPARAM)&rc, (MPARAM)TRUE); - - _do_resize(pagebox, rc.xRight - rc.xLeft, rc.yTop - rc.yBottom); - } - page = (ULONG)WinSendMsg(hwnd, BKM_QUERYPAGEID, (MPARAM)page, MPFROM2SHORT(BKA_NEXT, BKA_MAJOR)); - } - - } + char tmpbuf[100]; + + WinQueryClassName(hwnd, 99, tmpbuf); + + /* If we have a notebook we resize the page again. */ + if(strncmp(tmpbuf, "#40", 4)==0) + { + unsigned long x, y, width, height; + ULONG page = (ULONG)WinSendMsg(hwnd, BKM_QUERYPAGEID, 0, MPFROM2SHORT(BKA_FIRST, BKA_MAJOR)); + + while(page) + { + HWND pagehwnd = (HWND)WinSendMsg(hwnd, BKM_QUERYPAGEWINDOWHWND, MPFROMLONG(page), 0); + RECTL rc; + + Box *pagebox = (Box *)WinQueryWindowPtr(pagehwnd, QWP_USER); + if(pagebox) + { + dw_window_get_pos_size(hwnd, &x, &y, &width, &height); + + rc.xLeft = x; + rc.yBottom = y; + rc.xRight = x + width; + rc.yTop = y + height; + + WinSendMsg(hwnd, BKM_CALCPAGERECT, (MPARAM)&rc, (MPARAM)TRUE); + + _do_resize(pagebox, rc.xRight - rc.xLeft, rc.yTop - rc.yBottom); + } + page = (ULONG)WinSendMsg(hwnd, BKM_QUERYPAGEID, (MPARAM)page, MPFROM2SHORT(BKA_NEXT, BKA_MAJOR)); + } + + } } /* Return the OS/2 color from the DW color */ unsigned long _internal_color(unsigned long color) { - if(color < 16) - return _colors[color]; - return color; + if(color < 16) + return _colors[color]; + return color; } unsigned long _os2_color(unsigned long color) { - return DW_RED_VALUE(color) << 16 | DW_GREEN_VALUE(color) << 8 | DW_BLUE_VALUE(color); + return DW_RED_VALUE(color) << 16 | DW_GREEN_VALUE(color) << 8 | DW_BLUE_VALUE(color); } BOOL _MySetWindowPos(HWND hwnd, HWND parent, HWND behind, LONG x, LONG y, LONG cx, LONG cy, ULONG fl) { - int height = _get_height(parent); - - return WinSetWindowPos(hwnd, behind, x, height - y - cy, cx, cy, fl); + int height = _get_height(parent); + + return WinSetWindowPos(hwnd, behind, x, height - y - cy, cx, cy, fl); } /* This function calculates how much space the widgets and boxes require * and does expansion as necessary. */ int _resize_box(Box *thisbox, int *depth, int x, int y, int *usedx, int *usedy, - int pass, int *usedpadx, int *usedpady) -{ - int z, currentx = 0, currenty = 0; - int uymax = 0, uxmax = 0; - int upymax = 0, upxmax = 0; - /* Used for the SIZEEXPAND */ - int nux = *usedx, nuy = *usedy; - int nupx = *usedpadx, nupy = *usedpady; - - (*usedx) += (thisbox->pad * 2); - (*usedy) += (thisbox->pad * 2); - - if(thisbox->grouphwnd) - { - char *text = dw_window_get_text(thisbox->grouphwnd); - - thisbox->grouppady = 0; - - if(text) - { - dw_font_text_extents_get(thisbox->grouphwnd, 0, text, NULL, &thisbox->grouppady); - dw_free(text); - } - - if(thisbox->grouppady) - thisbox->grouppady += 3; - else - thisbox->grouppady = 6; - - thisbox->grouppadx = 6; - - (*usedx) += thisbox->grouppadx; - (*usedpadx) += thisbox->grouppadx; - (*usedy) += thisbox->grouppady; - (*usedpady) += thisbox->grouppady; - } - - for(z=0;z<thisbox->count;z++) - { - if(thisbox->items[z].type == TYPEBOX) - { - int initialx, initialy; - Box *tmp = WinQueryWindowPtr(thisbox->items[z].hwnd, QWP_USER); - - initialx = x - (*usedx); - initialy = y - (*usedy); - - if(tmp) - { - int newx, newy; - int nux = *usedx, nuy = *usedy; - int upx = *usedpadx + (tmp->pad*2), upy = *usedpady + (tmp->pad*2); - - /* On the second pass we know how big the box needs to be and how - * much space we have, so we can calculate a ratio for the new box. - */ - if(pass == 2) - { - int deep = *depth + 1; - - _resize_box(tmp, &deep, x, y, &nux, &nuy, 1, &upx, &upy); - - tmp->upx = upx - *usedpadx; - tmp->upy = upy - *usedpady; - - newx = x - nux; - newy = y - nuy; - - tmp->width = thisbox->items[z].width = initialx - newx; - tmp->height = thisbox->items[z].height = initialy - newy; - - tmp->parentxratio = thisbox->xratio; - tmp->parentyratio = thisbox->yratio; - - tmp->parentpad = tmp->pad; - - /* Just in case */ - tmp->xratio = thisbox->xratio; - tmp->yratio = thisbox->yratio; - - if(thisbox->type == DW_VERT) - { - int tmppad = (thisbox->items[z].pad*2)+(tmp->pad*2)+tmp->grouppady; - - if((thisbox->items[z].width - tmppad)!=0) - tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-tmppad))/((float)(thisbox->items[z].width-tmppad)); - } - else - { - if((thisbox->items[z].width-tmp->upx)!=0) - tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-tmp->upx))/((float)(thisbox->items[z].width-tmp->upx)); - } - if(thisbox->type == DW_HORZ) - { - int tmppad = (thisbox->items[z].pad*2)+(tmp->pad*2)+tmp->grouppadx; - - if((thisbox->items[z].height-tmppad)!=0) - tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-tmppad))/((float)(thisbox->items[z].height-tmppad)); - } - else - { - if((thisbox->items[z].height-tmp->upy)!=0) - tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-tmp->upy))/((float)(thisbox->items[z].height-tmp->upy)); - } - - nux = *usedx; nuy = *usedy; - upx = *usedpadx + (tmp->pad*2); upy = *usedpady + (tmp->pad*2); - } - - (*depth)++; - - _resize_box(tmp, depth, x, y, &nux, &nuy, pass, &upx, &upy); - - (*depth)--; - - newx = x - nux; - newy = y - nuy; - - tmp->minwidth = thisbox->items[z].width = initialx - newx; - tmp->minheight = thisbox->items[z].height = initialy - newy; - } - } - - if(pass > 1 && *depth > 0) - { - if(thisbox->type == DW_VERT) - { - int tmppad = (thisbox->items[z].pad*2)+(thisbox->parentpad*2)+thisbox->grouppadx; - - if((thisbox->minwidth-tmppad) == 0) - thisbox->items[z].xratio = 1.0; - else - thisbox->items[z].xratio = ((float)((thisbox->width * thisbox->parentxratio)-tmppad))/((float)(thisbox->minwidth-tmppad)); - } - else - { - if(thisbox->minwidth-thisbox->upx == 0) - thisbox->items[z].xratio = 1.0; - else - thisbox->items[z].xratio = ((float)((thisbox->width * thisbox->parentxratio)-thisbox->upx))/((float)(thisbox->minwidth-thisbox->upx)); - } - - if(thisbox->type == DW_HORZ) - { - int tmppad = (thisbox->items[z].pad*2)+(thisbox->parentpad*2)+thisbox->grouppady; - - if((thisbox->minheight-tmppad) == 0) - thisbox->items[z].yratio = 1.0; - else - thisbox->items[z].yratio = ((float)((thisbox->height * thisbox->parentyratio)-tmppad))/((float)(thisbox->minheight-tmppad)); - } - else - { - if(thisbox->minheight-thisbox->upy == 0) - thisbox->items[z].yratio = 1.0; - else - thisbox->items[z].yratio = ((float)((thisbox->height * thisbox->parentyratio)-thisbox->upy))/((float)(thisbox->minheight-thisbox->upy)); - } - - if(thisbox->items[z].type == TYPEBOX) - { - Box *tmp = WinQueryWindowPtr(thisbox->items[z].hwnd, QWP_USER); - - if(tmp) - { - tmp->parentxratio = thisbox->items[z].xratio; - tmp->parentyratio = thisbox->items[z].yratio; - } - } - } - else - { - thisbox->items[z].xratio = thisbox->xratio; - thisbox->items[z].yratio = thisbox->yratio; - } - - if(thisbox->type == DW_VERT) - { - int itemwidth = thisbox->items[z].width + (thisbox->items[z].pad*2); - - if(itemwidth > uxmax) - uxmax = itemwidth; - if(thisbox->items[z].hsize != SIZEEXPAND) - { - if(itemwidth > upxmax) - upxmax = itemwidth; - } - else - { - if(thisbox->items[z].pad*2 > upxmax) - upxmax = thisbox->items[z].pad*2; - } - } - else - { - if(thisbox->items[z].width == -1) - { - /* figure out how much space this item requires */ - /* thisbox->items[z].width = */ - } - else - { - (*usedx) += thisbox->items[z].width + (thisbox->items[z].pad*2); - if(thisbox->items[z].hsize != SIZEEXPAND) - (*usedpadx) += (thisbox->items[z].pad*2) + thisbox->items[z].width; - else - (*usedpadx) += thisbox->items[z].pad*2; - } - } - if(thisbox->type == DW_HORZ) - { - int itemheight = thisbox->items[z].height + (thisbox->items[z].pad*2); - - if(itemheight > uymax) - uymax = itemheight; - if(thisbox->items[z].vsize != SIZEEXPAND) - { - if(itemheight > upymax) - upymax = itemheight; - } - else - { - if(thisbox->items[z].pad*2 > upymax) - upymax = thisbox->items[z].pad*2; - } - } - else - { - if(thisbox->items[z].height == -1) - { - /* figure out how much space this item requires */ - /* thisbox->items[z].height = */ - } - else - { - (*usedy) += thisbox->items[z].height + (thisbox->items[z].pad*2); - if(thisbox->items[z].vsize != SIZEEXPAND) - (*usedpady) += (thisbox->items[z].pad*2) + thisbox->items[z].height; - else - (*usedpady) += thisbox->items[z].pad*2; - } - } - } - - (*usedx) += uxmax; - (*usedy) += uymax; - (*usedpadx) += upxmax; - (*usedpady) += upymax; - - currentx += thisbox->pad; - currenty += thisbox->pad; - - if(thisbox->grouphwnd) - { - currentx += 3; - currenty += thisbox->grouppady - 3; - } - - /* The second pass is for expansion and actual placement. */ - if(pass > 1) - { - /* Any SIZEEXPAND items should be set to uxmax/uymax */ - for(z=0;z<thisbox->count;z++) - { - if(thisbox->items[z].hsize == SIZEEXPAND && thisbox->type == DW_VERT) - thisbox->items[z].width = uxmax-(thisbox->items[z].pad*2); - if(thisbox->items[z].vsize == SIZEEXPAND && thisbox->type == DW_HORZ) - thisbox->items[z].height = uymax-(thisbox->items[z].pad*2); - /* Run this code segment again to finalize the sized after setting uxmax/uymax values. */ - if(thisbox->items[z].type == TYPEBOX) - { - Box *tmp = WinQueryWindowPtr(thisbox->items[z].hwnd, QWP_USER); - - if(tmp) - { - if(*depth > 0) - { - float calcval; - - if(thisbox->type == DW_VERT) - { - calcval = (float)(tmp->minwidth-((thisbox->items[z].pad*2)+(thisbox->pad*2))); - if(calcval == 0.0) - tmp->xratio = thisbox->xratio; - else - tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval; - tmp->width = thisbox->items[z].width; - } - if(thisbox->type == DW_HORZ) - { - calcval = (float)(tmp->minheight-((thisbox->items[z].pad*2)+(thisbox->pad*2))); - if(calcval == 0.0) - tmp->yratio = thisbox->yratio; - else - tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval; - tmp->height = thisbox->items[z].height; - } - } - - (*depth)++; - - _resize_box(tmp, depth, x, y, &nux, &nuy, 3, &nupx, &nupy); - - (*depth)--; - - } - } - } - - for(z=0;z<(thisbox->count);z++) - { - int height = thisbox->items[z].height; - int width = thisbox->items[z].width; - int pad = thisbox->items[z].pad; - HWND handle = thisbox->items[z].hwnd; - int vectorx, vectory; - - /* When upxmax != pad*2 then ratios are incorrect. */ - vectorx = (int)((width*thisbox->items[z].xratio)-width); - vectory = (int)((height*thisbox->items[z].yratio)-height); - - if(width > 0 && height > 0) - { - char tmpbuf[100]; - /* This is a hack to fix rounding of the sizing */ - if(*depth == 0) - { - vectorx++; - vectory++; - } - - /* If this item isn't going to expand... reset the vectors to 0 */ - if(thisbox->items[z].vsize != SIZEEXPAND) - vectory = 0; - if(thisbox->items[z].hsize != SIZEEXPAND) - vectorx = 0; - - WinQueryClassName(handle, 99, tmpbuf); - - if(strncmp(tmpbuf, "#2", 3)==0) - { - HWND frame = (HWND)dw_window_get_data(handle, "_dw_combo_box"); - /* Make the combobox big enough to drop down. :) */ - WinSetWindowPos(handle, HWND_TOP, 0, -100, - width + vectorx, (height + vectory) + 100, SWP_MOVE | SWP_SIZE | SWP_ZORDER); - _MySetWindowPos(frame, thisbox->hwnd, HWND_TOP, currentx + pad, currenty + pad, - width + vectorx, height + vectory, SWP_MOVE | SWP_SIZE | SWP_ZORDER); - } - else if(strncmp(tmpbuf, "#6", 3)==0) - { - /* Entryfields on OS/2 have a thick border that isn't on Windows and GTK */ - _MySetWindowPos(handle, thisbox->hwnd, HWND_TOP, (currentx + pad) + 3, (currenty + pad) + 3, - (width + vectorx) - 6, (height + vectory) - 6, SWP_MOVE | SWP_SIZE | SWP_ZORDER); - } - else if(strncmp(tmpbuf, "#40", 5)==0) - { - _MySetWindowPos(handle, thisbox->hwnd, HWND_TOP, currentx + pad, currenty + pad, - width + vectorx, height + vectory, SWP_MOVE | SWP_SIZE | SWP_ZORDER); - _check_resize_notebook(handle); - } - else if(strncmp(tmpbuf, SplitbarClassName, strlen(SplitbarClassName)+1)==0) - { - /* Then try the bottom or right box */ - float *percent = (float *)dw_window_get_data(handle, "_dw_percent"); - int type = (int)dw_window_get_data(handle, "_dw_type"); - int cx = width + vectorx; - int cy = height + vectory; - - _MySetWindowPos(handle, thisbox->hwnd, HWND_TOP, currentx + pad, currenty + pad, - cx, cy, SWP_MOVE | SWP_SIZE | SWP_ZORDER); - - if(cx > 0 && cy > 0 && percent) - _handle_splitbar_resize(handle, *percent, type, cx, cy); - } - else - { - _MySetWindowPos(handle, thisbox->hwnd, HWND_TOP, currentx + pad, currenty + pad, - width + vectorx, height + vectory, SWP_MOVE | SWP_SIZE | SWP_ZORDER); - if(thisbox->items[z].type == TYPEBOX) - { - Box *boxinfo = WinQueryWindowPtr(handle, QWP_USER); - - if(boxinfo && boxinfo->grouphwnd) - WinSetWindowPos(boxinfo->grouphwnd, HWND_TOP, 0, 0, - width + vectorx, height + vectory, SWP_MOVE | SWP_SIZE); - - } - - } - - if(thisbox->type == DW_HORZ) - currentx += width + vectorx + (pad * 2); - if(thisbox->type == DW_VERT) - currenty += height + vectory + (pad * 2); - } - } - } - return 0; + int pass, int *usedpadx, int *usedpady) +{ + int z, currentx = 0, currenty = 0; + int uymax = 0, uxmax = 0; + int upymax = 0, upxmax = 0; + /* Used for the SIZEEXPAND */ + int nux = *usedx, nuy = *usedy; + int nupx = *usedpadx, nupy = *usedpady; + + (*usedx) += (thisbox->pad * 2); + (*usedy) += (thisbox->pad * 2); + + if(thisbox->grouphwnd) + { + char *text = dw_window_get_text(thisbox->grouphwnd); + + thisbox->grouppady = 0; + + if(text) + { + dw_font_text_extents_get(thisbox->grouphwnd, 0, text, NULL, &thisbox->grouppady); + dw_free(text); + } + + if(thisbox->grouppady) + thisbox->grouppady += 3; + else + thisbox->grouppady = 6; + + thisbox->grouppadx = 6; + + (*usedx) += thisbox->grouppadx; + (*usedpadx) += thisbox->grouppadx; + (*usedy) += thisbox->grouppady; + (*usedpady) += thisbox->grouppady; + } + + for(z=0;z<thisbox->count;z++) + { + if(thisbox->items[z].type == TYPEBOX) + { + int initialx, initialy; + Box *tmp = WinQueryWindowPtr(thisbox->items[z].hwnd, QWP_USER); + + initialx = x - (*usedx); + initialy = y - (*usedy); + + if(tmp) + { + int newx, newy; + int nux = *usedx, nuy = *usedy; + int upx = *usedpadx + (tmp->pad*2), upy = *usedpady + (tmp->pad*2); + + /* On the second pass we know how big the box needs to be and how + * much space we have, so we can calculate a ratio for the new box. + */ + if(pass == 2) + { + int deep = *depth + 1; + + _resize_box(tmp, &deep, x, y, &nux, &nuy, 1, &upx, &upy); + + tmp->upx = upx - *usedpadx; + tmp->upy = upy - *usedpady; + + newx = x - nux; + newy = y - nuy; + + tmp->width = thisbox->items[z].width = initialx - newx; + tmp->height = thisbox->items[z].height = initialy - newy; + + tmp->parentxratio = thisbox->xratio; + tmp->parentyratio = thisbox->yratio; + + tmp->parentpad = tmp->pad; + + /* Just in case */ + tmp->xratio = thisbox->xratio; + tmp->yratio = thisbox->yratio; + + if(thisbox->type == DW_VERT) + { + int tmppad = (thisbox->items[z].pad*2)+(tmp->pad*2)+tmp->grouppady; + + if((thisbox->items[z].width - tmppad)!=0) + tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-tmppad))/((float)(thisbox->items[z].width-tmppad)); + } + else + { + if((thisbox->items[z].width-tmp->upx)!=0) + tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-tmp->upx))/((float)(thisbox->items[z].width-tmp->upx)); + } + if(thisbox->type == DW_HORZ) + { + int tmppad = (thisbox->items[z].pad*2)+(tmp->pad*2)+tmp->grouppadx; + + if((thisbox->items[z].height-tmppad)!=0) + tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-tmppad))/((float)(thisbox->items[z].height-tmppad)); + } + else + { + if((thisbox->items[z].height-tmp->upy)!=0) + tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-tmp->upy))/((float)(thisbox->items[z].height-tmp->upy)); + } + + nux = *usedx; nuy = *usedy; + upx = *usedpadx + (tmp->pad*2); upy = *usedpady + (tmp->pad*2); + } + + (*depth)++; + + _resize_box(tmp, depth, x, y, &nux, &nuy, pass, &upx, &upy); + + (*depth)--; + + newx = x - nux; + newy = y - nuy; + + tmp->minwidth = thisbox->items[z].width = initialx - newx; + tmp->minheight = thisbox->items[z].height = initialy - newy; + } + } + + if(pass > 1 && *depth > 0) + { + if(thisbox->type == DW_VERT) + { + int tmppad = (thisbox->items[z].pad*2)+(thisbox->parentpad*2)+thisbox->grouppadx; + + if((thisbox->minwidth-tmppad) == 0) + thisbox->items[z].xratio = 1.0; + else + thisbox->items[z].xratio = ((float)((thisbox->width * thisbox->parentxratio)-tmppad))/((float)(thisbox->minwidth-tmppad)); + } + else + { + if(thisbox->minwidth-thisbox->upx == 0) + thisbox->items[z].xratio = 1.0; + else + thisbox->items[z].xratio = ((float)((thisbox->width * thisbox->parentxratio)-thisbox->upx))/((float)(thisbox->minwidth-thisbox->upx)); + } + + if(thisbox->type == DW_HORZ) + { + int tmppad = (thisbox->items[z].pad*2)+(thisbox->parentpad*2)+thisbox->grouppady; + + if((thisbox->minheight-tmppad) == 0) + thisbox->items[z].yratio = 1.0; + else + thisbox->items[z].yratio = ((float)((thisbox->height * thisbox->parentyratio)-tmppad))/((float)(thisbox->minheight-tmppad)); + } + else + { + if(thisbox->minheight-thisbox->upy == 0) + thisbox->items[z].yratio = 1.0; + else + thisbox->items[z].yratio = ((float)((thisbox->height * thisbox->parentyratio)-thisbox->upy))/((float)(thisbox->minheight-thisbox->upy)); + } + + if(thisbox->items[z].type == TYPEBOX) + { + Box *tmp = WinQueryWindowPtr(thisbox->items[z].hwnd, QWP_USER); + + if(tmp) + { + tmp->parentxratio = thisbox->items[z].xratio; + tmp->parentyratio = thisbox->items[z].yratio; + } + } + } + else + { + thisbox->items[z].xratio = thisbox->xratio; + thisbox->items[z].yratio = thisbox->yratio; + } + + if(thisbox->type == DW_VERT) + { + int itemwidth = thisbox->items[z].width + (thisbox->items[z].pad*2); + + if(itemwidth > uxmax) + uxmax = itemwidth; + if(thisbox->items[z].hsize != SIZEEXPAND) + { + if(itemwidth > upxmax) + upxmax = itemwidth; + } + else + { + if(thisbox->items[z].pad*2 > upxmax) + upxmax = thisbox->items[z].pad*2; + } + } + else + { + if(thisbox->items[z].width == -1) + { + /* figure out how much space this item requires */ + /* thisbox->items[z].width = */ + } + else + { + (*usedx) += thisbox->items[z].width + (thisbox->items[z].pad*2); + if(thisbox->items[z].hsize != SIZEEXPAND) + (*usedpadx) += (thisbox->items[z].pad*2) + thisbox->items[z].width; + else + (*usedpadx) += thisbox->items[z].pad*2; + } + } + if(thisbox->type == DW_HORZ) + { + int itemheight = thisbox->items[z].height + (thisbox->items[z].pad*2); + + if(itemheight > uymax) + uymax = itemheight; + if(thisbox->items[z].vsize != SIZEEXPAND) + { + if(itemheight > upymax) + upymax = itemheight; + } + else + { + if(thisbox->items[z].pad*2 > upymax) + upymax = thisbox->items[z].pad*2; + } + } + else + { + if(thisbox->items[z].height == -1) + { + /* figure out how much space this item requires */ + /* thisbox->items[z].height = */ + } + else + { + (*usedy) += thisbox->items[z].height + (thisbox->items[z].pad*2); + if(thisbox->items[z].vsize != SIZEEXPAND) + (*usedpady) += (thisbox->items[z].pad*2) + thisbox->items[z].height; + else + (*usedpady) += thisbox->items[z].pad*2; + } + } + } + + (*usedx) += uxmax; + (*usedy) += uymax; + (*usedpadx) += upxmax; + (*usedpady) += upymax; + + currentx += thisbox->pad; + currenty += thisbox->pad; + + if(thisbox->grouphwnd) + { + currentx += 3; + currenty += thisbox->grouppady - 3; + } + + /* The second pass is for expansion and actual placement. */ + if(pass > 1) + { + /* Any SIZEEXPAND items should be set to uxmax/uymax */ + for(z=0;z<thisbox->count;z++) + { + if(thisbox->items[z].hsize == SIZEEXPAND && thisbox->type == DW_VERT) + thisbox->items[z].width = uxmax-(thisbox->items[z].pad*2); + if(thisbox->items[z].vsize == SIZEEXPAND && thisbox->type == DW_HORZ) + thisbox->items[z].height = uymax-(thisbox->items[z].pad*2); + /* Run this code segment again to finalize the sized after setting uxmax/uymax values. */ + if(thisbox->items[z].type == TYPEBOX) + { + Box *tmp = WinQueryWindowPtr(thisbox->items[z].hwnd, QWP_USER); + + if(tmp) + { + if(*depth > 0) + { + float calcval; + + if(thisbox->type == DW_VERT) + { + calcval = (float)(tmp->minwidth-((thisbox->items[z].pad*2)+(thisbox->pad*2))); + if(calcval == 0.0) + tmp->xratio = thisbox->xratio; + else + tmp->xratio = ((float)((thisbox->items[z].width * thisbox->xratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval; + tmp->width = thisbox->items[z].width; + } + if(thisbox->type == DW_HORZ) + { + calcval = (float)(tmp->minheight-((thisbox->items[z].pad*2)+(thisbox->pad*2))); + if(calcval == 0.0) + tmp->yratio = thisbox->yratio; + else + tmp->yratio = ((float)((thisbox->items[z].height * thisbox->yratio)-((thisbox->items[z].pad*2)+(thisbox->pad*2))))/calcval; + tmp->height = thisbox->items[z].height; + } + } + + (*depth)++; + + _resize_box(tmp, depth, x, y, &nux, &nuy, 3, &nupx, &nupy); + + (*depth)--; + + } + } + } + + for(z=0;z<(thisbox->count);z++) + { + int height = thisbox->items[z].height; + int width = thisbox->items[z].width; + int pad = thisbox->items[z].pad; + HWND handle = thisbox->items[z].hwnd; + int vectorx, vectory; + + /* When upxmax != pad*2 then ratios are incorrect. */ + vectorx = (int)((width*thisbox->items[z].xratio)-width); + vectory = (int)((height*thisbox->items[z].yratio)-height); + + if(width > 0 && height > 0) + { + char tmpbuf[100]; + /* This is a hack to fix rounding of the sizing */ + if(*depth == 0) + { + vectorx++; + vectory++; + } + + /* If this item isn't going to expand... reset the vectors to 0 */ + if(thisbox->items[z].vsize != SIZEEXPAND) + vectory = 0; + if(thisbox->items[z].hsize != SIZEEXPAND) + vectorx = 0; + + WinQueryClassName(handle, 99, tmpbuf); + + if(strncmp(tmpbuf, "#2", 3)==0) + { + HWND frame = (HWND)dw_window_get_data(handle, "_dw_combo_box"); + /* Make the combobox big enough to drop down. :) */ + WinSetWindowPos(handle, HWND_TOP, 0, -100, + width + vectorx, (height + vectory) + 100, SWP_MOVE | SWP_SIZE | SWP_ZORDER); + _MySetWindowPos(frame, thisbox->hwnd, HWND_TOP, currentx + pad, currenty + pad, + width + vectorx, height + vectory, SWP_MOVE | SWP_SIZE | SWP_ZORDER); + } + else if(strncmp(tmpbuf, "#6", 3)==0) + { + /* Entryfields on OS/2 have a thick border that isn't on Windows and GTK */ + _MySetWindowPos(handle, thisbox->hwnd, HWND_TOP, (currentx + pad) + 3, (currenty + pad) + 3, + (width + vectorx) - 6, (height + vectory) - 6, SWP_MOVE | SWP_SIZE | SWP_ZORDER); + } + else if(strncmp(tmpbuf, "#40", 5)==0) + { + _MySetWindowPos(handle, thisbox->hwnd, HWND_TOP, currentx + pad, currenty + pad, + width + vectorx, height + vectory, SWP_MOVE | SWP_SIZE | SWP_ZORDER); + _check_resize_notebook(handle); + } + else if(strncmp(tmpbuf, SplitbarClassName, strlen(SplitbarClassName)+1)==0) + { + /* Then try the bottom or right box */ + float *percent = (float *)dw_window_get_data(handle, "_dw_percent"); + int type = (int)dw_window_get_data(handle, "_dw_type"); + int cx = width + vectorx; + int cy = height + vectory; + + _MySetWindowPos(handle, thisbox->hwnd, HWND_TOP, currentx + pad, currenty + pad, + cx, cy, SWP_MOVE | SWP_SIZE | SWP_ZORDER); + + if(cx > 0 && cy > 0 && percent) + _handle_splitbar_resize(handle, *percent, type, cx, cy); + } + else + { + _MySetWindowPos(handle, thisbox->hwnd, HWND_TOP, currentx + pad, currenty + pad, + width + vectorx, height + vectory, SWP_MOVE | SWP_SIZE | SWP_ZORDER); + if(thisbox->items[z].type == TYPEBOX) + { + Box *boxinfo = WinQueryWindowPtr(handle, QWP_USER); + + if(boxinfo && boxinfo->grouphwnd) + WinSetWindowPos(boxinfo->grouphwnd, HWND_TOP, 0, 0, + width + vectorx, height + vectory, SWP_MOVE | SWP_SIZE); + + } + + } + + if(thisbox->type == DW_HORZ) + currentx += width + vectorx + (pad * 2); + if(thisbox->type == DW_VERT) + currenty += height + vectory + (pad * 2); + } + } + } + return 0; } void _do_resize(Box *thisbox, int x, int y) { - if(x != 0 && y != 0) - { - if(thisbox) - { - int usedx = 0, usedy = 0, usedpadx = 0, usedpady = 0, depth = 0; - - _resize_box(thisbox, &depth, x, y, &usedx, &usedy, 1, &usedpadx, &usedpady); - - if(usedx-usedpadx == 0 || usedy-usedpady == 0) - return; - - thisbox->xratio = ((float)(x-usedpadx))/((float)(usedx-usedpadx)); - thisbox->yratio = ((float)(y-usedpady))/((float)(usedy-usedpady)); - - usedx = usedy = usedpadx = usedpady = depth = 0; - - _resize_box(thisbox, &depth, x, y, &usedx, &usedy, 2, &usedpadx, &usedpady); - } - } + if(x != 0 && y != 0) + { + if(thisbox) + { + int usedx = 0, usedy = 0, usedpadx = 0, usedpady = 0, depth = 0; + + _resize_box(thisbox, &depth, x, y, &usedx, &usedy, 1, &usedpadx, &usedpady); + + if(usedx-usedpadx == 0 || usedy-usedpady == 0) + return; + + thisbox->xratio = ((float)(x-usedpadx))/((float)(usedx-usedpadx)); + thisbox->yratio = ((float)(y-usedpady))/((float)(usedy-usedpady)); + + usedx = usedy = usedpadx = usedpady = depth = 0; + + _resize_box(thisbox, &depth, x, y, &usedx, &usedy, 2, &usedpadx, &usedpady); + } + } } /* This procedure handles WM_QUERYTRACKINFO requests from the frame */ MRESULT EXPENTRY _sizeproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - PFNWP *blah = WinQueryWindowPtr(hWnd, QWP_USER); - Box *thisbox = NULL; - HWND box; - - box = WinWindowFromID(hWnd, FID_CLIENT); - if(box) - thisbox = WinQueryWindowPtr(box, QWP_USER); - - if(thisbox && !thisbox->titlebar) - { - switch(msg) - { - case WM_QUERYTRACKINFO: - { - if(blah && *blah) - { - PTRACKINFO ptInfo; - int res; - PFNWP myfunc = *blah; - res = (int)myfunc(hWnd, msg, mp1, mp2); - - ptInfo = (PTRACKINFO)(mp2); - - ptInfo->ptlMinTrackSize.y = 8; - ptInfo->ptlMinTrackSize.x = 8; - - return (MRESULT)res; - } - } - } - } - - if(blah && *blah) - { - PFNWP myfunc = *blah; - return myfunc(hWnd, msg, mp1, mp2); - } - - return WinDefWindowProc(hWnd, msg, mp1, mp2); + PFNWP *blah = WinQueryWindowPtr(hWnd, QWP_USER); + Box *thisbox = NULL; + HWND box; + + box = WinWindowFromID(hWnd, FID_CLIENT); + if(box) + thisbox = WinQueryWindowPtr(box, QWP_USER); + + if(thisbox && !thisbox->titlebar) + { + switch(msg) + { + case WM_QUERYTRACKINFO: + { + if(blah && *blah) + { + PTRACKINFO ptInfo; + int res; + PFNWP myfunc = *blah; + res = (int)myfunc(hWnd, msg, mp1, mp2); + + ptInfo = (PTRACKINFO)(mp2); + + ptInfo->ptlMinTrackSize.y = 8; + ptInfo->ptlMinTrackSize.x = 8; + + return (MRESULT)res; + } + } + } + } + + if(blah && *blah) + { + PFNWP myfunc = *blah; + return myfunc(hWnd, msg, mp1, mp2); + } + + return WinDefWindowProc(hWnd, msg, mp1, mp2); } void _Top(HPS hpsPaint, RECTL rclPaint) { - POINTL ptl1, ptl2; - - ptl1.x = rclPaint.xLeft; - ptl2.y = ptl1.y = rclPaint.yTop - 1; - ptl2.x = rclPaint.xRight - 1; - GpiMove(hpsPaint, &ptl1); - GpiLine(hpsPaint, &ptl2); + POINTL ptl1, ptl2; + + ptl1.x = rclPaint.xLeft; + ptl2.y = ptl1.y = rclPaint.yTop - 1; + ptl2.x = rclPaint.xRight - 1; + GpiMove(hpsPaint, &ptl1); + GpiLine(hpsPaint, &ptl2); } /* Left hits the bottom */ void _Left(HPS hpsPaint, RECTL rclPaint) { - POINTL ptl1, ptl2; - - ptl2.x = ptl1.x = rclPaint.xLeft; - ptl1.y = rclPaint.yTop - 1; - ptl2.y = rclPaint.yBottom; - GpiMove(hpsPaint, &ptl1); - GpiLine(hpsPaint, &ptl2); + POINTL ptl1, ptl2; + + ptl2.x = ptl1.x = rclPaint.xLeft; + ptl1.y = rclPaint.yTop - 1; + ptl2.y = rclPaint.yBottom; + GpiMove(hpsPaint, &ptl1); + GpiLine(hpsPaint, &ptl2); } void _Bottom(HPS hpsPaint, RECTL rclPaint) { - POINTL ptl1, ptl2; - - ptl1.x = rclPaint.xRight - 1; - ptl1.y = ptl2.y = rclPaint.yBottom; - ptl2.x = rclPaint.xLeft; - GpiMove(hpsPaint, &ptl1); - GpiLine(hpsPaint, &ptl2); + POINTL ptl1, ptl2; + + ptl1.x = rclPaint.xRight - 1; + ptl1.y = ptl2.y = rclPaint.yBottom; + ptl2.x = rclPaint.xLeft; + GpiMove(hpsPaint, &ptl1); + GpiLine(hpsPaint, &ptl2); } /* Right hits the top */ void _Right(HPS hpsPaint, RECTL rclPaint) { - POINTL ptl1, ptl2; - - ptl2.x = ptl1.x = rclPaint.xRight - 1; - ptl1.y = rclPaint.yBottom + 1; - ptl2.y = rclPaint.yTop - 1; - GpiMove(hpsPaint, &ptl1); - GpiLine(hpsPaint, &ptl2); + POINTL ptl1, ptl2; + + ptl2.x = ptl1.x = rclPaint.xRight - 1; + ptl1.y = rclPaint.yBottom + 1; + ptl2.y = rclPaint.yTop - 1; + GpiMove(hpsPaint, &ptl1); + GpiLine(hpsPaint, &ptl2); } /* This procedure handles drawing of a status border */ MRESULT EXPENTRY _statusproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - PFNWP *blah = WinQueryWindowPtr(hWnd, QWP_USER); - - if(msg == WM_MOUSEMOVE && _wndproc(hWnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - - if(blah && *blah) - { - PFNWP myfunc = *blah; - - switch(msg) - { - case WM_PAINT: - { - HPS hpsPaint; - RECTL rclPaint; - char buf[1024]; - - hpsPaint = WinBeginPaint(hWnd, 0, 0); - WinQueryWindowRect(hWnd, &rclPaint); - WinFillRect(hpsPaint, &rclPaint, CLR_PALEGRAY); - - GpiSetColor(hpsPaint, CLR_DARKGRAY); - _Top(hpsPaint, rclPaint); - _Left(hpsPaint, rclPaint); - - GpiSetColor(hpsPaint, CLR_WHITE); - _Right(hpsPaint, rclPaint); - _Bottom(hpsPaint, rclPaint); - - WinQueryWindowText(hWnd, 1024, buf); - rclPaint.xLeft += 3; - rclPaint.xRight--; - rclPaint.yTop--; - rclPaint.yBottom++; - - GpiSetColor(hpsPaint, CLR_BLACK); - WinDrawText(hpsPaint, -1, buf, &rclPaint, DT_TEXTATTRS, DT_TEXTATTRS, DT_VCENTER | DT_LEFT | DT_TEXTATTRS); - WinEndPaint(hpsPaint); - - return (MRESULT)TRUE; - } - } - return myfunc(hWnd, msg, mp1, mp2); - } - - return WinDefWindowProc(hWnd, msg, mp1, mp2); + PFNWP *blah = WinQueryWindowPtr(hWnd, QWP_USER); + + if(msg == WM_MOUSEMOVE && _wndproc(hWnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + + if(blah && *blah) + { + PFNWP myfunc = *blah; + + switch(msg) + { + case WM_PAINT: + { + HPS hpsPaint; + RECTL rclPaint; + char buf[1024]; + + hpsPaint = WinBeginPaint(hWnd, 0, 0); + WinQueryWindowRect(hWnd, &rclPaint); + WinFillRect(hpsPaint, &rclPaint, CLR_PALEGRAY); + + GpiSetColor(hpsPaint, CLR_DARKGRAY); + _Top(hpsPaint, rclPaint); + _Left(hpsPaint, rclPaint); + + GpiSetColor(hpsPaint, CLR_WHITE); + _Right(hpsPaint, rclPaint); + _Bottom(hpsPaint, rclPaint); + + WinQueryWindowText(hWnd, 1024, buf); + rclPaint.xLeft += 3; + rclPaint.xRight--; + rclPaint.yTop--; + rclPaint.yBottom++; + + GpiSetColor(hpsPaint, CLR_BLACK); + WinDrawText(hpsPaint, -1, buf, &rclPaint, DT_TEXTATTRS, DT_TEXTATTRS, DT_VCENTER | DT_LEFT | DT_TEXTATTRS); + WinEndPaint(hpsPaint); + + return (MRESULT)TRUE; + } + } + return myfunc(hWnd, msg, mp1, mp2); + } + + return WinDefWindowProc(hWnd, msg, mp1, mp2); } /* This procedure handles pointer changes */ MRESULT EXPENTRY _textproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - PFNWP *blah = WinQueryWindowPtr(hWnd, QWP_USER); - - if(msg == WM_MOUSEMOVE &&_wndproc(hWnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - - if(blah && *blah) - { - PFNWP myfunc = *blah; - - return myfunc(hWnd, msg, mp1, mp2); - } - - return WinDefWindowProc(hWnd, msg, mp1, mp2); + PFNWP *blah = WinQueryWindowPtr(hWnd, QWP_USER); + + if(msg == WM_MOUSEMOVE &&_wndproc(hWnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + + if(blah && *blah) + { + PFNWP myfunc = *blah; + + return myfunc(hWnd, msg, mp1, mp2); + } + + return WinDefWindowProc(hWnd, msg, mp1, mp2); } void _click_default(HWND handle) { - char tmpbuf[100]; - - WinQueryClassName(handle, 99, tmpbuf); - - /* These are the window classes which can - * obtain input focus. - */ - if(strncmp(tmpbuf, "#3", 3)==0) - { - /* Generate click on default item */ - SignalHandler *tmp = Root; - - /* Find any callbacks for this function */ - while(tmp) - { - if(tmp->message == WM_COMMAND) - { - int (* API clickfunc)(HWND, void *) = (int (* API)(HWND, void *))tmp->signalfunction; - - /* Make sure it's the right window, and the right ID */ - if(tmp->window == handle) - { - clickfunc(tmp->window, tmp->data); - tmp = NULL; - } - } - if(tmp) - tmp= tmp->next; - } - } - else - WinSetFocus(HWND_DESKTOP, handle); + char tmpbuf[100]; + + WinQueryClassName(handle, 99, tmpbuf); + + /* These are the window classes which can + * obtain input focus. + */ + if(strncmp(tmpbuf, "#3", 3)==0) + { + /* Generate click on default item */ + SignalHandler *tmp = Root; + + /* Find any callbacks for this function */ + while(tmp) + { + if(tmp->message == WM_COMMAND) + { + int (* API clickfunc)(HWND, void *) = (int (* API)(HWND, void *))tmp->signalfunction; + + /* Make sure it's the right window, and the right ID */ + if(tmp->window == handle) + { + clickfunc(tmp->window, tmp->data); + tmp = NULL; + } + } + if(tmp) + tmp= tmp->next; + } + } + else + WinSetFocus(HWND_DESKTOP, handle); } #define ENTRY_CUT 1001 @@ -1590,291 +1590,291 @@ */ MRESULT EXPENTRY _entryproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(hWnd, QWP_USER); - PFNWP oldproc = 0; - char tmpbuf[100]; - - if(blah) - oldproc = blah->oldproc; - - WinQueryClassName(hWnd, 99, tmpbuf); - - /* These are the window classes which should get a menu */ - if(strncmp(tmpbuf, "#2", 3)==0 || /* Combobox */ - strncmp(tmpbuf, "#6", 3)==0 || /* Entryfield */ - strncmp(tmpbuf, "#10", 4)==0 || /* MLE */ - strncmp(tmpbuf, "#32", 4)==0) /* Spinbutton */ - { - switch(msg) - { - case WM_CONTEXTMENU: - { - HMENUI hwndMenu = dw_menu_new(0L); - long x, y; - - if(strncmp(tmpbuf, "#10", 4)==0 && !WinSendMsg(hWnd, MLM_QUERYREADONLY, 0, 0)) - { - dw_menu_append_item(hwndMenu, "Undo", ENTRY_UNDO, 0L, TRUE, FALSE, 0L); - dw_menu_append_item(hwndMenu, "", 0L, 0L, TRUE, FALSE, 0L); - } - dw_menu_append_item(hwndMenu, "Copy", ENTRY_COPY, 0L, TRUE, FALSE, 0L); - if((strncmp(tmpbuf, "#10", 4)!=0 && !dw_window_get_data(hWnd, "_dw_disabled")) || (strncmp(tmpbuf, "#10", 4)==0 && !WinSendMsg(hWnd, MLM_QUERYREADONLY, 0, 0))) - { - dw_menu_append_item(hwndMenu, "Cut", ENTRY_CUT, 0L, TRUE, FALSE, 0L); - dw_menu_append_item(hwndMenu, "Paste", ENTRY_PASTE, 0L, TRUE, FALSE, 0L); - } - dw_menu_append_item(hwndMenu, "", 0L, 0L, TRUE, FALSE, 0L); - dw_menu_append_item(hwndMenu, "Select All", ENTRY_SALL, 0L, TRUE, FALSE, 0L); - - WinSetFocus(HWND_DESKTOP, hWnd); - dw_pointer_query_pos(&x, &y); - dw_menu_popup(&hwndMenu, hWnd, x, y); - } - break; - case WM_COMMAND: - { - ULONG command = COMMANDMSG(&msg)->cmd; - - /* MLE */ - if(strncmp(tmpbuf, "#10", 4)==0) - { - switch(command) - { - case ENTRY_CUT: - return WinSendMsg(hWnd, MLM_CUT, 0, 0); - case ENTRY_COPY: - return WinSendMsg(hWnd, MLM_COPY, 0, 0); - case ENTRY_PASTE: - return WinSendMsg(hWnd, MLM_PASTE, 0, 0); - case ENTRY_UNDO: - return WinSendMsg(hWnd, MLM_UNDO, 0, 0); - case ENTRY_SALL: - { - ULONG len = (ULONG)WinSendMsg(hWnd, MLM_QUERYTEXTLENGTH, 0, 0); - return WinSendMsg(hWnd, MLM_SETSEL, 0, (MPARAM)len); - } - } - } - else /* Other */ - { - HWND handle = hWnd; - - /* Get the entryfield handle from multi window controls */ - if(strncmp(tmpbuf, "#2", 3)==0) - handle = WinWindowFromID(hWnd, 667); - - if(handle) - { - switch(command) - { - case ENTRY_CUT: - return WinSendMsg(handle, EM_CUT, 0, 0); - case ENTRY_COPY: - return WinSendMsg(handle, EM_COPY, 0, 0); - case ENTRY_PASTE: - return WinSendMsg(handle, EM_PASTE, 0, 0); - case ENTRY_SALL: - { - LONG len = WinQueryWindowTextLength(hWnd); - return WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT(0, (SHORT)len), 0); - } - } - } - } - } - break; - } - } - - switch(msg) - { - case WM_BUTTON1DOWN: - case WM_BUTTON2DOWN: - case WM_BUTTON3DOWN: - { - if(strncmp(tmpbuf, "#32", 4)==0) - _run_event(hWnd, WM_SETFOCUS, (MPARAM)FALSE, (MPARAM)TRUE); - } - break; - case WM_CONTROL: - { - if(strncmp(tmpbuf, "#38", 4)==0) - _run_event(hWnd, msg, mp1, mp2); - } - break; - case WM_SETFOCUS: - _run_event(hWnd, msg, mp1, mp2); - break; - case WM_CHAR: - if(_run_event(hWnd, msg, mp1, mp2) == (MRESULT)TRUE) - return (MRESULT)TRUE; - if(SHORT1FROMMP(mp2) == '\t') - { - if(CHARMSG(&msg)->fs & KC_SHIFT) - _shift_focus_back(hWnd); - else - _shift_focus(hWnd); - return FALSE; - } - else if(SHORT1FROMMP(mp2) == '\r' && blah && blah->clickdefault) - _click_default(blah->clickdefault); - /* When you hit escape we get this value and the - * window hangs for reasons unknown. (in an MLE) - */ - else if(SHORT1FROMMP(mp2) == 283) - return (MRESULT)TRUE; - - break; - case WM_SIZE: - { - /* If it's a slider... make sure it shows the correct value */ - if(strncmp(tmpbuf, "#38", 4)==0) - WinPostMsg(hWnd, WM_USER+7, 0, 0); - } - break; - case WM_USER+7: - { - int pos = (int)dw_window_get_data(hWnd, "_dw_slider_value"); - WinSendMsg(hWnd, SLM_SETSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), (MPARAM)pos); - } - break; - case WM_MOUSEMOVE: - if(_wndproc(hWnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - break; - } - - if(oldproc) - return oldproc(hWnd, msg, mp1, mp2); - - return WinDefWindowProc(hWnd, msg, mp1, mp2); + WindowData *blah = (WindowData *)WinQueryWindowPtr(hWnd, QWP_USER); + PFNWP oldproc = 0; + char tmpbuf[100]; + + if(blah) + oldproc = blah->oldproc; + + WinQueryClassName(hWnd, 99, tmpbuf); + + /* These are the window classes which should get a menu */ + if(strncmp(tmpbuf, "#2", 3)==0 || /* Combobox */ + strncmp(tmpbuf, "#6", 3)==0 || /* Entryfield */ + strncmp(tmpbuf, "#10", 4)==0 || /* MLE */ + strncmp(tmpbuf, "#32", 4)==0) /* Spinbutton */ + { + switch(msg) + { + case WM_CONTEXTMENU: + { + HMENUI hwndMenu = dw_menu_new(0L); + long x, y; + + if(strncmp(tmpbuf, "#10", 4)==0 && !WinSendMsg(hWnd, MLM_QUERYREADONLY, 0, 0)) + { + dw_menu_append_item(hwndMenu, "Undo", ENTRY_UNDO, 0L, TRUE, FALSE, 0L); + dw_menu_append_item(hwndMenu, "", 0L, 0L, TRUE, FALSE, 0L); + } + dw_menu_append_item(hwndMenu, "Copy", ENTRY_COPY, 0L, TRUE, FALSE, 0L); + if((strncmp(tmpbuf, "#10", 4)!=0 && !dw_window_get_data(hWnd, "_dw_disabled")) || (strncmp(tmpbuf, "#10", 4)==0 && !WinSendMsg(hWnd, MLM_QUERYREADONLY, 0, 0))) + { + dw_menu_append_item(hwndMenu, "Cut", ENTRY_CUT, 0L, TRUE, FALSE, 0L); + dw_menu_append_item(hwndMenu, "Paste", ENTRY_PASTE, 0L, TRUE, FALSE, 0L); + } + dw_menu_append_item(hwndMenu, "", 0L, 0L, TRUE, FALSE, 0L); + dw_menu_append_item(hwndMenu, "Select All", ENTRY_SALL, 0L, TRUE, FALSE, 0L); + + WinSetFocus(HWND_DESKTOP, hWnd); + dw_pointer_query_pos(&x, &y); + dw_menu_popup(&hwndMenu, hWnd, x, y); + } + break; + case WM_COMMAND: + { + ULONG command = COMMANDMSG(&msg)->cmd; + + /* MLE */ + if(strncmp(tmpbuf, "#10", 4)==0) + { + switch(command) + { + case ENTRY_CUT: + return WinSendMsg(hWnd, MLM_CUT, 0, 0); + case ENTRY_COPY: + return WinSendMsg(hWnd, MLM_COPY, 0, 0); + case ENTRY_PASTE: + return WinSendMsg(hWnd, MLM_PASTE, 0, 0); + case ENTRY_UNDO: + return WinSendMsg(hWnd, MLM_UNDO, 0, 0); + case ENTRY_SALL: + { + ULONG len = (ULONG)WinSendMsg(hWnd, MLM_QUERYTEXTLENGTH, 0, 0); + return WinSendMsg(hWnd, MLM_SETSEL, 0, (MPARAM)len); + } + } + } + else /* Other */ + { + HWND handle = hWnd; + + /* Get the entryfield handle from multi window controls */ + if(strncmp(tmpbuf, "#2", 3)==0) + handle = WinWindowFromID(hWnd, 667); + + if(handle) + { + switch(command) + { + case ENTRY_CUT: + return WinSendMsg(handle, EM_CUT, 0, 0); + case ENTRY_COPY: + return WinSendMsg(handle, EM_COPY, 0, 0); + case ENTRY_PASTE: + return WinSendMsg(handle, EM_PASTE, 0, 0); + case ENTRY_SALL: + { + LONG len = WinQueryWindowTextLength(hWnd); + return WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT(0, (SHORT)len), 0); + } + } + } + } + } + break; + } + } + + switch(msg) + { + case WM_BUTTON1DOWN: + case WM_BUTTON2DOWN: + case WM_BUTTON3DOWN: + { + if(strncmp(tmpbuf, "#32", 4)==0) + _run_event(hWnd, WM_SETFOCUS, (MPARAM)FALSE, (MPARAM)TRUE); + } + break; + case WM_CONTROL: + { + if(strncmp(tmpbuf, "#38", 4)==0) + _run_event(hWnd, msg, mp1, mp2); + } + break; + case WM_SETFOCUS: + _run_event(hWnd, msg, mp1, mp2); + break; + case WM_CHAR: + if(_run_event(hWnd, msg, mp1, mp2) == (MRESULT)TRUE) + return (MRESULT)TRUE; + if(SHORT1FROMMP(mp2) == '\t') + { + if(CHARMSG(&msg)->fs & KC_SHIFT) + _shift_focus_back(hWnd); + else + _shift_focus(hWnd); + return FALSE; + } + else if(SHORT1FROMMP(mp2) == '\r' && blah && blah->clickdefault) + _click_default(blah->clickdefault); + /* When you hit escape we get this value and the + * window hangs for reasons unknown. (in an MLE) + */ + else if(SHORT1FROMMP(mp2) == 283) + return (MRESULT)TRUE; + + break; + case WM_SIZE: + { + /* If it's a slider... make sure it shows the correct value */ + if(strncmp(tmpbuf, "#38", 4)==0) + WinPostMsg(hWnd, WM_USER+7, 0, 0); + } + break; + case WM_USER+7: + { + int pos = (int)dw_window_get_data(hWnd, "_dw_slider_value"); + WinSendMsg(hWnd, SLM_SETSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), (MPARAM)pos); + } + break; + case WM_MOUSEMOVE: + if(_wndproc(hWnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + break; + } + + if(oldproc) + return oldproc(hWnd, msg, mp1, mp2); + + return WinDefWindowProc(hWnd, msg, mp1, mp2); } /* Deal with combobox specifics and enhancements */ MRESULT EXPENTRY _comboentryproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(hWnd, QWP_USER); - - switch(msg) - { - case WM_MOUSEMOVE: - if(_wndproc(hWnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - break; - case WM_CONTEXTMENU: - case WM_COMMAND: - return _entryproc(hWnd, msg, mp1, mp2); - case WM_SETFOCUS: - _run_event(hWnd, msg, mp1, mp2); - break; - case WM_CHAR: - if(_run_event(hWnd, msg, mp1, mp2) == (MRESULT)TRUE) - return (MRESULT)TRUE; - /* A Similar problem to the MLE, if ESC just return */ - if(SHORT1FROMMP(mp2) == 283) - return (MRESULT)TRUE; - break; - } - - if(blah && blah->oldproc) - return blah->oldproc(hWnd, msg, mp1, mp2); - - return WinDefWindowProc(hWnd, msg, mp1, mp2); + WindowData *blah = (WindowData *)WinQueryWindowPtr(hWnd, QWP_USER); + + switch(msg) + { + case WM_MOUSEMOVE: + if(_wndproc(hWnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + break; + case WM_CONTEXTMENU: + case WM_COMMAND: + return _entryproc(hWnd, msg, mp1, mp2); + case WM_SETFOCUS: + _run_event(hWnd, msg, mp1, mp2); + break; + case WM_CHAR: + if(_run_event(hWnd, msg, mp1, mp2) == (MRESULT)TRUE) + return (MRESULT)TRUE; + /* A Similar problem to the MLE, if ESC just return */ + if(SHORT1FROMMP(mp2) == 283) + return (MRESULT)TRUE; + break; + } + + if(blah && blah->oldproc) + return blah->oldproc(hWnd, msg, mp1, mp2); + + return WinDefWindowProc(hWnd, msg, mp1, mp2); } /* Enhance the standard OS/2 MLE control */ MRESULT EXPENTRY _mleproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - switch(msg) - { - case WM_VSCROLL: - if(SHORT2FROMMP(mp2) == SB_SLIDERTRACK) - { - USHORT pos = SHORT1FROMMP(mp2); - - WinSendMsg(hWnd, msg, mp1, MPFROM2SHORT(pos, SB_SLIDERPOSITION)); - } - break; - } - return _entryproc(hWnd, msg, mp1, mp2); + switch(msg) + { + case WM_VSCROLL: + if(SHORT2FROMMP(mp2) == SB_SLIDERTRACK) + { + USHORT pos = SHORT1FROMMP(mp2); + + WinSendMsg(hWnd, msg, mp1, MPFROM2SHORT(pos, SB_SLIDERPOSITION)); + } + break; + } + return _entryproc(hWnd, msg, mp1, mp2); } /* Handle special messages for the spinbutton's entryfield */ MRESULT EXPENTRY _spinentryproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(hWnd, QWP_USER); - PFNWP oldproc = 0; - - if(blah) - oldproc = blah->oldproc; - - switch(msg) - { - case WM_MOUSEMOVE: - if(_wndproc(hWnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - break; - case WM_CONTEXTMENU: - case WM_COMMAND: - return _entryproc(hWnd, msg, mp1, mp2); - } - - if(oldproc) - return oldproc(hWnd, msg, mp1, mp2); - - return WinDefWindowProc(hWnd, msg, mp1, mp2); + WindowData *blah = (WindowData *)WinQueryWindowPtr(hWnd, QWP_USER); + PFNWP oldproc = 0; + + if(blah) + oldproc = blah->oldproc; + + switch(msg) + { + case WM_MOUSEMOVE: + if(_wndproc(hWnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + break; + case WM_CONTEXTMENU: + case WM_COMMAND: + return _entryproc(hWnd, msg, mp1, mp2); + } + + if(oldproc) + return oldproc(hWnd, msg, mp1, mp2); + + return WinDefWindowProc(hWnd, msg, mp1, mp2); } int _dw_int_pos(HWND hwnd) { - int pos = (int)dw_window_get_data(hwnd, "_dw_percent_value"); - int range = _dw_percent_get_range(hwnd); - float fpos = (float)pos; - float frange = (float)range; - float fnew = (fpos/1000.0)*frange; - return (int)fnew; + int pos = (int)dw_window_get_data(hwnd, "_dw_percent_value"); + int range = _dw_percent_get_range(hwnd); + float fpos = (float)pos; + float frange = (float)range; + float fnew = (fpos/1000.0)*frange; + return (int)fnew; } void _dw_int_set(HWND hwnd, int pos) { - int inew, range = _dw_percent_get_range(hwnd); - if(range) - { - float fpos = (float)pos; - float frange = (float)range; - float fnew = (fpos/frange)*1000.0; - inew = (int)fnew; - dw_window_set_data(hwnd, "_dw_percent_value", (void *)inew); - } + int inew, range = _dw_percent_get_range(hwnd); + if(range) + { + float fpos = (float)pos; + float frange = (float)range; + float fnew = (fpos/frange)*1000.0; + inew = (int)fnew; + dw_window_set_data(hwnd, "_dw_percent_value", (void *)inew); + } } /* Handle size changes in the percent class */ MRESULT EXPENTRY _percentproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(hWnd, QWP_USER); - PFNWP oldproc = 0; - - if(blah) - oldproc = blah->oldproc; - - switch(msg) - { - case WM_MOUSEMOVE: - if(_wndproc(hWnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - break; - case WM_SIZE: - WinPostMsg(hWnd, WM_USER+7, 0, 0); - break; - case WM_USER+7: - WinSendMsg(hWnd, SLM_SETSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION,SMA_RANGEVALUE), (MPARAM)_dw_int_pos(hWnd)); - break; - } - - if(oldproc) - return oldproc(hWnd, msg, mp1, mp2); - - return WinDefWindowProc(hWnd, msg, mp1, mp2); + WindowData *blah = (WindowData *)WinQueryWindowPtr(hWnd, QWP_USER); + PFNWP oldproc = 0; + + if(blah) + oldproc = blah->oldproc; + + switch(msg) + { + case WM_MOUSEMOVE: + if(_wndproc(hWnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + break; + case WM_SIZE: + WinPostMsg(hWnd, WM_USER+7, 0, 0); + break; + case WM_USER+7: + WinSendMsg(hWnd, SLM_SETSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION,SMA_RANGEVALUE), (MPARAM)_dw_int_pos(hWnd)); + break; + } + + if(oldproc) + return oldproc(hWnd, msg, mp1, mp2); + + return WinDefWindowProc(hWnd, msg, mp1, mp2); } /* Handle correct painting of a combobox with the WS_CLIPCHILDREN @@ -1882,90 +1882,90 @@ */ MRESULT EXPENTRY _comboproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - WindowData *blah = WinQueryWindowPtr(hWnd, QWP_USER); - PFNWP oldproc = 0; - - if(blah) - oldproc = blah->oldproc; - - switch(msg) - { - case WM_MOUSEMOVE: - if(_wndproc(hWnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - break; - case WM_CHAR: - if(SHORT1FROMMP(mp2) == '\t') - { - if(CHARMSG(&msg)->fs & KC_SHIFT) - _shift_focus_back(hWnd); - else - _shift_focus(hWnd); - return FALSE; - } - else if(SHORT1FROMMP(mp2) == '\r' && blah && blah->clickdefault) - _click_default(blah->clickdefault); - break; - case WM_BUTTON1DBLCLK: - case WM_BUTTON2DBLCLK: - case WM_BUTTON3DBLCLK: - if(dw_window_get_data(hWnd, "_dw_disabled")) - return (MRESULT)TRUE; - break; - case WM_BUTTON1DOWN: - case WM_BUTTON2DOWN: - case WM_BUTTON3DOWN: - if(_run_event(hWnd, msg, mp1, mp2) == (MRESULT)TRUE) - return (MRESULT)TRUE; - _run_event(hWnd, WM_SETFOCUS, (MPARAM)FALSE, (MPARAM)TRUE); - break; - case WM_SETFOCUS: - _run_event(hWnd, msg, mp1, mp2); - break; - case WM_PAINT: - { - HWND entry, frame = (HWND)dw_window_get_data(hWnd, "_dw_combo_box"), parent = WinQueryWindow(frame, QW_PARENT); - HPS hpsPaint; - POINTL ptl; - unsigned long width, height, thumbheight = 0; - ULONG color; - - if((entry = (HWND)dw_window_get_data(hWnd, "_dw_comboentry")) != NULLHANDLE) - dw_window_get_pos_size(entry, 0, 0, 0, &thumbheight); - - if(!thumbheight) - thumbheight = WinQuerySysValue(HWND_DESKTOP, SV_CYVSCROLLARROW); - - /* Add 6 because it has a thick border like the entryfield */ - thumbheight += 6; - - color = (ULONG)dw_window_get_data(parent, "_dw_fore"); - dw_window_get_pos_size(hWnd, 0, 0, &width, &height); - - if(height > thumbheight) - { - hpsPaint = WinGetPS(hWnd); - if(color) - GpiSetColor(hpsPaint, _internal_color(color-1)); - else - GpiSetColor(hpsPaint, CLR_PALEGRAY); - - ptl.x = ptl.y = 0; - GpiMove(hpsPaint, &ptl); - - ptl.x = width; - ptl.y = height - thumbheight; - GpiBox(hpsPaint, DRO_FILL, &ptl, 0, 0); - - WinReleasePS(hpsPaint); - } - } - break; - } - if(oldproc) - return oldproc(hWnd, msg, mp1, mp2); - - return WinDefWindowProc(hWnd, msg, mp1, mp2); + WindowData *blah = WinQueryWindowPtr(hWnd, QWP_USER); + PFNWP oldproc = 0; + + if(blah) + oldproc = blah->oldproc; + + switch(msg) + { + case WM_MOUSEMOVE: + if(_wndproc(hWnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + break; + case WM_CHAR: + if(SHORT1FROMMP(mp2) == '\t') + { + if(CHARMSG(&msg)->fs & KC_SHIFT) + _shift_focus_back(hWnd); + else + _shift_focus(hWnd); + return FALSE; + } + else if(SHORT1FROMMP(mp2) == '\r' && blah && blah->clickdefault) + _click_default(blah->clickdefault); + break; + case WM_BUTTON1DBLCLK: + case WM_BUTTON2DBLCLK: + case WM_BUTTON3DBLCLK: + if(dw_window_get_data(hWnd, "_dw_disabled")) + return (MRESULT)TRUE; + break; + case WM_BUTTON1DOWN: + case WM_BUTTON2DOWN: + case WM_BUTTON3DOWN: + if(_run_event(hWnd, msg, mp1, mp2) == (MRESULT)TRUE) + return (MRESULT)TRUE; + _run_event(hWnd, WM_SETFOCUS, (MPARAM)FALSE, (MPARAM)TRUE); + break; + case WM_SETFOCUS: + _run_event(hWnd, msg, mp1, mp2); + break; + case WM_PAINT: + { + HWND entry, frame = (HWND)dw_window_get_data(hWnd, "_dw_combo_box"), parent = WinQueryWindow(frame, QW_PARENT); + HPS hpsPaint; + POINTL ptl; + unsigned long width, height, thumbheight = 0; + ULONG color; + + if((entry = (HWND)dw_window_get_data(hWnd, "_dw_comboentry")) != NULLHANDLE) + dw_window_get_pos_size(entry, 0, 0, 0, &thumbheight); + + if(!thumbheight) + thumbheight = WinQuerySysValue(HWND_DESKTOP, SV_CYVSCROLLARROW); + + /* Add 6 because it has a thick border like the entryfield */ + thumbheight += 6; + + color = (ULONG)dw_window_get_data(parent, "_dw_fore"); + dw_window_get_pos_size(hWnd, 0, 0, &width, &height); + + if(height > thumbheight) + { + hpsPaint = WinGetPS(hWnd); + if(color) + GpiSetColor(hpsPaint, _internal_color(color-1)); + else + GpiSetColor(hpsPaint, CLR_PALEGRAY); + + ptl.x = ptl.y = 0; + GpiMove(hpsPaint, &ptl); + + ptl.x = width; + ptl.y = height - thumbheight; + GpiBox(hpsPaint, DRO_FILL, &ptl, 0, 0); + + WinReleasePS(hpsPaint); + } + } + break; + } + if(oldproc) + return oldproc(hWnd, msg, mp1, mp2); + + return WinDefWindowProc(hWnd, msg, mp1, mp2); } void _GetPPFont(HWND hwnd, char *buff) @@ -1990,1044 +1990,1044 @@ int _HandleScroller(HWND handle, int pos, int which) { - MPARAM res; - int min, max, page; - - if(which == SB_SLIDERTRACK) - return pos; - - pos = dw_scrollbar_get_pos(handle); - res = WinSendMsg(handle, SBM_QUERYRANGE, 0, 0); - - min = SHORT1FROMMP(res); - max = SHORT2FROMMP(res); - page = (int)dw_window_get_data(handle, "_dw_scrollbar_visible"); - - switch(which) - { - case SB_LINEUP: - pos = pos - 1; - if(pos < min) - pos = min; - dw_scrollbar_set_pos(handle, pos); - return pos; - case SB_LINEDOWN: - pos = pos + 1; - if(pos > max) - pos = max; - dw_scrollbar_set_pos(handle, pos); - return pos; - case SB_PAGEUP: - pos = pos - page; - if(pos < min) - pos = min; - dw_scrollbar_set_pos(handle, pos); - return pos; - case SB_PAGEDOWN: - pos = pos + page; - if(pos > max) - pos = max; - dw_scrollbar_set_pos(handle, pos); - return pos; - } - return -1; + MPARAM res; + int min, max, page; + + if(which == SB_SLIDERTRACK) + return pos; + + pos = dw_scrollbar_get_pos(handle); + res = WinSendMsg(handle, SBM_QUERYRANGE, 0, 0); + + min = SHORT1FROMMP(res); + max = SHORT2FROMMP(res); + page = (int)dw_window_get_data(handle, "_dw_scrollbar_visible"); + + switch(which) + { + case SB_LINEUP: + pos = pos - 1; + if(pos < min) + pos = min; + dw_scrollbar_set_pos(handle, pos); + return pos; + case SB_LINEDOWN: + pos = pos + 1; + if(pos > max) + pos = max; + dw_scrollbar_set_pos(handle, pos); + return pos; + case SB_PAGEUP: + pos = pos - page; + if(pos < min) + pos = min; + dw_scrollbar_set_pos(handle, pos); + return pos; + case SB_PAGEDOWN: + pos = pos + page; + if(pos > max) + pos = max; + dw_scrollbar_set_pos(handle, pos); + return pos; + } + return -1; } void _clear_emphasis(void) { - if(hwndEmph && WinIsWindow(dwhab, hwndEmph) && pCoreEmph) - WinSendMsg(hwndEmph, CM_SETRECORDEMPHASIS, pCoreEmph, MPFROM2SHORT(FALSE, CRA_SOURCE)); - hwndEmph = NULLHANDLE; - pCoreEmph = NULL; + if(hwndEmph && WinIsWindow(dwhab, hwndEmph) && pCoreEmph) + WinSendMsg(hwndEmph, CM_SETRECORDEMPHASIS, pCoreEmph, MPFROM2SHORT(FALSE, CRA_SOURCE)); + hwndEmph = NULLHANDLE; + pCoreEmph = NULL; } /* Find the desktop window handle */ HWND _menu_owner(HWND handle) { - HWND menuowner = NULLHANDLE, lastowner = (HWND)dw_window_get_data(handle, "_dw_owner"); - int menubar = (int)dw_window_get_data(handle, "_dw_menubar"); - - /* Find the toplevel window */ - while(!menubar && (menuowner = (HWND)dw_window_get_data(lastowner, "_dw_owner")) != NULLHANDLE) - { - menubar = (int)dw_window_get_data(lastowner, "_dw_menubar"); - lastowner = menuowner; - } - if(menuowner && menubar) - { - HWND client = WinWindowFromID(menuowner, FID_CLIENT); - - return client ? client : menuowner; - } - return NULLHANDLE; + HWND menuowner = NULLHANDLE, lastowner = (HWND)dw_window_get_data(handle, "_dw_owner"); + int menubar = (int)dw_window_get_data(handle, "_dw_menubar"); + + /* Find the toplevel window */ + while(!menubar && (menuowner = (HWND)dw_window_get_data(lastowner, "_dw_owner")) != NULLHANDLE) + { + menubar = (int)dw_window_get_data(lastowner, "_dw_menubar"); + lastowner = menuowner; + } + if(menuowner && menubar) + { + HWND client = WinWindowFromID(menuowner, FID_CLIENT); + + return client ? client : menuowner; + } + return NULLHANDLE; } MRESULT EXPENTRY _run_event(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - int result = -1; - SignalHandler *tmp = Root; - ULONG origmsg = msg; - - if(msg == WM_BUTTON2DOWN || msg == WM_BUTTON3DOWN) - msg = WM_BUTTON1DOWN; - if(msg == WM_BUTTON2UP || msg == WM_BUTTON3UP) - msg = WM_BUTTON1UP; - if(msg == WM_VSCROLL || msg == WM_HSCROLL) - msg = WM_CONTROL; - - /* Find any callbacks for this function */ - while(tmp) - { - if(tmp->message == msg || msg == WM_CONTROL || tmp->message == WM_USER+1) - { - switch(msg) - { - case WM_SETFOCUS: - { - if((mp2 && tmp->message == WM_SETFOCUS) || (!mp2 && tmp->message == WM_USER+1)) - { - int (* API setfocusfunc)(HWND, void *) = (int (* API)(HWND, void *))tmp->signalfunction; - - if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd) - { - result = setfocusfunc(tmp->window, tmp->data); - tmp = NULL; - } - } - } - break; - case WM_TIMER: - { - int (* API timerfunc)(void *) = (int (* API)(void *))tmp->signalfunction; - if(tmp->id == (int)mp1) - { - if(!timerfunc(tmp->data)) - dw_timer_disconnect(tmp->id); - tmp = NULL; - } - result = 0; - } - break; - case WM_SIZE: - { - int (* API sizefunc)(HWND, int, int, void *) = (int (* API)(HWND, int, int, void *))tmp->signalfunction; - - if((hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd) && SHORT1FROMMP(mp2) && SHORT2FROMMP(mp2)) - { - result = sizefunc(tmp->window, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2), tmp->data); - tmp = NULL; - } - } - break; - case WM_BUTTON1DOWN: - { - POINTS pts = (*((POINTS*)&mp1)); - int (* API buttonfunc)(HWND, int, int, int, void *) = (int (* API)(HWND, int, int, int, void *))tmp->signalfunction; - - if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window) - { - int button = 0; - - switch(origmsg) - { - case WM_BUTTON1DOWN: - button = 1; - break; - case WM_BUTTON2DOWN: - button = 2; - break; - case WM_BUTTON3DOWN: - button = 3; - break; - } - - result = buttonfunc(tmp->window, pts.x, _get_frame_height(tmp->window) - pts.y, button, tmp->data); - tmp = NULL; - } - } - break; - case WM_BUTTON1UP: - { - POINTS pts = (*((POINTS*)&mp1)); - int (* API buttonfunc)(HWND, int, int, int, void *) = (int (* API)(HWND, int, int, int, void *))tmp->signalfunction; - - if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window) - { - int button = 0; - - switch(origmsg) - { - case WM_BUTTON1UP: - button = 1; - break; - case WM_BUTTON2UP: - button = 2; - break; - case WM_BUTTON3UP: - button = 3; - break; - } - - result = buttonfunc(tmp->window, pts.x, WinQueryWindow(tmp->window, QW_PARENT) == HWND_DESKTOP ? dw_screen_height() - pts.y : _get_height(tmp->window) - pts.y, button, tmp->data); - tmp = NULL; - } - } - break; - case WM_MOUSEMOVE: - { - int (* API motionfunc)(HWND, int, int, int, void *) = (int (* API)(HWND, int, int, int, void *))tmp->signalfunction; - - if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window) - { - int keys = 0; - SHORT x = SHORT1FROMMP(mp1), y = SHORT2FROMMP(mp1); - - if (WinGetKeyState(HWND_DESKTOP, VK_BUTTON1) & 0x8000) - keys = DW_BUTTON1_MASK; - if (WinGetKeyState(HWND_DESKTOP, VK_BUTTON2) & 0x8000) - keys |= DW_BUTTON2_MASK; - if (WinGetKeyState(HWND_DESKTOP, VK_BUTTON3) & 0x8000) - keys |= DW_BUTTON3_MASK; - - result = motionfunc(tmp->window, x, _get_frame_height(tmp->window) - y, keys, tmp->data); - tmp = NULL; - } - } - break; - case WM_CHAR: - { - int (* API keypressfunc)(HWND, char, int, int, void *) = (int (* API)(HWND, char, int, int, void *))tmp->signalfunction; - - if((hWnd == tmp->window || _toplevel_window(hWnd) == tmp->window) && !(SHORT1FROMMP(mp1) & KC_KEYUP)) - { - int vk; - char ch = 0; - - if(SHORT1FROMMP(mp1) & KC_CHAR) - ch = (char)SHORT1FROMMP(mp2); - if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) - vk = SHORT2FROMMP(mp2); - else - vk = SHORT1FROMMP(mp2) + 128; - - /* This is a hack to fix shift presses showing - * up as tabs! - */ - if(ch == '\t' && !(SHORT1FROMMP(mp1) & KC_CHAR)) - { - ch = 0; - vk = VK_SHIFT; - } - - result = keypressfunc(tmp->window, ch, vk, - SHORT1FROMMP(mp1) & (KC_ALT | KC_SHIFT | KC_CTRL), tmp->data); - tmp = NULL; - } - } - break; - case WM_CLOSE: - { - int (* API closefunc)(HWND, void *) = (int (* API)(HWND, void *))tmp->signalfunction; - - if(hWnd == tmp->window || hWnd == WinWindowFromID(tmp->window, FID_CLIENT)) - { - result = closefunc(tmp->window, tmp->data); - if(result) - result = FALSE; - tmp = NULL; - } - } - break; - case WM_PAINT: - { - HPS hps; - DWExpose exp; - int (* API exposefunc)(HWND, DWExpose *, void *) = (int (* API)(HWND, DWExpose *, void *))tmp->signalfunction; - RECTL rc; - - if(hWnd == tmp->window) - { - int height = _get_height(hWnd); - - hps = WinBeginPaint(hWnd, 0L, &rc); - exp.x = rc.xLeft; - exp.y = height - rc.yTop - 1; - exp.width = rc.xRight - rc. xLeft; - exp.height = rc.yTop - rc.yBottom; - result = exposefunc(hWnd, &exp, tmp->data); - WinEndPaint(hps); - } - } - break; - case WM_COMMAND: - { - int (* API clickfunc)(HWND, void *) = (int (* API)(HWND, void *))tmp->signalfunction; - ULONG command = COMMANDMSG(&msg)->cmd; - - if(tmp->id && command == tmp->id) - { - HWND menuowner = _menu_owner(tmp->window); - - if(menuowner == hWnd || menuowner == NULLHANDLE) - { - result = clickfunc(tmp->window, tmp->data); - tmp = NULL; - } - } - else if(tmp->window < 65536 && command == tmp->window) - { - result = clickfunc(popup ? popup : tmp->window, tmp->data); - tmp = NULL; - } - } - break; - case WM_CONTROL: - if(origmsg == WM_VSCROLL || origmsg == WM_HSCROLL || tmp->message == SHORT2FROMMP(mp1) || - (tmp->message == SLN_SLIDERTRACK && SHORT2FROMMP(mp1) == SLN_CHANGE)) - { - int svar = SLN_SLIDERTRACK; - if(origmsg == WM_CONTROL) - svar = SHORT2FROMMP(mp1); - - switch(svar) - { - case CN_ENTER: - { - int (* API containerselectfunc)(HWND, char *, void *) = (int (* API)(HWND, char *, void *))tmp->signalfunction; - int id = SHORT1FROMMP(mp1); - HWND conthwnd = dw_window_from_id(hWnd, id); - char *text = NULL; - - if(mp2) - { - PRECORDCORE pre; - - pre = ((PNOTIFYRECORDENTER)mp2)->pRecord; - if(pre) - text = pre->pszIcon; - } - - if(tmp->window == conthwnd) - { - result = containerselectfunc(tmp->window, text, tmp->data); - tmp = NULL; - } - } - break; - case CN_EXPANDTREE: - { - int (* API treeexpandfunc)(HWND, HTREEITEM, void *) = (int (* API)(HWND, HTREEITEM, void *))tmp->signalfunction; - int id = SHORT1FROMMP(mp1); - HWND conthwnd = dw_window_from_id(hWnd, id); - - if(tmp->window == conthwnd) - { - result = treeexpandfunc(tmp->window, (HTREEITEM)mp2, tmp->data); - tmp = NULL; - } - } - break; - case CN_CONTEXTMENU: - { - int (* API containercontextfunc)(HWND, char *, int, int, void *, void *) = (int (* API)(HWND, char *, int, int, void *, void *))tmp->signalfunction; - int id = SHORT1FROMMP(mp1); - HWND conthwnd = dw_window_from_id(hWnd, id); - char *text = NULL; - void *user = NULL; - LONG x,y; - - if(mp2) - { - PCNRITEM pci; - - pci = (PCNRITEM)mp2; - - text = pci->rc.pszIcon; - user = pci->user; - } - - dw_pointer_query_pos(&x, &y); - - if(tmp->window == conthwnd) - { - int container = (int)dw_window_get_data(tmp->window, "_dw_container"); - - if(mp2) - { - if(!container) - { - NOTIFYRECORDEMPHASIS pre; - - dw_tree_item_select(tmp->window, (HTREEITEM)mp2); - pre.pRecord = mp2; - pre.fEmphasisMask = CRA_CURSORED; - pre.hwndCnr = tmp->window; - _run_event(hWnd, WM_CONTROL, MPFROM2SHORT(0, CN_EMPHASIS), (MPARAM)&pre); - pre.pRecord->flRecordAttr |= CRA_CURSORED; - } - else - { - if(pCoreEmph) - _clear_emphasis(); - hwndEmph = tmp->window; - pCoreEmph = mp2; - WinSendMsg(tmp->window, CM_SETRECORDEMPHASIS, mp2, MPFROM2SHORT(TRUE, CRA_SOURCE)); - } - } - result = containercontextfunc(tmp->window, text, x, y, tmp->data, user); - tmp = NULL; - } - } - break; - case CN_EMPHASIS: - { - PNOTIFYRECORDEMPHASIS pre = (PNOTIFYRECORDEMPHASIS)mp2; - static int emph_recurse = 0; - - if(!emph_recurse) - { - emph_recurse = 1; - - if(mp2) - { - if(tmp->window == pre->hwndCnr) - { - PCNRITEM pci = (PCNRITEM)pre->pRecord; - - if(pci && pre->fEmphasisMask & CRA_CURSORED && (pci->rc.flRecordAttr & CRA_CURSORED)) - { - int (* API treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = (int (* API)(HWND, HTREEITEM, char *, void *, void *))tmp->signalfunction; - - if(dw_window_get_data(tmp->window, "_dw_container")) - result = treeselectfunc(tmp->window, 0, pci->rc.pszIcon, tmp->data, 0); - else - { - if(lasthcnr == tmp->window && lastitem == (HWND)pci) - { - lasthcnr = 0; - lastitem = 0; - } - else - { - lasthcnr = tmp->window; - lastitem = (HWND)pci; - result = treeselectfunc(tmp->window, (HTREEITEM)pci, pci->rc.pszIcon, tmp->data, pci->user); - } - } - tmp = NULL; - } - } - } - emph_recurse = 0; - } - } - break; - case LN_SELECT: - { - char classbuf[100]; - - WinQueryClassName(tmp->window, 99, classbuf); - - if(strncmp(classbuf, "#38", 4) == 0) - { - int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; - - if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd) - { - static int lastvalue = -1; - static HWND lasthwnd = NULLHANDLE; - int ulValue = (int)WinSendMsg(tmp->window, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0); - if(lastvalue != ulValue || lasthwnd != tmp->window) - { - result = valuechangedfunc(tmp->window, ulValue, tmp->data); - lastvalue = ulValue; - lasthwnd = tmp->window; - } - tmp = NULL; - } - } - else - { - int (* API listboxselectfunc)(HWND, int, void *) = (int (* API )(HWND, int, void *))tmp->signalfunction; - int id = SHORT1FROMMP(mp1); - HWND conthwnd = dw_window_from_id(hWnd, id); - static int _recursing = 0; - - if(_recursing == 0 && (tmp->window == conthwnd || (!id && tmp->window == (HWND)mp2))) - { - char buf1[500]; - unsigned int index = dw_listbox_selected(tmp->window); - - dw_listbox_get_text(tmp->window, index, buf1, 500); - - _recursing = 1; - - if(id && strncmp(classbuf, "#2", 3)==0) - { - char *buf2; - - buf2 = dw_window_get_text(tmp->window); - - /* This is to make sure the listboxselect function doesn't - * get called if the user is modifying the entry text. - */ - if(buf2 && *buf2 && *buf1 && strncmp(buf1, buf2, 500) == 0) - result = listboxselectfunc(tmp->window, index, tmp->data); - - if(buf2) - free(buf2); - } - else - result = listboxselectfunc(tmp->window, index, tmp->data); - - _recursing = 0; - tmp = NULL; - } - } - } - break; - case SLN_SLIDERTRACK: - { - int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; - - if(origmsg == WM_CONTROL) - { - /* Handle Slider control */ - if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd) - { - static int lastvalue = -1; - static HWND lasthwnd = NULLHANDLE; - int ulValue = (int)WinSendMsg(tmp->window, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0); - if(lastvalue != ulValue || lasthwnd != tmp->window) - { - dw_window_set_data(tmp->window, "_dw_slider_value", (void *)ulValue); - result = valuechangedfunc(tmp->window, ulValue, tmp->data); - lastvalue = ulValue; - lasthwnd = tmp->window; - } - tmp = NULL; - } - } - else - { - /* Handle scrollbar control */ - if(tmp->window > 65535 && tmp->window == WinWindowFromID(hWnd, (ULONG)mp1)) - { - int pos = _HandleScroller(tmp->window, (int)SHORT1FROMMP(mp2), (int)SHORT2FROMMP(mp2));; - - if(pos > -1) - { - dw_window_set_data(tmp->window, "_dw_scrollbar_value", (void *)pos); - result = valuechangedfunc(tmp->window, pos, tmp->data); - } - result = 0; - tmp = NULL; - } - } - } - break; - case BKN_PAGESELECTED: - { - PAGESELECTNOTIFY *psn = (PAGESELECTNOTIFY *)mp2; - - if(psn && tmp->window == psn->hwndBook) - { - int (* API switchpagefunc)(HWND, unsigned long, void *) = (int (* API)(HWND, unsigned long, void *))tmp->signalfunction; - - result = switchpagefunc(tmp->window, psn->ulPageIdNew, tmp->data); - tmp = NULL; - } - } - break; - } - } - break; - } - } - - if(tmp) - tmp = tmp->next; - - } - return (MRESULT)result; + int result = -1; + SignalHandler *tmp = Root; + ULONG origmsg = msg; + + if(msg == WM_BUTTON2DOWN || msg == WM_BUTTON3DOWN) + msg = WM_BUTTON1DOWN; + if(msg == WM_BUTTON2UP || msg == WM_BUTTON3UP) + msg = WM_BUTTON1UP; + if(msg == WM_VSCROLL || msg == WM_HSCROLL) + msg = WM_CONTROL; + + /* Find any callbacks for this function */ + while(tmp) + { + if(tmp->message == msg || msg == WM_CONTROL || tmp->message == WM_USER+1) + { + switch(msg) + { + case WM_SETFOCUS: + { + if((mp2 && tmp->message == WM_SETFOCUS) || (!mp2 && tmp->message == WM_USER+1)) + { + int (* API setfocusfunc)(HWND, void *) = (int (* API)(HWND, void *))tmp->signalfunction; + + if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd) + { + result = setfocusfunc(tmp->window, tmp->data); + tmp = NULL; + } + } + } + break; + case WM_TIMER: + { + int (* API timerfunc)(void *) = (int (* API)(void *))tmp->signalfunction; + if(tmp->id == (int)mp1) + { + if(!timerfunc(tmp->data)) + dw_timer_disconnect(tmp->id); + tmp = NULL; + } + result = 0; + } + break; + case WM_SIZE: + { + int (* API sizefunc)(HWND, int, int, void *) = (int (* API)(HWND, int, int, void *))tmp->signalfunction; + + if((hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd) && SHORT1FROMMP(mp2) && SHORT2FROMMP(mp2)) + { + result = sizefunc(tmp->window, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2), tmp->data); + tmp = NULL; + } + } + break; + case WM_BUTTON1DOWN: + { + POINTS pts = (*((POINTS*)&mp1)); + int (* API buttonfunc)(HWND, int, int, int, void *) = (int (* API)(HWND, int, int, int, void *))tmp->signalfunction; + + if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window) + { + int button = 0; + + switch(origmsg) + { + case WM_BUTTON1DOWN: + button = 1; + break; + case WM_BUTTON2DOWN: + button = 2; + break; + case WM_BUTTON3DOWN: + button = 3; + break; + } + + result = buttonfunc(tmp->window, pts.x, _get_frame_height(tmp->window) - pts.y, button, tmp->data); + tmp = NULL; + } + } + break; + case WM_BUTTON1UP: + { + POINTS pts = (*((POINTS*)&mp1)); + int (* API buttonfunc)(HWND, int, int, int, void *) = (int (* API)(HWND, int, int, int, void *))tmp->signalfunction; + + if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window) + { + int button = 0; + + switch(origmsg) + { + case WM_BUTTON1UP: + button = 1; + break; + case WM_BUTTON2UP: + button = 2; + break; + case WM_BUTTON3UP: + button = 3; + break; + } + + result = buttonfunc(tmp->window, pts.x, WinQueryWindow(tmp->window, QW_PARENT) == HWND_DESKTOP ? dw_screen_height() - pts.y : _get_height(tmp->window) - pts.y, button, tmp->data); + tmp = NULL; + } + } + break; + case WM_MOUSEMOVE: + { + int (* API motionfunc)(HWND, int, int, int, void *) = (int (* API)(HWND, int, int, int, void *))tmp->signalfunction; + + if(hWnd == tmp->window || WinWindowFromID(tmp->window, FID_CLIENT) == hWnd || WinQueryCapture(HWND_DESKTOP) == tmp->window) + { + int keys = 0; + SHORT x = SHORT1FROMMP(mp1), y = SHORT2FROMMP(mp1); + + if (WinGetKeyState(HWND_DESKTOP, VK_BUTTON1) & 0x8000) + keys = DW_BUTTON1_MASK; + if (WinGetKeyState(HWND_DESKTOP, VK_BUTTON2) & 0x8000) + keys |= DW_BUTTON2_MASK; + if (WinGetKeyState(HWND_DESKTOP, VK_BUTTON3) & 0x8000) + keys |= DW_BUTTON3_MASK; + + result = motionfunc(tmp->window, x, _get_frame_height(tmp->window) - y, keys, tmp->data); + tmp = NULL; + } + } + break; + case WM_CHAR: + { + int (* API keypressfunc)(HWND, char, int, int, void *) = (int (* API)(HWND, char, int, int, void *))tmp->signalfunction; + + if((hWnd == tmp->window || _toplevel_window(hWnd) == tmp->window) && !(SHORT1FROMMP(mp1) & KC_KEYUP)) + { + int vk; + char ch = 0; + + if(SHORT1FROMMP(mp1) & KC_CHAR) + ch = (char)SHORT1FROMMP(mp2); + if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) + vk = SHORT2FROMMP(mp2); + else + vk = SHORT1FROMMP(mp2) + 128; + + /* This is a hack to fix shift presses showing + * up as tabs! + */ + if(ch == '\t' && !(SHORT1FROMMP(mp1) & KC_CHAR)) + { + ch = 0; + vk = VK_SHIFT; + } + + result = keypressfunc(tmp->window, ch, vk, + SHORT1FROMMP(mp1) & (KC_ALT | KC_SHIFT | KC_CTRL), tmp->data); + tmp = NULL; + } + } + break; + case WM_CLOSE: + { + int (* API closefunc)(HWND, void *) = (int (* API)(HWND, void *))tmp->signalfunction; + + if(hWnd == tmp->window || hWnd == WinWindowFromID(tmp->window, FID_CLIENT)) + { + result = closefunc(tmp->window, tmp->data); + if(result) + result = FALSE; + tmp = NULL; + } + } + break; + case WM_PAINT: + { + HPS hps; + DWExpose exp; + int (* API exposefunc)(HWND, DWExpose *, void *) = (int (* API)(HWND, DWExpose *, void *))tmp->signalfunction; + RECTL rc; + + if(hWnd == tmp->window) + { + int height = _get_height(hWnd); + + hps = WinBeginPaint(hWnd, 0L, &rc); + exp.x = rc.xLeft; + exp.y = height - rc.yTop - 1; + exp.width = rc.xRight - rc. xLeft; + exp.height = rc.yTop - rc.yBottom; + result = exposefunc(hWnd, &exp, tmp->data); + WinEndPaint(hps); + } + } + break; + case WM_COMMAND: + { + int (* API clickfunc)(HWND, void *) = (int (* API)(HWND, void *))tmp->signalfunction; + ULONG command = COMMANDMSG(&msg)->cmd; + + if(tmp->id && command == tmp->id) + { + HWND menuowner = _menu_owner(tmp->window); + + if(menuowner == hWnd || menuowner == NULLHANDLE) + { + result = clickfunc(tmp->window, tmp->data); + tmp = NULL; + } + } + else if(tmp->window < 65536 && command == tmp->window) + { + result = clickfunc(popup ? popup : tmp->window, tmp->data); + tmp = NULL; + } + } + break; + case WM_CONTROL: + if(origmsg == WM_VSCROLL || origmsg == WM_HSCROLL || tmp->message == SHORT2FROMMP(mp1) || + (tmp->message == SLN_SLIDERTRACK && SHORT2FROMMP(mp1) == SLN_CHANGE)) + { + int svar = SLN_SLIDERTRACK; + if(origmsg == WM_CONTROL) + svar = SHORT2FROMMP(mp1); + + switch(svar) + { + case CN_ENTER: + { + int (* API containerselectfunc)(HWND, char *, void *) = (int (* API)(HWND, char *, void *))tmp->signalfunction; + int id = SHORT1FROMMP(mp1); + HWND conthwnd = dw_window_from_id(hWnd, id); + char *text = NULL; + + if(mp2) + { + PRECORDCORE pre; + + pre = ((PNOTIFYRECORDENTER)mp2)->pRecord; + if(pre) + text = pre->pszIcon; + } + + if(tmp->window == conthwnd) + { + result = containerselectfunc(tmp->window, text, tmp->data); + tmp = NULL; + } + } + break; + case CN_EXPANDTREE: + { + int (* API treeexpandfunc)(HWND, HTREEITEM, void *) = (int (* API)(HWND, HTREEITEM, void *))tmp->signalfunction; + int id = SHORT1FROMMP(mp1); + HWND conthwnd = dw_window_from_id(hWnd, id); + + if(tmp->window == conthwnd) + { + result = treeexpandfunc(tmp->window, (HTREEITEM)mp2, tmp->data); + tmp = NULL; + } + } + break; + case CN_CONTEXTMENU: + { + int (* API containercontextfunc)(HWND, char *, int, int, void *, void *) = (int (* API)(HWND, char *, int, int, void *, void *))tmp->signalfunction; + int id = SHORT1FROMMP(mp1); + HWND conthwnd = dw_window_from_id(hWnd, id); + char *text = NULL; + void *user = NULL; + LONG x,y; + + if(mp2) + { + PCNRITEM pci; + + pci = (PCNRITEM)mp2; + + text = pci->rc.pszIcon; + user = pci->user; + } + + dw_pointer_query_pos(&x, &y); + + if(tmp->window == conthwnd) + { + int container = (int)dw_window_get_data(tmp->window, "_dw_container"); + + if(mp2) + { + if(!container) + { + NOTIFYRECORDEMPHASIS pre; + + dw_tree_item_select(tmp->window, (HTREEITEM)mp2); + pre.pRecord = mp2; + pre.fEmphasisMask = CRA_CURSORED; + pre.hwndCnr = tmp->window; + _run_event(hWnd, WM_CONTROL, MPFROM2SHORT(0, CN_EMPHASIS), (MPARAM)&pre); + pre.pRecord->flRecordAttr |= CRA_CURSORED; + } + else + { + if(pCoreEmph) + _clear_emphasis(); + hwndEmph = tmp->window; + pCoreEmph = mp2; + WinSendMsg(tmp->window, CM_SETRECORDEMPHASIS, mp2, MPFROM2SHORT(TRUE, CRA_SOURCE)); + } + } + result = containercontextfunc(tmp->window, text, x, y, tmp->data, user); + tmp = NULL; + } + } + break; + case CN_EMPHASIS: + { + PNOTIFYRECORDEMPHASIS pre = (PNOTIFYRECORDEMPHASIS)mp2; + static int emph_recurse = 0; + + if(!emph_recurse) + { + emph_recurse = 1; + + if(mp2) + { + if(tmp->window == pre->hwndCnr) + { + PCNRITEM pci = (PCNRITEM)pre->pRecord; + + if(pci && pre->fEmphasisMask & CRA_CURSORED && (pci->rc.flRecordAttr & CRA_CURSORED)) + { + int (* API treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = (int (* API)(HWND, HTREEITEM, char *, void *, void *))tmp->signalfunction; + + if(dw_window_get_data(tmp->window, "_dw_container")) + result = treeselectfunc(tmp->window, 0, pci->rc.pszIcon, tmp->data, 0); + else + { + if(lasthcnr == tmp->window && lastitem == (HWND)pci) + { + lasthcnr = 0; + lastitem = 0; + } + else + { + lasthcnr = tmp->window; + lastitem = (HWND)pci; + result = treeselectfunc(tmp->window, (HTREEITEM)pci, pci->rc.pszIcon, tmp->data, pci->user); + } + } + tmp = NULL; + } + } + } + emph_recurse = 0; + } + } + break; + case LN_SELECT: + { + char classbuf[100]; + + WinQueryClassName(tmp->window, 99, classbuf); + + if(strncmp(classbuf, "#38", 4) == 0) + { + int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; + + if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd) + { + static int lastvalue = -1; + static HWND lasthwnd = NULLHANDLE; + int ulValue = (int)WinSendMsg(tmp->window, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0); + if(lastvalue != ulValue || lasthwnd != tmp->window) + { + result = valuechangedfunc(tmp->window, ulValue, tmp->data); + lastvalue = ulValue; + lasthwnd = tmp->window; + } + tmp = NULL; + } + } + else + { + int (* API listboxselectfunc)(HWND, int, void *) = (int (* API )(HWND, int, void *))tmp->signalfunction; + int id = SHORT1FROMMP(mp1); + HWND conthwnd = dw_window_from_id(hWnd, id); + static int _recursing = 0; + + if(_recursing == 0 && (tmp->window == conthwnd || (!id && tmp->window == (HWND)mp2))) + { + char buf1[500]; + unsigned int index = dw_listbox_selected(tmp->window); + + dw_listbox_get_text(tmp->window, index, buf1, 500); + + _recursing = 1; + + if(id && strncmp(classbuf, "#2", 3)==0) + { + char *buf2; + + buf2 = dw_window_get_text(tmp->window); + + /* This is to make sure the listboxselect function doesn't + * get called if the user is modifying the entry text. + */ + if(buf2 && *buf2 && *buf1 && strncmp(buf1, buf2, 500) == 0) + result = listboxselectfunc(tmp->window, index, tmp->data); + + if(buf2) + free(buf2); + } + else + result = listboxselectfunc(tmp->window, index, tmp->data); + + _recursing = 0; + tmp = NULL; + } + } + } + break; + case SLN_SLIDERTRACK: + { + int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; + + if(origmsg == WM_CONTROL) + { + /* Handle Slider control */ + if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd) + { + static int lastvalue = -1; + static HWND lasthwnd = NULLHANDLE; + int ulValue = (int)WinSendMsg(tmp->window, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0); + if(lastvalue != ulValue || lasthwnd != tmp->window) + { + dw_window_set_data(tmp->window, "_dw_slider_value", (void *)ulValue); + result = valuechangedfunc(tmp->window, ulValue, tmp->data); + lastvalue = ulValue; + lasthwnd = tmp->window; + } + tmp = NULL; + } + } + else + { + /* Handle scrollbar control */ + if(tmp->window > 65535 && tmp->window == WinWindowFromID(hWnd, (ULONG)mp1)) + { + int pos = _HandleScroller(tmp->window, (int)SHORT1FROMMP(mp2), (int)SHORT2FROMMP(mp2));; + + if(pos > -1) + { + dw_window_set_data(tmp->window, "_dw_scrollbar_value", (void *)pos); + result = valuechangedfunc(tmp->window, pos, tmp->data); + } + result = 0; + tmp = NULL; + } + } + } + break; + case BKN_PAGESELECTED: + { + PAGESELECTNOTIFY *psn = (PAGESELECTNOTIFY *)mp2; + + if(psn && tmp->window == psn->hwndBook) + { + int (* API switchpagefunc)(HWND, unsigned long, void *) = (int (* API)(HWND, unsigned long, void *))tmp->signalfunction; + + result = switchpagefunc(tmp->window, psn->ulPageIdNew, tmp->data); + tmp = NULL; + } + } + break; + } + } + break; + } + } + + if(tmp) + tmp = tmp->next; + + } + return (MRESULT)result; } /* Gets a DW_RGB value from the three spinbuttons */ unsigned long _dw_color_spin_get(HWND window) { - HWND button = (HWND)dw_window_get_data(window, "_dw_red_spin"); - long red, green, blue; - - red = dw_spinbutton_get_pos(button); - button = (HWND)dw_window_get_data(window, "_dw_green_spin"); - green = dw_spinbutton_get_pos(button); - button = (HWND)dw_window_get_data(window, "_dw_blue_spin"); - blue = dw_spinbutton_get_pos(button); - - return DW_RGB(red, green, blue); + HWND button = (HWND)dw_window_get_data(window, "_dw_red_spin"); + long red, green, blue; + + red = dw_spinbutton_get_pos(button); + button = (HWND)dw_window_get_data(window, "_dw_green_spin"); + green = dw_spinbutton_get_pos(button); + button = (HWND)dw_window_get_data(window, "_dw_blue_spin"); + blue = dw_spinbutton_get_pos(button); + + return DW_RGB(red, green, blue); } /* Set the three spinbuttons from a DW_RGB value */ void _dw_color_spin_set(HWND window, unsigned long value) { - HWND button = (HWND)dw_window_get_data(window, "_dw_red_spin"); - dw_window_set_data(window, "_dw_updating", (void *)1); - dw_spinbutton_set_pos(button, DW_RED_VALUE(value)); - button = (HWND)dw_window_get_data(window, "_dw_green_spin"); - dw_spinbutton_set_pos(button, DW_GREEN_VALUE(value)); - button = (HWND)dw_window_get_data(window, "_dw_blue_spin"); - dw_spinbutton_set_pos(button, DW_BLUE_VALUE(value)); - dw_window_set_data(window, "_dw_updating", NULL); + HWND button = (HWND)dw_window_get_data(window, "_dw_red_spin"); + dw_window_set_data(window, "_dw_updating", (void *)1); + dw_spinbutton_set_pos(button, DW_RED_VALUE(value)); + button = (HWND)dw_window_get_data(window, "_dw_green_spin"); + dw_spinbutton_set_pos(button, DW_GREEN_VALUE(value)); + button = (HWND)dw_window_get_data(window, "_dw_blue_spin"); + dw_spinbutton_set_pos(button, DW_BLUE_VALUE(value)); + dw_window_set_data(window, "_dw_updating", NULL); } /* Sets the color selection control to be a DW_RGB value */ void _dw_col_set(HWND col, unsigned long value) { - WinSendMsg(col, 0x0602, MPFROMLONG(_os2_color(value)), 0); - if(!IS_WARP4()) - WinSendMsg(col, 0x1384, MPFROMLONG(_os2_color(value)), 0); + WinSendMsg(col, 0x0602, MPFROMLONG(_os2_color(value)), 0); + if(!IS_WARP4()) + WinSendMsg(col, 0x1384, MPFROMLONG(_os2_color(value)), 0); } /* Handles control messages sent to the box (owner). */ MRESULT EXPENTRY _controlproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - Box *blah = WinQueryWindowPtr(hWnd, QWP_USER); - - switch(msg) - { - case WM_MOUSEMOVE: - if(_wndproc(hWnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - break; - case WM_VSCROLL: - case WM_HSCROLL: - if(_run_event(hWnd, msg, mp1, mp2)) - { - HWND window = WinWindowFromID(hWnd, (ULONG)mp1); - _HandleScroller(window, (int)SHORT1FROMMP(mp2), (int)SHORT2FROMMP(mp2)); - } - break; - /* Handles Color Selection control messages */ - case 0x0601: - case 0x130C: - { - HWND window = (HWND)dw_window_get_data(hWnd, "_dw_window"); - unsigned long val = (unsigned long)mp1; - - if(window) - _dw_color_spin_set(window, DW_RGB((val & 0xFF0000) >> 16, (val & 0xFF00) >> 8, val & 0xFF)); - } - break; - case WM_CONTROL: - if((SHORT2FROMMP(mp1) == SPBN_CHANGE || SHORT2FROMMP(mp1) == SPBN_ENDSPIN)) - { - HWND window = (HWND)dw_window_get_data(hWnd, "_dw_window"); - - if(window && !dw_window_get_data(window, "_dw_updating")) - { - unsigned long val = _dw_color_spin_get(window); - HWND col = (HWND)dw_window_get_data(window, "_dw_col"); - - _dw_col_set(col, val); - } - } - _run_event(hWnd, msg, mp1, mp2); - break; - } - - if(blah && blah->oldproc) - return blah->oldproc(hWnd, msg, mp1, mp2); - - return WinDefWindowProc(hWnd, msg, mp1, mp2); + Box *blah = WinQueryWindowPtr(hWnd, QWP_USER); + + switch(msg) + { + case WM_MOUSEMOVE: + if(_wndproc(hWnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + break; + case WM_VSCROLL: + case WM_HSCROLL: + if(_run_event(hWnd, msg, mp1, mp2)) + { + HWND window = WinWindowFromID(hWnd, (ULONG)mp1); + _HandleScroller(window, (int)SHORT1FROMMP(mp2), (int)SHORT2FROMMP(mp2)); + } + break; + /* Handles Color Selection control messages */ + case 0x0601: + case 0x130C: + { + HWND window = (HWND)dw_window_get_data(hWnd, "_dw_window"); + unsigned long val = (unsigned long)mp1; + + if(window) + _dw_color_spin_set(window, DW_RGB((val & 0xFF0000) >> 16, (val & 0xFF00) >> 8, val & 0xFF)); + } + break; + case WM_CONTROL: + if((SHORT2FROMMP(mp1) == SPBN_CHANGE || SHORT2FROMMP(mp1) == SPBN_ENDSPIN)) + { + HWND window = (HWND)dw_window_get_data(hWnd, "_dw_window"); + + if(window && !dw_window_get_data(window, "_dw_updating")) + { + unsigned long val = _dw_color_spin_get(window); + HWND col = (HWND)dw_window_get_data(window, "_dw_col"); + + _dw_col_set(col, val); + } + } + _run_event(hWnd, msg, mp1, mp2); + break; + } + + if(blah && blah->oldproc) + return blah->oldproc(hWnd, msg, mp1, mp2); + + return WinDefWindowProc(hWnd, msg, mp1, mp2); } /* The main window procedure for Dynamic Windows, all the resizing code is done here. */ MRESULT EXPENTRY _wndproc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - int result = -1; - static int command_active = 0; - void (* API windowfunc)(PVOID) = 0L; - - if(!command_active) - { + int result = -1; + static int command_active = 0; + void (* API windowfunc)(PVOID) = 0L; + + if(!command_active) + { /* Make sure we don't end up in infinite recursion */ - command_active = 1; - - result = (int)_run_event(hWnd, msg, mp1, mp2); - - command_active = 0; - } - - /* Now that any handlers are done... do normal processing */ - switch( msg ) - { + command_active = 1; + + result = (int)_run_event(hWnd, msg, mp1, mp2); + + command_active = 0; + } + + /* Now that any handlers are done... do normal processing */ + switch( msg ) + { case WM_ERASEBACKGROUND: return 0; - case WM_PAINT: - { - HPS hps; - RECTL rc; - - hps = WinBeginPaint( hWnd, 0L, &rc ); - WinEndPaint( hps ); - break; - } - - case WM_SIZE: - { - Box *mybox = (Box *)WinQueryWindowPtr(hWnd, QWP_USER); - - if(!SHORT1FROMMP(mp2) && !SHORT2FROMMP(mp2)) - return (MPARAM)TRUE; - - if(mybox && mybox->flags != DW_MINIMIZED) - { - /* Hide the window when recalculating to reduce - * CPU load. - */ - WinShowWindow(hWnd, FALSE); + case WM_PAINT: + { + HPS hps; + RECTL rc; + + hps = WinBeginPaint( hWnd, 0L, &rc ); + WinEndPaint( hps ); + break; + } + + case WM_SIZE: + { + Box *mybox = (Box *)WinQueryWindowPtr(hWnd, QWP_USER); + + if(!SHORT1FROMMP(mp2) && !SHORT2FROMMP(mp2)) + return (MPARAM)TRUE; + + if(mybox && mybox->flags != DW_MINIMIZED) + { + /* Hide the window when recalculating to reduce + * CPU load. + */ + WinShowWindow(hWnd, FALSE); if(mybox->items) - WinSetWindowPos(mybox->items[0].hwnd, HWND_TOP, 0, 0, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2), SWP_MOVE | SWP_SIZE); - - _do_resize(mybox, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2)); - - WinShowWindow(hWnd, TRUE); - } - } - break; - case WM_MINMAXFRAME: - { - Box *mybox = (Box *)WinQueryWindowPtr(hWnd, QWP_USER); - SWP *swp = (SWP *)mp1; - - if(mybox && (swp->fl & SWP_MINIMIZE)) - mybox->flags = DW_MINIMIZED; - - if(mybox && (swp->fl & SWP_RESTORE)) - { - if(!mybox->titlebar && mybox->hwndtitle) - WinSetParent(mybox->hwndtitle, HWND_OBJECT, FALSE); - mybox->flags = 0; - } - - if(mybox && (swp->fl & (SWP_MAXIMIZE | SWP_RESTORE))) - { - int z; - SWP swp2; - - WinQueryWindowPos(swp->hwnd, &swp2); - - if(swp2.cx == swp->cx && swp2.cy == swp->cy) - return FALSE; - - mybox->flags = 0; - - /* Hide the window when recalculating to reduce - * CPU load. - */ - WinShowWindow(hWnd, FALSE); - - _do_resize(mybox, swp->cx, swp->cy); - - if(mybox->count == 1 && mybox->items[0].type == TYPEBOX) - { - mybox = (Box *)WinQueryWindowPtr(mybox->items[0].hwnd, QWP_USER); - - for(z=0;z<mybox->count;z++) - _check_resize_notebook(mybox->items[z].hwnd); - - } - - WinShowWindow(hWnd, TRUE); - } - } - break; - case WM_CONTROL: - switch(SHORT2FROMMP(mp1)) - { - case BKN_PAGESELECTEDPENDING: - { - PAGESELECTNOTIFY *psn = (PAGESELECTNOTIFY *)mp2; - HWND pagehwnd = (HWND)WinSendMsg(psn->hwndBook, BKM_QUERYPAGEWINDOWHWND, MPFROMLONG(psn->ulPageIdNew), 0); - Box *pagebox = (Box *)WinQueryWindowPtr(pagehwnd, QWP_USER); - unsigned long x, y, width, height; - RECTL rc; - - if(pagebox && psn->ulPageIdNew != psn->ulPageIdCur) - { - dw_window_get_pos_size(psn->hwndBook, &x, &y, &width, &height); - - rc.xLeft = x; - rc.yBottom = y; - rc.xRight = x + width; - rc.yTop = y + height; - - WinSendMsg(psn->hwndBook, BKM_CALCPAGERECT, (MPARAM)&rc, (MPARAM)TRUE); - - _do_resize(pagebox, rc.xRight - rc.xLeft, rc.yTop - rc.yBottom); - } - } - break; - } - break; - case WM_CLOSE: - if(result == -1) - { - dw_window_destroy(WinQueryWindow(hWnd, QW_PARENT)); - return (MRESULT)TRUE; - } - break; - case WM_MOUSEMOVE: - { - HPOINTER pointer; - - if((pointer = (HPOINTER)dw_window_get_data(hWnd, "_dw_pointer")) || - (pointer = (HPOINTER)dw_window_get_data(_toplevel_window(hWnd), "_dw_pointer"))) - { - WinSetPointer(HWND_DESKTOP, pointer); - return MRFROMSHORT(TRUE); - } - } - return MRFROMSHORT(FALSE); - case WM_USER: - windowfunc = (void (* API)(void *))mp1; - - if(windowfunc) - windowfunc((void *)mp2); - break; - case WM_CHAR: - if(SHORT1FROMMP(mp2) == '\t') - { - if(CHARMSG(&msg)->fs & KC_SHIFT) - _shift_focus_back(hWnd); - else - _shift_focus(hWnd); - return FALSE; - } - break; - case WM_DESTROY: - { - HWND parent = WinQueryWindow(hWnd, QW_PARENT); - - /* Free memory before destroying */ - if(parent && WinWindowFromID(parent, FID_CLIENT) == hWnd) - _free_window_memory(parent); - else - _free_window_memory(hWnd); - } - break; - case WM_MENUEND: - /* Delay removing the signal until we've executed - * the signal handler. - */ - WinPostMsg(hWnd, WM_USER+2, mp1, mp2); - break; - case WM_USER+2: - _clear_emphasis(); - if(dw_window_get_data((HWND)mp2, "_dw_popup")) - _free_menu_data((HWND)mp2); - break; - } - - if(result != -1) - return (MRESULT)result; - else - return WinDefWindowProc(hWnd, msg, mp1, mp2); + WinSetWindowPos(mybox->items[0].hwnd, HWND_TOP, 0, 0, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2), SWP_MOVE | SWP_SIZE); + + _do_resize(mybox, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2)); + + WinShowWindow(hWnd, TRUE); + } + } + break; + case WM_MINMAXFRAME: + { + Box *mybox = (Box *)WinQueryWindowPtr(hWnd, QWP_USER); + SWP *swp = (SWP *)mp1; + + if(mybox && (swp->fl & SWP_MINIMIZE)) + mybox->flags = DW_MINIMIZED; + + if(mybox && (swp->fl & SWP_RESTORE)) + { + if(!mybox->titlebar && mybox->hwndtitle) + WinSetParent(mybox->hwndtitle, HWND_OBJECT, FALSE); + mybox->flags = 0; + } + + if(mybox && (swp->fl & (SWP_MAXIMIZE | SWP_RESTORE))) + { + int z; + SWP swp2; + + WinQueryWindowPos(swp->hwnd, &swp2); + + if(swp2.cx == swp->cx && swp2.cy == swp->cy) + return FALSE; + + mybox->flags = 0; + + /* Hide the window when recalculating to reduce + * CPU load. + */ + WinShowWindow(hWnd, FALSE); + + _do_resize(mybox, swp->cx, swp->cy); + + if(mybox->count == 1 && mybox->items[0].type == TYPEBOX) + { + mybox = (Box *)WinQueryWindowPtr(mybox->items[0].hwnd, QWP_USER); + + for(z=0;z<mybox->count;z++) + _check_resize_notebook(mybox->items[z].hwnd); + + } + + WinShowWindow(hWnd, TRUE); + } + } + break; + case WM_CONTROL: + switch(SHORT2FROMMP(mp1)) + { + case BKN_PAGESELECTEDPENDING: + { + PAGESELECTNOTIFY *psn = (PAGESELECTNOTIFY *)mp2; + HWND pagehwnd = (HWND)WinSendMsg(psn->hwndBook, BKM_QUERYPAGEWINDOWHWND, MPFROMLONG(psn->ulPageIdNew), 0); + Box *pagebox = (Box *)WinQueryWindowPtr(pagehwnd, QWP_USER); + unsigned long x, y, width, height; + RECTL rc; + + if(pagebox && psn->ulPageIdNew != psn->ulPageIdCur) + { + dw_window_get_pos_size(psn->hwndBook, &x, &y, &width, &height); + + rc.xLeft = x; + rc.yBottom = y; + rc.xRight = x + width; + rc.yTop = y + height; + + WinSendMsg(psn->hwndBook, BKM_CALCPAGERECT, (MPARAM)&rc, (MPARAM)TRUE); + + _do_resize(pagebox, rc.xRight - rc.xLeft, rc.yTop - rc.yBottom); + } + } + break; + } + break; + case WM_CLOSE: + if(result == -1) + { + dw_window_destroy(WinQueryWindow(hWnd, QW_PARENT)); + return (MRESULT)TRUE; + } + break; + case WM_MOUSEMOVE: + { + HPOINTER pointer; + + if((pointer = (HPOINTER)dw_window_get_data(hWnd, "_dw_pointer")) || + (pointer = (HPOINTER)dw_window_get_data(_toplevel_window(hWnd), "_dw_pointer"))) + { + WinSetPointer(HWND_DESKTOP, pointer); + return MRFROMSHORT(TRUE); + } + } + return MRFROMSHORT(FALSE); + case WM_USER: + windowfunc = (void (* API)(void *))mp1; + + if(windowfunc) + windowfunc((void *)mp2); + break; + case WM_CHAR: + if(SHORT1FROMMP(mp2) == '\t') + { + if(CHARMSG(&msg)->fs & KC_SHIFT) + _shift_focus_back(hWnd); + else + _shift_focus(hWnd); + return FALSE; + } + break; + case WM_DESTROY: + { + HWND parent = WinQueryWindow(hWnd, QW_PARENT); + + /* Free memory before destroying */ + if(parent && WinWindowFromID(parent, FID_CLIENT) == hWnd) + _free_window_memory(parent); + else + _free_window_memory(hWnd); + } + break; + case WM_MENUEND: + /* Delay removing the signal until we've executed + * the signal handler. + */ + WinPostMsg(hWnd, WM_USER+2, mp1, mp2); + break; + case WM_USER+2: + _clear_emphasis(); + if(dw_window_get_data((HWND)mp2, "_dw_popup")) + _free_menu_data((HWND)mp2); + break; + } + + if(result != -1) + return (MRESULT)result; + else + return WinDefWindowProc(hWnd, msg, mp1, mp2); } void _changebox(Box *thisbox, int percent, int type) { - int z; - - for(z=0;z<thisbox->count;z++) - { - if(thisbox->items[z].type == TYPEBOX) - { - Box *tmp = WinQueryWindowPtr(thisbox->items[z].hwnd, QWP_USER); - _changebox(tmp, percent, type); - } - else - { - if(type == DW_HORZ) - { - if(thisbox->items[z].hsize == SIZEEXPAND) - thisbox->items[z].width = (int)(((float)thisbox->items[z].origwidth) * (((float)percent)/((float)100.0))); - } - else - { - if(thisbox->items[z].vsize == SIZEEXPAND) - thisbox->items[z].height = (int)(((float)thisbox->items[z].origheight) * (((float)percent)/((float)100.0))); - } - } - } + int z; + + for(z=0;z<thisbox->count;z++) + { + if(thisbox->items[z].type == TYPEBOX) + { + Box *tmp = WinQueryWindowPtr(thisbox->items[z].hwnd, QWP_USER); + _changebox(tmp, percent, type); + } + else + { + if(type == DW_HORZ) + { + if(thisbox->items[z].hsize == SIZEEXPAND) + thisbox->items[z].width = (int)(((float)thisbox->items[z].origwidth) * (((float)percent)/((float)100.0))); + } + else + { + if(thisbox->items[z].vsize == SIZEEXPAND) + thisbox->items[z].height = (int)(((float)thisbox->items[z].origheight) * (((float)percent)/((float)100.0))); + } + } + } } void _handle_splitbar_resize(HWND hwnd, float percent, int type, int x, int y) { - float ratio = (float)percent/(float)100.0; - HWND handle1 = (HWND)dw_window_get_data(hwnd, "_dw_topleft"); - HWND handle2 = (HWND)dw_window_get_data(hwnd, "_dw_bottomright"); - Box *tmp = WinQueryWindowPtr(handle1, QWP_USER); - - WinShowWindow(handle1, FALSE); - WinShowWindow(handle2, FALSE); - - if(type == DW_HORZ) - { - int newx = (int)((float)x * ratio) - (SPLITBAR_WIDTH/2); - - WinSetWindowPos(handle1, NULLHANDLE, 0, 0, newx, y, SWP_MOVE | SWP_SIZE); - _do_resize(tmp, newx - 1, y - 1); - - dw_window_set_data(hwnd, "_dw_start", (void *)newx); - - tmp = WinQueryWindowPtr(handle2, QWP_USER); - - newx = x - newx - SPLITBAR_WIDTH; - - WinSetWindowPos(handle2, NULLHANDLE, x - newx, 0, newx, y, SWP_MOVE | SWP_SIZE); - _do_resize(tmp, newx - 1, y - 1); - } - else - { - int newy = (int)((float)y * ratio) - (SPLITBAR_WIDTH/2); - - WinSetWindowPos(handle1, NULLHANDLE, 0, y - newy, x, newy, SWP_MOVE | SWP_SIZE); - _do_resize(tmp, x - 1, newy - 1); - - tmp = WinQueryWindowPtr(handle2, QWP_USER); - - newy = y - newy - SPLITBAR_WIDTH; - - WinSetWindowPos(handle2, NULLHANDLE, 0, 0, x, newy, SWP_MOVE | SWP_SIZE); - _do_resize(tmp, x - 1, newy - 1); - - dw_window_set_data(hwnd, "_dw_start", (void *)newy); - } - - WinShowWindow(handle1, TRUE); - WinShowWindow(handle2, TRUE); + float ratio = (float)percent/(float)100.0; + HWND handle1 = (HWND)dw_window_get_data(hwnd, "_dw_topleft"); + HWND handle2 = (HWND)dw_window_get_data(hwnd, "_dw_bottomright"); + Box *tmp = WinQueryWindowPtr(handle1, QWP_USER); + + WinShowWindow(handle1, FALSE); + WinShowWindow(handle2, FALSE); + + if(type == DW_HORZ) + { + int newx = (int)((float)x * ratio) - (SPLITBAR_WIDTH/2); + + WinSetWindowPos(handle1, NULLHANDLE, 0, 0, newx, y, SWP_MOVE | SWP_SIZE); + _do_resize(tmp, newx - 1, y - 1); + + dw_window_set_data(hwnd, "_dw_start", (void *)newx); + + tmp = WinQueryWindowPtr(handle2, QWP_USER); + + newx = x - newx - SPLITBAR_WIDTH; + + WinSetWindowPos(handle2, NULLHANDLE, x - newx, 0, newx, y, SWP_MOVE | SWP_SIZE); + _do_resize(tmp, newx - 1, y - 1); + } + else + { + int newy = (int)((float)y * ratio) - (SPLITBAR_WIDTH/2); + + WinSetWindowPos(handle1, NULLHANDLE, 0, y - newy, x, newy, SWP_MOVE | SWP_SIZE); + _do_resize(tmp, x - 1, newy - 1); + + tmp = WinQueryWindowPtr(handle2, QWP_USER); + + newy = y - newy - SPLITBAR_WIDTH; + + WinSetWindowPos(handle2, NULLHANDLE, 0, 0, x, newy, SWP_MOVE | SWP_SIZE); + _do_resize(tmp, x - 1, newy - 1); + + dw_window_set_data(hwnd, "_dw_start", (void *)newy); + } + + WinShowWindow(handle1, TRUE); + WinShowWindow(handle2, TRUE); } /* This handles any activity on the splitbars (sizers) */ MRESULT EXPENTRY _splitwndproc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - switch (msg) - { - case WM_ACTIVATE: - case WM_SETFOCUS: - return (MRESULT)(FALSE); - - case WM_PAINT: - { - HPS hps; - POINTL ptl[2]; - RECTL rcl; - int type = (int)dw_window_get_data(hwnd, "_dw_type"); - int start = (int)dw_window_get_data(hwnd, "_dw_start"); - - hps = WinBeginPaint(hwnd, 0, 0); - - WinQueryWindowRect(hwnd, &rcl); - - if(type == DW_HORZ) - { - ptl[0].x = rcl.xLeft + start; - ptl[0].y = rcl.yBottom; - ptl[1].x = rcl.xRight + start + 3; - ptl[1].y = rcl.yTop; - } - else - { - ptl[0].x = rcl.xLeft; - ptl[0].y = rcl.yBottom + start; - ptl[1].x = rcl.xRight; - ptl[1].y = rcl.yTop + start + 3; - } - - - GpiSetColor(hps, CLR_PALEGRAY); - GpiMove(hps, &ptl[0]); - GpiBox(hps, DRO_OUTLINEFILL, &ptl[1], 0, 0); - WinEndPaint(hps); - } - return MRFROMSHORT(FALSE); - - case WM_MOUSEMOVE: - { - int type = (int)dw_window_get_data(hwnd, "_dw_type"); - - if(type == DW_HORZ) - WinSetPointer(HWND_DESKTOP, - WinQuerySysPointer(HWND_DESKTOP, - SPTR_SIZEWE, - FALSE)); - else - WinSetPointer(HWND_DESKTOP, - WinQuerySysPointer(HWND_DESKTOP, - SPTR_SIZENS, - FALSE)); - } - return MRFROMSHORT(FALSE); - case WM_BUTTON1DOWN: - { - APIRET rc; - RECTL rclFrame; - RECTL rclBounds; - float *percent = (float *)dw_window_get_data(hwnd, "_dw_percent"); - int type = (int)dw_window_get_data(hwnd, "_dw_type"); - int start = (int)dw_window_get_data(hwnd, "_dw_start"); - - WinQueryWindowRect(hwnd, &rclFrame); - WinQueryWindowRect(hwnd, &rclBounds); - - WinMapWindowPoints(hwnd, HWND_DESKTOP, - (PPOINTL)&rclBounds, 2); - - - if(type == DW_HORZ) - { - rclFrame.xLeft = start; - rclFrame.xRight = start + SPLITBAR_WIDTH; - } - else - { - rclFrame.yBottom = start; - rclFrame.yTop = start + SPLITBAR_WIDTH; - } - - if(percent) - { - rc = _TrackRectangle(hwnd, &rclFrame, &rclBounds); - - if(rc == TRUE) - { - int width = (rclBounds.xRight - rclBounds.xLeft); - int height = (rclBounds.yTop - rclBounds.yBottom); - - if(type == DW_HORZ) - { - start = rclFrame.xLeft - rclBounds.xLeft; - if(width - SPLITBAR_WIDTH > 1 && start < width - SPLITBAR_WIDTH) - *percent = ((float)start / (float)(width - SPLITBAR_WIDTH)) * 100.0; - } - else - { - start = rclFrame.yBottom - rclBounds.yBottom; - if(height - SPLITBAR_WIDTH > 1 && start < height - SPLITBAR_WIDTH) - *percent = 100.0 - (((float)start / (float)(height - SPLITBAR_WIDTH)) * 100.0); - } - _handle_splitbar_resize(hwnd, *percent, type, width, height); - _handle_splitbar_resize(hwnd, *percent, type, width, height); - } - } - } - return MRFROMSHORT(FALSE); - } - return WinDefWindowProc(hwnd, msg, mp1, mp2); + switch (msg) + { + case WM_ACTIVATE: + case WM_SETFOCUS: + return (MRESULT)(FALSE); + + case WM_PAINT: + { + HPS hps; + POINTL ptl[2]; + RECTL rcl; + int type = (int)dw_window_get_data(hwnd, "_dw_type"); + int start = (int)dw_window_get_data(hwnd, "_dw_start"); + + hps = WinBeginPaint(hwnd, 0, 0); + + WinQueryWindowRect(hwnd, &rcl); + + if(type == DW_HORZ) + { + ptl[0].x = rcl.xLeft + start; + ptl[0].y = rcl.yBottom; + ptl[1].x = rcl.xRight + start + 3; + ptl[1].y = rcl.yTop; + } + else + { + ptl[0].x = rcl.xLeft; + ptl[0].y = rcl.yBottom + start; + ptl[1].x = rcl.xRight; + ptl[1].y = rcl.yTop + start + 3; + } + + + GpiSetColor(hps, CLR_PALEGRAY); + GpiMove(hps, &ptl[0]); + GpiBox(hps, DRO_OUTLINEFILL, &ptl[1], 0, 0); + WinEndPaint(hps); + } + return MRFROMSHORT(FALSE); + + case WM_MOUSEMOVE: + { + int type = (int)dw_window_get_data(hwnd, "_dw_type"); + + if(type == DW_HORZ) + WinSetPointer(HWND_DESKTOP, + WinQuerySysPointer(HWND_DESKTOP, + SPTR_SIZEWE, + FALSE)); + else + WinSetPointer(HWND_DESKTOP, + WinQuerySysPointer(HWND_DESKTOP, + SPTR_SIZENS, + FALSE)); + } + return MRFROMSHORT(FALSE); + case WM_BUTTON1DOWN: + { + APIRET rc; + RECTL rclFrame; + RECTL rclBounds; + float *percent = (float *)dw_window_get_data(hwnd, "_dw_percent"); + int type = (int)dw_window_get_data(hwnd, "_dw_type"); + int start = (int)dw_window_get_data(hwnd, "_dw_start"); + + WinQueryWindowRect(hwnd, &rclFrame); + WinQueryWindowRect(hwnd, &rclBounds); + + WinMapWindowPoints(hwnd, HWND_DESKTOP, + (PPOINTL)&rclBounds, 2); + + + if(type == DW_HORZ) + { + rclFrame.xLeft = start; + rclFrame.xRight = start + SPLITBAR_WIDTH; + } + else + { + rclFrame.yBottom = start; + rclFrame.yTop = start + SPLITBAR_WIDTH; + } + + if(percent) + { + rc = _TrackRectangle(hwnd, &rclFrame, &rclBounds); + + if(rc == TRUE) + { + int width = (rclBounds.xRight - rclBounds.xLeft); + int height = (rclBounds.yTop - rclBounds.yBottom); + + if(type == DW_HORZ) + { + start = rclFrame.xLeft - rclBounds.xLeft; + if(width - SPLITBAR_WIDTH > 1 && start < width - SPLITBAR_WIDTH) + *percent = ((float)start / (float)(width - SPLITBAR_WIDTH)) * 100.0; + } + else + { + start = rclFrame.yBottom - rclBounds.yBottom; + if(height - SPLITBAR_WIDTH > 1 && start < height - SPLITBAR_WIDTH) + *percent = 100.0 - (((float)start / (float)(height - SPLITBAR_WIDTH)) * 100.0); + } + _handle_splitbar_resize(hwnd, *percent, type, width, height); + _handle_splitbar_resize(hwnd, *percent, type, width, height); + } + } + } + return MRFROMSHORT(FALSE); + } + return WinDefWindowProc(hwnd, msg, mp1, mp2); } /* Function: BubbleProc @@ -3035,124 +3035,124 @@ */ MRESULT EXPENTRY _BubbleProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - MRESULT res; - PFNWP proc = (PFNWP)WinQueryWindowPtr(hwnd, QWL_USER); - - if(proc) - res = proc(hwnd, msg, mp1, mp2); - else - res = WinDefWindowProc(hwnd, msg, mp1, mp2); - - if(msg == WM_PAINT) - { - POINTL ptl; - HPS hpsTemp; - RECTL rcl; - int height, width; - - WinQueryWindowRect(hwnd, &rcl); - height = rcl.yTop - rcl.yBottom - 1; - width = rcl.xRight - rcl.xLeft - 1; - - /* Draw a border around the bubble help */ - hpsTemp = WinGetPS(hwnd); - GpiSetColor(hpsTemp, CLR_BLACK); - ptl.x = ptl.y = 0; - GpiMove(hpsTemp, &ptl); - ptl.x = 0; - ptl.y = height; - GpiLine(hpsTemp, &ptl); - ptl.x = ptl.y = 0; - GpiMove(hpsTemp, &ptl); - ptl.y = 0; - ptl.x = width; - GpiLine(hpsTemp, &ptl); - ptl.x = width; - ptl.y = height; - GpiMove(hpsTemp, &ptl); - ptl.x = 0; - ptl.y = height; - GpiLine(hpsTemp, &ptl); - ptl.x = width; - ptl.y = height; - GpiMove(hpsTemp, &ptl); - ptl.y = 0; - ptl.x = width; - GpiLine(hpsTemp, &ptl); - WinReleasePS(hpsTemp); - } - return res; + MRESULT res; + PFNWP proc = (PFNWP)WinQueryWindowPtr(hwnd, QWL_USER); + + if(proc) + res = proc(hwnd, msg, mp1, mp2); + else + res = WinDefWindowProc(hwnd, msg, mp1, mp2); + + if(msg == WM_PAINT) + { + POINTL ptl; + HPS hpsTemp; + RECTL rcl; + int height, width; + + WinQueryWindowRect(hwnd, &rcl); + height = rcl.yTop - rcl.yBottom - 1; + width = rcl.xRight - rcl.xLeft - 1; + + /* Draw a border around the bubble help */ + hpsTemp = WinGetPS(hwnd); + GpiSetColor(hpsTemp, CLR_BLACK); + ptl.x = ptl.y = 0; + GpiMove(hpsTemp, &ptl); + ptl.x = 0; + ptl.y = height; + GpiLine(hpsTemp, &ptl); + ptl.x = ptl.y = 0; + GpiMove(hpsTemp, &ptl); + ptl.y = 0; + ptl.x = width; + GpiLine(hpsTemp, &ptl); + ptl.x = width; + ptl.y = height; + GpiMove(hpsTemp, &ptl); + ptl.x = 0; + ptl.y = height; + GpiLine(hpsTemp, &ptl); + ptl.x = width; + ptl.y = height; + GpiMove(hpsTemp, &ptl); + ptl.y = 0; + ptl.x = width; + GpiLine(hpsTemp, &ptl); + WinReleasePS(hpsTemp); + } + return res; } MRESULT EXPENTRY _button_draw(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2, PFNWP oldproc, int indent) { - HPIXMAP pixmap = (HPIXMAP)dw_window_get_data(hwnd, "_dw_hpixmap"); - HPIXMAP disable = (HPIXMAP)dw_window_get_data(hwnd, "_dw_hpixmap_disabled"); - HPOINTER icon = (HPOINTER)dw_window_get_data(hwnd, "_dw_button_icon"); - MRESULT res; - unsigned long width, height; - int x = 5, y = 5; - - dw_window_get_pos_size(hwnd, NULL, NULL, &width, &height); - - if(!oldproc) - res = WinDefWindowProc(hwnd, msg, mp1, mp2); - res = oldproc(hwnd, msg, mp1, mp2); - - if(icon) - { - ULONG halftone = DP_NORMAL; - HPS hps = WinGetPS(hwnd); - POINTERINFO pi; - int cx, cy; - - if(dw_window_get_data(hwnd, "_dw_disabled")) - halftone = DP_HALFTONED; - - cx = width - 10; - cy = height - 10; - - if(WinQueryPointerInfo(icon, &pi)) - { - BITMAPINFOHEADER sl; - int newcx = cx, newcy = cy; - - /* Check the mini icon first */ - if(GpiQueryBitmapParameters(pi.hbmMiniColor, &sl)) - { - if(sl.cx && sl.cy && cx > sl.cx && cy > sl.cy) - { - newcx = sl.cx; - newcy = sl.cy; - } - } - /* Check the normal icon second */ - if(GpiQueryBitmapParameters(pi.hbmColor, &sl)) - { - if(sl.cx && sl.cy && cx > sl.cx && cy > sl.cy) - { - newcx = sl.cx; - newcy = sl.cy; - } - } - cx = newcx; cy = newcy; - x = (width - cx)/2; - y = (height - cy)/2; - } - WinStretchPointer(hps, x + indent, y - indent, cx, cy, icon, halftone); - WinReleasePS(hps); - } - else if(pixmap) - { - x = (width - pixmap->width)/2; - y = (height - pixmap->height)/2; - - if(disable && dw_window_get_data(hwnd, "_dw_disabled")) - dw_pixmap_bitblt(hwnd, 0, x + indent, y + indent, pixmap->width, pixmap->height, 0, disable, 0, 0); - else - dw_pixmap_bitblt(hwnd, 0, x + indent, y + indent, pixmap->width, pixmap->height, 0, pixmap, 0, 0); - } - return res; + HPIXMAP pixmap = (HPIXMAP)dw_window_get_data(hwnd, "_dw_hpixmap"); + HPIXMAP disable = (HPIXMAP)dw_window_get_data(hwnd, "_dw_hpixmap_disabled"); + HPOINTER icon = (HPOINTER)dw_window_get_data(hwnd, "_dw_button_icon"); + MRESULT res; + unsigned long width, height; + int x = 5, y = 5; + + dw_window_get_pos_size(hwnd, NULL, NULL, &width, &height); + + if(!oldproc) + res = WinDefWindowProc(hwnd, msg, mp1, mp2); + res = oldproc(hwnd, msg, mp1, mp2); + + if(icon) + { + ULONG halftone = DP_NORMAL; + HPS hps = WinGetPS(hwnd); + POINTERINFO pi; + int cx, cy; + + if(dw_window_get_data(hwnd, "_dw_disabled")) + halftone = DP_HALFTONED; + + cx = width - 10; + cy = height - 10; + + if(WinQueryPointerInfo(icon, &pi)) + { + BITMAPINFOHEADER sl; + int newcx = cx, newcy = cy; + + /* Check the mini icon first */ + if(GpiQueryBitmapParameters(pi.hbmMiniColor, &sl)) + { + if(sl.cx && sl.cy && cx > sl.cx && cy > sl.cy) + { + newcx = sl.cx; + newcy = sl.cy; + } + } + /* Check the normal icon second */ + if(GpiQueryBitmapParameters(pi.hbmColor, &sl)) + { + if(sl.cx && sl.cy && cx > sl.cx && cy > sl.cy) + { + newcx = sl.cx; + newcy = sl.cy; + } + } + cx = newcx; cy = newcy; + x = (width - cx)/2; + y = (height - cy)/2; + } + WinStretchPointer(hps, x + indent, y - indent, cx, cy, icon, halftone); + WinReleasePS(hps); + } + else if(pixmap) + { + x = (width - pixmap->width)/2; + y = (height - pixmap->height)/2; + + if(disable && dw_window_get_data(hwnd, "_dw_disabled")) + dw_pixmap_bitblt(hwnd, 0, x + indent, y + indent, pixmap->width, pixmap->height, 0, disable, 0, 0); + else + dw_pixmap_bitblt(hwnd, 0, x + indent, y + indent, pixmap->width, pixmap->height, 0, pixmap, 0, 0); + } + return res; } /* Function: BtProc @@ -3161,304 +3161,304 @@ MRESULT EXPENTRY _BtProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - BubbleButton *bubble; - PFNWP oldproc; - - bubble = (BubbleButton *)WinQueryWindowPtr(hwnd, QWL_USER); - - if(!bubble) - return WinDefWindowProc(hwnd, msg, mp1, mp2); - - oldproc = bubble->pOldProc; - - switch(msg) - { - case WM_MOUSEMOVE: - if(_wndproc(hwnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - break; - case WM_PAINT: - return _button_draw(hwnd, msg, mp1, mp2, oldproc, 0); - case BM_SETHILITE: - return _button_draw(hwnd, msg, mp1, mp2, oldproc, (int)mp1); - case WM_SETFOCUS: - if(mp2) - _run_event(hwnd, msg, mp1, mp2); - else - WinSendMsg(hwnd, BM_SETDEFAULT, 0, 0); - break; - case WM_BUTTON1DOWN: - case WM_BUTTON2DOWN: - case WM_BUTTON3DOWN: - case WM_BUTTON1DBLCLK: - case WM_BUTTON2DBLCLK: - case WM_BUTTON3DBLCLK: - if(dw_window_get_data(hwnd, "_dw_disabled")) - return (MRESULT)FALSE; - break; - case WM_BUTTON1UP: - { - SignalHandler *tmp = Root; - - if(WinIsWindowEnabled(hwnd) && !dw_window_get_data(hwnd, "_dw_disabled")) - { - /* Find any callbacks for this function */ - while(tmp) - { - if(tmp->message == WM_COMMAND) - { - /* Make sure it's the right window, and the right ID */ - if(tmp->window == hwnd) - { - /* Due to the fact that if we run the function - * here, finishing actions on the button will occur - * after we run the signal handler. So we post the - * message so the button can finish what it needs to - * do before we run our handler. - */ - WinPostMsg(hwnd, WM_USER, (MPARAM)tmp, 0); - tmp = NULL; - } - } - if(tmp) - tmp= tmp->next; - } - } - } - break; - case WM_USER: - { + BubbleButton *bubble; + PFNWP oldproc; + + bubble = (BubbleButton *)WinQueryWindowPtr(hwnd, QWL_USER); + + if(!bubble) + return WinDefWindowProc(hwnd, msg, mp1, mp2); + + oldproc = bubble->pOldProc; + + switch(msg) + { + case WM_MOUSEMOVE: + if(_wndproc(hwnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + break; + case WM_PAINT: + return _button_draw(hwnd, msg, mp1, mp2, oldproc, 0); + case BM_SETHILITE: + return _button_draw(hwnd, msg, mp1, mp2, oldproc, (int)mp1); + case WM_SETFOCUS: + if(mp2) + _run_event(hwnd, msg, mp1, mp2); + else + WinSendMsg(hwnd, BM_SETDEFAULT, 0, 0); + break; + case WM_BUTTON1DOWN: + case WM_BUTTON2DOWN: + case WM_BUTTON3DOWN: + case WM_BUTTON1DBLCLK: + case WM_BUTTON2DBLCLK: + case WM_BUTTON3DBLCLK: + if(dw_window_get_data(hwnd, "_dw_disabled")) + return (MRESULT)FALSE; + break; + case WM_BUTTON1UP: + { + SignalHandler *tmp = Root; + + if(WinIsWindowEnabled(hwnd) && !dw_window_get_data(hwnd, "_dw_disabled")) + { + /* Find any callbacks for this function */ + while(tmp) + { + if(tmp->message == WM_COMMAND) + { + /* Make sure it's the right window, and the right ID */ + if(tmp->window == hwnd) + { + /* Due to the fact that if we run the function + * here, finishing actions on the button will occur + * after we run the signal handler. So we post the + * message so the button can finish what it needs to + * do before we run our handler. + */ + WinPostMsg(hwnd, WM_USER, (MPARAM)tmp, 0); + tmp = NULL; + } + } + if(tmp) + tmp= tmp->next; + } + } + } + break; + case WM_USER: + { SignalHandler *tmp = (SignalHandler *)mp1; - int (* API clickfunc)(HWND, void *) = NULL; - - if(tmp) - { - clickfunc = (int (* API)(HWND, void *))tmp->signalfunction; - - clickfunc(tmp->window, tmp->data); - } - } + int (* API clickfunc)(HWND, void *) = NULL; + + if(tmp) + { + clickfunc = (int (* API)(HWND, void *))tmp->signalfunction; + + clickfunc(tmp->window, tmp->data); + } + } break; - case WM_CHAR: - { - /* A button press should also occur for an ENTER or SPACE press - * while the button has the active input focus. - */ - if(SHORT1FROMMP(mp2) == '\r' || SHORT1FROMMP(mp2) == ' ') - { - SignalHandler *tmp = Root; - - /* Find any callbacks for this function */ - while(tmp) - { - if(tmp->message == WM_COMMAND) - { - /* Make sure it's the right window, and the right ID */ - if(tmp->window == hwnd) - { - WinPostMsg(hwnd, WM_USER, (MPARAM)tmp, 0); - tmp = NULL; - } - } - if(tmp) - tmp= tmp->next; - } - } - if(SHORT1FROMMP(mp2) == '\t') - { - if(CHARMSG(&msg)->fs & KC_SHIFT) - _shift_focus_back(hwnd); - else - _shift_focus(hwnd); - WinSendMsg(hwnd, BM_SETDEFAULT, 0, 0); - return FALSE; - } - else if(!(CHARMSG(&msg)->fs & KC_KEYUP) && (CHARMSG(&msg)->vkey == VK_LEFT || CHARMSG(&msg)->vkey == VK_UP)) - { - _shift_focus_back(hwnd); - return FALSE; - } - else if(!(CHARMSG(&msg)->fs & KC_KEYUP) && (CHARMSG(&msg)->vkey == VK_RIGHT || CHARMSG(&msg)->vkey == VK_DOWN)) - { - _shift_focus(hwnd); - return FALSE; - } - } - break; - case 0x041f: - if (hwndBubble) - { - WinDestroyWindow(hwndBubble); - hwndBubble = 0; - } - break; - - case 0x041e: - - if(!*bubble->bubbletext) - break; - - if(hwndBubble) - { - WinDestroyWindow(hwndBubble); - hwndBubble = 0; - } - - if(!hwndBubble) - { - HPS hpsTemp = 0; - LONG lHight; - LONG lWidth; - POINTL txtPointl[TXTBOX_COUNT]; - POINTL ptlWork = {0,0}; - ULONG ulColor = CLR_YELLOW; - void *blah; - - hwndBubbleLast = hwnd; - hwndBubble = WinCreateWindow(HWND_DESKTOP, - WC_STATIC, - "", - SS_TEXT | - DT_CENTER | - DT_VCENTER, + case WM_CHAR: + { + /* A button press should also occur for an ENTER or SPACE press + * while the button has the active input focus. + */ + if(SHORT1FROMMP(mp2) == '\r' || SHORT1FROMMP(mp2) == ' ') + { + SignalHandler *tmp = Root; + + /* Find any callbacks for this function */ + while(tmp) + { + if(tmp->message == WM_COMMAND) + { + /* Make sure it's the right window, and the right ID */ + if(tmp->window == hwnd) + { + WinPostMsg(hwnd, WM_USER, (MPARAM)tmp, 0); + tmp = NULL; + } + } + if(tmp) + tmp= tmp->next; + } + } + if(SHORT1FROMMP(mp2) == '\t') + { + if(CHARMSG(&msg)->fs & KC_SHIFT) + _shift_focus_back(hwnd); + else + _shift_focus(hwnd); + WinSendMsg(hwnd, BM_SETDEFAULT, 0, 0); + return FALSE; + } + else if(!(CHARMSG(&msg)->fs & KC_KEYUP) && (CHARMSG(&msg)->vkey == VK_LEFT || CHARMSG(&msg)->vkey == VK_UP)) + { + _shift_focus_back(hwnd); + return FALSE; + } + else if(!(CHARMSG(&msg)->fs & KC_KEYUP) && (CHARMSG(&msg)->vkey == VK_RIGHT || CHARMSG(&msg)->vkey == VK_DOWN)) + { + _shift_focus(hwnd); + return FALSE; + } + } + break; + case 0x041f: + if (hwndBubble) + { + WinDestroyWindow(hwndBubble); + hwndBubble = 0; + } + break; + + case 0x041e: + + if(!*bubble->bubbletext) + break; + + if(hwndBubble) + { + WinDestroyWindow(hwndBubble); + hwndBubble = 0; + } + + if(!hwndBubble) + { + HPS hpsTemp = 0; + LONG lHight; + LONG lWidth; + POINTL txtPointl[TXTBOX_COUNT]; + POINTL ptlWork = {0,0}; + ULONG ulColor = CLR_YELLOW; + void *blah; + + hwndBubbleLast = hwnd; + hwndBubble = WinCreateWindow(HWND_DESKTOP, + WC_STATIC, + "", + SS_TEXT | + DT_CENTER | + DT_VCENTER, 0,0,0,0, - HWND_DESKTOP, - HWND_TOP, - 0, - NULL, - NULL); - - WinSetPresParam(hwndBubble, - PP_FONTNAMESIZE, - strlen(DefaultFont)+1, - DefaultFont); - - - WinSetPresParam(hwndBubble, - PP_BACKGROUNDCOLORINDEX, - sizeof(ulColor), - &ulColor); - - WinSetWindowText(hwndBubble, - bubble->bubbletext); - - WinMapWindowPoints(hwnd, HWND_DESKTOP, &ptlWork, 1); - - hpsTemp = WinGetPS(hwndBubble); - GpiQueryTextBox(hpsTemp, - strlen(bubble->bubbletext), - bubble->bubbletext, - TXTBOX_COUNT, - txtPointl); - WinReleasePS(hpsTemp); - - lWidth = txtPointl[TXTBOX_TOPRIGHT].x - - txtPointl[TXTBOX_TOPLEFT ].x + 8; - - lHight = txtPointl[TXTBOX_TOPLEFT].y - - txtPointl[TXTBOX_BOTTOMLEFT].y + 8; - - ptlWork.y -= lHight; - - blah = (void *)WinSubclassWindow(hwndBubble, _BubbleProc); - - if(blah) - WinSetWindowPtr(hwndBubble, QWP_USER, blah); - - WinSetWindowPos(hwndBubble, - HWND_TOP, - ptlWork.x, - ptlWork.y, - lWidth, - lHight, - SWP_SIZE | SWP_MOVE | SWP_SHOW); - } - break; - } - - if(!oldproc) - return WinDefWindowProc(hwnd, msg, mp1, mp2); - return oldproc(hwnd, msg, mp1, mp2); + HWND_DESKTOP, + HWND_TOP, + 0, + NULL, + NULL); + + WinSetPresParam(hwndBubble, + PP_FONTNAMESIZE, + strlen(DefaultFont)+1, + DefaultFont); + + + WinSetPresParam(hwndBubble, + PP_BACKGROUNDCOLORINDEX, + sizeof(ulColor), + &ulColor); + + WinSetWindowText(hwndBubble, + bubble->bubbletext); + + WinMapWindowPoints(hwnd, HWND_DESKTOP, &ptlWork, 1); + + hpsTemp = WinGetPS(hwndBubble); + GpiQueryTextBox(hpsTemp, + strlen(bubble->bubbletext), + bubble->bubbletext, + TXTBOX_COUNT, + txtPointl); + WinReleasePS(hpsTemp); + + lWidth = txtPointl[TXTBOX_TOPRIGHT].x - + txtPointl[TXTBOX_TOPLEFT ].x + 8; + + lHight = txtPointl[TXTBOX_TOPLEFT].y - + txtPointl[TXTBOX_BOTTOMLEFT].y + 8; + + ptlWork.y -= lHight; + + blah = (void *)WinSubclassWindow(hwndBubble, _BubbleProc); + + if(blah) + WinSetWindowPtr(hwndBubble, QWP_USER, blah); + + WinSetWindowPos(hwndBubble, + HWND_TOP, + ptlWork.x, + ptlWork.y, + lWidth, + lHight, + SWP_SIZE | SWP_MOVE | SWP_SHOW); + } + break; + } + + if(!oldproc) + return WinDefWindowProc(hwnd, msg, mp1, mp2); + return oldproc(hwnd, msg, mp1, mp2); } MRESULT EXPENTRY _RendProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - int res = 0; - res = (int)_run_event(hwnd, msg, mp1, mp2); - switch(msg) - { - case WM_MOUSEMOVE: - if(_wndproc(hwnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - break; - case WM_BUTTON1DOWN: - case WM_BUTTON2DOWN: - case WM_BUTTON3DOWN: - if(res == -1) - WinSetFocus(HWND_DESKTOP, hwnd); - else if(res) - return (MPARAM)TRUE; - } - return WinDefWindowProc(hwnd, msg, mp1, mp2); + int res = 0; + res = (int)_run_event(hwnd, msg, mp1, mp2); + switch(msg) + { + case WM_MOUSEMOVE: + if(_wndproc(hwnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + break; + case WM_BUTTON1DOWN: + case WM_BUTTON2DOWN: + case WM_BUTTON3DOWN: + if(res == -1) + WinSetFocus(HWND_DESKTOP, hwnd); + else if(res) + return (MPARAM)TRUE; + } + return WinDefWindowProc(hwnd, msg, mp1, mp2); } MRESULT EXPENTRY _TreeProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(hwnd, QWP_USER); - PFNWP oldproc = 0; - - if(blah) - oldproc = blah->oldproc; - - switch(msg) - { - case WM_MOUSEMOVE: - if(_wndproc(hwnd, msg, mp1, mp2)) - return MPFROMSHORT(FALSE); - break; - case WM_PAINT: - { - HPS hps; - RECTL rcl; - POINTL ptl[2]; - - if(oldproc) - oldproc(hwnd, msg, mp1, mp2); - - hps = WinBeginPaint(hwnd, 0, 0); - WinQueryWindowRect(hwnd, &rcl); - ptl[0].x = rcl.xLeft + 1; - ptl[0].y = rcl.yBottom + 1; - ptl[1].x = rcl.xRight - 1; - ptl[1].y = rcl.yTop - 1; - - GpiSetColor(hps, CLR_BLACK); - GpiMove(hps, &ptl[0]); - GpiBox(hps, DRO_OUTLINE, &ptl[1], 0, 0); - WinEndPaint(hps); - } - return MRFROMSHORT(FALSE); - case WM_SETFOCUS: - _run_event(hwnd, msg, mp1, mp2); - break; - case WM_CHAR: - if(SHORT1FROMMP(mp2) == '\t') - { - if(CHARMSG(&msg)->fs & KC_SHIFT) - _shift_focus_back(hwnd); - else - _shift_focus(hwnd); - return FALSE; - } - break; - } - - _run_event(hwnd, msg, mp1, mp2); - - if(oldproc) - return oldproc(hwnd, msg, mp1, mp2); - - return WinDefWindowProc(hwnd, msg, mp1, mp2); + WindowData *blah = (WindowData *)WinQueryWindowPtr(hwnd, QWP_USER); + PFNWP oldproc = 0; + + if(blah) + oldproc = blah->oldproc; + + switch(msg) + { + case WM_MOUSEMOVE: + if(_wndproc(hwnd, msg, mp1, mp2)) + return MPFROMSHORT(FALSE); + break; + case WM_PAINT: + { + HPS hps; + RECTL rcl; + POINTL ptl[2]; + + if(oldproc) + oldproc(hwnd, msg, mp1, mp2); + + hps = WinBeginPaint(hwnd, 0, 0); + WinQueryWindowRect(hwnd, &rcl); + ptl[0].x = rcl.xLeft + 1; + ptl[0].y = rcl.yBottom + 1; + ptl[1].x = rcl.xRight - 1; + ptl[1].y = rcl.yTop - 1; + + GpiSetColor(hps, CLR_BLACK); + GpiMove(hps, &ptl[0]); + GpiBox(hps, DRO_OUTLINE, &ptl[1], 0, 0); + WinEndPaint(hps); + } + return MRFROMSHORT(FALSE); + case WM_SETFOCUS: + _run_event(hwnd, msg, mp1, mp2); + break; + case WM_CHAR: + if(SHORT1FROMMP(mp2) == '\t') + { + if(CHARMSG(&msg)->fs & KC_SHIFT) + _shift_focus_back(hwnd); + else + _shift_focus(hwnd); + return FALSE; + } + break; + } + + _run_event(hwnd, msg, mp1, mp2); + + if(oldproc) + return oldproc(hwnd, msg, mp1, mp2); + + return WinDefWindowProc(hwnd, msg, mp1, mp2); } /* @@ -3469,35 +3469,35 @@ */ int API dw_init(int newthread, int argc, char *argv[]) { - APIRET rc; - char objnamebuf[300] = ""; - - argc = argc; /* keep compiler happy */ - argv = argv; /* keep compiler happy */ - if(newthread) - { - dwhab = WinInitialize(0); - dwhmq = WinCreateMsgQueue(dwhab, 0); - } - - rc = WinRegisterClass(dwhab, ClassName, _wndproc, CS_SIZEREDRAW | CS_CLIPCHILDREN, 32); - rc = WinRegisterClass(dwhab, SplitbarClassName, _splitwndproc, 0L, 32); - - /* Get the OS/2 version. */ - DosQuerySysInfo(QSV_VERSION_MAJOR, QSV_MS_COUNT,(void *)aulBuffer, 4*sizeof(ULONG)); - - desktop = WinQueryDesktopWindow(dwhab, NULLHANDLE); - - if(!IS_WARP4()) - DefaultFont = "8.Helv"; - - /* This is a window that hangs around as long as the - * application does and handles menu messages. - */ - hwndApp = dw_window_new(HWND_OBJECT, "", 0); - DosLoadModule(objnamebuf, sizeof(objnamebuf), "WPCONFIG", &wpconfig); - - return rc; + APIRET rc; + char objnamebuf[300] = ""; + + argc = argc; /* keep compiler happy */ + argv = argv; /* keep compiler happy */ + if(newthread) + { + dwhab = WinInitialize(0); + dwhmq = WinCreateMsgQueue(dwhab, 0); + } + + rc = WinRegisterClass(dwhab, ClassName, _wndproc, CS_SIZEREDRAW | CS_CLIPCHILDREN, 32); + rc = WinRegisterClass(dwhab, SplitbarClassName, _splitwndproc, 0L, 32); + + /* Get the OS/2 version. */ + DosQuerySysInfo(QSV_VERSION_MAJOR, QSV_MS_COUNT,(void *)aulBuffer, 4*sizeof(ULONG)); + + desktop = WinQueryDesktopWindow(dwhab, NULLHANDLE); + + if(!IS_WARP4()) + DefaultFont = "8.Helv"; + + /* This is a window that hangs around as long as the + * application does and handles menu messages. + */ + hwndApp = dw_window_new(HWND_OBJECT, "", 0); + DosLoadModule(objnamebuf, sizeof(objnamebuf), "WPCONFIG", &wpconfig); + + return rc; } /* @@ -3505,19 +3505,19 @@ */ void API dw_main(void) { - QMSG qmsg; - - _dwtid = dw_thread_id(); - - while(WinGetMsg(dwhab, &qmsg, 0, 0, 0)) - { - if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) - _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); - WinDispatchMsg(dwhab, &qmsg); - } - - WinDestroyMsgQueue(dwhmq); - WinTerminate(dwhab); + QMSG qmsg; + + _dwtid = dw_thread_id(); + + while(WinGetMsg(dwhab, &qmsg, 0, 0, 0)) + { + if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) + _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); + WinDispatchMsg(dwhab, &qmsg); + } + + WinDestroyMsgQueue(dwhmq); + WinTerminate(dwhab); } /* @@ -3527,41 +3527,41 @@ */ void API dw_main_sleep(int milliseconds) { - QMSG qmsg; + QMSG qmsg; #ifdef __EMX__ - struct timeval tv, start; - - gettimeofday(&start, NULL); - gettimeofday(&tv, NULL); - - while(((tv.tv_sec - start.tv_sec)*1000) + ((tv.tv_usec - start.tv_usec)/1000) <= milliseconds) - { - if(WinPeekMsg(dwhab, &qmsg, 0, 0, 0, PM_NOREMOVE)) - { - WinGetMsg(dwhab, &qmsg, 0, 0, 0); - if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) - _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); - WinDispatchMsg(dwhab, &qmsg); - } - else - DosSleep(1); - gettimeofday(&tv, NULL); - } + struct timeval tv, start; + + gettimeofday(&start, NULL); + gettimeofday(&tv, NULL); + + while(((tv.tv_sec - start.tv_sec)*1000) + ((tv.tv_usec - start.tv_usec)/1000) <= milliseconds) + { + if(WinPeekMsg(dwhab, &qmsg, 0, 0, 0, PM_NOREMOVE)) + { + WinGetMsg(dwhab, &qmsg, 0, 0, 0); + if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) + _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); + WinDispatchMsg(dwhab, &qmsg); + } + else + DosSleep(1); + gettimeofday(&tv, NULL); + } #else - double start = (double)clock(); - - while(((clock() - start) / (CLOCKS_PER_SEC/1000)) <= milliseconds) - { - if(WinPeekMsg(dwhab, &qmsg, 0, 0, 0, PM_NOREMOVE)) - { - WinGetMsg(dwhab, &qmsg, 0, 0, 0); - if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) - _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); - WinDispatchMsg(dwhab, &qmsg); - } - else - DosSleep(1); - } + double start = (double)clock(); + + while(((clock() - start) / (CLOCKS_PER_SEC/1000)) <= milliseconds) + { + if(WinPeekMsg(dwhab, &qmsg, 0, 0, 0, PM_NOREMOVE)) + { + WinGetMsg(dwhab, &qmsg, 0, 0, 0); + if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) + _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); + WinDispatchMsg(dwhab, &qmsg); + } + else + DosSleep(1); + } #endif } @@ -3570,16 +3570,16 @@ */ void API dw_main_iteration(void) { - QMSG qmsg; - - _dwtid = dw_thread_id(); - - if(WinGetMsg(dwhab, &qmsg, 0, 0, 0)) - { - if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) - _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); - WinDispatchMsg(dwhab, &qmsg); - } + QMSG qmsg; + + _dwtid = dw_thread_id(); + + if(WinGetMsg(dwhab, &qmsg, 0, 0, 0)) + { + if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) + _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); + WinDispatchMsg(dwhab, &qmsg); + } } /* @@ -3590,7 +3590,7 @@ */ void API dw_free(void *ptr) { - free(ptr); + free(ptr); } /* @@ -3600,13 +3600,13 @@ */ DWDialog * API dw_dialog_new(void *data) { - DWDialog *tmp = malloc(sizeof(DWDialog)); - - tmp->eve = dw_event_new(); - dw_event_reset(tmp->eve); - tmp->data = data; - tmp->done = FALSE; - tmp->result = NULL; + DWDialog *tmp = malloc(sizeof(DWDialog)); + + tmp->eve = dw_event_new(); + dw_event_reset(tmp->eve); + tmp->data = data; + tmp->done = FALSE; + tmp->result = NULL; return tmp; } @@ -3620,10 +3620,10 @@ */ int API dw_dialog_dismiss(DWDialog *dialog, void *result) { - dialog->result = result; - dw_event_post(dialog->eve); - dialog->done = TRUE; - return 0; + dialog->result = result; + dw_event_post(dialog->eve); + dialog->done = TRUE; + return 0; } /* @@ -3634,21 +3634,21 @@ */ void * API dw_dialog_wait(DWDialog *dialog) { - QMSG qmsg; - void *tmp; - - while (WinGetMsg(dwhab, &qmsg, 0, 0, 0)) - { - if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) - _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); - WinDispatchMsg(dwhab, &qmsg); - if(dialog->done) - break; - } - dw_event_close(&dialog->eve); - tmp = dialog->result; - free(dialog); - return tmp; + QMSG qmsg; + void *tmp; + + while (WinGetMsg(dwhab, &qmsg, 0, 0, 0)) + { + if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE) + _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2); + WinDispatchMsg(dwhab, &qmsg); + if(dialog->done) + break; + } + dw_event_close(&dialog->eve); + tmp = dialog->result; + free(dialog); + return tmp; } @@ -3662,24 +3662,24 @@ */ int API dw_messagebox(char *title, int flags, char *format, ...) { - va_list args; - char outbuf[1024]; - int rc; - - va_start(args, format); - vsprintf(outbuf, format, args); - va_end(args); - - rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, outbuf, title, 0, flags | MB_MOVEABLE); - if(rc == MBID_OK) - return DW_MB_RETURN_OK; - else if(rc == MBID_YES) - return DW_MB_RETURN_YES; - else if(rc == MBID_NO) - return DW_MB_RETURN_NO; - else if(rc == MBID_CANCEL) - return DW_MB_RETURN_CANCEL; - else return 0; + va_list args; + char outbuf[1024]; + int rc; + + va_start(args, format); + vsprintf(outbuf, format, args); + va_end(args); + + rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, outbuf, title, 0, flags | MB_MOVEABLE); + if(rc == MBID_OK) + return DW_MB_RETURN_OK; + else if(rc == MBID_YES) + return DW_MB_RETURN_YES; + else if(rc == MBID_NO) + return DW_MB_RETURN_NO; + else if(rc == MBID_CANCEL) + return DW_MB_RETURN_CANCEL; + else return 0; } /* @@ -3689,7 +3689,7 @@ */ int API dw_window_raise(HWND handle) { - return WinSetWindowPos(handle, HWND_TOP, 0, 0, 0, 0, SWP_ZORDER); + return WinSetWindowPos(handle, HWND_TOP, 0, 0, 0, 0, SWP_ZORDER); } /* @@ -3699,7 +3699,7 @@ */ int API dw_window_lower(HWND handle) { - return WinSetWindowPos(handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_ZORDER); + return WinSetWindowPos(handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_ZORDER); } /* @@ -3709,54 +3709,54 @@ */ int API dw_window_show(HWND handle) { - int rc = WinSetWindowPos(handle, NULLHANDLE, 0, 0, 0, 0, SWP_SHOW); - HSWITCH hswitch; - SWCNTRL swcntrl; - - _fix_button_owner(_toplevel_window(handle), 0); - WinSetFocus(HWND_DESKTOP, handle); - _initial_focus(handle); - - /* If this window has a switch list entry make sure it is visible */ - hswitch = WinQuerySwitchHandle(handle, 0); - if(hswitch) - { - WinQuerySwitchEntry(hswitch, &swcntrl); - swcntrl.uchVisibility = SWL_VISIBLE; - WinChangeSwitchEntry(hswitch, &swcntrl); - } - if(WinWindowFromID(handle, FID_CLIENT)) - { - WindowData *blah = WinQueryWindowPtr(handle, QWP_USER); - - if(blah && !(blah->flags & DW_OS2_NEW_WINDOW)) - { - ULONG cx = dw_screen_width(), cy = dw_screen_height(); - int newx, newy, changed = 0; - SWP swp; - - blah->flags |= DW_OS2_NEW_WINDOW; - - WinQueryWindowPos(handle, &swp); - - newx = swp.x; - newy = swp.y; - - if((swp.x+swp.cx) > cx) - { - newx = (cx - swp.cx)/2; - changed = 1; - } - if((swp.y+swp.cy) > cy) - { - newy = (cy - swp.cy)/2; - changed = 1; - } - if(changed) - WinSetWindowPos(handle, NULLHANDLE, newx, newy, 0, 0, SWP_MOVE); - } - } - return rc; + int rc = WinSetWindowPos(handle, NULLHANDLE, 0, 0, 0, 0, SWP_SHOW); + HSWITCH hswitch; + SWCNTRL swcntrl; + + _fix_button_owner(_toplevel_window(handle), 0); + WinSetFocus(HWND_DESKTOP, handle); + _initial_focus(handle); + + /* If this window has a switch list entry make sure it is visible */ + hswitch = WinQuerySwitchHandle(handle, 0); + if(hswitch) + { + WinQuerySwitchEntry(hswitch, &swcntrl); + swcntrl.uchVisibility = SWL_VISIBLE; + WinChangeSwitchEntry(hswitch, &swcntrl); + } + if(WinWindowFromID(handle, FID_CLIENT)) + { + WindowData *blah = WinQueryWindowPtr(handle, QWP_USER); + + if(blah && !(blah->flags & DW_OS2_NEW_WINDOW)) + { + ULONG cx = dw_screen_width(), cy = dw_screen_height(); + int newx, newy, changed = 0; + SWP swp; + + blah->flags |= DW_OS2_NEW_WINDOW; + + WinQueryWindowPos(handle, &swp); + + newx = swp.x; + newy = swp.y; + + if((swp.x+swp.cx) > cx) + { + newx = (cx - swp.cx)/2; + changed = 1; + } + if((swp.y+swp.cy) > cy) + { + newy = (cy - swp.cy)/2; + changed = 1; + } + if(changed) + WinSetWindowPos(handle, NULLHANDLE, newx, newy, 0, 0, SWP_MOVE); + } + } + return rc; } /* @@ -3766,20 +3766,20 @@ */ int API dw_window_minimize(HWND handle) { - HWND hwndclient = WinWindowFromID(handle, FID_CLIENT); - - if(hwndclient) - { - Box *box = (Box *)WinQueryWindowPtr(hwndclient, QWP_USER); - - if(box) - { - if(!box->titlebar && box->hwndtitle) - WinSetParent(box->hwndtitle, handle, FALSE); - } - } - - return WinSetWindowPos(handle, NULLHANDLE, 0, 0, 0, 0, SWP_MINIMIZE); + HWND hwndclient = WinWindowFromID(handle, FID_CLIENT); + + if(hwndclient) + { + Box *box = (Box *)WinQueryWindowPtr(hwndclient, QWP_USER); + + if(box) + { + if(!box->titlebar && box->hwndtitle) + WinSetParent(box->hwndtitle, handle, FALSE); + } + } + + return WinSetWindowPos(handle, NULLHANDLE, 0, 0, 0, 0, SWP_MINIMIZE); } /* @@ -3789,18 +3789,18 @@ */ int API dw_window_hide(HWND handle) { - HSWITCH hswitch; - SWCNTRL swcntrl; - - /* If this window has a switch list entry make sure it is invisible */ - hswitch = WinQuerySwitchHandle(handle, 0); - if(hswitch) - { - WinQuerySwitchEntry(hswitch, &swcntrl); - swcntrl.uchVisibility = SWL_INVISIBLE; - WinChangeSwitchEntry(hswitch, &swcntrl); - } - return WinShowWindow(handle, FALSE); + HSWITCH hswitch; + SWCNTRL swcntrl; + + /* If this window has a switch list entry make sure it is invisible */ + hswitch = WinQuerySwitchHandle(handle, 0); + if(hswitch) + { + WinQuerySwitchEntry(hswitch, &swcntrl); + swcntrl.uchVisibility = SWL_INVISIBLE; + WinChangeSwitchEntry(hswitch, &swcntrl); + } + return WinShowWindow(handle, FALSE); } /* @@ -3810,49 +3810,49 @@ */ int API dw_window_destroy(HWND handle) { - HWND frame, menu, parent = WinQueryWindow(handle, QW_PARENT); - Box *thisbox = WinQueryWindowPtr(parent, QWP_USER); - - if(!handle) - return -1; - - frame = (HWND)dw_window_get_data(handle, "_dw_combo_box"); - - if((menu = WinWindowFromID(handle, FID_MENU)) != NULLHANDLE) - _free_menu_data(menu); - - if(parent != desktop && thisbox && thisbox->count) - { - int z, index = -1; - Item *tmpitem, *thisitem = thisbox->items; - - for(z=0;z<thisbox->count;z++) - { - if(thisitem[z].hwnd == handle) - index = z; - } - - if(index == -1) - return 0; - - tmpitem = malloc(sizeof(Item)*(thisbox->count-1)); - - /* Copy all but the current entry to the new list */ - for(z=0;z<index;z++) - { - tmpitem[z] = thisitem[z]; - } - for(z=index+1;z<thisbox->count;z++) - { - tmpitem[z-1] = thisitem[z]; - } - - thisbox->items = tmpitem; - free(thisitem); - thisbox->count--; - _free_window_memory(frame ? frame : handle); - } - return WinDestroyWindow(frame ? frame : handle); + HWND frame, menu, parent = WinQueryWindow(handle, QW_PARENT); + Box *thisbox = WinQueryWindowPtr(parent, QWP_USER); + + if(!handle) + return -1; + + frame = (HWND)dw_window_get_data(handle, "_dw_combo_box"); + + if((menu = WinWindowFromID(handle, FID_MENU)) != NULLHANDLE) + _free_menu_data(menu); + + if(parent != desktop && thisbox && thisbox->count) + { + int z, index = -1; + Item *tmpitem, *thisitem = thisbox->items; + + for(z=0;z<thisbox->count;z++) + { + if(thisitem[z].hwnd == handle) + index = z; + } + + if(index == -1) + return 0; + + tmpitem = malloc(sizeof(Item)*(thisbox->count-1)); + + /* Copy all but the current entry to the new list */ + for(z=0;z<index;z++) + { + tmpitem[z] = thisitem[z]; + } + for(z=index+1;z<thisbox->count;z++) + { + tmpitem[z-1] = thisitem[z]; + } + + thisbox->items = tmpitem; + free(thisitem); + thisbox->count--; + _free_window_memory(frame ? frame : handle); + } + return WinDestroyWindow(frame ? frame : handle); } /* Causes entire window to be invalidated and redrawn. @@ -3861,21 +3861,21 @@ */ void API dw_window_redraw(HWND handle) { - HWND client = WinWindowFromID(handle, FID_CLIENT); - HWND window = client ? client : handle; - Box *mybox = (Box *)WinQueryWindowPtr(window, QWP_USER); - - _fix_button_owner(_toplevel_window(handle), 0); - if(window && mybox) - { - unsigned long width, height; - - dw_window_get_pos_size(window, NULL, NULL, &width, &height); - - WinShowWindow(client ? mybox->items[0].hwnd : handle, FALSE); - _do_resize(mybox, width, height); - WinShowWindow(client ? mybox->items[0].hwnd : handle, TRUE); - } + HWND client = WinWindowFromID(handle, FID_CLIENT); + HWND window = client ? client : handle; + Box *mybox = (Box *)WinQueryWindowPtr(window, QWP_USER); + + _fix_button_owner(_toplevel_window(handle), 0); + if(window && mybox) + { + unsigned long width, height; + + dw_window_get_pos_size(window, NULL, NULL, &width, &height); + + WinShowWindow(client ? mybox->items[0].hwnd : handle, FALSE); + _do_resize(mybox, width, height); + WinShowWindow(client ? mybox->items[0].hwnd : handle, TRUE); + } } /* @@ -3886,8 +3886,8 @@ */ void API dw_window_reparent(HWND handle, HWND newparent) { - HWND blah = WinWindowFromID(newparent, FID_CLIENT); - WinSetParent(handle, blah ? blah : newparent, TRUE); + HWND blah = WinWindowFromID(newparent, FID_CLIENT); + WinSetParent(handle, blah ? blah : newparent, TRUE); } /* @@ -3898,49 +3898,49 @@ */ int API dw_window_set_font(HWND handle, char *fontname) { - return WinSetPresParam(handle, PP_FONTNAMESIZE, strlen(fontname)+1, fontname); + return WinSetPresParam(handle, PP_FONTNAMESIZE, strlen(fontname)+1, fontname); } /* Internal version */ int _dw_window_set_color(HWND handle, ULONG fore, ULONG back) { - if((fore & DW_RGB_COLOR) == DW_RGB_COLOR) - { - RGB2 rgb2; - - rgb2.bBlue = DW_BLUE_VALUE(fore); - rgb2.bGreen = DW_GREEN_VALUE(fore); - rgb2.bRed = DW_RED_VALUE(fore); - rgb2.fcOptions = 0; - - WinSetPresParam(handle, PP_FOREGROUNDCOLOR, sizeof(RGB2), &rgb2); - - } - else if(fore != DW_CLR_DEFAULT) - { - fore = _internal_color(fore); - - WinSetPresParam(handle, PP_FOREGROUNDCOLORINDEX, sizeof(ULONG), &fore); - } - if((back & DW_RGB_COLOR) == DW_RGB_COLOR) - { - RGB2 rgb2; - - rgb2.bBlue = DW_BLUE_VALUE(back); - rgb2.bGreen = DW_GREEN_VALUE(back); - rgb2.bRed = DW_RED_VALUE(back); - rgb2.fcOptions = 0; - - WinSetPresParam(handle, PP_BACKGROUNDCOLOR, sizeof(RGB2), &rgb2); - return 0; - } - else if(back != DW_CLR_DEFAULT) - { - back = _internal_color(back); - - WinSetPresParam(handle, PP_BACKGROUNDCOLORINDEX, sizeof(ULONG), &back); - } - return 0; + if((fore & DW_RGB_COLOR) == DW_RGB_COLOR) + { + RGB2 rgb2; + + rgb2.bBlue = DW_BLUE_VALUE(fore); + rgb2.bGreen = DW_GREEN_VALUE(fore); + rgb2.bRed = DW_RED_VALUE(fore); + rgb2.fcOptions = 0; + + WinSetPresParam(handle, PP_FOREGROUNDCOLOR, sizeof(RGB2), &rgb2); + + } + else if(fore != DW_CLR_DEFAULT) + { + fore = _internal_color(fore); + + WinSetPresParam(handle, PP_FOREGROUNDCOLORINDEX, sizeof(ULONG), &fore); + } + if((back & DW_RGB_COLOR) == DW_RGB_COLOR) + { + RGB2 rgb2; + + rgb2.bBlue = DW_BLUE_VALUE(back); + rgb2.bGreen = DW_GREEN_VALUE(back); + rgb2.bRed = DW_RED_VALUE(back); + rgb2.fcOptions = 0; + + WinSetPresParam(handle, PP_BACKGROUNDCOLOR, sizeof(RGB2), &rgb2); + return 0; + } + else if(back != DW_CLR_DEFAULT) + { + back = _internal_color(back); + + WinSetPresParam(handle, PP_BACKGROUNDCOLORINDEX, sizeof(ULONG), &back); + } + return 0; } /* * Sets the colors used by a specified window (widget) handle. @@ -3951,10 +3951,10 @@ */ int API dw_window_set_color(HWND handle, ULONG fore, ULONG back) { - dw_window_set_data(handle, "_dw_fore", (void *)(fore+1)); - dw_window_set_data(handle, "_dw_back", (void *)(back+1)); - - return _dw_window_set_color(handle, fore, back); + dw_window_set_data(handle, "_dw_fore", (void *)(fore+1)); + dw_window_set_data(handle, "_dw_back", (void *)(back+1)); + + return _dw_window_set_color(handle, fore, back); } /* @@ -3965,8 +3965,8 @@ */ int API dw_window_set_border(HWND handle, int border) { - WinSendMsg(handle, WM_SETBORDERSIZE, MPFROMSHORT(border), MPFROMSHORT(border)); - return 0; + WinSendMsg(handle, WM_SETBORDERSIZE, MPFROMSHORT(border), MPFROMSHORT(border)); + return 0; } /* @@ -3976,7 +3976,7 @@ */ void API dw_window_capture(HWND handle) { - WinSetCapture(HWND_DESKTOP, handle); + WinSetCapture(HWND_DESKTOP, handle); } /* @@ -3984,7 +3984,7 @@ */ void API dw_window_release(void) { - WinSetCapture(HWND_DESKTOP, NULLHANDLE); + WinSetCapture(HWND_DESKTOP, NULLHANDLE); } /* @@ -3994,7 +3994,7 @@ */ void API dw_window_track(HWND handle) { - WinSendMsg(handle, WM_TRACKFRAME, MPFROMSHORT(TF_MOVE), 0); + WinSendMsg(handle, WM_TRACKFRAME, MPFROMSHORT(TF_MOVE), 0); } /* @@ -4005,19 +4005,19 @@ */ void API dw_window_set_pointer(HWND handle, int pointertype) { - HPOINTER pointer = pointertype < 65535 ? - WinQuerySysPointer(HWND_DESKTOP, pointertype, FALSE) - : (HPOINTER)pointertype; - - if(!pointertype) - dw_window_set_data(handle, "_dw_pointer", 0); - else - { - WinSetPointer(HWND_DESKTOP, pointer); - - if(handle != HWND_DESKTOP) - dw_window_set_data(handle, "_dw_pointer", (void *)pointer); - } + HPOINTER pointer = pointertype < 65535 ? + WinQuerySysPointer(HWND_DESKTOP, pointertype, FALSE) + : (HPOINTER)pointertype; + + if(!pointertype) + dw_window_set_data(handle, "_dw_pointer", 0); + else + { + WinSetPointer(HWND_DESKTOP, pointer); + + if(handle != HWND_DESKTOP) + dw_window_set_data(handle, "_dw_pointer", (void *)pointer); + } } /* @@ -4029,45 +4029,45 @@ */ HWND API dw_window_new(HWND hwndOwner, char *title, ULONG flStyle) { - HWND hwndframe; - Box *newbox = calloc(1, sizeof(Box)); - WindowData *blah = calloc(1, sizeof(WindowData)); - ULONG winStyle = 0L; - - newbox->pad = 0; - newbox->type = DW_VERT; - newbox->count = 0; - - flStyle |= FCF_NOBYTEALIGN; - - if(flStyle & DW_FCF_TITLEBAR) - newbox->titlebar = 1; - else - flStyle |= FCF_TITLEBAR; - - if(!(flStyle & FCF_SHELLPOSITION)) - blah->flags |= DW_OS2_NEW_WINDOW; - - if(flStyle & WS_MAXIMIZED) - { - winStyle |= WS_MAXIMIZED; - flStyle &= ~WS_MAXIMIZED; - } - if(flStyle & WS_MINIMIZED) - { - winStyle |= WS_MINIMIZED; - flStyle &= ~WS_MINIMIZED; - } - - hwndframe = WinCreateStdWindow(hwndOwner, winStyle, &flStyle, ClassName, title, 0L, NULLHANDLE, 0L, &newbox->hwnd); - newbox->hwndtitle = WinWindowFromID(hwndframe, FID_TITLEBAR); - if(!newbox->titlebar && newbox->hwndtitle) - WinSetParent(newbox->hwndtitle, HWND_OBJECT, FALSE); - blah->oldproc = WinSubclassWindow(hwndframe, _sizeproc); - WinSetWindowPtr(hwndframe, QWP_USER, blah); - WinSetWindowPtr(newbox->hwnd, QWP_USER, newbox); - - return hwndframe; + HWND hwndframe; + Box *newbox = calloc(1, sizeof(Box)); + WindowData *blah = calloc(1, sizeof(WindowData)); + ULONG winStyle = 0L; + + newbox->pad = 0; + newbox->type = DW_VERT; + newbox->count = 0; + + flStyle |= FCF_NOBYTEALIGN; + + if(flStyle & DW_FCF_TITLEBAR) + newbox->titlebar = 1; + else + flStyle |= FCF_TITLEBAR; + + if(!(flStyle & FCF_SHELLPOSITION)) + blah->flags |= DW_OS2_NEW_WINDOW; + + if(flStyle & WS_MAXIMIZED) + { + winStyle |= WS_MAXIMIZED; + flStyle &= ~WS_MAXIMIZED; + } + if(flStyle & WS_MINIMIZED) + { + winStyle |= WS_MINIMIZED; + flStyle &= ~WS_MINIMIZED; + } + + hwndframe = WinCreateStdWindow(hwndOwner, winStyle, &flStyle, ClassName, title, 0L, NULLHANDLE, 0L, &newbox->hwnd); + newbox->hwndtitle = WinWindowFromID(hwndframe, FID_TITLEBAR); + if(!newbox->titlebar && newbox->hwndtitle) + WinSetParent(newbox->hwndtitle, HWND_OBJECT, FALSE); + blah->oldproc = WinSubclassWindow(hwndframe, _sizeproc); + WinSetWindowPtr(hwndframe, QWP_USER, blah); + WinSetWindowPtr(newbox->hwnd, QWP_USER, newbox); + + return hwndframe; } /* @@ -4078,29 +4078,29 @@ */ HWND API dw_box_new(int type, int pad) { - Box *newbox = calloc(1, sizeof(Box)); - - newbox->pad = pad; - newbox->type = type; - newbox->count = 0; + Box *newbox = calloc(1, sizeof(Box)); + + newbox->pad = pad; + newbox->type = type; + newbox->count = 0; newbox->grouphwnd = NULLHANDLE; - newbox->hwnd = WinCreateWindow(HWND_OBJECT, - WC_FRAME, - NULL, - WS_VISIBLE | WS_CLIPCHILDREN | - FS_NOBYTEALIGN, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - 0L, - NULL, - NULL); - - newbox->oldproc = WinSubclassWindow(newbox->hwnd, _controlproc); - WinSetWindowPtr(newbox->hwnd, QWP_USER, newbox); - dw_window_set_color(newbox->hwnd, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY); - return newbox->hwnd; + newbox->hwnd = WinCreateWindow(HWND_OBJECT, + WC_FRAME, + NULL, + WS_VISIBLE | WS_CLIPCHILDREN | + FS_NOBYTEALIGN, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + 0L, + NULL, + NULL); + + newbox->oldproc = WinSubclassWindow(newbox->hwnd, _controlproc); + WinSetWindowPtr(newbox->hwnd, QWP_USER, newbox); + dw_window_set_color(newbox->hwnd, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY); + return newbox->hwnd; } /* @@ -4112,40 +4112,40 @@ */ HWND API dw_groupbox_new(int type, int pad, char *title) { - Box *newbox = calloc(1, sizeof(Box)); - newbox->pad = pad; - newbox->type = type; - newbox->count = 0; - - newbox->hwnd = WinCreateWindow(HWND_OBJECT, - WC_FRAME, - NULL, - WS_VISIBLE | - FS_NOBYTEALIGN, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - 0L, - NULL, - NULL); - - newbox->grouphwnd = WinCreateWindow(newbox->hwnd, - WC_STATIC, - title, - WS_VISIBLE | SS_GROUPBOX | - WS_GROUP, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - 0L, - NULL, - NULL); - - WinSetWindowPtr(newbox->hwnd, QWP_USER, newbox); - dw_window_set_color(newbox->hwnd, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY); - dw_window_set_color(newbox->grouphwnd, DW_CLR_BLACK, DW_CLR_PALEGRAY); - dw_window_set_font(newbox->grouphwnd, DefaultFont); - return newbox->hwnd; + Box *newbox = calloc(1, sizeof(Box)); + newbox->pad = pad; + newbox->type = type; + newbox->count = 0; + + newbox->hwnd = WinCreateWindow(HWND_OBJECT, + WC_FRAME, + NULL, + WS_VISIBLE | + FS_NOBYTEALIGN, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + 0L, + NULL, + NULL); + + newbox->grouphwnd = WinCreateWindow(newbox->hwnd, + WC_STATIC, + title, + WS_VISIBLE | SS_GROUPBOX | + WS_GROUP, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + 0L, + NULL, + NULL); + + WinSetWindowPtr(newbox->hwnd, QWP_USER, newbox); + dw_window_set_color(newbox->hwnd, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY); + dw_window_set_color(newbox->grouphwnd, DW_CLR_BLACK, DW_CLR_PALEGRAY); + dw_window_set_font(newbox->grouphwnd, DefaultFont); + return newbox->hwnd; } /* @@ -4155,23 +4155,23 @@ */ HWND API dw_mdi_new(unsigned long id) { - HWND hwndframe; - ULONG back = CLR_DARKGRAY; - - hwndframe = WinCreateWindow(HWND_OBJECT, - WC_FRAME, - NULL, - WS_VISIBLE | WS_CLIPCHILDREN | - FS_NOBYTEALIGN, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - /* Make the MDI Client area the same color as Windows and Unix */ - WinSetPresParam(hwndframe, PP_BACKGROUNDCOLORINDEX, sizeof(ULONG), &back); - return hwndframe; + HWND hwndframe; + ULONG back = CLR_DARKGRAY; + + hwndframe = WinCreateWindow(HWND_OBJECT, + WC_FRAME, + NULL, + WS_VISIBLE | WS_CLIPCHILDREN | + FS_NOBYTEALIGN, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + /* Make the MDI Client area the same color as Windows and Unix */ + WinSetPresParam(hwndframe, PP_BACKGROUNDCOLORINDEX, sizeof(ULONG), &back); + return hwndframe; } /* @@ -4181,16 +4181,16 @@ */ HWND API dw_bitmap_new(ULONG id) { - return WinCreateWindow(HWND_OBJECT, - WC_STATIC, - NULL, - WS_VISIBLE | SS_TEXT, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); + return WinCreateWindow(HWND_OBJECT, + WC_STATIC, + NULL, + WS_VISIBLE | SS_TEXT, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); } /* @@ -4201,38 +4201,38 @@ */ HWND API dw_notebook_new(ULONG id, int top) { - ULONG flags; - HWND tmp; - - if(top) - flags = BKS_MAJORTABTOP; - else - flags = BKS_MAJORTABBOTTOM; - - tmp = WinCreateWindow(HWND_OBJECT, - WC_NOTEBOOK, - NULL, - WS_VISIBLE | + ULONG flags; + HWND tmp; + + if(top) + flags = BKS_MAJORTABTOP; + else + flags = BKS_MAJORTABBOTTOM; + + tmp = WinCreateWindow(HWND_OBJECT, + WC_NOTEBOOK, + NULL, + WS_VISIBLE | #ifdef BKS_TABBEDDIALOG - BKS_TABBEDDIALOG | + BKS_TABBEDDIALOG | #endif - flags, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - - /* Fix tab sizes on Warp 3 */ - if(!IS_WARP4()) - { - /* best sizes to be determined by trial and error */ - WinSendMsg(tmp, BKM_SETDIMENSIONS,MPFROM2SHORT(102, 28), MPFROMSHORT( BKA_MAJORTAB)); - } - - dw_window_set_font(tmp, DefaultFont); - return tmp; + flags, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + + /* Fix tab sizes on Warp 3 */ + if(!IS_WARP4()) + { + /* best sizes to be determined by trial and error */ + WinSendMsg(tmp, BKM_SETDIMENSIONS,MPFROM2SHORT(102, 28), MPFROMSHORT( BKA_MAJORTAB)); + } + + dw_window_set_font(tmp, DefaultFont); + return tmp; } /* @@ -4243,17 +4243,17 @@ */ HMENUI API dw_menu_new(ULONG id) { - HMENUI tmp = WinCreateWindow(HWND_OBJECT, - WC_MENU, - NULL, - WS_VISIBLE, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - return tmp; + HMENUI tmp = WinCreateWindow(HWND_OBJECT, + WC_MENU, + NULL, + WS_VISIBLE, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + return tmp; } /* @@ -4263,19 +4263,19 @@ */ HMENUI API dw_menubar_new(HWND location) { - HMENUI tmp = WinCreateWindow(location, - WC_MENU, - NULL, - WS_VISIBLE | MS_ACTIONBAR, - 0,0,2000,1000, - location, - HWND_TOP, - FID_MENU, - NULL, - NULL); - dw_window_set_data(tmp, "_dw_owner", (void *)location); - dw_window_set_data(tmp, "_dw_menubar", (void *)location); - return tmp; + HMENUI tmp = WinCreateWindow(location, + WC_MENU, + NULL, + WS_VISIBLE | MS_ACTIONBAR, + 0,0,2000,1000, + location, + HWND_TOP, + FID_MENU, + NULL, + NULL); + dw_window_set_data(tmp, "_dw_owner", (void *)location); + dw_window_set_data(tmp, "_dw_menubar", (void *)location); + return tmp; } /* @@ -4285,8 +4285,8 @@ */ void API dw_menu_destroy(HMENUI *menu) { - if(menu) - WinDestroyWindow(*menu); + if(menu) + WinDestroyWindow(*menu); } /* @@ -4450,12 +4450,12 @@ */ void API dw_menu_popup(HMENUI *menu, HWND parent, int x, int y) { - if(menu) - { - popup = parent; - dw_window_set_data(*menu, "_dw_popup", (void *)1); - WinPopupMenu(HWND_DESKTOP, parent, *menu, x, dw_screen_height() - y, 0, PU_KEYBOARD | PU_MOUSEBUTTON1 | PU_VCONSTRAIN | PU_HCONSTRAIN); - } + if(menu) + { + popup = parent; + dw_window_set_data(*menu, "_dw_popup", (void *)1); + WinPopupMenu(HWND_DESKTOP, parent, *menu, x, dw_screen_height() - y, 0, PU_KEYBOARD | PU_MOUSEBUTTON1 | PU_VCONSTRAIN | PU_HCONSTRAIN); + } } /* @@ -4466,14 +4466,14 @@ */ void API dw_pointer_query_pos(long *x, long *y) { - POINTL ptl; - - WinQueryPointerPos(HWND_DESKTOP, &ptl); - if(x && y) - { - *x = ptl.x; - *y = dw_screen_height() - ptl.y; - } + POINTL ptl; + + WinQueryPointerPos(HWND_DESKTOP, &ptl); + if(x && y) + { + *x = ptl.x; + *y = dw_screen_height() - ptl.y; + } } /* @@ -4484,7 +4484,7 @@ */ void API dw_pointer_set_pos(long x, long y) { - WinSetPointerPos(HWND_DESKTOP, x, dw_screen_height() - y); + WinSetPointerPos(HWND_DESKTOP, x, dw_screen_height() - y); } @@ -4496,24 +4496,24 @@ */ HWND API dw_container_new(ULONG id, int multi) { - WindowData *blah = calloc(1, sizeof(WindowData)); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_CONTAINER, - NULL, - WS_VISIBLE | CCS_READONLY | - (multi ? CCS_EXTENDSEL : CCS_SINGLESEL) | - CCS_AUTOPOSITION, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id ? id : (GlobalID++), - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _TreeProc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_data(tmp, "_dw_container", (void *)1); - return tmp; + WindowData *blah = calloc(1, sizeof(WindowData)); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_CONTAINER, + NULL, + WS_VISIBLE | CCS_READONLY | + (multi ? CCS_EXTENDSEL : CCS_SINGLESEL) | + CCS_AUTOPOSITION, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id ? id : (GlobalID++), + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _TreeProc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_data(tmp, "_dw_container", (void *)1); + return tmp; } /* @@ -4524,33 +4524,33 @@ */ HWND API dw_tree_new(ULONG id) { - CNRINFO cnrinfo; - WindowData *blah = calloc(1, sizeof(WindowData)); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_CONTAINER, - NULL, - WS_VISIBLE | CCS_READONLY | - CCS_SINGLESEL | CCS_AUTOPOSITION, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id ? id : (GlobalID++), - NULL, - NULL); - - cnrinfo.flWindowAttr = CV_TREE | CA_TREELINE; - cnrinfo.slBitmapOrIcon.cx = 16; - cnrinfo.slBitmapOrIcon.cy = 16; - cnrinfo.cyLineSpacing = 0; - cnrinfo.cxTreeIndent = 16; - cnrinfo.cxTreeLine = 1; - - WinSendMsg(tmp, CM_SETCNRINFO, &cnrinfo, MPFROMLONG(CMA_FLWINDOWATTR | CMA_SLBITMAPORICON | - CMA_LINESPACING | CMA_CXTREEINDENT | CMA_CXTREELINE)); - blah->oldproc = WinSubclassWindow(tmp, _TreeProc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - return tmp; + CNRINFO cnrinfo; + WindowData *blah = calloc(1, sizeof(WindowData)); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_CONTAINER, + NULL, + WS_VISIBLE | CCS_READONLY | + CCS_SINGLESEL | CCS_AUTOPOSITION, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id ? id : (GlobalID++), + NULL, + NULL); + + cnrinfo.flWindowAttr = CV_TREE | CA_TREELINE; + cnrinfo.slBitmapOrIcon.cx = 16; + cnrinfo.slBitmapOrIcon.cy = 16; + cnrinfo.cyLineSpacing = 0; + cnrinfo.cxTreeIndent = 16; + cnrinfo.cxTreeLine = 1; + + WinSendMsg(tmp, CM_SETCNRINFO, &cnrinfo, MPFROMLONG(CMA_FLWINDOWATTR | CMA_SLBITMAPORICON | + CMA_LINESPACING | CMA_CXTREEINDENT | CMA_CXTREELINE)); + blah->oldproc = WinSubclassWindow(tmp, _TreeProc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + return tmp; } /* @@ -4561,22 +4561,22 @@ */ HWND API dw_text_new(char *text, ULONG id) { - WindowData *blah = calloc(sizeof(WindowData), 1); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_STATIC, - text, - WS_VISIBLE | SS_TEXT, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _textproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); - return tmp; + WindowData *blah = calloc(sizeof(WindowData), 1); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_STATIC, + text, + WS_VISIBLE | SS_TEXT, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _textproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); + return tmp; } /* @@ -4587,22 +4587,22 @@ */ HWND API dw_status_text_new(char *text, ULONG id) { - WindowData *blah = calloc(sizeof(WindowData), 1); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_STATIC, - text, - WS_VISIBLE | SS_TEXT, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _statusproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); - return tmp; + WindowData *blah = calloc(sizeof(WindowData), 1); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_STATIC, + text, + WS_VISIBLE | SS_TEXT, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _statusproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); + return tmp; } #ifndef MLS_LIMITVSCROLL @@ -4616,24 +4616,24 @@ */ HWND API dw_mle_new(ULONG id) { - WindowData *blah = calloc(1, sizeof(WindowData)); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_MLE, - "", - WS_VISIBLE | - MLS_BORDER | MLS_IGNORETAB | - MLS_READONLY | MLS_VSCROLL | - MLS_LIMITVSCROLL, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _mleproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - return tmp; + WindowData *blah = calloc(1, sizeof(WindowData)); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_MLE, + "", + WS_VISIBLE | + MLS_BORDER | MLS_IGNORETAB | + MLS_READONLY | MLS_VSCROLL | + MLS_LIMITVSCROLL, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _mleproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + return tmp; } /* @@ -4645,23 +4645,23 @@ HWND API dw_entryfield_new(char *text, ULONG id) { - WindowData *blah = calloc(1, sizeof(WindowData)); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_ENTRYFIELD, - text, - WS_VISIBLE | ES_MARGIN | - ES_AUTOSCROLL | WS_TABSTOP, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _entryproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_WHITE); - return tmp; + WindowData *blah = calloc(1, sizeof(WindowData)); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_ENTRYFIELD, + text, + WS_VISIBLE | ES_MARGIN | + ES_AUTOSCROLL | WS_TABSTOP, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _entryproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_WHITE); + return tmp; } /* @@ -4672,23 +4672,23 @@ */ HWND API dw_entryfield_password_new(char *text, ULONG id) { - WindowData *blah = calloc(1, sizeof(WindowData)); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_ENTRYFIELD, - text, - WS_VISIBLE | ES_MARGIN | ES_UNREADABLE | - ES_AUTOSCROLL | WS_TABSTOP, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _entryproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_WHITE); - return tmp; + WindowData *blah = calloc(1, sizeof(WindowData)); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_ENTRYFIELD, + text, + WS_VISIBLE | ES_MARGIN | ES_UNREADABLE | + ES_AUTOSCROLL | WS_TABSTOP, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _entryproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_WHITE); + return tmp; } /* @@ -4699,38 +4699,38 @@ */ HWND API dw_combobox_new(char *text, ULONG id) { - WindowData *blah = calloc(1, sizeof(WindowData)); - HWND frame = dw_box_new(DW_HORZ, 0); - HWND tmp = WinCreateWindow(frame, - WC_COMBOBOX, - text, - WS_VISIBLE | CBS_DROPDOWN | WS_GROUP, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - HENUM henum = WinBeginEnumWindows(tmp); - HWND child, last = NULLHANDLE; - - while((child = WinGetNextWindow(henum)) != NULLHANDLE) - { - WindowData *moreblah = calloc(1, sizeof(WindowData)); - moreblah->oldproc = WinSubclassWindow(child, _comboentryproc); - WinSetWindowPtr(child, QWP_USER, moreblah); - dw_window_set_color(child, DW_CLR_BLACK, DW_CLR_WHITE); - last = child; - } - WinEndEnumWindows(henum); - blah->oldproc = WinSubclassWindow(tmp, _comboproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_WHITE); - dw_window_set_data(tmp, "_dw_comboentry", (void *)last); - dw_window_set_data(tmp, "_dw_combo_box", (void *)frame); - WinSetOwner(tmp, frame); - return tmp; + WindowData *blah = calloc(1, sizeof(WindowData)); + HWND frame = dw_box_new(DW_HORZ, 0); + HWND tmp = WinCreateWindow(frame, + WC_COMBOBOX, + text, + WS_VISIBLE | CBS_DROPDOWN | WS_GROUP, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + HENUM henum = WinBeginEnumWindows(tmp); + HWND child, last = NULLHANDLE; + + while((child = WinGetNextWindow(henum)) != NULLHANDLE) + { + WindowData *moreblah = calloc(1, sizeof(WindowData)); + moreblah->oldproc = WinSubclassWindow(child, _comboentryproc); + WinSetWindowPtr(child, QWP_USER, moreblah); + dw_window_set_color(child, DW_CLR_BLACK, DW_CLR_WHITE); + last = child; + } + WinEndEnumWindows(henum); + blah->oldproc = WinSubclassWindow(tmp, _comboproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_WHITE); + dw_window_set_data(tmp, "_dw_comboentry", (void *)last); + dw_window_set_data(tmp, "_dw_combo_box", (void *)frame); + WinSetOwner(tmp, frame); + return tmp; } /* @@ -4741,27 +4741,27 @@ */ HWND API dw_button_new(char *text, ULONG id) { - BubbleButton *bubble = calloc(sizeof(BubbleButton), 1); - - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_BUTTON, - text, - WS_VISIBLE, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - - bubble->id = id; - bubble->bubbletext[0] = '\0'; - bubble->pOldProc = WinSubclassWindow(tmp, _BtProc); - - WinSetWindowPtr(tmp, QWP_USER, bubble); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); - return tmp; + BubbleButton *bubble = calloc(sizeof(BubbleButton), 1); + + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_BUTTON, + text, + WS_VISIBLE, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + + bubble->id = id; + bubble->bubbletext[0] = '\0'; + bubble->pOldProc = WinSubclassWindow(tmp, _BtProc); + + WinSetWindowPtr(tmp, QWP_USER, bubble); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); + return tmp; } /* Function: GenResIDStr @@ -4771,29 +4771,29 @@ void _GenResIDStr(CHAR *buff, ULONG ulID) { - char *str; - int slen = 0; - - *buff++ = '#'; - - str = buff; - - do - { - *str++ = (ulID % 10) + '0'; - ulID /= 10; - slen++; - } - while(ulID); - - *str-- = 0; - - for(; str > buff; str--, buff++) - { - *buff ^= *str; - *str ^= *buff; - *buff ^= *str; - } + char *str; + int slen = 0; + + *buff++ = '#'; + + str = buff; + + do + { + *str++ = (ulID % 10) + '0'; + ulID /= 10; + slen++; + } + while(ulID); + + *str-- = 0; + + for(; str > buff; str--, buff++) + { + *buff ^= *str; + *str ^= *buff; + *buff ^= *str; + } } @@ -4805,41 +4805,41 @@ */ HWND API dw_bitmapbutton_new(char *text, ULONG id) { - char idbuf[256], *name = NULL; - HWND tmp; - BubbleButton *bubble = calloc(sizeof(BubbleButton), 1); - HPOINTER icon = WinLoadPointer(HWND_DESKTOP, 0L, id); - - if(!icon) - { - name = idbuf; - _GenResIDStr(idbuf, id); - } - - tmp = WinCreateWindow(HWND_OBJECT, - WC_BUTTON, - name, - WS_VISIBLE | BS_PUSHBUTTON | - BS_NOPOINTERFOCUS | BS_AUTOSIZE | - (icon ? 0 : BS_BITMAP), - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - - bubble->id = id; - strncpy(bubble->bubbletext, text, BUBBLE_HELP_MAX - 1); - bubble->bubbletext[BUBBLE_HELP_MAX - 1] = '\0'; - bubble->pOldProc = WinSubclassWindow(tmp, _BtProc); - - WinSetWindowPtr(tmp, QWP_USER, bubble); - - if(icon) - dw_window_set_data(tmp, "_dw_button_icon", (void *)icon); - dw_window_set_data(tmp, "_dw_bitmapbutton", (void *)1); - return tmp; + char idbuf[256], *name = NULL; + HWND tmp; + BubbleButton *bubble = calloc(sizeof(BubbleButton), 1); + HPOINTER icon = WinLoadPointer(HWND_DESKTOP, 0L, id); + + if(!icon) + { + name = idbuf; + _GenResIDStr(idbuf, id); + } + + tmp = WinCreateWindow(HWND_OBJECT, + WC_BUTTON, + name, + WS_VISIBLE | BS_PUSHBUTTON | + BS_NOPOINTERFOCUS | BS_AUTOSIZE | + (icon ? 0 : BS_BITMAP), + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + + bubble->id = id; + strncpy(bubble->bubbletext, text, BUBBLE_HELP_MAX - 1); + bubble->bubbletext[BUBBLE_HELP_MAX - 1] = '\0'; + bubble->pOldProc = WinSubclassWindow(tmp, _BtProc); + + WinSetWindowPtr(tmp, QWP_USER, bubble); + + if(icon) + dw_window_set_data(tmp, "_dw_button_icon", (void *)icon); + dw_window_set_data(tmp, "_dw_bitmapbutton", (void *)1); + return tmp; } /* @@ -5054,26 +5054,26 @@ */ HWND API dw_spinbutton_new(char *text, ULONG id) { - WindowData *blah = calloc(sizeof(WindowData), 1); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_SPINBUTTON, - text, - WS_VISIBLE | SPBS_MASTER, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - HWND entry = _find_entryfield(tmp); - blah->oldproc = WinSubclassWindow(tmp, _entryproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - blah = calloc(sizeof(WindowData), 1); - blah->oldproc = WinSubclassWindow(entry, _spinentryproc); - WinSetWindowPtr(entry, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(entry, DW_CLR_BLACK, DW_CLR_WHITE); - return tmp; + WindowData *blah = calloc(sizeof(WindowData), 1); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_SPINBUTTON, + text, + WS_VISIBLE | SPBS_MASTER, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + HWND entry = _find_entryfield(tmp); + blah->oldproc = WinSubclassWindow(tmp, _entryproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + blah = calloc(sizeof(WindowData), 1); + blah->oldproc = WinSubclassWindow(entry, _spinentryproc); + WinSetWindowPtr(entry, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(entry, DW_CLR_BLACK, DW_CLR_WHITE); + return tmp; } /* @@ -5084,23 +5084,23 @@ */ HWND API dw_radiobutton_new(char *text, ULONG id) { - WindowData *blah = calloc(sizeof(WindowData), 1); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_BUTTON, - text, - WS_VISIBLE | - BS_AUTORADIOBUTTON, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _entryproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); - return tmp; + WindowData *blah = calloc(sizeof(WindowData), 1); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_BUTTON, + text, + WS_VISIBLE | + BS_AUTORADIOBUTTON, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _entryproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); + return tmp; } @@ -5113,28 +5113,28 @@ */ HWND API dw_slider_new(int vertical, int increments, ULONG id) { - WindowData *blah = calloc(1, sizeof(WindowData)); - SLDCDATA sldcData = { 0, 0, 0, 0, 0 }; - HWND tmp; - - sldcData.cbSize = sizeof(SLDCDATA); + WindowData *blah = calloc(1, sizeof(WindowData)); + SLDCDATA sldcData = { 0, 0, 0, 0, 0 }; + HWND tmp; + + sldcData.cbSize = sizeof(SLDCDATA); sldcData.usScale1Increments = increments; - tmp = WinCreateWindow(HWND_OBJECT, - WC_SLIDER, - "", - WS_VISIBLE | SLS_SNAPTOINCREMENT | - (vertical ? SLS_VERTICAL : SLS_HORIZONTAL), - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - &sldcData, - NULL); - - blah->oldproc = WinSubclassWindow(tmp, _entryproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - return tmp; + tmp = WinCreateWindow(HWND_OBJECT, + WC_SLIDER, + "", + WS_VISIBLE | SLS_SNAPTOINCREMENT | + (vertical ? SLS_VERTICAL : SLS_HORIZONTAL), + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + &sldcData, + NULL); + + blah->oldproc = WinSubclassWindow(tmp, _entryproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + return tmp; } /* @@ -5146,17 +5146,17 @@ */ HWND API dw_scrollbar_new(int vertical, ULONG id) { - return WinCreateWindow(HWND_OBJECT, - WC_SCROLLBAR, - "", - WS_VISIBLE | SBS_AUTOTRACK | - (vertical ? SBS_VERT : SBS_HORZ), - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id ? id : (GlobalID++), - NULL, - NULL); + return WinCreateWindow(HWND_OBJECT, + WC_SCROLLBAR, + "", + WS_VISIBLE | SBS_AUTOTRACK | + (vertical ? SBS_VERT : SBS_HORZ), + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id ? id : (GlobalID++), + NULL, + NULL); } /* @@ -5166,22 +5166,22 @@ */ HWND API dw_percent_new(ULONG id) { - WindowData *blah = calloc(1, sizeof(WindowData)); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_SLIDER, - "", - WS_VISIBLE | SLS_READONLY - | SLS_RIBBONSTRIP, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _percentproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_disable(tmp); - return tmp; + WindowData *blah = calloc(1, sizeof(WindowData)); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_SLIDER, + "", + WS_VISIBLE | SLS_READONLY + | SLS_RIBBONSTRIP, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _percentproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_disable(tmp); + return tmp; } /* @@ -5192,24 +5192,24 @@ */ HWND API dw_checkbox_new(char *text, ULONG id) { - BubbleButton *bubble = calloc(sizeof(BubbleButton), 1); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_BUTTON, - text, - WS_VISIBLE | BS_AUTOCHECKBOX, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - bubble->id = id; - bubble->bubbletext[0] = '\0'; - bubble->pOldProc = WinSubclassWindow(tmp, _BtProc); - WinSetWindowPtr(tmp, QWP_USER, bubble); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); - return tmp; + BubbleButton *bubble = calloc(sizeof(BubbleButton), 1); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_BUTTON, + text, + WS_VISIBLE | BS_AUTOCHECKBOX, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + bubble->id = id; + bubble->bubbletext[0] = '\0'; + bubble->pOldProc = WinSubclassWindow(tmp, _BtProc); + WinSetWindowPtr(tmp, QWP_USER, bubble); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); + return tmp; } /* @@ -5220,23 +5220,23 @@ */ HWND API dw_listbox_new(ULONG id, int multi) { - WindowData *blah = calloc(sizeof(WindowData), 1); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_LISTBOX, - NULL, - WS_VISIBLE | LS_NOADJUSTPOS | - (multi ? LS_MULTIPLESEL : 0), - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id ? id : (GlobalID++), - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _entryproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_WHITE); - return tmp; + WindowData *blah = calloc(sizeof(WindowData), 1); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_LISTBOX, + NULL, + WS_VISIBLE | LS_NOADJUSTPOS | + (multi ? LS_MULTIPLESEL : 0), + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id ? id : (GlobalID++), + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _entryproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_WHITE); + return tmp; } /* @@ -5247,8 +5247,8 @@ */ void API dw_window_set_icon(HWND handle, ULONG id) { - HPOINTER icon = id < 65536 ? WinLoadPointer(HWND_DESKTOP,NULLHANDLE,id) : (HPOINTER)id; - WinSendMsg(handle, WM_SETICON, (MPARAM)icon, 0); + HPOINTER icon = id < 65536 ? WinLoadPointer(HWND_DESKTOP,NULLHANDLE,id) : (HPOINTER)id; + WinSendMsg(handle, WM_SETICON, (MPARAM)icon, 0); } /* Internal function to load a bitmap from a file and return handles @@ -5256,104 +5256,104 @@ */ int _load_bitmap_file(char *file, HWND handle, HBITMAP *hbm, HDC *hdc, HPS *hps, unsigned long *width, unsigned long *height) { - HFILE BitmapFileHandle = NULLHANDLE; /* handle for the file */ - ULONG OpenAction = 0; - PBYTE BitmapFileBegin; /* pointer to the first byte of bitmap data */ - FILESTATUS BitmapStatus; - ULONG cbRead; - PBITMAPFILEHEADER2 pBitmapFileHeader; - PBITMAPINFOHEADER2 pBitmapInfoHeader; - ULONG ScanLines, ulFlags; - HPS hps1; - HDC hdc1; - SIZEL sizl = { 0, 0 }; - - /* open bitmap file */ - DosOpen(file, &BitmapFileHandle, &OpenAction, 0L, - FILE_ARCHIVED | FILE_NORMAL | FILE_READONLY, - OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS, - OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY | - OPEN_FLAGS_NOINHERIT, 0L); - - if(!BitmapFileHandle) - return 0; - - /* find out how big the file is */ - DosQueryFileInfo(BitmapFileHandle, 1, &BitmapStatus, - sizeof(BitmapStatus)); - - /* allocate memory to load the bitmap */ - DosAllocMem((PPVOID)&BitmapFileBegin, (ULONG)BitmapStatus.cbFile, - PAG_READ | PAG_WRITE | PAG_COMMIT); - - /* read bitmap file into memory buffer */ - DosRead(BitmapFileHandle, (PVOID)BitmapFileBegin, - BitmapStatus.cbFile, &cbRead); - - /* access first bytes as bitmap header */ - pBitmapFileHeader = (PBITMAPFILEHEADER2)BitmapFileBegin; - - /* check if it's a valid bitmap data file */ - if((pBitmapFileHeader->usType != BFT_BITMAPARRAY) && - (pBitmapFileHeader->usType != BFT_BMAP)) - { - /* free memory of bitmap file buffer */ - DosFreeMem(BitmapFileBegin); - /* close the bitmap file */ - DosClose(BitmapFileHandle); - return 0; - } - - /* check if it's a file with multiple bitmaps */ - if(pBitmapFileHeader->usType == BFT_BITMAPARRAY) - { - /* we'll just use the first bitmap and ignore the others */ - pBitmapFileHeader = &(((PBITMAPARRAYFILEHEADER2)BitmapFileBegin)->bfh2); - } - - /* set pointer to bitmap information block */ - pBitmapInfoHeader = &pBitmapFileHeader->bmp2; - - /* find out if it's the new 2.0 format or the old format */ - /* and query number of lines */ - if(pBitmapInfoHeader->cbFix == sizeof(BITMAPINFOHEADER)) - { - *height = ScanLines = (ULONG)((PBITMAPINFOHEADER)pBitmapInfoHeader)->cy; - *width = (ULONG)((PBITMAPINFOHEADER)pBitmapInfoHeader)->cx; - } - else - { - *height = ScanLines = pBitmapInfoHeader->cy; - *width = pBitmapInfoHeader->cx; - } - - /* now we need a presentation space, get it from static control */ - hps1 = WinGetPS(handle); - - hdc1 = GpiQueryDevice(hps1); - ulFlags = GpiQueryPS(hps1, &sizl); - - *hdc = DevOpenDC(dwhab, OD_MEMORY, "*", 0L, NULL, hdc1); - *hps = GpiCreatePS (dwhab, *hdc, &sizl, ulFlags | GPIA_ASSOC); - - /* create bitmap now using the parameters from the info block */ - *hbm = GpiCreateBitmap(*hps, pBitmapInfoHeader, 0L, NULL, NULL); - - /* select the new bitmap into presentation space */ - GpiSetBitmap(*hps, *hbm); - - /* now copy the bitmap data into the bitmap */ - GpiSetBitmapBits(*hps, 0L, ScanLines, - BitmapFileBegin + pBitmapFileHeader->offBits, - (PBITMAPINFO2)pBitmapInfoHeader); - - WinReleasePS(hps1); - - /* free memory of bitmap file buffer */ - DosFreeMem(BitmapFileBegin); - /* close the bitmap file */ - DosClose(BitmapFileHandle); - return 1; + HFILE BitmapFileHandle = NULLHANDLE; /* handle for the file */ + ULONG OpenAction = 0; + PBYTE BitmapFileBegin; /* pointer to the first byte of bitmap data */ + FILESTATUS BitmapStatus; + ULONG cbRead; + PBITMAPFILEHEADER2 pBitmapFileHeader; + PBITMAPINFOHEADER2 pBitmapInfoHeader; + ULONG ScanLines, ulFlags; + HPS hps1; + HDC hdc1; + SIZEL sizl = { 0, 0 }; + + /* open bitmap file */ + DosOpen(file, &BitmapFileHandle, &OpenAction, 0L, + FILE_ARCHIVED | FILE_NORMAL | FILE_READONLY, + OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS, + OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY | + OPEN_FLAGS_NOINHERIT, 0L); + + if(!BitmapFileHandle) + return 0; + + /* find out how big the file is */ + DosQueryFileInfo(BitmapFileHandle, 1, &BitmapStatus, + sizeof(BitmapStatus)); + + /* allocate memory to load the bitmap */ + DosAllocMem((PPVOID)&BitmapFileBegin, (ULONG)BitmapStatus.cbFile, + PAG_READ | PAG_WRITE | PAG_COMMIT); + + /* read bitmap file into memory buffer */ + DosRead(BitmapFileHandle, (PVOID)BitmapFileBegin, + BitmapStatus.cbFile, &cbRead); + + /* access first bytes as bitmap header */ + pBitmapFileHeader = (PBITMAPFILEHEADER2)BitmapFileBegin; + + /* check if it's a valid bitmap data file */ + if((pBitmapFileHeader->usType != BFT_BITMAPARRAY) && + (pBitmapFileHeader->usType != BFT_BMAP)) + { + /* free memory of bitmap file buffer */ + DosFreeMem(BitmapFileBegin); + /* close the bitmap file */ + DosClose(BitmapFileHandle); + return 0; + } + + /* check if it's a file with multiple bitmaps */ + if(pBitmapFileHeader->usType == BFT_BITMAPARRAY) + { + /* we'll just use the first bitmap and ignore the others */ + pBitmapFileHeader = &(((PBITMAPARRAYFILEHEADER2)BitmapFileBegin)->bfh2); + } + + /* set pointer to bitmap information block */ + pBitmapInfoHeader = &pBitmapFileHeader->bmp2; + + /* find out if it's the new 2.0 format or the old format */ + /* and query number of lines */ + if(pBitmapInfoHeader->cbFix == sizeof(BITMAPINFOHEADER)) + { + *height = ScanLines = (ULONG)((PBITMAPINFOHEADER)pBitmapInfoHeader)->cy; + *width = (ULONG)((PBITMAPINFOHEADER)pBitmapInfoHeader)->cx; + } + else + { + *height = ScanLines = pBitmapInfoHeader->cy; + *width = pBitmapInfoHeader->cx; + } + + /* now we need a presentation space, get it from static control */ + hps1 = WinGetPS(handle); + + hdc1 = GpiQueryDevice(hps1); + ulFlags = GpiQueryPS(hps1, &sizl); + + *hdc = DevOpenDC(dwhab, OD_MEMORY, "*", 0L, NULL, hdc1); + *hps = GpiCreatePS (dwhab, *hdc, &sizl, ulFlags | GPIA_ASSOC); + + /* create bitmap now using the parameters from the info block */ + *hbm = GpiCreateBitmap(*hps, pBitmapInfoHeader, 0L, NULL, NULL); + + /* select the new bitmap into presentation space */ + GpiSetBitmap(*hps, *hbm); + + /* now copy the bitmap data into the bitmap */ + GpiSetBitmapBits(*hps, 0L, ScanLines, + BitmapFileBegin + pBitmapFileHeader->offBits, + (PBITMAPINFO2)pBitmapInfoHeader); + + WinReleasePS(hps1); + + /* free memory of bitmap file buffer */ + DosFreeMem(BitmapFileBegin); + /* close the bitmap file */ + DosClose(BitmapFileHandle); + return 1; } /* @@ -5496,7 +5496,7 @@ */ void API dw_window_set_text(HWND handle, char *text) { - WinSetWindowText(handle, text); + WinSetWindowText(handle, text); } /* @@ -5508,12 +5508,12 @@ */ char * API dw_window_get_text(HWND handle) { - int len = WinQueryWindowTextLength(handle); - char *tempbuf = calloc(1, len + 2); - - WinQueryWindowText(handle, len + 1, tempbuf); - - return tempbuf; + int len = WinQueryWindowTextLength(handle); + char *tempbuf = calloc(1, len + 2); + + WinQueryWindowText(handle, len + 1, tempbuf); + + return tempbuf; } /* @@ -5523,47 +5523,47 @@ */ void API dw_window_disable(HWND handle) { - char tmpbuf[100]; - - if(dw_window_get_data(handle, "_dw_disabled")) - return; - - WinQueryClassName(handle, 99, tmpbuf); - dw_window_set_data(handle, "_dw_disabled", (void *)1); - - if(tmpbuf[0] == '#') - { - int val = atoi(&tmpbuf[1]); - HWND hwnd; - - switch(val) - { - case 2: - case 6: - case 10: - case 32: - case 7: - hwnd = _find_entryfield(handle); - _dw_window_set_color(hwnd ? hwnd : handle, DW_CLR_BLACK, DW_CLR_PALEGRAY); - dw_signal_connect(hwnd ? hwnd : handle, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_null_key), (void *)100); + char tmpbuf[100]; + + if(dw_window_get_data(handle, "_dw_disabled")) + return; + + WinQueryClassName(handle, 99, tmpbuf); + dw_window_set_data(handle, "_dw_disabled", (void *)1); + + if(tmpbuf[0] == '#') + { + int val = atoi(&tmpbuf[1]); + HWND hwnd; + + switch(val) + { + case 2: + case 6: + case 10: + case 32: + case 7: + hwnd = _find_entryfield(handle); + _dw_window_set_color(hwnd ? hwnd : handle, DW_CLR_BLACK, DW_CLR_PALEGRAY); + dw_signal_connect(hwnd ? hwnd : handle, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_null_key), (void *)100); if(val == 2) - dw_signal_connect(handle, DW_SIGNAL_BUTTON_PRESS, DW_SIGNAL_FUNC(_null_key), (void *)100); - if(hwnd) - dw_window_set_data(hwnd, "_dw_disabled", (void *)1); - return; - case 3: - if(dw_window_get_data(handle, "_dw_bitmapbutton") && !dw_window_get_data(handle, "_dw_hpixmap")) - WinEnableWindow(handle, FALSE); - else if(dw_window_get_data(handle, "_dw_bitmapbutton") && dw_window_get_data(handle, "_dw_hpixmap_disabled")) - WinInvalidateRect(handle, NULL, FALSE); - else - _dw_window_set_color(handle, DW_CLR_DARKGRAY, DW_CLR_PALEGRAY); - dw_signal_connect(handle, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_null_key), (void *)100); - dw_signal_connect(handle, DW_SIGNAL_BUTTON_PRESS, DW_SIGNAL_FUNC(_null_key), (void *)100); - return; - } - } - WinEnableWindow(handle, FALSE); + dw_signal_connect(handle, DW_SIGNAL_BUTTON_PRESS, DW_SIGNAL_FUNC(_null_key), (void *)100); + if(hwnd) + dw_window_set_data(hwnd, "_dw_disabled", (void *)1); + return; + case 3: + if(dw_window_get_data(handle, "_dw_bitmapbutton") && !dw_window_get_data(handle, "_dw_hpixmap")) + WinEnableWindow(handle, FALSE); + else if(dw_window_get_data(handle, "_dw_bitmapbutton") && dw_window_get_data(handle, "_dw_hpixmap_disabled")) + WinInvalidateRect(handle, NULL, FALSE); + else + _dw_window_set_color(handle, DW_CLR_DARKGRAY, DW_CLR_PALEGRAY); + dw_signal_connect(handle, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_null_key), (void *)100); + dw_signal_connect(handle, DW_SIGNAL_BUTTON_PRESS, DW_SIGNAL_FUNC(_null_key), (void *)100); + return; + } + } + WinEnableWindow(handle, FALSE); } /* @@ -5573,19 +5573,19 @@ */ void API dw_window_enable(HWND handle) { - ULONG fore = (ULONG)dw_window_get_data(handle, "_dw_fore"); - ULONG back = (ULONG)dw_window_get_data(handle, "_dw_back"); - HWND hwnd = _find_entryfield(handle); - - dw_window_set_data(handle, "_dw_disabled", 0); - if(hwnd) - dw_window_set_data(hwnd, "_dw_disabled", 0); - if(fore && back) - _dw_window_set_color(hwnd ? hwnd : handle, fore-1, back-1); - dw_signal_disconnect_by_data(handle, (void *)100); - WinEnableWindow(handle, TRUE); - if(dw_window_get_data(handle, "_dw_bitmapbutton") && dw_window_get_data(handle, "_dw_hpixmap_disabled")) - WinInvalidateRect(handle, NULL, FALSE); + ULONG fore = (ULONG)dw_window_get_data(handle, "_dw_fore"); + ULONG back = (ULONG)dw_window_get_data(handle, "_dw_back"); + HWND hwnd = _find_entryfield(handle); + + dw_window_set_data(handle, "_dw_disabled", 0); + if(hwnd) + dw_window_set_data(hwnd, "_dw_disabled", 0); + if(fore && back) + _dw_window_set_color(hwnd ? hwnd : handle, fore-1, back-1); + dw_signal_disconnect_by_data(handle, (void *)100); + WinEnableWindow(handle, TRUE); + if(dw_window_get_data(handle, "_dw_bitmapbutton") && dw_window_get_data(handle, "_dw_hpixmap_disabled")) + WinInvalidateRect(handle, NULL, FALSE); } /* @@ -5596,31 +5596,31 @@ */ HWND API dw_window_from_id(HWND handle, int id) { - HENUM henum; - HWND child; - char tmpbuf[100]; - - henum = WinBeginEnumWindows(handle); - while((child = WinGetNextWindow(henum)) != NULLHANDLE) - { - int windowid = WinQueryWindowUShort(child, QWS_ID); - HWND found; - - WinQueryClassName(child, 99, tmpbuf); - - /* If the child is a box (frame) then recurse into it */ - if(strncmp(tmpbuf, "#1", 3)==0) - if((found = dw_window_from_id(child, id)) != NULLHANDLE) - return found; - - if(windowid && windowid == id) - { - WinEndEnumWindows(henum); - return child; - } - } - WinEndEnumWindows(henum); - return NULLHANDLE; + HENUM henum; + HWND child; + char tmpbuf[100]; + + henum = WinBeginEnumWindows(handle); + while((child = WinGetNextWindow(henum)) != NULLHANDLE) + { + int windowid = WinQueryWindowUShort(child, QWS_ID); + HWND found; + + WinQueryClassName(child, 99, tmpbuf); + + /* If the child is a box (frame) then recurse into it */ + if(strncmp(tmpbuf, "#1", 3)==0) + if((found = dw_window_from_id(child, id)) != NULLHANDLE) + return found; + + if(windowid && windowid == id) + { + WinEndEnumWindows(henum); + return child; + } + } + WinEndEnumWindows(henum); + return NULLHANDLE; } /* @@ -5636,91 +5636,91 @@ */ void API dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) { - char *funcname = "dw_box_pack_end()"; - - /* - * If you try and pack an item into itself VERY bad things can happen; like at least an - * infinite loop on GTK! Lets be safe! - */ - if(box == item) - { - dw_messagebox(funcname, DW_MB_OK|DW_MB_ERROR, "Danger! Danger! Will Robinson; box and item are the same!"); - return; - } - - if(WinWindowFromID(box, FID_CLIENT)) - { - box = WinWindowFromID(box, FID_CLIENT); - hsize = TRUE; - vsize = TRUE; - } - _dw_box_pack_end(box, item, width, height, hsize, vsize, pad, funcname); + char *funcname = "dw_box_pack_end()"; + + /* + * If you try and pack an item into itself VERY bad things can happen; like at least an + * infinite loop on GTK! Lets be safe! + */ + if(box == item) + { + dw_messagebox(funcname, DW_MB_OK|DW_MB_ERROR, "Danger! Danger! Will Robinson; box and item are the same!"); + return; + } + + if(WinWindowFromID(box, FID_CLIENT)) + { + box = WinWindowFromID(box, FID_CLIENT); + hsize = TRUE; + vsize = TRUE; + } + _dw_box_pack_end(box, item, width, height, hsize, vsize, pad, funcname); } void _dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad, char *functionname) { - Box *thisbox = WinQueryWindowPtr(box, QWP_USER); - - if(thisbox) - { - int z; - Item *tmpitem, *thisitem = thisbox->items; - char tmpbuf[100]; - HWND frame = (HWND)dw_window_get_data(item, "_dw_combo_box"); - - tmpitem = malloc(sizeof(Item)*(thisbox->count+1)); - - for(z=0;z<thisbox->count;z++) - { - tmpitem[z+1] = thisitem[z]; - } - - WinQueryClassName(item, 99, tmpbuf); - - if(vsize && !height) - height = 1; - if(hsize && !width) - width = 1; - - if(strncmp(tmpbuf, "#1", 3)==0) - tmpitem[0].type = TYPEBOX; - else - { - if ( width == 0 && hsize == FALSE ) - dw_messagebox(functionname, DW_MB_OK|DW_MB_ERROR, "Width and expand Horizonal both unset for box: %x item: %x",box,item); - if ( height == 0 && vsize == FALSE ) - dw_messagebox(functionname, DW_MB_OK|DW_MB_ERROR, "Height and expand Vertical both unset for box: %x item: %x",box,item); - - tmpitem[0].type = TYPEITEM; - } - - tmpitem[0].hwnd = item; - tmpitem[0].origwidth = tmpitem[0].width = width; - tmpitem[0].origheight = tmpitem[0].height = height; - tmpitem[0].pad = pad; - if(hsize) - tmpitem[0].hsize = SIZEEXPAND; - else - tmpitem[0].hsize = SIZESTATIC; - - if(vsize) - tmpitem[0].vsize = SIZEEXPAND; - else - tmpitem[0].vsize = SIZESTATIC; - - thisbox->items = tmpitem; - - if(thisbox->count) - free(thisitem); - - thisbox->count++; - - WinQueryClassName(item, 99, tmpbuf); - /* Don't set the ownership if it's an entryfield or spinbutton */ - if(strncmp(tmpbuf, "#6", 3)!=0 && strncmp(tmpbuf, "#32", 4)!=0 && strncmp(tmpbuf, "#2", 3)!=0) - WinSetOwner(item, box); - WinSetParent(frame ? frame : item, box, FALSE); - } + Box *thisbox = WinQueryWindowPtr(box, QWP_USER); + + if(thisbox) + { + int z; + Item *tmpitem, *thisitem = thisbox->items; + char tmpbuf[100]; + HWND frame = (HWND)dw_window_get_data(item, "_dw_combo_box"); + + tmpitem = malloc(sizeof(Item)*(thisbox->count+1)); + + for(z=0;z<thisbox->count;z++) + { + tmpitem[z+1] = thisitem[z]; + } + + WinQueryClassName(item, 99, tmpbuf); + + if(vsize && !height) + height = 1; + if(hsize && !width) + width = 1; + + if(strncmp(tmpbuf, "#1", 3)==0) + tmpitem[0].type = TYPEBOX; + else + { + if ( width == 0 && hsize == FALSE ) + dw_messagebox(functionname, DW_MB_OK|DW_MB_ERROR, "Width and expand Horizonal both unset for box: %x item: %x",box,item); + if ( height == 0 && vsize == FALSE ) + dw_messagebox(functionname, DW_MB_OK|DW_MB_ERROR, "Height and expand Vertical both unset for box: %x item: %x",box,item); + + tmpitem[0].type = TYPEITEM; + } + + tmpitem[0].hwnd = item; + tmpitem[0].origwidth = tmpitem[0].width = width; + tmpitem[0].origheight = tmpitem[0].height = height; + tmpitem[0].pad = pad; + if(hsize) + tmpitem[0].hsize = SIZEEXPAND; + else + tmpitem[0].hsize = SIZESTATIC; + + if(vsize) + tmpitem[0].vsize = SIZEEXPAND; + else + tmpitem[0].vsize = SIZESTATIC; + + thisbox->items = tmpitem; + + if(thisbox->count) + free(thisitem); + + thisbox->count++; + + WinQueryClassName(item, 99, tmpbuf); + /* Don't set the ownership if it's an entryfield or spinbutton */ + if(strncmp(tmpbuf, "#6", 3)!=0 && strncmp(tmpbuf, "#32", 4)!=0 && strncmp(tmpbuf, "#2", 3)!=0) + WinSetOwner(item, box); + WinSetParent(frame ? frame : item, box, FALSE); + } } /* @@ -5732,7 +5732,7 @@ */ void API dw_window_set_size(HWND handle, ULONG width, ULONG height) { - WinSetWindowPos(handle, NULLHANDLE, 0, 0, width, height, SWP_SHOW | SWP_SIZE); + WinSetWindowPos(handle, NULLHANDLE, 0, 0, width, height, SWP_SHOW | SWP_SIZE); } /* @@ -5740,7 +5740,7 @@ */ int API dw_screen_width(void) { - return WinQuerySysValue(HWND_DESKTOP,SV_CXSCREEN); + return WinQuerySysValue(HWND_DESKTOP,SV_CXSCREEN); } /* @@ -5748,18 +5748,18 @@ */ int API dw_screen_height(void) { - return WinQuerySysValue(HWND_DESKTOP,SV_CYSCREEN); + return WinQuerySysValue(HWND_DESKTOP,SV_CYSCREEN); } /* This should return the current color depth */ unsigned long API dw_color_depth_get(void) { - HDC hdc = WinOpenWindowDC(HWND_DESKTOP); - long colors; - - DevQueryCaps(hdc, CAPS_COLOR_BITCOUNT, 1, &colors); - DevCloseDC(hdc); - return colors; + HDC hdc = WinOpenWindowDC(HWND_DESKTOP); + long colors; + + DevQueryCaps(hdc, CAPS_COLOR_BITCOUNT, 1, &colors); + DevCloseDC(hdc); + return colors; } @@ -5772,9 +5772,9 @@ */ void API dw_window_set_pos(HWND handle, LONG x, LONG y) { - int myy = _get_frame_height(handle) - (y + _get_height(handle)); - - WinSetWindowPos(handle, NULLHANDLE, x, myy, 0, 0, SWP_MOVE); + int myy = _get_frame_height(handle) - (y + _get_height(handle)); + + WinSetWindowPos(handle, NULLHANDLE, x, myy, 0, 0, SWP_MOVE); } /* @@ -5788,9 +5788,9 @@ */ void API dw_window_set_pos_size(HWND handle, LONG x, LONG y, ULONG width, ULONG height) { - int myy = _get_frame_height(handle) - (y + height); - - WinSetWindowPos(handle, NULLHANDLE, x, myy, width, height, SWP_MOVE | SWP_SIZE | SWP_SHOW); + int myy = _get_frame_height(handle) - (y + height); + + WinSetWindowPos(handle, NULLHANDLE, x, myy, width, height, SWP_MOVE | SWP_SIZE | SWP_SHOW); } /* @@ -5804,16 +5804,16 @@ */ void API dw_window_get_pos_size(HWND handle, LONG *x, LONG *y, ULONG *width, ULONG *height) { - SWP swp; - WinQueryWindowPos(handle, &swp); - if(x) - *x = swp.x; - if(y) - *y = _get_frame_height(handle) - (swp.y + swp.cy); - if(width) - *width = swp.cx; - if(height) - *height = swp.cy; + SWP swp; + WinQueryWindowPos(handle, &swp); + if(x) + *x = swp.x; + if(y) + *y = _get_frame_height(handle) - (swp.y + swp.cy); + if(width) + *width = swp.cx; + if(height) + *height = swp.cy; } /* @@ -5825,7 +5825,7 @@ */ void API dw_window_set_style(HWND handle, ULONG style, ULONG mask) { - WinSetWindowBits(handle, QWL_STYLE, style, mask); + WinSetWindowBits(handle, QWL_STYLE, style, mask); } /* @@ -5837,8 +5837,8 @@ */ unsigned long API dw_notebook_page_new(HWND handle, ULONG flags, int front) { - return (ULONG)WinSendMsg(handle, BKM_INSERTPAGE, 0L, - MPFROM2SHORT((BKA_STATUSTEXTON | BKA_AUTOPAGESIZE | BKA_MAJOR | flags), front ? BKA_FIRST : BKA_LAST)); + return (ULONG)WinSendMsg(handle, BKM_INSERTPAGE, 0L, + MPFROM2SHORT((BKA_STATUSTEXTON | BKA_AUTOPAGESIZE | BKA_MAJOR | flags), front ? BKA_FIRST : BKA_LAST)); } /* @@ -5849,8 +5849,8 @@ */ void API dw_notebook_page_destroy(HWND handle, unsigned int pageid) { - WinSendMsg(handle, BKM_DELETEPAGE, - MPFROMLONG(pageid), (MPARAM)BKA_SINGLE); + WinSendMsg(handle, BKM_DELETEPAGE, + MPFROMLONG(pageid), (MPARAM)BKA_SINGLE); } /* @@ -5860,7 +5860,7 @@ */ unsigned long API dw_notebook_page_get(HWND handle) { - return (unsigned long)WinSendMsg(handle, BKM_QUERYPAGEID,0L, MPFROM2SHORT(BKA_TOP, BKA_MAJOR)); + return (unsigned long)WinSendMsg(handle, BKM_QUERYPAGEID,0L, MPFROM2SHORT(BKA_TOP, BKA_MAJOR)); } /* @@ -5871,7 +5871,7 @@ */ void API dw_notebook_page_set(HWND handle, unsigned int pageid) { - WinSendMsg(handle, BKM_TURNTOPAGE, MPFROMLONG(pageid), 0L); + WinSendMsg(handle, BKM_TURNTOPAGE, MPFROMLONG(pageid), 0L); } /* @@ -5883,8 +5883,8 @@ */ void API dw_notebook_page_set_text(HWND handle, ULONG pageid, char *text) { - WinSendMsg(handle, BKM_SETTABTEXT, - MPFROMLONG(pageid), MPFROMP(text)); + WinSendMsg(handle, BKM_SETTABTEXT, + MPFROMLONG(pageid), MPFROMP(text)); } /* @@ -5896,8 +5896,8 @@ */ void API dw_notebook_page_set_status_text(HWND handle, ULONG pageid, char *text) { - WinSendMsg(handle, BKM_SETSTATUSLINETEXT, - MPFROMLONG(pageid), MPFROMP(text)); + WinSendMsg(handle, BKM_SETSTATUSLINETEXT, + MPFROMLONG(pageid), MPFROMP(text)); } /* @@ -5909,12 +5909,12 @@ */ void API dw_notebook_pack(HWND handle, ULONG pageid, HWND page) { - HWND tmpbox = dw_box_new(DW_VERT, 0); - - dw_box_pack_start(tmpbox, page, 0, 0, TRUE, TRUE, 0); - WinSubclassWindow(tmpbox, _wndproc); - WinSendMsg(handle, BKM_SETPAGEWINDOWHWND, - MPFROMLONG(pageid), MPFROMHWND(tmpbox)); + HWND tmpbox = dw_box_new(DW_VERT, 0); + + dw_box_pack_start(tmpbox, page, 0, 0, TRUE, TRUE, 0); + WinSubclassWindow(tmpbox, _wndproc); + WinSendMsg(handle, BKM_SETPAGEWINDOWHWND, + MPFROMLONG(pageid), MPFROMHWND(tmpbox)); } /* @@ -5925,10 +5925,25 @@ */ void API dw_listbox_append(HWND handle, char *text) { - WinSendMsg(handle, - LM_INSERTITEM, - MPFROMSHORT(LIT_END), - MPFROMP(text)); + WinSendMsg(handle, + LM_INSERTITEM, + MPFROMSHORT(LIT_END), + MPFROMP(text)); +} + +/* + * Inserts the specified text into the listbox's (or combobox) entry list. + * Parameters: + * handle: Handle to the listbox to be inserted into. + * text: Text to insert into listbox. + * pos: 0-based position to insert text + */ +void API dw_listbox_insert(HWND handle, char *text, int pos) +{ + WinSendMsg(handle, + LM_INSERTITEM, + MPFROMSHORT(pos), + MPFROMP(text)); } /* @@ -5940,12 +5955,12 @@ */ void API dw_listbox_list_append(HWND handle, char **text, int count) { - int i; - for(i=0;i<count;i++) - WinSendMsg(handle, - LM_INSERTITEM, - MPFROMSHORT(LIT_END), - MPFROMP(text[i])); + int i; + for(i=0;i<count;i++) + WinSendMsg(handle, + LM_INSERTITEM, + MPFROMSHORT(LIT_END), + MPFROMP(text[i])); } /* @@ -5955,8 +5970,8 @@ */ void API dw_listbox_clear(HWND handle) { - WinSendMsg(handle, - LM_DELETEALL, 0L, 0L); + WinSendMsg(handle, + LM_DELETEALL, 0L, 0L); } /* @@ -5966,8 +5981,8 @@ */ int API dw_listbox_count(HWND handle) { - return (int)WinSendMsg(handle, - LM_QUERYITEMCOUNT,0L, 0L); + return (int)WinSendMsg(handle, + LM_QUERYITEMCOUNT,0L, 0L); } /* @@ -5978,10 +5993,10 @@ */ void API dw_listbox_set_top(HWND handle, int top) { - WinSendMsg(handle, - LM_SETTOPINDEX, - MPFROMSHORT(top), - 0L); + WinSendMsg(handle, + LM_SETTOPINDEX, + MPFROMSHORT(top), + 0L); } /* @@ -5994,7 +6009,7 @@ */ void API dw_listbox_get_text(HWND handle, unsigned int index, char *buffer, unsigned int length) { - WinSendMsg(handle, LM_QUERYITEMTEXT, MPFROM2SHORT(index, length), (MPARAM)buffer); + WinSendMsg(handle, LM_QUERYITEMTEXT, MPFROM2SHORT(index, length), (MPARAM)buffer); } /* @@ -6006,7 +6021,7 @@ */ void API dw_listbox_set_text(HWND handle, unsigned int index, char *buffer) { - WinSendMsg(handle, LM_SETITEMTEXT, MPFROMSHORT(index), (MPARAM)buffer); + WinSendMsg(handle, LM_SETITEMTEXT, MPFROMSHORT(index), (MPARAM)buffer); } /* @@ -6016,10 +6031,10 @@ */ unsigned int API dw_listbox_selected(HWND handle) { - return (unsigned int)WinSendMsg(handle, - LM_QUERYSELECTION, - MPFROMSHORT(LIT_CURSOR), - 0); + return (unsigned int)WinSendMsg(handle, + LM_QUERYSELECTION, + MPFROMSHORT(LIT_CURSOR), + 0); } /* @@ -6030,17 +6045,17 @@ */ int API dw_listbox_selected_multi(HWND handle, int where) { - int place = where; - - if(where == -1) - place = LIT_FIRST; - - place = (int)WinSendMsg(handle, - LM_QUERYSELECTION, - MPFROMSHORT(place),0L); - if(place == LIT_NONE) - return -1; - return place; + int place = where; + + if(where == -1) + place = LIT_FIRST; + + place = (int)WinSendMsg(handle, + LM_QUERYSELECTION, + MPFROMSHORT(place),0L); + if(place == LIT_NONE) + return -1; + return place; } /* @@ -6052,15 +6067,15 @@ */ void API dw_listbox_select(HWND handle, int index, int state) { - char tmpbuf[100]; - - WinSendMsg(handle, LM_SELECTITEM, MPFROMSHORT(index), (MPARAM)state); - - WinQueryClassName(handle, 99, tmpbuf); - - /* If we are setting a combobox call the event handler manually */ - if(strncmp(tmpbuf, "#6", 3)==0) - _run_event(handle, WM_CONTROL, MPFROM2SHORT(0, LN_SELECT), (MPARAM)handle); + char tmpbuf[100]; + + WinSendMsg(handle, LM_SELECTITEM, MPFROMSHORT(index), (MPARAM)state); + + WinQueryClassName(handle, 99, tmpbuf); + + /* If we are setting a combobox call the event handler manually */ + if(strncmp(tmpbuf, "#6", 3)==0) + _run_event(handle, WM_CONTROL, MPFROM2SHORT(0, LN_SELECT), (MPARAM)handle); } /* @@ -6071,7 +6086,7 @@ */ void API dw_listbox_delete(HWND handle, int index) { - WinSendMsg(handle, LM_DELETEITEM, MPFROMSHORT(index), 0); + WinSendMsg(handle, LM_DELETEITEM, MPFROMSHORT(index), 0); } /* @@ -6083,33 +6098,33 @@ */ unsigned int API dw_mle_import(HWND handle, char *buffer, int startpoint) { - unsigned long point = startpoint; - PBYTE mlebuf; - - /* Work around 64K limit */ - if(!DosAllocMem((PPVOID) &mlebuf, 65536, PAG_COMMIT | PAG_READ | PAG_WRITE | OBJ_TILE)) - { - int amount, len = strlen(buffer), written = 0; - - while(written < len) - { - if((len - written) > 65535) - amount = 65535; - else - amount = len - written; - - memcpy(mlebuf, &buffer[written], amount); - mlebuf[amount] = '\0'; - - WinSendMsg(handle, MLM_SETIMPORTEXPORT, MPFROMP(mlebuf), MPFROMLONG(amount+1)); - WinSendMsg(handle, MLM_IMPORT, MPFROMP(&point), MPFROMLONG(amount + 1)); - dw_mle_delete(handle, point, 1); - - written += amount; - } - DosFreeMem(mlebuf); - } - return point - 1; + unsigned long point = startpoint; + PBYTE mlebuf; + + /* Work around 64K limit */ + if(!DosAllocMem((PPVOID) &mlebuf, 65536, PAG_COMMIT | PAG_READ | PAG_WRITE | OBJ_TILE)) + { + int amount, len = strlen(buffer), written = 0; + + while(written < len) + { + if((len - written) > 65535) + amount = 65535; + else + amount = len - written; + + memcpy(mlebuf, &buffer[written], amount); + mlebuf[amount] = '\0'; + + WinSendMsg(handle, MLM_SETIMPORTEXPORT, MPFROMP(mlebuf), MPFROMLONG(amount+1)); + WinSendMsg(handle, MLM_IMPORT, MPFROMP(&point), MPFROMLONG(amount + 1)); + dw_mle_delete(handle, point, 1); + + written += amount; + } + DosFreeMem(mlebuf); + } + return point - 1; } /* @@ -6122,34 +6137,34 @@ */ void API dw_mle_export(HWND handle, char *buffer, int startpoint, int length) { - PBYTE mlebuf; - - /* Work around 64K limit */ - if(!DosAllocMem((PPVOID) &mlebuf, 65535, PAG_COMMIT | PAG_READ | PAG_WRITE | OBJ_TILE)) - { - int amount, copied, written = 0; - - while(written < length) - { - if((length - written) > 65535) - amount = 65535; - else - amount = length - written; - - WinSendMsg(handle, MLM_SETIMPORTEXPORT, MPFROMP(mlebuf), MPFROMLONG(amount)); - copied = (int)WinSendMsg(handle, MLM_EXPORT, MPFROMP(&startpoint), MPFROMLONG(&amount)); - - if(copied) - { - memcpy(&buffer[written], mlebuf, copied); - - written += copied; - } - else - break; - } - DosFreeMem(mlebuf); - } + PBYTE mlebuf; + + /* Work around 64K limit */ + if(!DosAllocMem((PPVOID) &mlebuf, 65535, PAG_COMMIT | PAG_READ | PAG_WRITE | OBJ_TILE)) + { + int amount, copied, written = 0; + + while(written < length) + { + if((length - written) > 65535) + amount = 65535; + else + amount = length - written; + + WinSendMsg(handle, MLM_SETIMPORTEXPORT, MPFROMP(mlebuf), MPFROMLONG(amount)); + copied = (int)WinSendMsg(handle, MLM_EXPORT, MPFROMP(&startpoint), MPFROMLONG(&amount)); + + if(copied) + { + memcpy(&buffer[written], mlebuf, copied); + + written += copied; + } + else + break; + } + DosFreeMem(mlebuf); + } } /* @@ -6161,10 +6176,10 @@ */ void API dw_mle_get_size(HWND handle, unsigned long *bytes, unsigned long *lines) { - if(bytes) - *bytes = (unsigned long)WinSendMsg(handle, MLM_QUERYTEXTLENGTH, 0, 0); - if(lines) - *lines = (unsigned long)WinSendMsg(handle, MLM_QUERYLINECOUNT, 0, 0); + if(bytes) + *bytes = (unsigned long)WinSendMsg(handle, MLM_QUERYTEXTLENGTH, 0, 0); + if(lines) + *lines = (unsigned long)WinSendMsg(handle, MLM_QUERYLINECOUNT, 0, 0); } /* @@ -6176,18 +6191,18 @@ */ void API dw_mle_delete(HWND handle, int startpoint, int length) { - char *buf = malloc(length+1); - int z, dellen = length; - - dw_mle_export(handle, buf, startpoint, length); - - for(z=0;z<length-1;z++) - { - if(strncmp(&buf[z], "\r\n", 2) == 0) - dellen--; - } - WinSendMsg(handle, MLM_DELETE, MPFROMLONG(startpoint), MPFROMLONG(dellen)); - free(buf); + char *buf = malloc(length+1); + int z, dellen = length; + + dw_mle_export(handle, buf, startpoint, length); + + for(z=0;z<length-1;z++) + { + if(strncmp(&buf[z], "\r\n", 2) == 0) + dellen--; + } + WinSendMsg(handle, MLM_DELETE, MPFROMLONG(startpoint), MPFROMLONG(dellen)); + free(buf); } /* @@ -6197,11 +6212,11 @@ */ void API dw_mle_clear(HWND handle) { - unsigned long bytes; - - dw_mle_get_size(handle, &bytes, NULL); - - WinSendMsg(handle, MLM_DELETE, MPFROMLONG(0), MPFROMLONG(bytes)); + unsigned long bytes; + + dw_mle_get_size(handle, &bytes, NULL); + + WinSendMsg(handle, MLM_DELETE, MPFROMLONG(0), MPFROMLONG(bytes)); } /* @@ -6212,8 +6227,8 @@ */ void API dw_mle_set_visible(HWND handle, int line) { - int tmppnt = (int)WinSendMsg(handle, MLM_CHARFROMLINE, MPFROMLONG(line), 0); - WinSendMsg(handle, MLM_SETSEL, MPFROMLONG(tmppnt), MPFROMLONG(tmppnt)); + int tmppnt = (int)WinSendMsg(handle, MLM_CHARFROMLINE, MPFROMLONG(line), 0); + WinSendMsg(handle, MLM_SETSEL, MPFROMLONG(tmppnt), MPFROMLONG(tmppnt)); } /* @@ -6224,7 +6239,7 @@ */ void API dw_mle_set_editable(HWND handle, int state) { - WinSendMsg(handle, MLM_SETREADONLY, MPFROMLONG(state ? FALSE : TRUE), 0); + WinSendMsg(handle, MLM_SETREADONLY, MPFROMLONG(state ? FALSE : TRUE), 0); } /* @@ -6235,7 +6250,7 @@ */ void API dw_mle_set_word_wrap(HWND handle, int state) { - WinSendMsg(handle, MLM_SETWRAP, MPFROMLONG(state), 0); + WinSendMsg(handle, MLM_SETWRAP, MPFROMLONG(state), 0); } /* @@ -6246,7 +6261,7 @@ */ void API dw_mle_set_cursor(HWND handle, int point) { - WinSendMsg(handle, MLM_SETSEL, MPFROMLONG(point), MPFROMLONG(point)); + WinSendMsg(handle, MLM_SETSEL, MPFROMLONG(point), MPFROMLONG(point)); } /* @@ -6259,22 +6274,22 @@ */ int API dw_mle_search(HWND handle, char *text, int point, unsigned long flags) { - MLE_SEARCHDATA msd; - - /* This code breaks with structure packing set to 1 (/Sp1 in VAC) - * if this is needed we need to add a pragma here. - */ - msd.cb = sizeof(msd); - msd.pchFind = text; - msd.pchReplace = NULL; - msd.cchFind = strlen(text); - msd.cchReplace = 0; - msd.iptStart = point; - msd.iptStop = -1; - - if(WinSendMsg(handle, MLM_SEARCH, MPFROMLONG(MLFSEARCH_SELECTMATCH | flags), (MPARAM)&msd)) - return (int)WinSendMsg(handle, MLM_QUERYSEL,(MPARAM)MLFQS_MAXSEL, 0); - return 0; + MLE_SEARCHDATA msd; + + /* This code breaks with structure packing set to 1 (/Sp1 in VAC) + * if this is needed we need to add a pragma here. + */ + msd.cb = sizeof(msd); + msd.pchFind = text; + msd.pchReplace = NULL; + msd.cchFind = strlen(text); + msd.cchReplace = 0; + msd.iptStart = point; + msd.iptStop = -1; + + if(WinSendMsg(handle, MLM_SEARCH, MPFROMLONG(MLFSEARCH_SELECTMATCH | flags), (MPARAM)&msd)) + return (int)WinSendMsg(handle, MLM_QUERYSEL,(MPARAM)MLFQS_MAXSEL, 0); + return 0; } /* @@ -6284,7 +6299,7 @@ */ void API dw_mle_freeze(HWND handle) { - WinSendMsg(handle, MLM_DISABLEREFRESH, 0, 0); + WinSendMsg(handle, MLM_DISABLEREFRESH, 0, 0); } /* @@ -6294,7 +6309,7 @@ */ void API dw_mle_thaw(HWND handle) { - WinSendMsg(handle, MLM_ENABLEREFRESH, 0, 0); + WinSendMsg(handle, MLM_ENABLEREFRESH, 0, 0); } /* @@ -6305,14 +6320,14 @@ */ void API dw_percent_set_pos(HWND handle, unsigned int position) { - int range = _dw_percent_get_range(handle); - int mypos = ((float)position/100)*range; - - if(range) - { - _dw_int_set(handle, mypos); - WinSendMsg(handle, SLM_SETSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION,SMA_RANGEVALUE), (MPARAM)mypos); - } + int range = _dw_percent_get_range(handle); + int mypos = ((float)position/100)*range; + + if(range) + { + _dw_int_set(handle, mypos); + WinSendMsg(handle, SLM_SETSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION,SMA_RANGEVALUE), (MPARAM)mypos); + } } /* @@ -6322,7 +6337,7 @@ */ unsigned int API dw_slider_get_pos(HWND handle) { - return (unsigned int)WinSendMsg(handle, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0); + return (unsigned int)WinSendMsg(handle, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0); } /* @@ -6333,8 +6348,8 @@ */ void API dw_slider_set_pos(HWND handle, unsigned int position) { - dw_window_set_data(handle, "_dw_slider_value", (void *)position); - WinSendMsg(handle, SLM_SETSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), (MPARAM)position); + dw_window_set_data(handle, "_dw_slider_value", (void *)position); + WinSendMsg(handle, SLM_SETSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), (MPARAM)position); } /* @@ -6344,7 +6359,7 @@ */ unsigned int API dw_scrollbar_get_pos(HWND handle) { - return (unsigned int)WinSendMsg(handle, SBM_QUERYPOS, 0, 0); + return (unsigned int)WinSendMsg(handle, SBM_QUERYPOS, 0, 0); } /* @@ -6355,8 +6370,8 @@ */ void API dw_scrollbar_set_pos(HWND handle, unsigned int position) { - dw_window_set_data(handle, "_dw_scrollbar_value", (void *)position); - WinSendMsg(handle, SBM_SETPOS, (MPARAM)position, 0); + dw_window_set_data(handle, "_dw_scrollbar_value", (void *)position); + WinSendMsg(handle, SBM_SETPOS, (MPARAM)position, 0); } /* @@ -6368,10 +6383,10 @@ */ void API dw_scrollbar_set_range(HWND handle, unsigned int range, unsigned int visible) { - unsigned int pos = (unsigned int)dw_window_get_data(handle, "_dw_scrollbar_value"); - WinSendMsg(handle, SBM_SETSCROLLBAR, (MPARAM)pos, MPFROM2SHORT(0, (unsigned short)range - visible)); - WinSendMsg(handle, SBM_SETTHUMBSIZE, MPFROM2SHORT((unsigned short)visible, range), 0); - dw_window_set_data(handle, "_dw_scrollbar_visible", (void *)visible); + unsigned int pos = (unsigned int)dw_window_get_data(handle, "_dw_scrollbar_value"); + WinSendMsg(handle, SBM_SETSCROLLBAR, (MPARAM)pos, MPFROM2SHORT(0, (unsigned short)range - visible)); + WinSendMsg(handle, SBM_SETTHUMBSIZE, MPFROM2SHORT((unsigned short)visible, range), 0); + dw_window_set_data(handle, "_dw_scrollbar_visible", (void *)visible); } /* @@ -6382,7 +6397,7 @@ */ void API dw_spinbutton_set_pos(HWND handle, long position) { - WinSendMsg(handle, SPBM_SETCURRENTVALUE, MPFROMLONG((long)position), 0L); + WinSendMsg(handle, SPBM_SETCURRENTVALUE, MPFROMLONG((long)position), 0L); } /* @@ -6394,7 +6409,7 @@ */ void API dw_spinbutton_set_limits(HWND handle, long upper, long lower) { - WinSendMsg(handle, SPBM_SETLIMITS, MPFROMLONG(upper), MPFROMLONG(lower)); + WinSendMsg(handle, SPBM_SETLIMITS, MPFROMLONG(upper), MPFROMLONG(lower)); } /* @@ -6405,7 +6420,7 @@ */ void API dw_entryfield_set_limit(HWND handle, ULONG limit) { - WinSendMsg(handle, EM_SETTEXTLIMIT, (MPARAM)limit, (MPARAM)0); + WinSendMsg(handle, EM_SETTEXTLIMIT, (MPARAM)limit, (MPARAM)0); } @@ -6416,9 +6431,9 @@ */ long API dw_spinbutton_get_pos(HWND handle) { - long tmpval = 0L; - - WinSendMsg(handle, SPBM_QUERYVALUE, (MPARAM)&tmpval,0L); + long tmpval = 0L; + + WinSendMsg(handle, SPBM_QUERYVALUE, (MPARAM)&tmpval,0L); return tmpval; } @@ -6429,7 +6444,7 @@ */ int API dw_checkbox_get(HWND handle) { - return (int)WinSendMsg(handle,BM_QUERYCHECK,0,0); + return (int)WinSendMsg(handle,BM_QUERYCHECK,0,0); } /* @@ -6440,7 +6455,7 @@ */ void API dw_checkbox_set(HWND handle, int value) { - WinSendMsg(handle,BM_SETCHECK,MPFROMSHORT(value),0); + WinSendMsg(handle,BM_SETCHECK,MPFROMSHORT(value),0); } /* @@ -6455,51 +6470,51 @@ */ HTREEITEM API dw_tree_insert_after(HWND handle, HTREEITEM item, char *title, unsigned long icon, HTREEITEM parent, void *itemdata) { - ULONG cbExtra; - PCNRITEM pci; - RECORDINSERT ri; - - if(!item) - item = (HTREEITEM)CMA_FIRST; - - /* Calculate extra bytes needed for each record besides that needed for the - * MINIRECORDCORE structure - */ - - cbExtra = sizeof(CNRITEM) - sizeof(MINIRECORDCORE); - - /* Allocate memory for the parent record */ - - if((pci = (PCNRITEM)_dw_send_msg(handle, CM_ALLOCRECORD, MPFROMLONG(cbExtra), MPFROMSHORT(1), 0)) == 0) - return 0; - - /* Fill in the parent record data */ - - pci->rc.cb = sizeof(MINIRECORDCORE); - pci->rc.pszIcon = strdup(title); - pci->rc.hptrIcon = icon; - - pci->hptrIcon = icon; - pci->user = itemdata; - pci->parent = parent; - - memset(&ri, 0, sizeof(RECORDINSERT)); - - ri.cb = sizeof(RECORDINSERT); - ri.pRecordOrder = (PRECORDCORE)item; - ri.zOrder = (USHORT)CMA_TOP; - ri.cRecordsInsert = 1; - ri.fInvalidateRecord = TRUE; - - /* We are about to insert the child records. Set the parent record to be - * the one we just inserted. - */ - ri.pRecordParent = (PRECORDCORE)parent; - - /* Insert the record */ - WinSendMsg(handle, CM_INSERTRECORD, MPFROMP(pci), MPFROMP(&ri)); - - return (HTREEITEM)pci; + ULONG cbExtra; + PCNRITEM pci; + RECORDINSERT ri; + + if(!item) + item = (HTREEITEM)CMA_FIRST; + + /* Calculate extra bytes needed for each record besides that needed for the + * MINIRECORDCORE structure + */ + + cbExtra = sizeof(CNRITEM) - sizeof(MINIRECORDCORE); + + /* Allocate memory for the parent record */ + + if((pci = (PCNRITEM)_dw_send_msg(handle, CM_ALLOCRECORD, MPFROMLONG(cbExtra), MPFROMSHORT(1), 0)) == 0) + return 0; + + /* Fill in the parent record data */ + + pci->rc.cb = sizeof(MINIRECORDCORE); + pci->rc.pszIcon = strdup(title); + pci->rc.hptrIcon = icon; + + pci->hptrIcon = icon; + pci->user = itemdata; + pci->parent = parent; + + memset(&ri, 0, sizeof(RECORDINSERT)); + + ri.cb = sizeof(RECORDINSERT); + ri.pRecordOrder = (PRECORDCORE)item; + ri.zOrder = (USHORT)CMA_TOP; + ri.cRecordsInsert = 1; + ri.fInvalidateRecord = TRUE; + + /* We are about to insert the child records. Set the parent record to be + * the one we just inserted. + */ + ri.pRecordParent = (PRECORDCORE)parent; + + /* Insert the record */ + WinSendMsg(handle, CM_INSERTRECORD, MPFROMP(pci), MPFROMP(&ri)); + + return (HTREEITEM)pci; } /* @@ -6513,7 +6528,7 @@ */ HTREEITEM API dw_tree_insert(HWND handle, char *title, unsigned long icon, HTREEITEM parent, void *itemdata) { - return dw_tree_insert_after(handle, (HTREEITEM)CMA_END, title, icon, parent, itemdata); + return dw_tree_insert_after(handle, (HTREEITEM)CMA_END, title, icon, parent, itemdata); } /* @@ -6526,20 +6541,20 @@ */ void API dw_tree_item_change(HWND handle, HTREEITEM item, char *title, unsigned long icon) { - PCNRITEM pci = (PCNRITEM)item; - - if(!pci) - return; - - if(pci->rc.pszIcon) - free(pci->rc.pszIcon); - - pci->rc.pszIcon = strdup(title); - pci->rc.hptrIcon = icon; - - pci->hptrIcon = icon; - - WinSendMsg(handle, CM_INVALIDATERECORD, (MPARAM)&pci, MPFROM2SHORT(1, CMA_TEXTCHANGED)); + PCNRITEM pci = (PCNRITEM)item; + + if(!pci) + return; + + if(pci->rc.pszIcon) + free(pci->rc.pszIcon); + + pci->rc.pszIcon = strdup(title); + pci->rc.hptrIcon = icon; + + pci->hptrIcon = icon; + + WinSendMsg(handle, CM_INVALIDATERECORD, (MPARAM)&pci, MPFROM2SHORT(1, CMA_TEXTCHANGED)); } /* @@ -6550,12 +6565,12 @@ */ char * API dw_tree_get_title(HWND handle, HTREEITEM item) { - PCNRITEM pci = (PCNRITEM)item; - - handle = handle; /* keep compiler happy */ - if(pci) - return pci->rc.pszIcon; - return NULL; + PCNRITEM pci = (PCNRITEM)item; + + handle = handle; /* keep compiler happy */ + if(pci) + return pci->rc.pszIcon; + return NULL; } /* @@ -6566,12 +6581,12 @@ */ HTREEITEM API dw_tree_get_parent(HWND handle, HTREEITEM item) { - PCNRITEM pci = (PCNRITEM)item; - - handle = handle; /* keep compiler happy */ - if(pci) - return pci->parent; - return (HTREEITEM)0; + PCNRITEM pci = (PCNRITEM)item; + + handle = handle; /* keep compiler happy */ + if(pci) + return pci->parent; + return (HTREEITEM)0; } /* @@ -6583,13 +6598,13 @@ */ void API dw_tree_item_set_data(HWND handle, HTREEITEM item, void *itemdata) { - PCNRITEM pci = (PCNRITEM)item; - - handle = handle; /* keep compiler happy */ - if(!pci) - return; - - pci->user = itemdata; + PCNRITEM pci = (PCNRITEM)item; + + handle = handle; /* keep compiler happy */ + if(!pci) + return; + + pci->user = itemdata; } /* @@ -6600,12 +6615,12 @@ */ void * API dw_tree_item_get_data(HWND handle, HTREEITEM item) { - PCNRITEM pci = (PCNRITEM)item; - - handle = handle; /* keep compiler happy */ - if(!pci) - return NULL; - return pci->user; + PCNRITEM pci = (PCNRITEM)item; + + handle = handle; /* keep compiler happy */ + if(!pci) + return NULL; + return pci->user; } /* @@ -6616,17 +6631,17 @@ */ void API dw_tree_item_select(HWND handle, HTREEITEM item) { - PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); - - while(pCore) - { - if(pCore->flRecordAttr & CRA_SELECTED) - WinSendMsg(handle, CM_SETRECORDEMPHASIS, (MPARAM)pCore, MPFROM2SHORT(FALSE, CRA_SELECTED | CRA_CURSORED)); - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); - } - WinSendMsg(handle, CM_SETRECORDEMPHASIS, (MPARAM)item, MPFROM2SHORT(TRUE, CRA_SELECTED | CRA_CURSORED)); - lastitem = 0; - lasthcnr = 0; + PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); + + while(pCore) + { + if(pCore->flRecordAttr & CRA_SELECTED) + WinSendMsg(handle, CM_SETRECORDEMPHASIS, (MPARAM)pCore, MPFROM2SHORT(FALSE, CRA_SELECTED | CRA_CURSORED)); + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); + } + WinSendMsg(handle, CM_SETRECORDEMPHASIS, (MPARAM)item, MPFROM2SHORT(TRUE, CRA_SELECTED | CRA_CURSORED)); + lastitem = 0; + lasthcnr = 0; } /* @@ -6636,7 +6651,7 @@ */ void API dw_tree_clear(HWND handle) { - dw_container_clear(handle, TRUE); + dw_container_clear(handle, TRUE); } /* @@ -6647,7 +6662,7 @@ */ void API dw_tree_item_expand(HWND handle, HTREEITEM item) { - WinSendMsg(handle, CM_EXPANDTREE, MPFROMP(item), 0); + WinSendMsg(handle, CM_EXPANDTREE, MPFROMP(item), 0); } /* @@ -6658,7 +6673,7 @@ */ void API dw_tree_item_collapse(HWND handle, HTREEITEM item) { - WinSendMsg(handle, CM_COLLAPSETREE, MPFROMP(item), 0); + WinSendMsg(handle, CM_COLLAPSETREE, MPFROMP(item), 0); } /* @@ -6669,25 +6684,25 @@ */ void API dw_tree_item_delete(HWND handle, HTREEITEM item) { - PCNRITEM pci = (PCNRITEM)item; - - if(!item) - return; - - if(pci->rc.pszIcon) - { - free(pci->rc.pszIcon); - pci->rc.pszIcon = 0; - } - - WinSendMsg(handle, CM_REMOVERECORD, (MPARAM)&pci, MPFROM2SHORT(1, CMA_INVALIDATE | CMA_FREE)); + PCNRITEM pci = (PCNRITEM)item; + + if(!item) + return; + + if(pci->rc.pszIcon) + { + free(pci->rc.pszIcon); + pci->rc.pszIcon = 0; + } + + WinSendMsg(handle, CM_REMOVERECORD, (MPARAM)&pci, MPFROM2SHORT(1, CMA_INVALIDATE | CMA_FREE)); } /* Some OS/2 specific container structs */ typedef struct _containerinfo { - int count; - void *data; - HWND handle; + int count; + void *data; + HWND handle; } ContainerInfo; /* @@ -6702,93 +6717,93 @@ */ int API dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator) { - PFIELDINFO details, first, left = NULL; - FIELDINFOINSERT detin; - CNRINFO cnri; - int z; - ULONG size = sizeof(RECORDCORE); - ULONG *offStruct = malloc(count * sizeof(ULONG)); - ULONG *tempflags = malloc((count+1) * sizeof(ULONG)); - WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); - ULONG *oldflags = blah ? blah->data : 0; - - if(!offStruct || !tempflags) - return FALSE; - - memcpy(tempflags, flags, count * sizeof(ULONG)); - tempflags[count] = 0; - - blah->data = tempflags; - blah->flags = separator; - - if(oldflags) - free(oldflags); - - while((first = (PFIELDINFO)WinSendMsg(handle, CM_QUERYDETAILFIELDINFO, 0, MPFROMSHORT(CMA_FIRST))) != NULL) - { - WinSendMsg(handle, CM_REMOVEDETAILFIELDINFO, (MPARAM)&first, MPFROM2SHORT(1, CMA_FREE)); - } - - /* Figure out the offsets to the items in the struct */ - for(z=0;z<count;z++) - { - offStruct[z] = size; - if(flags[z] & DW_CFA_BITMAPORICON) - size += sizeof(HPOINTER); - else if(flags[z] & DW_CFA_STRING) - size += sizeof(char *); - else if(flags[z] & DW_CFA_ULONG) - size += sizeof(ULONG); - else if(flags[z] & DW_CFA_DATE) - size += sizeof(CDATE); - else if(flags[z] & DW_CFA_TIME) - size += sizeof(CTIME); - } - - first = details = (PFIELDINFO)WinSendMsg(handle, CM_ALLOCDETAILFIELDINFO, MPFROMLONG(count), 0L); - - if(!first) - { - free(offStruct); - return FALSE; - } - - for(z=0;z<count;z++) - { - if(z==separator-1) - left=details; - details->cb = sizeof(FIELDINFO); - details->flData = flags[z]; - details->flTitle = CFA_FITITLEREADONLY; - details->pTitleData = titles[z]; - details->offStruct = offStruct[z]; - details = details->pNextFieldInfo; - } - - detin.cb = sizeof(FIELDINFOINSERT); - detin.fInvalidateFieldInfo = FALSE; - detin.pFieldInfoOrder = (PFIELDINFO) CMA_FIRST; - detin.cFieldInfoInsert = (ULONG)count; - - WinSendMsg(handle, CM_INSERTDETAILFIELDINFO, MPFROMP(first), MPFROMP(&detin)); - - if(count > separator && separator > 0) - { - cnri.cb = sizeof(CNRINFO); - cnri.pFieldInfoLast = left; - cnri.xVertSplitbar = 150; - - WinSendMsg(handle, CM_SETCNRINFO, MPFROMP(&cnri), MPFROMLONG(CMA_PFIELDINFOLAST | CMA_XVERTSPLITBAR)); - } - - cnri.flWindowAttr = CV_DETAIL | CV_MINI | CA_DETAILSVIEWTITLES; - cnri.slBitmapOrIcon.cx = 16; - cnri.slBitmapOrIcon.cy = 16; - - WinSendMsg(handle, CM_SETCNRINFO, &cnri, MPFROMLONG(CMA_FLWINDOWATTR | CMA_SLBITMAPORICON)); - - free(offStruct); - return TRUE; + PFIELDINFO details, first, left = NULL; + FIELDINFOINSERT detin; + CNRINFO cnri; + int z; + ULONG size = sizeof(RECORDCORE); + ULONG *offStruct = malloc(count * sizeof(ULONG)); + ULONG *tempflags = malloc((count+1) * sizeof(ULONG)); + WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); + ULONG *oldflags = blah ? blah->data : 0; + + if(!offStruct || !tempflags) + return FALSE; + + memcpy(tempflags, flags, count * sizeof(ULONG)); + tempflags[count] = 0; + + blah->data = tempflags; + blah->flags = separator; + + if(oldflags) + free(oldflags); + + while((first = (PFIELDINFO)WinSendMsg(handle, CM_QUERYDETAILFIELDINFO, 0, MPFROMSHORT(CMA_FIRST))) != NULL) + { + WinSendMsg(handle, CM_REMOVEDETAILFIELDINFO, (MPARAM)&first, MPFROM2SHORT(1, CMA_FREE)); + } + + /* Figure out the offsets to the items in the struct */ + for(z=0;z<count;z++) + { + offStruct[z] = size; + if(flags[z] & DW_CFA_BITMAPORICON) + size += sizeof(HPOINTER); + else if(flags[z] & DW_CFA_STRING) + size += sizeof(char *); + else if(flags[z] & DW_CFA_ULONG) + size += sizeof(ULONG); + else if(flags[z] & DW_CFA_DATE) + size += sizeof(CDATE); + else if(flags[z] & DW_CFA_TIME) + size += sizeof(CTIME); + } + + first = details = (PFIELDINFO)WinSendMsg(handle, CM_ALLOCDETAILFIELDINFO, MPFROMLONG(count), 0L); + + if(!first) + { + free(offStruct); + return FALSE; + } + + for(z=0;z<count;z++) + { + if(z==separator-1) + left=details; + details->cb = sizeof(FIELDINFO); + details->flData = flags[z]; + details->flTitle = CFA_FITITLEREADONLY; + details->pTitleData = titles[z]; + details->offStruct = offStruct[z]; + details = details->pNextFieldInfo; + } + + detin.cb = sizeof(FIELDINFOINSERT); + detin.fInvalidateFieldInfo = FALSE; + detin.pFieldInfoOrder = (PFIELDINFO) CMA_FIRST; + detin.cFieldInfoInsert = (ULONG)count; + + WinSendMsg(handle, CM_INSERTDETAILFIELDINFO, MPFROMP(first), MPFROMP(&detin)); + + if(count > separator && separator > 0) + { + cnri.cb = sizeof(CNRINFO); + cnri.pFieldInfoLast = left; + cnri.xVertSplitbar = 150; + + WinSendMsg(handle, CM_SETCNRINFO, MPFROMP(&cnri), MPFROMLONG(CMA_PFIELDINFOLAST | CMA_XVERTSPLITBAR)); + } + + cnri.flWindowAttr = CV_DETAIL | CV_MINI | CA_DETAILSVIEWTITLES; + cnri.slBitmapOrIcon.cx = 16; + cnri.slBitmapOrIcon.cy = 16; + + WinSendMsg(handle, CM_SETCNRINFO, &cnri, MPFROMLONG(CMA_FLWINDOWATTR | CMA_SLBITMAPORICON)); + + free(offStruct); + return TRUE; } /* @@ -6801,23 +6816,23 @@ */ int API dw_filesystem_setup(HWND handle, unsigned long *flags, char **titles, int count) { - char **newtitles = malloc(sizeof(char *) * (count + 2)); - unsigned long *newflags = malloc(sizeof(unsigned long) * (count + 2)); - - newtitles[0] = "Icon"; - newtitles[1] = "Filename"; - - newflags[0] = DW_CFA_BITMAPORICON | DW_CFA_CENTER | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR; - newflags[1] = DW_CFA_STRING | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR; - - memcpy(&newtitles[2], titles, sizeof(char *) * count); - memcpy(&newflags[2], flags, sizeof(unsigned long) * count); - - dw_container_setup(handle, newflags, newtitles, count + 2, count ? 2 : 0); - - free(newtitles); - free(newflags); - return TRUE; + char **newtitles = malloc(sizeof(char *) * (count + 2)); + unsigned long *newflags = malloc(sizeof(unsigned long) * (count + 2)); + + newtitles[0] = "Icon"; + newtitles[1] = "Filename"; + + newflags[0] = DW_CFA_BITMAPORICON | DW_CFA_CENTER | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR; + newflags[1] = DW_CFA_STRING | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR; + + memcpy(&newtitles[2], titles, sizeof(char *) * count); + memcpy(&newflags[2], flags, sizeof(unsigned long) * count); + + dw_container_setup(handle, newflags, newtitles, count + 2, count ? 2 : 0); + + free(newtitles); + free(newflags); + return TRUE; } /* @@ -6830,7 +6845,7 @@ */ unsigned long API dw_icon_load(unsigned long module, unsigned long id) { - return WinLoadPointer(HWND_DESKTOP,module,id); + return WinLoadPointer(HWND_DESKTOP,module,id); } /* @@ -6913,159 +6928,159 @@ */ void * API dw_container_alloc(HWND handle, int rowcount) { - WindowData *wd = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); - ULONG *flags = wd ? wd->data : 0; - int z, size = 0, totalsize, count = 0; - PRECORDCORE temp; - ContainerInfo *ci; - void *blah = NULL; - - if(!flags || rowcount < 1) - return NULL; - - while(flags[count]) - count++; - - /* Figure out the offsets to the items in the struct */ - for(z=0;z<count;z++) - { - if(flags[z] & DW_CFA_BITMAPORICON) - size += sizeof(HPOINTER); - else if(flags[z] & DW_CFA_STRING) - size += sizeof(char *); - else if(flags[z] & DW_CFA_ULONG) - size += sizeof(ULONG); - else if(flags[z] & DW_CFA_DATE) - size += sizeof(CDATE); - else if(flags[z] & DW_CFA_TIME) - size += sizeof(CTIME); - } - - totalsize = size + sizeof(RECORDCORE); - - z = 0; - - if(!(blah = (void *)_dw_send_msg(handle, CM_ALLOCRECORD, MPFROMLONG(size), MPFROMLONG(rowcount), 0))) - return NULL; - - temp = (PRECORDCORE)blah; - - for(z=0;z<rowcount;z++) - { - temp->cb = totalsize; - temp = temp->preccNextRecord; - } - - ci = malloc(sizeof(struct _containerinfo)); - - ci->count = rowcount; - ci->data = blah; - ci->handle = handle; - - return (void *)ci; + WindowData *wd = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); + ULONG *flags = wd ? wd->data : 0; + int z, size = 0, totalsize, count = 0; + PRECORDCORE temp; + ContainerInfo *ci; + void *blah = NULL; + + if(!flags || rowcount < 1) + return NULL; + + while(flags[count]) + count++; + + /* Figure out the offsets to the items in the struct */ + for(z=0;z<count;z++) + { + if(flags[z] & DW_CFA_BITMAPORICON) + size += sizeof(HPOINTER); + else if(flags[z] & DW_CFA_STRING) + size += sizeof(char *); + else if(flags[z] & DW_CFA_ULONG) + size += sizeof(ULONG); + else if(flags[z] & DW_CFA_DATE) + size += sizeof(CDATE); + else if(flags[z] & DW_CFA_TIME) + size += sizeof(CTIME); + } + + totalsize = size + sizeof(RECORDCORE); + + z = 0; + + if(!(blah = (void *)_dw_send_msg(handle, CM_ALLOCRECORD, MPFROMLONG(size), MPFROMLONG(rowcount), 0))) + return NULL; + + temp = (PRECORDCORE)blah; + + for(z=0;z<rowcount;z++) + { + temp->cb = totalsize; + temp = temp->preccNextRecord; + } + + ci = malloc(sizeof(struct _containerinfo)); + + ci->count = rowcount; + ci->data = blah; + ci->handle = handle; + + return (void *)ci; } /* Internal function that does the work for set_item and change_item */ void _dw_container_set_item(HWND handle, PRECORDCORE temp, int column, int row, void *data) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); - ULONG totalsize, size = 0, *flags = blah ? blah->data : 0; - int z, currentcount; - CNRINFO cnr; + WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); + ULONG totalsize, size = 0, *flags = blah ? blah->data : 0; + int z, currentcount; + CNRINFO cnr; void *dest; - if(!flags) - return; - - if(!_dw_send_msg(handle, CM_QUERYCNRINFO, (MPARAM)&cnr, MPFROMSHORT(sizeof(CNRINFO)), 0)) - return; - - currentcount = cnr.cRecords; - - /* Figure out the offsets to the items in the struct */ - for(z=0;z<column;z++) - { - if(flags[z] & DW_CFA_BITMAPORICON) - size += sizeof(HPOINTER); - else if(flags[z] & DW_CFA_STRING) - size += sizeof(char *); - else if(flags[z] & DW_CFA_ULONG) - size += sizeof(ULONG); - else if(flags[z] & DW_CFA_DATE) - size += sizeof(CDATE); - else if(flags[z] & DW_CFA_TIME) - size += sizeof(CTIME); - } - - totalsize = size + sizeof(RECORDCORE); - - for(z=0;z<(row-currentcount);z++) - temp = temp->preccNextRecord; - - dest = (void *)(((ULONG)temp)+((ULONG)totalsize)); - - if(flags[column] & DW_CFA_BITMAPORICON) - memcpy(dest, data, sizeof(HPOINTER)); - else if(flags[column] & DW_CFA_STRING) - { - char **newstr = (char **)data, **str = dest; - - if(*str) - free(*str); - - if(newstr && *newstr) - *str = strdup(*newstr); - else - *str = NULL; - } - else if(flags[column] & DW_CFA_ULONG) - memcpy(dest, data, sizeof(ULONG)); - else if(flags[column] & DW_CFA_DATE) - memcpy(dest, data, sizeof(CDATE)); - else if(flags[column] & DW_CFA_TIME) - memcpy(dest, data, sizeof(CTIME)); + if(!flags) + return; + + if(!_dw_send_msg(handle, CM_QUERYCNRINFO, (MPARAM)&cnr, MPFROMSHORT(sizeof(CNRINFO)), 0)) + return; + + currentcount = cnr.cRecords; + + /* Figure out the offsets to the items in the struct */ + for(z=0;z<column;z++) + { + if(flags[z] & DW_CFA_BITMAPORICON) + size += sizeof(HPOINTER); + else if(flags[z] & DW_CFA_STRING) + size += sizeof(char *); + else if(flags[z] & DW_CFA_ULONG) + size += sizeof(ULONG); + else if(flags[z] & DW_CFA_DATE) + size += sizeof(CDATE); + else if(flags[z] & DW_CFA_TIME) + size += sizeof(CTIME); + } + + totalsize = size + sizeof(RECORDCORE); + + for(z=0;z<(row-currentcount);z++) + temp = temp->preccNextRecord; + + dest = (void *)(((ULONG)temp)+((ULONG)totalsize)); + + if(flags[column] & DW_CFA_BITMAPORICON) + memcpy(dest, data, sizeof(HPOINTER)); + else if(flags[column] & DW_CFA_STRING) + { + char **newstr = (char **)data, **str = dest; + + if(*str) + free(*str); + + if(newstr && *newstr) + *str = strdup(*newstr); + else + *str = NULL; + } + else if(flags[column] & DW_CFA_ULONG) + memcpy(dest, data, sizeof(ULONG)); + else if(flags[column] & DW_CFA_DATE) + memcpy(dest, data, sizeof(CDATE)); + else if(flags[column] & DW_CFA_TIME) + memcpy(dest, data, sizeof(CTIME)); } /* Internal function that free()s any strings allocated for a container item */ void _dw_container_free_strings(HWND handle, PRECORDCORE temp) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); - ULONG totalsize, size = 0, *flags = blah ? blah->data : 0; - int z, count = 0; - - if(!flags) - return; - - while(flags[count]) - count++; - - /* Figure out the offsets to the items in the struct */ - for(z=0;z<count;z++) - { - if(flags[z] & DW_CFA_BITMAPORICON) - size += sizeof(HPOINTER); - else if(flags[z] & DW_CFA_STRING) - { - char **str; - - totalsize = size + sizeof(RECORDCORE); - - str = (char **)(((ULONG)temp)+((ULONG)totalsize)); - - if(*str) - { - free(*str); - *str = NULL; - } - size += sizeof(char *); - } - else if(flags[z] & DW_CFA_ULONG) - size += sizeof(ULONG); - else if(flags[z] & DW_CFA_DATE) - size += sizeof(CDATE); - else if(flags[z] & DW_CFA_TIME) - size += sizeof(CTIME); - } + WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); + ULONG totalsize, size = 0, *flags = blah ? blah->data : 0; + int z, count = 0; + + if(!flags) + return; + + while(flags[count]) + count++; + + /* Figure out the offsets to the items in the struct */ + for(z=0;z<count;z++) + { + if(flags[z] & DW_CFA_BITMAPORICON) + size += sizeof(HPOINTER); + else if(flags[z] & DW_CFA_STRING) + { + char **str; + + totalsize = size + sizeof(RECORDCORE); + + str = (char **)(((ULONG)temp)+((ULONG)totalsize)); + + if(*str) + { + free(*str); + *str = NULL; + } + size += sizeof(char *); + } + else if(flags[z] & DW_CFA_ULONG) + size += sizeof(ULONG); + else if(flags[z] & DW_CFA_DATE) + size += sizeof(CDATE); + else if(flags[z] & DW_CFA_TIME) + size += sizeof(CTIME); + } } /* @@ -7079,12 +7094,12 @@ */ void API dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data) { - ContainerInfo *ci = (ContainerInfo *)pointer; - - if(!ci) - return; - - _dw_container_set_item(handle, (PRECORDCORE)ci->data, column, row, data); + ContainerInfo *ci = (ContainerInfo *)pointer; + + if(!ci) + return; + + _dw_container_set_item(handle, (PRECORDCORE)ci->data, column, row, data); } /* @@ -7097,20 +7112,20 @@ */ void API dw_container_change_item(HWND handle, int column, int row, void *data) { - PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); - int count = 0; - - while(pCore) - { - if(count == row) - { - _dw_container_set_item(handle, pCore, column, 0, data); - WinSendMsg(handle, CM_INVALIDATERECORD, (MPARAM)&pCore, MPFROM2SHORT(1, CMA_NOREPOSITION | CMA_TEXTCHANGED)); - return; - } - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); - count++; - } + PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); + int count = 0; + + while(pCore) + { + if(count == row) + { + _dw_container_set_item(handle, pCore, column, 0, data); + WinSendMsg(handle, CM_INVALIDATERECORD, (MPARAM)&pCore, MPFROM2SHORT(1, CMA_NOREPOSITION | CMA_TEXTCHANGED)); + return; + } + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); + count++; + } } /* @@ -7123,7 +7138,7 @@ */ void API dw_filesystem_change_item(HWND handle, int column, int row, void *data) { - dw_container_change_item(handle, column + 2, row, data); + dw_container_change_item(handle, column + 2, row, data); } /* @@ -7137,8 +7152,8 @@ */ void API dw_filesystem_change_file(HWND handle, int row, char *filename, unsigned long icon) { - dw_container_change_item(handle, 0, row, (void *)&icon); - dw_container_change_item(handle, 1, row, (void *)&filename); + dw_container_change_item(handle, 0, row, (void *)&icon); + dw_container_change_item(handle, 1, row, (void *)&filename); } /* @@ -7152,8 +7167,8 @@ */ void API dw_filesystem_set_file(HWND handle, void *pointer, int row, char *filename, unsigned long icon) { - dw_container_set_item(handle, pointer, 0, row, (void *)&icon); - dw_container_set_item(handle, pointer, 1, row, (void *)&filename); + dw_container_set_item(handle, pointer, 0, row, (void *)&icon); + dw_container_set_item(handle, pointer, 1, row, (void *)&filename); } /* @@ -7167,7 +7182,7 @@ */ void API dw_filesystem_set_item(HWND handle, void *pointer, int column, int row, void *data) { - dw_container_set_item(handle, pointer, column + 2, row, data); + dw_container_set_item(handle, pointer, column + 2, row, data); } /* @@ -7178,26 +7193,26 @@ */ int API dw_container_get_column_type(HWND handle, int column) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); - ULONG *flags = blah ? blah->data : 0; - int rc; - - if(!flags) - return 0; - - if(flags[column] & DW_CFA_BITMAPORICON) - rc = DW_CFA_BITMAPORICON; - else if(flags[column] & DW_CFA_STRING) - rc = DW_CFA_STRING; - else if(flags[column] & DW_CFA_ULONG) - rc = DW_CFA_ULONG; - else if(flags[column] & DW_CFA_DATE) - rc = DW_CFA_DATE; - else if(flags[column] & DW_CFA_TIME) - rc = DW_CFA_TIME; - else - rc = 0; - return rc; + WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); + ULONG *flags = blah ? blah->data : 0; + int rc; + + if(!flags) + return 0; + + if(flags[column] & DW_CFA_BITMAPORICON) + rc = DW_CFA_BITMAPORICON; + else if(flags[column] & DW_CFA_STRING) + rc = DW_CFA_STRING; + else if(flags[column] & DW_CFA_ULONG) + rc = DW_CFA_ULONG; + else if(flags[column] & DW_CFA_DATE) + rc = DW_CFA_DATE; + else if(flags[column] & DW_CFA_TIME) + rc = DW_CFA_TIME; + else + rc = 0; + return rc; } /* @@ -7208,7 +7223,7 @@ */ int API dw_filesystem_get_column_type(HWND handle, int column) { - return dw_container_get_column_type( handle, column + 2 ); + return dw_container_get_column_type( handle, column + 2 ); } /* @@ -7220,9 +7235,9 @@ */ void API dw_container_set_column_width(HWND handle, int column, int width) { - handle = handle; /* keep compiler happy */ - column = column; /* keep compiler happy */ - width = width; /* keep compiler happy */ + handle = handle; /* keep compiler happy */ + column = column; /* keep compiler happy */ + width = width; /* keep compiler happy */ } /* @@ -7234,29 +7249,29 @@ */ void API dw_container_set_row_title(void *pointer, int row, char *title) { - ContainerInfo *ci = (ContainerInfo *)pointer; - PRECORDCORE temp; - int z, currentcount; - CNRINFO cnr; - - if(!ci) - return; - - temp = (PRECORDCORE)ci->data; - - z = 0; - - if(!_dw_send_msg(ci->handle, CM_QUERYCNRINFO, (MPARAM)&cnr, MPFROMSHORT(sizeof(CNRINFO)), 0)) - return; - - currentcount = cnr.cRecords; - - for(z=0;z<(row-currentcount);z++) - temp = temp->preccNextRecord; - - temp->pszIcon = title; - temp->pszName = title; - temp->pszText = title; + ContainerInfo *ci = (ContainerInfo *)pointer; + PRECORDCORE temp; + int z, currentcount; + CNRINFO cnr; + + if(!ci) + return; + + temp = (PRECORDCORE)ci->data; + + z = 0; + + if(!_dw_send_msg(ci->handle, CM_QUERYCNRINFO, (MPARAM)&cnr, MPFROMSHORT(sizeof(CNRINFO)), 0)) + return; + + currentcount = cnr.cRecords; + + for(z=0;z<(row-currentcount);z++) + temp = temp->preccNextRecord; + + temp->pszIcon = title; + temp->pszName = title; + temp->pszText = title; } /* @@ -7268,22 +7283,22 @@ */ void API dw_container_insert(HWND handle, void *pointer, int rowcount) { - RECORDINSERT recin; - ContainerInfo *ci = (ContainerInfo *)pointer; - - if(!ci) - return; - - recin.cb = sizeof(RECORDINSERT); - recin.pRecordOrder = (PRECORDCORE)CMA_END; - recin.pRecordParent = NULL; - recin.zOrder = CMA_TOP; - recin.fInvalidateRecord = TRUE; - recin.cRecordsInsert = rowcount; - - _dw_send_msg(handle, CM_INSERTRECORD, MPFROMP(ci->data), MPFROMP(&recin), 0); - - free(ci); + RECORDINSERT recin; + ContainerInfo *ci = (ContainerInfo *)pointer; + + if(!ci) + return; + + recin.cb = sizeof(RECORDINSERT); + recin.pRecordOrder = (PRECORDCORE)CMA_END; + recin.pRecordParent = NULL; + recin.zOrder = CMA_TOP; + recin.fInvalidateRecord = TRUE; + recin.cRecordsInsert = rowcount; + + _dw_send_msg(handle, CM_INSERTRECORD, MPFROMP(ci->data), MPFROMP(&recin), 0); + + free(ci); } /* @@ -7294,30 +7309,30 @@ */ void API dw_container_clear(HWND handle, int redraw) { - PCNRITEM pCore; - int container = (int)dw_window_get_data(handle, "_dw_container"); - - if(hwndEmph == handle) - _clear_emphasis(); - - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); - - while(pCore) - { - if(container) - _dw_container_free_strings(handle, (PRECORDCORE)pCore); - else - { - /* Free icon text */ - if(pCore->rc.pszIcon) - { - free(pCore->rc.pszIcon); - pCore->rc.pszIcon = 0; - } - } - pCore = (PCNRITEM)pCore->rc.preccNextRecord;/*WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER));*/ - } - _dw_send_msg(handle, CM_REMOVERECORD, (MPARAM)0L, MPFROM2SHORT(0, (redraw ? CMA_INVALIDATE : 0) | CMA_FREE), -1); + PCNRITEM pCore; + int container = (int)dw_window_get_data(handle, "_dw_container"); + + if(hwndEmph == handle) + _clear_emphasis(); + + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); + + while(pCore) + { + if(container) + _dw_container_free_strings(handle, (PRECORDCORE)pCore); + else + { + /* Free icon text */ + if(pCore->rc.pszIcon) + { + free(pCore->rc.pszIcon); + pCore->rc.pszIcon = 0; + } + } + pCore = (PCNRITEM)pCore->rc.preccNextRecord;/*WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER));*/ + } + _dw_send_msg(handle, CM_REMOVERECORD, (MPARAM)0L, MPFROM2SHORT(0, (redraw ? CMA_INVALIDATE : 0) | CMA_FREE), -1); } /* @@ -7328,21 +7343,21 @@ */ void API dw_container_delete(HWND handle, int rowcount) { - RECORDCORE *last, **prc = malloc(sizeof(RECORDCORE *) * rowcount); - int current = 1; - - prc[0] = last = (RECORDCORE *)WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); - - while(last && current < rowcount) - { - _dw_container_free_strings(handle, last); - prc[current] = last = (RECORDCORE *)WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)last, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); - current++; - } - - _dw_send_msg(handle, CM_REMOVERECORD, (MPARAM)prc, MPFROM2SHORT(current, CMA_INVALIDATE | CMA_FREE), -1); - - free(prc); + RECORDCORE *last, **prc = malloc(sizeof(RECORDCORE *) * rowcount); + int current = 1; + + prc[0] = last = (RECORDCORE *)WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); + + while(last && current < rowcount) + { + _dw_container_free_strings(handle, last); + prc[current] = last = (RECORDCORE *)WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)last, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); + current++; + } + + _dw_send_msg(handle, CM_REMOVERECORD, (MPARAM)prc, MPFROM2SHORT(current, CMA_INVALIDATE | CMA_FREE), -1); + + free(prc); } /* @@ -7355,16 +7370,16 @@ */ void API dw_container_scroll(HWND handle, int direction, long rows) { - rows = rows; /* keep compiler happy */ - switch(direction) - { - case DW_SCROLL_TOP: - WinSendMsg(handle, CM_SCROLLWINDOW, MPFROMSHORT(CMA_VERTICAL), MPFROMLONG(-10000000)); + rows = rows; /* keep compiler happy */ + switch(direction) + { + case DW_SCROLL_TOP: + WinSendMsg(handle, CM_SCROLLWINDOW, MPFROMSHORT(CMA_VERTICAL), MPFROMLONG(-10000000)); break; - case DW_SCROLL_BOTTOM: - WinSendMsg(handle, CM_SCROLLWINDOW, MPFROMSHORT(CMA_VERTICAL), MPFROMLONG(10000000)); - break; - } + case DW_SCROLL_BOTTOM: + WinSendMsg(handle, CM_SCROLLWINDOW, MPFROMSHORT(CMA_VERTICAL), MPFROMLONG(10000000)); + break; + } } /* @@ -7377,28 +7392,28 @@ */ char * API dw_container_query_start(HWND handle, unsigned long flags) { - PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); - - if(pCore) - { - if(flags) - { - while(pCore) - { - if(pCore->flRecordAttr & flags) - { - dw_window_set_data(handle, "_dw_pcore", (void *)pCore); - return pCore->pszIcon; - } - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); - } - } - else - { - dw_window_set_data(handle, "_dw_pcore", (void *)pCore); - return pCore->pszIcon; - } - } + PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); + + if(pCore) + { + if(flags) + { + while(pCore) + { + if(pCore->flRecordAttr & flags) + { + dw_window_set_data(handle, "_dw_pcore", (void *)pCore); + return pCore->pszIcon; + } + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); + } + } + else + { + dw_window_set_data(handle, "_dw_pcore", (void *)pCore); + return pCore->pszIcon; + } + } return NULL; } @@ -7412,31 +7427,31 @@ */ char * API dw_container_query_next(HWND handle, unsigned long flags) { - PRECORDCORE pCore = (PRECORDCORE)dw_window_get_data(handle, "_dw_pcore"); - - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); - - if(pCore) - { - if(flags) - { - while(pCore) - { - if(pCore->flRecordAttr & flags) - { - dw_window_set_data(handle, "_dw_pcore", (void *)pCore); - return pCore->pszIcon; - } - - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); - } - } - else - { - dw_window_set_data(handle, "_dw_pcore", (void *)pCore); - return pCore->pszIcon; - } - } + PRECORDCORE pCore = (PRECORDCORE)dw_window_get_data(handle, "_dw_pcore"); + + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); + + if(pCore) + { + if(flags) + { + while(pCore) + { + if(pCore->flRecordAttr & flags) + { + dw_window_set_data(handle, "_dw_pcore", (void *)pCore); + return pCore->pszIcon; + } + + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); + } + } + else + { + dw_window_set_data(handle, "_dw_pcore", (void *)pCore); + return pCore->pszIcon; + } + } return NULL; } @@ -7448,34 +7463,34 @@ */ void API dw_container_cursor(HWND handle, char *text) { - RECTL viewport, item; - PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); - - while(pCore) - { - if((char *)pCore->pszIcon == text) - { - QUERYRECORDRECT qrr; - int scrollpixels = 0, midway; - - qrr.cb = sizeof(QUERYRECORDRECT); - qrr.pRecord = pCore; - qrr.fRightSplitWindow = 0; - qrr.fsExtent = CMA_TEXT; - - WinSendMsg(handle, CM_SETRECORDEMPHASIS, (MPARAM)pCore, MPFROM2SHORT(TRUE, CRA_CURSORED)); - WinSendMsg(handle, CM_QUERYVIEWPORTRECT, (MPARAM)&viewport, MPFROM2SHORT(CMA_WORKSPACE, FALSE)); - WinSendMsg(handle, CM_QUERYRECORDRECT, (MPARAM)&item, (MPARAM)&qrr); - - midway = (viewport.yTop - viewport.yBottom)/2; - scrollpixels = viewport.yTop - (item.yTop + midway); - - WinSendMsg(handle, CM_SCROLLWINDOW, MPFROMSHORT(CMA_VERTICAL), MPFROMLONG(scrollpixels)); - return; - } - - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); - } + RECTL viewport, item; + PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); + + while(pCore) + { + if((char *)pCore->pszIcon == text) + { + QUERYRECORDRECT qrr; + int scrollpixels = 0, midway; + + qrr.cb = sizeof(QUERYRECORDRECT); + qrr.pRecord = pCore; + qrr.fRightSplitWindow = 0; + qrr.fsExtent = CMA_TEXT; + + WinSendMsg(handle, CM_SETRECORDEMPHASIS, (MPARAM)pCore, MPFROM2SHORT(TRUE, CRA_CURSORED)); + WinSendMsg(handle, CM_QUERYVIEWPORTRECT, (MPARAM)&viewport, MPFROM2SHORT(CMA_WORKSPACE, FALSE)); + WinSendMsg(handle, CM_QUERYRECORDRECT, (MPARAM)&item, (MPARAM)&qrr); + + midway = (viewport.yTop - viewport.yBottom)/2; + scrollpixels = viewport.yTop - (item.yTop + midway); + + WinSendMsg(handle, CM_SCROLLWINDOW, MPFROMSHORT(CMA_VERTICAL), MPFROMLONG(scrollpixels)); + return; + } + + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); + } } /* @@ -7486,17 +7501,17 @@ */ void API dw_container_delete_row(HWND handle, char *text) { - PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); - - while(pCore) - { - if((char *)pCore->pszIcon == text) - { - WinSendMsg(handle, CM_REMOVERECORD, (MPARAM)&pCore, MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE)); - return; - } - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); - } + PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); + + while(pCore) + { + if((char *)pCore->pszIcon == text) + { + WinSendMsg(handle, CM_REMOVERECORD, (MPARAM)&pCore, MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE)); + return; + } + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); + } } /* @@ -7506,44 +7521,44 @@ */ void API dw_container_optimize(HWND handle) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); - RECTL item; - PRECORDCORE pCore = NULL; - int max = 0; - - if(blah && !blah->flags) - return; - - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); - while(pCore) - { - QUERYRECORDRECT qrr; - int vector; - - qrr.cb = sizeof(QUERYRECORDRECT); - qrr.pRecord = pCore; - qrr.fRightSplitWindow = 0; - qrr.fsExtent = CMA_TEXT; - - WinSendMsg(handle, CM_QUERYRECORDRECT, (MPARAM)&item, (MPARAM)&qrr); - - vector = item.xRight - item.xLeft; - - if(vector > max) - max = vector; - - pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); - } - - if(max) - { - CNRINFO cnri; - - cnri.cb = sizeof(CNRINFO); - cnri.xVertSplitbar = max; - - WinSendMsg(handle, CM_SETCNRINFO, MPFROMP(&cnri), MPFROMLONG(CMA_XVERTSPLITBAR)); - } + WindowData *blah = (WindowData *)WinQueryWindowPtr(handle, QWP_USER); + RECTL item; + PRECORDCORE pCore = NULL; + int max = 0; + + if(blah && !blah->flags) + return; + + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER)); + while(pCore) + { + QUERYRECORDRECT qrr; + int vector; + + qrr.cb = sizeof(QUERYRECORDRECT); + qrr.pRecord = pCore; + qrr.fRightSplitWindow = 0; + qrr.fsExtent = CMA_TEXT; + + WinSendMsg(handle, CM_QUERYRECORDRECT, (MPARAM)&item, (MPARAM)&qrr); + + vector = item.xRight - item.xLeft; + + if(vector > max) + max = vector; + + pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER)); + } + + if(max) + { + CNRINFO cnri; + + cnri.cb = sizeof(CNRINFO); + cnri.xVertSplitbar = max; + + WinSendMsg(handle, CM_SETCNRINFO, MPFROMP(&cnri), MPFROMLONG(CMA_XVERTSPLITBAR)); + } } /* @@ -7555,10 +7570,10 @@ */ void API dw_taskbar_insert(HWND handle, unsigned long icon, char *bubbletext) { - handle = handle; - icon = icon; - bubbletext = bubbletext; - /* TODO */ + handle = handle; + icon = icon; + bubbletext = bubbletext; + /* TODO */ } /* @@ -7569,9 +7584,9 @@ */ void API dw_taskbar_delete(HWND handle, unsigned long icon) { - handle = handle; - icon = icon; - /* TODO */ + handle = handle; + icon = icon; + /* TODO */ } /* @@ -7583,19 +7598,19 @@ */ HWND API dw_render_new(unsigned long id) { - HWND hwndframe = WinCreateWindow(HWND_OBJECT, - WC_FRAME, - NULL, - WS_VISIBLE | - FS_NOBYTEALIGN, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - WinSubclassWindow(hwndframe, _RendProc); - return hwndframe; + HWND hwndframe = WinCreateWindow(HWND_OBJECT, + WC_FRAME, + NULL, + WS_VISIBLE | + FS_NOBYTEALIGN, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + WinSubclassWindow(hwndframe, _RendProc); + return hwndframe; } /* Sets the current foreground drawing color. @@ -7606,7 +7621,7 @@ */ void API dw_color_foreground_set(unsigned long value) { - _foreground = value; + _foreground = value; } /* Sets the current background drawing color. @@ -7617,39 +7632,39 @@ */ void API dw_color_background_set(unsigned long value) { - _background = value; + _background = value; } int DWSIGNAL _dw_color_cancel_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - HMTX mtx = (HMTX)dw_window_get_data((HWND)dwwait->data, "_dw_mutex"); - void *val; - - window = (HWND)dwwait->data; - val = dw_window_get_data(window, "_dw_val"); - - dw_mutex_lock(mtx); - dw_mutex_close(mtx); - dw_window_destroy(window); - dw_dialog_dismiss((DWDialog *)data, val); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + HMTX mtx = (HMTX)dw_window_get_data((HWND)dwwait->data, "_dw_mutex"); + void *val; + + window = (HWND)dwwait->data; + val = dw_window_get_data(window, "_dw_val"); + + dw_mutex_lock(mtx); + dw_mutex_close(mtx); + dw_window_destroy(window); + dw_dialog_dismiss((DWDialog *)data, val); + return FALSE; } int DWSIGNAL _dw_color_ok_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - HMTX mtx = (HMTX)dw_window_get_data((HWND)dwwait->data, "_dw_mutex"); - unsigned long val; - - window = (HWND)dwwait->data; - val = _dw_color_spin_get(window); - - dw_mutex_lock(mtx); - dw_mutex_close(mtx); - dw_window_destroy(window); - dw_dialog_dismiss((DWDialog *)data, (void *)val); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + HMTX mtx = (HMTX)dw_window_get_data((HWND)dwwait->data, "_dw_mutex"); + unsigned long val; + + window = (HWND)dwwait->data; + val = _dw_color_spin_get(window); + + dw_mutex_lock(mtx); + dw_mutex_close(mtx); + dw_window_destroy(window); + dw_dialog_dismiss((DWDialog *)data, (void *)val); + return FALSE; } /* Allows the user to choose a color using the system's color chooser dialog. @@ -7660,122 +7675,122 @@ */ unsigned long API dw_color_choose(unsigned long value) { - HWND window, hbox, vbox, col, button, text; - DWDialog *dwwait; - HMTX mtx = dw_mutex_new(); - - window = dw_window_new( HWND_DESKTOP, "Choose Color", FCF_SHELLPOSITION | FCF_TITLEBAR | FCF_DLGBORDER | FCF_CLOSEBUTTON | FCF_SYSMENU); - - vbox = dw_box_new(DW_VERT, 5); - - dw_box_pack_start(window, vbox, 0, 0, TRUE, TRUE, 0); - - hbox = dw_box_new(DW_HORZ, 0); - - dw_box_pack_start(vbox, hbox, 0, 0, FALSE, FALSE, 0); - dw_window_set_style(hbox, 0, WS_CLIPCHILDREN); - - col = WinCreateWindow(vbox, "ColorSelectClass", "", WS_VISIBLE | WS_GROUP, 0, 0, 390, 300, vbox, HWND_TOP, 266, NULL,NULL); - dw_box_pack_start(hbox, col, 390, 300, FALSE, FALSE, 0); - - dw_window_set_data(hbox, "_dw_window", (void *)window); - dw_window_set_data(window, "_dw_mutex", (void *)mtx); - dw_window_set_data(window, "_dw_col", (void *)col); - dw_window_set_data(window, "_dw_val", (void *)value); - - hbox = dw_box_new(DW_HORZ, 0); - dw_window_set_data(hbox, "_dw_window", (void *)window); - - dw_box_pack_start(vbox, hbox, 0, 0, TRUE, FALSE, 0); - - text = dw_text_new("Red:", 0); - dw_window_set_style(text, DW_DT_VCENTER, DW_DT_VCENTER); - dw_box_pack_start(hbox, text, 30, 20, FALSE, FALSE, 3); - - button = dw_spinbutton_new("", 1001L); - dw_spinbutton_set_limits(button, 255, 0); - dw_box_pack_start(hbox, button, 20, 20, TRUE, FALSE, 3); - WinSetOwner(button, hbox); - dw_window_set_data(window, "_dw_red_spin", (void *)button); - - text = dw_text_new("Green:", 0); - dw_window_set_style(text, DW_DT_VCENTER, DW_DT_VCENTER); - dw_box_pack_start(hbox, text, 30, 20, FALSE, FALSE, 3); - - button = dw_spinbutton_new("", 1002L); - dw_spinbutton_set_limits(button, 255, 0); - dw_box_pack_start(hbox, button, 20, 20, TRUE, FALSE, 3); - WinSetOwner(button, hbox); - dw_window_set_data(window, "_dw_green_spin", (void *)button); - - text = dw_text_new("Blue:", 0); - dw_window_set_style(text, DW_DT_VCENTER, DW_DT_VCENTER); - dw_box_pack_start(hbox, text, 30, 20, FALSE, FALSE, 3); - - button = dw_spinbutton_new("", 1003L); - dw_spinbutton_set_limits(button, 255, 0); - dw_box_pack_start(hbox, button, 20, 20, TRUE, FALSE, 3); - WinSetOwner(button, hbox); - dw_window_set_data(window, "_dw_blue_spin", (void *)button); - - hbox = dw_box_new(DW_HORZ, 0); - - dw_box_pack_start(vbox, hbox, 0, 0, TRUE, FALSE, 0); - dw_box_pack_start(hbox, 0, 100, 1, TRUE, FALSE, 0); - - button = dw_button_new("Ok", 1001L); - dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); - - dwwait = dw_dialog_new((void *)window); - - dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_color_ok_func), (void *)dwwait); - - button = dw_button_new("Cancel", 1002L); - dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); - - dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_color_cancel_func), (void *)dwwait); - dw_signal_connect(window, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(_dw_color_cancel_func), (void *)dwwait); - - dw_window_set_size(window, 400, 400); - - _dw_col_set(col, value); - _dw_color_spin_set(window, value); - - dw_window_show(window); - - return (unsigned long)dw_dialog_wait(dwwait); + HWND window, hbox, vbox, col, button, text; + DWDialog *dwwait; + HMTX mtx = dw_mutex_new(); + + window = dw_window_new( HWND_DESKTOP, "Choose Color", FCF_SHELLPOSITION | FCF_TITLEBAR | FCF_DLGBORDER | FCF_CLOSEBUTTON | FCF_SYSMENU); + + vbox = dw_box_new(DW_VERT, 5); + + dw_box_pack_start(window, vbox, 0, 0, TRUE, TRUE, 0); + + hbox = dw_box_new(DW_HORZ, 0); + + dw_box_pack_start(vbox, hbox, 0, 0, FALSE, FALSE, 0); + dw_window_set_style(hbox, 0, WS_CLIPCHILDREN); + + col = WinCreateWindow(vbox, "ColorSelectClass", "", WS_VISIBLE | WS_GROUP, 0, 0, 390, 300, vbox, HWND_TOP, 266, NULL,NULL); + dw_box_pack_start(hbox, col, 390, 300, FALSE, FALSE, 0); + + dw_window_set_data(hbox, "_dw_window", (void *)window); + dw_window_set_data(window, "_dw_mutex", (void *)mtx); + dw_window_set_data(window, "_dw_col", (void *)col); + dw_window_set_data(window, "_dw_val", (void *)value); + + hbox = dw_box_new(DW_HORZ, 0); + dw_window_set_data(hbox, "_dw_window", (void *)window); + + dw_box_pack_start(vbox, hbox, 0, 0, TRUE, FALSE, 0); + + text = dw_text_new("Red:", 0); + dw_window_set_style(text, DW_DT_VCENTER, DW_DT_VCENTER); + dw_box_pack_start(hbox, text, 30, 20, FALSE, FALSE, 3); + + button = dw_spinbutton_new("", 1001L); + dw_spinbutton_set_limits(button, 255, 0); + dw_box_pack_start(hbox, button, 20, 20, TRUE, FALSE, 3); + WinSetOwner(button, hbox); + dw_window_set_data(window, "_dw_red_spin", (void *)button); + + text = dw_text_new("Green:", 0); + dw_window_set_style(text, DW_DT_VCENTER, DW_DT_VCENTER); + dw_box_pack_start(hbox, text, 30, 20, FALSE, FALSE, 3); + + button = dw_spinbutton_new("", 1002L); + dw_spinbutton_set_limits(button, 255, 0); + dw_box_pack_start(hbox, button, 20, 20, TRUE, FALSE, 3); + WinSetOwner(button, hbox); + dw_window_set_data(window, "_dw_green_spin", (void *)button); + + text = dw_text_new("Blue:", 0); + dw_window_set_style(text, DW_DT_VCENTER, DW_DT_VCENTER); + dw_box_pack_start(hbox, text, 30, 20, FALSE, FALSE, 3); + + button = dw_spinbutton_new("", 1003L); + dw_spinbutton_set_limits(button, 255, 0); + dw_box_pack_start(hbox, button, 20, 20, TRUE, FALSE, 3); + WinSetOwner(button, hbox); + dw_window_set_data(window, "_dw_blue_spin", (void *)button); + + hbox = dw_box_new(DW_HORZ, 0); + + dw_box_pack_start(vbox, hbox, 0, 0, TRUE, FALSE, 0); + dw_box_pack_start(hbox, 0, 100, 1, TRUE, FALSE, 0); + + button = dw_button_new("Ok", 1001L); + dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); + + dwwait = dw_dialog_new((void *)window); + + dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_color_ok_func), (void *)dwwait); + + button = dw_button_new("Cancel", 1002L); + dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); + + dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_color_cancel_func), (void *)dwwait); + dw_signal_connect(window, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(_dw_color_cancel_func), (void *)dwwait); + + dw_window_set_size(window, 400, 400); + + _dw_col_set(col, value); + _dw_color_spin_set(window, value); + + dw_window_show(window); + + return (unsigned long)dw_dialog_wait(dwwait); } HPS _set_hps(HPS hps) { - LONG alTable[2]; - - alTable[0] = DW_RED_VALUE(_foreground) << 16 | DW_GREEN_VALUE(_foreground) << 8 | DW_BLUE_VALUE(_foreground); - alTable[1] = DW_RED_VALUE(_background) << 16 | DW_GREEN_VALUE(_background) << 8 | DW_BLUE_VALUE(_background); - - GpiCreateLogColorTable(hps, - LCOL_RESET, - LCOLF_CONSECRGB, - 16, - 2, - alTable); - if(_foreground & DW_RGB_COLOR) - GpiSetColor(hps, 16); - else - GpiSetColor(hps, _internal_color(_foreground)); - if(_background & DW_RGB_COLOR) - GpiSetBackColor(hps, 17); - else - GpiSetBackColor(hps, _internal_color(_background)); - return hps; + LONG alTable[2]; + + alTable[0] = DW_RED_VALUE(_foreground) << 16 | DW_GREEN_VALUE(_foreground) << 8 | DW_BLUE_VALUE(_foreground); + alTable[1] = DW_RED_VALUE(_background) << 16 | DW_GREEN_VALUE(_background) << 8 | DW_BLUE_VALUE(_background); + + GpiCreateLogColorTable(hps, + LCOL_RESET, + LCOLF_CONSECRGB, + 16, + 2, + alTable); + if(_foreground & DW_RGB_COLOR) + GpiSetColor(hps, 16); + else + GpiSetColor(hps, _internal_color(_foreground)); + if(_background & DW_RGB_COLOR) + GpiSetBackColor(hps, 17); + else + GpiSetBackColor(hps, _internal_color(_background)); + return hps; } HPS _set_colors(HWND handle) { - HPS hps = WinGetPS(handle); - - _set_hps(hps); - return hps; + HPS hps = WinGetPS(handle); + + _set_hps(hps); + return hps; } /* Draw a point on a window (preferably a render window). @@ -7787,29 +7802,29 @@ */ void API dw_draw_point(HWND handle, HPIXMAP pixmap, int x, int y) { - HPS hps; - int height; - POINTL ptl; - - if(handle) - { - hps = _set_colors(handle); + HPS hps; + int height; + POINTL ptl; + + if(handle) + { + hps = _set_colors(handle); height = _get_height(handle); - } - else if(pixmap) - { - hps = _set_hps(pixmap->hps); - height = pixmap->height; - } - else - return; - - ptl.x = x; - ptl.y = height - y - 1; - - GpiSetPel(hps, &ptl); - if(!pixmap) - WinReleasePS(hps); + } + else if(pixmap) + { + hps = _set_hps(pixmap->hps); + height = pixmap->height; + } + else + return; + + ptl.x = x; + ptl.y = height - y - 1; + + GpiSetPel(hps, &ptl); + if(!pixmap) + WinReleasePS(hps); } /* Draw a line on a window (preferably a render window). @@ -7823,56 +7838,56 @@ */ void API dw_draw_line(HWND handle, HPIXMAP pixmap, int x1, int y1, int x2, int y2) { - HPS hps; - int height; - POINTL ptl[2]; - - if(handle) - { - hps = _set_colors(handle); + HPS hps; + int height; + POINTL ptl[2]; + + if(handle) + { + hps = _set_colors(handle); height = _get_height(handle); - } - else if(pixmap) - { - hps = _set_hps(pixmap->hps); - height = pixmap->height; - } - else - return; - - ptl[0].x = x1; - ptl[0].y = height - y1 - 1; - ptl[1].x = x2; - ptl[1].y = height - y2 - 1; - - GpiMove(hps, &ptl[0]); - GpiLine(hps, &ptl[1]); - - if(!pixmap) - WinReleasePS(hps); + } + else if(pixmap) + { + hps = _set_hps(pixmap->hps); + height = pixmap->height; + } + else + return; + + ptl[0].x = x1; + ptl[0].y = height - y1 - 1; + ptl[1].x = x2; + ptl[1].y = height - y2 - 1; + + GpiMove(hps, &ptl[0]); + GpiLine(hps, &ptl[1]); + + if(!pixmap) + WinReleasePS(hps); } void _CopyFontSettings(HPS hpsSrc, HPS hpsDst) { - FONTMETRICS fm; - FATTRS fat; - SIZEF sizf; - - GpiQueryFontMetrics(hpsSrc, sizeof(FONTMETRICS), &fm); + FONTMETRICS fm; + FATTRS fat; + SIZEF sizf; + + GpiQueryFontMetrics(hpsSrc, sizeof(FONTMETRICS), &fm); memset(&fat, 0, sizeof(fat)); - fat.usRecordLength = sizeof(FATTRS); - fat.lMatch = fm.lMatch; - strcpy(fat.szFacename, fm.szFacename); - - GpiCreateLogFont(hpsDst, 0, 1L, &fat); - GpiSetCharSet(hpsDst, 1L); - - sizf.cx = MAKEFIXED(fm.lEmInc,0); - sizf.cy = MAKEFIXED(fm.lMaxBaselineExt,0); - GpiSetCharBox(hpsDst, &sizf ); + fat.usRecordLength = sizeof(FATTRS); + fat.lMatch = fm.lMatch; + strcpy(fat.szFacename, fm.szFacename); + + GpiCreateLogFont(hpsDst, 0, 1L, &fat); + GpiSetCharSet(hpsDst, 1L); + + sizf.cx = MAKEFIXED(fm.lEmInc,0); + sizf.cy = MAKEFIXED(fm.lMaxBaselineExt,0); + GpiSetCharBox(hpsDst, &sizf ); } /* Draw text on a window (preferably a render window). @@ -7885,51 +7900,51 @@ */ void API dw_draw_text(HWND handle, HPIXMAP pixmap, int x, int y, char *text) { - HPS hps; - int z, height; - RECTL rcl; - char fontname[128]; - POINTL aptl[TXTBOX_COUNT]; - - if(handle) - { - hps = _set_colors(handle); - height = _get_height(handle); - _GetPPFont(handle, fontname); - } - else if(pixmap) - { - HPS pixmaphps = WinGetPS(pixmap->handle); - - hps = _set_hps(pixmap->hps); - height = pixmap->height; - _GetPPFont(pixmap->handle, fontname); - _CopyFontSettings(pixmaphps, hps); - WinReleasePS(pixmaphps); - } - else - return; - - for(z=0;z<strlen(fontname);z++) - { - if(fontname[z]=='.') - break; - } - - GpiQueryTextBox(hps, strlen(text), text, TXTBOX_COUNT, aptl); - - rcl.xLeft = x; - rcl.yTop = height - y; - rcl.yBottom = rcl.yTop - (aptl[TXTBOX_TOPLEFT].y - aptl[TXTBOX_BOTTOMLEFT].y); - rcl.xRight = rcl.xLeft + (aptl[TXTBOX_TOPRIGHT].x - aptl[TXTBOX_TOPLEFT].x); - - if(_background == DW_CLR_DEFAULT) - WinDrawText(hps, -1, text, &rcl, DT_TEXTATTRS, DT_TEXTATTRS, DT_VCENTER | DT_LEFT | DT_TEXTATTRS); - else - WinDrawText(hps, -1, text, &rcl, _internal_color(_foreground), _internal_color(_background), DT_VCENTER | DT_LEFT | DT_ERASERECT); - - if(!pixmap) - WinReleasePS(hps); + HPS hps; + int z, height; + RECTL rcl; + char fontname[128]; + POINTL aptl[TXTBOX_COUNT]; + + if(handle) + { + hps = _set_colors(handle); + height = _get_height(handle); + _GetPPFont(handle, fontname); + } + else if(pixmap) + { + HPS pixmaphps = WinGetPS(pixmap->handle); + + hps = _set_hps(pixmap->hps); + height = pixmap->height; + _GetPPFont(pixmap->handle, fontname); + _CopyFontSettings(pixmaphps, hps); + WinReleasePS(pixmaphps); + } + else + return; + + for(z=0;z<strlen(fontname);z++) + { + if(fontname[z]=='.') + break; + } + + GpiQueryTextBox(hps, strlen(text), text, TXTBOX_COUNT, aptl); + + rcl.xLeft = x; + rcl.yTop = height - y; + rcl.yBottom = rcl.yTop - (aptl[TXTBOX_TOPLEFT].y - aptl[TXTBOX_BOTTOMLEFT].y); + rcl.xRight = rcl.xLeft + (aptl[TXTBOX_TOPRIGHT].x - aptl[TXTBOX_TOPLEFT].x); + + if(_background == DW_CLR_DEFAULT) + WinDrawText(hps, -1, text, &rcl, DT_TEXTATTRS, DT_TEXTATTRS, DT_VCENTER | DT_LEFT | DT_TEXTATTRS); + else + WinDrawText(hps, -1, text, &rcl, _internal_color(_foreground), _internal_color(_background), DT_VCENTER | DT_LEFT | DT_ERASERECT); + + if(!pixmap) + WinReleasePS(hps); } /* Query the width and height of a text string. @@ -7942,34 +7957,34 @@ */ void API dw_font_text_extents_get(HWND handle, HPIXMAP pixmap, char *text, int *width, int *height) { - HPS hps; - POINTL aptl[TXTBOX_COUNT]; - - if(handle) - { - hps = _set_colors(handle); - } - else if(pixmap) - { - HPS pixmaphps = WinGetPS(pixmap->handle); - - hps = _set_hps(pixmap->hps); - _CopyFontSettings(pixmaphps, hps); - WinReleasePS(pixmaphps); - } - else - return; - - GpiQueryTextBox(hps, strlen(text), text, TXTBOX_COUNT, aptl); - - if(width) - *width = aptl[TXTBOX_TOPRIGHT].x - aptl[TXTBOX_TOPLEFT].x; - - if(height) - *height = aptl[TXTBOX_TOPLEFT].y - aptl[TXTBOX_BOTTOMLEFT].y; - - if(!pixmap) - WinReleasePS(hps); + HPS hps; + POINTL aptl[TXTBOX_COUNT]; + + if(handle) + { + hps = _set_colors(handle); + } + else if(pixmap) + { + HPS pixmaphps = WinGetPS(pixmap->handle); + + hps = _set_hps(pixmap->hps); + _CopyFontSettings(pixmaphps, hps); + WinReleasePS(pixmaphps); + } + else + return; + + GpiQueryTextBox(hps, strlen(text), text, TXTBOX_COUNT, aptl); + + if(width) + *width = aptl[TXTBOX_TOPRIGHT].x - aptl[TXTBOX_TOPLEFT].x; + + if(height) + *height = aptl[TXTBOX_TOPLEFT].y - aptl[TXTBOX_BOTTOMLEFT].y; + + if(!pixmap) + WinReleasePS(hps); } /* Draw a polygon on a window (preferably a render window). @@ -8050,33 +8065,33 @@ */ void API dw_draw_rect(HWND handle, HPIXMAP pixmap, int fill, int x, int y, int width, int height) { - HPS hps; - int thisheight; - POINTL ptl[2]; - - if(handle) - { - hps = _set_colors(handle); + HPS hps; + int thisheight; + POINTL ptl[2]; + + if(handle) + { + hps = _set_colors(handle); thisheight = _get_height(handle); - } - else if(pixmap) - { - hps = _set_hps(pixmap->hps); - thisheight = pixmap->height; - } - else - return; - - ptl[0].x = x; - ptl[0].y = thisheight - y - 1; - ptl[1].x = x + width - 1; - ptl[1].y = thisheight - y - height; - - GpiMove(hps, &ptl[0]); - GpiBox(hps, fill ? DRO_OUTLINEFILL : DRO_OUTLINE, &ptl[1], 0, 0); - - if(!pixmap) - WinReleasePS(hps); + } + else if(pixmap) + { + hps = _set_hps(pixmap->hps); + thisheight = pixmap->height; + } + else + return; + + ptl[0].x = x; + ptl[0].y = thisheight - y - 1; + ptl[1].x = x + width - 1; + ptl[1].y = thisheight - y - height; + + GpiMove(hps, &ptl[0]); + GpiBox(hps, fill ? DRO_OUTLINEFILL : DRO_OUTLINE, &ptl[1], 0, 0); + + if(!pixmap) + WinReleasePS(hps); } /* Call this after drawing to the screen to make sure @@ -8098,52 +8113,52 @@ */ HPIXMAP API dw_pixmap_new(HWND handle, unsigned long width, unsigned long height, int depth) { - BITMAPINFOHEADER bmih; - SIZEL sizl = { 0, 0 }; - HPIXMAP pixmap; - HDC hdc; - HPS hps; - ULONG ulFlags; + BITMAPINFOHEADER bmih; + SIZEL sizl = { 0, 0 }; + HPIXMAP pixmap; + HDC hdc; + HPS hps; + ULONG ulFlags; LONG cPlanes, cBitCount; - if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) - return NULL; - - hps = WinGetPS(handle); - - hdc = GpiQueryDevice(hps); - ulFlags = GpiQueryPS(hps, &sizl); - - pixmap->handle = handle; - pixmap->hdc = DevOpenDC(dwhab, OD_MEMORY, "*", 0L, NULL, hdc); - pixmap->hps = GpiCreatePS (dwhab, pixmap->hdc, &sizl, ulFlags | GPIA_ASSOC); - - DevQueryCaps(hdc, CAPS_COLOR_PLANES , 1L, &cPlanes); - if (!depth) - { - DevQueryCaps(hdc, CAPS_COLOR_BITCOUNT, 1L, &cBitCount); - depth = cBitCount; - } - - memset(&bmih, 0, sizeof(BITMAPINFOHEADER)); - bmih.cbFix = sizeof(BITMAPINFOHEADER); - bmih.cx = (SHORT)width; - bmih.cy = (SHORT)height; - bmih.cPlanes = (SHORT)cPlanes; - bmih.cBitCount = (SHORT)depth; - - pixmap->width = width; pixmap->height = height; - - pixmap->hbm = GpiCreateBitmap(pixmap->hps, (PBITMAPINFOHEADER2)&bmih, 0L, NULL, NULL); - - GpiSetBitmap(pixmap->hps, pixmap->hbm); - - if (depth>8) - GpiCreateLogColorTable(pixmap->hps, LCOL_PURECOLOR, LCOLF_RGB, 0, 0, NULL ); - - WinReleasePS(hps); - - return pixmap; + if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) + return NULL; + + hps = WinGetPS(handle); + + hdc = GpiQueryDevice(hps); + ulFlags = GpiQueryPS(hps, &sizl); + + pixmap->handle = handle; + pixmap->hdc = DevOpenDC(dwhab, OD_MEMORY, "*", 0L, NULL, hdc); + pixmap->hps = GpiCreatePS (dwhab, pixmap->hdc, &sizl, ulFlags | GPIA_ASSOC); + + DevQueryCaps(hdc, CAPS_COLOR_PLANES , 1L, &cPlanes); + if (!depth) + { + DevQueryCaps(hdc, CAPS_COLOR_BITCOUNT, 1L, &cBitCount); + depth = cBitCount; + } + + memset(&bmih, 0, sizeof(BITMAPINFOHEADER)); + bmih.cbFix = sizeof(BITMAPINFOHEADER); + bmih.cx = (SHORT)width; + bmih.cy = (SHORT)height; + bmih.cPlanes = (SHORT)cPlanes; + bmih.cBitCount = (SHORT)depth; + + pixmap->width = width; pixmap->height = height; + + pixmap->hbm = GpiCreateBitmap(pixmap->hps, (PBITMAPINFOHEADER2)&bmih, 0L, NULL, NULL); + + GpiSetBitmap(pixmap->hps, pixmap->hbm); + + if (depth>8) + GpiCreateLogColorTable(pixmap->hps, LCOL_PURECOLOR, LCOLF_RGB, 0, 0, NULL ); + + WinReleasePS(hps); + + return pixmap; } /* @@ -8269,35 +8284,35 @@ */ HPIXMAP API dw_pixmap_grab(HWND handle, ULONG id) { - BITMAPINFOHEADER bmih; - SIZEL sizl = { 0, 0 }; - HPIXMAP pixmap; - HDC hdc; - HPS hps; - ULONG ulFlags; - - if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) - return NULL; - - hps = WinGetPS(handle); - - hdc = GpiQueryDevice(hps); - ulFlags = GpiQueryPS(hps, &sizl); - - pixmap->hdc = DevOpenDC(dwhab, OD_MEMORY, "*", 0L, NULL, hdc); - pixmap->hps = GpiCreatePS (dwhab, pixmap->hdc, &sizl, ulFlags | GPIA_ASSOC); - - pixmap->hbm = GpiLoadBitmap(pixmap->hps, NULLHANDLE, id, 0, 0); - - GpiQueryBitmapParameters(pixmap->hbm, &bmih); - - GpiSetBitmap(pixmap->hps, pixmap->hbm); - - pixmap->width = bmih.cx; pixmap->height = bmih.cy; - - WinReleasePS(hps); - - return pixmap; + BITMAPINFOHEADER bmih; + SIZEL sizl = { 0, 0 }; + HPIXMAP pixmap; + HDC hdc; + HPS hps; + ULONG ulFlags; + + if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) + return NULL; + + hps = WinGetPS(handle); + + hdc = GpiQueryDevice(hps); + ulFlags = GpiQueryPS(hps, &sizl); + + pixmap->hdc = DevOpenDC(dwhab, OD_MEMORY, "*", 0L, NULL, hdc); + pixmap->hps = GpiCreatePS (dwhab, pixmap->hdc, &sizl, ulFlags | GPIA_ASSOC); + + pixmap->hbm = GpiLoadBitmap(pixmap->hps, NULLHANDLE, id, 0, 0); + + GpiQueryBitmapParameters(pixmap->hbm, &bmih); + + GpiSetBitmap(pixmap->hps, pixmap->hbm); + + pixmap->width = bmih.cx; pixmap->height = bmih.cy; + + WinReleasePS(hps); + + return pixmap; } /* @@ -8308,12 +8323,12 @@ */ void API dw_pixmap_destroy(HPIXMAP pixmap) { - GpiSetBitmap(pixmap->hps, NULLHANDLE); - GpiDeleteBitmap(pixmap->hbm); - GpiAssociate(pixmap->hps, NULLHANDLE); - GpiDestroyPS(pixmap->hps); - DevCloseDC(pixmap->hdc); - free(pixmap); + GpiSetBitmap(pixmap->hps, NULLHANDLE); + GpiDeleteBitmap(pixmap->hbm); + GpiAssociate(pixmap->hps, NULLHANDLE); + GpiDestroyPS(pixmap->hps); + DevCloseDC(pixmap->hdc); + free(pixmap); } /* @@ -8332,68 +8347,68 @@ */ void API dw_pixmap_bitblt(HWND dest, HPIXMAP destp, int xdest, int ydest, int width, int height, HWND src, HPIXMAP srcp, int xsrc, int ysrc) { - HPS hpsdest; - HPS hpssrc; - POINTL ptl[4]; + HPS hpsdest; + HPS hpssrc; + POINTL ptl[4]; int destheight, srcheight; - if(dest) - { - hpsdest = WinGetPS(dest); - destheight = _get_height(dest); - } - else if(destp) - { - hpsdest = destp->hps; - destheight = destp->height; - } - else - return; - - if(src) - { - hpssrc = WinGetPS(src); - srcheight = _get_height(src); - } - else if(srcp) - { - hpssrc = srcp->hps; - srcheight = srcp->height; - } - else - { - if(!destp) - WinReleasePS(hpsdest); - return; - } - - ptl[0].x = xdest; - ptl[0].y = (destheight - ydest) - height; - ptl[1].x = ptl[0].x + width; - ptl[1].y = destheight - ydest; - ptl[2].x = xsrc; - ptl[2].y = srcheight - (ysrc + height); - ptl[3].x = ptl[2].x + width; - ptl[3].y = ptl[2].y + height; - - GpiBitBlt(hpsdest, hpssrc, 4, ptl, ROP_SRCCOPY, BBO_IGNORE); - - if(!destp) - WinReleasePS(hpsdest); - if(!srcp) - WinReleasePS(hpssrc); + if(dest) + { + hpsdest = WinGetPS(dest); + destheight = _get_height(dest); + } + else if(destp) + { + hpsdest = destp->hps; + destheight = destp->height; + } + else + return; + + if(src) + { + hpssrc = WinGetPS(src); + srcheight = _get_height(src); + } + else if(srcp) + { + hpssrc = srcp->hps; + srcheight = srcp->height; + } + else + { + if(!destp) + WinReleasePS(hpsdest); + return; + } + + ptl[0].x = xdest; + ptl[0].y = (destheight - ydest) - height; + ptl[1].x = ptl[0].x + width; + ptl[1].y = destheight - ydest; + ptl[2].x = xsrc; + ptl[2].y = srcheight - (ysrc + height); + ptl[3].x = ptl[2].x + width; + ptl[3].y = ptl[2].y + height; + + GpiBitBlt(hpsdest, hpssrc, 4, ptl, ROP_SRCCOPY, BBO_IGNORE); + + if(!destp) + WinReleasePS(hpsdest); + if(!srcp) + WinReleasePS(hpssrc); } /* Run DosBeep() in a separate thread so it doesn't block */ void _beepthread(void *data) { - int *info = (int *)data; - - if(data) - { - DosBeep(info[0], info[1]); - free(data); - } + int *info = (int *)data; + + if(data) + { + DosBeep(info[0], info[1]); + free(data); + } } /* @@ -8404,15 +8419,15 @@ */ void API dw_beep(int freq, int dur) { - int *info = malloc(sizeof(int) * 2); - - if(info) - { - info[0] = freq; - info[1] = dur; - - _beginthread(_beepthread, NULL, 100, (void *)info); - } + int *info = malloc(sizeof(int) * 2); + + if(info) + { + info[0] = freq; + info[1] = dur; + + _beginthread(_beepthread, NULL, 100, (void *)info); + } } /* Open a shared library and return a handle. @@ -8423,9 +8438,9 @@ */ int API dw_module_load(char *name, HMOD *handle) { - char objnamebuf[300] = ""; - - return DosLoadModule(objnamebuf, sizeof(objnamebuf), name, handle); + char objnamebuf[300] = ""; + + return DosLoadModule(objnamebuf, sizeof(objnamebuf), name, handle); } /* Queries the address of a symbol within open handle. @@ -8437,7 +8452,7 @@ */ int API dw_module_symbol(HMOD handle, char *name, void**func) { - return DosQueryProcAddr(handle, 0, name, (PFN*)func); + return DosQueryProcAddr(handle, 0, name, (PFN*)func); } /* Frees the shared library previously opened. @@ -8446,8 +8461,8 @@ */ int API dw_module_close(HMOD handle) { - DosFreeModule(handle); - return 0; + DosFreeModule(handle); + return 0; } /* @@ -8455,10 +8470,10 @@ */ HMTX API dw_mutex_new(void) { - HMTX mutex; - - DosCreateMutexSem(NULL, &mutex, 0, FALSE); - return mutex; + HMTX mutex; + + DosCreateMutexSem(NULL, &mutex, 0, FALSE); + return mutex; } /* @@ -8468,7 +8483,7 @@ */ void API dw_mutex_close(HMTX mutex) { - DosCloseMutexSem(mutex); + DosCloseMutexSem(mutex); } /* @@ -8480,18 +8495,18 @@ */ void API dw_mutex_lock(HMTX mutex) { - if(_dwtid == dw_thread_id()) - { - int rc = DosRequestMutexSem(mutex, SEM_IMMEDIATE_RETURN); - - while(rc == ERROR_TIMEOUT) - { - dw_main_sleep(10); - rc = DosRequestMutexSem(mutex, SEM_IMMEDIATE_RETURN); - } - } + if(_dwtid == dw_thread_id()) + { + int rc = DosRequestMutexSem(mutex, SEM_IMMEDIATE_RETURN); + + while(rc == ERROR_TIMEOUT) + { + dw_main_sleep(10); + rc = DosRequestMutexSem(mutex, SEM_IMMEDIATE_RETURN); + } + } else - DosRequestMutexSem(mutex, SEM_INDEFINITE_WAIT); + DosRequestMutexSem(mutex, SEM_INDEFINITE_WAIT); } /* @@ -8501,7 +8516,7 @@ */ void API dw_mutex_unlock(HMTX mutex) { - DosReleaseMutexSem(mutex); + DosReleaseMutexSem(mutex); } /* @@ -8509,12 +8524,12 @@ */ HEV API dw_event_new(void) { - HEV blah; - - if(DosCreateEventSem (NULL, &blah, 0L, FALSE)) - return 0; - - return blah; + HEV blah; + + if(DosCreateEventSem (NULL, &blah, 0L, FALSE)) + return 0; + + return blah; } /* @@ -8524,11 +8539,11 @@ */ int API dw_event_reset(HEV eve) { - ULONG count; - - if(DosResetEventSem(eve, &count)) - return FALSE; - return TRUE; + ULONG count; + + if(DosResetEventSem(eve, &count)) + return FALSE; + return TRUE; } /* @@ -8539,9 +8554,9 @@ */ int API dw_event_post(HEV eve) { - if(DosPostEventSem(eve)) - return FALSE; - return TRUE; + if(DosPostEventSem(eve)) + return FALSE; + return TRUE; } @@ -8553,12 +8568,12 @@ */ int API dw_event_wait(HEV eve, unsigned long timeout) { - int rc = DosWaitEventSem(eve, timeout); - if(!rc) - return 1; - if(rc == ERROR_TIMEOUT) - return -1; - return 0; + int rc = DosWaitEventSem(eve, timeout); + if(!rc) + return 1; + if(rc == ERROR_TIMEOUT) + return -1; + return 0; } /* @@ -8568,9 +8583,9 @@ */ int API dw_event_close(HEV *eve) { - if(!eve || ~DosCloseEventSem(*eve)) - return FALSE; - return TRUE; + if(!eve || ~DosCloseEventSem(*eve)) + return FALSE; + return TRUE; } /* Create a named event semaphore which can be @@ -8582,19 +8597,19 @@ */ HEV API dw_named_event_new(char *name) { - char *semname = malloc(strlen(name)+8); - HEV ev = 0; - - if(!semname) - return 0; - - strcpy(semname, "\\sem32\\"); - strcat(semname, name); - - DosCreateEventSem(semname, &ev, 0L, FALSE); - - free(semname); - return ev; + char *semname = malloc(strlen(name)+8); + HEV ev = 0; + + if(!semname) + return 0; + + strcpy(semname, "\\sem32\\"); + strcat(semname, name); + + DosCreateEventSem(semname, &ev, 0L, FALSE); + + free(semname); + return ev; } /* Open an already existing named event semaphore. @@ -8605,19 +8620,19 @@ */ HEV API dw_named_event_get(char *name) { - char *semname = malloc(strlen(name)+8); - HEV ev; - - if(!semname) - return 0; - - strcpy(semname, "\\sem32\\"); - strcat(semname, name); - - DosOpenEventSem(semname, &ev); - - free(semname); - return ev; + char *semname = malloc(strlen(name)+8); + HEV ev; + + if(!semname) + return 0; + + strcpy(semname, "\\sem32\\"); + strcat(semname, name); + + DosOpenEventSem(semname, &ev); + + free(semname); + return ev; } /* Resets the event semaphore so threads who call wait @@ -8628,9 +8643,9 @@ */ int API dw_named_event_reset(HEV eve) { - ULONG count; - - return DosResetEventSem(eve, &count); + ULONG count; + + return DosResetEventSem(eve, &count); } /* Sets the posted state of an event semaphore, any threads @@ -8641,7 +8656,7 @@ */ int API dw_named_event_post(HEV eve) { - return DosPostEventSem(eve); + return DosPostEventSem(eve); } @@ -8655,26 +8670,26 @@ */ int API dw_named_event_wait(HEV eve, unsigned long timeout) { - int rc; - - rc = DosWaitEventSem(eve, timeout); - switch (rc) - { - case ERROR_INVALID_HANDLE: - rc = DW_ERROR_NON_INIT; - break; - case ERROR_NOT_ENOUGH_MEMORY: - rc = DW_ERROR_NO_MEM; - break; - case ERROR_INTERRUPT: - rc = DW_ERROR_INTERRUPT; - break; - case ERROR_TIMEOUT: - rc = DW_ERROR_TIMEOUT; - break; - } - - return rc; + int rc; + + rc = DosWaitEventSem(eve, timeout); + switch (rc) + { + case ERROR_INVALID_HANDLE: + rc = DW_ERROR_NON_INIT; + break; + case ERROR_NOT_ENOUGH_MEMORY: + rc = DW_ERROR_NO_MEM; + break; + case ERROR_INTERRUPT: + rc = DW_ERROR_INTERRUPT; + break; + case ERROR_TIMEOUT: + rc = DW_ERROR_TIMEOUT; + break; + } + + return rc; } /* Release this semaphore, if there are no more open @@ -8685,21 +8700,21 @@ */ int API dw_named_event_close(HEV eve) { - int rc; - - rc = DosCloseEventSem(eve); - switch (rc) - { - case ERROR_INVALID_HANDLE: - rc = DW_ERROR_NON_INIT; - break; - - case ERROR_SEM_BUSY: - rc = DW_ERROR_INTERRUPT; - break; - } - - return rc; + int rc; + + rc = DosCloseEventSem(eve); + switch (rc) + { + case ERROR_INVALID_HANDLE: + rc = DW_ERROR_NON_INIT; + break; + + case ERROR_SEM_BUSY: + rc = DW_ERROR_INTERRUPT; + break; + } + + return rc; } /* @@ -8712,14 +8727,14 @@ */ HSHM API dw_named_memory_new(void **dest, int size, char *name) { - char namebuf[1024]; - - sprintf(namebuf, "\\sharemem\\%s", name); - - if(DosAllocSharedMem((void *)dest, namebuf, size, PAG_COMMIT | PAG_WRITE | PAG_READ) != NO_ERROR) - return 0; - - return 1; + char namebuf[1024]; + + sprintf(namebuf, "\\sharemem\\%s", name); + + if(DosAllocSharedMem((void *)dest, namebuf, size, PAG_COMMIT | PAG_WRITE | PAG_READ) != NO_ERROR) + return 0; + + return 1; } /* @@ -8731,15 +8746,15 @@ */ HSHM API dw_named_memory_get(void **dest, int size, char *name) { - char namebuf[1024]; - - size = size; - sprintf(namebuf, "\\sharemem\\%s", name); - - if(DosGetNamedSharedMem((void *)dest, namebuf, PAG_READ | PAG_WRITE) != NO_ERROR) - return 0; - - return 1; + char namebuf[1024]; + + size = size; + sprintf(namebuf, "\\sharemem\\%s", name); + + if(DosGetNamedSharedMem((void *)dest, namebuf, PAG_READ | PAG_WRITE) != NO_ERROR) + return 0; + + return 1; } /* @@ -8750,11 +8765,11 @@ */ int API dw_named_memory_free(HSHM handle, void *ptr) { - handle = handle; - - if(DosFreeMem(ptr) != NO_ERROR) - return -1; - return 0; + handle = handle; + + if(DosFreeMem(ptr) != NO_ERROR) + return -1; + return 0; } /* @@ -8762,18 +8777,18 @@ */ void _dwthreadstart(void *data) { - HAB thishab = WinInitialize(0); - HMQ thishmq = WinCreateMsgQueue(dwhab, 0); - void (* API threadfunc)(void *) = NULL; - void **tmp = (void **)data; - - threadfunc = (void (* API)(void *))tmp[0]; - threadfunc(tmp[1]); - - free(tmp); - - WinDestroyMsgQueue(thishmq); - WinTerminate(thishab); + HAB thishab = WinInitialize(0); + HMQ thishmq = WinCreateMsgQueue(dwhab, 0); + void (* API threadfunc)(void *) = NULL; + void **tmp = (void **)data; + + threadfunc = (void (* API)(void *))tmp[0]; + threadfunc(tmp[1]); + + free(tmp); + + WinDestroyMsgQueue(thishmq); + WinTerminate(thishab); } /* @@ -8785,12 +8800,12 @@ */ DWTID API dw_thread_new(void *func, void *data, int stack) { - void **tmp = malloc(sizeof(void *) * 2); - - tmp[0] = func; - tmp[1] = data; - - return (DWTID)_beginthread((void (*)(void *))_dwthreadstart, NULL, stack, (void *)tmp); + void **tmp = malloc(sizeof(void *) * 2); + + tmp[0] = func; + tmp[1] = data; + + return (DWTID)_beginthread((void (*)(void *))_dwthreadstart, NULL, stack, (void *)tmp); } /* @@ -8798,7 +8813,7 @@ */ void API dw_thread_end(void) { - _endthread(); + _endthread(); } /* @@ -8806,7 +8821,7 @@ */ DWTID API dw_thread_id(void) { - return (DWTID)_threadid; + return (DWTID)_threadid; } /* @@ -8816,17 +8831,17 @@ */ void API dw_exit(int exitcode) { - /* Destroy the menu message window */ - dw_window_destroy(hwndApp); - - /* In case we are in a signal handler, don't - * try to free memory that could possibly be - * free()'d by the runtime already. - */ - Root = NULL; - - DosFreeModule(wpconfig); - exit(exitcode); + /* Destroy the menu message window */ + dw_window_destroy(hwndApp); + + /* In case we are in a signal handler, don't + * try to free memory that could possibly be + * free()'d by the runtime already. + */ + Root = NULL; + + DosFreeModule(wpconfig); + exit(exitcode); } /* @@ -8840,34 +8855,34 @@ */ HWND API dw_splitbar_new(int type, HWND topleft, HWND bottomright, unsigned long id) { - HWND tmp = WinCreateWindow(HWND_OBJECT, - SplitbarClassName, - NULL, - WS_VISIBLE | WS_CLIPCHILDREN, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - if(tmp) - { - HWND tmpbox = dw_box_new(DW_VERT, 0); + HWND tmp = WinCreateWindow(HWND_OBJECT, + SplitbarClassName, + NULL, + WS_VISIBLE | WS_CLIPCHILDREN, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + if(tmp) + { + HWND tmpbox = dw_box_new(DW_VERT, 0); float *percent = malloc(sizeof(float)); - dw_box_pack_start(tmpbox, topleft, 1, 1, TRUE, TRUE, 0); - WinSetParent(tmpbox, tmp, FALSE); - dw_window_set_data(tmp, "_dw_topleft", (void *)tmpbox); - - tmpbox = dw_box_new(DW_VERT, 0); - dw_box_pack_start(tmpbox, bottomright, 1, 1, TRUE, TRUE, 0); - WinSetParent(tmpbox, tmp, FALSE); - *percent = 50.0; - dw_window_set_data(tmp, "_dw_bottomright", (void *)tmpbox); - dw_window_set_data(tmp, "_dw_percent", (void *)percent); - dw_window_set_data(tmp, "_dw_type", (void *)type); - } - return tmp; + dw_box_pack_start(tmpbox, topleft, 1, 1, TRUE, TRUE, 0); + WinSetParent(tmpbox, tmp, FALSE); + dw_window_set_data(tmp, "_dw_topleft", (void *)tmpbox); + + tmpbox = dw_box_new(DW_VERT, 0); + dw_box_pack_start(tmpbox, bottomright, 1, 1, TRUE, TRUE, 0); + WinSetParent(tmpbox, tmp, FALSE); + *percent = 50.0; + dw_window_set_data(tmp, "_dw_bottomright", (void *)tmpbox); + dw_window_set_data(tmp, "_dw_percent", (void *)percent); + dw_window_set_data(tmp, "_dw_type", (void *)type); + } + return tmp; } /* @@ -8877,16 +8892,16 @@ */ void API dw_splitbar_set(HWND handle, float percent) { - float *mypercent = (float *)dw_window_get_data(handle, "_dw_percent"); - int type = (int)dw_window_get_data(handle, "_dw_type"); + float *mypercent = (float *)dw_window_get_data(handle, "_dw_percent"); + int type = (int)dw_window_get_data(handle, "_dw_type"); unsigned long width, height; - if(mypercent) - *mypercent = percent; - - dw_window_get_pos_size(handle, NULL, NULL, &width, &height); - - _handle_splitbar_resize(handle, percent, type, width, height); + if(mypercent) + *mypercent = percent; + + dw_window_get_pos_size(handle, NULL, NULL, &width, &height); + + _handle_splitbar_resize(handle, percent, type, width, height); } /* @@ -8896,11 +8911,11 @@ */ float API dw_splitbar_get(HWND handle) { - float *percent = (float *)dw_window_get_data(handle, "_dw_percent"); - - if(percent) - return *percent; - return 0.0; + float *percent = (float *)dw_window_get_data(handle, "_dw_percent"); + + if(percent) + return *percent; + return 0.0; } /* @@ -8916,177 +8931,177 @@ */ void API dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) { - char *funcname = "dw_box_pack_start()"; - - /* - * If you try and pack an item into itself VERY bad things can happen; like at least an - * infinite loop on GTK! Lets be safe! - */ - if(box == item) - { - dw_messagebox(funcname, DW_MB_OK|DW_MB_ERROR, "Danger! Danger! Will Robinson; box and item are the same!"); - return; - } - - if(WinWindowFromID(box, FID_CLIENT)) - { - box = WinWindowFromID(box, FID_CLIENT); - hsize = TRUE; - vsize = TRUE; - } - _dw_box_pack_start(box, item, width, height, hsize, vsize, pad, funcname); + char *funcname = "dw_box_pack_start()"; + + /* + * If you try and pack an item into itself VERY bad things can happen; like at least an + * infinite loop on GTK! Lets be safe! + */ + if(box == item) + { + dw_messagebox(funcname, DW_MB_OK|DW_MB_ERROR, "Danger! Danger! Will Robinson; box and item are the same!"); + return; + } + + if(WinWindowFromID(box, FID_CLIENT)) + { + box = WinWindowFromID(box, FID_CLIENT); + hsize = TRUE; + vsize = TRUE; + } + _dw_box_pack_start(box, item, width, height, hsize, vsize, pad, funcname); } void _dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad, char *functionname) { - Box *thisbox = WinQueryWindowPtr(box, QWP_USER); - - if(thisbox) - { - int z; - Item *tmpitem, *thisitem = thisbox->items; - char tmpbuf[100]; - HWND frame = (HWND)dw_window_get_data(item, "_dw_combo_box"); - - tmpitem = malloc(sizeof(Item)*(thisbox->count+1)); - - for(z=0;z<thisbox->count;z++) - { - tmpitem[z] = thisitem[z]; - } - - WinQueryClassName(item, 99, tmpbuf); - - if(vsize && !height) - height = 1; - if(hsize && !width) - width = 1; - - if(strncmp(tmpbuf, "#1", 3)==0) - tmpitem[thisbox->count].type = TYPEBOX; - else - { - if ( width == 0 && hsize == FALSE ) - dw_messagebox(functionname, DW_MB_OK|DW_MB_ERROR, "Width and expand Horizonal both unset for box: %x item: %x",box,item); - if ( height == 0 && vsize == FALSE ) - dw_messagebox(functionname, DW_MB_OK|DW_MB_ERROR, "Height and expand Vertical both unset for box: %x item: %x",box,item); - - tmpitem[thisbox->count].type = TYPEITEM; - } - - tmpitem[thisbox->count].hwnd = item; - tmpitem[thisbox->count].origwidth = tmpitem[thisbox->count].width = width; - tmpitem[thisbox->count].origheight = tmpitem[thisbox->count].height = height; - tmpitem[thisbox->count].pad = pad; - if(hsize) - tmpitem[thisbox->count].hsize = SIZEEXPAND; - else - tmpitem[thisbox->count].hsize = SIZESTATIC; - - if(vsize) - tmpitem[thisbox->count].vsize = SIZEEXPAND; - else - tmpitem[thisbox->count].vsize = SIZESTATIC; - - thisbox->items = tmpitem; - - if(thisbox->count) - free(thisitem); - - thisbox->count++; + Box *thisbox = WinQueryWindowPtr(box, QWP_USER); + + if(thisbox) + { + int z; + Item *tmpitem, *thisitem = thisbox->items; + char tmpbuf[100]; + HWND frame = (HWND)dw_window_get_data(item, "_dw_combo_box"); + + tmpitem = malloc(sizeof(Item)*(thisbox->count+1)); + + for(z=0;z<thisbox->count;z++) + { + tmpitem[z] = thisitem[z]; + } + + WinQueryClassName(item, 99, tmpbuf); + + if(vsize && !height) + height = 1; + if(hsize && !width) + width = 1; + + if(strncmp(tmpbuf, "#1", 3)==0) + tmpitem[thisbox->count].type = TYPEBOX; + else + { + if ( width == 0 && hsize == FALSE ) + dw_messagebox(functionname, DW_MB_OK|DW_MB_ERROR, "Width and expand Horizonal both unset for box: %x item: %x",box,item); + if ( height == 0 && vsize == FALSE ) + dw_messagebox(functionname, DW_MB_OK|DW_MB_ERROR, "Height and expand Vertical both unset for box: %x item: %x",box,item); + + tmpitem[thisbox->count].type = TYPEITEM; + } + + tmpitem[thisbox->count].hwnd = item; + tmpitem[thisbox->count].origwidth = tmpitem[thisbox->count].width = width; + tmpitem[thisbox->count].origheight = tmpitem[thisbox->count].height = height; + tmpitem[thisbox->count].pad = pad; + if(hsize) + tmpitem[thisbox->count].hsize = SIZEEXPAND; + else + tmpitem[thisbox->count].hsize = SIZESTATIC; + + if(vsize) + tmpitem[thisbox->count].vsize = SIZEEXPAND; + else + tmpitem[thisbox->count].vsize = SIZESTATIC; + + thisbox->items = tmpitem; + + if(thisbox->count) + free(thisitem); + + thisbox->count++; /* Don't set the ownership if it's an entryfield or spinbutton */ - WinQueryClassName(item, 99, tmpbuf); - if(strncmp(tmpbuf, "#6", 3)!=0 && strncmp(tmpbuf, "#32", 4)!=0 && strncmp(tmpbuf, "#2", 3)!=0) - WinSetOwner(item, box); - WinSetParent(frame ? frame : item, box, FALSE); - } + WinQueryClassName(item, 99, tmpbuf); + if(strncmp(tmpbuf, "#6", 3)!=0 && strncmp(tmpbuf, "#32", 4)!=0 && strncmp(tmpbuf, "#2", 3)!=0) + WinSetOwner(item, box); + WinSetParent(frame ? frame : item, box, FALSE); + } } /* The following two functions graciously contributed by Peter Nielsen. */ static ULONG _ParseBuildLevel (char* pchBuffer, ULONG ulSize) { - char* pchStart = pchBuffer; - char* pchEnd = pchStart + ulSize - 2; - - while (pchEnd >= pchStart) - { - if ((pchEnd[0] == '#') && (pchEnd[1] == '@')) - { - *pchEnd-- = '\0'; - while (pchEnd >= pchStart) - { - if ((pchEnd[0] == '@') && (pchEnd[1] == '#')) - { - ULONG ulMajor = 0; - ULONG ulMinor = 0; - - char* pch = pchEnd + 2; - while (!isdigit ((int)*pch) && *pch) - pch++; - - while (isdigit ((int)*pch)) - ulMajor = ulMajor * 10 + *pch++ - '0'; - - if (*pch == '.') - { - while (isdigit ((int)*++pch)) - ulMinor = ulMinor * 10 + *pch - '0'; - } - return ((ulMajor << 16) | ulMinor); - } - pchEnd--; - } - } - pchEnd--; - } - return (0); + char* pchStart = pchBuffer; + char* pchEnd = pchStart + ulSize - 2; + + while (pchEnd >= pchStart) + { + if ((pchEnd[0] == '#') && (pchEnd[1] == '@')) + { + *pchEnd-- = '\0'; + while (pchEnd >= pchStart) + { + if ((pchEnd[0] == '@') && (pchEnd[1] == '#')) + { + ULONG ulMajor = 0; + ULONG ulMinor = 0; + + char* pch = pchEnd + 2; + while (!isdigit ((int)*pch) && *pch) + pch++; + + while (isdigit ((int)*pch)) + ulMajor = ulMajor * 10 + *pch++ - '0'; + + if (*pch == '.') + { + while (isdigit ((int)*++pch)) + ulMinor = ulMinor * 10 + *pch - '0'; + } + return ((ulMajor << 16) | ulMinor); + } + pchEnd--; + } + } + pchEnd--; + } + return (0); } ULONG _GetSystemBuildLevel(void) { - /* The build level info is normally available in the end of the OS2KRNL file. However, this is not the case in some beta versions of OS/2. - * We first try to find the info in the 256 last bytes of the file. If that fails, we load the entire file and search it completely. - */ - ULONG ulBootDrive = 0; - ULONG ulBuild = 0; - if (DosQuerySysInfo (QSV_BOOT_DRIVE, QSV_BOOT_DRIVE, &ulBootDrive, sizeof (ulBootDrive)) == NO_ERROR) - { - char achFileName[11] = "C:\\OS2KRNL"; - HFILE hfile; - ULONG ulResult; + /* The build level info is normally available in the end of the OS2KRNL file. However, this is not the case in some beta versions of OS/2. + * We first try to find the info in the 256 last bytes of the file. If that fails, we load the entire file and search it completely. + */ + ULONG ulBootDrive = 0; + ULONG ulBuild = 0; + if (DosQuerySysInfo (QSV_BOOT_DRIVE, QSV_BOOT_DRIVE, &ulBootDrive, sizeof (ulBootDrive)) == NO_ERROR) + { + char achFileName[11] = "C:\\OS2KRNL"; + HFILE hfile; + ULONG ulResult; achFileName[0] = (char)('A'+ulBootDrive-1); - if (DosOpen (achFileName, &hfile, &ulResult, 0, 0, OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS, OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_SEQUENTIAL | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, NULL) == NO_ERROR) - { - ULONG ulFileSize = 0; - if (DosSetFilePtr (hfile, 0, FILE_END, &ulFileSize) == NO_ERROR) - { - const ULONG ulFirstTry = min (256, ulFileSize); - if (DosSetFilePtr (hfile, -(LONG)ulFirstTry, FILE_END, &ulResult) == NO_ERROR) - { - char *pchBuffer = malloc(ulFirstTry); - if (DosRead (hfile, pchBuffer, ulFirstTry, &ulResult) == NO_ERROR) - { - ulBuild = _ParseBuildLevel (pchBuffer, ulFirstTry); - if (ulBuild == 0) - { - if (DosSetFilePtr (hfile, 0, FILE_BEGIN, &ulResult) == NO_ERROR) - { - free(pchBuffer); - pchBuffer = malloc(ulFileSize); - - if (DosRead (hfile, pchBuffer, ulFileSize, &ulResult) == NO_ERROR) - ulBuild = _ParseBuildLevel (pchBuffer, ulFileSize); - } - } - } - free(pchBuffer); - } - } - DosClose (hfile); - } - } - return (ulBuild); + if (DosOpen (achFileName, &hfile, &ulResult, 0, 0, OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS, OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_SEQUENTIAL | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, NULL) == NO_ERROR) + { + ULONG ulFileSize = 0; + if (DosSetFilePtr (hfile, 0, FILE_END, &ulFileSize) == NO_ERROR) + { + const ULONG ulFirstTry = min (256, ulFileSize); + if (DosSetFilePtr (hfile, -(LONG)ulFirstTry, FILE_END, &ulResult) == NO_ERROR) + { + char *pchBuffer = malloc(ulFirstTry); + if (DosRead (hfile, pchBuffer, ulFirstTry, &ulResult) == NO_ERROR) + { + ulBuild = _ParseBuildLevel (pchBuffer, ulFirstTry); + if (ulBuild == 0) + { + if (DosSetFilePtr (hfile, 0, FILE_BEGIN, &ulResult) == NO_ERROR) + { + free(pchBuffer); + pchBuffer = malloc(ulFileSize); + + if (DosRead (hfile, pchBuffer, ulFileSize, &ulResult) == NO_ERROR) + ulBuild = _ParseBuildLevel (pchBuffer, ulFileSize); + } + } + } + free(pchBuffer); + } + } + DosClose (hfile); + } + } + return (ulBuild); } /* @@ -9097,15 +9112,15 @@ */ void API dw_window_default(HWND window, HWND defaultitem) { - Box *thisbox = NULL; - HWND box; - - box = WinWindowFromID(window, FID_CLIENT); - if(box) - thisbox = WinQueryWindowPtr(box, QWP_USER); - - if(thisbox) - thisbox->defaultitem = defaultitem; + Box *thisbox = NULL; + HWND box; + + box = WinWindowFromID(window, FID_CLIENT); + if(box) + thisbox = WinQueryWindowPtr(box, QWP_USER); + + if(thisbox) + thisbox->defaultitem = defaultitem; } /* @@ -9116,10 +9131,10 @@ */ void API dw_window_click_default(HWND window, HWND next) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(window, QWP_USER); - - if(blah) - blah->clickdefault = next; + WindowData *blah = (WindowData *)WinQueryWindowPtr(window, QWP_USER); + + if(blah) + blah->clickdefault = next; } /* @@ -9154,198 +9169,198 @@ */ void API dw_environment_query(DWEnv *env) { - ULONG Build; - - if(!env) - return; - - /* The default is OS/2 2.0 */ - strcpy(env->osName,"OS/2"); - env->MajorVersion = 2; - env->MinorVersion = 0; - - Build = _GetSystemBuildLevel(); - env->MinorBuild = Build & 0xFFFF; - env->MajorBuild = Build >> 16; - - if (aulBuffer[0] == 20) - { - int i = (unsigned int)aulBuffer[1]; - if (i > 20) - { - strcpy(env->osName,"Warp"); - env->MajorVersion = (int)i/10; - env->MinorVersion = i-(((int)i/10)*10); - } - else if (i == 10) - env->MinorVersion = 1; - } - strcpy(env->buildDate, __DATE__); - strcpy(env->buildTime, __TIME__); - env->DWMajorVersion = DW_MAJOR_VERSION; - env->DWMinorVersion = DW_MINOR_VERSION; - env->DWSubVersion = DW_SUB_VERSION; + ULONG Build; + + if(!env) + return; + + /* The default is OS/2 2.0 */ + strcpy(env->osName,"OS/2"); + env->MajorVersion = 2; + env->MinorVersion = 0; + + Build = _GetSystemBuildLevel(); + env->MinorBuild = Build & 0xFFFF; + env->MajorBuild = Build >> 16; + + if (aulBuffer[0] == 20) + { + int i = (unsigned int)aulBuffer[1]; + if (i > 20) + { + strcpy(env->osName,"Warp"); + env->MajorVersion = (int)i/10; + env->MinorVersion = i-(((int)i/10)*10); + } + else if (i == 10) + env->MinorVersion = 1; + } + strcpy(env->buildDate, __DATE__); + strcpy(env->buildTime, __TIME__); + env->DWMajorVersion = DW_MAJOR_VERSION; + env->DWMinorVersion = DW_MINOR_VERSION; + env->DWSubVersion = DW_SUB_VERSION; } /* The next few functions are support functions for the OS/2 folder browser */ void _populate_directory(HWND tree, HTREEITEM parent, char *path) { - FILEFINDBUF3 ffbuf; - HTREEITEM item; - ULONG count = 1; - HDIR hdir = HDIR_CREATE; - - if(DosFindFirst(path, &hdir, FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_ARCHIVED | MUST_HAVE_DIRECTORY, - &ffbuf, sizeof(FILEFINDBUF3), &count, FIL_STANDARD) == NO_ERROR) - { - while(DosFindNext(hdir, &ffbuf, sizeof(FILEFINDBUF3), &count) == NO_ERROR) - { - if(strcmp(ffbuf.achName, ".") && strcmp(ffbuf.achName, "..")) - { - int len = strlen(path); - char *folder = malloc(len + ffbuf.cchName + 2); - HTREEITEM tempitem; - - strcpy(folder, path); - strcpy(&folder[len-1], ffbuf.achName); - - item = dw_tree_insert(tree, ffbuf.achName, WinLoadFileIcon(folder, TRUE), parent, (void *)parent); - tempitem = dw_tree_insert(tree, "", 0, item, 0); - dw_tree_item_set_data(tree, item, (void *)tempitem); - } - } - DosFindClose(hdir); - } + FILEFINDBUF3 ffbuf; + HTREEITEM item; + ULONG count = 1; + HDIR hdir = HDIR_CREATE; + + if(DosFindFirst(path, &hdir, FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_ARCHIVED | MUST_HAVE_DIRECTORY, + &ffbuf, sizeof(FILEFINDBUF3), &count, FIL_STANDARD) == NO_ERROR) + { + while(DosFindNext(hdir, &ffbuf, sizeof(FILEFINDBUF3), &count) == NO_ERROR) + { + if(strcmp(ffbuf.achName, ".") && strcmp(ffbuf.achName, "..")) + { + int len = strlen(path); + char *folder = malloc(len + ffbuf.cchName + 2); + HTREEITEM tempitem; + + strcpy(folder, path); + strcpy(&folder[len-1], ffbuf.achName); + + item = dw_tree_insert(tree, ffbuf.achName, WinLoadFileIcon(folder, TRUE), parent, (void *)parent); + tempitem = dw_tree_insert(tree, "", 0, item, 0); + dw_tree_item_set_data(tree, item, (void *)tempitem); + } + } + DosFindClose(hdir); + } } void _populate_tree_thread(void *data) { - HWND window = (HWND)data, tree = (HWND)dw_window_get_data(window, "_dw_tree"); - HMTX mtx = (HMTX)dw_window_get_data(window, "_dw_mutex"); - int drive; - HTREEITEM items[26]; - FSINFO volinfo; - - DosError(FERR_DISABLEHARDERR); - - dw_mutex_lock(mtx); - for(drive=0;drive<26;drive++) - { - if(DosQueryFSInfo(drive+1, FSIL_VOLSER,(PVOID)&volinfo, sizeof(FSINFO)) == NO_ERROR) - { - char folder[5] = "C:\\", name[9] = "Drive C:"; - HTREEITEM tempitem; - - folder[0] = name[6] = 'A' + drive; - - items[drive] = dw_tree_insert(tree, name, WinLoadFileIcon(folder, TRUE), NULL, 0); - tempitem = dw_tree_insert(tree, "", 0, items[drive], 0); - dw_tree_item_set_data(tree, items[drive], (void *)tempitem); - } - else - items[drive] = 0; - } - dw_mutex_unlock(mtx); - - DosError(FERR_ENABLEHARDERR); + HWND window = (HWND)data, tree = (HWND)dw_window_get_data(window, "_dw_tree"); + HMTX mtx = (HMTX)dw_window_get_data(window, "_dw_mutex"); + int drive; + HTREEITEM items[26]; + FSINFO volinfo; + + DosError(FERR_DISABLEHARDERR); + + dw_mutex_lock(mtx); + for(drive=0;drive<26;drive++) + { + if(DosQueryFSInfo(drive+1, FSIL_VOLSER,(PVOID)&volinfo, sizeof(FSINFO)) == NO_ERROR) + { + char folder[5] = "C:\\", name[9] = "Drive C:"; + HTREEITEM tempitem; + + folder[0] = name[6] = 'A' + drive; + + items[drive] = dw_tree_insert(tree, name, WinLoadFileIcon(folder, TRUE), NULL, 0); + tempitem = dw_tree_insert(tree, "", 0, items[drive], 0); + dw_tree_item_set_data(tree, items[drive], (void *)tempitem); + } + else + items[drive] = 0; + } + dw_mutex_unlock(mtx); + + DosError(FERR_ENABLEHARDERR); } int DWSIGNAL _dw_ok_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - HMTX mtx = (HMTX)dw_window_get_data((HWND)dwwait->data, "_dw_mutex"); - void *treedata; - - window = window; - if(!dwwait) - return FALSE; - - dw_mutex_lock(mtx); - treedata = dw_window_get_data((HWND)dwwait->data, "_dw_tree_selected"); - dw_mutex_close(mtx); - dw_window_destroy((HWND)dwwait->data); - dw_dialog_dismiss((DWDialog *)data, treedata); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + HMTX mtx = (HMTX)dw_window_get_data((HWND)dwwait->data, "_dw_mutex"); + void *treedata; + + window = window; + if(!dwwait) + return FALSE; + + dw_mutex_lock(mtx); + treedata = dw_window_get_data((HWND)dwwait->data, "_dw_tree_selected"); + dw_mutex_close(mtx); + dw_window_destroy((HWND)dwwait->data); + dw_dialog_dismiss((DWDialog *)data, treedata); + return FALSE; } int DWSIGNAL _dw_cancel_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - HMTX mtx = (HMTX)dw_window_get_data((HWND)dwwait->data, "_dw_mutex"); - - window = window; - if(!dwwait) - return FALSE; - - dw_mutex_lock(mtx); - dw_mutex_close(mtx); - dw_window_destroy((HWND)dwwait->data); - dw_dialog_dismiss((DWDialog *)data, NULL); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + HMTX mtx = (HMTX)dw_window_get_data((HWND)dwwait->data, "_dw_mutex"); + + window = window; + if(!dwwait) + return FALSE; + + dw_mutex_lock(mtx); + dw_mutex_close(mtx); + dw_window_destroy((HWND)dwwait->data); + dw_dialog_dismiss((DWDialog *)data, NULL); + return FALSE; } char *_tree_folder(HWND tree, HTREEITEM item) { - char *folder=strdup(""); - HTREEITEM parent = item; - - while(parent) - { - char *temp, *text = dw_tree_get_title(tree, parent); - - if(text) - { - if(strncmp(text, "Drive ", 6) == 0) - text = &text[6]; - - temp = malloc(strlen(text) + strlen(folder) + 3); - strcpy(temp, text); - strcat(temp, "\\"); - strcat(temp, folder); - free(folder); - folder = temp; - } - parent = dw_tree_get_parent(tree, parent); - } - return folder; + char *folder=strdup(""); + HTREEITEM parent = item; + + while(parent) + { + char *temp, *text = dw_tree_get_title(tree, parent); + + if(text) + { + if(strncmp(text, "Drive ", 6) == 0) + text = &text[6]; + + temp = malloc(strlen(text) + strlen(folder) + 3); + strcpy(temp, text); + strcat(temp, "\\"); + strcat(temp, folder); + free(folder); + folder = temp; + } + parent = dw_tree_get_parent(tree, parent); + } + return folder; } int DWSIGNAL _item_select(HWND window, HTREEITEM item, char *text, void *data, void *itemdata) { - DWDialog *dwwait = (DWDialog *)data; - char *treedata = (char *)dw_window_get_data((HWND)dwwait->data, "_dw_tree_selected"); - - text = text; itemdata = itemdata; - if(treedata) - free(treedata); - - treedata = _tree_folder(window, item); - dw_window_set_data((HWND)dwwait->data, "_dw_tree_selected", (void *)treedata); - - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + char *treedata = (char *)dw_window_get_data((HWND)dwwait->data, "_dw_tree_selected"); + + text = text; itemdata = itemdata; + if(treedata) + free(treedata); + + treedata = _tree_folder(window, item); + dw_window_set_data((HWND)dwwait->data, "_dw_tree_selected", (void *)treedata); + + return FALSE; } int DWSIGNAL _tree_expand(HWND window, HTREEITEM item, void *data) { - HTREEITEM tempitem = (HTREEITEM)dw_tree_item_get_data(window, item); - - data = data; - if(tempitem) - { - char *folder = _tree_folder(window, item); - - dw_tree_item_set_data(window, item, 0); - dw_tree_item_delete(window, tempitem); - - if(*folder) - { - strcat(folder, "*"); - _populate_directory(window, item, folder); - } - free(folder); - } - - return FALSE; + HTREEITEM tempitem = (HTREEITEM)dw_tree_item_get_data(window, item); + + data = data; + if(tempitem) + { + char *folder = _tree_folder(window, item); + + dw_tree_item_set_data(window, item, 0); + dw_tree_item_delete(window, tempitem); + + if(*folder) + { + strcat(folder, "*"); + _populate_directory(window, item, folder); + } + free(folder); + } + + return FALSE; } /* @@ -9362,110 +9377,110 @@ */ char * API dw_file_browse(char *title, char *defpath, char *ext, int flags) { - if(flags == DW_DIRECTORY_OPEN) - { - HWND window, hbox, vbox, tree, button; - DWDialog *dwwait; - HMTX mtx = dw_mutex_new(); - - window = dw_window_new( HWND_DESKTOP, title, FCF_SHELLPOSITION | FCF_TITLEBAR | FCF_SIZEBORDER | FCF_MINMAX); - - vbox = dw_box_new(DW_VERT, 5); - - dw_box_pack_start(window, vbox, 0, 0, TRUE, TRUE, 0); - - tree = dw_tree_new(60); - - dw_box_pack_start(vbox, tree, 1, 1, TRUE, TRUE, 0); - dw_window_set_data(window, "_dw_mutex", (void *)mtx); - dw_window_set_data(window, "_dw_tree", (void *)tree); - - hbox = dw_box_new(DW_HORZ, 0); - - dw_box_pack_start(vbox, hbox, 0, 0, TRUE, FALSE, 0); - - dwwait = dw_dialog_new((void *)window); - - dw_signal_connect(tree, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_item_select), (void *)dwwait); - dw_signal_connect(tree, DW_SIGNAL_TREE_EXPAND, DW_SIGNAL_FUNC(_tree_expand), (void *)dwwait); - - button = dw_button_new("Ok", 1001L); - dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); - dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_ok_func), (void *)dwwait); - - button = dw_button_new("Cancel", 1002L); - dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); - dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_cancel_func), (void *)dwwait); - dw_signal_connect(window, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(_dw_cancel_func), (void *)dwwait); - - dw_window_set_size(window, 225, 300); - dw_window_show(window); - - dw_thread_new((void *)_populate_tree_thread, (void *)window, 0xff); - return (char *)dw_dialog_wait(dwwait); - } - else - { - FILEDLG fild; - HWND hwndFile; - int len; - - if(defpath) - strcpy(fild.szFullFile, defpath); - else - strcpy(fild.szFullFile, ""); - - len = strlen(fild.szFullFile); - - if(len) - { - if(fild.szFullFile[len-1] != '\\') - strcat(fild.szFullFile, "\\"); - } - strcat(fild.szFullFile, "*"); - - if(ext) - { - strcat(fild.szFullFile, "."); - strcat(fild.szFullFile, ext); - } - - memset(&fild, 0, sizeof(FILEDLG)); - fild.cbSize = sizeof(FILEDLG); - fild.fl = FDS_CENTER | FDS_OPEN_DIALOG; - fild.pszTitle = title; - fild.pszOKButton = ((flags & DW_FILE_SAVE) ? "Save" : "Open"); - fild.pfnDlgProc = (PFNWP)WinDefFileDlgProc; - - hwndFile = WinFileDlg(HWND_DESKTOP, HWND_DESKTOP, &fild); - if(hwndFile) - { - switch(fild.lReturn) - { - case DID_OK: - return strdup(fild.szFullFile); - case DID_CANCEL: - return NULL; - } - } - } - return NULL; + if(flags == DW_DIRECTORY_OPEN) + { + HWND window, hbox, vbox, tree, button; + DWDialog *dwwait; + HMTX mtx = dw_mutex_new(); + + window = dw_window_new( HWND_DESKTOP, title, FCF_SHELLPOSITION | FCF_TITLEBAR | FCF_SIZEBORDER | FCF_MINMAX); + + vbox = dw_box_new(DW_VERT, 5); + + dw_box_pack_start(window, vbox, 0, 0, TRUE, TRUE, 0); + + tree = dw_tree_new(60); + + dw_box_pack_start(vbox, tree, 1, 1, TRUE, TRUE, 0); + dw_window_set_data(window, "_dw_mutex", (void *)mtx); + dw_window_set_data(window, "_dw_tree", (void *)tree); + + hbox = dw_box_new(DW_HORZ, 0); + + dw_box_pack_start(vbox, hbox, 0, 0, TRUE, FALSE, 0); + + dwwait = dw_dialog_new((void *)window); + + dw_signal_connect(tree, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_item_select), (void *)dwwait); + dw_signal_connect(tree, DW_SIGNAL_TREE_EXPAND, DW_SIGNAL_FUNC(_tree_expand), (void *)dwwait); + + button = dw_button_new("Ok", 1001L); + dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); + dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_ok_func), (void *)dwwait); + + button = dw_button_new("Cancel", 1002L); + dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); + dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_cancel_func), (void *)dwwait); + dw_signal_connect(window, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(_dw_cancel_func), (void *)dwwait); + + dw_window_set_size(window, 225, 300); + dw_window_show(window); + + dw_thread_new((void *)_populate_tree_thread, (void *)window, 0xff); + return (char *)dw_dialog_wait(dwwait); + } + else + { + FILEDLG fild; + HWND hwndFile; + int len; + + if(defpath) + strcpy(fild.szFullFile, defpath); + else + strcpy(fild.szFullFile, ""); + + len = strlen(fild.szFullFile); + + if(len) + { + if(fild.szFullFile[len-1] != '\\') + strcat(fild.szFullFile, "\\"); + } + strcat(fild.szFullFile, "*"); + + if(ext) + { + strcat(fild.szFullFile, "."); + strcat(fild.szFullFile, ext); + } + + memset(&fild, 0, sizeof(FILEDLG)); + fild.cbSize = sizeof(FILEDLG); + fild.fl = FDS_CENTER | FDS_OPEN_DIALOG; + fild.pszTitle = title; + fild.pszOKButton = ((flags & DW_FILE_SAVE) ? "Save" : "Open"); + fild.pfnDlgProc = (PFNWP)WinDefFileDlgProc; + + hwndFile = WinFileDlg(HWND_DESKTOP, HWND_DESKTOP, &fild); + if(hwndFile) + { + switch(fild.lReturn) + { + case DID_OK: + return strdup(fild.szFullFile); + case DID_CANCEL: + return NULL; + } + } + } + return NULL; } /* Internal function to set drive and directory */ int _SetPath(char *path) { #ifndef __WATCOMC__ - if(strlen(path) > 2) - { - if(path[1] == ':') - { - char drive = toupper(path[0]); - _chdrive((drive - 'A')+1); - } - } + if(strlen(path) > 2) + { + if(path[1] == ':') + { + char drive = toupper(path[0]); + _chdrive((drive - 'A')+1); + } + } #endif - return chdir(path); + return chdir(path); } /* @@ -9479,8 +9494,8 @@ */ int API dw_exec(char *program, int type, char **params) { - type = type; /* keep compiler happy */ - return spawnvp(P_NOWAIT, program, (const char **)params); + type = type; /* keep compiler happy */ + return spawnvp(P_NOWAIT, program, (const char **)params); } /* @@ -9490,58 +9505,58 @@ */ int API dw_browse(char *url) { - char *execargs[3], browser[1024], *olddir, *newurl = NULL; - int len, ret; - - olddir = _getcwd(NULL, 1024); - - PrfQueryProfileString(HINI_USERPROFILE, "WPURLDEFAULTSETTINGS", - "DefaultWorkingDir", NULL, browser, 1024); - - if(browser[0]) - _SetPath(browser); - - PrfQueryProfileString(HINI_USERPROFILE, "WPURLDEFAULTSETTINGS", - "DefaultBrowserExe", NULL, browser, 1024); - - len = strlen(browser) - strlen("explore.exe"); - - execargs[0] = browser; - execargs[1] = url; - execargs[2] = NULL; - - /* Special case for Web Explorer, it requires file:/// instead - * of file:// so I am handling it here. - */ - if(len > 0) - { - if(stricmp(&browser[len], "explore.exe") == 0 && stricmp(url, "file://") == 0) - { - int newlen, z; - newurl = malloc(strlen(url) + 2); - sprintf(newurl, "file:///%s", &url[7]); - newlen = strlen(newurl); - for(z=8;z<(newlen-8);z++) - { - if(newurl[z] == '|') - newurl[z] = ':'; - if(newurl[z] == '/') - newurl[z] = '\\'; - } - execargs[1] = newurl; - } - } - - ret = dw_exec(browser, DW_EXEC_GUI, execargs); - - if(olddir) - { - _SetPath(olddir); - free(olddir); - } - if(newurl) - free(newurl); - return ret; + char *execargs[3], browser[1024], *olddir, *newurl = NULL; + int len, ret; + + olddir = _getcwd(NULL, 1024); + + PrfQueryProfileString(HINI_USERPROFILE, "WPURLDEFAULTSETTINGS", + "DefaultWorkingDir", NULL, browser, 1024); + + if(browser[0]) + _SetPath(browser); + + PrfQueryProfileString(HINI_USERPROFILE, "WPURLDEFAULTSETTINGS", + "DefaultBrowserExe", NULL, browser, 1024); + + len = strlen(browser) - strlen("explore.exe"); + + execargs[0] = browser; + execargs[1] = url; + execargs[2] = NULL; + + /* Special case for Web Explorer, it requires file:/// instead + * of file:// so I am handling it here. + */ + if(len > 0) + { + if(stricmp(&browser[len], "explore.exe") == 0 && stricmp(url, "file://") == 0) + { + int newlen, z; + newurl = malloc(strlen(url) + 2); + sprintf(newurl, "file:///%s", &url[7]); + newlen = strlen(newurl); + for(z=8;z<(newlen-8);z++) + { + if(newurl[z] == '|') + newurl[z] = ':'; + if(newurl[z] == '/') + newurl[z] = '\\'; + } + execargs[1] = newurl; + } + } + + ret = dw_exec(browser, DW_EXEC_GUI, execargs); + + if(olddir) + { + _SetPath(olddir); + free(olddir); + } + if(newurl) + free(newurl); + return ret; } /* @@ -9552,8 +9567,8 @@ */ void API dw_html_action(HWND handle, int action) { - handle = handle; - action = action; + handle = handle; + action = action; } /* @@ -9567,9 +9582,9 @@ */ int API dw_html_raw(HWND handle, char *string) { - handle = handle; - string = string; - return -1; + handle = handle; + string = string; + return -1; } /* @@ -9583,21 +9598,22 @@ */ int API dw_html_url(HWND handle, char *url) { - handle = handle; - url = url; - return -1; -} - -/* - * Create a new Entryfield window (widget) to be packed. + handle = handle; + url = url; + return -1; +} + +/* + * Create a new HTML window (widget) to be packed. + * Not available under OS/2, eCS * Parameters: * text: The default text to be in the entryfield widget. * id: An ID to be used with dw_window_from_id() or 0L. */ HWND API dw_html_new(unsigned long id) { - id = id; - return dw_box_new(DW_HORZ, 0); + id = id; + return dw_box_new(DW_HORZ, 0); } /* @@ -9607,18 +9623,18 @@ */ char * API dw_user_dir(void) { - static char _user_dir[1024] = ""; - - if(!_user_dir[0]) - { - char *home = getenv("HOME"); - - if(home) - strcpy(_user_dir, home); - else - strcpy(_user_dir, "C:\\"); - } - return _user_dir; + static char _user_dir[1024] = ""; + + if(!_user_dir[0]) + { + char *home = getenv("HOME"); + + if(home) + strcpy(_user_dir, home); + else + strcpy(_user_dir, "C:\\"); + } + return _user_dir; } /* @@ -9630,7 +9646,7 @@ */ void API dw_window_function(HWND handle, void *function, void *data) { - WinSendMsg(handle, WM_USER, (MPARAM)function, (MPARAM)data); + WinSendMsg(handle, WM_USER, (MPARAM)function, (MPARAM)data); } /* Functions for managing the user data lists that are associated with @@ -9639,92 +9655,92 @@ */ UserData *_find_userdata(UserData **root, char *varname) { - UserData *tmp = *root; - - while(tmp) - { - if(stricmp(tmp->varname, varname) == 0) - return tmp; - tmp = tmp->next; - } - return NULL; + UserData *tmp = *root; + + while(tmp) + { + if(stricmp(tmp->varname, varname) == 0) + return tmp; + tmp = tmp->next; + } + return NULL; } int _new_userdata(UserData **root, char *varname, void *data) { - UserData *new = _find_userdata(root, varname); - - if(new) - { - new->data = data; - return TRUE; - } - else - { - new = malloc(sizeof(UserData)); - if(new) - { - new->varname = strdup(varname); - new->data = data; - - new->next = NULL; - - if (!*root) - *root = new; - else - { - UserData *prev = NULL, *tmp = *root; - while(tmp) - { - prev = tmp; - tmp = tmp->next; - } - if(prev) - prev->next = new; - else - *root = new; - } - return TRUE; - } - } - return FALSE; + UserData *new = _find_userdata(root, varname); + + if(new) + { + new->data = data; + return TRUE; + } + else + { + new = malloc(sizeof(UserData)); + if(new) + { + new->varname = strdup(varname); + new->data = data; + + new->next = NULL; + + if (!*root) + *root = new; + else + { + UserData *prev = NULL, *tmp = *root; + while(tmp) + { + prev = tmp; + tmp = tmp->next; + } + if(prev) + prev->next = new; + else + *root = new; + } + return TRUE; + } + } + return FALSE; } int _remove_userdata(UserData **root, char *varname, int all) { - UserData *prev = NULL, *tmp = *root; - - while(tmp) - { - if(all || stricmp(tmp->varname, varname) == 0) - { - if(!prev) - { - *root = tmp->next; - free(tmp->varname); - free(tmp); - if(!all) - return 0; - tmp = *root; - } - else - { - /* If all is true we should - * never get here. - */ - prev->next = tmp->next; - free(tmp->varname); - free(tmp); - return 0; - } - } - else - { - prev = tmp; - tmp = tmp->next; - } - } - return 0; + UserData *prev = NULL, *tmp = *root; + + while(tmp) + { + if(all || stricmp(tmp->varname, varname) == 0) + { + if(!prev) + { + *root = tmp->next; + free(tmp->varname); + free(tmp); + if(!all) + return 0; + tmp = *root; + } + else + { + /* If all is true we should + * never get here. + */ + prev->next = tmp->next; + free(tmp->varname); + free(tmp); + return 0; + } + } + else + { + prev = tmp; + tmp = tmp->next; + } + } + return 0; } /* @@ -9736,26 +9752,26 @@ */ void API dw_window_set_data(HWND window, char *dataname, void *data) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(window, QWP_USER); - - if(!blah) - { - if(!dataname) - return; - - blah = calloc(1, sizeof(WindowData)); - WinSetWindowPtr(window, QWP_USER, blah); - } - - if(data) - _new_userdata(&(blah->root), dataname, data); - else - { - if(dataname) - _remove_userdata(&(blah->root), dataname, FALSE); - else - _remove_userdata(&(blah->root), NULL, TRUE); - } + WindowData *blah = (WindowData *)WinQueryWindowPtr(window, QWP_USER); + + if(!blah) + { + if(!dataname) + return; + + blah = calloc(1, sizeof(WindowData)); + WinSetWindowPtr(window, QWP_USER, blah); + } + + if(data) + _new_userdata(&(blah->root), dataname, data); + else + { + if(dataname) + _remove_userdata(&(blah->root), dataname, FALSE); + else + _remove_userdata(&(blah->root), NULL, TRUE); + } } /* @@ -9767,15 +9783,15 @@ */ void * API dw_window_get_data(HWND window, char *dataname) { - WindowData *blah = (WindowData *)WinQueryWindowPtr(window, QWP_USER); - - if(blah && blah->root && dataname) - { - UserData *ud = _find_userdata(&(blah->root), dataname); - if(ud) - return ud->data; - } - return NULL; + WindowData *blah = (WindowData *)WinQueryWindowPtr(window, QWP_USER); + + if(blah && blah->root && dataname) + { + UserData *ud = _find_userdata(&(blah->root), dataname); + if(ud) + return ud->data; + } + return NULL; } /* @@ -9789,17 +9805,17 @@ */ int API dw_timer_connect(int interval, void *sigfunc, void *data) { - if(sigfunc) - { - int timerid = WinStartTimer(dwhab, NULLHANDLE, 0, interval); - - if(timerid) - { - _new_signal(WM_TIMER, NULLHANDLE, timerid, sigfunc, data); - return timerid; - } - } - return 0; + if(sigfunc) + { + int timerid = WinStartTimer(dwhab, NULLHANDLE, 0, interval); + + if(timerid) + { + _new_signal(WM_TIMER, NULLHANDLE, timerid, sigfunc, data); + return timerid; + } + } + return 0; } /* @@ -9809,37 +9825,37 @@ */ void API dw_timer_disconnect(int id) { - SignalHandler *prev = NULL, *tmp = Root; - - /* 0 is an invalid timer ID */ - if(!id) - return; - - WinStopTimer(dwhab, NULLHANDLE, id); - - while(tmp) - { - if(tmp->id == id) - { - if(prev) - { - prev->next = tmp->next; - free(tmp); - tmp = prev->next; - } - else - { - Root = tmp->next; - free(tmp); - tmp = Root; - } - } - else - { - prev = tmp; - tmp = tmp->next; - } - } + SignalHandler *prev = NULL, *tmp = Root; + + /* 0 is an invalid timer ID */ + if(!id) + return; + + WinStopTimer(dwhab, NULLHANDLE, id); + + while(tmp) + { + if(tmp->id == id) + { + if(prev) + { + prev->next = tmp->next; + free(tmp); + tmp = prev->next; + } + else + { + Root = tmp->next; + free(tmp); + tmp = Root; + } + } + else + { + prev = tmp; + tmp = tmp->next; + } + } } /* @@ -9852,36 +9868,36 @@ */ void API dw_signal_connect(HWND window, char *signame, void *sigfunc, void *data) { - ULONG message = 0, id = 0; - - if(window && signame && sigfunc) - { - if((message = _findsigmessage(signame)) != 0) - { - /* Handle special case of the menu item */ - if(message == WM_COMMAND && window < 65536) - { - char buffer[15]; - HWND owner; - - sprintf(buffer, "_dw_id%d", (int)window); - owner = (HWND)dw_window_get_data(hwndApp, buffer); - - if(owner) - { - id = window; - window = owner; - dw_window_set_data(hwndApp, buffer, 0); - } - else - { - /* If it is a popup menu clear all entries */ - dw_signal_disconnect_by_window(window); - } - } - _new_signal(message, window, id, sigfunc, data); - } - } + ULONG message = 0, id = 0; + + if(window && signame && sigfunc) + { + if((message = _findsigmessage(signame)) != 0) + { + /* Handle special case of the menu item */ + if(message == WM_COMMAND && window < 65536) + { + char buffer[15]; + HWND owner; + + sprintf(buffer, "_dw_id%d", (int)window); + owner = (HWND)dw_window_get_data(hwndApp, buffer); + + if(owner) + { + id = window; + window = owner; + dw_window_set_data(hwndApp, buffer, 0); + } + else + { + /* If it is a popup menu clear all entries */ + dw_signal_disconnect_by_window(window); + } + } + _new_signal(message, window, id, sigfunc, data); + } + } } /* @@ -9891,35 +9907,35 @@ */ void API dw_signal_disconnect_by_name(HWND window, char *signame) { - SignalHandler *prev = NULL, *tmp = Root; - ULONG message; - - if(!window || !signame || (message = _findsigmessage(signame)) == 0) - return; - - while(tmp) - { - if(tmp->window == window && tmp->message == message) - { - if(prev) - { - prev->next = tmp->next; - free(tmp); - tmp = prev->next; - } - else - { - Root = tmp->next; - free(tmp); - tmp = Root; - } - } - else - { - prev = tmp; - tmp = tmp->next; - } - } + SignalHandler *prev = NULL, *tmp = Root; + ULONG message; + + if(!window || !signame || (message = _findsigmessage(signame)) == 0) + return; + + while(tmp) + { + if(tmp->window == window && tmp->message == message) + { + if(prev) + { + prev->next = tmp->next; + free(tmp); + tmp = prev->next; + } + else + { + Root = tmp->next; + free(tmp); + tmp = Root; + } + } + else + { + prev = tmp; + tmp = tmp->next; + } + } } /* @@ -9929,31 +9945,31 @@ */ void API dw_signal_disconnect_by_window(HWND window) { - SignalHandler *prev = NULL, *tmp = Root; - - while(tmp) - { - if(tmp->window == window) - { - if(prev) - { - prev->next = tmp->next; - free(tmp); - tmp = prev->next; - } - else - { - Root = tmp->next; - free(tmp); - tmp = Root; - } - } - else - { - prev = tmp; - tmp = tmp->next; - } - } + SignalHandler *prev = NULL, *tmp = Root; + + while(tmp) + { + if(tmp->window == window) + { + if(prev) + { + prev->next = tmp->next; + free(tmp); + tmp = prev->next; + } + else + { + Root = tmp->next; + free(tmp); + tmp = Root; + } + } + else + { + prev = tmp; + tmp = tmp->next; + } + } } /* @@ -9964,38 +9980,38 @@ */ void API dw_signal_disconnect_by_data(HWND window, void *data) { - SignalHandler *prev = NULL, *tmp = Root; - - while(tmp) - { - if(tmp->window == window && tmp->data == data) - { - if(prev) - { - prev->next = tmp->next; - free(tmp); - tmp = prev->next; - } - else - { - Root = tmp->next; - free(tmp); - tmp = Root; - } - } - else - { - prev = tmp; - tmp = tmp->next; - } - } + SignalHandler *prev = NULL, *tmp = Root; + + while(tmp) + { + if(tmp->window == window && tmp->data == data) + { + if(prev) + { + prev->next = tmp->next; + free(tmp); + tmp = prev->next; + } + else + { + Root = tmp->next; + free(tmp); + tmp = Root; + } + } + else + { + prev = tmp; + tmp = tmp->next; + } + } } /* * Create a new static text window (widget) to be packed. - * **** temporary calendar ***** + * Not available under OS/2, eCS * Parameters: * text: The text to be display by the static text widget. * id: An ID to be used with dw_window_from_id() or 0L. @@ -10003,23 +10019,23 @@ HWND API dw_calendar_new(ULONG id) { char *text = "dummy calendar"; - WindowData *blah = calloc(sizeof(WindowData), 1); - HWND tmp = WinCreateWindow(HWND_OBJECT, - WC_STATIC, - text, - WS_VISIBLE | SS_TEXT, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); - blah->oldproc = WinSubclassWindow(tmp, _textproc); - WinSetWindowPtr(tmp, QWP_USER, blah); - dw_window_set_font(tmp, DefaultFont); - dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); - WinSetWindowText(tmp, text); - return tmp; + WindowData *blah = calloc(sizeof(WindowData), 1); + HWND tmp = WinCreateWindow(HWND_OBJECT, + WC_STATIC, + text, + WS_VISIBLE | SS_TEXT, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); + blah->oldproc = WinSubclassWindow(tmp, _textproc); + WinSetWindowPtr(tmp, QWP_USER, blah); + dw_window_set_font(tmp, DefaultFont); + dw_window_set_color(tmp, DW_CLR_BLACK, DW_CLR_PALEGRAY); + WinSetWindowText(tmp, text); + return tmp; } /* @@ -10027,9 +10043,9 @@ */ void API dw_calendar_set_date( HWND window, unsigned int year, unsigned int month, unsigned int day ) { - char tmp[30]; - sprintf( tmp, "%4.4d-%2.2d-%2.2d", year, month, day); - WinSetWindowText(window, tmp); + char tmp[30]; + sprintf( tmp, "%4.4d-%2.2d-%2.2d", year, month, day); + WinSetWindowText(window, tmp); } void API dw_calendar_get_date( HWND window, unsigned int *year, unsigned int *month, unsigned int *day )