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

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