0a2f05a2fe
Wrote wrong path in #inlude statement under certain conditions. Also removed 'snap' tag if not needed.
299 lines
9.2 KiB
Plaintext
299 lines
9.2 KiB
Plaintext
# data file for the Fltk User Interface Designer (fluid)
|
|
version 1.0400
|
|
header_name {.h}
|
|
code_name {.cxx}
|
|
comment {//
|
|
// Code dialogs for the Fast Light Tool Kit (FLTK).
|
|
//
|
|
// 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
|
|
// file is missing or damaged, see the license at:
|
|
//
|
|
// https://www.fltk.org/COPYING.php
|
|
//
|
|
// Please see the following page on how to report bugs and issues:
|
|
//
|
|
// https://www.fltk.org/bugs.php
|
|
//
|
|
} {in_source in_header
|
|
}
|
|
|
|
decl {\#include "fluid.h"} {private local
|
|
}
|
|
|
|
decl {\#include "file.h"} {private local
|
|
}
|
|
|
|
decl {\#include "../src/flstring.h"} {private local
|
|
}
|
|
|
|
decl {\#include <FL/Fl_Tabs.H>} {private local
|
|
}
|
|
|
|
decl {\#include <FL/Fl_Button.H>} {private local
|
|
}
|
|
|
|
decl {char *sv_source_filename = NULL;} {private local
|
|
}
|
|
|
|
decl {char *sv_header_filename = NULL;} {private local
|
|
}
|
|
|
|
decl {char *sv_design_filename = NULL;} {private local
|
|
}
|
|
|
|
Function {update_sourceview_position()} {
|
|
comment {Update the header and source code highlighting depending on the
|
|
currently selected object
|
|
|
|
The Source View system offers an immediate preview of the code
|
|
files that will be generated by FLUID. It also marks the code
|
|
generated for the last selected item in the header and the source
|
|
file.} open return_type void
|
|
} {
|
|
code {if (!sourceview_panel || !sourceview_panel->visible())
|
|
return;
|
|
if (sv_autoposition->value()==0)
|
|
return;
|
|
if (sourceview_panel && sourceview_panel->visible() && Fl_Type::current) {
|
|
int pos0, pos1;
|
|
if (sv_source->visible_r()) {
|
|
pos0 = Fl_Type::current->code_position;
|
|
pos1 = Fl_Type::current->code_position_end;
|
|
if (pos0>=0) {
|
|
if (pos1<pos0)
|
|
pos1 = pos0;
|
|
sv_source->buffer()->highlight(pos0, pos1);
|
|
int line = sv_source->buffer()->count_lines(0, pos0);
|
|
sv_source->scroll(line, 0);
|
|
}
|
|
}
|
|
if (sv_header->visible_r()) {
|
|
pos0 = Fl_Type::current->header_position;
|
|
pos1 = Fl_Type::current->header_position_end;
|
|
if (pos0>=0) {
|
|
if (pos1<pos0)
|
|
pos1 = pos0;
|
|
sv_header->buffer()->highlight(pos0, pos1);
|
|
int line = sv_header->buffer()->count_lines(0, pos0);
|
|
sv_header->scroll(line, 0);
|
|
}
|
|
}
|
|
}} {}
|
|
}
|
|
|
|
Function {update_sourceview_position_cb(class Fl_Tabs*, void*)} {
|
|
comment {Callback to update the sourceview position.} open return_type void
|
|
} {
|
|
code {// make sure that the selected tab shows the current view
|
|
update_sourceview_cb(0,0);
|
|
// highlight the selected widget in the selected tab
|
|
update_sourceview_position();} {}
|
|
}
|
|
|
|
Function {update_sourceview_cb(class Fl_Button*, void*)} {
|
|
comment {Generate a header, source, strings, or design file in a temporary directory
|
|
and load those into the Code Viewer widgets.} open return_type void
|
|
} {
|
|
code {if (!sourceview_panel || !sourceview_panel->visible())
|
|
return;
|
|
|
|
if (!sv_source_filename) {
|
|
sv_source_filename = (char*)malloc(FL_PATH_MAX);
|
|
fluid_prefs.getUserdataPath(sv_source_filename, FL_PATH_MAX);
|
|
fl_strlcat(sv_source_filename, "source_view_tmp.cxx", FL_PATH_MAX);
|
|
}
|
|
if (!sv_header_filename) {
|
|
sv_header_filename = (char*)malloc(FL_PATH_MAX);
|
|
fluid_prefs.getUserdataPath(sv_header_filename, FL_PATH_MAX);
|
|
fl_strlcat(sv_header_filename, "source_view_tmp.h", FL_PATH_MAX);
|
|
}
|
|
if (!sv_design_filename) {
|
|
sv_design_filename = (char*)malloc(FL_PATH_MAX);
|
|
fluid_prefs.getUserdataPath(sv_design_filename, FL_PATH_MAX);
|
|
fl_strlcat(sv_design_filename, "source_view_tmp.fl", FL_PATH_MAX);
|
|
}
|
|
|
|
if (sv_project->visible_r()) {
|
|
write_file(sv_design_filename);
|
|
int top = sv_project->top_line();
|
|
sv_project->buffer()->loadfile(sv_design_filename);
|
|
sv_project->scroll(top, 0);
|
|
} else if (sv_strings->visible_r()) {
|
|
static const char *exts[] = { ".txt", ".po", ".msg" };
|
|
char fn[FL_PATH_MAX];
|
|
fluid_prefs.getUserdataPath(fn, FL_PATH_MAX);
|
|
fl_filename_setext(fn, FL_PATH_MAX, exts[g_project.i18n_type]);
|
|
write_strings(fn);
|
|
int top = sv_strings->top_line();
|
|
sv_strings->buffer()->loadfile(fn);
|
|
sv_strings->scroll(top, 0);
|
|
} else if (sv_source->visible_r() || sv_header->visible_r()) {
|
|
Fl_String code_file_name_bak = g_project.code_file_name;
|
|
g_project.code_file_name = sv_source_filename;
|
|
Fl_String header_file_name_bak = g_project.header_file_name;
|
|
g_project.header_file_name = sv_header_filename;
|
|
|
|
// generate the code and load the files
|
|
Fd_Code_Writer f;
|
|
// generate files
|
|
if (f.write_code(sv_source_filename, sv_header_filename, true))
|
|
{
|
|
// load file into source editor
|
|
int pos = sv_source->top_line();
|
|
sv_source->buffer()->loadfile(sv_source_filename);
|
|
sv_source->scroll(pos, 0);
|
|
// load file into header editor
|
|
pos = sv_header->top_line();
|
|
sv_header->buffer()->loadfile(sv_header_filename);
|
|
sv_header->scroll(pos, 0);
|
|
// update the source code highlighting
|
|
update_sourceview_position();
|
|
}
|
|
|
|
g_project.code_file_name = code_file_name_bak;
|
|
g_project.header_file_name = header_file_name_bak;
|
|
}} {selected
|
|
}
|
|
}
|
|
|
|
Function {update_sourceview_timer(void*)} {
|
|
comment {This is called by the timer itself
|
|
} open return_type void
|
|
} {
|
|
code {update_sourceview_cb(0,0);} {}
|
|
}
|
|
|
|
Function {sourceview_defer_update()} {open return_type void
|
|
} {
|
|
code {// we will only update earliest 0.5 seconds after the last change, and only
|
|
// if no other change was made, so dragging a widget will not generate any
|
|
// CPU load
|
|
Fl::remove_timeout(update_sourceview_timer, 0);
|
|
Fl::add_timeout(0.5, update_sourceview_timer, 0);} {}
|
|
}
|
|
|
|
Function {sourceview_toggle_visibility()} {
|
|
comment {Show or hide the source code preview.
|
|
The state is stored in the app preferences.
|
|
} open return_type void
|
|
} {
|
|
code {if (!sourceview_panel) {
|
|
make_sourceview();
|
|
sourceview_panel->callback((Fl_Callback*)toggle_sourceview_cb);
|
|
Fl_Preferences svp(fluid_prefs, "sourceview");
|
|
int autorefresh;
|
|
svp.get("autorefresh", autorefresh, 1);
|
|
sv_autorefresh->value(autorefresh);
|
|
int autoposition;
|
|
svp.get("autoposition", autoposition, 1);
|
|
sv_autoposition->value(autoposition);
|
|
int tab;
|
|
svp.get("tab", tab, 0);
|
|
if (tab>=0 && tab<sv_tab->children()) sv_tab->value(sv_tab->child(tab));
|
|
if (!position_window(sourceview_panel,"sourceview_pos", 0, 320, 120, 550, 500)) return;
|
|
}
|
|
|
|
if (sourceview_panel->visible()) {
|
|
sourceview_panel->hide();
|
|
sourceview_item->label("Show Source Code...");
|
|
} else {
|
|
sourceview_panel->show();
|
|
sourceview_item->label("Hide Source Code...");
|
|
update_sourceview_cb(0,0);
|
|
}} {}
|
|
}
|
|
|
|
Function {make_sourceview()} {open
|
|
} {
|
|
Fl_Window sourceview_panel {
|
|
label {Code View}
|
|
callback toggle_sourceview_cb open
|
|
xywh {400 569 520 490} type Double align 80 resizable size_range {384 120 0 0} visible
|
|
} {
|
|
Fl_Tabs sv_tab {
|
|
callback update_sourceview_position_cb open
|
|
xywh {10 10 500 440} selection_color 4 labelcolor 7 resizable
|
|
} {
|
|
Fl_Group {} {
|
|
label Source open
|
|
xywh {10 35 500 415} labelsize 13 resizable
|
|
} {
|
|
Fl_Text_Editor sv_source {
|
|
xywh {20 50 480 390} textfont 4 textsize 11 resizable
|
|
code0 {\#include "CodeEditor.h"}
|
|
code1 {o->linenumber_width(60);}
|
|
code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
|
|
class CodeViewer
|
|
}
|
|
}
|
|
Fl_Group {} {
|
|
label Header open
|
|
xywh {10 35 500 415} labelsize 13 hide
|
|
} {
|
|
Fl_Text_Editor sv_header {
|
|
xywh {20 50 480 390} textfont 4 textsize 11 resizable
|
|
code0 {\#include "CodeEditor.h"}
|
|
code1 {o->linenumber_width(60);}
|
|
code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
|
|
class CodeViewer
|
|
}
|
|
}
|
|
Fl_Group {} {
|
|
label Strings open
|
|
xywh {10 35 500 415} labelsize 13 hide
|
|
} {
|
|
Fl_Text_Display sv_strings {
|
|
xywh {20 50 480 390} textfont 4 textsize 11 resizable
|
|
code1 {o->linenumber_width(60);}
|
|
code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
|
|
class TextViewer
|
|
}
|
|
}
|
|
Fl_Group {} {
|
|
label Project open
|
|
xywh {10 35 500 415} labelsize 13 hide
|
|
} {
|
|
Fl_Text_Display sv_project {
|
|
xywh {20 50 480 390} textfont 4 textsize 11 resizable
|
|
code1 {o->linenumber_width(60);}
|
|
code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
|
|
class TextViewer
|
|
}
|
|
}
|
|
}
|
|
Fl_Group {} {open
|
|
xywh {10 460 500 20}
|
|
} {
|
|
Fl_Button {} {
|
|
label Refresh
|
|
callback update_sourceview_cb
|
|
xywh {10 460 61 20} labelsize 11
|
|
}
|
|
Fl_Light_Button sv_autorefresh {
|
|
label {Auto-Refresh}
|
|
xywh {76 460 91 20} labelsize 11
|
|
code0 {o->callback((Fl_Callback*)update_sourceview_cb);}
|
|
}
|
|
Fl_Light_Button sv_autoposition {
|
|
label {Auto-Position}
|
|
xywh {172 460 89 20} labelsize 11
|
|
}
|
|
Fl_Button {} {
|
|
label Close
|
|
callback toggle_sourceview_b_cb
|
|
xywh {460 460 50 20} labelsize 11
|
|
}
|
|
Fl_Box {} {
|
|
xywh {265 460 190 20} resizable
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
comment {
|
|
//} {in_source in_header
|
|
}
|