From dd205b01f0eb3d82c0fd7cdbbae41a8441d4fe5e Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Mon, 8 Nov 2004 17:10:34 +0000 Subject: add tab key and arrow key support add tab key and arrow key support --- src/PSEditModel.H | 4 +++- src/PSEditModel.cxx | 20 +++++++++++++++++++- src/PSEditText.H | 21 ++++++++++++++++++++- src/PSEditWidget.H | 14 ++++++++------ src/PSEditWidget.cxx | 30 +++++++++++++++++++++++++++--- src/PSEditor.cxx | 37 +++++++++++++++++++++++++++++++------ 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