Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git] / Usermode / Applications / axwin4_src / UI / taskbar.c
diff --git a/Usermode/Applications/axwin4_src/UI/taskbar.c b/Usermode/Applications/axwin4_src/UI/taskbar.c
new file mode 100644 (file)
index 0000000..b62a042
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * AxWin4 GUI - UI Core
+ * - By John Hodge (thePowersGang)
+ *
+ * taskbar.c
+ * - Main toolbar (aka Taskbar) 
+ */
+#include <axwin4/axwin.h>
+#include "include/common.h"
+#include "include/taskbar.h"
+#include <time.h>
+
+// === CONSTANTS ===
+#define TASKBAR_HEIGHT 30
+#define TASKBAR_BORDER 3       // Border between window edge and controls
+#define TASKBAR_SYSBTN_SIZE    (TASKBAR_HEIGHT-TASKBAR_BORDER*2)
+#define TASKBAR_WIN_MAXSIZE    100
+#define TASKBAR_WIN_MINSIZE    24
+#define TASKBAR_CLOCKSIZE      60
+
+// === TYPES ===
+typedef struct sTaskbar_Win    tTaskbar_Win;
+struct sTaskbar_Win
+{
+       tTaskbar_Win    *Next;
+       const char      *Title;
+};
+
+// === PROTOTYPES ===
+
+// === GLOBALS ===
+tAxWin4_Window *gpTaskbar_Window;
+unsigned int giTaskbar_NumWins = 0;
+tTaskbar_Win   *gpTaskbar_FirstWin;
+
+// === CODE ===
+void Taskbar_Create(void)
+{
+       gpTaskbar_Window = AxWin4_CreateWindow("taskbar");
+       tAxWin4_Window * const win = gpTaskbar_Window;
+
+       AxWin4_MoveWindow(win, 0, 0);
+       AxWin4_ResizeWindow(win, giScreenWidth, TASKBAR_HEIGHT);
+       
+       AxWin4_SetWindowFlags(win, AXWIN4_WNDFLAG_NODECORATE);
+       Taskbar_Redraw();
+       AxWin4_ShowWindow(win, true);
+}
+
+void Taskbar_Redraw(void)
+{
+       const int       w = giScreenWidth;
+       const int       h = TASKBAR_HEIGHT;
+       
+       const int       active_height = h - TASKBAR_BORDER*2;
+       const int       winlist_start_x = TASKBAR_BORDER+TASKBAR_SYSBTN_SIZE+TASKBAR_BORDER;
+       const int       clock_start_x = w - (TASKBAR_BORDER+TASKBAR_CLOCKSIZE);
+       
+       // Window background: Toolbar skin
+       AxWin4_DrawControl(gpTaskbar_Window, 0, 0, w, h, AXWIN4_CTL_TOOLBAR, 0);
+       
+       // System button
+       // TODO: Use an image instead
+       AxWin4_DrawControl(gpTaskbar_Window, TASKBAR_BORDER, TASKBAR_BORDER, TASKBAR_SYSBTN_SIZE, active_height, AXWIN4_CTL_BUTTON, 0);
+       
+       // Windows
+       // TODO: Maintain/request a list of windows
+       if( giTaskbar_NumWins )
+       {
+               int winbutton_size = (clock_start_x - winlist_start_x) / giTaskbar_NumWins;
+               if(winbutton_size > TASKBAR_WIN_MAXSIZE)        winbutton_size = TASKBAR_WIN_MAXSIZE;
+               int x = winlist_start_x;
+               for(tTaskbar_Win *win = gpTaskbar_FirstWin; win; win = win->Next )
+               {
+                       AxWin4_DrawControl(gpTaskbar_Window, x, TASKBAR_BORDER, winbutton_size, active_height, AXWIN4_CTL_BUTTON, 0);
+               }
+       }
+       
+       // Clock
+       {
+               char timestr[5];
+               time_t  rawtime;
+               time(&rawtime);
+               strftime(timestr, 5, "%H%M", localtime(&rawtime));
+               //AxWin4_DrawControl(gpTaskbar_Window, clock_start_x, TASKBAR_BORDER, TASKBAR_CLOCKSIZE, active_height, AXWIN4_CTL_BOX);
+               
+               AxWin4_DrawText(gpTaskbar_Window, clock_start_x, TASKBAR_BORDER, TASKBAR_CLOCKSIZE, active_height, 0, timestr);
+       }
+       
+       AxWin4_DamageRect(gpTaskbar_Window, 0, 0, w, h);
+}
+

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