source: tags/arb_5.3/EDIT/ed_conf.cxx

Last change on this file was 5968, checked in by westram, 15 years ago
  • new flag -w to aisc_mkpt (add include wrapper)
  • uniform style for several include wrappers
  • removed duplicated includes
  • removed useless nt_concatenate.hxx
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 24.4 KB
Line 
1#include <stdio.h>
2#include <string.h>
3#include <arbdb.h>
4#include <adtools.hxx>
5#include <aw_root.hxx>
6#include <aw_device.hxx>
7#include <aw_window.hxx>
8#include <edit.hxx>
9
10/***************************************************************************************************************************/
11/***************************************************************************************************************************/
12/***************************************************************************************************************************/
13
14void aed_left_name( class AED_window *aedw, AED_area_entry *area_entry, char *text ) {
15    AWUSE(aedw);
16
17    if ( area_entry ) {
18        if (area_entry->ad_extended) {
19            sprintf( text, "#%10s# ",area_entry->ad_species->name());
20        }else{
21            sprintf( text, ">%10s< ",area_entry->ad_species->name());
22        }
23    }else {
24        sprintf( text, ">- noname -< ");
25    }
26}
27
28void aed_left_security( class AED_window *aedw, AED_area_entry *area_entry, char *text ) {
29    AWUSE(aedw);
30
31    if ( area_entry && area_entry->adt_sequence) {
32        GBDATA *gbd = area_entry->adt_sequence->get_GBDATA();
33        if (gbd) {
34            GBDATA *gb_root = GB_get_root(gbd);
35            GB_push_local_transaction(gb_root); // very dangerous
36            gbd = area_entry->adt_sequence->get_GBDATA();
37            if (gbd){
38                if (GB_read_flag(area_entry->ad_species->get_GBDATA())) {
39                    sprintf( text, "* %i ", GB_read_security_write(gbd));
40                }else{
41                    sprintf( text, "  %i ", GB_read_security_write(gbd));
42                }
43            }else{
44                sprintf( text, "0 ");
45            }
46            GB_pop_local_transaction(gb_root);
47            return;
48        }
49    }
50    sprintf( text, "0 ");
51}
52
53
54void aed_left_zwei( class AED_window *aedw, AED_area_entry *area_entry, char *text ) {
55    aedw=aedw;area_entry=area_entry;
56
57    strcpy( text, "GC-Verhaeltnis " );
58}
59
60
61void aed_left_drei( class AED_window *aedw, AED_area_entry *area_entry, char *text ) {
62    aedw=aedw;area_entry=area_entry;
63
64    strcpy( text, "Art " );
65}
66
67
68void aed_left_vier( class AED_window *aedw, AED_area_entry *area_entry, char *text ) {
69    aedw=aedw;area_entry=area_entry;
70
71    strcpy( text, "unwichtig " );
72}
73
74
75
76void show_config_window_draw_area(AW_device *device, AED_window *aedw, AW_pos slider_pos_horizontal, AW_pos slider_pos_vertical, AW_pos picture_l, int top_indent_of_vertical_scrollbar ) {
77    char           text[100];
78    AW_pos         y;
79    AW_pos         right_offset = 200;
80    AED_left_side *current_entry_of_dlist;
81    AW_rectangle   screen;
82    AW_pos         width, height;
83    int            counter      = 1;
84    int            gc1          = 0;
85    int            gc2          = 1;
86
87    const AW_font_information *font_information = device->get_font_information(gc1, 'A');
88    device->get_area_size( &screen );
89
90    device->set_offset(AW::Vector());
91    device->line( gc2, 0, 19, screen.r,  19, AED_F_INFO_SEPARATOR, 0, 0 );                             // Linie horizontal
92    device->set_offset(AW::Vector(-slider_pos_horizontal, 0));
93    device->text( gc2, "Sichtbar", 75, 15, 0.0, AED_F_TEXT_2, 0, 0 );
94    device->text( gc2, "Unsichtbar", 75+right_offset, 15, 0.0, AED_F_TEXT_2, 0, 0 );
95    device->line( gc2, right_offset,  0, right_offset,  screen.b, AED_F_INFO_SEPARATOR, 0, 0 );        // Linie vertikal
96
97    y = top_indent_of_vertical_scrollbar;
98    device->invisible( 1, 0, y, AED_F_TEXT_1, (AW_CL)0, (AW_CL)0 );
99    device->invisible( 1, 290, y, AED_F_TEXT_1, (AW_CL)0, (AW_CL)0 );
100
101    current_entry_of_dlist = aedw->show_dlist_left_side->first;
102    while ( current_entry_of_dlist ) {
103        sprintf( text, "%i: %s ", counter++, current_entry_of_dlist->text );
104        strcpy( current_entry_of_dlist->text_for_dragging, text );
105
106        device->push_clip_scale();
107
108        device->get_area_size( &screen );
109
110        device->set_offset(AW::Vector(-picture_l-slider_pos_horizontal, -slider_pos_vertical));
111        device->set_top_clip_border( top_indent_of_vertical_scrollbar );
112
113        y += AED_LINE_SPACING + font_information->max_letter.ascent;
114
115        current_entry_of_dlist->absolut_x = 4 - picture_l - slider_pos_horizontal;
116        current_entry_of_dlist->absolut_y = y - slider_pos_vertical;
117
118        if( !current_entry_of_dlist->is_selected ) {
119            device->text( gc1, text, 4, y , 0.0, AED_F_TEXT_1, (AW_CL)current_entry_of_dlist, (AW_CL)0 );
120        }
121        else {
122            AW_pos help_y = y + font_information->max_letter.descent + 1;
123
124            width  = strlen( text ) * font_information->max_letter.width + 4;
125            height = font_information->max_letter.height + 2;
126
127            device->text( gc2, text, 4, y, 0.0, AED_F_TEXT_1, (AW_CL)current_entry_of_dlist, AED_F_NAME );
128            device->box( gc2, false, 2, help_y-height, width, height, AED_F_FRAME, (AW_CL)"box", 0 );
129        }
130
131        device->pop_clip_scale();
132
133        y += 2.0 + font_information->max_letter.descent;
134
135        current_entry_of_dlist = current_entry_of_dlist->next;
136    }
137
138
139    y = top_indent_of_vertical_scrollbar;
140    current_entry_of_dlist = aedw->hide_dlist_left_side->first;
141    while ( current_entry_of_dlist ) {
142        sprintf( text, "%s ", current_entry_of_dlist->text );
143        strcpy( current_entry_of_dlist->text_for_dragging, text );
144
145        device->push_clip_scale();
146
147        device->get_area_size( &screen );
148
149        device->set_offset(AW::Vector(-picture_l-slider_pos_horizontal, -slider_pos_vertical));
150        device->set_top_clip_border( top_indent_of_vertical_scrollbar );
151
152        y += AED_LINE_SPACING + font_information->max_letter.ascent;
153
154        current_entry_of_dlist->absolut_x = 4+right_offset - picture_l - slider_pos_horizontal;
155        current_entry_of_dlist->absolut_y = y - slider_pos_vertical;
156
157        if( !current_entry_of_dlist->is_selected ) {
158            device->text( gc1, text, 4+right_offset, y , 0.0, AED_F_TEXT_1, (AW_CL)current_entry_of_dlist, (AW_CL)0 );
159        }
160        else {
161            AW_pos help_y = y + font_information->max_letter.descent + 1;
162
163            width  = strlen( text ) * font_information->max_letter.width + 4;
164            height = font_information->max_letter.height + 2;
165
166            device->text( gc2, text, 4+right_offset, y, 0.0, AED_F_TEXT_1, (AW_CL)current_entry_of_dlist, AED_F_NAME );
167            device->box(gc2, false, 2, help_y-height, right_offset+width, height, AED_F_FRAME, (AW_CL)"box", 0);
168        }
169
170        device->pop_clip_scale();
171
172        y += 2.0 + font_information->max_letter.descent;
173
174        current_entry_of_dlist = current_entry_of_dlist->next;
175    }
176
177}
178
179
180void aed_config_window_expose(AW_window *aw, AW_CL cd1, AW_CL cd2) {
181    AWUSE(aw);AWUSE(cd2);
182    AED_window *aedw = (AED_window *)cd1;
183    AW_device *device;
184
185    device = aedw->config_window->get_device (AW_MIDDLE_AREA  );
186    device->set_filter(AED_F_ALL);
187
188    device->clear(AED_F_ALL);
189    show_config_window_draw_area( device, aedw, aedw->config_window->slider_pos_horizontal, aedw->config_window->slider_pos_vertical,
190                                  aedw->config_window->picture->l, aedw->config_window->top_indent_of_vertical_scrollbar );
191
192}
193
194
195void aed_config_window_resize(AW_window *aw, AW_CL cd1, AW_CL cd2) {
196    AWUSE(aw);AWUSE(cd2);
197    AED_window *aedw = (AED_window *)cd1;
198    AW_device   *device;
199    AW_device   *size_device;
200    AW_world    size_information;
201
202    device = aedw->config_window->get_device (AW_MIDDLE_AREA  );
203    device->set_filter(AED_F_ALL);
204    device->reset();
205    size_device = aedw->config_window->get_size_device (AW_MIDDLE_AREA  );
206    size_device->set_filter(AED_F_ALL);
207    size_device->reset();
208
209    size_device = aedw->config_window->get_size_device (AW_MIDDLE_AREA  );
210    size_device->set_filter(AED_F_TEXT_1);
211    show_config_window_draw_area( size_device, aedw, 0, 0, 0, 0 );
212    size_device->get_size_information( &size_information );
213    aedw->config_window->tell_scrolled_picture_size( size_information );
214    aedw->config_window->calculate_scrollbars();
215}
216
217
218void aed_config_window_input(AW_window *aw, AW_CL cd1, AW_CL cd2) {
219    AWUSE(cd2);
220    AED_window      *aedw                 = (AED_window *)cd1;
221    AW_event         event;
222    AW_device       *device;
223    AW_device       *click_device;
224    AW_device       *size_device;
225    AW_clicked_text  clicked_text;
226    AW_world         size_information;
227    AED_left_side   *left_side_hit;
228    AED_left_side   *left_side_destination;
229    bool             update_other_windows = false;
230
231    aw->get_event( &event );
232
233    device          = aw->get_device (AW_MIDDLE_AREA  );
234    device->set_filter(AED_F_ALL);
235    click_device    = aw->get_click_device (AW_MIDDLE_AREA, event.x, event.y, 0, 10, 0 );
236    click_device->set_filter(AED_F_TEXT_1);
237
238    if ( event.type == AW_Mouse_Press ) {
239        show_config_window_draw_area( click_device, aedw, aedw->config_window->slider_pos_horizontal, aedw->config_window->slider_pos_vertical,
240                                      aedw->config_window->picture->l, aedw->config_window->top_indent_of_vertical_scrollbar );
241        click_device->get_clicked_text( &clicked_text );
242
243        if ( clicked_text.exists == true ) {
244            left_side_hit = (AED_left_side *)clicked_text.client_data1;
245            if ( aedw->one_entry_dlist_left_side_is_selected )
246                aedw->selected_entry_of_dlist_left_side->is_selected = false;
247            else
248                aedw->one_entry_dlist_left_side_is_selected = true;
249            left_side_hit->is_selected = true;
250            aedw->selected_entry_of_dlist_left_side = left_side_hit;
251
252            device->clear(AED_F_ALL);
253            show_config_window_draw_area( device, aedw, aedw->config_window->slider_pos_horizontal, aedw->config_window->slider_pos_vertical,
254                                          aedw->config_window->picture->l, aedw->config_window->top_indent_of_vertical_scrollbar );
255        }
256    }
257
258    if ( event.type == AW_Mouse_Release ) {
259        if( aedw->drag ) {
260            aedw->drag = false;
261            drag_box( device, 2, aedw->drag_x - aedw->drag_x_correcting, aedw->drag_y - aedw->drag_y_correcting, 0, 0, aedw->selected_entry_of_dlist_left_side->text_for_dragging );
262            show_config_window_draw_area( click_device, aedw, aedw->config_window->slider_pos_horizontal, aedw->config_window->slider_pos_vertical,
263                                          aedw->config_window->picture->l, aedw->config_window->top_indent_of_vertical_scrollbar );
264
265            click_device->get_clicked_text( &clicked_text );
266            if ( clicked_text.exists ) {
267                left_side_destination = (AED_left_side *)clicked_text.client_data1;
268                if ( left_side_destination != aedw->selected_entry_of_dlist_left_side ) {    // man beendet den drag nicht auf sich selbst
269
270                    aedw->selected_entry_of_dlist_left_side->in_side->remove_entry( aedw->selected_entry_of_dlist_left_side );
271
272                    if( clicked_text.distance > 0 )
273                        left_side_destination->in_side->insert_after_entry( left_side_destination, aedw->selected_entry_of_dlist_left_side );
274                    else
275                        left_side_destination->in_side->insert_before_entry( left_side_destination, aedw->selected_entry_of_dlist_left_side );
276                    aedw->selected_entry_of_dlist_left_side->in_side = left_side_destination->in_side;
277                    update_other_windows = true;
278                }
279            }
280            else {
281                if ( event.x > ( 200 - aedw->config_window->slider_pos_horizontal ) ) {
282                    if ( aedw->selected_entry_of_dlist_left_side->in_side == aedw->show_dlist_left_side ) {
283                        aedw->show_dlist_left_side->remove_entry( aedw->selected_entry_of_dlist_left_side );
284                        aedw->hide_dlist_left_side->append( aedw->selected_entry_of_dlist_left_side );
285                        aedw->selected_entry_of_dlist_left_side->in_side = aedw->hide_dlist_left_side;
286                        update_other_windows = true;
287                    }
288                    else {
289                        aedw->hide_dlist_left_side->remove_entry( aedw->selected_entry_of_dlist_left_side );
290                        aedw->hide_dlist_left_side->append( aedw->selected_entry_of_dlist_left_side );
291                        update_other_windows = true;
292                    }
293                }
294                else {
295                    if ( aedw->selected_entry_of_dlist_left_side->in_side == aedw->hide_dlist_left_side ) {
296                        aedw->hide_dlist_left_side->remove_entry( aedw->selected_entry_of_dlist_left_side );
297                        aedw->show_dlist_left_side->append( aedw->selected_entry_of_dlist_left_side );
298                        aedw->selected_entry_of_dlist_left_side->in_side = aedw->show_dlist_left_side;
299                        update_other_windows = true;
300                    }
301                    else {
302                        aedw->show_dlist_left_side->remove_entry( aedw->selected_entry_of_dlist_left_side );
303                        aedw->show_dlist_left_side->append( aedw->selected_entry_of_dlist_left_side );
304                        update_other_windows = true;
305                    }
306                }
307            }
308            if ( update_other_windows ) {
309
310                size_device = aedw->config_window->get_size_device (AW_MIDDLE_AREA  );
311                size_device->set_filter(AED_F_TEXT_1);
312                show_config_window_draw_area( size_device, aedw, 0, 0, 0, 0 );
313                size_device->get_size_information( &size_information );
314                aedw->config_window->tell_scrolled_picture_size( size_information );
315                aedw->config_window->calculate_scrollbars();
316
317                device->clear(AED_F_ALL);
318                show_config_window_draw_area( device, aedw, aedw->config_window->slider_pos_horizontal, aedw->config_window->slider_pos_vertical,
319                                              aedw->config_window->picture->l, aedw->config_window->top_indent_of_vertical_scrollbar );
320                aed_resize( (AW_window *)aedw->aww, (AW_CL)aedw, (AW_CL)0 );
321            }
322        }
323    }
324
325
326}
327
328
329void aed_config_window_motion(AW_window *aw, AW_CL cd1, AW_CL cd2) {
330    AWUSE(cd2);
331    AED_window                  *aedw = (AED_window *)cd1;
332    AW_event                    event;
333    AW_event                    motion_event;
334    AW_device                   *device;
335    AW_device                   *click_device;
336    //    AW_window     *awmm = aedw->aww;
337    AW_clicked_text             clicked_text;
338    AW_rectangle                screen;
339
340    device = aw->get_device (AW_MIDDLE_AREA  );
341    device->set_filter(AED_F_ALL);
342    device->get_area_size( &screen );
343
344    if ( aedw->drag ) {                                                                                                                         // mitten im dragging
345        aw->get_event ( &motion_event );
346        device->set_offset(AW::Vector());
347        drag_box( device, 2, aedw->drag_x - aedw->drag_x_correcting, aedw->drag_y - aedw->drag_y_correcting, 0, 0, aedw->selected_entry_of_dlist_left_side->text_for_dragging );
348
349        if( motion_event.y < 20 )
350            motion_event.y = 20;
351        if ( motion_event.y > screen.b )
352            motion_event.y = screen.b;
353        if( motion_event.x < 0 )
354            motion_event.x = 0;
355        if( motion_event.x > screen.r )
356            motion_event.x = screen.r;
357        aedw->drag_x = motion_event.x;
358        aedw->drag_y = motion_event.y;
359
360        drag_box( device, 2, motion_event.x - aedw->drag_x_correcting, motion_event.y - aedw->drag_y_correcting, 0, 0, aedw->selected_entry_of_dlist_left_side->text_for_dragging );
361    }
362
363    if( !aedw->drag ) {                                                                                                                     // Beginn des draggings
364        aw->get_event( &event );
365
366        click_device = aw->get_click_device (AW_MIDDLE_AREA, event.x, event.y, 0, 0, 0 );
367        click_device->set_filter(AED_F_TEXT_1);
368        show_config_window_draw_area( click_device, aedw, aedw->config_window->slider_pos_horizontal, aedw->config_window->slider_pos_vertical,
369                                      aedw->config_window->picture->l, aedw->config_window->top_indent_of_vertical_scrollbar );
370        click_device->get_clicked_text( &clicked_text );
371
372        if( clicked_text.exists && (AED_left_side *)clicked_text.client_data1 == aedw->selected_entry_of_dlist_left_side ) {
373            aedw->drag = true;
374            aw->get_event ( &motion_event );
375            aedw->drag_x_correcting = event.x - aedw->selected_entry_of_dlist_left_side->absolut_x;
376            aedw->drag_y_correcting = event.y - aedw->selected_entry_of_dlist_left_side->absolut_y;
377            device->set_offset(AW::Vector());
378            drag_box( device, 2, motion_event.x - aedw->drag_x_correcting, motion_event.y - aedw->drag_y_correcting, 0, 0, aedw->selected_entry_of_dlist_left_side->text_for_dragging );
379            aedw->drag_x = motion_event.x;
380            aedw->drag_y = motion_event.y;
381        }
382    }
383}
384
385
386void aed_config_window_horizontal_scroll(AW_window *aw, AW_CL cd1, AW_CL cd2) {
387    AWUSE(aw);AWUSE(cd2);
388    AED_window *aedw = (AED_window *)cd1;
389    AW_device *device;
390
391    device = aedw->config_window->get_device (AW_MIDDLE_AREA  );
392    device->set_filter(AED_F_ALL);
393
394    device->clear(AED_F_ALL);
395    show_config_window_draw_area( device, aedw, aedw->config_window->slider_pos_horizontal, aedw->config_window->slider_pos_vertical,
396                                  aedw->config_window->picture->l, aedw->config_window->top_indent_of_vertical_scrollbar );
397}
398
399
400void aed_config_window_vertical_scroll(AW_window *aw, AW_CL cd1, AW_CL cd2) {
401    AWUSE(aw);AWUSE(cd2);
402    AED_window *aedw = (AED_window *)cd1;
403    AW_device *device;
404
405    device = aedw->config_window->get_device (AW_MIDDLE_AREA  );
406    device->set_filter(AED_F_ALL);
407
408    device->clear(AED_F_ALL);
409    show_config_window_draw_area( device, aedw, aedw->config_window->slider_pos_horizontal, aedw->config_window->slider_pos_vertical,
410                                  aedw->config_window->picture->l, aedw->config_window->top_indent_of_vertical_scrollbar );
411}
412
413
414void aed_config_window_expose_info_area(AW_window *aw, AW_CL cd1, AW_CL cd2) {
415    AWUSE(aw);AWUSE(cd2);
416    AED_window *aedw = (AED_window *)cd1;
417    AW_device *info_device;
418
419    info_device = aedw->config_window->get_device (AW_INFO_AREA  );
420    info_device->set_filter(AED_F_ALL);
421    info_device->clear(AED_F_ALL);
422    info_device->set_offset(AW::Vector());
423    info_device->text( 1, "Anleitung 1", 4, 20, 0.0, AED_F_INFO, (AW_CL)0, (AW_CL)0 );
424    info_device->text( 1, "Anleitung 2", 4, 36, 0.0, AED_F_INFO, (AW_CL)0, (AW_CL)0 );
425}
426
427
428
429void aed_config_window_popdown(AW_window *aw, AW_CL cd1, AW_CL cd2) {
430    AWUSE(aw);AWUSE(cd2);
431    AED_window *aedw = (AED_window *)cd1;
432
433    aedw->config_window->hide();
434}
435
436
437void aed_config_1(AW_window *aw, AW_CL /*cd1*/, AW_CL /*cd2*/) {
438    //    AED_window *aedw = (AED_window *)cd1;
439    aw->set_info_area_height(100);
440}
441
442
443void aed_popup_config_window(AW_window *aw, AW_CL cd1, AW_CL cd2) {
444    AWUSE(aw);AWUSE(cd2);
445    AED_window              *aedw = (AED_window *)cd1;
446    AW_device               *device;
447    AW_device               *click_device;
448    AW_device               *info_device;
449    AW_device               *size_device;
450    AW_world                size_information;
451
452    if (!aedw->config_window_created) {
453        aedw->config_window = new AW_window_menu();
454        aedw->config_window_created = true;
455
456        aedw->config_window->init(aedw->root->aw_root,"EDIT_CONFIG", "ARB_EDIT_CONFIG",200,200);
457        aedw->config_window->create_menu("Window", "W", "no help", AWM_ALL );
458        aedw->config_window->insert_menu_topic(0, "hide",        "h", "no help", AWM_ALL, aed_config_window_popdown, (AW_CL)aedw, (AW_CL)0);
459        aedw->config_window->insert_menu_topic(0, "bigger info", "h", "no help", AWM_ALL, aed_config_1,              (AW_CL)aedw, (AW_CL)0);
460
461
462        aedw->config_window->set_expose_callback (AW_MIDDLE_AREA,               aed_config_window_expose, (AW_CL)aedw, 0 );
463        aedw->config_window->set_resize_callback (AW_MIDDLE_AREA,                   aed_config_window_resize, (AW_CL)aedw, 0 );
464        aedw->config_window->set_input_callback (AW_MIDDLE_AREA,                    aed_config_window_input, (AW_CL)aedw, 0 );
465        aedw->config_window->set_motion_callback (AW_MIDDLE_AREA,                   aed_config_window_motion, (AW_CL)aedw, 0 );
466        aedw->config_window->set_vertical_change_callback(      aed_config_window_vertical_scroll, (AW_CL)aedw, 0 );
467        aedw->config_window->set_horizontal_change_callback(    aed_config_window_horizontal_scroll, (AW_CL)aedw, 0 );
468        aedw->config_window->set_expose_callback (AW_INFO_AREA,     aed_config_window_expose_info_area, (AW_CL)aedw, 0 );
469
470
471        device = aedw->config_window->get_device (AW_MIDDLE_AREA  );
472        device->set_filter(AED_F_ALL);
473        aed_initialize_device( device );
474
475        click_device = aedw->config_window->get_click_device (AW_MIDDLE_AREA,0,0,0,0,0);
476        aed_initialize_device(click_device);
477
478        info_device = aedw->config_window->get_device (AW_INFO_AREA  );
479        aed_initialize_device( info_device );
480
481        size_device = aedw->config_window->get_size_device (AW_MIDDLE_AREA  );
482        aed_initialize_device( size_device );
483
484
485        aedw->config_window->set_vertical_scrollbar_top_indent( 20 );
486
487        device->set_foreground_color( 2, AW_WINDOW_FG );
488
489        aedw->config_window->at           ( 15, 15 );
490        aedw->config_window->callback     ( aed_config_window_popdown, (AW_CL)aedw, (AW_CL)0 );
491        aedw->config_window->create_button( "CLOSE", "DONE", "D" );
492
493        aedw->config_window->set_info_area_height( 100 );
494        aedw->config_window->set_info_area_height( 0 );
495        aedw->config_window->set_bottom_area_height( 0 );
496
497        size_device = aedw->config_window->get_size_device (AW_MIDDLE_AREA  );
498        size_device->set_filter(AED_F_TEXT_1);
499        show_config_window_draw_area( size_device, aedw, 0, 0, 0, 0 );
500        size_device->get_size_information( &size_information );
501        aedw->config_window->tell_scrolled_picture_size( size_information );
502        aedw->config_window->calculate_scrollbars();
503    }
504    aedw->config_window->activate();
505}
506
507
508AED_left_side::AED_left_side( void(*f)(class AED_window *, AED_area_entry *area_entry, char *text), const char *string ) {
509    is_selected = false;
510    previous    = NULL;
511    next        = NULL;
512    text        = new char[(strlen(string)+1)];
513    strcpy( text, string );
514    make_text   = f;
515}
516
517
518AED_left_side::~AED_left_side() {
519    delete text;
520}
521
522
523void AED_dlist_left_side::remove_entry(AED_left_side *to_be_removed) {
524    if ( first == to_be_removed ) {
525        if(to_be_removed->next) {
526            first = to_be_removed->next;
527            to_be_removed->next->previous = NULL;
528        }
529        else
530            first = NULL;
531    }
532    else {
533        to_be_removed->previous->next = to_be_removed->next;
534        if(to_be_removed->next)
535            to_be_removed->next->previous = to_be_removed->previous;
536    }
537    if( last == to_be_removed ) {
538        if( to_be_removed->previous )
539            last = to_be_removed->previous;
540        else
541            last = NULL;
542    }
543    size--;
544}
545
546
547void AED_dlist_left_side::insert_after_entry(AED_left_side *add_after_this, AED_left_side *to_be_inserted) {
548    if( last == add_after_this )
549        last = to_be_inserted;
550    to_be_inserted->next                            = add_after_this->next;
551    to_be_inserted->previous                    = add_after_this;
552    if ( add_after_this->next )
553        add_after_this->next->previous      = to_be_inserted;
554    add_after_this->next                            = to_be_inserted;
555
556    size++;
557}
558
559
560void AED_dlist_left_side::insert_before_entry(AED_left_side *add_before_this, AED_left_side *to_be_inserted) {
561
562    if( (add_before_this)->previous )
563        (add_before_this)->previous->next   = to_be_inserted;
564    else
565        first = to_be_inserted;
566    to_be_inserted->next                            = add_before_this;
567    to_be_inserted->previous                    = add_before_this->previous;
568    add_before_this->previous                   = to_be_inserted;
569
570    size++;
571}
572
573
574void AED_dlist_left_side::append(AED_left_side *to_be_inserted) {
575
576    if(last) {
577        last->next = to_be_inserted;
578        to_be_inserted->previous = last;
579        to_be_inserted->next = NULL;
580    }
581    else {
582        first = last = to_be_inserted;
583        to_be_inserted->previous = NULL;
584        to_be_inserted->next = NULL;
585    }
586    last = to_be_inserted;
587    size++;
588}
Note: See TracBrowser for help on using the repository browser.