From d577d991b97ae2b5ee1af23641bcffc3f83af5b2 Mon Sep 17 00:00:00 2001 From: Pixel Date: Wed, 4 Nov 2009 11:56:41 -0800 Subject: Initial import. Contains the im, cd and iup librairies, and a "working" Makefile for them under linux. --- iup/src/win/iupwin_messagedlg.c | 105 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100755 iup/src/win/iupwin_messagedlg.c (limited to 'iup/src/win/iupwin_messagedlg.c') diff --git a/iup/src/win/iupwin_messagedlg.c b/iup/src/win/iupwin_messagedlg.c new file mode 100755 index 0000000..63159aa --- /dev/null +++ b/iup/src/win/iupwin_messagedlg.c @@ -0,0 +1,105 @@ +/** \file + * \brief Windows IupMessageDlg pre-defined dialog + * + * See Copyright Notice in "iup.h" + */ + +#include + +#include "iup.h" + +#include "iup_object.h" +#include "iup_attrib.h" +#include "iup_str.h" +#include "iup_dialog.h" + + +static void winMessageDlgHelpCallback(HELPINFO* HelpInfo) +{ + Ihandle* ih = (Ihandle*)HelpInfo->dwContextId; + Icallback cb = (Icallback)IupGetCallback(ih, "HELP_CB"); + if (cb && cb(ih) == IUP_CLOSE) + { + if (iupStrEqualNoCase(iupAttribGetStr(ih, "BUTTONS"), "OK")) /* only one button */ + EndDialog((HWND)HelpInfo->hItemHandle, IDOK); + else + EndDialog((HWND)HelpInfo->hItemHandle, IDCANCEL); + } +} + +static int winMessageDlgPopup(Ihandle* ih, int x, int y) +{ + InativeHandle* parent = iupDialogGetNativeParent(ih); + MSGBOXPARAMS MsgBoxParams; + int result, num_but = 2; + DWORD dwStyle = MB_TASKMODAL; + char *icon, *buttons; + (void)x; + (void)y; + + if (!parent) + parent = GetActiveWindow(); + + icon = iupAttribGetStr(ih, "DIALOGTYPE"); + if (iupStrEqualNoCase(icon, "ERROR")) + dwStyle |= MB_ICONERROR; + else if (iupStrEqualNoCase(icon, "WARNING")) + dwStyle |= MB_ICONWARNING; + else if (iupStrEqualNoCase(icon, "INFORMATION")) + dwStyle |= MB_ICONINFORMATION; + else if (iupStrEqualNoCase(icon, "QUESTION")) + dwStyle |= MB_ICONQUESTION; + + buttons = iupAttribGetStr(ih, "BUTTONS"); + if (iupStrEqualNoCase(buttons, "OKCANCEL")) + dwStyle |= MB_OKCANCEL; + else if (iupStrEqualNoCase(buttons, "YESNO")) + dwStyle |= MB_YESNO; + else + { + dwStyle |= MB_OK; + num_but = 1; + } + + if (IupGetCallback(ih, "HELP_CB")) + dwStyle |= MB_HELP; + + if (num_but == 2 && iupAttribGetInt(ih, "BUTTONDEFAULT") == 2) + dwStyle |= MB_DEFBUTTON2; + else + dwStyle |= MB_DEFBUTTON1; + + MsgBoxParams.cbSize = sizeof(MSGBOXPARAMS); + MsgBoxParams.hwndOwner = parent; + MsgBoxParams.hInstance = NULL; + MsgBoxParams.lpszText = iupAttribGet(ih, "VALUE"); + MsgBoxParams.lpszCaption = iupAttribGet(ih, "TITLE"); + MsgBoxParams.dwStyle = dwStyle; + MsgBoxParams.lpszIcon = NULL; + MsgBoxParams.dwContextHelpId = (DWORD_PTR)ih; + MsgBoxParams.lpfnMsgBoxCallback = (MSGBOXCALLBACK)winMessageDlgHelpCallback; + MsgBoxParams.dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT); + + result = MessageBoxIndirect(&MsgBoxParams); + if (result == 0) + { + iupAttribSetStr(ih, "BUTTONRESPONSE", NULL); + return IUP_ERROR; + } + + if (result == IDNO || result == IDCANCEL) + iupAttribSetStr(ih, "BUTTONRESPONSE", "2"); + else + iupAttribSetStr(ih, "BUTTONRESPONSE", "1"); + + return IUP_NOERROR; +} + +void iupdrvMessageDlgInitClass(Iclass* ic) +{ + ic->DlgPopup = winMessageDlgPopup; +} + +/* +In Windows it will always sound a beep. The beep is different for each dialog type. +*/ -- cgit v1.2.3