fltk/fluid/template_panel.fl
Matthias Melcher 16dae3ea06 Fluid: restructuring and commenting.
tl;dr : making Fluid maintainable, no changes in code execution and logic.

This is a pretty extensive restructuring of the Fluid source tree.
It was neccessary because source and header files were getting
much too big to handle. Many source files had no header, and many
headers declared functions that were in diffrent source files.

Reorganized much of the include statements.
Added comments to some of the files.
Added Doxygen configuration file for standalone Fluid docs.

Tested everything by rebuilding Fluid .fl designs with the resorted
version of Fluid.
2021-12-08 15:52:15 +01:00

264 lines
6.9 KiB
Plaintext

# data file for the Fltk User Interface Designer (fluid)
version 1.0400
header_name {.h}
code_name {.cxx}
comment {//
// FLUID template support for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2020 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 <FL/Fl_Shared_Image.H>} {private local
}
decl {\#include <FL/fl_ask.H>} {private local
}
decl {\#include <FL/fl_string.h>} {private local
}
decl {\#include <FL/filename.H>} {selected private local
}
decl {\#include "../src/flstring.h"} {private local
}
decl {\#include <stdio.h>} {private local
}
decl {\#include <stdlib.h>} {private local
}
decl {\#include <errno.h>} {private local
}
declblock {\#if defined(_WIN32) && !defined(__CYGWIN__)} {after {\#endif // _WIN32 && !__CYGWIN__}
} {
decl {\#include <io.h>} {private local
}
decl {\#else} {private local
}
decl {\#include <unistd.h>} {private local
}
}
Function {make_template_panel()} {open
} {
Fl_Window template_panel {
label {New/Save Template}
callback {Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
if (img) img->release();
template_preview->image(0);
template_browser->deselect();
template_name->value("");
template_instance->value("");
template_panel->hide();}
xywh {455 202 460 355} type Double resizable modal visible
} {
Fl_Browser template_browser {
label {Available Templates:}
callback {if (Fl::event_clicks()) {
template_panel->hide();
return;
}
Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
if (img) img->release();
template_preview->image(0);
template_preview->redraw();
int item = template_browser->value();
if (item <= 1) template_instance->deactivate();
else template_instance->activate();
if (item < 1) {
template_submit->deactivate();
template_delete->deactivate();
return;
}
template_submit->activate();
const char *flfile = (const char *)template_browser->data(item);
if (!flfile) {
template_delete->deactivate();
return;
}
template_name->value(template_browser->text(item));
template_delete->activate();
char pngfile[1024], *ext;
strlcpy(pngfile, flfile, sizeof(pngfile));
if ((ext = strrchr(pngfile, '.')) == NULL) return;
strcpy(ext, ".png");
img = Fl_Shared_Image::get(pngfile);
if (img) {
template_preview->image(img);
template_preview->redraw();
}}
xywh {10 28 180 250} type Hold labelfont 1 align 5 when 3
}
Fl_Box template_preview {
xywh {200 28 250 250} box THIN_DOWN_BOX align 85 resizable
}
Fl_Input template_name {
label {Template Name:}
callback {if (strlen(template_name->value())) {
template_submit->activate();
if (Fl::event_key() == FL_Enter) template_panel->hide();
} else template_submit->deactivate();}
xywh {198 288 252 25} labelfont 1 when 3 textfont 4
}
Fl_Input template_instance {
label {Instance Name:}
xywh {198 288 252 25} labelfont 1 textfont 4 hide
}
Fl_Group {} {
xywh {10 323 440 25}
} {
Fl_Button template_delete {
label {Delete Template}
callback template_delete_cb
xywh {10 323 143 25}
}
Fl_Box {} {
xywh {153 323 126 25} resizable
}
Fl_Button {} {
label Cancel
callback {Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
if (img) img->release();
template_preview->image(0);
template_browser->deselect();
template_name->value("");
template_instance->value("");
template_panel->hide();}
xywh {289 323 72 25}
}
Fl_Return_Button template_submit {
label Save
callback {Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
if (img) img->release();
template_preview->image(0);
template_panel->hide();}
xywh {371 323 79 25}
}
}
}
}
Function {template_clear()} {return_type void
} {
code {int i;
void *filename;
for (i = 1; i <= template_browser->size(); i ++) {
if ((filename = template_browser->data(i)) != NULL) free(filename);
}
template_browser->deselect();
template_browser->clear();} {}
}
Function {template_delete_cb(Fl_Button *, void *)} {return_type void
} {
code {int item = template_browser->value();
if (item < 1) return;
const char *name = template_browser->text(item);
const char *flfile = (const char *)template_browser->data(item);
if (!flfile) return;
if (!fl_choice("Are you sure you want to delete the template \\"%s\\"?",
"Cancel", "Delete", 0, name)) return;
if (fl_unlink(flfile)) {
fl_alert("Unable to delete template \\"%s\\":\\n%s", name, strerror(errno));
return;
}
template_browser->remove(item);
template_browser->do_callback();} {}
}
Function {template_load()} {return_type void
} {
code {int i;
char name[1024], filename[1400], path[1024], *ptr;
struct dirent **files;
int num_files;
fluid_prefs.getUserdataPath(path, 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// @INSTANCE@ for the Fast Light Tool Kit (FLT"
"K).\\n//\\n// Copyright 1998-2020 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// https://www.fltk.org/COPYING.php\\n//\\n// Please see the following page on how to report "
"bugs and issues:\\n//\\n// https://www.fltk.org/bugs.php\\n//\\n} {selected in_source in_head"
"er\\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);
for (i = 0; i < num_files; i ++) {
if (fl_filename_match(files[i]->d_name, "*.fl")) {
// Format the name as the filename with "_" replaced with " "
// and without the trailing ".fl"...
strlcpy(name, files[i]->d_name, sizeof(name));
*strstr(name, ".fl") = '\\0';
for (ptr = name; *ptr; ptr ++) {
if (*ptr == '_') *ptr = ' ';
}
// Add the template to the browser...
snprintf(filename, sizeof(filename), "%s/%s", path, files[i]->d_name);
template_browser->add(name, fl_strdup(filename));
}
free(files[i]);
}
if (num_files > 0) free(files);} {}
}