From 2fe7eabb6249c4c9ff0f6e697679a7f9f85ce0eb Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Sat, 10 Apr 2010 22:16:55 +0000 Subject: [PATCH] Completed the alignment pulldown menus for all new alignment styles. Hope you guys like it. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7478 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- fluid/Fl_Widget_Type.cxx | 38 ++++++++-- fluid/widget_panel.cxx | 68 ++++++++++++----- fluid/widget_panel.fl | 154 ++++++++++++++++++++++++++++++--------- fluid/widget_panel.h | 7 +- 4 files changed, 206 insertions(+), 61 deletions(-) diff --git a/fluid/Fl_Widget_Type.cxx b/fluid/Fl_Widget_Type.cxx index 0fde0a682..c47519752 100644 --- a/fluid/Fl_Widget_Type.cxx +++ b/fluid/Fl_Widget_Type.cxx @@ -1170,19 +1170,47 @@ void align_cb(Fl_Button* i, void *v) { } } -void align_text_image_cb(Fl_Menu_Button* i, void *v) { +void align_position_cb(Fl_Choice *i, void *v) { + if (v == LOAD) { + if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate(); + Fl_Menu_Item *mi = (Fl_Menu_Item*)i->menu(); + Fl_Align b = current_widget->o->align() & FL_ALIGN_POSITION_MASK; + for (;mi->text;mi++) { + if (mi->argument()==b) + i->value(mi); + } + } else { + const Fl_Menu_Item *mi = i->menu() + i->value(); + Fl_Align b = Fl_Align(long(mi->user_data())); + int mod = 0; + for (Fl_Type *o = Fl_Type::first; o; o = o->next) { + if (o->selected && o->is_widget()) { + Fl_Widget_Type* q = (Fl_Widget_Type*)o; + Fl_Align x = q->o->align(); + Fl_Align y = (x & ~FL_ALIGN_POSITION_MASK) | b; + //printf("x:%04x y:%04x b:%04x\n", x, y, b); + if (x != y) { + q->o->align(y); + q->redraw(); + mod = 1; + } + } + } + if (mod) set_modflag(1); + } +} + +void align_text_image_cb(Fl_Choice *i, void *v) { if (v == LOAD) { if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate(); Fl_Menu_Item *mi = (Fl_Menu_Item*)i->menu(); Fl_Align b = current_widget->o->align() & FL_ALIGN_IMAGE_MASK; for (;mi->text;mi++) { if (mi->argument()==b) - mi->set(); - else - mi->clear(); + i->value(mi); } } else { - const Fl_Menu_Item *mi = i->mvalue(); + const Fl_Menu_Item *mi = i->menu() + i->value(); Fl_Align b = Fl_Align(long(mi->user_data())); int mod = 0; for (Fl_Type *o = Fl_Type::first; o; o = o->next) { diff --git a/fluid/widget_panel.cxx b/fluid/widget_panel.cxx index b98439825..a169b33e6 100644 --- a/fluid/widget_panel.cxx +++ b/fluid/widget_panel.cxx @@ -33,12 +33,32 @@ static void cb_(Fl_Tabs* o, void* v) { propagate_load((Fl_Group *)o,v); } -Fl_Menu_Item menu_Text[] = { - {"image over text", 0, 0, (void*)(FL_ALIGN_IMAGE_OVER_TEXT), 8, FL_NORMAL_LABEL, 0, 11, 0}, - {"text over image", 0, 0, (void*)(FL_ALIGN_TEXT_OVER_IMAGE), 8, FL_NORMAL_LABEL, 0, 11, 0}, - {"text next to image", 0, 0, (void*)(FL_ALIGN_TEXT_NEXT_TO_IMAGE), 8, FL_NORMAL_LABEL, 0, 11, 0}, - {"image next to text", 0, 0, (void*)(FL_ALIGN_IMAGE_NEXT_TO_TEXT), 8, FL_NORMAL_LABEL, 0, 11, 0}, - {"image is backdrop", 0, 0, (void*)(FL_ALIGN_IMAGE_BACKDROP), 8, FL_NORMAL_LABEL, 0, 11, 0}, +Fl_Menu_Item menu_[] = { + {" Image Alignment ", 0, 0, (void*)(0xFFFFFFFF), 1, FL_NORMAL_LABEL, 2, 11, 0}, + {"image over text", 0, 0, (void*)(FL_ALIGN_IMAGE_OVER_TEXT), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"text over image", 0, 0, (void*)(FL_ALIGN_TEXT_OVER_IMAGE), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"text next to image", 0, 0, (void*)(FL_ALIGN_TEXT_NEXT_TO_IMAGE), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"image next to text", 0, 0, (void*)(FL_ALIGN_IMAGE_NEXT_TO_TEXT), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"image is backdrop", 0, 0, (void*)(FL_ALIGN_IMAGE_BACKDROP), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {0,0,0,0,0,0,0,0,0} +}; + +Fl_Menu_Item menu_1[] = { + {" Inside && Outside ", 0, 0, (void*)(0xFFFFFFFF), 1, FL_NORMAL_LABEL, 2, 11, 0}, + {"top left", 0, 0, (void*)(FL_ALIGN_TOP_LEFT), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"top", 0, 0, (void*)(FL_ALIGN_TOP), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"top right", 0, 0, (void*)(FL_ALIGN_TOP_RIGHT), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"left", 0, 0, (void*)(FL_ALIGN_LEFT), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"center", 0, 0, (void*)(FL_ALIGN_CENTER), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"right", 0, 0, (void*)(FL_ALIGN_RIGHT), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"bottom left", 0, 0, (void*)(FL_ALIGN_BOTTOM_LEFT), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"bottom", 0, 0, (void*)(FL_ALIGN_BOTTOM), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"bottom right", 0, 0, (void*)(FL_ALIGN_BOTTOM_RIGHT), 128, FL_NORMAL_LABEL, 0, 11, 0}, + {" Outside Alignment ", 0, 0, (void*)(0xFFFFFFFF), 1, FL_NORMAL_LABEL, 2, 11, 0}, + {"left top", 0, 0, (void*)(FL_ALIGN_LEFT_TOP), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"right top", 0, 0, (void*)(FL_ALIGN_RIGHT_TOP), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"left bottom", 0, 0, (void*)(FL_ALIGN_LEFT_BOTTOM), 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"right bottom", 0, 0, (void*)(FL_ALIGN_RIGHT_BOTTOM), 0, FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; @@ -50,14 +70,14 @@ Fl_Value_Input *widget_w_input=(Fl_Value_Input *)0; Fl_Value_Input *widget_h_input=(Fl_Value_Input *)0; -Fl_Menu_Item menu_[] = { +Fl_Menu_Item menu_2[] = { {"private", 0, 0, (void*)(0), 0, FL_NORMAL_LABEL, 0, 11, 0}, {"public", 0, 0, (void*)(1), 0, FL_NORMAL_LABEL, 0, 11, 0}, {"protected", 0, 0, (void*)(2), 0, FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} }; -Fl_Menu_Item menu_1[] = { +Fl_Menu_Item menu_3[] = { {"local", 0, 0, (void*)(0), 0, FL_NORMAL_LABEL, 0, 11, 0}, {"global", 0, 0, (void*)(1), 0, FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} @@ -155,7 +175,7 @@ Fl_Double_Window* make_widget_panel() { o->labelsize(11); o->callback((Fl_Callback*)propagate_load); o->align(Fl_Align(FL_ALIGN_LEFT)); - { Fl_Button* o = new Fl_Button(95, 115, 40, 20, "Clip"); + { Fl_Button* o = new Fl_Button(95, 115, 30, 20, "Clip"); o->tooltip("Clip the label to the inside of the widget."); o->type(1); o->selection_color(FL_INACTIVE_COLOR); @@ -163,19 +183,13 @@ Fl_Double_Window* make_widget_panel() { o->callback((Fl_Callback*)align_cb, (void*)(FL_ALIGN_CLIP)); o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); } // Fl_Button* o - { Fl_Button* o = new Fl_Button(140, 115, 40, 20, "Wrap"); + { Fl_Button* o = new Fl_Button(130, 115, 30, 20, "Wrap"); o->tooltip("Wrap the label text."); o->type(1); o->selection_color(FL_INACTIVE_COLOR); o->labelsize(11); o->callback((Fl_Callback*)align_cb, (void*)(FL_ALIGN_WRAP)); } // Fl_Button* o - { Fl_Menu_Button* o = new Fl_Menu_Button(185, 115, 80, 20, "Text/Image"); - o->labelsize(11); - o->callback((Fl_Callback*)align_text_image_cb); - o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); - o->menu(menu_Text); - } // Fl_Menu_Button* o { Fl_Button* o = new Fl_Button(270, 115, 20, 20, "@-1<-"); o->tooltip("Left-align the label."); o->type(1); @@ -183,6 +197,7 @@ Fl_Double_Window* make_widget_panel() { o->labelsize(11); o->labelcolor(FL_INACTIVE_COLOR); o->callback((Fl_Callback*)align_cb, (void*)(FL_ALIGN_LEFT)); + o->hide(); } // Fl_Button* o { Fl_Button* o = new Fl_Button(295, 115, 20, 20, "@-1->"); o->tooltip("Right-align the label."); @@ -191,6 +206,7 @@ Fl_Double_Window* make_widget_panel() { o->labelsize(11); o->labelcolor(FL_INACTIVE_COLOR); o->callback((Fl_Callback*)align_cb, (void*)(FL_ALIGN_RIGHT)); + o->hide(); } // Fl_Button* o { Fl_Button* o = new Fl_Button(320, 115, 20, 20, "@-18"); o->tooltip("Top-align the label."); @@ -199,6 +215,7 @@ Fl_Double_Window* make_widget_panel() { o->labelsize(11); o->labelcolor(FL_INACTIVE_COLOR); o->callback((Fl_Callback*)align_cb, (void*)(FL_ALIGN_TOP)); + o->hide(); } // Fl_Button* o { Fl_Button* o = new Fl_Button(345, 115, 20, 20, "@-12"); o->tooltip("Bottom-align the label."); @@ -207,7 +224,22 @@ Fl_Double_Window* make_widget_panel() { o->labelsize(11); o->labelcolor(FL_INACTIVE_COLOR); o->callback((Fl_Callback*)align_cb, (void*)(FL_ALIGN_BOTTOM)); + o->hide(); } // Fl_Button* o + { Fl_Choice* o = new Fl_Choice(165, 115, 110, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)align_text_image_cb); + o->menu(menu_); + } // Fl_Choice* o + { Fl_Choice* o = new Fl_Choice(280, 115, 85, 20); + o->down_box(FL_BORDER_BOX); + o->labelsize(11); + o->textsize(11); + o->callback((Fl_Callback*)align_position_cb); + o->menu(menu_1); + } // Fl_Choice* o { Fl_Button* o = new Fl_Button(370, 115, 20, 20, "@-3square"); o->tooltip("Show the label inside the widget."); o->type(1); @@ -644,7 +676,7 @@ ive to the origin at construction time"); o->textsize(11); o->callback((Fl_Callback*)name_public_member_cb); o->when(FL_WHEN_CHANGED); - o->menu(menu_); + o->menu(menu_2); } // Fl_Choice* o { Fl_Choice* o = new Fl_Choice(330, 65, 75, 20); o->tooltip("Change widget accessibility."); @@ -653,7 +685,7 @@ ive to the origin at construction time"); o->textsize(11); o->callback((Fl_Callback*)name_public_cb); o->when(FL_WHEN_CHANGED); - o->menu(menu_1); + o->menu(menu_3); } // Fl_Choice* o o->end(); } // Fl_Group* o diff --git a/fluid/widget_panel.fl b/fluid/widget_panel.fl index 3480fe35f..e20cac500 100644 --- a/fluid/widget_panel.fl +++ b/fluid/widget_panel.fl @@ -102,68 +102,152 @@ Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 1 te label Clip user_data FL_ALIGN_CLIP callback align_cb - tooltip {Clip the label to the inside of the widget.} xywh {95 115 40 20} type Toggle selection_color 8 labelsize 11 align 16 + tooltip {Clip the label to the inside of the widget.} xywh {95 115 30 20} type Toggle selection_color 8 labelsize 11 align 16 } Fl_Button {} { label Wrap user_data FL_ALIGN_WRAP callback align_cb - tooltip {Wrap the label text.} xywh {140 115 40 20} type Toggle selection_color 8 labelsize 11 + tooltip {Wrap the label text.} xywh {130 115 30 20} type Toggle selection_color 8 labelsize 11 } - Fl_Menu_Button {} { - label {Text/Image} - callback align_text_image_cb open - xywh {185 115 80 20} labelsize 11 align 20 + Fl_Button {} { + label {@-1<-} + user_data FL_ALIGN_LEFT + callback align_cb + tooltip {Left-align the label.} xywh {270 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide + } + Fl_Button {} { + label {@-1->} + user_data FL_ALIGN_RIGHT + callback align_cb + tooltip {Right-align the label.} xywh {295 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide + } + Fl_Button {} { + label {@-18} + user_data FL_ALIGN_TOP + callback align_cb + tooltip {Top-align the label.} xywh {320 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide + } + Fl_Button {} { + label {@-12} + user_data FL_ALIGN_BOTTOM + callback align_cb + tooltip {Bottom-align the label.} xywh {345 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide + } + Fl_Choice {} { + callback align_text_image_cb open selected + xywh {165 115 110 20} down_box BORDER_BOX labelsize 11 textsize 11 } { + MenuItem {} { + label { Image Alignment } + user_data 0xFFFFFFFF + xywh {145 145 100 20} labelfont 2 labelsize 11 deactivate + } MenuItem {} { label {image over text} user_data FL_ALIGN_IMAGE_OVER_TEXT - xywh {10 10 100 20} type Radio labelsize 11 + xywh {25 25 100 20} labelsize 11 } MenuItem {} { label {text over image} - user_data FL_ALIGN_TEXT_OVER_IMAGE selected - xywh {0 0 100 20} type Radio labelsize 11 + user_data FL_ALIGN_TEXT_OVER_IMAGE + xywh {15 15 100 20} labelsize 11 } MenuItem {} { label {text next to image} user_data FL_ALIGN_TEXT_NEXT_TO_IMAGE - xywh {20 20 100 20} type Radio labelsize 11 + xywh {35 35 100 20} labelsize 11 } MenuItem {} { label {image next to text} user_data FL_ALIGN_IMAGE_NEXT_TO_TEXT - xywh {30 30 100 20} type Radio labelsize 11 + xywh {45 45 100 20} labelsize 11 } MenuItem {} { label {image is backdrop} user_data FL_ALIGN_IMAGE_BACKDROP - xywh {40 40 100 20} type Radio labelsize 11 + xywh {55 55 100 20} labelsize 11 } } - Fl_Button {} { - label {@-1<-} - user_data FL_ALIGN_LEFT - callback align_cb - tooltip {Left-align the label.} xywh {270 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 - } - Fl_Button {} { - label {@-1->} - user_data FL_ALIGN_RIGHT - callback align_cb - tooltip {Right-align the label.} xywh {295 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 - } - Fl_Button {} { - label {@-18} - user_data FL_ALIGN_TOP - callback align_cb - tooltip {Top-align the label.} xywh {320 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 - } - Fl_Button {} { - label {@-12} - user_data FL_ALIGN_BOTTOM - callback align_cb - tooltip {Bottom-align the label.} xywh {345 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 + Fl_Choice {} { + callback align_position_cb open + xywh {280 115 85 20} down_box BORDER_BOX labelsize 11 textsize 11 + } { + MenuItem {} { + label { Inside && Outside } + user_data 0xFFFFFFFF + xywh {135 135 100 20} labelfont 2 labelsize 11 deactivate + } + MenuItem {} { + label {top left} + user_data FL_ALIGN_TOP_LEFT + xywh {45 45 100 20} labelsize 11 + } + MenuItem {} { + label top + user_data FL_ALIGN_TOP + xywh {55 55 100 20} labelsize 11 + } + MenuItem {} { + label {top right} + user_data FL_ALIGN_TOP_RIGHT + xywh {65 65 100 20} labelsize 11 + } + MenuItem {} { + label left + user_data FL_ALIGN_LEFT + xywh {75 75 100 20} labelsize 11 + } + MenuItem {} { + label center + user_data FL_ALIGN_CENTER + xywh {35 35 100 20} labelsize 11 + } + MenuItem {} { + label right + user_data FL_ALIGN_RIGHT + xywh {85 85 100 20} labelsize 11 + } + MenuItem {} { + label {bottom left} + user_data FL_ALIGN_BOTTOM_LEFT + xywh {95 95 100 20} labelsize 11 + } + MenuItem {} { + label bottom + user_data FL_ALIGN_BOTTOM + xywh {105 105 100 20} labelsize 11 + } + MenuItem {} { + label {bottom right} + user_data FL_ALIGN_BOTTOM_RIGHT + xywh {115 115 100 20} labelsize 11 divider + } + MenuItem {} { + label { Outside Alignment } + user_data 0xFFFFFFFF + xywh {125 125 100 20} labelfont 2 labelsize 11 deactivate + } + MenuItem {} { + label {left top} + user_data FL_ALIGN_LEFT_TOP + xywh {135 135 100 20} labelsize 11 + } + MenuItem {} { + label {right top} + user_data FL_ALIGN_RIGHT_TOP + xywh {145 145 100 20} labelsize 11 + } + MenuItem {} { + label {left bottom} + user_data FL_ALIGN_LEFT_BOTTOM + xywh {155 155 100 20} labelsize 11 + } + MenuItem {} { + label {right bottom} + user_data FL_ALIGN_RIGHT_BOTTOM + xywh {45 45 100 20} labelsize 11 + } } Fl_Button {} { label {@-3square} diff --git a/fluid/widget_panel.h b/fluid/widget_panel.h index 3c8dafb4c..94ddda7f4 100644 --- a/fluid/widget_panel.h +++ b/fluid/widget_panel.h @@ -45,8 +45,8 @@ extern void image_browse_cb(Fl_Button*, void*); extern void inactive_cb(Fl_Input*, void*); extern void inactive_browse_cb(Fl_Button*, void*); extern void align_cb(Fl_Button*, void*); -#include -extern void align_text_image_cb(Fl_Menu_Button*, void*); +extern void align_text_image_cb(Fl_Choice*, void*); +extern void align_position_cb(Fl_Choice*, void*); #include #include extern void x_cb(Fl_Value_Input*, void*); @@ -115,9 +115,10 @@ extern void cancel_cb(Fl_Button*, void*); extern void live_mode_cb(Fl_Button*, void*); extern Fl_Button *wLiveMode; Fl_Double_Window* make_widget_panel(); -extern Fl_Menu_Item menu_Text[]; extern Fl_Menu_Item menu_[]; extern Fl_Menu_Item menu_1[]; +extern Fl_Menu_Item menu_2[]; +extern Fl_Menu_Item menu_3[]; #endif //