source: tags/cvs_2_svn/EDIT4/ED4_window.cxx

Last change on this file was 5186, checked in by westram, 16 years ago
  • indented + cleaned up
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.2 KB
Line 
1#include <cstdio>
2#include <cstring>
3#include <cstdlib>
4
5#include <arbdb.h>
6#include <aw_root.hxx>
7#include <aw_window.hxx>
8
9#include <ed4_extern.hxx>
10
11#include "ed4_class.hxx"
12#include "ed4_tools.hxx"
13
14int ED4_window::no_of_windows = 0;                  // static variable has to be initialized only once
15
16void ED4_window::reset_all_for_new_config()
17{
18    horizontal_fl = NULL;
19    vertical_fl   = NULL;
20
21    scrolled_rect.scroll_top    = NULL;
22    scrolled_rect.scroll_bottom = NULL;
23    scrolled_rect.scroll_left   = NULL;
24    scrolled_rect.scroll_right  = NULL;
25
26    scrolled_rect.world_x = 0;
27    scrolled_rect.world_y = 0;
28    scrolled_rect.width   = 0;
29    scrolled_rect.height  = 0;
30
31    slider_pos_horizontal = 0;
32    slider_pos_vertical   = 0;
33
34    coords.top_area_x      = 0;
35    coords.top_area_y      = 0;
36    coords.top_area_height = 0;
37
38    coords.middle_area_x = 0;
39    coords.middle_area_y = 0;
40
41    coords.window_width  = 0;
42    coords.window_height = 0;
43   
44    coords.window_upper_clip_point = 0;
45    coords.window_lower_clip_point = 0;
46    coords.window_left_clip_point  = 0;
47    coords.window_right_clip_point = 0;
48
49    ED4_ROOT->aw_root->awar(awar_path_for_cursor)->write_int(0);
50    ED4_ROOT->aw_root->awar(awar_path_for_Ecoli)->write_int(0);
51    ED4_ROOT->aw_root->awar(awar_path_for_basePos)->write_int(0);
52    ED4_ROOT->aw_root->awar(awar_path_for_IUPAC)->write_string(IUPAC_EMPTY);
53    ED4_ROOT->aw_root->awar(awar_path_for_helixNr)->write_string("");
54
55    if (next) next->reset_all_for_new_config();
56}
57
58
59void ED4_window::update_window_coords()
60{
61    AW_pos       x,y;
62    AW_rectangle area_size;
63
64    ED4_ROOT->top_area_man->calc_world_coords( &x, &y );
65
66    coords.top_area_x      = (long) x;
67    coords.top_area_y      = (long) y;
68    coords.top_area_height = (long) ED4_ROOT->top_area_man->extension.size[HEIGHT];
69
70    ED4_ROOT->middle_area_man->calc_world_coords( &x, &y );
71
72    coords.middle_area_x = (long) x;
73    coords.middle_area_y = (long) y;
74
75    aww->_get_area_size (AW_MIDDLE_AREA, &area_size);
76
77    coords.window_width  = area_size.r;
78    coords.window_height = area_size.b;
79   
80    // world coordinates
81    coords.window_upper_clip_point = coords.middle_area_y + aww->slider_pos_vertical; //coordinate of upper clipping point of middle area
82    coords.window_lower_clip_point = coords.window_upper_clip_point + coords.window_height - coords.middle_area_y;
83
84    if (ED4_ROOT->scroll_links.link_for_hor_slider) {
85        ED4_ROOT->scroll_links.link_for_hor_slider->calc_world_coords( &x, &y );
86        coords.window_left_clip_point = (long) x + aww->slider_pos_horizontal;
87        coords.window_right_clip_point = coords.window_left_clip_point + coords.window_width - (long) x;
88    }
89
90#if defined(DEBUG) && 0
91    printf("left %d right %d (xdiff=%d) upper %d lower %d (ydiff=%d) width=%d height=%d\n",
92           coords.window_left_clip_point,
93           coords.window_right_clip_point,
94           coords.window_right_clip_point-coords.window_left_clip_point,
95           coords.window_upper_clip_point,
96           coords.window_lower_clip_point,
97           coords.window_lower_clip_point-coords.window_upper_clip_point,
98           coords.window_width,
99           coords.window_height);
100#endif
101}
102
103
104
105ED4_folding_line* ED4_window::insert_folding_line( AW_pos world_x,
106                                                   AW_pos world_y,
107                                                   AW_pos length,
108                                                   AW_pos dimension,
109                                                   ED4_base *link,
110                                                   ED4_properties prop )
111{
112    ED4_folding_line  *fl, *current_fl, *previous_fl = NULL;
113    AW_pos             x, y;
114    int                rel_pos;
115
116    fl = new ED4_folding_line;
117    fl->link = link;
118
119    if ( link != NULL ) {
120        link->update_info.linked_to_folding_line = 1;
121        link->calc_world_coords( &x, &y );
122        fl->world_pos[X_POS] = x;
123        fl->world_pos[Y_POS] = y;
124
125        if ( prop == ED4_P_VERTICAL ) {
126            fl->length = link->extension.size[HEIGHT];
127        }
128        else {
129            fl->length = link->extension.size[WIDTH];
130        }
131    }
132    else
133    {
134        fl->world_pos[X_POS] = world_x;
135        fl->world_pos[Y_POS] = world_y;
136        fl->length = length;
137    }
138
139    fl->dimension = dimension;
140
141    if ( prop == ED4_P_VERTICAL ) {
142        fl->window_pos[X_POS] = fl->world_pos[X_POS] - dimension;
143        fl->window_pos[Y_POS] = fl->world_pos[Y_POS];
144
145        if ( (current_fl = vertical_fl) == NULL ) {
146            vertical_fl = fl;
147            return ( fl );
148        }
149
150        rel_pos = X_POS;
151    }
152    else {
153        if ( prop == ED4_P_HORIZONTAL ) {
154            fl->window_pos[Y_POS] = fl->world_pos[Y_POS] - dimension;
155            fl->window_pos[X_POS] = fl->world_pos[X_POS];
156
157            if ( (current_fl = horizontal_fl) == NULL ) {
158                horizontal_fl = fl;
159                return ( fl );
160            }
161
162            rel_pos = Y_POS;
163        }
164        else {
165            return ( NULL );
166        }
167    }
168
169    while (  (current_fl != NULL) && (current_fl->world_pos[rel_pos] <= fl->world_pos[rel_pos]) ) {
170        previous_fl = current_fl;
171        current_fl  = current_fl->next;
172    }
173
174    if (previous_fl){
175        previous_fl->next = fl;
176    }
177    fl->next = current_fl;
178
179    return ( fl );
180}
181
182ED4_window *ED4_window::get_matching_ed4w(AW_window *aw) {
183    ED4_window *window = ED4_ROOT->first_window;
184    while (window && window->aww != aw) window = window->next;
185    return window;
186}
187
188
189
190ED4_returncode ED4_window::delete_folding_line(ED4_folding_line *fl, ED4_properties prop) {
191    AWUSE(fl);
192    AWUSE(prop);
193
194    return ( ED4_R_OK );
195}
196
197ED4_returncode ED4_window::update_scrolled_rectangle( void )
198{
199    if ((scrolled_rect.scroll_top == NULL) || (scrolled_rect.scroll_bottom == NULL) ||
200        (scrolled_rect.scroll_left == NULL) || (scrolled_rect.scroll_right == NULL) )
201        return ED4_R_IMPOSSIBLE;
202
203    AW_pos world_x = scrolled_rect.world_x;
204    AW_pos world_y = scrolled_rect.world_y;
205   
206    AW_pos width  = scrolled_rect.scroll_right->world_pos[X_POS] - scrolled_rect.scroll_left->world_pos[X_POS] + 1;
207    AW_pos height = scrolled_rect.scroll_bottom->world_pos[Y_POS] - scrolled_rect.scroll_top->world_pos[Y_POS] + 1;
208
209    // calculate possibly new world coordinates and extensions of existing links
210    {
211        AW_pos dummy;
212        if ( scrolled_rect.x_link != NULL ) scrolled_rect.x_link->calc_world_coords( &world_x, &dummy );
213        if ( scrolled_rect.y_link != NULL ) scrolled_rect.y_link->calc_world_coords( &dummy, &world_y );
214    }
215
216    if ( scrolled_rect.width_link  != NULL ) width  = scrolled_rect.width_link->extension.size[WIDTH];
217    if ( scrolled_rect.height_link != NULL ) height = scrolled_rect.height_link->extension.size[HEIGHT];
218
219    // set new world and window coordinates
220    scrolled_rect.scroll_top->world_pos[X_POS]  = world_x; 
221    scrolled_rect.scroll_top->world_pos[Y_POS]  = world_y;
222    scrolled_rect.scroll_top->window_pos[X_POS] = world_x;
223    scrolled_rect.scroll_top->window_pos[Y_POS] = world_y;
224
225    if ( scrolled_rect.scroll_top->length != INFINITE ) scrolled_rect.scroll_top->length = width;
226
227    scrolled_rect.scroll_bottom->world_pos[X_POS] = world_x;
228    scrolled_rect.scroll_bottom->world_pos[Y_POS] = world_y + height - 1;
229
230    if ( scrolled_rect.scroll_bottom->length != INFINITE ) scrolled_rect.scroll_bottom->length = width;
231
232    scrolled_rect.scroll_left->world_pos[X_POS]  = world_x;
233    scrolled_rect.scroll_left->world_pos[Y_POS]  = world_y;
234    scrolled_rect.scroll_left->window_pos[X_POS] = world_x;
235    scrolled_rect.scroll_left->window_pos[Y_POS] = world_y;
236
237    if ( scrolled_rect.scroll_left->length != INFINITE ) scrolled_rect.scroll_left->length = height;
238
239    scrolled_rect.scroll_right->world_pos[X_POS] = world_x + width - 1;
240    scrolled_rect.scroll_right->world_pos[Y_POS] = world_y;
241
242    if ( scrolled_rect.scroll_right->length != INFINITE ) scrolled_rect.scroll_right->length = height;
243
244    scrolled_rect.world_x = world_x;
245    scrolled_rect.world_y = world_y;
246    scrolled_rect.width   = width;
247    scrolled_rect.height  = height;
248
249    // update window scrollbars
250    AW_world rect = { 0, height-1, 0, width-1 };
251    set_scrollbar_indents();
252    aww->tell_scrolled_picture_size(rect);
253    aww->calculate_scrollbars();
254
255    AW_rectangle area_size;
256    {
257        int delta = aww->slider_pos_horizontal - slider_pos_horizontal;     // update dimension and window position of folding lines at
258        scrolled_rect.scroll_left->dimension += delta;                  // the borders of scrolled rectangle
259        delta = aww->slider_pos_vertical - slider_pos_vertical;
260        scrolled_rect.scroll_top->dimension += delta;
261        ED4_ROOT->get_device()->get_area_size( &area_size );
262    }
263
264    if ( scrolled_rect.height_link != NULL ) slider_pos_vertical   = aww->slider_pos_vertical;
265    if ( scrolled_rect.width_link  != NULL ) slider_pos_horizontal = aww->slider_pos_horizontal;
266
267
268    AW_pos dim;
269    if ((world_y + height - 1) > area_size.b) { // our world doesn't fit vertically in our window
270        // determine dimension of bottom folding line
271        dim = (world_y + height - 1) - area_size.b;
272        scrolled_rect.scroll_bottom->dimension = max(0, int(dim - scrolled_rect.scroll_top->dimension));
273    }
274    else {
275        dim = 0;
276        scrolled_rect.scroll_bottom->dimension = 0;
277        scrolled_rect.scroll_top->dimension = 0;
278    }
279
280    scrolled_rect.scroll_bottom->window_pos[Y_POS] = world_y + height - 1 - dim;
281    scrolled_rect.scroll_bottom->window_pos[X_POS] = world_x;
282
283    if ((world_x + width - 1) > area_size.r) { // our world doesn't fit horizontally in our window =>
284        // determine dimension of right folding line
285        dim = (world_x + width - 1) - area_size.r;
286        scrolled_rect.scroll_right->dimension = max(0, int(dim - scrolled_rect.scroll_left->dimension));
287    }
288    else {
289        dim = 0;
290        scrolled_rect.scroll_right->dimension = 0;
291        scrolled_rect.scroll_left->dimension = 0;
292    }
293
294    scrolled_rect.scroll_right->window_pos[X_POS] = world_x + width - 1 - dim;
295    scrolled_rect.scroll_right->window_pos[Y_POS] = world_y;
296
297    update_window_coords();
298
299    return ED4_R_OK;
300}
301
302ED4_returncode ED4_window::set_scrolled_rectangle( AW_pos world_x, AW_pos world_y, AW_pos width, AW_pos height,
303                                                   ED4_base *x_link, ED4_base *y_link, ED4_base *width_link, ED4_base *height_link )
304{
305    AW_pos         x, y, dim;
306    AW_rectangle   area_size;
307
308    // first of all remove existing scrolled rectangle
309    if (scrolled_rect.scroll_top    != NULL) delete_folding_line(scrolled_rect.scroll_top,    ED4_P_HORIZONTAL);
310    if (scrolled_rect.scroll_bottom != NULL) delete_folding_line(scrolled_rect.scroll_bottom, ED4_P_HORIZONTAL);
311    if (scrolled_rect.scroll_left   != NULL) delete_folding_line(scrolled_rect.scroll_left,   ED4_P_VERTICAL);
312    if (scrolled_rect.scroll_right  != NULL) delete_folding_line(scrolled_rect.scroll_right,  ED4_P_VERTICAL);
313
314    if ( x_link != NULL ) {
315        x_link->update_info.linked_to_scrolled_rectangle = 1;
316        x_link->calc_world_coords( &x, &y );
317        world_x = x;
318    }
319
320    if ( y_link != NULL ) {
321        y_link->update_info.linked_to_scrolled_rectangle = 1;
322        y_link->calc_world_coords( &x, &y );
323        world_y = y;
324    }
325
326    if ( width_link != NULL ) {
327        width_link->update_info.linked_to_scrolled_rectangle = 1;
328        width = width_link->extension.size[WIDTH];
329    }
330
331    if ( height_link != NULL ) {
332        height_link->update_info.linked_to_scrolled_rectangle = 1;
333        height = height_link->extension.size[HEIGHT];
334    }
335
336    ED4_ROOT->get_device()->get_area_size( &area_size );
337
338    if ((area_size.r <= world_x) || (area_size.b <= world_y)) {
339        return ED4_R_IMPOSSIBLE;
340    }
341
342    scrolled_rect.scroll_top  = insert_folding_line( world_x, world_y, INFINITE, 0, NULL, ED4_P_HORIZONTAL );
343    scrolled_rect.scroll_left = insert_folding_line( world_x, world_y, INFINITE, 0, NULL, ED4_P_VERTICAL );
344
345    dim = 0;
346    if ((world_y + height - 1) > area_size.b) dim = (world_y + height - 1) - area_size.b;
347
348    scrolled_rect.scroll_bottom = insert_folding_line( world_x, (world_y + height - 1), INFINITE, dim, NULL, ED4_P_HORIZONTAL );
349
350    dim = 0;
351    if ((world_x + width - 1) > area_size.r) dim = (world_x + width - 1) - area_size.r;
352
353    scrolled_rect.scroll_right = insert_folding_line( (world_x + width - 1), world_y, INFINITE, dim, NULL, ED4_P_VERTICAL );
354    scrolled_rect.x_link       = x_link;
355    scrolled_rect.y_link       = y_link;
356    scrolled_rect.width_link   = width_link;
357    scrolled_rect.height_link  = height_link;
358    scrolled_rect.world_x      = world_x;
359    scrolled_rect.world_y      = world_y;
360    scrolled_rect.width        = width;
361    scrolled_rect.height       = height;
362
363    return ED4_R_OK;
364}
365
366static inline void clear_and_update_rectangle(AW_pos x1, AW_pos y1, AW_pos x2, AW_pos y2)
367// clears and updates any range of the screen (in win coordinates)
368// clipping range should be set correctly
369{
370    AW_rectangle rect;
371
372    rect.t = int(y1);
373    rect.b = int(y2);
374    rect.l = int(x1);
375    rect.r = int(x2);
376    ED4_set_clipping_rectangle(&rect);
377
378#if defined(DEBUG) && 0
379    static int toggle = 0;
380    ED4_ROOT->get_device()->box(ED4_G_COLOR_2+toggle, x1, y1, x2-x1+1, y2-y1+1, (AW_bitset)-1, 0, 0);    // fill range with color (for testing)
381    toggle = (toggle+1)&7;
382#else
383    ED4_ROOT->get_device()->clear_part(x1, y1, x2-x1+1, y2-y1+1, (AW_bitset)-1);
384#endif
385
386    ED4_ROOT->main_manager->to_manager()->Show(1,1);
387}
388
389static inline void move_and_update_rectangle(AW_pos x1, AW_pos y1, AW_pos x2, AW_pos y2, int dx, int dy)
390// x1/y1=upper-left-corner (win coordinates)
391// x2/y2=lower-right-corner
392// dx/dy=movement
393{
394    AW_pos fx = dx<0 ? x1-dx : x1;  // move from position ..
395    AW_pos fy = dy<0 ? y1-dy : y1;
396    AW_pos tx = dx>0 ? x1+dx : x1;  // ..to position ..
397    AW_pos ty = dy>0 ? y1+dy : y1;
398    int xs = int(x2-x1-abs(dx));        // ..size
399    int ys = int(y2-y1-abs(dy));
400
401    {
402        AW_rectangle rect;
403        rect.t = int(ty);
404        rect.b = int(ty+ys-1);
405        rect.l = int(tx);
406        rect.r = int(tx+xs-1);
407        ED4_set_clipping_rectangle(&rect);
408    }
409
410    AW_device *device = ED4_ROOT->get_device();
411    device->move_region(fx, fy, xs, ys, tx, ty);
412
413    if (dy<0) { // scroll to the top
414        device->set_top_font_overlap(1);
415        clear_and_update_rectangle(x1, y2+dy, x2, y2);
416        device->set_top_font_overlap(0);
417    }
418    else if (dy>0) { // scroll to the bottom
419        device->set_bottom_font_overlap(1);
420        clear_and_update_rectangle(x1, y1, x2, y1+dy);
421        device->set_bottom_font_overlap(0);
422    }
423
424    int char_width = ED4_ROOT->font_group.get_max_width() * 2;
425    if (dx<0) { // scroll left
426        device->set_left_font_overlap(1);
427        clear_and_update_rectangle(x2+dx-char_width, y1, x2, y2);
428        device->set_left_font_overlap(0);
429    }
430    else if (dx>0) { // scroll right
431        device->set_right_font_overlap(1);
432        clear_and_update_rectangle(x1, y1, x1+dx+char_width, y2);
433        device->set_right_font_overlap(0);
434    }
435}
436
437static inline void update_rectangle(AW_pos x1, AW_pos y1, AW_pos x2, AW_pos y2) // x1/y1=upper-left-corner x2/y2=lower-right-corner
438{
439    AW_rectangle rect;
440    rect.t = int(y1);
441    rect.b = int(y2);
442    rect.l = int(x1);
443    rect.r = int(x2);
444
445    ED4_set_clipping_rectangle(&rect);
446    clear_and_update_rectangle(x1, y1, x2, y2);
447}
448
449
450ED4_returncode ED4_window::scroll_rectangle( int dx, int dy )
451{
452    int skip_move;
453
454    if (!dx && !dy) return ED4_R_OK; // scroll not
455
456    AW_pos left_x   = scrolled_rect.scroll_left->window_pos[X_POS];
457    AW_pos top_y    = scrolled_rect.scroll_top->window_pos[Y_POS];
458    AW_pos right_x  = scrolled_rect.scroll_right->window_pos[X_POS];
459    AW_pos bottom_y = scrolled_rect.scroll_bottom->window_pos[Y_POS];
460
461    //     e4_assert((scrolled_rect.scroll_left->dimension-dx)>=0); // if any of these asserts fails, dx or dy is set wrong
462    //     e4_assert((scrolled_rect.scroll_right->dimension+dx)>=0);
463    //     e4_assert((scrolled_rect.scroll_top->dimension-dy)>=0);
464    //     e4_assert((scrolled_rect.scroll_bottom->dimension+dy)>=0);
465
466    scrolled_rect.scroll_left->dimension -= dx;
467    scrolled_rect.scroll_top->dimension -= dy;
468    scrolled_rect.scroll_right->dimension += dx;
469    scrolled_rect.scroll_bottom->dimension += dy;
470
471    skip_move = (ABS(int(dy)) > (bottom_y - top_y - 20)) || (ABS(int(dx)) > (right_x - left_x - 20));
472
473    AW_pos leftmost_x = coords.middle_area_x;
474    AW_pos toptop_y = coords.top_area_y;
475    AW_pos topbottom_y = toptop_y + coords.top_area_height - 1;
476
477    ED4_ROOT->get_device()->push_clip_scale();
478
479    // main area
480
481    if (skip_move)  update_rectangle(left_x, top_y, right_x, bottom_y); // main area
482    else            move_and_update_rectangle(left_x, top_y, right_x, bottom_y, int(dx), int(dy)); // main area
483
484    // name area (scroll only vertically)
485
486    if (dy) {
487        if (skip_move)  update_rectangle(leftmost_x, top_y, left_x, bottom_y);
488        else            move_and_update_rectangle(leftmost_x, top_y, left_x, bottom_y, 0, int(dy));
489    }
490
491    // top area (scroll only horizontally)
492
493    if (dx) {
494        if (skip_move)  update_rectangle(left_x, toptop_y, right_x, topbottom_y);
495        else            move_and_update_rectangle(left_x, toptop_y, right_x, topbottom_y, int(dx), 0);
496    }
497
498    ED4_ROOT->get_device()->pop_clip_scale();
499
500    return ( ED4_R_OK );
501}
502
503ED4_returncode ED4_window::set_scrollbar_indents( void ) {
504    int indent_y, indent_x;
505
506    if ((scrolled_rect.scroll_top    == NULL) ||
507        (scrolled_rect.scroll_bottom == NULL) ||
508        (scrolled_rect.scroll_left   == NULL) ||
509        (scrolled_rect.scroll_right  == NULL) )
510        return ( ED4_R_IMPOSSIBLE );
511
512    indent_y = (int) scrolled_rect.world_y + SLIDER_OFFSET;
513    aww->set_vertical_scrollbar_top_indent( indent_y );
514    indent_x = (int) scrolled_rect.world_x + SLIDER_OFFSET;
515    aww->set_horizontal_scrollbar_left_indent( indent_x );
516
517    return ( ED4_R_OK );
518}
519
520
521void ED4_window::delete_window( ED4_window *window) //delete from window list
522{
523    ED4_window *temp, *temp2;
524
525    if (window == ED4_ROOT->first_window) {
526        temp = ED4_ROOT->first_window;                  //delete temp afterwards
527        ED4_ROOT->first_window = ED4_ROOT->first_window->next;
528
529        if (no_of_windows > 1) {
530            ED4_ROOT->use_first_window();
531        }
532    }
533    else {
534        temp = temp2 = ED4_ROOT->first_window;
535
536        while (temp != window) {
537            temp2 = temp;
538            temp = temp->next;
539        }
540
541        temp2->next = temp->next;
542
543        ED4_ROOT->use_window(temp2);
544    }
545
546    ED4_ROOT->aw_root->awar(temp->awar_path_for_cursor)->write_int(0);              // save in database
547    ED4_ROOT->aw_root->awar(temp->awar_path_for_Ecoli)->write_int(0);
548    ED4_ROOT->aw_root->awar(temp->awar_path_for_basePos)->write_int(0);
549    ED4_ROOT->aw_root->awar(temp->awar_path_for_IUPAC)->write_string(IUPAC_EMPTY);
550    ED4_ROOT->aw_root->awar(temp->awar_path_for_helixNr)->write_string("");
551    delete temp;
552}
553
554
555ED4_window *ED4_window::insert_window( AW_window *new_aww )
556{
557    ED4_window *last,*temp;
558
559    temp = ED4_ROOT->first_window;          //append at end of window list
560    last = temp;
561    while (temp) {
562        last = temp;
563        temp = temp->next;
564    }
565
566    temp = new ED4_window ( new_aww );
567
568    if (!ED4_ROOT->first_window) {       //this is the first window
569        ED4_ROOT->first_window = temp;
570    }
571    else if ( last != NULL) {
572        last->next = temp;
573    }
574
575    // treat devices
576    new_aww->set_expose_callback(AW_MIDDLE_AREA, ED4_expose_cb, 0, 0);
577    new_aww->set_resize_callback(AW_MIDDLE_AREA, ED4_resize_cb, 0, 0);
578    new_aww->set_input_callback (AW_MIDDLE_AREA, ED4_input_cb,  0, 0);
579    new_aww->set_motion_callback(AW_MIDDLE_AREA, ED4_motion_cb, 0, 0);
580   
581    new_aww->set_horizontal_change_callback(ED4_horizontal_change_cb, 0, 0);
582    new_aww->set_vertical_change_callback  (ED4_vertical_change_cb,   0, 0);
583
584    ED4_ROOT->use_window(temp);
585    ED4_ROOT->temp_gc = ED4_G_STANDARD;
586
587    return temp;
588}
589
590ED4_window::ED4_window( AW_window *window )
591{
592    aww                   = window;
593    next                  = 0;
594    slider_pos_horizontal = 0;
595    slider_pos_vertical   = 0;
596    horizontal_fl         = 0;
597    vertical_fl           = 0;
598   
599    scrolled_rect.clear();
600    id        = ++no_of_windows;
601    coords.clear();
602    is_hidden = 0;
603
604    sprintf(awar_path_for_cursor, AWAR_EDIT_SEQ_POSITION, id);
605    ED4_ROOT->aw_root->awar_int(awar_path_for_cursor,0,AW_ROOT_DEFAULT)->set_minmax(0,MAX_POSSIBLE_SEQ_LENGTH);
606
607    sprintf(awar_path_for_Ecoli, AWAR_EDIT_ECOLI_POSITION, id);
608    ED4_ROOT->aw_root->awar_int(awar_path_for_Ecoli,0,AW_ROOT_DEFAULT)->set_minmax(0,MAX_POSSIBLE_SEQ_LENGTH);
609
610    sprintf(awar_path_for_basePos, AWAR_EDIT_BASE_POSITION, id);
611    ED4_ROOT->aw_root->awar_int(awar_path_for_basePos,0,AW_ROOT_DEFAULT)->set_minmax(0,MAX_POSSIBLE_SEQ_LENGTH);
612
613    sprintf(awar_path_for_IUPAC, AWAR_EDIT_IUPAC, id);
614    ED4_ROOT->aw_root->awar_string(awar_path_for_IUPAC,IUPAC_EMPTY,AW_ROOT_DEFAULT);
615
616    sprintf(awar_path_for_helixNr, AWAR_EDIT_HELIXNR, id);
617    ED4_ROOT->aw_root->awar_string(awar_path_for_helixNr, "", AW_ROOT_DEFAULT); // ->set_minmax(-MAX_POSSIBLE_SEQ_LENGTH,MAX_POSSIBLE_SEQ_LENGTH);
618}
619
620
621ED4_window::~ED4_window()
622{
623    delete aww;
624    delete horizontal_fl;       // be careful, don't delete links to hierarchy  in folding lines!!!
625    delete vertical_fl;
626
627    no_of_windows --;
628}
629
Note: See TracBrowser for help on using the repository browser.