diff options
| author | Johannes Hofmann <johannes.hofmann@gmx.de> | 2004-10-21 17:55:36 +0000 | 
|---|---|---|
| committer | Johannes Hofmann <johannes.hofmann@gmx.de> | 2004-10-21 17:55:36 +0000 | 
| commit | 382846248e84c478f713deabbb05a18c1a0d6951 (patch) | |
| tree | b58f10daa02582f2040acb00459f665ec655d9cf /src/PSEditWidget.cxx | |
| parent | aa60a0e14a2f186f1b8d282fdc377889a32fada9 (diff) | |
separated model out from PSEditWidget 
separated model out from PSEditWidget
Diffstat (limited to 'src/PSEditWidget.cxx')
| -rw-r--r-- | src/PSEditWidget.cxx | 241 | 
1 files changed, 29 insertions, 212 deletions
diff --git a/src/PSEditWidget.cxx b/src/PSEditWidget.cxx index c10d550..ef8431c 100644 --- a/src/PSEditWidget.cxx +++ b/src/PSEditWidget.cxx @@ -1,5 +1,5 @@  //  -// "$Id: PSEditWidget.cxx,v 1.17 2004/10/13 18:03:08 hofmann Exp $" +// "$Id: PSEditWidget.cxx,v 1.18 2004/10/21 19:55:36 hofmann Exp $"  //  // PSEditWidget routines.  // @@ -38,52 +38,27 @@  #include "PSEditWidget.H"  void PSEditWidget::clear_text() { -  cur_text = NULL; -  for (int i = 0; i < max_pages; i++) { -    if (text[i]) { -      delete(text[i]); -      text[i] = NULL; -    } -  } +  model->clear();  }  void PSEditWidget::draw() {    GsWidget::draw(); -  if (text[page]) { -    text[page]->draw(x() ,y()); -  } +  }  PSEditWidget::PSEditWidget(int X,int Y,int W, int H) : GsWidget(X, Y, W, H) { -  max_pages = 32; -  text = (PSText**) malloc(sizeof(PSText*) * max_pages); -  for (int i = 0; i < max_pages; i++) { -    text[i] = NULL; -  } -  cur_text = NULL; +  model = new PSEditModel(paper_x, paper_y, xdpi, ydpi);    cur_size = 12;    show_tags = 1;  }  int PSEditWidget::next() { -  if (page >= max_pages) { -    max_pages = max_pages * 2; -    text = (PSText**) realloc(text, sizeof(PSText*) * max_pages); -    for (int i = max_pages / 2; i < max_pages; i++) { -      text[i] = NULL; -    } -  } -  cur_text = NULL; +  model->set_page(page);    return GsWidget::next();  }    void PSEditWidget::new_text(int x1, int y1, const char *s, int p) { -  cur_text = new PSText(this, x1, y1, s, cur_size); -  if (text[p]) { -    text[p]->append(cur_text); -  } else { -    text[p] = cur_text; -  } +  model->new_text(x1, y1, s, cur_size, p);    redraw();  } @@ -92,55 +67,31 @@ void PSEditWidget::new_text(int x1, int y1, const char *s) {  }  int PSEditWidget::set_cur_text(int x1, int y1) { -  if (text[page]) { -    cur_text = text[page]->get_match(x1, y1); -    if (cur_text) { -      redraw(); -      return 0; -    } +  if (model->set_cur_text(x1, y1, page) == 0) { +    redraw(); +    return 0;    }    return 1;  }  void PSEditWidget::append_text(const char *s) { -  if (cur_text && s) { -    cur_text->append_text(s); -    redraw(); -  } +  model->append_text(s); +  redraw();  }  void PSEditWidget::move(int x1, int y1) { -  if (cur_text) { -    cur_text->move(x1, y1); -    redraw(); -  } +  model->move(x1, y1); +  redraw();  }  void PSEditWidget::rm_char() { -  if (cur_text) { -    cur_text->rm_char(); -    redraw(); -  } -} - -int PSEditWidget::ps_to_display_x(int x1) { -  return (int) ((float) x1 * xdpi / 72.0); -} - -int PSEditWidget::ps_to_display_y(int y1) { -  return (int) ((float) (paper_y - y1) * xdpi / 72.0); -} - -int PSEditWidget::ps_x(int x1) { -  return (int) ((float) x1 * 72.0 / xdpi); +  model->rm_char(); +  redraw();  } -int PSEditWidget::ps_y(int y1) { -  return paper_y - (int)((float) y1 * 72.0 / ydpi); -}  int PSEditWidget::reload() { -  cur_text = NULL; +  model->set_page(0);    return GsWidget::reload();  } @@ -150,23 +101,23 @@ void PSEditWidget::set_cur_size(int s) {  void PSEditWidget::set_size(int s) {    set_cur_size(s); -  if (cur_text) { -    cur_text->size = s; -    redraw(); -  } +  model->set_size(s); +  redraw();  }  int PSEditWidget::get_size() { -  if (cur_text) { -    return cur_text->size; +  int s; + +  s = model->get_size(); +  if (s >= 0) { +    return s;    } else {      return cur_size;    }  } -  int PSEditWidget::get_max_pages() { -  return max_pages; +  return model->get_max_pages();  }  int PSEditWidget::get_show_tags() { @@ -178,29 +129,17 @@ void PSEditWidget::set_show_tags(int s) {    redraw();  } -PSText *PSEditWidget::get_text(int p) { -  if (p >= max_pages) { -    return 0; -  } else { -    return text[p]; -  } -} -  int PSEditWidget::set_tag(const char *t) { -  if (cur_text) { +  if (model->set_tag(t) == 0) {      mod++; -    return cur_text->set_tag(t); +    return 0;    } else {      return 1;    }  }  char *PSEditWidget::get_tag() { -  if (cur_text) { -    return cur_text->get_tag(); -  } else { -    return NULL; -  } +  return model->get_tag();  }  int PSEditWidget::modified() { @@ -211,131 +150,9 @@ int PSEditWidget::file_loaded() {    return loaded;  } -PSText::PSText(PSEditWidget *g, int x1, int y1, const char *s1, int size1) { -  x = x1; -  y = y1; -  s = strdup(s1); -  tag = NULL; -  c = FL_BLACK; -  size = size1; -  next = NULL; -  gsew = g; -} +int PSEditWidget::replace_tag(char *tag, char *text) { +  fprintf(stderr, "%s => %s\n", tag, text); -PSText::~PSText() { -  if (next) { -    delete(next); -  } -  if (s) { -    free(s); -  } -  if (tag) { -    free(tag); -  } -} -   -void PSText::append_text(const char*s1) { -  int len = (s?strlen(s):0) + strlen(s1) + 1; -  char *tmp = (char*) malloc(len); -   -  strncpy(tmp, s?s:"", len); -  strncat(tmp, s1, len - strlen(tmp)); -   -  if (s) { -    free(s); -  } -   -  s = tmp; -} - -void PSText::rm_char() { -  if (s && strlen(s) > 0) { -    s[strlen(s) - 1] = '\0'; -  } -} - -void PSText::move(int x1, int y1) { -  x = x1; -  y = y1; -} - -void PSText::append(PSText *g) { -  PSText *p = this; -  while (p->next) { -    p = p->next; -  } -  p->next = g; -} - -PSText *PSText::get_match(int x1, int y1) { -  if (abs(x - x1) < 10 && abs(y - y1) < 10) { -    return this; -  } else if (next) { -    return next->get_match(x1, y1); -  } else { -      return NULL; -  } -} - -void PSText::draw(int off_x,int off_y) { -  PSText *p = this; -  fl_color(c); -  fl_font(FL_HELVETICA, size); -  fl_draw(s, x + off_x, y + off_y); -  if (gsew->cur_text == this) { -    fl_draw_box(FL_BORDER_FRAME, x+off_x-1, y+off_y-fl_height()+fl_descent(), -		(int) fl_width(s)+2, fl_height(), FL_BLACK); -  } - -  if (tag && gsew->get_show_tags()) { -    int text_height = fl_height() - fl_descent(); -    fl_color(FL_BLUE); -    fl_font(FL_COURIER, 10); -     fl_draw(tag, x + off_x, y + off_y - text_height - 1); -  } -   -  if (p->next) { -    p->next->draw(off_x, off_y); -  } -} - -char *PSText::get_text() { -  return s; -} - -char *PSText::get_tag() { -  return tag; -} - -int PSText::set_tag(const char *t) { -  if (tag) { -    free(tag); -  } -  if (t) { -    tag = strdup(t); -  } else { -    tag = NULL; -  } -  gsew->redraw();    return 0;  } -int PSText::get_size() { -  return size; -} - -Fl_Color PSText::get_color() { -  return c; -} - -PSText* PSText::get_next() { -  return next; -} - -int PSText::get_x() { -  return x; -} - -int PSText::get_y() { -  return y; -}  | 
