static void winDialogTrayBalloonMessage(Ihandle *ih, const char* value) { NOTIFYICONDATA tnd; memset(&tnd, 0, sizeof(NOTIFYICONDATA)); tnd.cbSize = sizeof(NOTIFYICONDATA); tnd.hWnd = ih->handle; tnd.uID = 1000; tnd.uFlags |= NIF_INFO; /* set to NULL to remove the tooltip */ if (value) { char* balloon_title; iupwinStrCopy(tnd.szInfo, value, sizeof(tnd.szInfo)); tnd.uTimeout = IupGetInt(ih, "TRAYTIPBALLOONDELAY"); /* must use IupGetInt to use inheritance */ balloon_title = IupGetAttribute(ih, "TRAYTIPBALLOONTITLE"); if (balloon_title) iupwinStrCopy(tnd.szInfoTitle, balloon_title, sizeof(tnd.szInfoTitle)); tnd.dwInfoFlags = IupGetInt(ih, "TRAYTIPBALLOONTITLEICON"); } Shell_NotifyIcon(NIM_MODIFY, &tnd); }
static void winDialogTrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, const char* value) { NOTIFYICONDATA tnd; memset(&tnd, 0, sizeof(NOTIFYICONDATA)); tnd.cbSize = sizeof(NOTIFYICONDATA); tnd.hWnd = hWnd; tnd.uID = 1000; if (dwMessage == NIM_ADD) { tnd.uFlags = NIF_MESSAGE; tnd.uCallbackMessage = WM_USER+IUPWIN_TRAY_NOTIFICATION; } else if (dwMessage == NIM_MODIFY) { if (hIcon) { tnd.uFlags |= NIF_ICON; tnd.hIcon = hIcon; } if (value) { tnd.uFlags |= NIF_TIP; iupwinStrCopy(tnd.szTip, value, sizeof(tnd.szTip)); } } Shell_NotifyIcon(dwMessage, &tnd); }
static int winFileDlgPopup(Ihandle *ih, int x, int y) { InativeHandle* parent = iupDialogGetNativeParent(ih); OPENFILENAME openfilename; int result, dialogtype; char *value, *initial_dir=NULL; TCHAR* extfilter = NULL; iupAttribSetInt(ih, "_IUPDLG_X", x); /* used in iupDialogUpdatePosition */ iupAttribSetInt(ih, "_IUPDLG_Y", y); value = iupAttribGetStr(ih, "DIALOGTYPE"); if (iupStrEqualNoCase(value, "SAVE")) dialogtype = IUP_DIALOGSAVE; else if (iupStrEqualNoCase(value, "DIR")) dialogtype = IUP_DIALOGDIR; else dialogtype = IUP_DIALOGOPEN; if (dialogtype == IUP_DIALOGDIR) { winFileDlgGetFolder(ih); return IUP_NOERROR; } /* if NOT set will NOT be Modal */ /* anyway it will be modal only relative to its parent */ if (!parent) parent = GetActiveWindow(); ZeroMemory(&openfilename, sizeof(OPENFILENAME)); openfilename.lStructSize = sizeof(OPENFILENAME); openfilename.hwndOwner = parent; value = iupAttribGet(ih, "EXTFILTER"); if (value) { int index; extfilter = winFileDlgStrReplaceSeparator(iupwinStrToSystem(value)); openfilename.lpstrFilter = extfilter; value = iupAttribGet(ih, "FILTERUSED"); if (iupStrToInt(value, &index)) openfilename.nFilterIndex = index; else openfilename.nFilterIndex = 1; } else { value = iupAttribGet(ih, "FILTER"); if (value) { TCHAR *winfo, *wvalue; int sz1, sz2; char* info = iupAttribGet(ih, "FILTERINFO"); if (!info) info = value; winfo = iupwinStrToSystem(info); wvalue = iupwinStrToSystem(value); /* concat FILTERINFO+FILTER */ sz1 = lstrlen(winfo)+1; /* each part has a terminator */ sz2 = lstrlen(wvalue)+1; extfilter = (TCHAR*)malloc((sz1+sz2+1)*sizeof(TCHAR)); memcpy(extfilter, winfo, sz1*sizeof(TCHAR)); /* copy also the terminator */ memcpy(extfilter+sz1, wvalue, sz2*sizeof(TCHAR)); extfilter[sz1+sz2] = 0; /* additional terminator at the end */ openfilename.lpstrFilter = extfilter; openfilename.nFilterIndex = 1; } } openfilename.lpstrFile = (TCHAR*)malloc((IUP_MAX_FILENAME_SIZE+1)*sizeof(TCHAR)); value = iupAttribGet(ih, "FILE"); if (value) { iupwinStrCopy(openfilename.lpstrFile, value, IUP_MAX_FILENAME_SIZE); winFileDlgStrReplacePathSlash(openfilename.lpstrFile); } else openfilename.lpstrFile[0] = 0; openfilename.nMaxFile = IUP_MAX_FILENAME_SIZE; /* only supports extensions with up to three characters, should NOT include the period */ openfilename.lpstrDefExt = iupwinStrToSystem(iupAttribGet(ih, "EXTDEFAULT")); initial_dir = iupStrDup(iupAttribGet(ih, "DIRECTORY")); openfilename.lpstrInitialDir = iupwinStrToSystemFilename(initial_dir); if (openfilename.lpstrInitialDir) winFileDlgStrReplacePathSlash((TCHAR*)openfilename.lpstrInitialDir); openfilename.lpstrTitle = iupwinStrToSystem(iupAttribGet(ih, "TITLE")); openfilename.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; if (!iupAttribGetBoolean(ih, "NOOVERWRITEPROMPT")) openfilename.Flags |= OFN_OVERWRITEPROMPT; if (iupAttribGetBoolean(ih, "SHOWHIDDEN")) openfilename.Flags |= OFN_FORCESHOWHIDDEN; value = iupAttribGet(ih, "ALLOWNEW"); if (!value) { if (dialogtype == IUP_DIALOGSAVE) value = "YES"; else value = "NO"; } if (iupStrBoolean(value)) openfilename.Flags |= OFN_CREATEPROMPT; else openfilename.Flags |= OFN_FILEMUSTEXIST; if (iupAttribGetBoolean(ih, "NOCHANGEDIR")) openfilename.Flags |= OFN_NOCHANGEDIR; if (iupAttribGetBoolean(ih, "MULTIPLEFILES")) openfilename.Flags |= OFN_ALLOWMULTISELECT; openfilename.lpfnHook = winFileDlgSimpleHook; openfilename.Flags |= OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLESIZING; openfilename.lCustData = (LPARAM)ih; if (iupAttribGetBoolean(ih, "SHOWPREVIEW") && IupGetCallback(ih, "FILE_CB")) { openfilename.Flags |= OFN_ENABLETEMPLATE; openfilename.hInstance = iupwin_dll_hinstance? iupwin_dll_hinstance: iupwin_hinstance; openfilename.lpTemplateName = TEXT("iupPreviewDlg"); openfilename.lpfnHook = winFileDlgPreviewHook; } if (IupGetCallback(ih, "HELP_CB")) openfilename.Flags |= OFN_SHOWHELP; if (dialogtype == IUP_DIALOGOPEN) result = GetOpenFileName(&openfilename); else result = GetSaveFileName(&openfilename); if (result) { if (iupAttribGetBoolean(ih, "MULTIPLEFILES")) { /* If there is more than one file, replace terminator by the separator */ if (openfilename.lpstrFile[openfilename.nFileOffset-1] == 0 && openfilename.nFileOffset>0) { int i = 0; int count = 0; char* dir = iupwinStrFromSystemFilename(openfilename.lpstrFile); /* already is the directory, but without the last separator */ iupAttribSetStrf(ih, "DIRECTORY", "%s\\", dir); /* add the last separator */ /* first the path */ iupAttribSetStrId(ih, "MULTIVALUE", count, iupAttribGet(ih, "DIRECTORY")); /* here count=0 always */ count++; while (openfilename.lpstrFile[i] != 0 || openfilename.lpstrFile[i + 1] != 0) { if (openfilename.lpstrFile[i] == 0) { iupAttribSetStrId(ih, "MULTIVALUE", count, iupwinStrFromSystemFilename(openfilename.lpstrFile + i + 1)); count++; openfilename.lpstrFile[i] = TEXT('|'); } i++; } iupAttribSetInt(ih, "MULTIVALUECOUNT", count); openfilename.lpstrFile[i] = TEXT('|'); /* one last at the end */ iupAttribSetStr(ih, "VALUE", iupwinStrFromSystemFilename(openfilename.lpstrFile)); /* here file was already modified to match the IUP format */ } else { /* if there is only one file selected the returned value is different and includes just that file */ char* filename = iupwinStrFromSystemFilename(openfilename.lpstrFile); char* dir = iupStrFileGetPath(filename); int dir_len = (int)strlen(dir); iupAttribSetStr(ih, "DIRECTORY", dir); iupAttribSetStrId(ih, "MULTIVALUE", 0, dir); iupAttribSetStrId(ih, "MULTIVALUE", 1, filename + dir_len); iupAttribSetStr(ih, "VALUE", filename); /* here value is not separated by '|' */ iupAttribSetInt(ih, "MULTIVALUECOUNT", 2); free(dir); } iupAttribSet(ih, "STATUS", "0"); iupAttribSet(ih, "FILEEXIST", "YES"); } else { char* filename = iupwinStrFromSystemFilename(openfilename.lpstrFile); char* dir = iupStrFileGetPath(filename); iupAttribSetStr(ih, "DIRECTORY", dir); free(dir); if (winIsFile(openfilename.lpstrFile)) /* check if file exists */ { iupAttribSet(ih, "FILEEXIST", "YES"); iupAttribSet(ih, "STATUS", "0"); } else { iupAttribSet(ih, "FILEEXIST", "NO"); iupAttribSet(ih, "STATUS", "1"); } iupAttribSetStr(ih, "VALUE", filename); } iupAttribSetInt(ih, "FILTERUSED", (int)openfilename.nFilterIndex); } else { iupAttribSet(ih, "FILTERUSED", NULL); iupAttribSet(ih, "VALUE", NULL); iupAttribSet(ih, "DIRECTORY", NULL); iupAttribSet(ih, "FILEEXIST", NULL); iupAttribSet(ih, "STATUS", "-1"); } if (extfilter) free(extfilter); if (initial_dir) free(initial_dir); if (openfilename.lpstrFile) free(openfilename.lpstrFile); return IUP_NOERROR; }
static int winFileDlgWmNotify(HWND hWnd, LPOFNOTIFY pofn) { Ihandle* ih = (Ihandle*)pofn->lpOFN->lCustData; switch (pofn->hdr.code) { case CDN_INITDONE: { HWND hWndPreview; IFnss cb = (IFnss)IupGetCallback(ih, "FILE_CB"); if (cb) cb(ih, NULL, "INIT"); hWndPreview = GetDlgItem(hWnd, IUP_PREVIEWCANVAS); if (hWndPreview) RedrawWindow(hWndPreview, NULL, NULL, RDW_INVALIDATE|RDW_UPDATENOW); break; } case CDN_FILEOK: case CDN_SELCHANGE: { HWND hWndPreview; IFnss cb = (IFnss)IupGetCallback(ih, "FILE_CB"); if (cb) { TCHAR filename[IUP_MAX_FILENAME_SIZE]; if (winFileDlgGetSelectedFile(ih, hWnd, filename)) { int ret; char* file_msg; if (pofn->hdr.code == CDN_FILEOK) file_msg = "OK"; else { if (winIsFile(filename)) file_msg = "SELECT"; else file_msg = "OTHER"; } ret = cb(ih, iupwinStrFromSystemFilename(filename), file_msg); if (pofn->hdr.code == CDN_FILEOK && (ret == IUP_IGNORE || ret == IUP_CONTINUE)) { if (ret == IUP_CONTINUE) { char* value = iupAttribGet(ih, "FILE"); if (value) { iupwinStrCopy(filename, value, IUP_MAX_FILENAME_SIZE); winFileDlgStrReplacePathSlash(filename); SendMessage(GetParent(hWnd), CDM_SETCONTROLTEXT, (WPARAM)IUP_EDIT, (LPARAM)filename); } } SetWindowLongPtr(hWnd, DWLP_MSGRESULT, 1L); return 1; /* will refuse the file */ } } } hWndPreview = GetDlgItem(hWnd, IUP_PREVIEWCANVAS); if (pofn->hdr.code == CDN_SELCHANGE && hWndPreview) RedrawWindow(hWndPreview, NULL, NULL, RDW_INVALIDATE|RDW_UPDATENOW); break; } case CDN_TYPECHANGE: { IFnss cb = (IFnss)IupGetCallback(ih, "FILE_CB"); if (cb) { TCHAR filename[IUP_MAX_FILENAME_SIZE]; if (winFileDlgGetSelectedFile(ih, hWnd, filename)) { iupAttribSetInt(ih, "FILTERUSED", (int)pofn->lpOFN->nFilterIndex); if (cb(ih, iupwinStrFromSystemFilename(filename), "FILTER") == IUP_CONTINUE) { char* value = iupAttribGet(ih, "FILE"); if (value) { iupwinStrCopy(filename, value, IUP_MAX_FILENAME_SIZE); winFileDlgStrReplacePathSlash(filename); SendMessage(GetParent(hWnd), CDM_SETCONTROLTEXT, (WPARAM)IUP_EDIT, (LPARAM)filename); } } } } break; } case CDN_HELP: { Icallback cb = (Icallback) IupGetCallback(ih, "HELP_CB"); if (cb && cb(ih) == IUP_CLOSE) EndDialog(GetParent(hWnd), IDCANCEL); break; } } return 0; }