source: tags/arb-6.0-rc3/WINDOW/aw_root.hxx

Last change on this file was 12267, checked in by westram, 10 years ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.2 KB
Line 
1#ifndef AW_ROOT_HXX
2#define AW_ROOT_HXX
3
4#ifndef ARBTOOLS_H
5#include <arbtools.h>
6#endif
7#ifndef ARB_ERROR_H
8#include <arb_error.h>
9#endif
10#ifndef CB_H
11#include <cb.h>
12#endif
13#ifndef ATTRIBUTES_H
14#include <attributes.h>
15#endif
16#ifndef AW_BASE_HXX
17#include "aw_base.hxx" // @@@ remove later
18#endif
19
20#ifndef aw_assert
21#define aw_assert(bed) arb_assert(bed)
22#endif
23
24#if defined(ASSERTION_USED)
25#define legal_mask(m) (((m)&AWM_ALL) == (m))
26#endif // ASSERTION_USED
27
28typedef char *AW_error;
29
30// asynchronous messages:
31extern char AW_ERROR_BUFFER[1024];
32
33void aw_set_local_message(); // no message window, AWAR_ERROR_MESSAGES instead (used by EDIT4)
34
35// Read a string from the user :
36char *aw_input(const char *title, const char *prompt, const char *default_input);
37char *aw_input(const char *prompt, const char *default_input);
38inline char *aw_input(const char *prompt) { return aw_input(prompt, NULL); }
39
40char *aw_string_selection     (const char *title, const char *prompt, const char *default_value, const char *value_list, const char *buttons);
41char *aw_string_selection2awar(const char *title, const char *prompt, const char *awar_name,     const char *value_list, const char *buttons);
42
43int aw_string_selection_button();   // returns index of last selected button (destroyed by aw_string_selection and aw_input)
44
45char *aw_file_selection(const char *title, const char *dir, const char *def_name, const char *suffix);
46
47class  AW_root_Motif;
48class  AW_awar;
49struct AW_buttons_struct;
50class  AW_root_cblist;
51struct GB_HASH;
52class  AW_cb;
53
54enum AW_ProcessEventType {
55    NO_EVENT     = 0,
56    KEY_PRESSED  = 2,
57    KEY_RELEASED = 3
58};
59
60void aw_initstatus();
61
62// ---------------------------
63//      UserActionTracker
64
65class UserActionTracker : virtual Noncopyable {
66    bool tracking;
67
68protected:
69    void set_tracking(bool track) { tracking = track; }
70
71public:
72    UserActionTracker() : tracking(false) {}
73    virtual ~UserActionTracker() {}
74
75    bool is_tracking() const { return tracking; }
76
77    virtual void track_action(const char *action_id) = 0;
78    virtual void track_awar_change(AW_awar *awar)    = 0;
79    virtual bool is_replaceable() const = 0;
80};
81class NullTracker : public UserActionTracker {
82public:
83    void track_action(const char */*action_id*/) OVERRIDE {}
84    void track_awar_change(AW_awar */*awar*/) OVERRIDE {}
85    bool is_replaceable() const OVERRIDE { return true; }
86};
87
88// -----------------
89//      AW_root
90
91class AW_root : virtual Noncopyable {
92    AW_default         application_database;
93    AW_buttons_struct *button_sens_list;
94
95    UserActionTracker *tracker;
96
97    void create_colormap();
98
99    void init_variables(AW_default database);
100    void exit_variables();
101
102    void init_root(const char *programname, bool no_exit);
103    void exit_root();
104    AW_default load_properties(const char *default_name);
105
106public:
107    static AW_root *SINGLETON;
108
109    AW_root_Motif *prvt;                            // Do not use !!!
110    bool           value_changed;
111    Widget         changer_of_variable;
112    int            y_correction_for_input_labels;
113    AW_active      global_mask;
114    bool           focus_follows_mouse;
115    GB_HASH       *hash_table_for_variables;
116    bool           variable_set_by_toggle_field;
117    int            number_of_toggle_fields;
118    int            number_of_option_menus;
119    char          *program_name;
120
121    bool            disable_callbacks;
122    AW_window      *current_modal_window;
123    AW_root_cblist *focus_callback_list;
124
125    int  active_windows;
126    void window_show();         // a window is set to screen
127    void window_hide(AW_window *aww);
128
129    // the read only public section:
130    short       font_width;
131    short       font_height;
132    short       font_ascent;
133    GB_HASH    *hash_for_windows;
134
135    // the real public section:
136    AW_root(const char *propertyFile, const char *program, bool no_exit, UserActionTracker *user_tracker, int* argc, char*** argv);
137#if defined(UNIT_TESTS) // UT_DIFF
138    AW_root(const char *properties); // fake-root for unit-tests (allows access to awar-subsystem)
139#endif
140    ~AW_root();
141
142    void setUserActionTracker(UserActionTracker *user_tracker);
143    UserActionTracker *getTracker() { return tracker; }
144
145    enum { AW_MONO_COLOR, AW_RGB_COLOR }    color_mode;
146
147    void main_loop();
148
149    void                process_events();           // might block
150    void                process_pending_events();   // non-blocking
151    AW_ProcessEventType peek_key_event(AW_window *);
152
153    void add_timed_callback(int ms, const TimedCallback& tcb);
154    void add_timed_callback_never_disabled(int ms, const TimedCallback& tcb);
155
156    bool is_focus_callback(AW_RCB fcb) const;
157
158    AW_awar *awar(const char *awar);
159    AW_awar *awar_no_error(const char *awar);
160
161    void dont_save_awars_with_default_value(GBDATA *gb_db);
162
163    AW_awar *awar_string (const char *var_name, const char *default_value = "", AW_default default_file = AW_ROOT_DEFAULT);
164    AW_awar *awar_int    (const char *var_name, long default_value = 0,         AW_default default_file = AW_ROOT_DEFAULT);
165    AW_awar *awar_float  (const char *var_name, float default_value = 0.0,      AW_default default_file = AW_ROOT_DEFAULT);
166    AW_awar *awar_pointer(const char *var_name, void *default_value = NULL,     AW_default default_file = AW_ROOT_DEFAULT);
167
168    AW_awar *label_is_awar(const char *label); // returns awar, if label refers to one (used by buttons, etc.)
169
170    void unlink_awars_from_DB(GBDATA *gb_main);     // use before calling GB_close for 'gb_main', if you have AWARs in DB
171
172    AW_default check_properties(AW_default aw_props) {
173        return aw_props ? aw_props : application_database;
174    }
175
176    GB_ERROR save_properties(const char *filename = NULL) __ATTR__USERESULT;
177
178    // Control sensitivity of buttons etc.:
179    void apply_sensitivity(AW_active mask);
180    void apply_focus_policy(bool follow_mouse);
181    void make_sensitive(Widget w, AW_active mask);
182    bool remove_button_from_sens_list(Widget button);
183
184    void track_action(const char *action_id) { tracker->track_action(action_id); }
185    void track_awar_change(AW_awar *changed_awar) { tracker->track_awar_change(changed_awar); }
186
187    bool is_tracking() const { return tracker->is_tracking(); }
188    UserActionTracker *get_tracker() { return tracker; }
189
190    void define_remote_command(class AW_cb *cbs);
191    AW_cb *search_remote_command(const char *action);
192
193#if defined(DEBUG)
194    size_t callallcallbacks(int mode);
195    class ConstStrArray *get_action_ids();
196#endif // DEBUG
197};
198
199const char *AW_font_2_ascii(AW_font font_nr);
200int         AW_font_2_xfig(AW_font font_nr);
201
202bool ARB_global_awars_initialized();
203bool ARB_in_expert_mode(AW_root *awr);
204inline bool ARB_in_novice_mode(AW_root *awr) { return !ARB_in_expert_mode(awr); }
205
206void ARB_declare_global_awars(AW_root *aw_root, AW_default aw_def);
207GB_ERROR ARB_bind_global_awars(GBDATA *gb_main) __ATTR__USERESULT;
208
209__ATTR__USERESULT_TODO inline GB_ERROR ARB_init_global_awars(AW_root *aw_root, AW_default aw_def, GBDATA *gb_main) {
210    ARB_declare_global_awars(aw_root, aw_def);
211    return ARB_bind_global_awars(gb_main);
212}
213
214inline AW_default get_AW_ROOT_DEFAULT() { return AW_root::SINGLETON->check_properties(NULL); }
215
216void AW_system(AW_window *aww, const char *command, const char *auto_help_file);
217
218#else
219#error aw_root.hxx included twice
220#endif
221
222
Note: See TracBrowser for help on using the repository browser.