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

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