source: branches/port5/AWT/awt_canvas.hxx

Last change on this file was 5901, checked in by westram, 15 years ago
  • AW_BOOL → bool
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.7 KB
Line 
1#ifndef AWT_CANVAS_HXX
2#define AWT_CANVAS_HXX
3
4#ifndef AW_ROOT_HXX
5#include <aw_root.hxx>
6#endif
7#ifndef AW_POSITION_HXX
8#include <aw_position.hxx>
9#endif
10#ifndef AW_WINDOW_HXX
11#include <aw_window.hxx>
12#endif
13
14class AWT_canvas;
15class AW_device;
16class AW_clicked_line;
17class AW_clicked_text;
18
19typedef enum {
20    AWT_MODE_NONE,
21    AWT_MODE_SELECT,
22    AWT_MODE_MARK,
23    AWT_MODE_GROUP,
24    AWT_MODE_ZOOM,          // no command
25    AWT_MODE_LZOOM,
26    AWT_MODE_MOD, // species info
27    AWT_MODE_WWW,
28    AWT_MODE_LINE,
29    AWT_MODE_ROT,
30    AWT_MODE_SPREAD,
31    AWT_MODE_SWAP,
32    AWT_MODE_LENGTH,
33    AWT_MODE_SWAP2,
34    AWT_MODE_MOVE,
35    AWT_MODE_SETROOT,
36    AWT_MODE_RESET,
37
38    AWT_MODE_KERNINGHAN,
39    AWT_MODE_NNI,
40    AWT_MODE_OPTIMIZE,
41    AWT_MODE_PROINFO,
42    AWT_MODE_STRETCH
43} AWT_COMMAND_MODE;
44
45class AWT_graphic_exports {
46public:
47    unsigned int zoom_reset:1;
48    unsigned int resize:1;
49    unsigned int refresh:1;
50    unsigned int save:1;
51    unsigned int structure_change:1; // maybe useless
52    unsigned int dont_fit_x:1;
53    unsigned int dont_fit_y:1;
54    unsigned int dont_fit_larger:1; // if xsize>ysize -> dont_fit_x (otherwise dont_fit_y)
55    unsigned int dont_scroll:1;
56
57    void init(void); // like clear, but resets fit/scroll state
58    void clear(void);
59
60    short left_offset;
61    short right_offset;
62    short top_offset;
63    short bottom_offset;
64};
65
66class AWT_graphic {
67    friend class AWT_canvas;
68protected:
69    AW_rectangle extends;
70    int drag_gc;
71public:
72    AWT_graphic_exports exports;
73
74    AWT_graphic();
75    virtual ~AWT_graphic();
76   
77    // pure virtual interface (methods implemented by AWT_nonDB_graphic)
78
79    virtual GB_ERROR load(GBDATA *gb_main, const char *name, AW_CL cd1, AW_CL cd2) = 0;
80    virtual GB_ERROR save(GBDATA *gb_main, const char *name, AW_CL cd1, AW_CL cd2) = 0;
81    virtual int  check_update(GBDATA *gb_main)                                     = 0; // check whether anything changed
82    virtual void update(GBDATA *gb_main)                                           = 0; // mark the database
83
84    // pure virtual interface (rest)
85   
86    virtual void show(AW_device *device) = 0;
87
88    virtual void info(AW_device *device, AW_pos x, AW_pos y, AW_clicked_line *cl, AW_clicked_text *ct) = 0;     /* double click */
89    virtual AW_gc_manager init_devices(AW_window *, AW_device *, AWT_canvas *ntw, AW_CL cd2) = 0;
90            /* init gcs, if any gc is changed you may call
91                AWT_expose_cb(aw_window, ntw, cd2);
92                or AWT_resize_cb(aw_window, ntw, cd2);
93                The function may return a pointer to a preset window */
94
95    // implemented interface (most are dummies doing nothing):
96
97    virtual void push_transaction(GBDATA *gb_main);
98    virtual void pop_transaction(GBDATA *gb_main);
99
100    virtual void command(AW_device *device, AWT_COMMAND_MODE cmd,
101                         int button, AW_key_mod key_modifier, AW_key_code key_code, char key_char,
102                         AW_event_type type, AW_pos x, AW_pos y,
103                         AW_clicked_line *cl, AW_clicked_text *ct);
104    virtual void text(AW_device *device, char *text);
105};
106
107// a partly implementation of AWT_graphic
108class AWT_nonDB_graphic : public AWT_graphic {
109public:
110    AWT_nonDB_graphic() {}
111    virtual ~AWT_nonDB_graphic();
112
113    // dummy functions, only spittings out warnings:
114    GB_ERROR load(GBDATA *gb_main, const char *name, AW_CL cd1, AW_CL cd2) __ATTR__USERESULT;
115    GB_ERROR save(GBDATA *gb_main, const char *name, AW_CL cd1, AW_CL cd2) __ATTR__USERESULT;
116    int  check_update(GBDATA *gb_main);
117    void update(GBDATA *gb_main); 
118};
119
120
121#define EPS               0.0001 /*div zero check*/
122#define AWT_F_ALL         ((AW_active)-1)
123#define CLIP_OVERLAP      15
124#define AWT_CATCH_LINE    50    /*pixel*/
125#define AWT_CATCH_TEXT    5     /*pixel*/
126#define AWT_ZOOM_OUT_STEP 40    /* (pixel) rand um screen */
127#define AWT_MIN_WIDTH     100   /* Minimum center screen (= screen-offset) */
128enum {
129    AWT_M_LEFT   = 1,
130    AWT_M_MIDDLE = 2,
131    AWT_M_RIGHT  = 3
132};
133
134enum {
135    AWT_d_screen = 1
136};
137
138class AWT_canvas {
139public:
140    /** too many callbacks -> public **/
141    /** in fact: private         **/
142    char *user_awar;
143    void init_device(AW_device *device);
144    AW_pos trans_to_fit;
145    AW_pos shift_x_to_fit;
146    AW_pos shift_y_to_fit;
147
148    int old_hor_scroll_pos;
149    int old_vert_scroll_pos;
150    AW_rectangle rect;  // screen coordinates
151    AW_world worldinfo; // real coordinates without transform.
152    AW_world worldsize;
153    int zoom_drag_sx;
154    int zoom_drag_sy;
155    int zoom_drag_ex;
156    int zoom_drag_ey;
157    int drag;
158    AW_clicked_line clicked_line;
159    AW_clicked_text clicked_text;
160
161    void set_scrollbars();
162    void set_dragEndpoint(int x, int y);
163
164    void set_horizontal_scrollbar_position(AW_window *aww, int pos);
165    void set_vertical_scrollbar_position(AW_window *aww, int pos);
166
167
168    /*************  Read only public section : ************/
169    GBDATA      *gb_main;
170    AW_window   *aww;
171    AW_root     *awr;
172    AWT_graphic *tree_disp;
173
174    AW_gc_manager gc_manager;
175    int           drag_gc;
176   
177    AWT_COMMAND_MODE mode;
178
179    /** the real public section **/
180
181    AWT_canvas(GBDATA *gb_main, AW_window *aww, AWT_graphic *awd, AW_gc_manager &gc_manager, const char *user_awar);
182    // gc_manager is the preset window
183
184    void refresh();
185    void recalc_size();         // Calculate the size of the sb
186    void zoom_reset();          // Calculate all
187    void zoom(AW_device *device, bool zoomIn, const AW::Rectangle& wanted_part, const AW::Rectangle& current_part);
188
189    void set_mode(AWT_COMMAND_MODE mo) { mode = mo; }
190
191    void scroll(AW_window *aww, int delta_x, int delta_y, bool dont_update_scrollbars = false);
192    void scroll(AW_window *aw, const AW::Vector& delta, bool dont_update_scrollbars = false) {
193        scroll(aw, int(delta.x()), int(delta.y()), dont_update_scrollbars);
194    }
195};
196
197void AWT_input_event(AW_window *aww, AWT_canvas *ntw, AW_CL cd2);
198void AWT_motion_event(AW_window *aww, AWT_canvas *ntw, AW_CL cd2);
199void AWT_expose_cb(AW_window *dummy,AWT_canvas *ntw, AW_CL cl2);
200void AWT_resize_cb(AW_window *dummy, AWT_canvas *ntw, AW_CL cl2);
201
202#define AWAR_PRINT_TREE                "NT/print/"
203#define AWAR_PRINT_TREE_LANDSCAPE      AWAR_PRINT_TREE "landscape"
204#define AWAR_PRINT_TREE_MAGNIFICATION  AWAR_PRINT_TREE "magnification"
205#define AWAR_PRINT_TREE_CLIP           AWAR_PRINT_TREE "clip"
206#define AWAR_PRINT_TREE_HANDLES        AWAR_PRINT_TREE "handles"
207#define AWAR_PRINT_TREE_COLOR          AWAR_PRINT_TREE "color"
208#define AWAR_PRINT_TREE_DEST           AWAR_PRINT_TREE "dest"
209#define AWAR_PRINT_TREE_PRINTER        AWAR_PRINT_TREE "printer"
210#define AWAR_PRINT_TREE_OVERLAP        AWAR_PRINT_TREE "overlap"
211#define AWAR_PRINT_TREE_OVERLAP_AMOUNT AWAR_PRINT_TREE "amount"
212
213#define AWAR_PRINT_TREE_TMP    "tmp/" AWAR_PRINT_TREE
214#define AWAR_PRINT_TREE_GSIZEX AWAR_PRINT_TREE_TMP "gsizex" // graphic size
215#define AWAR_PRINT_TREE_GSIZEY AWAR_PRINT_TREE_TMP "gsizey"
216#define AWAR_PRINT_TREE_PSIZEX AWAR_PRINT_TREE_TMP "psizex" // print size
217#define AWAR_PRINT_TREE_PSIZEY AWAR_PRINT_TREE_TMP "psizey"
218#define AWAR_PRINT_TREE_SIZEX  AWAR_PRINT_TREE_TMP "sizex" // size in pages
219#define AWAR_PRINT_TREE_SIZEY  AWAR_PRINT_TREE_TMP "sizey"
220#define AWAR_PRINT_TREE_PAGES  AWAR_PRINT_TREE_TMP "pages"
221
222#define AWAR_PRINT_TREE_FILE_BASE   AWAR_PRINT_TREE_TMP "file"
223#define AWAR_PRINT_TREE_FILE_NAME   AWAR_PRINT_TREE_FILE_BASE "/file_name"
224#define AWAR_PRINT_TREE_FILE_DIR    AWAR_PRINT_TREE_FILE_BASE "/directory"
225#define AWAR_PRINT_TREE_FILE_FILTER AWAR_PRINT_TREE_FILE_BASE "/filter"
226
227void AWT_popup_tree_export_window(AW_window *parent_win, AW_CL cl_canvas, AW_CL);
228void AWT_popup_sec_export_window (AW_window *parent_win, AW_CL cl_canvas, AW_CL);
229void AWT_popup_print_window      (AW_window *parent_win, AW_CL cl_canvas, AW_CL);
230
231
232#endif
Note: See TracBrowser for help on using the repository browser.