Usermode/ATE - Smaller default window
[tpg/acess2.git] / Usermode / Applications / gui_ate_src / main.c
1 /*
2  * Acess Text Editor (ATE)
3  * - By John Hodge (thePowersGang)
4  *
5  * main.c
6  * - Core
7  */
8 #include <axwin3/axwin.h>
9 #include <axwin3/widget.h>
10 #include <axwin3/menu.h>
11 #include <axwin3/richtext.h>
12 #include <stdio.h>
13 #include "strings.h"
14
15 // === PROTOTYPES ===
16  int    main(int argc, char *argv[]);
17  int    TextArea_KeyHandler(tHWND Window, int bPress, uint32_t KeySym, uint32_t Translated);
18  int    TextArea_MouseHandler(tHWND Window, int bPress, int Button, int Row, int Col);
19 void    add_toolbar_button(tAxWin3_Widget *Toolbar, const char *Ident, tAxWin3_Widget_FireCb Callback);
20  int    Toolbar_New(tAxWin3_Widget *Widget);
21  int    Toolbar_Open(tAxWin3_Widget *Widget);
22  int    Toolbar_Save(tAxWin3_Widget *Widget);
23  int    Toolbar_Close(tAxWin3_Widget *Widget);
24
25 // === GLOBALS ===
26 tHWND   gMainWindow;
27 tAxWin3_Widget  *gMainWindow_Root;
28 tHWND   gMainWindow_MenuBar;
29 tAxWin3_Widget  *gMainWindow_Toolbar;
30 tHWND   gMainWindow_TextArea;
31
32 // === CODE ===
33 int main(int argc, char *argv[])
34 {
35         AxWin3_Connect(NULL);
36         
37         // --- Build up window
38         gMainWindow = AxWin3_Widget_CreateWindow(NULL, 500, 400, ELEFLAG_VERTICAL);
39         AxWin3_SetWindowTitle(gMainWindow, "Acess Text Editor");        // TODO: Update title with other info
40         gMainWindow_Root = AxWin3_Widget_GetRoot(gMainWindow);
41
42         //gMainWindow_MenuBar = AxWin3_Menu_Create(gMainWindow);
43         //AxWin3_Widget_AddWidget_SubWindow(gMainWindow_Root, gMainWindow_MenuBar);
44         // TODO: Populate menu  
45
46         // Create toolbar
47         gMainWindow_Toolbar = AxWin3_Widget_AddWidget(gMainWindow_Root,
48                 ELETYPE_TOOLBAR, ELEFLAG_NOSTRETCH, "Toolbar");
49         add_toolbar_button(gMainWindow_Toolbar, "BtnNew", Toolbar_New);
50         add_toolbar_button(gMainWindow_Toolbar, "BtnOpen", Toolbar_Open);
51         add_toolbar_button(gMainWindow_Toolbar, "BtnSave", Toolbar_Save);
52         add_toolbar_button(gMainWindow_Toolbar, "BtnClose", Toolbar_Close);
53         AxWin3_Widget_AddWidget(gMainWindow_Toolbar, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "");
54         add_toolbar_button(gMainWindow_Toolbar, "BtnUndo", NULL);
55         add_toolbar_button(gMainWindow_Toolbar, "BtnRedo", NULL);
56         AxWin3_Widget_AddWidget(gMainWindow_Toolbar, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "");
57         add_toolbar_button(gMainWindow_Toolbar, "BtnCut", NULL);
58         add_toolbar_button(gMainWindow_Toolbar, "BtnCopy", NULL);
59         add_toolbar_button(gMainWindow_Toolbar, "BtnPaste", NULL);
60         AxWin3_Widget_AddWidget(gMainWindow_Toolbar, ELETYPE_SPACER, ELEFLAG_NOSTRETCH, "");
61         add_toolbar_button(gMainWindow_Toolbar, "BtnSearch", NULL);
62         add_toolbar_button(gMainWindow_Toolbar, "BtnReplace", NULL);
63
64         // TODO: Tab control?   
65
66         gMainWindow_TextArea = AxWin3_RichText_CreateWindow(gMainWindow, 0);
67         AxWin3_Widget_AddWidget_SubWindow(gMainWindow_Root, gMainWindow_TextArea, 0, "TextArea");
68         AxWin3_RichText_SetKeyHandler   (gMainWindow_TextArea, TextArea_KeyHandler);
69         AxWin3_RichText_SetMouseHandler (gMainWindow_TextArea, TextArea_MouseHandler);
70         AxWin3_RichText_SetBackground   (gMainWindow_TextArea, 0xFFFFFF);
71         AxWin3_RichText_SetDefaultColour(gMainWindow_TextArea, 0x000000);
72         AxWin3_RichText_SetFont         (gMainWindow_TextArea, "#monospace", 10);
73         AxWin3_RichText_SetCursorPos    (gMainWindow_TextArea, 0, 0);
74         AxWin3_RichText_SetCursorType   (gMainWindow_TextArea, AXWIN3_RICHTEXT_CURSOR_VLINE);
75         AxWin3_RichText_SetCursorBlink  (gMainWindow_TextArea, 1);
76
77         // <testing>
78         AxWin3_RichText_SetLineCount(gMainWindow_TextArea, 3);
79         AxWin3_RichText_SendLine(gMainWindow_TextArea, 0, "First line!");
80         AxWin3_RichText_SendLine(gMainWindow_TextArea, 2, "Third line! \x01""ff0000A red");
81         // </testing>
82
83         AxWin3_ShowWindow(gMainWindow_TextArea, 1);
84         // TODO: Status Bar?
85
86         AxWin3_MoveWindow(gMainWindow, 50, 50);
87         AxWin3_ShowWindow(gMainWindow, 1);
88         AxWin3_FocusWindow(gMainWindow);
89         
90         // Main loop
91         AxWin3_MainLoop();
92
93         AxWin3_DestroyWindow(gMainWindow);
94
95         return 0;
96 }
97
98 int TextArea_KeyHandler(tHWND Window, int bPress, uint32_t KeySym, uint32_t Translated)
99 {
100         return 0;
101 }
102
103 int TextArea_MouseHandler(tHWND Window, int bPress, int Button, int Row, int Col)
104 {
105         return 0;
106 }
107
108 void add_toolbar_button(tAxWin3_Widget *Toolbar, const char *Ident, tAxWin3_Widget_FireCb Callback)
109 {
110         tAxWin3_Widget *btn = AxWin3_Widget_AddWidget(Toolbar, ELETYPE_BUTTON, ELEFLAG_NOSTRETCH, Ident);
111         tAxWin3_Widget *txt = AxWin3_Widget_AddWidget(btn, ELETYPE_TEXT, 0, Ident);
112         // TODO: Get image / text using `Ident` as a lookup key
113         AxWin3_Widget_SetText(txt, getstr(Ident));
114         AxWin3_Widget_SetFireHandler(btn, Callback);
115 }
116
117 int Toolbar_New(tAxWin3_Widget *Widget)
118 {
119         return 0;
120 }
121 int Toolbar_Open(tAxWin3_Widget *Widget)
122 {
123         return 0;
124 }
125 int Toolbar_Save(tAxWin3_Widget *Widget)
126 {
127         return 0;
128 }
129 int Toolbar_Close(tAxWin3_Widget *Widget)
130 {
131         AxWin3_StopMainLoop(1);
132         return 0;
133 }
134

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