X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin3_src%2FInterface%2Fmain.c;h=80bf3292e40f751f9f78ef87f3086984d6a42d0f;hb=7c00f2f9205aeb803f0499c9e88c98048830bea6;hp=f56cd699755baa1bac6c1d30e83ffadcb056b210;hpb=1f2e2ea9289e3fa3768172de9fad129880ed198f;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin3_src/Interface/main.c b/Usermode/Applications/axwin3_src/Interface/main.c index f56cd699..80bf3292 100644 --- a/Usermode/Applications/axwin3_src/Interface/main.c +++ b/Usermode/Applications/axwin3_src/Interface/main.c @@ -5,21 +5,49 @@ * main.c * - Interface core */ +#include #include #include +#include +#include + +#define SIDEBAR_WIDTH 40 +#define RUN_WIDTH 200 +#define RUN_HEIGHT 60 + +// === PROTOTYPES === +void create_sidebar(void); +void create_mainmenu(void); +void create_run_dialog(void); // === GLOBALS === tHWND gSidebar; +tAxWin3_Widget *gSidebarRoot; +tHWND gSystemMenu; +tHWND gRunDialog; +tAxWin3_Widget *gRunInput; + int giScreenWidth; + int giScreenHeight; // === CODE === +int systembutton_fire(tAxWin3_Widget *Widget) +{ + _SysDebug("SystemButton pressed"); + AxWin3_Menu_ShowAt(gSystemMenu, SIDEBAR_WIDTH, 0); + return 0; +} + int main(int argc, char *argv[]) { // Connect to AxWin3 Server AxWin3_Connect(NULL); + + // TODO: Register to be told when the display layout changes + AxWin3_GetDisplayDims(0, NULL, NULL, &giScreenWidth, &giScreenHeight); - // Create sidebar - // TODO: Use the widget library instead - gSidebar = AxWin3_CreateWindow(NULL, "widget", 0, 0, NULL); + create_sidebar(); + create_mainmenu(); + create_run_dialog(); // Idle loop AxWin3_MainLoop(); @@ -27,3 +55,116 @@ int main(int argc, char *argv[]) return 0; } +void create_sidebar(void) +{ + tAxWin3_Widget *btn, *txt, *ele; + + // Create sidebar + gSidebar = AxWin3_Widget_CreateWindow(NULL, SIDEBAR_WIDTH, giScreenHeight, ELEFLAG_VERTICAL); + AxWin3_MoveWindow(gSidebar, 0, 0); + gSidebarRoot = AxWin3_Widget_GetRoot(gSidebar); + + // - Main menu + btn = AxWin3_Widget_AddWidget(gSidebarRoot, ELETYPE_BUTTON, ELEFLAG_NOSTRETCH, "SystemButton"); + AxWin3_Widget_SetSize(btn, SIDEBAR_WIDTH); + AxWin3_Widget_SetFireHandler(btn, systembutton_fire); + txt = AxWin3_Widget_AddWidget(btn, ELETYPE_IMAGE, 0, "SystemLogo"); + AxWin3_Widget_SetText(txt, "file:///Acess/Apps/AxWin/3.0/AcessLogoSmall.sif"); + + // - Plain
style spacer + ele = AxWin3_Widget_AddWidget(gSidebarRoot, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "SideBar Spacer Top"); + AxWin3_Widget_SetSize(ele, 4); + + // TODO: Program list + ele = AxWin3_Widget_AddWidget(gSidebarRoot, ELETYPE_BOX, ELEFLAG_VERTICAL, "ProgramList"); + + // - Plain
style spacer + ele = AxWin3_Widget_AddWidget(gSidebarRoot, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "SideBar Spacer Top"); + AxWin3_Widget_SetSize(ele, 4); + + // > Version/Time + ele = AxWin3_Widget_AddWidget(gSidebarRoot, + ELETYPE_BOX, + ELEFLAG_VERTICAL|ELEFLAG_ALIGN_CENTER|ELEFLAG_NOSTRETCH, + "Version/Time" + ); + txt = AxWin3_Widget_AddWidget(ele, ELETYPE_TEXT, ELEFLAG_NOSTRETCH, "Version String"); + AxWin3_Widget_SetSize(txt, 20); + AxWin3_Widget_SetText(txt, "3.0"); + + // Turn off decorations + AxWin3_DecorateWindow(gSidebar, 0); + + // Show! + AxWin3_ShowWindow(gSidebar, 1); + +} + +void mainmenu_app_textedit(void *unused) +{ + _SysDebug("TODO: Launch text editor"); +} + +void mainmenu_app_terminal(void *unused) +{ + _SysDebug("TODO: Launch terminal emulator"); +} + +void mainmenu_run_dialog(void *unused) +{ + AxWin3_ShowWindow(gRunDialog, 1); +} + +void create_mainmenu(void) +{ + gSystemMenu = AxWin3_Menu_Create(NULL); + + AxWin3_Menu_AddItem(gSystemMenu, "Text &Editor\tWin+E", mainmenu_app_textedit, NULL, 0, NULL); + AxWin3_Menu_AddItem(gSystemMenu, "&Terminal Emulator\tWin+T", mainmenu_app_terminal, NULL, 0, NULL); + AxWin3_Menu_AddItem(gSystemMenu, NULL, NULL, NULL, 0, NULL); + AxWin3_Menu_AddItem(gSystemMenu, "&Run\tWin+R", mainmenu_run_dialog, NULL, 0, NULL); +} + +int run_dorun(tAxWin3_Widget *unused) +{ +// char *cmd = AxWin3_Widget_GetText(gRunInput); + AxWin3_ShowWindow(gRunDialog, 0); + return 0; +} + +int run_close(tAxWin3_Widget *unused) +{ + AxWin3_ShowWindow(gRunDialog, 0); + return 0; +} + +tAxWin3_Widget *make_textbutton(tAxWin3_Widget *Parent, const char *Label, tAxWin3_Widget_FireCb handler) +{ + tAxWin3_Widget *ret, *txt; + ret = AxWin3_Widget_AddWidget(Parent, ELETYPE_BUTTON, ELEFLAG_ALIGN_CENTER, "_btn"); + AxWin3_Widget_SetFireHandler(ret, handler); + AxWin3_Widget_AddWidget(ret, ELETYPE_NONE, 0, "_spacer1"); + txt = AxWin3_Widget_AddWidget(ret, ELETYPE_TEXT, ELEFLAG_NOSTRETCH|ELEFLAG_NOEXPAND, "_txt"); + AxWin3_Widget_SetText(txt, Label); + AxWin3_Widget_AddWidget(ret, ELETYPE_NONE, 0, "_spacer2"); + return ret; +} + +void create_run_dialog(void) +{ + tAxWin3_Widget *root, *box; + + gRunDialog = AxWin3_Widget_CreateWindow(NULL, RUN_WIDTH, RUN_HEIGHT, ELEFLAG_VERTICAL); + AxWin3_SetWindowTitle(gRunDialog, "Run Program..."); + AxWin3_MoveWindow(gRunDialog, giScreenWidth/2-RUN_WIDTH/2, giScreenHeight/2-RUN_HEIGHT/2); + + root = AxWin3_Widget_GetRoot(gRunDialog); + + gRunInput = AxWin3_Widget_AddWidget(root, ELETYPE_TEXTINPUT, ELEFLAG_NOSTRETCH, "Input"); + AxWin3_Widget_SetFireHandler(gRunInput, run_dorun); + + box = AxWin3_Widget_AddWidget(root, ELETYPE_BOX, ELEFLAG_ALIGN_CENTER, "Button Area"); + make_textbutton(box, "Ok", run_dorun); + make_textbutton(box, "Cancel", run_close); +} +