summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Hofmann <johannes.hofmann@gmx.de>2004-11-08 17:10:34 +0000
committerJohannes Hofmann <johannes.hofmann@gmx.de>2004-11-08 17:10:34 +0000
commitdd205b01f0eb3d82c0fd7cdbbae41a8441d4fe5e (patch)
tree51187f4faa738993deebf0653fd145f08478ebb6
parent5334e884380e6c1c79704f9403ab98b2f6fefd7f (diff)
add tab key and arrow key support
add tab key and arrow key support
-rw-r--r--src/PSEditModel.H4
-rw-r--r--src/PSEditModel.cxx20
-rw-r--r--src/PSEditText.H21
-rw-r--r--src/PSEditWidget.H14
-rw-r--r--src/PSEditWidget.cxx30
-rw-r--r--src/PSEditor.cxx37
6 files changed, 108 insertions, 18 deletions
diff --git a/src/PSEditModel.H b/src/PSEditModel.H
index 5f49f71..2504d3d 100644
--- a/src/PSEditModel.H
+++ b/src/PSEditModel.H
@@ -1,5 +1,5 @@
//
-// "$Id: PSEditModel.H,v 1.9 2004/10/26 16:58:49 hofmann Exp $"
+// "$Id: PSEditModel.H,v 1.10 2004/11/08 18:10:34 hofmann Exp $"
//
// X11 header file for the Fast Light Tool Kit (FLTK).
//
@@ -72,6 +72,8 @@ public:
int set_cur_text(int x1, int y1, int p);
+ int next_text(int p);
+
int is_cur_text(PSEditText *t);
PSEditText *get_text(int p);
diff --git a/src/PSEditModel.cxx b/src/PSEditModel.cxx
index 8811ac8..7a25a89 100644
--- a/src/PSEditModel.cxx
+++ b/src/PSEditModel.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: PSEditModel.cxx,v 1.9 2004/10/26 18:11:14 hofmann Exp $"
+// "$Id: PSEditModel.cxx,v 1.10 2004/11/08 18:10:34 hofmann Exp $"
//
// PSEditWidget routines.
//
@@ -111,6 +111,24 @@ int PSEditModel::set_cur_text(int x1, int y1, int p) {
return 1;
}
+int PSEditModel::next_text(int p) {
+ PSEditText *t;
+
+ if (p < 0 || p >= max_pages) {
+ return 1;
+ }
+
+ if (cur_text) {
+ cur_text = cur_text->get_next();
+ return 0;
+ } else if (text[p]) {
+ cur_text = text[p];
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
int PSEditModel::is_cur_text(PSEditText *t) {
return (t && t == cur_text);
}
diff --git a/src/PSEditText.H b/src/PSEditText.H
index 1e9e341..ea35dd8 100644
--- a/src/PSEditText.H
+++ b/src/PSEditText.H
@@ -1,5 +1,5 @@
//
-// "$Id: PSEditText.H,v 1.3 2004/10/21 21:02:05 hofmann Exp $"
+// "$Id: PSEditText.H,v 1.4 2004/11/08 18:10:34 hofmann Exp $"
//
// X11 header file for the Fast Light Tool Kit (FLTK).
//
@@ -27,29 +27,48 @@ class PSEditText;
class PSEditText {
int x, y;
+
char *s;
+
char *tag;
+
PSEditText *next;
public:
int c;
+
int size;
PSEditText(int x1, int y1, const char *s1, int size1);
+
~PSEditText();
+
void append_text(const char*s1);
+
void rm_char();
+
void move(int x1, int y1);
+
void append(PSEditText *g);
+
PSEditText *get_match(int x1, int y1);
+
int set_text(const char *t);
+
char *get_text();
+
char *get_tag();
+
int set_tag(const char *t);
+
int get_size();
+
PSEditText *get_next();
+
int get_color();
+
int get_x();
+
int get_y();
};
diff --git a/src/PSEditWidget.H b/src/PSEditWidget.H
index 775ac42..7319b3f 100644
--- a/src/PSEditWidget.H
+++ b/src/PSEditWidget.H
@@ -1,5 +1,5 @@
//
-// "$Id: PSEditWidget.H,v 1.11 2004/10/26 18:08:57 hofmann Exp $"
+// "$Id: PSEditWidget.H,v 1.12 2004/11/08 18:10:34 hofmann Exp $"
//
// X11 header file for the Fast Light Tool Kit (FLTK).
//
@@ -56,7 +56,9 @@ public:
void new_text(int x1, int y1, const char *s);
int set_cur_text(int x1, int y1);
-
+
+ int next_text();
+
void append_text(const char *s);
void move(int x1, int y1, int last_x, int last_y);
@@ -89,13 +91,13 @@ public:
int replace_tag(char* tag, char* text);
- int PSEditWidget::bb_x(PSEditText *t);
+ int bb_x(PSEditText *t);
- int PSEditWidget::bb_y(PSEditText *t);
+ int bb_y(PSEditText *t);
- int PSEditWidget::bb_w(PSEditText *t);
+ int bb_w(PSEditText *t);
- int PSEditWidget::bb_h(PSEditText *t);
+ int bb_h(PSEditText *t);
};
#endif
diff --git a/src/PSEditWidget.cxx b/src/PSEditWidget.cxx
index 21b327f..1e6db7e 100644
--- a/src/PSEditWidget.cxx
+++ b/src/PSEditWidget.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: PSEditWidget.cxx,v 1.24 2004/10/26 18:08:57 hofmann Exp $"
+// "$Id: PSEditWidget.cxx,v 1.25 2004/11/08 18:10:34 hofmann Exp $"
//
// PSEditWidget routines.
//
@@ -92,6 +92,7 @@ void PSEditWidget::new_text(int x1, int y1, const char *s, int p) {
t_old = model->get_cur_text();
model->new_text(x1, y1, s, cur_size, p);
+ mod++;
t = model->get_cur_text();
@@ -128,11 +129,32 @@ int PSEditWidget::set_cur_text(int x1, int y1) {
return 1;
}
+int PSEditWidget::next_text() {
+ PSEditText *t_new, *t_old;
+ int ret;
+
+ t_old = model->get_cur_text();
+
+ ret = model->next_text(page);
+ mod++;
+ t_new = model->get_cur_text();
+
+ if (t_new) {
+ damage(4, bb_x(t_new), bb_y(t_new), bb_w(t_new), bb_h(t_new));
+ }
+
+ if (t_old) {
+ damage(4, bb_x(t_old), bb_y(t_old), bb_w(t_old), bb_h(t_old));
+ }
+
+ return ret;
+}
+
void PSEditWidget::append_text(const char *s) {
PSEditText *t;
model->append_text(s);
-
+ mod++;
t = model->get_cur_text();
if (t) {
damage(4, bb_x(t), bb_y(t), bb_w(t), bb_h(t));
@@ -143,6 +165,7 @@ void PSEditWidget::move(int x1, int y1, int last_x, int last_y) {
PSEditText *t;
model->move(x1, y1);
+ mod++;
t = model->get_cur_text();
if (t) {
damage(4, bb_x(t), bb_y(t), bb_w(t), bb_h(t));
@@ -161,7 +184,8 @@ void PSEditWidget::rm_char() {
}
model->rm_char();
-
+ mod++;
+
if (t) {
damage(4, bb_x(t), bb_y(t), width, bb_h(t));
}
diff --git a/src/PSEditor.cxx b/src/PSEditor.cxx
index 92eea4b..efd9b97 100644
--- a/src/PSEditor.cxx
+++ b/src/PSEditor.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: PSEditor.cxx,v 1.19 2004/10/26 18:37:56 hofmann Exp $"
+// "$Id: PSEditor.cxx,v 1.20 2004/11/08 18:10:34 hofmann Exp $"
//
// PSEditor routines.
//
@@ -52,7 +52,6 @@ int PSEditor::handle(int event) {
if (!set_cur_text(mark_x, mark_y) == 0) {
new_text(mark_x, mark_y, "");
- mod++;
}
Fl::focus(this);
@@ -75,7 +74,6 @@ int PSEditor::handle(int event) {
x_last = Fl::event_x()-x();
y_last = Fl::event_y()-y();
- mod++;
return 1;
break;
case FL_KEYBOARD:
@@ -84,15 +82,42 @@ int PSEditor::handle(int event) {
int key = Fl::event_key();
if (key == FL_BackSpace) {
rm_char();
- mod++;
+ } else if (key == FL_Left) {
+ PSEditText *t = model->get_cur_text();
+ if (t) {
+ int x = t->get_x();
+ int y = t->get_y();
+ move(x - 1, y, x, y);
+ }
+ } else if (key == FL_Right) {
+ PSEditText *t = model->get_cur_text();
+ if (t) {
+ int x = t->get_x();
+ int y = t->get_y();
+ move(x + 1, y, x, y);
+ }
+ } else if (key == FL_Up) {
+ PSEditText *t = model->get_cur_text();
+ if (t) {
+ int x = t->get_x();
+ int y = t->get_y();
+ move(x, y - 1, x, y);
+ }
+ } else if (key == FL_Down) {
+ PSEditText *t = model->get_cur_text();
+ if (t) {
+ int x = t->get_x();
+ int y = t->get_y();
+ move(x, y + 1, x, y);
+ }
+ } else if (key == FL_Tab) {
+ next_text();
} else if (Fl::compose(del)) {
if (del > 0) {
for (int i=0; i<del; i++) rm_char();
- mod++;
}
if (Fl::event_length()) {
append_text(Fl::event_text());
- mod++;
}
} else {
return 0;