chiark / gitweb /
Import upstream version 5.3.
[mup] / mup / mupmate / Main.H
1 /* Copyright (c) 2006 by Arkkra Enterprises */
2 /* All rights reserved */
3
4 #ifndef _MAIN_H_
5 #define _MAIN_H_
6
7 // Header file for the main Mupmate window, containing toolbar and editor.
8
9 #include <FL/Fl_Widget.H>
10 #include <FL/Fl_Double_Window.H>
11 #include <FL/Fl_Menu_Bar.H>
12 #include <FL/Fl_Menu_Item.H>
13 #include <FL/Fl_Text_Buffer.H>
14 #include <FL/Fl_Text_Editor.H>
15
16 #include "File.H"
17 #include "Edit.H"
18 #include "Run.H"
19 #include "Config.H"
20 #include "Help.H"
21
22 class Main;
23
24 //---------- class to show Mup license and get user's agreement
25
26 class License : public Fl_Double_Window {
27 public:
28         License(Main * m_p, const char * magic);
29         ~License(void);
30
31         // Callbacks
32         static void IAgree_cb(Fl_Widget *, void * data);
33         static void Cancel_cb(Fl_Widget *, void * data);
34         static void Continue_cb(Fl_Widget *, void * data);
35
36 private:
37         // Callbacks
38         void IAgree(void);
39         void Cancel(void);
40         void Continue(void);
41
42         // Widgets
43         Fl_Text_Display * text_p;       // The text of the license
44         Fl_Return_Button * i_agree_p;
45         Fl_Button * cancel_p;
46
47         // Name of file that tells us if user has agreed to license
48         const char * magic_file_name;
49
50         // The main window
51         Main * main_p;
52 };
53
54
55
56 // Class for main window, with editor and toolbar
57
58 class Main : public Fl_Double_Window {
59
60 friend class License;
61
62 public:
63         Main(const char * title);
64         ~Main();
65
66         // Callbacks
67         static void modify_cb(int, int, int, int, const char *, void * data);
68         static void font_change_cb(void * data, Fl_Font font, unsigned char size);
69         static void atclose_cb(Fl_Widget *, void * data);
70
71         // We don't want Escape to cause main window to close,
72         // and need to handle Paste ungraying specially.
73         // This event handler takes care of those things.
74         static int handle_events(int);
75
76         // Show user hints the first time they bring up Mupmate
77         void hints(void);
78
79         // Reset state information when user opens a new file.
80         void begin_new_file();
81
82         // Pointers to the classes for each toolbar menu item widgets
83         File * filemenu_p;
84         Edit * editmenu_p;
85         Config * configmenu_p;
86         Help * helpmenu_p;
87         Run * runmenu_p;
88
89         // Clean up all windows 
90         static void clean_exit(int exitval = 0);
91
92 private:
93         // called when input text is modified
94         void modify(void);
95
96         // Sets font/size of editor
97         void font_change(Fl_Font font, unsigned char size);
98
99         // Make window manager close like Exit
100         void atclose(void);
101
102         // Cursor blinker
103         static void blinker(void *);
104
105         // Ponters to the top level widgets
106         Fl_Menu_Bar * toolbar_p;
107         Fl_Text_Editor * editor_p;
108
109         // For font/size change notification
110         Font_change_registration * font_change_reg_p;
111
112         // True if there is a selected area in editor window
113         bool have_selection;
114
115         // True if something in clipboard
116         bool can_paste;
117
118         // For knowing when to gray out Undo menu item
119         bool undo_active;
120         bool undo_active_on_next_change;
121         int prev_bufflength;
122
123         // Current cursor on/off state, for blinker
124         int cursor_state;
125
126         // We currently only have one main window, but code is
127         // general to allow multiple windows. We keep a linked list
128         // of all the windows.
129         static Main * list_p;
130         Main * next;
131 };
132
133 #endif