diff options
| author | Matthias Melcher <github@matthiasm.com> | 2023-03-18 17:33:27 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-18 17:33:27 +0100 |
| commit | 5c482f9d9b357e098f955351f425bc985254ff28 (patch) | |
| tree | c410588ac915886aea4bef3478a12d682bb5ad9f /fluid/alignment_panel.fl | |
| parent | a9fb6a979fbcf31c2405d61ea720879bd5507d02 (diff) | |
Fix and update alignment #346 (#701)
* interactive layout alignment rewritten
* interface for new alignment rules
* new alignment dialog box
* user defined layout rules added
* layout rules can be stored in projects, settings, and external files
* Valgrind verification
Diffstat (limited to 'fluid/alignment_panel.fl')
| -rw-r--r-- | fluid/alignment_panel.fl | 589 |
1 files changed, 492 insertions, 97 deletions
diff --git a/fluid/alignment_panel.fl b/fluid/alignment_panel.fl index c1f0305da..3f3abb04d 100644 --- a/fluid/alignment_panel.fl +++ b/fluid/alignment_panel.fl @@ -2,10 +2,39 @@ version 1.0400 header_name {.h} code_name {.cxx} +snap { + ver 1 + current_suite {FLUID (based on FLTK)} + current_preset 1 + suite { + name {FLUID (based on FLTK)} + preset { 1 + 15 15 15 15 0 0 + 10 10 10 10 0 0 + 25 25 + 20 10 4 20 4 8 + 0 14 0 14 + } + preset { 1 + 10 10 10 10 0 0 + 10 10 10 10 0 0 + 20 20 + 20 10 5 20 5 5 + 0 11 0 11 + } + preset { 1 + 10 10 10 10 0 0 + 10 10 10 10 0 0 + 18 18 + 16 8 2 16 4 2 + 0 10 0 10 + } + } +} comment {// // Setting and shell dialogs for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2020 by Bill Spitzak and others. +// Copyright 1998-2023 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -26,18 +55,24 @@ decl {\#include "fluid.h"} {public global decl {\#include "widget_browser.h"} {public global } +decl {\#include "Fd_Snap_Action.h"} {public global +} + decl {\#include "shell_command.h"} {public global } decl {\#include <FL/Fl_Text_Buffer.H>} {public local } -decl {\#include <FL/Fl_Text_Display.H>} {public local +decl {\#include <FL/Fl_Text_Display.H>} {selected public local } decl {\#include <FL/filename.H>} {public local } +decl {\#include <FL/fl_string_functions.h>} {public local +} + decl {\#include <FL/Fl_Scheme_Choice.H>} {public local } @@ -60,8 +95,8 @@ decl {extern struct Fl_Menu_Item *dbmanager_item;} {public local Function {make_project_window()} {open } { Fl_Window project_window { - label {Project Settings} - xywh {472 246 399 298} type Double + label {Project Settings} open + xywh {739 251 399 298} type Double code0 {\#include <FL/Fl_Preferences.H>} code1 {\#include <FL/Fl_Tooltip.H>} modal visible } { @@ -126,15 +161,15 @@ set_modflag(-1, -1);} } { MenuItem {} { label None - xywh {0 0 100 20} + xywh {0 0 100 20} labelsize 14 } MenuItem {} { label {GNU gettext} - xywh {0 0 100 20} + xywh {0 0 100 20} labelsize 14 } MenuItem {} { label {POSIX catgets} - xywh {0 0 100 20} + xywh {0 0 100 20} labelsize 14 } } Fl_Input i18n_include_input { @@ -182,7 +217,7 @@ Function {make_settings_window()} {open } { Fl_Window settings_window { label {GUI Settings} open - xywh {701 666 360 355} type Double resizable + xywh {722 580 360 355} type Double resizable code0 {o->size_range(o->w(), o->h());} non_modal visible } { Fl_Choice scheme_choice { @@ -293,7 +328,7 @@ Function {make_shell_window()} {open } { Fl_Window shell_window { label {Shell Command} open - xywh {502 196 375 208} type Double resizable modal size_range {375 208 1024 208} visible + xywh {390 202 375 208} type Double resizable modal size_range {375 208 1024 208} visible } { Fl_Group {} {open xywh {0 0 375 165} resizable @@ -323,7 +358,7 @@ if (g_shell_use_fl_settings) { } else { shell_prefs_get(); } -update_shell_window();} selected +update_shell_window();} tooltip {check to read and write shell command from and to .fl files} xywh {82 110 180 19} down_box DOWN_BOX labelsize 12 } Fl_Box {} { @@ -390,109 +425,469 @@ shell_run_window->hide();} } } +decl {Fl_Menu_Item *w_layout_menu_storage[4];} {private global +} + Function {make_layout_window()} {open } { Fl_Window grid_window { label {Layout Settings} - xywh {745 303 310 245} type Double non_modal visible + callback {propagate_load(o, v);} open + xywh {392 444 320 491} type Double non_modal visible } { - Fl_Input horizontal_input { - label x - user_data 1 user_data_type long - callback grid_cb - tooltip {Horizontal grid spacing.} xywh {116 10 50 25} type Int box THIN_DOWN_BOX align 8 - code0 {o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);} - } - Fl_Input vertical_input { - label pixels - user_data 2 user_data_type long - callback grid_cb - tooltip {Vertical grid spacing.} xywh {179 10 50 25} type Int box THIN_DOWN_BOX align 8 - code0 {o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);} - } - Fl_Input snap_input { - label {pixel snap} - user_data 3 user_data_type long - callback grid_cb - tooltip {Snap to grid within this many pixels.} xywh {116 45 50 25} type Int box THIN_DOWN_BOX align 8 - code0 {o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);} - } - Fl_Check_Button guides_toggle { - label {Show Guides} - user_data 4 user_data_type long - callback guides_cb - tooltip {Show distance and alignment guides in overlay} xywh {116 80 110 25} down_box DOWN_BOX + Fl_Box {} { + label {Layout:} + xywh {10 10 60 24} labelfont 1 labelsize 11 align 24 + } + Fl_Choice layout_choice { + callback {if (v == LOAD) { + o->value(g_layout_list.current_suite()); + } else { + int index = o->value(); + g_layout_list.current_suite(index); + g_layout_list.update_dialogs(); + }} + xywh {70 10 187 24} down_box BORDER_BOX + } { + MenuItem {} { + label FLTK + xywh {0 0 31 20} labelsize 14 + } + MenuItem {} { + label Grid + xywh {0 0 31 20} labelsize 14 + } } Fl_Button {} { - label Close - callback {grid_window->hide();} - tooltip {Close this dialog.} xywh {240 210 60 25} + label {+} + callback {// Clone the current layout suite + +if (v == LOAD) return; + +Fl_String old_name = "Copy of "; +old_name.append(g_layout_list[g_layout_list.current_suite()].name_); +const char *new_name = fl_input("Enter a name for the new layout:", old_name.c_str()); +if (new_name == NULL) + return; + +g_layout_list.add(new_name); +g_layout_list.update_dialogs();} + xywh {257 10 24 24} + } + Fl_Menu_Button w_layout_menu { + callback {if (v == LOAD) { + Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; + if (suite.storage_ == FD_STORE_INTERNAL) { + w_layout_menu_rename->deactivate(); + for (int i=1; i<4; i++) w_layout_menu_storage[i]->deactivate(); + w_layout_menu_delete->deactivate(); + } else { + w_layout_menu_rename->activate(); + for (int i=1; i<4; i++) w_layout_menu_storage[i]->activate(); + w_layout_menu_delete->activate(); + } + w_layout_menu_storage[suite.storage_]->setonly(); +}} + xywh {281 10 24 24} + } { + MenuItem w_layout_menu_rename { + label {Rename...} + callback {// Rename the current layout suite + +Fl_String old_name = g_layout_list[g_layout_list.current_suite()].name_; +const char *new_name = fl_input("Enter a new name for the layout:", old_name.c_str()); +if (new_name == NULL) + return; + +g_layout_list.rename(new_name); +g_layout_list.update_dialogs();} + xywh {0 0 31 20} labelsize 14 divider + } + MenuItem {w_layout_menu_storage[0]} { + label {@fd_beaker FLUID Built-In} + callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; +suite.storage(FD_STORE_INTERNAL); +g_layout_list.update_dialogs();} + xywh {0 0 31 20} type Radio labelsize 14 deactivate + } + MenuItem {w_layout_menu_storage[1]} { + label {@fd_user User Preference} + callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; +suite.storage(FD_STORE_USER); +g_layout_list.update_dialogs();} + xywh {0 0 31 20} type Radio labelsize 14 + } + MenuItem {w_layout_menu_storage[2]} { + label {@fd_project Store in .fl Project File} + callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; +suite.storage(FD_STORE_PROJECT); +g_layout_list.update_dialogs();} + xywh {0 0 31 20} type Radio labelsize 14 + } + MenuItem {w_layout_menu_storage[3]} { + label {@fd_file Store in External File} + callback {Fd_Layout_Suite &suite = g_layout_list[g_layout_list.current_suite()]; +suite.storage(FD_STORE_FILE); +g_layout_list.update_dialogs();} + xywh {0 0 31 20} type Radio labelsize 14 divider + } + MenuItem w_layout_menu_load { + label {Load...} + callback {// Give the user a file chooser and load that file +Fl_Native_File_Chooser fnfc; +fnfc.title("Load Layout Settings:"); +fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE); +fnfc.options(Fl_Native_File_Chooser::USE_FILTER_EXT); +fnfc.filter("FLUID Layouts\\t*.fll\\n"); +if (fnfc.show() != 0) return; +const char *new_filename = fnfc.filename(); +if (!new_filename) return; +g_layout_list.load(new_filename); +//g_layout_list.current_suite(n); +g_layout_list.update_dialogs();} + xywh {0 0 31 20} labelsize 14 + } + MenuItem w_layout_menu_save { + label {Save...} + callback {// Give the user a file chooser with a suggested name + Fl_Native_File_Chooser fnfc; + fnfc.title("Save Layout Settings:"); + fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); + fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM | Fl_Native_File_Chooser::USE_FILTER_EXT); + fnfc.filter("FLUID Layouts\\t*.fll\\n"); + if (g_layout_list.filename_) { + char *fn = fl_strdup(g_layout_list.filename_); + char *name = (char*)fl_filename_name(g_layout_list.filename_); + if (name > fn) { + name[-1] = 0; + fnfc.directory(fn); + fnfc.preset_file(name); + ::free(fn); + } else if (name) { + fnfc.preset_file(name); + ::free(fn); + } + } + if (fnfc.show() != 0) return; + const char *new_filename = fnfc.filename(); + if (!new_filename) return; + if (g_layout_list.filename_) + ::free(g_layout_list.filename_); + g_layout_list.filename_ = fl_strdup(new_filename); + g_layout_list.save(new_filename);} + xywh {0 0 31 20} labelsize 14 divider + code0 {\#include <FL/Fl_Native_File_Chooser.H>} + } + MenuItem w_layout_menu_delete { + label Delete + callback {// remove the current suite + +g_layout_list.remove(g_layout_list.current_suite()); +g_layout_list.update_dialogs();} + xywh {0 0 31 20} labelsize 14 + } + } + Fl_Box {} { + label {Preset:} + xywh {10 39 60 20} labelfont 1 labelsize 11 align 24 + } + Fl_Group {} { + callback propagate_load open + xywh {70 39 235 20} labelsize 11 + } { + Fl_Button {preset_choice[0]} { + label Application + user_data 0 user_data_type long + callback edit_layout_preset_cb + xywh {70 39 78 20} type Radio value 1 selection_color 45 labelsize 11 + } + Fl_Button {preset_choice[1]} { + label Dialog + user_data 1 user_data_type long + callback edit_layout_preset_cb + xywh {148 39 79 20} type Radio selection_color 45 labelsize 11 + } + Fl_Button {preset_choice[2]} { + label Toolbox + user_data 2 user_data_type long + callback edit_layout_preset_cb + xywh {227 39 78 20} type Radio selection_color 45 labelsize 11 + } + } + Fl_Box {} { + label {---- Window ----} + xywh {70 64 235 20} labelfont 1 labelsize 11 align 20 + } + Fl_Box {} { + label {Margin:} + xywh {10 99 60 20} labelsize 11 align 24 + } + Fl_Value_Input {} { + label {Left:} + callback {if (v == LOAD) { + o->value((double)layout->left_window_margin); +} else { + layout->left_window_margin = (int)o->value(); +}} + xywh {70 99 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Top:} + callback {if (v == LOAD) { + o->value((double)layout->top_window_margin); +} else { + layout->top_window_margin = (int)o->value(); +}} + xywh {130 99 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Right:} + callback {if (v == LOAD) { + o->value((double)layout->right_window_margin); +} else { + layout->right_window_margin = (int)o->value(); +}} + xywh {190 99 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Bottom:} + callback {if (v == LOAD) { + o->value((double)layout->bottom_window_margin); +} else { + layout->bottom_window_margin = (int)o->value(); +}} + xywh {250 99 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 } Fl_Box {} { label {Grid:} - xywh {47 10 70 25} labelfont 1 align 24 + xywh {17 133 53 20} labelsize 11 align 24 + } + Fl_Value_Input {} { + label {Horizontal:} + callback {if (v == LOAD) { + o->value((double)layout->window_grid_x); +} else { + layout->window_grid_x = (int)o->value(); +}} + xywh {70 133 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Vertical:} + callback {if (v == LOAD) { + o->value((double)layout->window_grid_y); +} else { + layout->window_grid_y = (int)o->value(); +}} + xywh {130 133 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 } Fl_Box {} { - label {Widget Size:} - xywh {10 115 107 25} labelfont 1 align 24 + label {---- Group ----} + xywh {70 158 235 20} labelfont 1 labelsize 11 align 20 } - Fl_Group {} {open - xywh {105 115 192 75} + Fl_Box {} { + label {Margin:} + xywh {10 193 60 20} labelsize 11 align 24 + } + Fl_Value_Input {} { + label {Left:} + callback {if (v == LOAD) { + o->value((double)layout->left_group_margin); +} else { + layout->left_group_margin = (int)o->value(); +}} + xywh {70 193 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Top:} + callback {if (v == LOAD) { + o->value((double)layout->top_group_margin); +} else { + layout->top_group_margin = (int)o->value(); +}} + xywh {130 193 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Right:} + callback {if (v == LOAD) { + o->value((double)layout->right_group_margin); +} else { + layout->right_group_margin = (int)o->value(); +}} + xywh {190 193 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Bottom:} + callback {if (v == LOAD) { + o->value((double)layout->bottom_group_margin); +} else { + layout->bottom_group_margin = (int)o->value(); +}} + xywh {250 193 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Box {} { + label {Grid:} + xywh {17 227 53 20} labelsize 11 align 24 + } + Fl_Value_Input {} { + label {Horizontal:} + callback {if (v == LOAD) { + o->value((double)layout->group_grid_x); +} else { + layout->group_grid_x = (int)o->value(); +}} + xywh {70 227 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Vertical:} + callback {if (v == LOAD) { + o->value((double)layout->group_grid_y); +} else { + layout->group_grid_y = (int)o->value(); +}} + xywh {130 227 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Box {} { + label {---- Tabs ----} + xywh {70 252 235 20} labelfont 1 labelsize 11 align 20 + } + Fl_Box {} { + label {Margin:} + xywh {10 287 60 20} labelsize 11 align 24 + } + Fl_Value_Input {} { + label {Top:} + callback {if (v == LOAD) { + o->value((double)layout->top_tabs_margin); +} else { + layout->top_tabs_margin = (int)o->value(); +}} + xywh {70 287 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Bottom:} + callback {if (v == LOAD) { + o->value((double)layout->bottom_tabs_margin); +} else { + layout->bottom_tabs_margin = (int)o->value(); +}} + xywh {130 287 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Box {} { + label {---- Widget ----} + xywh {70 312 235 20} labelfont 1 labelsize 11 align 20 + } + Fl_Box {} { + label {Horizontal:} + xywh {10 347 60 20} labelsize 11 align 24 + } + Fl_Value_Input {} { + label {Minimum:} + callback {if (v == LOAD) { + o->value((double)layout->widget_min_w); +} else { + layout->widget_min_w = (int)o->value(); +}} + xywh {70 346 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Increment:} + callback {if (v == LOAD) { + o->value((double)layout->widget_inc_w); +} else { + layout->widget_inc_w = (int)o->value(); +}} + xywh {130 346 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + label {Gap:} + callback {if (v == LOAD) { + o->value((double)layout->widget_gap_x); +} else { + layout->widget_gap_x = (int)o->value(); +}} + xywh {190 346 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Box {} { + label {Vertical:} + xywh {17 372 53 20} labelsize 11 align 24 + } + Fl_Value_Input {} { + callback {if (v == LOAD) { + o->value((double)layout->widget_min_h); +} else { + layout->widget_min_h = (int)o->value(); +}} + xywh {70 372 55 20} labelsize 11 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + callback {if (v == LOAD) { + o->value((double)layout->widget_inc_h); +} else { + layout->widget_inc_h = (int)o->value(); +}} + xywh {130 372 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Value_Input {} { + callback {if (v == LOAD) { + o->value((double)layout->widget_gap_y); +} else { + layout->widget_gap_y = (int)o->value(); +}} + xywh {190 372 55 20} labelsize 11 align 5 maximum 32767 step 1 textsize 11 + } + Fl_Group {} { + label {Label Font:} + callback propagate_load open + xywh {70 397 200 20} labelsize 11 align 4 } { - Fl_Round_Button {def_widget_size[0]} { - user_data 8 user_data_type long - callback default_widget_size_cb - xywh {115 115 70 25} type Radio down_box ROUND_DOWN_BOX - } - Fl_Box {} { - label tiny - xywh {130 115 50 25} labelsize 8 align 20 - } - Fl_Round_Button {def_widget_size[1]} { - user_data 11 user_data_type long - callback default_widget_size_cb - xywh {202 115 70 25} type Radio down_box ROUND_DOWN_BOX - } - Fl_Box {} { - label small - xywh {218 115 50 25} labelsize 11 align 20 - } - Fl_Round_Button {def_widget_size[2]} { - user_data 14 user_data_type long - callback default_widget_size_cb - xywh {115 140 70 25} type Radio down_box ROUND_DOWN_BOX - } - Fl_Box {} { - label normal - xywh {130 140 50 25} align 20 - } - Fl_Round_Button {def_widget_size[3]} { - user_data 18 user_data_type long - callback default_widget_size_cb - xywh {202 140 90 25} type Radio down_box ROUND_DOWN_BOX - } - Fl_Box {} { - label medium - xywh {218 140 68 25} labelsize 18 align 20 - } - Fl_Round_Button {def_widget_size[4]} { - user_data 24 user_data_type long - callback default_widget_size_cb - xywh {115 165 75 25} type Radio down_box ROUND_DOWN_BOX - } - Fl_Box {} { - label large - xywh {130 165 64 25} labelsize 24 align 20 - } - Fl_Round_Button {def_widget_size[5]} { - user_data 32 user_data_type long - callback default_widget_size_cb - xywh {202 165 95 25} type Radio down_box ROUND_DOWN_BOX + Fl_Choice {} { + callback {if (v == LOAD) { + o->value(layout->labelfont); +} else { + layout->labelfont = (int)o->value(); +}} open + tooltip {The style of the label text.} xywh {70 397 152 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable + code0 {extern Fl_Menu_Item fontmenu[];} + code1 {o->menu(fontmenu);} + } {} + Fl_Value_Input {} { + callback {if (v == LOAD) { + o->value(layout->labelsize); +} else { + layout->labelsize = (int)o->value(); +}} + tooltip {The size of the label text.} xywh {221 397 49 20} labelsize 11 maximum 100 step 1 value 14 textsize 11 } - Fl_Box {} { - label huge - xywh {218 165 76 25} labelsize 32 align 20 + } + Fl_Group {} { + label {Text Font:} + callback propagate_load open + xywh {70 422 200 20} labelsize 11 align 4 + } { + Fl_Choice {} { + callback {if (v == LOAD) { + o->value(layout->textfont); +} else { + layout->textfont = (int)o->value(); +}} open + tooltip {The value text style.} xywh {70 422 152 20} box DOWN_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable + code0 {extern Fl_Menu_Item fontmenu[];} + code1 {o->menu(fontmenu);} + } {} + Fl_Value_Input {} { + callback {if (v == LOAD) { + o->value(layout->textsize); +} else { + layout->textsize = (int)o->value(); +}} + tooltip {The value text size.} xywh {221 422 49 20} labelsize 11 maximum 100 step 1 value 14 textsize 11 } } + Fl_Button {} { + label Close + callback {if (v != LOAD) grid_window->hide();} + tooltip {Close this dialog.} xywh {245 456 60 25} + } } + code {grid_window->do_callback(grid_window, LOAD);} {} } |
