| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- //
- // "$Id: Fl_Help_View.H 8864 2011-07-19 04:49:30Z greg.ercolano $"
- //
- // Help Viewer widget definitions.
- //
- // Copyright 1997-2010 by Easy Software Products.
- // Image support by Matthias Melcher, Copyright 2000-2009.
- //
- // This library is free software. Distribution and use rights are outlined in
- // the file "COPYING" which should have been included with this file. If this
- // file is missing or damaged, see the license at:
- //
- // http://www.fltk.org/COPYING.php
- //
- // Please report all bugs and problems on the following page:
- //
- // http://www.fltk.org/str.php
- //
- /* \file
- Fl_Help_View widget . */
- #ifndef Fl_Help_View_H
- # define Fl_Help_View_H
- //
- // Include necessary header files...
- //
- # include <stdio.h>
- # include "Fl.H"
- # include "Fl_Group.H"
- # include "Fl_Scrollbar.H"
- # include "fl_draw.H"
- # include "Fl_Shared_Image.H"
- # include "filename.H"
- //
- // Fl_Help_Func type - link callback function for files...
- //
- typedef const char *(Fl_Help_Func)(Fl_Widget *, const char *, 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
- Fl_Color border_color; // Border 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...
- //
- /** Definition of a link for the html viewer. */
- 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_View font stack opaque implementation
- */
- /** Fl_Help_View font stack element definition. */
- struct Fl_Help_Font_Style {
- Fl_Font f; ///< Font
- Fl_Fontsize s; ///< Font Size
- Fl_Color c; ///< Font Color
- void get(Fl_Font &afont, Fl_Fontsize &asize, Fl_Color &acolor) {afont=f; asize=s; acolor=c;} ///< Gets current font attributes
- void set(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {f=afont; s=asize; c=acolor;} ///< Sets current font attributes
- Fl_Help_Font_Style(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {set(afont, asize, acolor);}
- Fl_Help_Font_Style(){} // For in table use
- };
- /** Fl_Help_View font stack definition. */
- const size_t MAX_FL_HELP_FS_ELTS = 100;
- struct Fl_Help_Font_Stack {
- /** font stack construction, initialize attributes. */
- Fl_Help_Font_Stack() {
- nfonts_ = 0;
- }
- void init(Fl_Font f, Fl_Fontsize s, Fl_Color c) {
- nfonts_ = 0;
- elts_[nfonts_].set(f, s, c);
- fl_font(f, s);
- fl_color(c);
- }
- /** Gets the top (current) element on the stack. */
- void top(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { elts_[nfonts_].get(f, s, c); }
- /** Pushes the font style triplet on the stack, also calls fl_font() & fl_color() adequately */
- void push(Fl_Font f, Fl_Fontsize s, Fl_Color c) {
- if (nfonts_ < MAX_FL_HELP_FS_ELTS-1) nfonts_ ++;
- elts_[nfonts_].set(f, s, c);
- fl_font(f, s); fl_color(c);
- }
- /** Pops from the stack the font style triplet and calls fl_font() & fl_color() adequately */
- void pop(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) {
- if (nfonts_ > 0) nfonts_ --;
- top(f, s, c);
- fl_font(f, s); fl_color(c);
- }
- /** Gets the current count of font style elements in the stack. */
- size_t count() const {return nfonts_;} // Gets the current number of fonts in the stack
- protected:
- size_t nfonts_; ///< current number of fonts in stack
- Fl_Help_Font_Style elts_[100]; ///< font elements
- };
- /** Fl_Help_Target structure */
- struct Fl_Help_Target
- {
- char name[32]; ///< Target name
- int y; ///< Y offset of target
- };
- /**
- The Fl_Help_View widget displays HTML text. Most HTML 2.0
- elements are supported, as well as a primitive implementation of tables.
- GIF, JPEG, and PNG images are displayed inline.
- Supported HTML tags:
- - A: HREF/NAME
- - B
- - BODY: BGCOLOR/TEXT/LINK
- - BR
- - CENTER
- - CODE
- - DD
- - DL
- - DT
- - EM
- - FONT: COLOR/SIZE/FACE=(helvetica/arial/sans/times/serif/symbol/courier)
- - H1/H2/H3/H4/H5/H6
- - HEAD
- - HR
- - I
- - IMG: SRC/WIDTH/HEIGHT/ALT
- - KBD
- - LI
- - OL
- - P
- - PRE
- - STRONG
- - TABLE: TH/TD/TR/BORDER/BGCOLOR/COLSPAN/ALIGN=CENTER|RIGHT|LEFT
- - TITLE
- - TT
- - U
- - UL
- - VAR
- Supported color names:
- - black,red,green,yellow,blue,magenta,fuchsia,cyan,aqua,white,gray,grey,lime,maroon,navy,olive,purple,silver,teal.
- Supported urls:
- - Internal: file:
- - External: http: ftp: https: ipp: mailto: news:
- Quoted char names:
- - Aacute aacute Acirc acirc acute AElig aelig Agrave agrave amp Aring aring Atilde atilde Auml auml
- - brvbar bull
- - Ccedil ccedil cedil cent copy curren
- - deg divide
- - Eacute eacute Ecirc ecirc Egrave egrave ETH eth Euml euml euro
- - frac12 frac14 frac34
- - gt
- - Iacute iacute Icirc icirc iexcl Igrave igrave iquest Iuml iuml
- - laquo lt
- - macr micro middot
- - nbsp not Ntilde ntilde
- - Oacute oacute Ocirc ocirc Ograve ograve ordf ordm Oslash oslash Otilde otilde Ouml ouml
- - para premil plusmn pound
- - quot
- - raquo reg
- - sect shy sup1 sup2 sup3 szlig
- - THORN thorn times trade
- - Uacute uacute Ucirc ucirc Ugrave ugrave uml Uuml uuml
- - Yacute yacute
- - yen Yuml yuml
- */
- 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
- Fl_Font textfont_; ///< Default font for text
- Fl_Fontsize textsize_; ///< Default font size
- const char *value_; ///< HTML text value
- Fl_Help_Font_Stack fstack_; ///< font stack management
- int nblocks_, ///< Number of blocks/paragraphs
- ablocks_; ///< Allocated blocks
- Fl_Help_Block *blocks_; ///< Blocks
- 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_[FL_PATH_MAX];///< Directory for current file
- char filename_[FL_PATH_MAX]; ///< Current filename
- int topline_, ///< Top line in document
- leftline_, ///< Lefthand position
- size_, ///< Total document length
- hsize_, ///< Maximum document width
- scrollbar_size_; ///< Size for both scrollbars
- Fl_Scrollbar scrollbar_, ///< Vertical scrollbar for document
- hscrollbar_; ///< Horizontal scrollbar
- int font_increment_; //to remove a magic number
- int td_top_gap_; //to remove a magic number
- int td_bottom_gap_; //to remove a magic number
- int tr_gap_; //to remove a magic number
- int line31_; //to remove a magic number
- int td_margin_;
- int td_width_adjust_;
- Fl_Offscreen fl_help_view_buffer;
- int selection_first;
- int selection_last;
- int selection_push_first;
- int selection_push_last;
- int selection_drag_first;
- int selection_drag_last;
- int selected;
- int draw_mode;
- int mouse_x;
- int mouse_y;
- int current_pos;
- Fl_Help_View *current_view;
- Fl_Color hv_selection_color;
- Fl_Color hv_selection_text_color;
- void initfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { f = textfont_; s = textsize_; c = textcolor_; fstack_.init(f, s, c); }
- void pushfont(Fl_Font f, Fl_Fontsize s) {fstack_.push(f, s, textcolor_);}
- void pushfont(Fl_Font f, Fl_Fontsize s, Fl_Color c) {fstack_.push(f, s, c);}
- void popfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) {fstack_.pop(f, s, c);}
- Fl_Help_Block *add_block(const char *s, int xx, int yy, int ww, int hh, uchar border = 0,
- Fl_Color border_color = FL_BLACK);
- 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 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);
- void check_font_attr(const char *attrs, Fl_Font &font, Fl_Fontsize &fsize);
- 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);
- 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:
- int handle(int);
- void draw();
- Fl_Help_View(int xx, int yy, int ww, int hh, const char *l = 0);
- ~Fl_Help_View();
- /** Returns the current directory for the text in the buffer. */
- const char *directory() const { if (directory_[0]) return (directory_);
- else return ((const char *)0); }
- /** Returns the current filename for the text in the buffer. */
- const char *filename() const { if (filename_[0]) return (filename_);
- else return ((const char *)0); }
- int find(const char *s, int p = 0);
- /**
- This method assigns a callback function to use when a link is
- followed or a file is loaded (via Fl_Help_View::load()) that
- requires a different file or path.
- The callback function receives a pointer to the Fl_Help_View
- widget and the URI or full pathname for the file in question.
- It must return a pathname that can be opened as a local file or NULL:
- \code
- const char *fn(Fl_Widget *w, const char *uri);
- \endcode
- The link function can be used to retrieve remote or virtual
- documents, returning a temporary file that contains the actual
- data. If the link function returns NULL, the value of
- the Fl_Help_View widget will remain unchanged.
- If the link callback cannot handle the URI scheme, it should
- return the uri value unchanged or set the value() of the widget
- before returning NULL.
- */
- void link(Fl_Help_Func *fn) { link_ = fn; }
- int load(const char *f);
- void resize(int,int,int,int);
- /** Gets the size of the help view. */
- int size() const { return (size_); }
- void size(int W, int H) { Fl_Widget::size(W, H); }
- /** Sets the default text color. */
- void textcolor(Fl_Color c) { if (textcolor_ == defcolor_) textcolor_ = c; defcolor_ = c; }
- /** Returns the current default text color. */
- Fl_Color textcolor() const { return (defcolor_); }
- /** Sets the default text font. */
- void textfont(Fl_Font f) { textfont_ = f; format(); }
- /** Returns the current default text font. */
- Fl_Font textfont() const { return (textfont_); }
- /** Sets the default text size. */
- void textsize(Fl_Fontsize s) { textsize_ = s; format(); }
- /** Gets the default text size. */
- Fl_Fontsize textsize() const { return (textsize_); }
- /** Returns the current document title, or NULL if there is no title. */
- const char *title() { return (title_); }
- void topline(const char *n);
- void topline(int);
- /** Returns the current top line in pixels. */
- int topline() const { return (topline_); }
- void leftline(int);
- /** Gets the left position in pixels. */
- int leftline() const { return (leftline_); }
- void value(const char *val);
- /** Returns the current buffer contents. */
- const char *value() const { return (value_); }
- void clear_selection();
- void select_all();
- /**
- Gets the current size of the scrollbars' troughs, in pixels.
- If this value is zero (default), this widget will use the
- Fl::scrollbar_size() value as the scrollbar's width.
- \returns Scrollbar size in pixels, or 0 if the global Fl::scrollbar_size() is being used.
- \see Fl::scrollbar_size(int)
- */
- int scrollbar_size() const {
- return(scrollbar_size_);
- }
- /**
- Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.
- Normally you should not need this method, and should use
- Fl::scrollbar_size(int) instead to manage the size of ALL
- your widgets' scrollbars. This ensures your application
- has a consistent UI, is the default behavior, and is normally
- what you want.
- Only use THIS method if you really need to override the global
- scrollbar size. The need for this should be rare.
- Setting \p size to the special value of 0 causes the widget to
- track the global Fl::scrollbar_size(), which is the default.
- \param[in] size Sets the scrollbar size in pixels.\n
- If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
- \see Fl::scrollbar_size()
- */
- void scrollbar_size(int size) {
- scrollbar_size_ = size;
- }
- /** Returns the current font increment in pixels. */
- int font_increment() const { return (font_increment_); }
- void font_increment(int i) {font_increment_ = i;};
- int td_top_gap() const { return (td_top_gap_); }
- void td_top_gap(int i) {td_top_gap_ = i;};
- int td_bottom_gap() const { return (td_bottom_gap_); }
- void td_bottom_gap(int i) {td_bottom_gap_ = i;};
- int tr_gap() const { return (tr_gap_); }
- void tr_gap(int i) {tr_gap_ = i;};
- int line31() const { return (line31_); }
- void line31(int i) {line31_ = i;};
- int td_margin() const { return (td_margin_); }
- void td_margin(int i) {td_margin_ = i;};
- int td_width_adjust() const { return (td_width_adjust_); }
- void td_width_adjust(int i) {td_width_adjust_ = i;};
- DECLARE_CLASS_CHEAP_RTTI_2(Fl_Help_View, Fl_Group)
- };
- #endif // !Fl_Help_View_H
- //
- // End of "$Id: Fl_Help_View.H 8864 2011-07-19 04:49:30Z greg.ercolano $".
- //
|