summaryrefslogtreecommitdiff
path: root/iup/src/iup_globalattrib.c
diff options
context:
space:
mode:
Diffstat (limited to 'iup/src/iup_globalattrib.c')
-rwxr-xr-xiup/src/iup_globalattrib.c153
1 files changed, 153 insertions, 0 deletions
diff --git a/iup/src/iup_globalattrib.c b/iup/src/iup_globalattrib.c
new file mode 100755
index 0000000..00586fb
--- /dev/null
+++ b/iup/src/iup_globalattrib.c
@@ -0,0 +1,153 @@
+/** \file
+ * \brief global attributes enviroment
+ *
+ * See Copyright Notice in "iup.h"
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "iup.h"
+
+#include "iup_table.h"
+#include "iup_globalattrib.h"
+#include "iup_drv.h"
+#include "iup_drvfont.h"
+#include "iup_assert.h"
+#include "iup_str.h"
+
+
+static Itable *iglobal_table = NULL;
+
+void iupGlobalAttribInit(void)
+{
+ iglobal_table = iupTableCreate(IUPTABLE_STRINGINDEXED);
+}
+
+void iupGlobalAttribFinish(void)
+{
+ iupTableDestroy(iglobal_table);
+ iglobal_table = NULL;
+}
+
+static int iGlobalChangingDefaultColor(const char *name)
+{
+ if (iupStrEqual(name, "DLGBGCOLOR") ||
+ iupStrEqual(name, "DLGFGCOLOR") ||
+ iupStrEqual(name, "MENUBGCOLOR") ||
+ iupStrEqual(name, "MENUFGCOLOR") ||
+ iupStrEqual(name, "TXTBGCOLOR") ||
+ iupStrEqual(name, "TXTFGCOLOR"))
+ {
+ char str[50] = "_IUP_USER_DEFAULT_";
+ strcat(str, name);
+ iupTableSet(iglobal_table, str, (void*)"1", IUPTABLE_POINTER); /* mark as changed by the User */
+ return 1;
+ }
+ return 0;
+}
+
+int iupGlobalDefaultColorChanged(const char *name)
+{
+ char str[50] = "_IUP_USER_DEFAULT_";
+ strcat(str, name);
+ return iupTableGet(iglobal_table, str) != NULL;
+}
+
+void iupGlobalSetDefaultColorAttrib(const char* name, int r, int g, int b)
+{
+ if (!iupGlobalDefaultColorChanged(name))
+ {
+ char value[50];
+ sprintf(value, "%3d %3d %3d", r, g, b);
+ iupTableSet(iglobal_table, name, (void*)value, IUPTABLE_STRING);
+ }
+}
+
+void IupSetGlobal(const char *name, const char *value)
+{
+ iupASSERT(name!=NULL);
+ if (!name) return;
+
+ if (iupStrEqual(name, "DEFAULTFONTSIZE"))
+ {
+ iupSetDefaultFontSizeGlobalAttrib(value);
+ return;
+ }
+
+ if (iGlobalChangingDefaultColor(name) || iupdrvSetGlobal(name, value))
+ {
+ if (!value)
+ iupTableRemove(iglobal_table, name);
+ else
+ iupTableSet(iglobal_table, name, (void*)value, IUPTABLE_POINTER);
+ }
+}
+
+void IupStoreGlobal(const char *name, const char *value)
+{
+ iupASSERT(name!=NULL);
+ if (!name) return;
+
+ if (iupStrEqual(name, "DEFAULTFONTSIZE"))
+ {
+ iupSetDefaultFontSizeGlobalAttrib(value);
+ return;
+ }
+
+ if (iGlobalChangingDefaultColor(name) || iupdrvSetGlobal(name, value))
+ {
+ if (!value)
+ iupTableRemove(iglobal_table, name);
+ else
+ iupTableSet(iglobal_table, name, (void*)value, IUPTABLE_STRING);
+ }
+}
+
+char *IupGetGlobal(const char *name)
+{
+ char* value;
+
+ iupASSERT(name!=NULL);
+ if (!name)
+ return NULL;
+
+ if (iupStrEqual(name, "DEFAULTFONTSIZE"))
+ return iupGetDefaultFontSizeGlobalAttrib();
+
+ value = iupdrvGetGlobal(name);
+
+ if (!value)
+ value = (char*)iupTableGet(iglobal_table, name);
+
+ return value;
+}
+
+int iupGlobalIsPointer(const char* name)
+{
+ static struct {
+ const char *name;
+ } ptr_table[] = {
+#ifdef WIN32
+ {"HINSTANCE"},
+#else
+ {"XDISPLAY"},
+ {"XSCREEN"},
+ {"APPSHELL"},
+#endif
+ };
+#define PTR_TABLE_SIZE ((sizeof ptr_table)/(sizeof ptr_table[0]))
+
+ if (name)
+ {
+ int i;
+ for (i = 0; i < PTR_TABLE_SIZE; i++)
+ {
+ if (iupStrEqualNoCase(name, ptr_table[i].name))
+ return 1;
+ }
+ }
+
+ return 0;
+}