Merge branch 'master' of github.com:thepowersgang/acess2
[tpg/acess2.git] / Usermode / Applications / axwin2_src / WM / wm.h
index 2837251..5977fd6 100644 (file)
@@ -7,18 +7,31 @@
 #include <axwin2/axwin.h>
 #include "common.h"
 
+/**
+ * \brief Number of elements that can be owned by each application
+ */
+// TODO: Fine tune these values
+#define MAX_ELEMENTS_PER_APP   1024
+#define DEFAULT_ELEMENTS_PER_APP       128
+
 typedef struct sAxWin_Element  tElement;
-typedef struct sTab    tTab;
+typedef struct sMenuItem       tMenuItem;
+typedef struct sWindow tWindow;
 typedef struct sApplication    tApplication;
 
 struct sAxWin_Element
 {
-        int    Type;
+       enum eElementTypes      Type;
        
+       // Element Tree
        tElement        *Parent;
        tElement        *FirstChild;
        tElement        *LastChild;
        tElement        *NextSibling;
+       
+       // Application
+       tApplication    *Owner; //!< Owning application
+       uint16_t        ApplicationID;  //!< Index into sApplication::EleIndex
 
        // User modifiable attributes   
        short   PaddingL, PaddingR;
@@ -27,16 +40,16 @@ struct sAxWin_Element
        
        uint32_t        Flags;
        
-       short   FixedWith;      // Fixed Long Size attribute (height)
-       short   FixedCross;     // Fixed Cross Size attribute (width)
+       short   FixedWith;      //!< Fixed lengthways Size attribute (height)
+       short   FixedCross;     //!< Fixed Cross Size attribute (width)
        
        char    *Text;
        
        // -- Attributes maitained by the element code
        // Not touched by the user
-       short   MinWith;        // Minimum long size
-       short   MinCross;       // Minimum cross size
-       void    *Data;
+       short   MinWith;        //!< Minimum long size
+       short   MinCross;       //!< Minimum cross size
+       void    *Data;  //!< Per-type data
        
        // -- Render Cache
        short   CachedX, CachedY;
@@ -45,16 +58,52 @@ struct sAxWin_Element
        char    DebugName[];
 };
 
+struct sMenuItem
+{
+       tMenuItem       *Next;
+        int    Flags;
+        int    ID;     //!< ID number sent to application
+       const char      *Label;
+       const char      *Right;
+       tMenuItem       *FirstChild;
+};
+
+struct sWindow
+{
+        int    X, Y, W, H;
+       void    *Icon;
+       
+       tApplication    *App;
+       
+       tWindow *OrderNext;     // Render order
+       
+       tMenuItem       *Menus;
+       
+       tElement        RootElement;
+};
+
 struct sApplication
 {
        tApplication    *Next;
 
-       void    *Ident;
-       tMessages_Handle_Callback       *SendMessage;
+       tIPC_Type       *IPCType;
+       void    *Ident; //!< Client Identifier
        
-       char    *Name;
-       tElement        MetaElement;
-
+       char    *Name;  //!< Application name
+       
+        int    MaxElementIndex;        //!< Number of entries in \a EleIndex
+       tElement        **EleIndex;     //!< Array of pointers to elements owned by this application
+       
+       tElement        MetaElement;    //!< Tabs child off this
 };
 
+// === FUNCTIONS ===
+
+// --- Render
+extern void    WM_UpdateMinDims(tElement *Element);
+extern void    WM_UpdateDimensions(tElement *Element, int Pass);
+extern void    WM_UpdatePosition(tElement *Element);
+extern void    WM_RenderWidget(tElement *Element);
+extern void    WM_Update(void);
+
 #endif

UCC git Repository :: git.ucc.asn.au