Reorganized Fluid Template feature (STR #3336).
This commit is contained in:
parent
af8e406f88
commit
d6294ac2fc
@ -145,6 +145,7 @@ Changes in FLTK 1.4.0 Released: ??? ?? 2019
|
|||||||
Bug Fixes
|
Bug Fixes
|
||||||
|
|
||||||
- (add new items here)
|
- (add new items here)
|
||||||
|
- Reorganized Fluid Template feature (STR #3336).
|
||||||
- Updated Fluid documentation and image (STR #3328).
|
- Updated Fluid documentation and image (STR #3328).
|
||||||
- Duplicating Widget Class in Fluid no longer crashes (STR #3445).
|
- Duplicating Widget Class in Fluid no longer crashes (STR #3445).
|
||||||
- Fl_Check_Browser::add(item) now accepts NULL (STR #3498).
|
- Fl_Check_Browser::add(item) now accepts NULL (STR #3498).
|
||||||
|
@ -16,6 +16,7 @@ Subchapters:
|
|||||||
\li \ref fluid_compiling_fl_files
|
\li \ref fluid_compiling_fl_files
|
||||||
\li \ref fluid_tutorial
|
\li \ref fluid_tutorial
|
||||||
\li \ref fluid_references
|
\li \ref fluid_references
|
||||||
|
\li \ref fluid_templates
|
||||||
\li \ref fluid_i18n
|
\li \ref fluid_i18n
|
||||||
\li \ref fluid_limitations
|
\li \ref fluid_limitations
|
||||||
|
|
||||||
@ -1445,6 +1446,33 @@ RGB or grayscale data to the source file. PNG images can provide
|
|||||||
a full alpha channel for partial transparency, and FLTK supports
|
a full alpha channel for partial transparency, and FLTK supports
|
||||||
this as best as possible on each platform.
|
this as best as possible on each platform.
|
||||||
|
|
||||||
|
\section fluid_templates FLUID Templates
|
||||||
|
|
||||||
|
\par
|
||||||
|
Fluid can store a number of project templates. Project templates
|
||||||
|
are great for storing often used boilerplate code for fast access.
|
||||||
|
A common use would be projects with readily prepared copyright
|
||||||
|
messages.
|
||||||
|
|
||||||
|
\par
|
||||||
|
A sample template for FLTK projects is included with Fluid.
|
||||||
|
|
||||||
|
\par
|
||||||
|
Choose "File > New From Template..." to create a new project
|
||||||
|
based on a template file. In the template dialog, select one of
|
||||||
|
the existing templates. All occurrences of the word
|
||||||
|
"@INSTANCE@" in the template are replaced with the text in
|
||||||
|
the "Instance" field. To create the new project click "New".
|
||||||
|
|
||||||
|
\par
|
||||||
|
To add your current project as a new template, choose
|
||||||
|
"File > Save As Template...", fill in a name, and click "Save".
|
||||||
|
|
||||||
|
\par
|
||||||
|
To delete a template, open the template dialog using
|
||||||
|
"New from Template" or "Save As Template", the select any
|
||||||
|
existing template, and click "Delete Template".
|
||||||
|
|
||||||
\section fluid_i18n Internationalization with FLUID
|
\section fluid_i18n Internationalization with FLUID
|
||||||
|
|
||||||
FLUID supports internationalization (I18N for short) of label
|
FLUID supports internationalization (I18N for short) of label
|
||||||
|
@ -581,13 +581,21 @@ void new_cb(Fl_Widget *, void *v) {
|
|||||||
"Save", "Don't Save"))
|
"Save", "Don't Save"))
|
||||||
{
|
{
|
||||||
case 0 : /* Cancel */
|
case 0 : /* Cancel */
|
||||||
return;
|
return;
|
||||||
case 1 : /* Save */
|
case 1 : /* Save */
|
||||||
save_cb(NULL, NULL);
|
save_cb(NULL, NULL);
|
||||||
if (modflag) return; // Didn't save!
|
if (modflag) return; // Didn't save!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear the current data...
|
||||||
|
delete_all();
|
||||||
|
set_filename(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void new_from_template_cb(Fl_Widget *w, void *v) {
|
||||||
|
new_cb(w, v);
|
||||||
|
|
||||||
// Setup the template panel...
|
// Setup the template panel...
|
||||||
if (!template_panel) make_template_panel();
|
if (!template_panel) make_template_panel();
|
||||||
|
|
||||||
@ -602,17 +610,17 @@ void new_cb(Fl_Widget *, void *v) {
|
|||||||
template_instance->deactivate();
|
template_instance->deactivate();
|
||||||
template_instance->value("");
|
template_instance->value("");
|
||||||
|
|
||||||
template_delete->hide();
|
template_delete->show();
|
||||||
|
|
||||||
template_submit->label("New");
|
template_submit->label("New");
|
||||||
template_submit->deactivate();
|
template_submit->deactivate();
|
||||||
|
|
||||||
template_panel->label("New");
|
template_panel->label("New");
|
||||||
|
|
||||||
if ( template_browser->size() == 1 ) { // only one item?
|
//if ( template_browser->size() == 1 ) { // only one item?
|
||||||
template_browser->value(1); // select it
|
template_browser->value(1); // select it
|
||||||
template_browser->do_callback();
|
template_browser->do_callback();
|
||||||
}
|
//}
|
||||||
|
|
||||||
// Show the panel and wait for the user to do something...
|
// Show the panel and wait for the user to do something...
|
||||||
template_panel->show();
|
template_panel->show();
|
||||||
@ -622,10 +630,6 @@ void new_cb(Fl_Widget *, void *v) {
|
|||||||
int item = template_browser->value();
|
int item = template_browser->value();
|
||||||
if (item < 1) return;
|
if (item < 1) return;
|
||||||
|
|
||||||
// Clear the current data...
|
|
||||||
delete_all();
|
|
||||||
set_filename(NULL);
|
|
||||||
|
|
||||||
// Load the template, if any...
|
// Load the template, if any...
|
||||||
const char *tname = (const char *)template_browser->data(item);
|
const char *tname = (const char *)template_browser->data(item);
|
||||||
|
|
||||||
@ -1041,14 +1045,15 @@ void toggle_sourceview_cb(Fl_Double_Window *, void *);
|
|||||||
|
|
||||||
Fl_Menu_Item Main_Menu[] = {
|
Fl_Menu_Item Main_Menu[] = {
|
||||||
{"&File",0,0,0,FL_SUBMENU},
|
{"&File",0,0,0,FL_SUBMENU},
|
||||||
{"&New...", FL_COMMAND+'n', new_cb, 0},
|
{"&New", FL_COMMAND+'n', new_cb, 0},
|
||||||
{"&Open...", FL_COMMAND+'o', open_cb, 0},
|
{"&Open...", FL_COMMAND+'o', open_cb, 0},
|
||||||
{"&Insert...", FL_COMMAND+'i', open_cb, (void*)1, FL_MENU_DIVIDER},
|
{"&Insert...", FL_COMMAND+'i', open_cb, (void*)1, FL_MENU_DIVIDER},
|
||||||
{"&Save", FL_COMMAND+'s', save_cb, 0},
|
{"&Save", FL_COMMAND+'s', save_cb, 0},
|
||||||
{"Save &As...", FL_COMMAND+FL_SHIFT+'s', save_cb, (void*)1},
|
{"Save &As...", FL_COMMAND+FL_SHIFT+'s', save_cb, (void*)1},
|
||||||
{"Sa&ve A Copy...", 0, save_cb, (void*)2},
|
{"Sa&ve A Copy...", 0, save_cb, (void*)2},
|
||||||
{"Save &Template...", 0, save_template_cb},
|
|
||||||
{"&Revert...", 0, revert_cb, 0, FL_MENU_DIVIDER},
|
{"&Revert...", 0, revert_cb, 0, FL_MENU_DIVIDER},
|
||||||
|
{"New &From Template...", FL_COMMAND+'N', new_from_template_cb, 0},
|
||||||
|
{"Save As &Template...", 0, save_template_cb, 0, FL_MENU_DIVIDER},
|
||||||
{"&Print...", FL_COMMAND+'p', print_menu_cb},
|
{"&Print...", FL_COMMAND+'p', print_menu_cb},
|
||||||
{"Write &Code...", FL_COMMAND+FL_SHIFT+'c', write_cb, 0},
|
{"Write &Code...", FL_COMMAND+FL_SHIFT+'c', write_cb, 0},
|
||||||
{"&Write Strings...", FL_COMMAND+FL_SHIFT+'w', write_strings_cb, 0, FL_MENU_DIVIDER},
|
{"&Write Strings...", FL_COMMAND+FL_SHIFT+'w', write_strings_cb, 0, FL_MENU_DIVIDER},
|
||||||
|
@ -220,6 +220,30 @@ void template_load() {
|
|||||||
fluid_prefs.getUserdataPath(path, sizeof(path));
|
fluid_prefs.getUserdataPath(path, sizeof(path));
|
||||||
strlcat(path, "templates", sizeof(path));
|
strlcat(path, "templates", sizeof(path));
|
||||||
|
|
||||||
|
int sample_templates_generated = 0;
|
||||||
|
fluid_prefs.get("sample_templates_generated", sample_templates_generated, 0);
|
||||||
|
|
||||||
|
if (!sample_templates_generated) {
|
||||||
|
strcpy(filename, path);
|
||||||
|
strcat(filename, "/FLTK_License.fl");
|
||||||
|
FILE *f = fopen(filename, "wb");
|
||||||
|
if (f) {
|
||||||
|
fputs(
|
||||||
|
"# data file for the Fltk User Interface Designer (fluid)\nversion 1.0400\nheader_name {.h}\n"
|
||||||
|
"code_name {.cxx}\ncomment {//\n// \"$Id$\"\n//\n// @INSTANCE@ for the Fast Light Tool Kit (FLT"
|
||||||
|
"K).\n//\n// Copyright 1998-2019 by Bill Spitzak and others.\n//\n// This library is free sof"
|
||||||
|
"tware. Distribution and use rights are outlined in\n// the file \"COPYING\" which should have "
|
||||||
|
"been included with this file. If this\n// file is missing or damaged, see the license at:\n"
|
||||||
|
"//\n// http://www.fltk.org/COPYING.php\n//\n// Please report all bugs and problems on th"
|
||||||
|
"e following page:\n//\n// http://www.fltk.org/str.php\n//\n} {selected in_source in_head"
|
||||||
|
"er\n}\n\ncomment {\n//\n// End of \"$Id$\".\n//} {in_source in_header\n}\n", f);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
sample_templates_generated = 1;
|
||||||
|
fluid_prefs.set("sample_templates_generated", sample_templates_generated);
|
||||||
|
fluid_prefs.flush();
|
||||||
|
}
|
||||||
|
|
||||||
num_files = fl_filename_list(path, &files);
|
num_files = fl_filename_list(path, &files);
|
||||||
|
|
||||||
for (i = 0; i < num_files; i ++) {
|
for (i = 0; i < num_files; i ++) {
|
||||||
|
@ -129,7 +129,7 @@ if (img) {
|
|||||||
callback {if (strlen(template_name->value())) {
|
callback {if (strlen(template_name->value())) {
|
||||||
template_submit->activate();
|
template_submit->activate();
|
||||||
if (Fl::event_key() == FL_Enter) template_panel->hide();
|
if (Fl::event_key() == FL_Enter) template_panel->hide();
|
||||||
} else template_submit->deactivate();} selected
|
} else template_submit->deactivate();}
|
||||||
xywh {198 288 252 25} labelfont 1 when 3 textfont 4
|
xywh {198 288 252 25} labelfont 1 when 3 textfont 4
|
||||||
}
|
}
|
||||||
Fl_Input template_instance {
|
Fl_Input template_instance {
|
||||||
@ -206,7 +206,7 @@ template_browser->remove(item);
|
|||||||
template_browser->do_callback();} {}
|
template_browser->do_callback();} {}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function {template_load()} {return_type void
|
Function {template_load()} {open return_type void
|
||||||
} {
|
} {
|
||||||
code {int i;
|
code {int i;
|
||||||
char name[1024], filename[1024], path[1024], *ptr;
|
char name[1024], filename[1024], path[1024], *ptr;
|
||||||
@ -216,6 +216,30 @@ int num_files;
|
|||||||
fluid_prefs.getUserdataPath(path, sizeof(path));
|
fluid_prefs.getUserdataPath(path, sizeof(path));
|
||||||
strlcat(path, "templates", sizeof(path));
|
strlcat(path, "templates", sizeof(path));
|
||||||
|
|
||||||
|
int sample_templates_generated = 0;
|
||||||
|
fluid_prefs.get("sample_templates_generated", sample_templates_generated, 0);
|
||||||
|
|
||||||
|
if (!sample_templates_generated) {
|
||||||
|
strcpy(filename, path);
|
||||||
|
strcat(filename, "/FLTK_License.fl");
|
||||||
|
FILE *f = fopen(filename, "wb");
|
||||||
|
if (f) {
|
||||||
|
fputs(
|
||||||
|
"\# data file for the Fltk User Interface Designer (fluid)\\nversion 1.0400\\nheader_name {.h}\\n"
|
||||||
|
"code_name {.cxx}\\ncomment {//\\n// \\"$Id$\\"\\n//\\n// @INSTANCE@ for the Fast Light Tool Kit (FLT"
|
||||||
|
"K).\\n//\\n// Copyright 1998-2019 by Bill Spitzak and others.\\n//\\n// This library is free sof"
|
||||||
|
"tware. Distribution and use rights are outlined in\\n// the file \\"COPYING\\" which should have "
|
||||||
|
"been included with this file. If this\\n// file is missing or damaged, see the license at:\\n"
|
||||||
|
"//\\n// http://www.fltk.org/COPYING.php\\n//\\n// Please report all bugs and problems on th"
|
||||||
|
"e following page:\\n//\\n// http://www.fltk.org/str.php\\n//\\n} {selected in_source in_head"
|
||||||
|
"er\\n}\\n\\ncomment {\\n//\\n// End of \\"$Id$\\".\\n//} {in_source in_header\\n}\\n", f);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
sample_templates_generated = 1;
|
||||||
|
fluid_prefs.set("sample_templates_generated", sample_templates_generated);
|
||||||
|
fluid_prefs.flush();
|
||||||
|
}
|
||||||
|
|
||||||
num_files = fl_filename_list(path, &files);
|
num_files = fl_filename_list(path, &files);
|
||||||
|
|
||||||
for (i = 0; i < num_files; i ++) {
|
for (i = 0; i < num_files; i ++) {
|
||||||
@ -237,7 +261,8 @@ for (i = 0; i < num_files; i ++) {
|
|||||||
free(files[i]);
|
free(files[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num_files > 0) free(files);} {}
|
if (num_files > 0) free(files);} {selected
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
comment {
|
comment {
|
||||||
|
Loading…
Reference in New Issue
Block a user