giInterface_Width = giScreenWidth/16;
// Set root window to no-border
- WM_SetFlags(NULL, 0);
+ AxWin_SetFlags(NULL, 0);
// -- Create Sidebar (Menu and Window List) --
- gpInterface_Sidebar = WM_CreateElement(NULL, ELETYPE_TOOLBAR, ELEFLAG_VERTICAL, "Sidebar");
- WM_SetSize( gpInterface_Sidebar, giInterface_Width );
+ gpInterface_Sidebar = AxWin_CreateElement(NULL, ELETYPE_TOOLBAR, ELEFLAG_VERTICAL, "Sidebar");
+ AxWin_SetSize( gpInterface_Sidebar, giInterface_Width );
// > System Menu Button
- btn = WM_CreateElement(gpInterface_Sidebar, ELETYPE_BUTTON, ELEFLAG_NOSTRETCH, "SystemMenu");
- WM_SetSize(btn, giInterface_Width-4);
- //text = WM_CreateElement(btn, ELETYPE_IMAGE, ELEFLAG_SCALE, "MenuLogo");
- text = WM_CreateElement(btn, ELETYPE_IMAGE, 0, "MenuLogo");
- //WM_SetText(text, "file:///LogoSmall.sif");
- WM_SetText(text, csLogoSmall);
+ btn = AxWin_CreateElement(gpInterface_Sidebar, ELETYPE_BUTTON, ELEFLAG_NOSTRETCH, "SystemMenu");
+ AxWin_SetSize(btn, giInterface_Width-4);
+ //text = AxWin_CreateElement(btn, ELETYPE_IMAGE, ELEFLAG_SCALE, "MenuLogo");
+ text = AxWin_CreateElement(btn, ELETYPE_IMAGE, 0, "MenuLogo");
+ //AxWin_SetText(text, "file:///LogoSmall.sif");
+ AxWin_SetText(text, csLogoSmall);
// > Plain <hr/> style spacer
- ele = WM_CreateElement(gpInterface_Sidebar, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "SideBar Spacer Top");
- WM_SetSize(ele, 4);
+ ele = AxWin_CreateElement(gpInterface_Sidebar, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "SideBar Spacer Top");
+ AxWin_SetSize(ele, 4);
// > Application List (Window list on most OSs)
- gpInterface_ProgramList = WM_CreateElement(gpInterface_Sidebar, ELETYPE_BOX, ELEFLAG_VERTICAL, "ProgramList");
+ gpInterface_ProgramList = AxWin_CreateElement(gpInterface_Sidebar, ELETYPE_BOX, ELEFLAG_VERTICAL, "ProgramList");
// > Plain <hr/> style spacer
- ele = WM_CreateElement(gpInterface_Sidebar, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "SideBar Spacer Bottom");
- WM_SetSize(ele, 4);
+ ele = AxWin_CreateElement(gpInterface_Sidebar, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "SideBar Spacer Bottom");
+ AxWin_SetSize(ele, 4);
// > Version/Time
- text = WM_CreateElement(gpInterface_Sidebar, ELETYPE_TEXT, ELEFLAG_NOSTRETCH, "Version String");
- WM_SetSize(text, 20);
- WM_SetText(text, "2.0");
+ text = AxWin_CreateElement(gpInterface_Sidebar, ELETYPE_TEXT, ELEFLAG_NOSTRETCH, "Version String");
+ AxWin_SetSize(text, 20);
+ AxWin_SetText(text, "2.0");
// --
// -- Create Main Area and regions within --
// --
// > Righthand Area
- gpInterface_MainArea = WM_CreateElement(NULL, ELETYPE_BOX, ELEFLAG_VERTICAL, "MainArea");
+ gpInterface_MainArea = AxWin_CreateElement(NULL, ELETYPE_BOX, ELEFLAG_VERTICAL, "MainArea");
// > Header Bar (Title)
- gpInterface_HeaderBar = WM_CreateElement(gpInterface_MainArea, ELETYPE_BOX, 0, "HeaderBar");
- WM_SetSize(gpInterface_HeaderBar, giInterface_HeaderBarSize);
- text = WM_CreateElement(gpInterface_HeaderBar, ELETYPE_TEXT, 0, NULL);
- WM_SetText(text, "Acess2 GUI - By thePowersGang (John Hodge)");
+ gpInterface_HeaderBar = AxWin_CreateElement(gpInterface_MainArea, ELETYPE_BOX, 0, "HeaderBar");
+ AxWin_SetSize(gpInterface_HeaderBar, giInterface_HeaderBarSize);
+ text = AxWin_CreateElement(gpInterface_HeaderBar, ELETYPE_TEXT, 0, NULL);
+ AxWin_SetText(text, "Acess2 GUI - By thePowersGang (John Hodge)");
// > Tab Bar (Current windows)
- gpInterface_TabBar = WM_CreateElement(gpInterface_MainArea, ELETYPE_TABBAR, 0, "TabBar");
- WM_SetSize(gpInterface_TabBar, giInterface_TabBarSize);
+ gpInterface_TabBar = AxWin_CreateElement(gpInterface_MainArea, ELETYPE_TABBAR, 0, "TabBar");
+ AxWin_SetSize(gpInterface_TabBar, giInterface_TabBarSize);
// > Application Space
- gpInterface_TabContent = WM_CreateElement(gpInterface_MainArea, ELETYPE_BOX, 0, "TabContent");
+ gpInterface_TabContent = AxWin_CreateElement(gpInterface_MainArea, ELETYPE_BOX, 0, "TabContent");
}
void Interface_Update(void)
{
giInterface_Width = giScreenWidth/16;
- WM_SetSize( gpInterface_Sidebar, giInterface_Width );
+ AxWin_SetSize( gpInterface_Sidebar, giInterface_Width );
}
void Interface_Render(void)
extern void Video_GetTextDims(tFont *Font, const char *Text, int *W, int *H);
// === PROTOTYPES ===
-tElement *WM_CreateElement(tElement *Parent, int Type, int Flags, const char *DebugName);
+tElement *AxWin_CreateElement(tElement *Parent, int Type, int Flags, const char *DebugName);
+void AxWin_DeleteElement(tElement *Element);
+void AxWin_SetFlags(tElement *Element, int Flags);
+void AxWin_SetSize(tElement *Element, int Size);
+void AxWin_SetText(tElement *Element, const char *Text);
void WM_UpdateMinDims(tElement *Element);
-void WM_SetFlags(tElement *Element, int Flags);
-void WM_SetSize(tElement *Element, int Size);
-void WM_SetText(tElement *Element, const char *Text);
void WM_UpdateDimensions(tElement *Element, int Pass);
void WM_UpdatePosition(tElement *Element);
void WM_RenderWidget(tElement *Element);
// === CODE ===
// --- Widget Creation and Control ---
-tElement *WM_CreateElement(tElement *Parent, int Type, int Flags, const char *DebugName)
+tAxWin_Element *AxWin_CreateElement(tElement *Parent, int Type, int Flags, const char *DebugName)
{
tElement *ret;
const char *dbgName = DebugName ? DebugName : "";
return ret;
}
+/**
+ * \brief
+ */
+void AxWin_DeleteElement(tElement *Element)
+{
+ // TODO: Implement AxWin_DeleteElement
+}
+
/**
* \brief Alter an element's flags
*/
-void WM_SetFlags(tElement *Element, int Flags)
+void AxWin_SetFlags(tElement *Element, int Flags)
{
// Permissions are handled in the message handler
if(!Element) {
return ;
}
-void WM_SetSize(tElement *Element, int Size)
+void AxWin_SetSize(tElement *Element, int Size)
{
if(!Element) return ;
Element->FixedWith = Size;
* \brief Set the text field of an element
* \note Used for the image path on ELETYPE_IMAGE
*/
-void WM_SetText(tElement *Element, const char *Text)
+void AxWin_SetText(tElement *Element, const char *Text)
{
if(!Element) return ;
if(Element->Text) free(Element->Text);
#ifndef _WM_H_
#define _WM_H_
-typedef struct sElement
+#include <axwin2/axwin.h>
+
+typedef struct sAxWin_Element tElement;
+
+struct sAxWin_Element
{
int Type;
- struct sElement *Parent;
- struct sElement *FirstChild;
- struct sElement *LastChild;
- struct sElement *NextSibling;
+ tElement *Parent;
+ tElement *FirstChild;
+ tElement *LastChild;
+ tElement *NextSibling;
short PaddingL, PaddingR;
short PaddingT, PaddingB;
short CachedW, CachedH;
char DebugName[];
-} tElement;
+};
typedef struct sTab
{
int Type; // Should be zero, allows a tab to be the parent of an element
- struct sElement *Parent;
- struct sElement *FirstChild;
- struct sElement *LastChild;
+ tElement *Parent;
+ tElement *FirstChild;
+ tElement *LastChild;
+ struct sTab *NextTab;
char *Name;
char Name[];
} tApplication;
-// === CONSTANTS ===
-enum eElementFlags
-{
- /**
- * \brief Rendered
- *
- * If set, the element will be ignored in calculating sizes and
- * rendering.
- */
- ELEFLAG_NORENDER = 0x001,
- /**
- * \brief Element visibility
- *
- * If set, the element is not drawn (but still is used for size calculations)
- */
- ELEFLAG_INVISIBLE = 0x002,
-
- /**
- * \brief Position an element absulutely (ignored in size calcs)
- */
- ELEFLAG_ABSOLUTEPOS = 0x004,
-
- /**
- * \brief Fixed size element
- */
- ELEFLAG_FIXEDSIZE = 0x008,
-
- /**
- * \brief Element "orientation"
- *
- * Vertical means that the children of this element are stacked,
- * otherwise they list horizontally
- */
- ELEFLAG_VERTICAL = 0x010,// ELEFLAG_HORIZONTAL = 0x000,
- /**
- * \brief Action for text that overflows
- */
- ELEFLAG_WRAP = 0x020,// ELEFLAG_NOWRAP = 0x000,
- /**
- * \brief Cross size action
- *
- * If this flag is set, the element will only be as large (across
- * its parent) as is needed to encase the contents of the element.
- * Otherwise, the element will expand to fill all avaliable space.
- */
- ELEFLAG_NOEXPAND = 0x040,
-
- /**
- * \brief With (length) size action
- * If this flag is set, the element will only be as large as
- * is required along it's parent
- */
- ELEFLAG_NOSTRETCH = 0x080,
-
- /**
- * \brief Center alignment
- */
- ELEFLAG_ALIGN_CENTER= 0x100,
- /**
- * \brief Right/Bottom alignment
- *
- * If set, the element aligns to the end of avaliable space (instead
- * of the beginning)
- */
- ELEFLAG_ALIGN_END = 0x200
-};
-
-/**
- */
-enum eElementTypes
-{
- ELETYPE_NONE,
-
- ELETYPE_BOX, //!< Content box (invisible in itself)
- ELETYPE_TABBAR, //!< Tab Bar
- ELETYPE_TOOLBAR, //!< Tool Bar
-
- ELETYPE_BUTTON, //!< Push Button
-
- ELETYPE_TEXT, //!< Text
- ELETYPE_IMAGE, //!< Image
-
- ELETYPE_SPACER, //!< Visual Spacer (horizontal / vertical rule)
-
- MAX_ELETYPES = 0x100
-};
-
-// === FUNCTIONS ===
-/**
- * \brief Create a new element as a child of \a Parent
- */
-extern tElement *WM_CreateElement(tElement *Parent, int Type, int Flags, const char *DebugName);
-extern void WM_SetFlags(tElement *Element, int Flags);
-extern void WM_SetSize(tElement *Element, int Size);
-extern void WM_SetText(tElement *Element, const char *Text);
-
#endif
// === Window Control ===
-extern tAxWin_Element *AxWin_CreateElement(int ElementType);
+extern tAxWin_Element *AxWin_CreateElement(tAxWin_Element *Parent, int ElementType, int Flags, const char *DebugName);
+extern void AxWin_SetFlags(tAxWin_Element *Element, int Flags);
+extern void AxWin_SetText(tAxWin_Element *Element, const char *Text);
+extern void AxWin_SetSize(tAxWin_Element *Element, int Size);
+extern void AxWin_DeleteElement(tAxWin_Element *Element);
+
+// === CONSTANTS ===
+enum eElementFlags
+{
+ /**
+ * \brief Rendered
+ *
+ * If set, the element will be ignored in calculating sizes and
+ * rendering.
+ */
+ ELEFLAG_NORENDER = 0x001,
+ /**
+ * \brief Element visibility
+ *
+ * If set, the element is not drawn (but still is used for size calculations)
+ */
+ ELEFLAG_INVISIBLE = 0x002,
+
+ /**
+ * \brief Position an element absulutely (ignored in size calcs)
+ */
+ ELEFLAG_ABSOLUTEPOS = 0x004,
+
+ /**
+ * \brief Fixed size element
+ */
+ ELEFLAG_FIXEDSIZE = 0x008,
+
+ /**
+ * \brief Element "orientation"
+ *
+ * Vertical means that the children of this element are stacked,
+ * otherwise they list horizontally
+ */
+ ELEFLAG_VERTICAL = 0x010,// ELEFLAG_HORIZONTAL = 0x000,
+ /**
+ * \brief Action for text that overflows
+ */
+ ELEFLAG_WRAP = 0x020,// ELEFLAG_NOWRAP = 0x000,
+ /**
+ * \brief Cross size action
+ *
+ * If this flag is set, the element will only be as large (across
+ * its parent) as is needed to encase the contents of the element.
+ * Otherwise, the element will expand to fill all avaliable space.
+ */
+ ELEFLAG_NOEXPAND = 0x040,
+
+ /**
+ * \brief With (length) size action
+ * If this flag is set, the element will only be as large as
+ * is required along it's parent
+ */
+ ELEFLAG_NOSTRETCH = 0x080,
+
+ /**
+ * \brief Center alignment
+ */
+ ELEFLAG_ALIGN_CENTER= 0x100,
+ /**
+ * \brief Right/Bottom alignment
+ *
+ * If set, the element aligns to the end of avaliable space (instead
+ * of the beginning)
+ */
+ ELEFLAG_ALIGN_END = 0x200
+};
+
+/**
+ */
+enum eElementTypes
+{
+ ELETYPE_NONE,
+
+ ELETYPE_BOX, //!< Content box (invisible in itself)
+ ELETYPE_TABBAR, //!< Tab Bar
+ ELETYPE_TOOLBAR, //!< Tool Bar
+
+ ELETYPE_BUTTON, //!< Push Button
+
+ ELETYPE_TEXT, //!< Text
+ ELETYPE_IMAGE, //!< Image
+
+ ELETYPE_SPACER, //!< Visual Spacer (horizontal / vertical rule)
+
+ MAX_ELETYPES = 0x100
+};
#endif