home *** CD-ROM | disk | FTP | other *** search
- /***************************************************************************
- * *
- * MODULE : Imagedlg.c *
- * *
- * PURPOSE : Dialog functions for ImagEdit's dialogs. *
- * *
- * HISTORY : 3/03/89 by LR *
- * *
- ***************************************************************************/
-
- #include "imagedit.h"
- #include "dialogs.h"
- #include "iehelp.h"
-
- #include <windowsx.h>
-
- STATICFN BOOL NEAR NewImageOK(HWND hwnd, INT iType);
- STATICFN VOID NEAR SelectImageInit(HWND hwnd);
- STATICFN BOOL NEAR SelectImageOK(HWND hwnd);
-
-
-
- /************************************************************************
- * DlgBox
- *
- * This function basically does a DialogBox.
- *
- * Arguments:
- * INT idDlg = Ordinal name of the dialog.
- * WNDPROC lpfnDlg = Dialog procedure to use (this function will
- * call Make/FreeProcInstance).
- *
- * Returns:
- * What DialogBox returned.
- *
- * History:
- *
- ************************************************************************/
-
- INT DlgBox(
- INT idDlg,
- WNDPROC lpfnDlg)
- {
- WNDPROC lpfnDlgInst;
- INT nResult;
- INT idPrevDlg;
-
- EnteringDialog(idDlg, &idPrevDlg, TRUE);
- lpfnDlgInst = (WNDPROC)MakeProcInstance((FARPROC)lpfnDlg, ghInst);
- nResult = DialogBox(ghInst, MAKEINTRESOURCE(idDlg),
- ghwndMain, lpfnDlgInst);
- FreeProcInstance(lpfnDlgInst);
- EnteringDialog(idPrevDlg, NULL, FALSE);
-
- return nResult;
- }
-
-
-
- /************************************************************************
- * EnteringDialog
- *
- * This function enables or disables things based on whether we are
- * going to show one of the editor's dialogs. It must be called
- * before and after showing a dialog box.
- *
- * Arguments:
- * INT idDlg - Ordinal name of the dialog.
- * PINT pidPrevDlg - Points to where to save the id of the previous
- * (current) dialog. If fEntering is FALSE, this
- * is not used and should be NULL.
- * BOOL fEntering - TRUE if about ready to show the dialog. FALSE if
- * the dialog was just dismissed. For the FALSE case,
- * the idDlg should be zero, or the id of the previous
- * dialog.
- *
- * History:
- *
- ************************************************************************/
-
- VOID EnteringDialog(
- INT idDlg,
- PINT pidPrevDlg,
- BOOL fEntering)
- {
- /*
- * If we are entering a new dialog, save the previous dialog
- * in the place specified.
- */
- if (fEntering)
- *pidPrevDlg = gidCurrentDlg;
-
- gidCurrentDlg = idDlg;
-
- if (ghwndToolbox)
- EnableWindow(ghwndToolbox, !fEntering);
-
- if (ghwndColor)
- EnableWindow(ghwndColor, !fEntering);
-
- if (ghwndView)
- EnableWindow(ghwndView, !fEntering);
- }
-
-
-
- /************************************************************************
- * ImageNewDialog
- *
- *
- *
- * History:
- *
- ************************************************************************/
-
- VOID ImageNewDialog(
- INT iType)
- {
- switch (iType) {
- case FT_ICON:
- DlgBox(DID_NEWICONIMAGE, (WNDPROC)NewIconImageDlgProc);
- break;
-
- case FT_CURSOR:
- DlgBox(DID_NEWCURSORIMAGE, (WNDPROC)NewCursorImageDlgProc);
- break;
- }
- }
-
-
-
- /************************************************************************
- * ImageSelectDialog
- *
- *
- *
- * History:
- *
- ************************************************************************/
-
- VOID ImageSelectDialog(VOID)
- {
- switch (giType) {
- case FT_ICON:
- DlgBox(DID_SELECTICONIMAGE, (WNDPROC)SelectImageDlgProc);
- break;
-
- case FT_CURSOR:
- DlgBox(DID_SELECTCURSORIMAGE, (WNDPROC)SelectImageDlgProc);
- break;
- }
- }
-
-
-
- /************************************************************************
- * ResourceTypeDlgProc
- *
- * Gets from the user the type of resource image that they want
- * to edit (bitmap, icon or cursor).
- *
- * History:
- *
- ************************************************************************/
-
- DIALOGPROC ResourceTypeDlgProc(
- HWND hwnd,
- UINT msg,
- WPARAM wParam,
- LPARAM lParam)
- {
- INT idChecked;
-
- switch (msg) {
- case WM_INITDIALOG:
- switch (giType) {
- case FT_BITMAP:
- idChecked = DID_RESOURCETYPEBITMAP;
- break;
-
- case FT_ICON:
- idChecked = DID_RESOURCETYPEICON;
- break;
-
- case FT_CURSOR:
- idChecked = DID_RESOURCETYPECURSOR;
- break;
- }
-
- CheckDlgButton(hwnd, idChecked, 1);
-
- CenterWindow(hwnd);
-
- break;
-
- case WM_COMMAND:
- switch (GET_WM_COMMAND_ID(wParam, lParam)) {
- case IDOK:
- if (IsDlgButtonChecked(hwnd, DID_RESOURCETYPEBITMAP))
- iNewFileType = FT_BITMAP;
- else if (IsDlgButtonChecked(hwnd, DID_RESOURCETYPEICON))
- iNewFileType = FT_ICON;
- else
- iNewFileType = FT_CURSOR;
-
- EndDialog(hwnd, IDOK);
- break;
-
- case IDCANCEL:
- EndDialog(hwnd, IDCANCEL);
- break;
-
- case IDHELP:
- WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT,
- HELPID_RESOURCETYPE);
- break;
- }
-
- break;
-
- default:
- return FALSE;
- }
-
- return TRUE;
- }
-
-
-
- /************************************************************************
- * NewIconImageDlgProc
- *
- *
- *
- * Arguments:
- *
- * History:
- *
- ************************************************************************/
-
- DIALOGPROC NewIconImageDlgProc(
- HWND hwnd,
- UINT msg,
- WPARAM wParam,
- LPARAM lParam)
- {
- HWND hwndList;
- INT iSel;
- PDEVICE pDevice;
-
- switch (msg) {
- case WM_INITDIALOG:
- hwndList = GetDlgItem(hwnd, DID_NEWIMAGELIST);
- SendMessage(hwndList, LB_RESETCONTENT, 0, 0);
-
- for (pDevice = gpIconDeviceHead; pDevice;
- pDevice = pDevice->pDeviceNext) {
- if (!DeviceLinkUsed(pDevice)) {
- iSel = (INT)SendMessage(hwndList, LB_INSERTSTRING, (WPARAM)-1,
- (LONG)(LPSTR)pDevice->szDesc);
- SendMessage(hwndList, LB_SETITEMDATA, iSel,
- (DWORD)(LPSTR)pDevice);
- }
- }
-
- /*
- * Select the first item.
- */
- SendMessage(hwndList, LB_SETCURSEL, 0, 0L);
-
- CenterWindow(hwnd);
-
- break;
-
- case WM_COMMAND:
- switch (GET_WM_COMMAND_ID(wParam, lParam)) {
- case DID_NEWIMAGELIST:
- if (GET_WM_COMMAND_CMD(wParam, lParam) == LBN_DBLCLK) {
- if (NewImageOK(hwnd, FT_ICON))
- EndDialog(hwnd, IDOK);
- }
-
- break;
-
- case IDOK:
- if (NewImageOK(hwnd, FT_ICON))
- EndDialog(hwnd, IDOK);
-
- break;
-
- case IDCANCEL:
- EndDialog(hwnd, IDCANCEL);
- break;
-
- case IDHELP:
- WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT,
- HELPID_NEWICONIMAGE);
- break;
- }
-
- break;
-
- default:
- return FALSE;
- }
-
- return TRUE;
- }
-
-
-
- /************************************************************************
- * NewImageOK
- *
- * Processes the selection of a new image from the New Icon (Cursor)
- * Image dialog procedures.
- *
- * History:
- *
- ************************************************************************/
-
- STATICFN BOOL NEAR NewImageOK(
- HWND hwnd,
- INT iType)
- {
- HWND hwndLB;
- INT iSelect;
- PDEVICE pDevice;
-
- hwndLB = GetDlgItem(hwnd, DID_NEWIMAGELIST);
-
- if ((iSelect = (INT)SendMessage(hwndLB, LB_GETCURSEL, 0, 0)) != LB_ERR) {
- /*
- * Save away the current image.
- */
- ImageSave();
-
- pDevice = (PDEVICE)SendMessage(hwndLB, LB_GETITEMDATA, iSelect, 0);
-
- if (ImageNew(pDevice))
- return TRUE;
- }
-
- return FALSE;
- }
-
-
-
- /************************************************************************
- * NewCursorImageDlgProc
- *
- *
- *
- * Arguments:
- *
- * History:
- *
- ************************************************************************/
-
- DIALOGPROC NewCursorImageDlgProc(
- HWND hwnd,
- UINT msg,
- WPARAM wParam,
- LPARAM lParam)
- {
- HWND hwndList;
- INT iSel;
- PDEVICE pDevice;
-
- switch (msg) {
- case WM_INITDIALOG:
- hwndList = GetDlgItem(hwnd, DID_NEWIMAGELIST);
- SendMessage(hwndList, LB_RESETCONTENT, 0, 0);
-
- for (pDevice = gpCursorDeviceHead; pDevice;
- pDevice = pDevice->pDeviceNext) {
- if (!DeviceLinkUsed(pDevice)) {
- iSel = (INT)SendMessage(hwndList, LB_INSERTSTRING, (WPARAM)-1,
- (LONG)(LPSTR)pDevice->szDesc);
- SendMessage(hwndList, LB_SETITEMDATA, iSel,
- (DWORD)(LPSTR)pDevice);
- }
- }
-
- /*
- * Select the first item.
- */
- SendMessage(hwndList, LB_SETCURSEL, 0, 0L);
-
- CenterWindow(hwnd);
-
- break;
-
- case WM_COMMAND:
- switch (GET_WM_COMMAND_ID(wParam, lParam)) {
- case DID_NEWIMAGELIST:
- if (GET_WM_COMMAND_CMD(wParam, lParam) == LBN_DBLCLK) {
- if (NewImageOK(hwnd, FT_CURSOR))
- EndDialog(hwnd, IDOK);
- }
-
- break;
-
- case IDOK:
- if (NewImageOK(hwnd, FT_CURSOR))
- EndDialog(hwnd, IDOK);
-
- break;
-
- case IDCANCEL:
- EndDialog(hwnd, IDCANCEL);
- break;
-
- case IDHELP:
- WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT,
- HELPID_NEWCURSORIMAGE);
- break;
- }
-
- break;
-
- default:
- return FALSE;
- }
-
- return TRUE;
- }
-
-
-
- /************************************************************************
- * SelectImageDlgProc
- *
- * This is the Select Image dialog procedure. This proc is used for both
- * icon and cursor images.
- *
- * History:
- *
- ************************************************************************/
-
- DIALOGPROC SelectImageDlgProc(
- HWND hwnd,
- UINT msg,
- WPARAM wParam,
- LPARAM lParam)
- {
- switch (msg) {
- case WM_INITDIALOG:
- SelectImageInit(hwnd);
- return TRUE;
-
- case WM_COMMAND:
- switch (GET_WM_COMMAND_ID(wParam, lParam)) {
- case DID_SELECTIMAGELIST:
- if (GET_WM_COMMAND_CMD(wParam, lParam) == LBN_DBLCLK) {
- if (SelectImageOK(hwnd))
- EndDialog(hwnd, IDOK);
- }
-
- break;
-
- case IDOK:
- if (SelectImageOK(hwnd))
- EndDialog(hwnd, IDOK);
-
- break;
-
- case IDCANCEL:
- EndDialog(hwnd, IDCANCEL);
- break;
-
- case IDHELP:
- WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT,
- (giType == FT_ICON) ?
- HELPID_SELECTICONIMAGE : HELPID_SELECTCURSORIMAGE);
- break;
- }
-
- return TRUE;
-
- default:
- return FALSE;
- }
- }
-
-
-
- /************************************************************************
- * SelectImageInit
- *
- * Processes the WM_INITDIALOG message for the Open Image dialog
- * procedure.
- *
- * This function fills the listbox with the names of all the current
- * images for the current icon/cursor file.
- *
- * History:
- *
- ************************************************************************/
-
- STATICFN VOID NEAR SelectImageInit(
- HWND hwnd)
- {
- HWND hwndLB;
- INT i;
- PIMAGEINFO pImage;
-
- hwndLB = GetDlgItem(hwnd, DID_SELECTIMAGELIST);
-
- for (pImage = gpImageHead; pImage; pImage = pImage->pImageNext) {
- i = (INT)SendMessage(hwndLB, LB_INSERTSTRING, (WPARAM)-1,
- pImage->pDevice ?
- (DWORD)(LPSTR)pImage->pDevice->szDesc :
- (DWORD)(LPSTR)ids(IDS_UNKNOWNIMAGEFORMAT));
-
- SendMessage(hwndLB, LB_SETITEMDATA, i, (DWORD)(LPSTR)pImage);
- }
-
- /*
- * Select the first item.
- */
- SendMessage(hwndLB, LB_SETCURSEL, 0, 0L);
-
- CenterWindow(hwnd);
- }
-
-
-
- /************************************************************************
- * SelectImageOK
- *
- * Processes the selection of a new image from the Open Image
- * dialog procedure.
- *
- * History:
- *
- ************************************************************************/
-
- STATICFN BOOL NEAR SelectImageOK(
- HWND hwnd)
- {
- HWND hwndLB;
- INT iSelect;
- PIMAGEINFO pImage;
-
- hwndLB = GetDlgItem(hwnd, DID_SELECTIMAGELIST);
-
- if ((iSelect = (INT)SendMessage(hwndLB, LB_GETCURSEL, 0, 0)) == LB_ERR)
- return FALSE;
-
- /*
- * Get a pointer to the selected image (stored in the listbox
- * items data field).
- */
- pImage = (PIMAGEINFO)SendMessage(hwndLB, LB_GETITEMDATA, iSelect, 0L);
-
- return ImageOpen(pImage);
- }
-
-
-
- /************************************************************************
- * BitmapSizeDlgProc
- *
- * Dialog that asks for the width, height and number of colors for
- * a new bitmap file.
- *
- * The last values that the user successfully entered are remembered,
- * and these values will be the defaults the next time that the
- * dialog is invoked.
- *
- * History:
- *
- ************************************************************************/
-
- DIALOGPROC BitmapSizeDlgProc(
- HWND hwnd,
- UINT msg,
- WPARAM wParam,
- LPARAM lParam)
- {
- static INT cxLast = DEFAULTBITMAPWIDTH;
- static INT cyLast = DEFAULTBITMAPHEIGHT;
- static INT nColorsLast = DEFAULTBITMAPCOLORS;
- INT cx;
- INT cy;
- BOOL fTranslated;
- INT nColors;
-
- switch (msg) {
- case WM_INITDIALOG:
- SetDlgItemInt(hwnd, DID_BITMAPSIZEWIDTH, cxLast, TRUE);
- SetDlgItemInt(hwnd, DID_BITMAPSIZEHEIGHT, cyLast, TRUE);
-
- if (nColorsLast == 16)
- CheckRadioButton(hwnd, DID_BITMAPSIZE2, DID_BITMAPSIZE16,
- DID_BITMAPSIZE16);
- else
- CheckRadioButton(hwnd, DID_BITMAPSIZE2, DID_BITMAPSIZE16,
- DID_BITMAPSIZE2);
-
- CenterWindow(hwnd);
-
- break;
-
- case WM_COMMAND:
- switch (GET_WM_COMMAND_ID(wParam, lParam)) {
- case IDOK:
- cx = GetDlgItemInt(hwnd, DID_BITMAPSIZEWIDTH, &fTranslated, FALSE);
- if (!fTranslated) {
- SetFocus(GetDlgItem(hwnd, DID_BITMAPSIZEWIDTH));
- Message(MSG_ENTERANUMBER);
- break;
- }
-
- cy = GetDlgItemInt(hwnd, DID_BITMAPSIZEHEIGHT, &fTranslated, FALSE);
- if (!fTranslated) {
- SetFocus(GetDlgItem(hwnd, DID_BITMAPSIZEHEIGHT));
- Message(MSG_ENTERANUMBER);
- break;
- }
-
- if (IsDlgButtonChecked(hwnd, DID_BITMAPSIZE2))
- nColors = 2;
- else
- nColors = 16;
-
- if (ImageNewBitmap(cx, cy, nColors)) {
- cxLast = cx;
- cyLast = cy;
- nColorsLast = nColors;
-
- EndDialog(hwnd, IDOK);
- }
-
- break;
-
- case IDCANCEL:
- EndDialog(hwnd, IDCANCEL);
- break;
-
- case IDHELP:
- WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT,
- HELPID_BITMAPSIZE);
- break;
- }
-
- break;
-
- default:
- return FALSE;
- }
-
- return TRUE;
- }
-