fltk/fluid/template_panel.fl
2023-11-14 18:14:48 +01:00

281 lines
8.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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_functions.h>} {private local
}
decl {\#include "fluid_filename.h"} {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();} open
xywh {478 284 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 {
label {no preview...} selected
xywh {200 28 250 250} box THIN_DOWN_BOX align 80 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 {} {open
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()} {open 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 < 2) {
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-2023 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);
}
strcpy(filename, path);
strcat(filename, "/1of7GUIs.fl");
f = fopen(filename, "wb");
if (f) {
fputs(
"\# data file for the Fltk User Interface Designer (fluid)\\n version 1.0400\\n header_name {.h}\\n"
"code_name {.cxx}\\n comment {\\n1 of 7GUIs\\n\\n7GUIs was been created as a spin-off of the masters\\n"
"thesis Comparison of Object-Oriented and Functional\\nProgramming for GUI Development by Eugen Kiss at the\\n"
"Human-Computer Interaction group of the Leibniz\\nUniversität Hannover in 2014.\\n\\n"
"https://7guis.github.io/7guis/\\n} {selected in_source not_in_header\\n}\\n\\nFunction {} {open\\n"
"} {\\nFl_Window {} {\\nlabel Counter open\\nxywh {486 292 194 55} type Double resizable visible\\n"
"} {\\nFl_Output counter_widget {\\nxywh {15 15 80 22}\\ncode0 {counter_widget->value(0);}\\n"
"}\\nFl_Button {} {\\nlabel Count\\ncallback {int i = counter_widget->ivalue();\\ni++;\\n"
"counter_widget->value(i);}\\nxywh {99 15 80 22}\\n}\\n}\\n}\\n", f);
fclose(f);
}
sample_templates_generated = 2;
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);} {}
}