#define _RENDERER_WIDGET_H_
#include <wm_renderer.h>
+#include <axwin3/widget.h>
-enum
-{
- MSG_WIDGET_CREATE,
- MSG_WIDGET_DELETE,
- MSG_WIDGET_SETTEXT
-};
+#include <widget_messages.h>
+
+// === TYPES ===
+typedef struct sWidgetWin tWidgetWin;
+typedef struct sAxWin_Element tElement;
-enum eElementTypes
+// === STRUCTURES ===
+struct sAxWin_Element
{
- ELETYPE_NONE,
+ enum eElementTypes Type;
- ELETYPE_WINDOW, //!< Window root element
+ tWindow *Window;
+ uint32_t ID; //!< Application provided ID number
+ tElement *ListNext; //!< Next element in bucket
- ELETYPE_BOX, //!< Content box (invisible in itself)
- ELETYPE_TABBAR, //!< Tab Bar
- ELETYPE_TOOLBAR, //!< Tool Bar
+ // Element Tree
+ tElement *Parent;
+ tElement *FirstChild;
+ tElement *LastChild;
+ tElement *NextSibling;
- ELETYPE_BUTTON, //!< Push Button
+ // User modifiable attributes
+ short PaddingL, PaddingR;
+ short PaddingT, PaddingB;
+ short GapSize;
- ELETYPE_TEXT, //!< Text
- ELETYPE_IMAGE, //!< Image
+ uint32_t Flags;
- ELETYPE_SPACER, //!< Visual Spacer (horizontal / vertical rule)
+ short FixedWith; //!< Fixed lengthways Size attribute (height)
+ short FixedCross; //!< Fixed Cross Size attribute (width)
- MAX_ELETYPES = 0x100
-};
+ tColour BackgroundColour;
-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,
+ char *Text;
- /**
- * \brief Fixed size element
- */
- ELEFLAG_FIXEDSIZE = 0x008,
+ // -- Attributes maitained by the element code
+ // Not touched by the user
+ short MinW; //!< Minimum long size
+ short MinH; //!< Minimum cross size
+ void *Data; //!< Per-type data
- /**
- * \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
+ // -- Render Cache
+ short CachedX, CachedY;
+ short CachedW, CachedH;
};
-
-typedef struct
+struct sWidgetWin
{
- uint32_t Parent;
- uint32_t NewID;
- char DebugName[];
-} tWidgetMsg_Create;
+ tElement RootElement;
+
+ tElement *FocusedElement;
+
+ int TableSize; //!< Number of entries, anything over will wrap
+ tElement *ElementTable[]; //!< Hash table essentially
+};
#endif