Fluid fixes from Vincent PENNE.

git-svn-id: file:///fltk/svn/fltk/trunk@12 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Michael R Sweet 1998-10-15 14:19:34 +00:00
parent 45bb73a9bf
commit 255e7fb39b
14 changed files with 62 additions and 20 deletions

View File

@ -66,6 +66,8 @@ const char *c_check(const char *c, int type) {
class Fl_Function_Type : public Fl_Type {
const char* return_type;
const char* actual_return_type;
const char* star;
char public_, constructor, havewidgets;
public:
Fl_Type *make();
@ -166,21 +168,21 @@ void Fl_Function_Type::write_code1() {
Fl_Type *child;
const char* widget_type = 0;
for (child = next; child && child->level > level; child = child->next)
if (child->is_widget()) {
if (child->is_widget() && child->level == level+1) {
havewidgets = 1;
widget_type = subclassname(child);
break;
}
write_c("\n");
if (ismain())
write_c("int main(int argc, char **argv) {\n");
else {
const char* t = return_type;
const char* star = "";
star = "";
if (!t) {
if (havewidgets) {t = widget_type; star = "*";}
else t = "void";
}
actual_return_type=t;
const char* k = class_name();
if (k) {
write_public(public_);
@ -200,7 +202,7 @@ void Fl_Function_Type::write_code1() {
write_c("%s%s %s {\n", t, star, name());
}
}
if (havewidgets) write_c(" %s* w;\n", widget_type);
if (havewidgets) write_c(" Fl_Window* w;\n");
indentation += 2;
}
@ -209,7 +211,7 @@ void Fl_Function_Type::write_code2() {
if (havewidgets) write_c(" w->show(argc, argv);\n");
write_c(" return Fl::run();\n");
} else if (havewidgets && !constructor)
write_c(" return w;\n");
write_c(" return (%s%s)w;\n", actual_return_type, star);
write_c("}\n");
indentation = 0;
}

View File

@ -512,6 +512,8 @@ void delete_all(int selected_only) {
f = g;
} else f = f->next;
}
if(!selected_only) include_H_from_C=1;
selection_changed(0);
}

View File

@ -140,3 +140,5 @@ const char *c_check(const char *c, int type = 0);
// replace a string pointer with new value, strips leading/trailing blanks:
int storestring(const char *n, const char * & p, int nostrip=0);
extern bool include_H_from_C;

View File

@ -1267,7 +1267,7 @@ void Fl_Widget_Type::write_code1() {
if (varused) write_c("{ %s* o = ", t);
if (name()) write_c("%s = ", name());
if (is_window()) {
write_c("w = new %s(%d, %d", t, o->w(), o->h());
write_c("new %s(%d, %d", t, o->w(), o->h());
// prevent type() code from being emitted:
((Fl_Widget_Type*)factory)->o->type(o->type());
} else {
@ -1279,6 +1279,7 @@ void Fl_Widget_Type::write_code1() {
}
write_c(");\n");
indentation += 2;
if (is_window()) write_c("%sw = o;\n", indent());
if (varused) write_widget_code();
}

View File

@ -21,6 +21,8 @@ int gridx = 5;
int gridy = 5;
int snap = 3;
bool include_H_from_C;
void alignment_cb(Fl_Input *i, long v) {
int n = atoi(i->value());
if (n < 0) n = 0;
@ -35,7 +37,8 @@ extern const char* header_file_name;
extern const char* code_file_name;
void show_alignment_cb(Fl_Widget *, void *) {
make_alignment_window();
if(alignment_window==0) make_alignment_window();
include_H_from_C_button->value(include_H_from_C);
header_file_input->value(header_file_name);
code_file_input->value(code_file_name);
char buf[128];
@ -53,6 +56,10 @@ void code_input_cb(Fl_Input* i, void*) {
printf("code file name set to %s\n", code_file_name);
}
void include_H_from_C_button_cb(Fl_Light_Button* b, void*) {
include_H_from_C = b->value();
}
////////////////////////////////////////////////////////////////
static Fl_Menu_Item window_type_menu[] = {

View File

@ -19,7 +19,8 @@ static void cb_OK(Fl_Return_Button* o, void*) {
Fl_Window* make_about_panel(const char *copyright) {
Fl_Window* w;
{ Fl_Window* o = about_panel = w = new Fl_Window(309, 221, "about fluid");
{ Fl_Window* o = about_panel = new Fl_Window(309, 221, "about fluid");
w = o;
o->box(FL_UP_BOX);
o->color(97);
o->selection_color(47);

View File

@ -18,9 +18,12 @@ Fl_Input *header_file_input;
Fl_Input *code_file_input;
Fl_Light_Button *include_H_from_C_button;
Fl_Window* make_alignment_window() {
Fl_Window *w;
{ Fl_Window* o = alignment_window = w = new Fl_Window(210, 282, "fluid Preferences");
Fl_Window* w;
{ Fl_Window* o = alignment_window = new Fl_Window(210, 310, "fluid Preferences");
w = o;
{ Fl_Box* o = new Fl_Box(10, 20, 190, 100, "ALIGNMENT:");
o->box(FL_ENGRAVED_FRAME);
o->labelsize(10);
@ -44,9 +47,8 @@ Fl_Window* make_alignment_window() {
o->callback((Fl_Callback*)alignment_cb, (void*)(3));
o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);
}
{ Fl_Button* o = new Fl_Button(10, 250, 190, 20, "close");
{ Fl_Button* o = new Fl_Button(10, 280, 190, 20, "close");
o->callback((Fl_Callback*)cb_close);
w->hotspot(o);
}
{ Fl_Box* o = new Fl_Box(10, 140, 190, 100, "OUTPUT FILE NAMES:");
o->box(FL_ENGRAVED_FRAME);
@ -67,6 +69,11 @@ Fl_Window* make_alignment_window() {
o->callback((Fl_Callback*)code_input_cb, (void*)(1));
o->when(1);
}
{ Fl_Light_Button* o = include_H_from_C_button = new Fl_Light_Button(60, 250, 140, 20, "Include .H from .C");
o->value(1);
o->callback((Fl_Callback*)include_H_from_C_button_cb);
}
o->set_modal();
o->end();
}
return w;

View File

@ -8,8 +8,8 @@ snap 3
Function {make_alignment_window()} {open
} {
Fl_Window alignment_window {
label {fluid Preferences} open selected
xywh {303 187 210 282} visible
label {fluid Preferences} open
xywh {0 22 210 310} modal visible
} {
Fl_Box {} {
label {ALIGNMENT:}
@ -39,7 +39,7 @@ Function {make_alignment_window()} {open
Fl_Button {} {
label close
callback {alignment_window->hide();}
xywh {10 250 190 20} hotspot
xywh {10 280 190 20}
}
Fl_Box {} {
label {OUTPUT FILE NAMES:}
@ -61,5 +61,10 @@ Function {make_alignment_window()} {open
callback code_input_cb
xywh {90 210 100 20} box THIN_DOWN_BOX when 1
}
Fl_Light_Button include_H_from_C_button {
label {Include .H from .C}
callback include_H_from_C_button_cb
xywh {60 250 140 20} value 1
}
}
}

View File

@ -4,14 +4,17 @@
#include <FL/Fl_Box.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Light_Button.H>
#include <FL/Fl_Window.H>
extern void alignment_cb(Fl_Input*, long);
extern void code_input_cb(Fl_Input*, void*);
extern void header_input_cb(Fl_Input*, void*);
extern void include_H_from_C_button_cb(Fl_Light_Button*, void*);
extern Fl_Window *alignment_window;
extern Fl_Input *horizontal_input;
extern Fl_Input *vertical_input;
extern Fl_Input *snap_input;
extern Fl_Input *header_file_input;
extern Fl_Input *code_file_input;
extern Fl_Light_Button *include_H_from_C_button;
Fl_Window* make_alignment_window();

View File

@ -12,6 +12,7 @@
#include <FL/Fl.H>
#include "Fl_Type.H"
#include "alignment_panel.H"
static FILE *code_file;
static FILE *header_file;
@ -240,7 +241,8 @@ int write_code(const char *s, const char *t) {
for (p = Fl_Type::first; p; p = p->next) p->write_declare();
delete included_root; included_root = 0;
if (t) write_c("#include \"%s\"\n", filename_name(t));
if (t && include_H_from_C)
write_c("#include \"%s\"\n", filename_name(t));
for (p = Fl_Type::first; p; p = p->next) p->write_static();
for (p = Fl_Type::first; p;) p = write_code(p);

View File

@ -14,6 +14,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "alignment_panel.H"
////////////////////////////////////////////////////////////////
// BASIC FILE WRITING:
@ -298,6 +299,8 @@ int write_file(const char *filename, int selected_only) {
if (!open_write(filename)) return 0;
write_string("# data file for the Fltk User Interface Designer (fluid)\n"
"version %.2f",FL_VERSION);
if(!include_H_from_C)
write_string("\ndo_not_include_H_from_C");
if (!selected_only) {
write_string("\nheader_name"); write_word(header_file_name);
write_string("\ncode_name"); write_word(code_file_name);
@ -365,6 +368,11 @@ static void read_children(Fl_Type *p, int paste) {
continue;
}
if (!strcmp(c,"do_not_include_H_from_C"))
{
include_H_from_C=0;
goto CONTINUE;
}
if (!strcmp(c,"header_name")) {
header_file_name = strdup(read_word());
goto CONTINUE;
@ -420,7 +428,7 @@ extern void deselect();
int read_file(const char *filename, int merge) {
read_version = 0.0;
if (!open_read(filename)) return 0;
if (merge) deselect(); else delete_all();
if (merge) deselect(); else delete_all();
read_children(Fl_Type::current, merge);
Fl_Type::current = 0;
for (Fl_Type *o = Fl_Type::first; o; o = o->next)

View File

@ -365,6 +365,7 @@ int main(int argc,char **argv) {
}
const char *c = argv[i];
make_main_window();
include_H_from_C=1;
if (c) set_filename(c);
if (!compile_only) {
Fl::visual((Fl_Mode)(FL_DOUBLE|FL_INDEX));

View File

@ -5,8 +5,9 @@
Fl_Input *v_input[4];
Fl_Window* make_widget_panel() {
Fl_Window *w;
{ Fl_Window* o = w = new Fl_Window(370, 480);
Fl_Window* w;
{ Fl_Window* o = new Fl_Window(370, 480);
w = o;
w->hotspot(o);
{ Fl_Input* o = new Fl_Input(90, 10, 210, 20, "name:");
o->box(FL_THIN_UP_BOX);

View File

@ -62,7 +62,7 @@ void Fl_Window::cursor(Fl_Cursor c, Fl_Color, Fl_Color) {
#define CURSORSIZE 16
#define HOTXY 7
struct TableEntry {
static struct TableEntry {
uchar bits[CURSORSIZE*CURSORSIZE/8];
uchar mask[CURSORSIZE*CURSORSIZE/8];
Cursor cursor;