Merge branch 'master' of git://localhost/acess2
[tpg/acess2.git] / Usermode / Applications / axwin3_src / Interface / main.c
1 /*
2  * Acess2 GUI v3 User Interface
3  * - By John Hodge (thePowersGang)
4  *
5  * main.c
6  * - Interface core
7  */
8 #include <acess/sys.h>
9 #include <stdlib.h>
10 #include <axwin3/axwin.h>
11 #include <axwin3/widget.h>
12 #include <axwin3/menu.h>
13
14 #define SIDEBAR_WIDTH   40
15 #define RUN_WIDTH       200
16 #define RUN_HEIGHT      60
17
18 // === PROTOTYPES ===
19 void    create_sidebar(void);
20 void    create_mainmenu(void);
21 void    create_run_dialog(void);
22 void    mainmenu_run_dialog(void *unused);
23
24 // === GLOBALS ===
25 tHWND   gSidebar;
26 tAxWin3_Widget  *gSidebarRoot;
27 tHWND   gSystemMenu;
28 tHWND   gRunDialog;
29 tAxWin3_Widget  *gRunInput;
30  int    giScreenWidth;
31  int    giScreenHeight;
32
33 // === CODE ===
34 int systembutton_fire(tAxWin3_Widget *Widget)
35 {
36         _SysDebug("SystemButton pressed");
37         AxWin3_Menu_ShowAt(gSystemMenu, SIDEBAR_WIDTH, 0);
38         return 0;
39 }
40
41 int main(int argc, char *argv[])
42 {
43         // Connect to AxWin3 Server
44         AxWin3_Connect(NULL);
45
46         // TODO: Register to be told when the display layout changes
47         AxWin3_GetDisplayDims(0, NULL, NULL, &giScreenWidth, &giScreenHeight);
48         
49         create_sidebar();
50         create_mainmenu();
51         create_run_dialog();
52         
53         AxWin3_RegisterAction(gSidebar, "Interface>Run", (tAxWin3_HotkeyCallback)mainmenu_run_dialog);
54 //      AxWin3_RegisterAction(gSidebar, "Interface>Terminal", mainmenu_app_terminal);
55 //      AxWin3_RegisterAction(gSidebar, "Interface>TextEdit", mainmenu_app_textedit);
56
57         // Idle loop
58         AxWin3_MainLoop();
59         
60         return 0;
61 }
62
63 void create_sidebar(void)
64 {
65         tAxWin3_Widget  *btn, *txt, *ele;
66
67         // Create sidebar
68         gSidebar = AxWin3_Widget_CreateWindow(NULL, SIDEBAR_WIDTH, giScreenHeight, ELEFLAG_VERTICAL);
69         AxWin3_MoveWindow(gSidebar, 0, 0);
70         gSidebarRoot = AxWin3_Widget_GetRoot(gSidebar); 
71
72         // - Main menu
73         btn = AxWin3_Widget_AddWidget(gSidebarRoot, ELETYPE_BUTTON, ELEFLAG_NOSTRETCH, "SystemButton");
74         AxWin3_Widget_SetSize(btn, SIDEBAR_WIDTH);
75         AxWin3_Widget_SetFireHandler(btn, systembutton_fire);
76         txt = AxWin3_Widget_AddWidget(btn, ELETYPE_IMAGE, 0, "SystemLogo");
77         AxWin3_Widget_SetText(txt, "file:///Acess/Apps/AxWin/3.0/AcessLogoSmall.sif");
78         
79         // - Plain <hr/> style spacer
80         ele = AxWin3_Widget_AddWidget(gSidebarRoot, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "SideBar Spacer Top");
81         AxWin3_Widget_SetSize(ele, 4);
82
83         // TODO: Program list
84         ele = AxWin3_Widget_AddWidget(gSidebarRoot, ELETYPE_BOX, ELEFLAG_VERTICAL, "ProgramList");
85
86         // - Plain <hr/> style spacer
87         ele = AxWin3_Widget_AddWidget(gSidebarRoot, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "SideBar Spacer Top");
88         AxWin3_Widget_SetSize(ele, 4);
89
90         // > Version/Time
91         ele = AxWin3_Widget_AddWidget(gSidebarRoot,
92                 ELETYPE_BOX,
93                 ELEFLAG_VERTICAL|ELEFLAG_ALIGN_CENTER|ELEFLAG_NOSTRETCH,
94                 "Version/Time"
95                 );
96         txt = AxWin3_Widget_AddWidget(ele, ELETYPE_TEXT, ELEFLAG_NOSTRETCH, "Version String");
97         AxWin3_Widget_SetSize(txt, 20);
98         AxWin3_Widget_SetText(txt, "3.0");
99
100         // Turn off decorations
101         AxWin3_DecorateWindow(gSidebar, 0);
102
103         // Show!
104         AxWin3_ShowWindow(gSidebar, 1); 
105         
106 }
107
108 void mainmenu_app_textedit(void *unused)
109 {
110         _SysDebug("TODO: Launch text editor");
111 }
112
113 void mainmenu_app_terminal(void *unused)
114 {
115         _SysDebug("TODO: Launch terminal emulator");
116 }
117
118 void mainmenu_run_dialog(void *unused)
119 {
120         AxWin3_ShowWindow(gRunDialog, 1);
121         AxWin3_FocusWindow(gRunDialog);
122 }
123
124 void create_mainmenu(void)
125 {
126         gSystemMenu = AxWin3_Menu_Create(NULL);
127         
128         AxWin3_Menu_AddItem(gSystemMenu, "Text &Editor\tWin+E", mainmenu_app_textedit, NULL, 0, NULL);
129         AxWin3_Menu_AddItem(gSystemMenu, "&Terminal Emulator\tWin+T", mainmenu_app_terminal, NULL, 0, NULL);
130         AxWin3_Menu_AddItem(gSystemMenu, NULL, NULL, NULL, 0, NULL);
131         AxWin3_Menu_AddItem(gSystemMenu, "&Run\tWin+R", mainmenu_run_dialog, NULL, 0, NULL);
132 }
133
134 // --------------------------------------------------------------------
135 // "Run" Dialog box
136 // --------------------------------------------------------------------
137 int run_dorun(tAxWin3_Widget *unused)
138 {
139         _SysDebug("DoRun pressed");
140         char *cmd = AxWin3_Widget_GetText(gRunInput);
141         _SysDebug("Command string '%s'", cmd);
142         AxWin3_ShowWindow(gRunDialog, 0);
143         return 0;
144 }
145
146 int run_close(tAxWin3_Widget *unused)
147 {
148         _SysDebug("Run diaglog closed");
149         AxWin3_ShowWindow(gRunDialog, 0);
150         return 0;
151 }
152
153 tAxWin3_Widget *make_textbutton(tAxWin3_Widget *Parent, const char *Label, tAxWin3_Widget_FireCb handler)
154 {
155         tAxWin3_Widget  *ret, *txt;
156         ret = AxWin3_Widget_AddWidget(Parent, ELETYPE_BUTTON, ELEFLAG_ALIGN_CENTER, "_btn");
157         AxWin3_Widget_SetFireHandler(ret, handler);
158         AxWin3_Widget_AddWidget(ret, ELETYPE_NONE, 0, "_spacer1");
159         txt = AxWin3_Widget_AddWidget(ret, ELETYPE_TEXT, ELEFLAG_NOSTRETCH|ELEFLAG_NOEXPAND, "_txt");
160         AxWin3_Widget_SetText(txt, Label);
161         AxWin3_Widget_AddWidget(ret, ELETYPE_NONE, 0, "_spacer2");
162         return ret;
163 }
164
165 void create_run_dialog(void)
166 {
167         tAxWin3_Widget  *root, *box;
168         
169         gRunDialog = AxWin3_Widget_CreateWindow(NULL, RUN_WIDTH, RUN_HEIGHT, ELEFLAG_VERTICAL);
170         AxWin3_SetWindowTitle(gRunDialog, "Run Program...");
171         AxWin3_MoveWindow(gRunDialog, giScreenWidth/2-RUN_WIDTH/2, giScreenHeight/2-RUN_HEIGHT/2);
172
173         root = AxWin3_Widget_GetRoot(gRunDialog);
174
175         gRunInput = AxWin3_Widget_AddWidget(root, ELETYPE_TEXTINPUT, ELEFLAG_NOSTRETCH, "Input");
176         AxWin3_Widget_SetFireHandler(gRunInput, run_dorun);
177         
178         box = AxWin3_Widget_AddWidget(root, ELETYPE_BOX, ELEFLAG_ALIGN_CENTER, "Button Area");
179         make_textbutton(box, "Ok", run_dorun);
180         make_textbutton(box, "Cancel", run_close);
181 }
182

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