summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2005-03-20 04:00:48 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2005-03-20 04:00:48 +0000
commita2f4b27b271098c9414721ae9e0b38654a5e900c (patch)
treecfafa53db99127fde016d5379078306365e6358d
parent665a2c1b7d2a4b8c5e9a78ebbebf72817b72822e (diff)
Undo/redo support for FLUID.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4142 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--CHANGES1
-rw-r--r--fluid/Fl_Type.cxx4
-rw-r--r--fluid/Fl_Window_Type.cxx12
-rw-r--r--fluid/Makefile15
-rw-r--r--fluid/align_widget.cxx103
-rw-r--r--fluid/factory.cxx7
-rw-r--r--fluid/fluid.cxx66
-rw-r--r--fluid/function_panel.cxx8
-rw-r--r--fluid/function_panel.fl11
-rw-r--r--fluid/makedepend266
-rw-r--r--vcnet/fluid.vcproj19
-rw-r--r--visualc/fluid.dsp4
12 files changed, 347 insertions, 169 deletions
diff --git a/CHANGES b/CHANGES
index e6d13ef71..4d2b1f875 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,7 @@ CHANGES IN FLTK 1.1.7
- Documentation fixes (STR #648, STR #692, STR #730, STR
#744, STR #745)
+ - FLUID now provides unlimited undo/redo support.
- FLUID now provides an option to choose which scheme
(default, none, plastic) to display.
- Fixed scheme background issue with windows in FLUID.
diff --git a/fluid/Fl_Type.cxx b/fluid/Fl_Type.cxx
index 7a8e63f84..95583e1a6 100644
--- a/fluid/Fl_Type.cxx
+++ b/fluid/Fl_Type.cxx
@@ -43,6 +43,7 @@
#include <stdio.h>
#include "Fl_Type.h"
+#include "undo.h"
#include <FL/Fl_Pixmap.H>
#include "pixmaps/lock.xpm"
@@ -449,6 +450,7 @@ void Fl_Type::remove_child(Fl_Type*) {}
// add a list of widgets as a new child of p:
void Fl_Type::add(Fl_Type *p) {
if (p && parent == p) return;
+ undo_checkpoint();
parent = p;
Fl_Type *end = this;
while (end->next) end = end->next;
@@ -544,6 +546,7 @@ Fl_Type *Fl_Type::remove() {
// update a string member:
int storestring(const char *n, const char * & p, int nostrip) {
if (n == p) return 0;
+ undo_checkpoint();
int length = 0;
if (n) { // see if blank, strip leading & trailing blanks
if (!nostrip) while (isspace(*n)) n++;
@@ -604,7 +607,6 @@ Fl_Type::~Fl_Type() {
if (prev) prev->next = next; else first = next;
if (next) next->prev = prev; else last = prev;
if (current == this) current = 0;
- set_modflag(1);
if (parent) parent->remove_child(this);
}
diff --git a/fluid/Fl_Window_Type.cxx b/fluid/Fl_Window_Type.cxx
index 469fbc143..31cc08601 100644
--- a/fluid/Fl_Window_Type.cxx
+++ b/fluid/Fl_Window_Type.cxx
@@ -33,6 +33,7 @@
#include <FL/fl_draw.H>
#include <FL/Fl_Menu_Item.H>
#include "Fl_Widget_Type.h"
+#include "undo.h"
#include <math.h>
#include <stdlib.h>
#include "alignment_panel.h"
@@ -112,6 +113,8 @@ void grid_cb(Fl_Input *i, long v) {
}
void i18n_type_cb(Fl_Choice *c, void *) {
+ undo_checkpoint();
+
switch (i18n_type = c->value()) {
case 0 : /* None */
i18n_include_input->hide();
@@ -147,6 +150,8 @@ void i18n_type_cb(Fl_Choice *c, void *) {
}
void i18n_text_cb(Fl_Input *i, void *) {
+ undo_checkpoint();
+
if (i == i18n_function_input)
i18n_function = i->value();
else if (i == i18n_file_input)
@@ -927,7 +932,7 @@ extern Fl_Menu_Item Main_Menu[];
// Calculate new bounding box of selected widgets:
void Fl_Window_Type::fix_overlay() {
- Main_Menu[37].label("Hide O&verlays");
+ Main_Menu[38].label("Hide O&verlays");
overlays_invisible = 0;
recalc = 1;
((Overlay_Window *)(this->o))->redraw_overlay();
@@ -942,8 +947,8 @@ void redraw_overlays() {
void toggle_overlays(Fl_Widget *,void *) {
overlays_invisible = !overlays_invisible;
- if (overlays_invisible) Main_Menu[37].label("Show O&verlays");
- else Main_Menu[37].label("Hide O&verlays");
+ if (overlays_invisible) Main_Menu[38].label("Show O&verlays");
+ else Main_Menu[38].label("Hide O&verlays");
for (Fl_Type *o=Fl_Type::first; o; o=o->next)
if (o->is_window()) {
@@ -964,6 +969,7 @@ extern Fl_Menu_Item New_Menu[];
// move the selected children according to current dx,dy,drag state:
void Fl_Window_Type::moveallchildren()
{
+ undo_checkpoint();
Fl_Type *i;
for (i=next; i && i->level>level;) {
if (i->selected && i->is_widget() && !i->is_menu_item()) {
diff --git a/fluid/Makefile b/fluid/Makefile
index 9275cc30c..fcb580be0 100644
--- a/fluid/Makefile
+++ b/fluid/Makefile
@@ -25,21 +25,22 @@
CPPFILES = \
Fl_Function_Type.cxx \
- Fl_Menu_Type.cxx \
Fl_Group_Type.cxx \
- Fl_Widget_Type.cxx \
+ Fl_Menu_Type.cxx \
Fl_Type.cxx \
+ Fl_Widget_Type.cxx \
Fl_Window_Type.cxx \
Fluid_Image.cxx \
+ about_panel.cxx \
+ align_widget.cxx \
+ alignment_panel.cxx \
code.cxx \
factory.cxx \
file.cxx \
fluid.cxx \
- align_widget.cxx \
- about_panel.cxx \
- widget_panel.cxx \
- alignment_panel.cxx \
- function_panel.cxx
+ function_panel.cxx \
+ undo.cxx \
+ widget_panel.cxx
################################################################
diff --git a/fluid/align_widget.cxx b/fluid/align_widget.cxx
index bc128c0a6..e89fb5b2b 100644
--- a/fluid/align_widget.cxx
+++ b/fluid/align_widget.cxx
@@ -1,7 +1,7 @@
//
// "$Id$"
//
-// alignment code for the Fast Light Tool Kit (FLTK).
+// Alignment code for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2005 by Bill Spitzak and others.
//
@@ -26,6 +26,7 @@
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include "Fl_Widget_Type.h"
+#include "undo.h"
/**
* the first behaviour always uses the first selected widget as a reference
@@ -40,6 +41,7 @@ void align_widget_cb(Fl_Widget*, long how)
const int max = 32768, min = -32768;
int left, right, top, bot, wdt, hgt, n;
Fl_Type *o;
+ int changed = 0;
switch ( how )
{
//---- align
@@ -57,6 +59,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -66,7 +74,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize(left, w->y(), w->w(), w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -89,6 +96,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -98,7 +111,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize((center2-w->w())/2, w->y(), w->w(), w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -118,6 +130,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -127,7 +145,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize(right-w->w(), w->y(), w->w(), w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -146,6 +163,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -155,7 +178,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize(w->x(), top, w->w(), w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -178,6 +200,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -187,7 +215,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize(w->x(), (center2-w->h())/2, w->w(), w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -207,6 +234,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -216,7 +249,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize( w->x(), bot-w->h(), w->w(), w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -243,6 +275,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -252,7 +290,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize(left+wsum+wdt*cnt/n, w->y(), w->w(), w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
cnt++;
@@ -281,6 +318,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -290,7 +333,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize(w->x(), top+hsum+hgt*cnt/n, w->w(), w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
cnt++;
@@ -313,6 +355,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -322,7 +370,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize(w->x(), w->y(), wdt, w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -341,6 +388,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -350,7 +403,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize( w->x(), w->y(), w->w(), hgt);
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -371,6 +423,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget())
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
if (o->next && o->next->level > o->level && !o->next->selected &&
!o->is_menu_button()) {
@@ -380,7 +438,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize( w->x(), w->y(), wdt, hgt);
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -390,6 +447,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget() && o->parent)
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
Fl_Widget *p = ((Fl_Widget_Type *)o->parent)->o;
int center2;
@@ -405,7 +468,6 @@ void align_widget_cb(Fl_Widget*, long how)
// Otherwise, just do the widget...
w->resize((center2-w->w())/2, w->y(), w->w(), w->h());
}
- set_modflag(1);
w->redraw();
if (w->window()) w->window()->redraw();
}
@@ -414,6 +476,12 @@ void align_widget_cb(Fl_Widget*, long how)
for (o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget() && o->parent)
{
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
Fl_Widget *p = ((Fl_Widget_Type *)o->parent)->o;
int center2;
@@ -444,8 +512,15 @@ void widget_size_cb(Fl_Widget *, long size) {
Fl_Widget_Type::default_size = size;
// Update any selected widgets...
+ int changed = 0;
for (Fl_Type *o = Fl_Type::first; o; o = o->next)
if (o->selected && o->is_widget()) {
+ if (!changed) {
+ changed = 1;
+ set_modflag(1);
+ undo_checkpoint();
+ }
+
Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
w->labelsize(size);
Fl_Font f;
@@ -454,8 +529,6 @@ void widget_size_cb(Fl_Widget *, long size) {
((Fl_Widget_Type *)o)->textstuff(2, f, s, c);
w->redraw();
-
- set_modflag(1);
}
}
diff --git a/fluid/factory.cxx b/fluid/factory.cxx
index 932a6e812..814a40d41 100644
--- a/fluid/factory.cxx
+++ b/fluid/factory.cxx
@@ -37,6 +37,7 @@
#include <FL/Fl_Pixmap.H>
#include <stdio.h>
#include "../src/flstring.h"
+#include "undo.h"
#include "Fl_Widget_Type.h"
@@ -828,6 +829,8 @@ extern void select_only(Fl_Type *);
#include <FL/Fl_Window.H>
static void cb(Fl_Widget *, void *v) {
+ undo_checkpoint();
+ undo_suspend();
Fl_Type *t = ((Fl_Type*)v)->make();
if (t) {
if (t->is_widget() && !t->is_window()) {
@@ -857,7 +860,11 @@ static void cb(Fl_Widget *, void *v) {
select_only(t);
set_modflag(1);
t->open();
+ } else {
+ undo_current --;
+ undo_last --;
}
+ undo_resume();
}
Fl_Menu_Item New_Menu[] = {
diff --git a/fluid/fluid.cxx b/fluid/fluid.cxx
index 6c48c1695..879defac0 100644
--- a/fluid/fluid.cxx
+++ b/fluid/fluid.cxx
@@ -57,6 +57,7 @@
#endif
#include "about_panel.h"
+#include "undo.h"
#include "Fl_Type.h"
@@ -80,10 +81,6 @@ void show_shell_window();
////////////////////////////////////////////////////////////////
-void nyi(Fl_Widget *,void *) {
- fl_message("That's not yet implemented, sorry");
-}
-
static const char *filename;
void set_filename(const char *c);
void set_modflag(int mf);
@@ -176,6 +173,7 @@ void save_cb(Fl_Widget *, void *v) {
return;
}
set_modflag(0);
+ undo_save = undo_current;
}
void exit_cb(Fl_Widget *,void *) {
@@ -202,6 +200,8 @@ void exit_cb(Fl_Widget *,void *) {
if (help_dialog)
delete help_dialog;
+ undo_clear();
+
exit(0);
}
@@ -227,7 +227,9 @@ apple_open_cb(const char *c) {
oldfilename = filename;
filename = NULL;
set_filename(c);
+ undo_suspend();
if (!read_file(c, 0)) {
+ undo_resume();
fl_message("Can't read %s: %s", c, strerror(errno));
free((void *)filename);
filename = oldfilename;
@@ -237,6 +239,8 @@ apple_open_cb(const char *c) {
// Loaded a file; free the old filename...
set_modflag(0);
+ undo_resume();
+ undo_clear();
if (oldfilename) free((void *)oldfilename);
}
#endif // __APPLE__
@@ -264,13 +268,17 @@ void open_cb(Fl_Widget *, void *v) {
oldfilename = filename;
filename = NULL;
set_filename(c);
+ if (v != 0) undo_checkpoint();
+ undo_suspend();
if (!read_file(c, v!=0)) {
+ undo_resume();
fl_message("Can't read %s: %s", c, strerror(errno));
free((void *)filename);
filename = oldfilename;
if (main_window) main_window->label(filename);
return;
}
+ undo_resume();
if (v) {
// Inserting a file; restore the original filename...
set_modflag(1);
@@ -280,6 +288,7 @@ void open_cb(Fl_Widget *, void *v) {
} else {
// Loaded a file; free the old filename...
set_modflag(0);
+ undo_clear();
if (oldfilename) free((void *)oldfilename);
}
}
@@ -301,7 +310,10 @@ void open_history_cb(Fl_Widget *, void *v) {
const char *oldfilename = filename;
filename = NULL;
set_filename((char *)v);
+ undo_suspend();
if (!read_file(filename, 0)) {
+ undo_resume();
+ undo_clear();
fl_message("Can't read %s: %s", filename, strerror(errno));
free((void *)filename);
filename = oldfilename;
@@ -309,6 +321,8 @@ void open_history_cb(Fl_Widget *, void *v) {
return;
}
set_modflag(0);
+ undo_resume();
+ undo_clear();
if (oldfilename) free((void *)oldfilename);
}
@@ -329,6 +343,7 @@ void new_cb(Fl_Widget *, void *v) {
delete_all();
set_filename(NULL);
set_modflag(0);
+ undo_clear();
}
int compile_only = 0;
@@ -457,13 +472,15 @@ void cut_cb(Fl_Widget *, void *) {
fl_beep();
return;
}
- ipasteoffset = 0;
- Fl_Type *p = Fl_Type::current->parent;
- while (p && p->selected) p = p->parent;
if (!write_file(cutfname(),1)) {
fl_message("Can't write %s: %s", cutfname(), strerror(errno));
return;
}
+ undo_checkpoint();
+ set_modflag(1);
+ ipasteoffset = 0;
+ Fl_Type *p = Fl_Type::current->parent;
+ while (p && p->selected) p = p->parent;
delete_all(1);
if (p) select_only(p);
}
@@ -473,6 +490,8 @@ void delete_cb(Fl_Widget *, void *) {
fl_beep();
return;
}
+ undo_checkpoint();
+ set_modflag(1);
ipasteoffset = 0;
Fl_Type *p = Fl_Type::current->parent;
while (p && p->selected) p = p->parent;
@@ -487,9 +506,12 @@ void paste_cb(Fl_Widget*, void*) {
pasteoffset = ipasteoffset;
if (gridx>1) pasteoffset = ((pasteoffset-1)/gridx+1)*gridx;
if (gridy>1) pasteoffset = ((pasteoffset-1)/gridy+1)*gridy;
+ undo_checkpoint();
+ undo_suspend();
if (!read_file(cutfname(), 1)) {
fl_message("Can't read %s: %s", cutfname(), strerror(errno));
}
+ undo_resume();
pasteoffset = 0;
ipasteoffset += 10;
force_parent = 0;
@@ -510,9 +532,12 @@ void duplicate_cb(Fl_Widget*, void*) {
pasteoffset = 0;
force_parent = 1;
+ undo_checkpoint();
+ undo_suspend();
if (!read_file(cutfname(1), 1)) {
fl_message("Can't read %s: %s", cutfname(1), strerror(errno));
}
+ undo_resume();
force_parent = 0;
}
@@ -602,7 +627,8 @@ Fl_Menu_Item Main_Menu[] = {
{"&Quit", FL_CTRL+'q', exit_cb},
{0},
{"&Edit",0,0,0,FL_SUBMENU},
- {"&Undo", FL_CTRL+'z', nyi},
+ {"&Undo", FL_CTRL+'z', undo_cb},
+ {"&Redo", FL_CTRL+FL_SHIFT+'z', redo_cb, 0, FL_MENU_DIVIDER},
{"C&ut", FL_CTRL+'x', cut_cb},
{"&Copy", FL_CTRL+'c', copy_cb},
{"&Delete", FL_Delete, delete_cb},
@@ -614,12 +640,8 @@ Fl_Menu_Item Main_Menu[] = {
{"&Sort",0,sort_cb},
{"&Earlier", FL_F+2, earlier_cb},
{"&Later", FL_F+3, later_cb},
-//{"Show", FL_F+5, show_cb},
-//{"Hide", FL_F+6, hide_cb},
{"&Group", FL_F+7, group_cb},
{"Ung&roup", FL_F+8, ungroup_cb,0, FL_MENU_DIVIDER},
-//{"Deactivate", 0, nyi},
-//{"Activate", 0, nyi, 0, FL_MENU_DIVIDER},
{"Hide O&verlays",FL_CTRL+FL_SHIFT+'o',toggle_overlays},
{"Show Widget &Bin...",FL_ALT+'b',toggle_widgetbin_cb, 0, FL_MENU_DIVIDER},
{"Pro&ject Settings...",FL_ALT+'p',show_project_cb},
@@ -706,6 +728,7 @@ void toggle_widgetbin_cb(Fl_Widget *, void *) {
}
}
+
void make_main_window() {
fluid_prefs.get("snap", snap, 1);
fluid_prefs.get("gridx", gridx, 5);
@@ -951,6 +974,7 @@ void set_modflag(int mf) {
} else main_window->label(basename);
}
+ // Enable/disable the Save menu item...
if (modflag) Main_Menu[16].activate();
else Main_Menu[16].deactivate();
}
@@ -977,6 +1001,7 @@ static int arg(int argc, char** argv, int& i) {
#if ! (defined(WIN32) && !defined (__CYGWIN__))
+int quit_flag = 0;
#include <signal.h>
#ifdef _sigargs
#define SIGARG _sigargs
@@ -991,7 +1016,7 @@ static int arg(int argc, char** argv, int& i) {
extern "C" {
static void sigint(SIGARG) {
signal(SIGINT,sigint);
- exit_cb(0,0);
+ quit_flag = 1;
}
}
#endif
@@ -1030,6 +1055,7 @@ int main(int argc,char **argv) {
open_history_cb(0, absolute_history[0]);
}
}
+ undo_suspend();
if (c && !read_file(c,0)) {
if (compile_only) {
fprintf(stderr,"%s : %s\n", c, strerror(errno));
@@ -1037,19 +1063,31 @@ int main(int argc,char **argv) {
}
fl_message("Can't read %s: %s", c, strerror(errno));
}
+ undo_resume();
if (compile_only) {
if (compile_strings) write_strings_cb(0,0);
write_cb(0,0);
exit(0);
}
set_modflag(0);
+ undo_clear();
#ifndef WIN32
signal(SIGINT,sigint);
#endif
grid_cb(horizontal_input, 0); // Makes sure that windows get snap params...
- return Fl::run();
+#ifdef WIN32
+ Fl::run();
+#else
+ while (!quit_flag) Fl::wait();
+
+ if (quit_flag) exit_cb(0,0);
+#endif // WIN32
+
+ undo_clear();
+
+ return (0);
}
//
diff --git a/fluid/function_panel.cxx b/fluid/function_panel.cxx
index 075e2c1e2..080f07515 100644
--- a/fluid/function_panel.cxx
+++ b/fluid/function_panel.cxx
@@ -30,6 +30,7 @@
#include "function_panel.h"
#include <FL/Fl_Pixmap.H>
#include "Fl_Type.h"
+#include "undo.h"
extern class Fl_Pixmap *pixmap[];
extern class Fl_Type *Fl_Type_make(const char*);
extern void select_only(Fl_Type*);
@@ -415,8 +416,13 @@ Fl_Window* make_comment_panel() {
}
void type_make_cb(Fl_Widget*w,void*d) {
+ undo_checkpoint();
Fl_Type *t = Fl_Type_make((char*)d);
-if (t) {select_only(t); set_modflag(1); t->open();}
+ if (t) {
+ select_only(t);
+ set_modflag(1);
+ t->open();
+ }
}
Fl_Window *widgetbin_panel=(Fl_Window *)0;
diff --git a/fluid/function_panel.fl b/fluid/function_panel.fl
index e70956b2a..84bcd557f 100644
--- a/fluid/function_panel.fl
+++ b/fluid/function_panel.fl
@@ -35,6 +35,8 @@ decl {\#include <FL/Fl_Pixmap.H>} {}
decl {\#include "Fl_Type.h"} {}
+decl {\#include "undo.h"} {}
+
decl {extern class Fl_Pixmap *pixmap[];} {}
decl {extern class Fl_Type *Fl_Type_make(const char*);} {}
@@ -265,8 +267,13 @@ Function {make_comment_panel()} {open
Function {type_make_cb(Fl_Widget*w,void*d)} {open return_type void
} {
- code {Fl_Type *t = Fl_Type_make((char*)d);
-if (t) {select_only(t); set_modflag(1); t->open();}} {}
+ code {undo_checkpoint();
+ Fl_Type *t = Fl_Type_make((char*)d);
+ if (t) {
+ select_only(t);
+ set_modflag(1);
+ t->open();
+ }} {}
}
Function {make_widgetbin()} {open
diff --git a/fluid/makedepend b/fluid/makedepend
index e558b7e9a..88a8690cc 100644
--- a/fluid/makedepend
+++ b/fluid/makedepend
@@ -17,12 +17,23 @@ Fl_Function_Type.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H Fl_Type.h
Fl_Function_Type.o: ../FL/Fl_Widget.H ../FL/Fl_Menu.H Fluid_Image.h
Fl_Function_Type.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/Fl_Tabs.H
Fl_Function_Type.o: ../FL/Fl_Pack.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
-Fl_Function_Type.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Menu_Bar.H
-Fl_Function_Type.o: ../FL/fl_show_input.H ../FL/fl_ask.H ../src/flstring.h
-Fl_Function_Type.o: ../FL/Fl_Export.H ../config.h function_panel.h
-Fl_Function_Type.o: ../FL/Fl_Window.H ../FL/Fl_Light_Button.H
+Fl_Function_Type.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Window.H
+Fl_Function_Type.o: ../FL/Fl_Menu_Bar.H ../FL/fl_show_input.H ../FL/fl_ask.H
+Fl_Function_Type.o: ../src/flstring.h ../FL/Fl_Export.H ../config.h
+Fl_Function_Type.o: function_panel.h ../FL/Fl_Light_Button.H
Fl_Function_Type.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H
Fl_Function_Type.o: ../FL/fl_draw.H ../FL/Fl_Text_Buffer.H comments.h
+Fl_Group_Type.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
+Fl_Group_Type.o: ../FL/Fl_Group.H ../FL/fl_message.H ../FL/fl_ask.H
+Fl_Group_Type.o: Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Widget.H ../FL/Fl_Menu.H
+Fl_Group_Type.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
+Fl_Group_Type.o: Fluid_Image.h ../FL/Fl_Shared_Image.H ../FL/fl_draw.H
+Fl_Group_Type.o: ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Pack.H
+Fl_Group_Type.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H
+Fl_Group_Type.o: ../FL/Fl_Menu_.H ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
+Fl_Group_Type.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Window.H
+Fl_Group_Type.o: ../FL/Fl_Menu_Bar.H ../FL/Fl_Scroll.H ../FL/Fl_Scrollbar.H
+Fl_Group_Type.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
Fl_Menu_Type.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
Fl_Menu_Type.o: Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Widget.H ../FL/Fl_Menu.H
Fl_Menu_Type.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
@@ -31,9 +42,10 @@ Fl_Menu_Type.o: ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Pack.H
Fl_Menu_Type.o: ../FL/Fl_Group.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
Fl_Menu_Type.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Choice.H
Fl_Menu_Type.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fl_Menu_Type.o: ../FL/Fl_Menu_Bar.H alignment_panel.h ../FL/Fl_Text_Buffer.H
-Fl_Menu_Type.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/Fl_Scrollbar.H
-Fl_Menu_Type.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
+Fl_Menu_Type.o: ../FL/Fl_Window.H ../FL/Fl_Menu_Bar.H alignment_panel.h
+Fl_Menu_Type.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
+Fl_Menu_Type.o: ../FL/fl_draw.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
+Fl_Menu_Type.o: ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
Fl_Menu_Type.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
Fl_Menu_Type.o: ../FL/Fl_Preferences.H ../FL/Fl_Tooltip.H ../FL/Fl_Button.H
Fl_Menu_Type.o: ../FL/Fl_Box.H ../FL/Fl_Light_Button.H
@@ -42,39 +54,6 @@ Fl_Menu_Type.o: ../FL/Fl_Button.H ../FL/Fl_Return_Button.H ../FL/fl_message.H
Fl_Menu_Type.o: ../FL/fl_ask.H ../src/flstring.h ../FL/Fl_Export.H
Fl_Menu_Type.o: ../config.h ../FL/Fl_Output.H ../FL/Fl_Input.H
Fl_Menu_Type.o: Shortcut_Button.h
-Fl_Group_Type.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
-Fl_Group_Type.o: ../FL/Fl_Group.H ../FL/fl_message.H ../FL/fl_ask.H
-Fl_Group_Type.o: Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Widget.H ../FL/Fl_Menu.H
-Fl_Group_Type.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
-Fl_Group_Type.o: Fluid_Image.h ../FL/Fl_Shared_Image.H ../FL/fl_draw.H
-Fl_Group_Type.o: ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Pack.H
-Fl_Group_Type.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H
-Fl_Group_Type.o: ../FL/Fl_Menu_.H ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
-Fl_Group_Type.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H
-Fl_Group_Type.o: ../FL/Fl_Scroll.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-Fl_Group_Type.o: ../FL/Fl_Valuator.H
-Fl_Widget_Type.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
-Fl_Widget_Type.o: ../FL/Fl_Group.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fl_Widget_Type.o: Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Widget.H
-Fl_Widget_Type.o: ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H
-Fl_Widget_Type.o: ../FL/Fl_Image.H Fluid_Image.h ../FL/Fl_Shared_Image.H
-Fl_Widget_Type.o: ../FL/fl_draw.H ../FL/Fl_Tabs.H ../FL/Fl_Group.H
-Fl_Widget_Type.o: ../FL/Fl_Pack.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
-Fl_Widget_Type.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Choice.H
-Fl_Widget_Type.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Menu_Bar.H
-Fl_Widget_Type.o: alignment_panel.h ../FL/Fl_Text_Buffer.H
-Fl_Widget_Type.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H
-Fl_Widget_Type.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Widget_Type.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Double_Window.H
-Fl_Widget_Type.o: ../FL/Fl_Window.H ../FL/Fl_Preferences.H ../FL/Fl_Tooltip.H
-Fl_Widget_Type.o: ../FL/Fl_Button.H ../FL/Fl_Box.H ../FL/Fl_Light_Button.H
-Fl_Widget_Type.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-Fl_Widget_Type.o: ../FL/Fl_Button.H ../FL/Fl_Return_Button.H
-Fl_Widget_Type.o: ../FL/fl_message.H ../FL/fl_ask.H ../FL/Fl_Slider.H
-Fl_Widget_Type.o: ../FL/Fl_Window.H ../src/flstring.h ../FL/Fl_Export.H
-Fl_Widget_Type.o: ../config.h widget_panel.h ../FL/Fl_Value_Input.H
-Fl_Widget_Type.o: ../FL/Fl_Input.H Shortcut_Button.h ../FL/Fl_Text_Editor.H
-Fl_Widget_Type.o: ../FL/Fl_Text_Display.H ../FL/fl_show_colormap.H
Fl_Type.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
Fl_Type.o: ../FL/Fl_Browser_.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
Fl_Type.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
@@ -84,16 +63,17 @@ Fl_Type.o: ../FL/Fl_Image.H Fluid_Image.h ../FL/Fl_Shared_Image.H
Fl_Type.o: ../FL/Fl_Tabs.H ../FL/Fl_Pack.H ../FL/Fl_Group.H ../FL/Fl_Wizard.H
Fl_Type.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
Fl_Type.o: ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H
-Fl_Type.o: ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H ../FL/Fl_Pixmap.H
-Fl_Type.o: pixmaps/lock.xpm pixmaps/flWindow.xpm pixmaps/flButton.xpm
-Fl_Type.o: pixmaps/flCheckButton.xpm pixmaps/flRoundButton.xpm
-Fl_Type.o: pixmaps/flBox.xpm pixmaps/flGroup.xpm pixmaps/flFunction.xpm
-Fl_Type.o: pixmaps/flCode.xpm pixmaps/flCodeBlock.xpm pixmaps/flComment.xpm
-Fl_Type.o: pixmaps/flDeclaration.xpm pixmaps/flDeclarationBlock.xpm
-Fl_Type.o: pixmaps/flClass.xpm pixmaps/flTabs.xpm pixmaps/flInput.xpm
-Fl_Type.o: pixmaps/flChoice.xpm pixmaps/flMenuitem.xpm pixmaps/flMenubar.xpm
-Fl_Type.o: pixmaps/flSubmenu.xpm pixmaps/flScroll.xpm pixmaps/flTile.xpm
-Fl_Type.o: pixmaps/flWizard.xpm pixmaps/flPack.xpm pixmaps/flReturnButton.xpm
+Fl_Type.o: ../FL/Fl_Input_.H ../FL/Fl_Window.H ../FL/Fl_Menu_Bar.H undo.h
+Fl_Type.o: ../FL/Fl_Pixmap.H pixmaps/lock.xpm pixmaps/flWindow.xpm
+Fl_Type.o: pixmaps/flButton.xpm pixmaps/flCheckButton.xpm
+Fl_Type.o: pixmaps/flRoundButton.xpm pixmaps/flBox.xpm pixmaps/flGroup.xpm
+Fl_Type.o: pixmaps/flFunction.xpm pixmaps/flCode.xpm pixmaps/flCodeBlock.xpm
+Fl_Type.o: pixmaps/flComment.xpm pixmaps/flDeclaration.xpm
+Fl_Type.o: pixmaps/flDeclarationBlock.xpm pixmaps/flClass.xpm
+Fl_Type.o: pixmaps/flTabs.xpm pixmaps/flInput.xpm pixmaps/flChoice.xpm
+Fl_Type.o: pixmaps/flMenuitem.xpm pixmaps/flMenubar.xpm pixmaps/flSubmenu.xpm
+Fl_Type.o: pixmaps/flScroll.xpm pixmaps/flTile.xpm pixmaps/flWizard.xpm
+Fl_Type.o: pixmaps/flPack.xpm pixmaps/flReturnButton.xpm
Fl_Type.o: pixmaps/flLightButton.xpm pixmaps/flRepeatButton.xpm
Fl_Type.o: pixmaps/flMenuButton.xpm pixmaps/flOutput.xpm
Fl_Type.o: pixmaps/flTextDisplay.xpm pixmaps/flTextEdit.xpm
@@ -104,6 +84,29 @@ Fl_Type.o: pixmaps/flSlider.xpm pixmaps/flScrollBar.xpm
Fl_Type.o: pixmaps/flValueSlider.xpm pixmaps/flAdjuster.xpm
Fl_Type.o: pixmaps/flCounter.xpm pixmaps/flDial.xpm pixmaps/flRoller.xpm
Fl_Type.o: pixmaps/flValueInput.xpm pixmaps/flValueOutput.xpm
+Fl_Widget_Type.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
+Fl_Widget_Type.o: ../FL/Fl_Group.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
+Fl_Widget_Type.o: Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Widget.H
+Fl_Widget_Type.o: ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H
+Fl_Widget_Type.o: ../FL/Fl_Image.H Fluid_Image.h ../FL/Fl_Shared_Image.H
+Fl_Widget_Type.o: ../FL/fl_draw.H ../FL/Fl_Tabs.H ../FL/Fl_Group.H
+Fl_Widget_Type.o: ../FL/Fl_Pack.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
+Fl_Widget_Type.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Choice.H
+Fl_Widget_Type.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Window.H
+Fl_Widget_Type.o: ../FL/Fl_Menu_Bar.H alignment_panel.h
+Fl_Widget_Type.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
+Fl_Widget_Type.o: ../FL/fl_draw.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
+Fl_Widget_Type.o: ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
+Fl_Widget_Type.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
+Fl_Widget_Type.o: ../FL/Fl_Preferences.H ../FL/Fl_Tooltip.H ../FL/Fl_Button.H
+Fl_Widget_Type.o: ../FL/Fl_Box.H ../FL/Fl_Light_Button.H
+Fl_Widget_Type.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
+Fl_Widget_Type.o: ../FL/Fl_Button.H ../FL/Fl_Return_Button.H
+Fl_Widget_Type.o: ../FL/fl_message.H ../FL/fl_ask.H ../FL/Fl_Slider.H
+Fl_Widget_Type.o: ../src/flstring.h ../FL/Fl_Export.H ../config.h
+Fl_Widget_Type.o: widget_panel.h ../FL/Fl_Value_Input.H ../FL/Fl_Input.H
+Fl_Widget_Type.o: Shortcut_Button.h ../FL/Fl_Text_Editor.H
+Fl_Widget_Type.o: ../FL/Fl_Text_Display.H ../FL/fl_show_colormap.H
Fl_Window_Type.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
Fl_Window_Type.o: ../FL/Fl_Overlay_Window.H ../FL/Fl_Double_Window.H
Fl_Window_Type.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
@@ -114,15 +117,16 @@ Fl_Window_Type.o: ../FL/Fl_Menu_Item.H Fluid_Image.h ../FL/Fl_Shared_Image.H
Fl_Window_Type.o: ../FL/Fl_Tabs.H ../FL/Fl_Pack.H ../FL/Fl_Group.H
Fl_Window_Type.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H
Fl_Window_Type.o: ../FL/Fl_Menu_.H ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
-Fl_Window_Type.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H
-Fl_Window_Type.o: alignment_panel.h ../FL/Fl_Text_Buffer.H
-Fl_Window_Type.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H
-Fl_Window_Type.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Window_Type.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Double_Window.H
-Fl_Window_Type.o: ../FL/Fl_Preferences.H ../FL/Fl_Tooltip.H ../FL/Fl_Button.H
-Fl_Window_Type.o: ../FL/Fl_Box.H ../FL/Fl_Light_Button.H
-Fl_Window_Type.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-Fl_Window_Type.o: ../FL/Fl_Button.H ../FL/Fl_Return_Button.H widget_panel.h
+Fl_Window_Type.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Window.H
+Fl_Window_Type.o: ../FL/Fl_Menu_Bar.H undo.h alignment_panel.h
+Fl_Window_Type.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
+Fl_Window_Type.o: ../FL/fl_draw.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
+Fl_Window_Type.o: ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
+Fl_Window_Type.o: ../FL/Fl_Double_Window.H ../FL/Fl_Preferences.H
+Fl_Window_Type.o: ../FL/Fl_Tooltip.H ../FL/Fl_Button.H ../FL/Fl_Box.H
+Fl_Window_Type.o: ../FL/Fl_Light_Button.H ../FL/Fl_Check_Button.H
+Fl_Window_Type.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
+Fl_Window_Type.o: ../FL/Fl_Return_Button.H widget_panel.h
Fl_Window_Type.o: ../FL/Fl_Value_Input.H ../FL/Fl_Input.H Shortcut_Button.h
Fl_Window_Type.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H
Fl_Window_Type.o: ../src/flstring.h ../FL/Fl_Export.H ../config.h
@@ -134,16 +138,44 @@ Fluid_Image.o: ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Pack.H
Fluid_Image.o: ../FL/Fl_Group.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
Fluid_Image.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Choice.H
Fluid_Image.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fluid_Image.o: ../FL/Fl_Menu_Bar.H ../src/flstring.h ../FL/Fl_Export.H
-Fluid_Image.o: ../config.h ../FL/filename.H ../FL/Fl_File_Chooser.H
-Fluid_Image.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Button.H
-Fluid_Image.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H
-Fluid_Image.o: ../FL/Fl_Browser.H ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H
-Fluid_Image.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H
-Fluid_Image.o: ../FL/Fl.H ../FL/filename.H ../FL/Fl_Box.H
-Fluid_Image.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-Fluid_Image.o: ../FL/Fl_Button.H ../FL/Fl_File_Input.H
-Fluid_Image.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H
+Fluid_Image.o: ../FL/Fl_Window.H ../FL/Fl_Menu_Bar.H ../src/flstring.h
+Fluid_Image.o: ../FL/Fl_Export.H ../config.h ../FL/filename.H
+Fluid_Image.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Double_Window.H
+Fluid_Image.o: ../FL/Fl_Window.H ../FL/Fl_Button.H ../FL/Fl_Preferences.H
+Fluid_Image.o: ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
+Fluid_Image.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
+Fluid_Image.o: ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H ../FL/Fl.H
+Fluid_Image.o: ../FL/filename.H ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
+Fluid_Image.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
+Fluid_Image.o: ../FL/Fl_File_Input.H ../FL/Fl_Return_Button.H ../FL/fl_ask.H
+about_panel.o: about_panel.h ../FL/Fl.H ../FL/Enumerations.H
+about_panel.o: ../FL/Fl_Export.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
+about_panel.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Group.H
+about_panel.o: ../FL/Fl_Box.H ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
+about_panel.o: ../FL/Fl_Button.H ../FL/Fl_Pixmap.H ../FL/Fl_Image.H
+align_widget.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
+align_widget.o: ../FL/Fl_Window.H Fl_Widget_Type.h Fl_Type.h
+align_widget.o: ../FL/Fl_Widget.H ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H
+align_widget.o: ../FL/Fl_Widget.H ../FL/Fl_Image.H Fluid_Image.h
+align_widget.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/Fl_Tabs.H
+align_widget.o: ../FL/Fl_Group.H ../FL/Fl_Pack.H ../FL/Fl_Group.H
+align_widget.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H
+align_widget.o: ../FL/Fl_Menu_.H ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
+align_widget.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H undo.h
+alignment_panel.o: alignment_panel.h ../FL/Fl.H ../FL/Enumerations.H
+alignment_panel.o: ../FL/Fl_Export.H ../FL/Fl_Text_Buffer.H
+alignment_panel.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/Fl_Group.H
+alignment_panel.o: ../FL/Fl_Widget.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
+alignment_panel.o: ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
+alignment_panel.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
+alignment_panel.o: ../FL/Fl_Preferences.H ../FL/Fl_Tooltip.H
+alignment_panel.o: ../FL/Fl_Widget.H ../FL/Fl_Button.H ../FL/Fl_Tabs.H
+alignment_panel.o: ../FL/Fl_Group.H ../FL/Fl_Box.H ../FL/Fl_Input.H
+alignment_panel.o: ../FL/Fl_Input_.H ../FL/Fl_Light_Button.H
+alignment_panel.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
+alignment_panel.o: ../FL/Fl_Image.H ../FL/Fl_Check_Button.H
+alignment_panel.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
+alignment_panel.o: ../FL/Fl_Return_Button.H
code.o: ../src/flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H
code.o: ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Type.h ../FL/Fl_Widget.H
code.o: ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H
@@ -152,23 +184,24 @@ code.o: ../FL/fl_draw.H ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Pack.H
code.o: ../FL/Fl_Group.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
code.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Choice.H
code.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-code.o: ../FL/Fl_Menu_Bar.H alignment_panel.h ../FL/Fl_Text_Buffer.H
-code.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/Fl_Scrollbar.H
-code.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
-code.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Preferences.H
-code.o: ../FL/Fl_Tooltip.H ../FL/Fl_Button.H ../FL/Fl_Box.H
-code.o: ../FL/Fl_Light_Button.H ../FL/Fl_Check_Button.H
+code.o: ../FL/Fl_Window.H ../FL/Fl_Menu_Bar.H alignment_panel.h
+code.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H ../FL/fl_draw.H
+code.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
+code.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
+code.o: ../FL/Fl_Preferences.H ../FL/Fl_Tooltip.H ../FL/Fl_Button.H
+code.o: ../FL/Fl_Box.H ../FL/Fl_Light_Button.H ../FL/Fl_Check_Button.H
code.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H ../FL/Fl_Return_Button.H
code.o: ../FL/filename.H
factory.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/Fl_Group.H
factory.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
factory.o: ../FL/Fl_Pixmap.H ../src/flstring.h ../FL/Fl_Export.H ../config.h
-factory.o: Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Widget.H ../FL/Fl_Menu.H
-factory.o: ../FL/Fl_Menu_Item.H Fluid_Image.h ../FL/Fl_Shared_Image.H
-factory.o: ../FL/fl_draw.H ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Pack.H
-factory.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H
-factory.o: ../FL/Fl_Menu_.H ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
-factory.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H
+factory.o: undo.h Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Widget.H
+factory.o: ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H Fluid_Image.h
+factory.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/Fl_Tabs.H
+factory.o: ../FL/Fl_Group.H ../FL/Fl_Pack.H ../FL/Fl_Wizard.H
+factory.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
+factory.o: ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H
+factory.o: ../FL/Fl_Input_.H ../FL/Fl_Window.H ../FL/Fl_Menu_Bar.H
factory.o: ../FL/Fl_Box.H ../FL/Fl_Button.H ../FL/Fl_Return_Button.H
factory.o: ../FL/Fl_Button.H ../FL/Fl_Repeat_Button.H ../FL/Fl.H
factory.o: ../FL/Fl_Light_Button.H ../FL/Fl_Check_Button.H
@@ -199,7 +232,7 @@ file.o: ../FL/Fl_Return_Button.H ../FL/fl_message.H ../FL/fl_ask.H
file.o: Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Menu.H Fluid_Image.h
file.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/Fl_Pack.H
file.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H
-file.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Menu_Bar.H
+file.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Window.H ../FL/Fl_Menu_Bar.H
fluid.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
fluid.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
fluid.o: ../FL/Fl_Widget.H ../FL/Fl_Box.H ../FL/Fl_Button.H
@@ -220,23 +253,33 @@ fluid.o: alignment_panel.h ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
fluid.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Tooltip.H ../FL/Fl_Widget.H
fluid.o: ../FL/Fl_Tabs.H ../FL/Fl_Light_Button.H function_panel.h
fluid.o: ../FL/Fl_Window.H ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H
-fluid.o: about_panel.h Fl_Type.h ../FL/Fl_Menu.H Fluid_Image.h
+fluid.o: about_panel.h undo.h Fl_Type.h ../FL/Fl_Menu.H Fluid_Image.h
fluid.o: ../FL/Fl_Shared_Image.H ../FL/Fl_Pack.H ../FL/Fl_Wizard.H
fluid.o: ../FL/Fl_Menu_.H ../FL/Fl_Input_Choice.H
-align_widget.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
-align_widget.o: ../FL/Fl_Window.H Fl_Widget_Type.h Fl_Type.h
-align_widget.o: ../FL/Fl_Widget.H ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H
-align_widget.o: ../FL/Fl_Widget.H ../FL/Fl_Image.H Fluid_Image.h
-align_widget.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/Fl_Tabs.H
-align_widget.o: ../FL/Fl_Group.H ../FL/Fl_Pack.H ../FL/Fl_Group.H
-align_widget.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H
-align_widget.o: ../FL/Fl_Menu_.H ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
-align_widget.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H
-about_panel.o: about_panel.h ../FL/Fl.H ../FL/Enumerations.H
-about_panel.o: ../FL/Fl_Export.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-about_panel.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Group.H
-about_panel.o: ../FL/Fl_Box.H ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
-about_panel.o: ../FL/Fl_Button.H ../FL/Fl_Pixmap.H ../FL/Fl_Image.H
+function_panel.o: function_panel.h ../FL/Fl.H ../FL/Enumerations.H
+function_panel.o: ../FL/Fl_Export.H ../FL/Fl_Window.H ../FL/Fl_Light_Button.H
+function_panel.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H
+function_panel.o: ../FL/Fl_Button.H ../FL/Fl_Button.H ../FL/Fl_Text_Editor.H
+function_panel.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/Fl_Group.H
+function_panel.o: ../FL/Fl_Widget.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
+function_panel.o: ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H ../FL/Fl_Group.H
+function_panel.o: ../FL/Fl_Box.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
+function_panel.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H ../FL/Fl_Pixmap.H
+function_panel.o: Fl_Type.h ../FL/Fl_Widget.H ../FL/Fl_Menu.H Fluid_Image.h
+function_panel.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/Fl_Tabs.H
+function_panel.o: ../FL/Fl_Pack.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
+function_panel.o: ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
+function_panel.o: ../FL/Fl_Menu_Bar.H undo.h
+undo.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_Type.h
+undo.o: ../FL/Fl_Widget.H ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H
+undo.o: ../FL/Fl_Widget.H ../FL/Fl_Image.H Fluid_Image.h
+undo.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/Fl_Tabs.H
+undo.o: ../FL/Fl_Group.H ../FL/Fl_Pack.H ../FL/Fl_Group.H ../FL/Fl_Wizard.H
+undo.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
+undo.o: ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H
+undo.o: ../FL/Fl_Input_.H ../FL/Fl_Window.H ../FL/Fl_Menu_Bar.H undo.h
+undo.o: ../FL/Fl_Preferences.H ../src/flstring.h ../FL/Fl_Export.H
+undo.o: ../config.h
widget_panel.o: widget_panel.h ../FL/Fl.H ../FL/Enumerations.H
widget_panel.o: ../FL/Fl_Export.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
widget_panel.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Tabs.H
@@ -249,32 +292,3 @@ widget_panel.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H
widget_panel.o: ../FL/fl_draw.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
widget_panel.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Return_Button.H
widget_panel.o: ../FL/Fl_Button.H
-alignment_panel.o: alignment_panel.h ../FL/Fl.H ../FL/Enumerations.H
-alignment_panel.o: ../FL/Fl_Export.H ../FL/Fl_Text_Buffer.H
-alignment_panel.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/Fl_Group.H
-alignment_panel.o: ../FL/Fl_Widget.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-alignment_panel.o: ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
-alignment_panel.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-alignment_panel.o: ../FL/Fl_Preferences.H ../FL/Fl_Tooltip.H
-alignment_panel.o: ../FL/Fl_Widget.H ../FL/Fl_Button.H ../FL/Fl_Tabs.H
-alignment_panel.o: ../FL/Fl_Group.H ../FL/Fl_Box.H ../FL/Fl_Input.H
-alignment_panel.o: ../FL/Fl_Input_.H ../FL/Fl_Light_Button.H
-alignment_panel.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-alignment_panel.o: ../FL/Fl_Image.H ../FL/Fl_Check_Button.H
-alignment_panel.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-alignment_panel.o: ../FL/Fl_Return_Button.H
-function_panel.o: function_panel.h ../FL/Fl.H ../FL/Enumerations.H
-function_panel.o: ../FL/Fl_Export.H ../FL/Fl_Window.H ../FL/Fl_Light_Button.H
-function_panel.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H
-function_panel.o: ../FL/Fl_Button.H ../FL/Fl_Button.H ../FL/Fl_Group.H
-function_panel.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H
-function_panel.o: ../FL/fl_draw.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-function_panel.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-function_panel.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Box.H
-function_panel.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
-function_panel.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H ../FL/Fl_Pixmap.H
-function_panel.o: Fl_Type.h ../FL/Fl_Widget.H ../FL/Fl_Menu.H Fluid_Image.h
-function_panel.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/Fl_Tabs.H
-function_panel.o: ../FL/Fl_Pack.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
-function_panel.o: ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
-function_panel.o: ../FL/Fl_Menu_Bar.H
diff --git a/vcnet/fluid.vcproj b/vcnet/fluid.vcproj
index 78a0c26ad..5f9af8885 100644
--- a/vcnet/fluid.vcproj
+++ b/vcnet/fluid.vcproj
@@ -429,6 +429,25 @@
</FileConfiguration>
</File>
<File
+ RelativePath="..\fluid\undo.cxx">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""/>
+ </FileConfiguration>
+ </File>
+ <File
RelativePath="..\fluid\widget_panel.cxx">
<FileConfiguration
Name="Debug|Win32">
diff --git a/visualc/fluid.dsp b/visualc/fluid.dsp
index caef12435..05f405eac 100644
--- a/visualc/fluid.dsp
+++ b/visualc/fluid.dsp
@@ -152,6 +152,10 @@ SOURCE=..\fluid\function_panel.cxx
# End Source File
# Begin Source File
+SOURCE=..\fluid\undo.cxx
+# End Source File
+# Begin Source File
+
SOURCE=..\fluid\widget_panel.cxx
# End Source File
# End Target