// // "$Id$" // // Help Viewer widget definitions. // // Copyright 1997-2005 by Easy Software Products. // Image support donated by Matthias Melcher, Copyright 2000. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // Please report all bugs and problems on the following page: // // http://www.fltk.org/str.php // #ifndef Fl_Help_View_H # define Fl_Help_View_H // // Include necessary header files... // # include # include "Fl.H" # include "Fl_Group.H" # include "Fl_Scrollbar.H" # include "fl_draw.H" # include "Fl_Shared_Image.H" // // Fl_Help_Func type - link callback function for files... // typedef const char *(Fl_Help_Func)(Fl_Widget *, const char *); // // Fl_Help_Block structure... // struct Fl_Help_Block { const char *start, // Start of text *end; // End of text uchar border; // Draw border? Fl_Color bgcolor; // Background color int x, // Indentation/starting X coordinate y, // Starting Y coordinate w, // Width h; // Height int line[32]; // Left starting position for each line }; // // Fl_Help_Link structure... // struct Fl_Help_Link { char filename[192], // Reference filename name[32]; // Link target (blank if none) int x, // X offset of link text y, // Y offset of link text w, // Width of link text h; // Height of link text }; // // Fl_Help_Target structure... // struct Fl_Help_Target { char name[32]; // Target name int y; // Y offset of target }; // // Fl_Help_View class... // class FL_EXPORT Fl_Help_View : public Fl_Group //// Help viewer widget { enum { RIGHT = -1, CENTER, LEFT }; // Alignments char title_[1024]; // Title string Fl_Color defcolor_, // Default text color bgcolor_, // Background color textcolor_, // Text color linkcolor_; // Link color uchar textfont_, // Default font for text textsize_; // Default font size const char *value_; // HTML text value int nblocks_, // Number of blocks/paragraphs ablocks_; // Allocated blocks Fl_Help_Block *blocks_; // Blocks int nfonts_; // Number of fonts in stack uchar fonts_[100][2]; // Font stack Fl_Help_Func *link_; // Link transform function int nlinks_, // Number of links alinks_; // Allocated links Fl_Help_Link *links_; // Links int ntargets_, // Number of targets atargets_; // Allocated targets Fl_Help_Target *targets_; // Targets char directory_[1024]; // Directory for current file char filename_[1024]; // Current filename int topline_, // Top line in document leftline_, // Lefthand position size_, // Total document length hsize_; // Maximum document width Fl_Scrollbar scrollbar_, // Vertical scrollbar for document hscrollbar_; // Horizontal scrollbar static int selection_first; static int selection_last; static int selection_push_first; static int selection_push_last; static int selection_drag_first; static int selection_drag_last; static int selected; static int draw_mode; static int mouse_x; static int mouse_y; static int current_pos; static Fl_Help_View *current_view; static Fl_Color hv_selection_color; static Fl_Color hv_selection_text_color; Fl_Help_Block *add_block(const char *s, int xx, int yy, int ww, int hh, uchar border = 0); void add_link(const char *n, int xx, int yy, int ww, int hh); void add_target(const char *n, int yy); static int compare_targets(const Fl_Help_Target *t0, const Fl_Help_Target *t1); int do_align(Fl_Help_Block *block, int line, int xx, int a, int &l); void draw(); void format(); void format_table(int *table_width, int *columns, const char *table); void free_data(); int get_align(const char *p, int a); const char *get_attr(const char *p, const char *n, char *buf, int bufsize); Fl_Color get_color(const char *n, Fl_Color c); Fl_Shared_Image *get_image(const char *name, int W, int H); int get_length(const char *l); int handle(int); void initfont(uchar &f, uchar &s) { nfonts_ = 0; fl_font(f = fonts_[0][0] = textfont_, s = fonts_[0][1] = textsize_); } void pushfont(uchar f, uchar s) { if (nfonts_ < 99) nfonts_ ++; fl_font(fonts_[nfonts_][0] = f, fonts_[nfonts_][1] = s); } void popfont(uchar &f, uchar &s) { if (nfonts_ > 0) nfonts_ --; fl_font(f = fonts_[nfonts_][0], s = fonts_[nfonts_][1]); } void hv_draw(const char *t, int x, int y); char begin_selection(); char extend_selection(); void end_selection(int c=0); void clear_global_selection(); Fl_Help_Link *find_link(int, int); void follow_link(Fl_Help_Link*); public: Fl_Help_View(int xx, int yy, int ww, int hh, const char *l = 0); ~Fl_Help_View(); const char *directory() const { if (directory_[0]) return (directory_); else return ((const char *)0); } const char *filename() const { if (filename_[0]) return (filename_); else return ((const char *)0); } int find(const char *s, int p = 0); void link(Fl_Help_Func *fn) { link_ = fn; } int load(const char *f); void resize(int,int,int,int); int size() const { return (size_); } void size(int W, int H) { Fl_Widget::size(W, H); } void textcolor(Fl_Color c) { if (textcolor_ == defcolor_) textcolor_ = c; defcolor_ = c; } Fl_Color textcolor() const { return (defcolor_); } void textfont(uchar f) { textfont_ = f; format(); } uchar textfont() const { return (textfont_); } void textsize(uchar s) { textsize_ = s; format(); } uchar textsize() const { return (textsize_); } const char *title() { return (title_); } void topline(const char *n); void topline(int); int topline() const { return (topline_); } void leftline(int); int leftline() const { return (leftline_); } void value(const char *v); const char *value() const { return (value_); } void clear_selection(); void select_all(); }; #endif // !Fl_Help_View_H // // End of "$Id$". //