static char* motTextGetSelectionAttrib(Ihandle* ih) { XmTextPosition start = 0, end = 0; if (!XmTextGetSelectionPosition(ih->handle, &start, &end) || start==end) return NULL; if (ih->data->is_multiline) { int start_col, start_lin, end_col, end_lin; char *value = XmTextGetString(ih->handle); motTextGetLinColFromPosition(value, start, &start_lin, &start_col); motTextGetLinColFromPosition(value, end, &end_lin, &end_col); XtFree(value); return iupStrReturnStrf("%d,%d:%d,%d", start_lin, start_col, end_lin, end_col); } else { start++; /* IUP starts at 1 */ end++; return iupStrReturnIntInt((int)start, (int)end, ':'); } }
static char* winCalendarGetTodayAttrib(Ihandle* ih) { SYSTEMTIME st; (void)ih; GetLocalTime(&st); return iupStrReturnStrf("%02d/%02d/%d", st.wDay, st.wMonth, st.wYear); }
static char* winDatePickGetTodayAttrib(Ihandle* ih) { SYSTEMTIME st; (void)ih; GetLocalTime(&st); return iupStrReturnStrf("%d/%d/%d", st.wYear, st.wMonth, st.wDay); }
static char* iColorDlgGetValueAttrib(Ihandle* ih) { IcolorDlgData* colordlg_data = (IcolorDlgData*)iupAttribGetInherit(ih, "_IUP_GC_DATA"); if (iupAttribGetBoolean(ih, "SHOWALPHA")) return iupStrReturnStrf("%d %d %d %d", (int)colordlg_data->red, (int)colordlg_data->green, (int)colordlg_data->blue, (int)colordlg_data->alpha); else return iupStrReturnRGB(colordlg_data->red, colordlg_data->green, colordlg_data->blue); }
static char* motToggleGetSelectColorAttrib(Ihandle* ih) { unsigned char r, g, b; Pixel color; XtVaGetValues(ih->handle, XmNselectColor, &color, NULL); iupmotColorGetRGB(color, &r, &g, &b); return iupStrReturnStrf("%d %d %d", (int)r, (int)g, (int)b); }
char* iupmotGetBgColorAttrib(Ihandle* ih) { unsigned char r, g, b; Pixel color; XtVaGetValues(ih->handle, XmNbackground, &color, NULL); iupmotColorGetRGB(color, &r, &g, &b); return iupStrReturnStrf("%d %d %d", (int)r, (int)g, (int)b); }
char* iupMenuGetChildIdStr(Ihandle* ih) { Ihandle* dlg = IupGetDialog(ih); if (dlg) return iupDialogGetChildIdStr(ih); else { Ihandle* dialog = iMenuGetTopMenu(ih); return iupStrReturnStrf("iup-%s-%d", ih->iclass->name, dialog->data->child_id); } }
char *iupdrvGetGlobal(const char *name) { if (iupStrEqual(name, "VIRTUALSCREEN")) { GdkScreen *screen = gdk_screen_get_default(); GdkWindow *root = gdk_screen_get_root_window(gdk_screen_get_default()); int x = 0; int y = 0; int w = gdk_screen_get_width(screen); int h = gdk_screen_get_height(screen); gdk_window_get_root_origin(root, &x, &y); return iupStrReturnStrf("%d %d %d %d", x, y, w, h); } if (iupStrEqual(name, "MONITORSINFO")) { int i; GdkScreen *screen = gdk_screen_get_default(); int monitors_count = gdk_screen_get_n_monitors(screen); char *str = iupStrGetMemory(monitors_count*50); char* pstr = str; GdkRectangle rect; for (i=0; i < monitors_count; i++) { gdk_screen_get_monitor_geometry(screen, i, &rect); pstr += sprintf(pstr, "%d %d %d %d\n", rect.x, rect.y, rect.width, rect.height); } return str; } if (iupStrEqual(name, "TRUECOLORCANVAS")) { return iupStrReturnBoolean(gdk_visual_get_best_depth() > 8); } if (iupStrEqual(name, "UTF8MODE")) { return iupStrReturnBoolean(iupgtkStrGetUTF8Mode()); } if (iupStrEqual(name, "UTF8AUTOCONVERT")) { return iupStrReturnBoolean(!iupgtkStrGetUTF8Mode()); } if (iupStrEqual(name, "SHOWMENUIMAGES")) { gboolean menu_images; g_object_get (gtk_settings_get_default (), "gtk-menu-images", &menu_images, NULL); return iupStrReturnBoolean(menu_images); } return NULL; }
static char* winButtonGetBgColorAttrib(Ihandle* ih) { /* the most important use of this is to provide the correct background for images */ if (iupwin_comctl32ver6 && ih->data->type&IUP_BUTTON_IMAGE && !iupAttribGet(ih, "IMPRESS")) { COLORREF cr; if (iupwinDrawGetThemeButtonBgColor(ih->handle, &cr)) return iupStrReturnStrf("%d %d %d", (int)GetRValue(cr), (int)GetGValue(cr), (int)GetBValue(cr)); } if (iupAttribGet(ih, "IMPRESS")) return iupBaseNativeParentGetBgColorAttrib(ih); else return NULL; }
static char* winToggleGetBgColorAttrib(Ihandle* ih) { /* the most important use of this is to provide the correct background for images */ if (iupwin_comctl32ver6 && ih->data->type==IUP_TOGGLE_IMAGE) { COLORREF cr; if (iupwinDrawGetThemeButtonBgColor(ih->handle, &cr)) return iupStrReturnStrf("%d %d %d", (int)GetRValue(cr), (int)GetGValue(cr), (int)GetBValue(cr)); } if (ih->data->type == IUP_TOGGLE_TEXT) return iupBaseNativeParentGetBgColorAttrib(ih); else return IupGetGlobal("DLGBGCOLOR"); }
static char* iScintillaGetSelectionAttrib(Ihandle* ih) { int start = iupScintillaSendMessage(ih, SCI_GETSELECTIONSTART, 0, 0); int end = iupScintillaSendMessage(ih, SCI_GETSELECTIONEND, 0, 0); int start_col, start_lin, end_col, end_lin; if (start == end) return NULL; start_lin = iupScintillaSendMessage(ih, SCI_LINEFROMPOSITION, start, 0); start_col = iupScintillaSendMessage(ih, SCI_GETCOLUMN, start, 0); end_lin = iupScintillaSendMessage(ih, SCI_LINEFROMPOSITION, end, 0); end_col = iupScintillaSendMessage(ih, SCI_GETCOLUMN, end, 0); return iupStrReturnStrf("%d,%d:%d,%d", start_lin, start_col, end_lin, end_col); }
static char* winButtonGetAlignmentAttrib(Ihandle *ih) { char* horiz_align2str[3] = {"ALEFT", "ACENTER", "ARIGHT"}; char* vert_align2str[3] = {"ATOP", "ACENTER", "ABOTTOM"}; return iupStrReturnStrf("%s:%s", horiz_align2str[ih->data->horiz_alignment], vert_align2str[ih->data->vert_alignment]); }
char *iupdrvGetGlobal(const char *name) { if (iupStrEqual(name, "VIRTUALSCREEN")) { GdkScreen *screen = gdk_screen_get_default(); GdkWindow *root = gdk_screen_get_root_window(gdk_screen_get_default()); int x = 0; int y = 0; int w = gdk_screen_get_width(screen); int h = gdk_screen_get_height(screen); gdk_window_get_root_origin(root, &x, &y); return iupStrReturnStrf("%d %d %d %d", x, y, w, h); } if (iupStrEqual(name, "MONITORSINFO")) { int i; #if GTK_CHECK_VERSION(3, 22, 0) GdkDisplay *display = gdk_display_get_default(); int monitors_count = gdk_display_get_n_monitors(display); #else GdkScreen *screen = gdk_screen_get_default(); int monitors_count = gdk_screen_get_n_monitors(screen); #endif char *str = iupStrGetMemory(monitors_count * 50); char* pstr = str; GdkRectangle rect; for (i = 0; i < monitors_count; i++) { #if GTK_CHECK_VERSION(3, 22, 0) GdkMonitor* monitor = gdk_display_get_monitor(display, i); gdk_monitor_get_geometry(monitor, &rect); #else gdk_screen_get_monitor_geometry(screen, i, &rect); #endif pstr += sprintf(pstr, "%d %d %d %d\n", rect.x, rect.y, rect.width, rect.height); } return str; } if (iupStrEqual(name, "MONITORSCOUNT")) { #if GTK_CHECK_VERSION(3, 22, 0) GdkDisplay *display = gdk_display_get_default(); int monitors_count = gdk_display_get_n_monitors(display); #else GdkScreen *screen = gdk_screen_get_default(); int monitors_count = gdk_screen_get_n_monitors(screen); #endif return iupStrReturnInt(monitors_count); } if (iupStrEqual(name, "TRUECOLORCANVAS")) { return iupStrReturnBoolean(gdk_visual_get_best_depth() > 8); } if (iupStrEqual(name, "UTF8MODE")) { return iupStrReturnBoolean(iupgtkStrGetUTF8Mode()); } if (iupStrEqual(name, "UTF8AUTOCONVERT")) { return iupStrReturnBoolean(!iupgtkStrGetUTF8Mode()); } #ifndef WIN32 if (iupStrEqual(name, "EXEFILENAME")) { char* argv0 = IupGetGlobal("ARGV0"); if (argv0) { char* exefilename = realpath(argv0, NULL); if (exefilename) { char* str = iupStrReturnStr(exefilename); free(exefilename); return str; } } } #endif if (iupStrEqual(name, "SHOWMENUIMAGES")) { gboolean menu_images; g_object_get (gtk_settings_get_default (), "gtk-menu-images", &menu_images, NULL); return iupStrReturnBoolean(menu_images); } return NULL; }
static char* winDatePickGetValueAttrib(Ihandle* ih) { SYSTEMTIME st; SendMessage(ih->handle, DTM_GETSYSTEMTIME, 0, (LPARAM)&st); return iupStrReturnStrf("%d/%d/%d", st.wYear, st.wMonth, st.wDay); }
char* iupdrvGetGlobal(const char* name) { if (iupStrEqual(name, "VIRTUALSCREEN")) { int x = GetSystemMetrics(SM_XVIRTUALSCREEN); int y = GetSystemMetrics(SM_YVIRTUALSCREEN); int w = GetSystemMetrics(SM_CXVIRTUALSCREEN); int h = GetSystemMetrics(SM_CYVIRTUALSCREEN); return iupStrReturnStrf("%d %d %d %d", x, y, w, h); } if (iupStrEqual(name, "MONITORSINFO")) { int i; int monitors_count = GetSystemMetrics(SM_CMONITORS); RECT* monitors_rect = malloc(monitors_count*sizeof(RECT)); char* str = iupStrGetMemory(monitors_count*50); char* pstr = str; win_monitor_index = 0; EnumDisplayMonitors(NULL, NULL, winGlobalMonitorInfoEnum, (LPARAM)monitors_rect); for (i=0; i < monitors_count; i++) pstr += sprintf(pstr, "%d %d %d %d\n", (int)monitors_rect[i].left, (int)monitors_rect[i].top, (int)(monitors_rect[i].right-monitors_rect[i].left), (int)(monitors_rect[i].bottom-monitors_rect[i].top)); free(monitors_rect); return str; } if (iupStrEqual(name, "TRUECOLORCANVAS")) { return iupStrReturnBoolean(iupdrvGetScreenDepth() > 8); } if (iupStrEqual(name, "UTF8MODE")) { return iupStrReturnBoolean(iupwinStrGetUTF8Mode()); } if (iupStrEqual(name, "UTF8MODE_FILE")) { return iupStrReturnBoolean(iupwinStrGetUTF8ModeFile()); } if (iupStrEqual(name, "DLL_HINSTANCE")) { return (char*)iupwin_dll_hinstance; } if (iupStrEqual(name, "COMCTL32VER6")) { return iupStrReturnBoolean(iupwin_comctl32ver6); } if (iupStrEqual(name, "SYSTEMCODEPAGE")) { CPINFOEX info; GetCPInfoEx(CP_ACP, 0, &info); return iupStrReturnInt(info.CodePage); } if (iupStrEqual(name, "LASTERROR")) { DWORD error = GetLastError(); if (error) { LPTSTR lpMsgBuf = NULL; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| FORMAT_MESSAGE_FROM_SYSTEM| FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, 0, (LPTSTR)&lpMsgBuf, /* weird but that's correct */ 0, NULL); if (lpMsgBuf) { char* str = iupStrReturnStr(iupwinStrFromSystem(lpMsgBuf)); LocalFree(lpMsgBuf); return str; } else return "Unknown Error"; } } if (iupStrEqual(name, "DWM_COMPOSITION")) { typedef HRESULT(STDAPICALLTYPE *PtrDwmIsCompositionEnabled)(BOOL*); static PtrDwmIsCompositionEnabled dwmIsCompositionEnabled = NULL; if (dwmIsCompositionEnabled == NULL) { HMODULE dwmLibrary = LoadLibrary(TEXT("dwmapi.dll")); if (dwmLibrary) dwmIsCompositionEnabled = (PtrDwmIsCompositionEnabled)GetProcAddress(dwmLibrary, "DwmIsCompositionEnabled"); } if (dwmIsCompositionEnabled != NULL) { /* windows vista or higher (has aero): see if disabled */ BOOL enabled; dwmIsCompositionEnabled(&enabled); return iupStrReturnBoolean(enabled); } else return NULL; } return NULL; }
static char* iColorDlgGetValueHexAttrib(Ihandle* ih) { IcolorDlgData* colordlg_data = (IcolorDlgData*)iupAttribGetInherit(ih, "_IUP_GC_DATA"); return iupStrReturnStrf("#%02X%02X%02X", (int)colordlg_data->red, (int)colordlg_data->green, (int)colordlg_data->blue); }
static char* iColorDlgGetValueHSIAttrib(Ihandle* ih) { IcolorDlgData* colordlg_data = (IcolorDlgData*)iupAttribGetInherit(ih, "_IUP_GC_DATA"); return iupStrReturnStrf("%d %d %d",(int)colordlg_data->hue, (int)(colordlg_data->saturation*100), (int)(colordlg_data->intensity*100)); }
static char* winCalendarGetValueAttrib(Ihandle* ih) { SYSTEMTIME st; SendMessage(ih->handle, MCM_GETCURSEL, 0, (LPARAM)&st); return iupStrReturnStrf("%02d/%02d/%d", st.wDay, st.wMonth, st.wYear); }
char* iupDialogGetChildIdStr(Ihandle* ih) { Ihandle* dialog = IupGetDialog(ih); return iupStrReturnStrf("iup-%s-%d", ih->iclass->name, dialog->data->child_id); }
static char* iCellsGetLimitsAttrib(Ihandle* ih, int i, int j) { int xmin, xmax, ymin, ymax; iCellsGetLimits(ih, i, j, &xmin, &xmax, &ymin, &ymax); return iupStrReturnStrf("%d:%d:%d:%d", xmin, xmax, ymin, ymax); }
static char* winCalendarGetForeColorAttrib(Ihandle* ih) { COLORREF cr = (COLORREF)SendMessage(ih->handle, MCM_GETCOLOR, MCSC_TEXT, 0); return iupStrReturnStrf("%d %d %d", (int)GetRValue(cr), (int)GetGValue(cr), (int)GetBValue(cr)); }