FLTK 1.3.2

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List
- File Members

Fl_Help_View.H

    00001 //
    00002 // "$Id: Fl_Help_View.H 9126 2011-10-04 13:10:55Z manolo $"
    00003 //
    00004 // Help Viewer widget definitions.
    00005 //
    00006 // Copyright 1997-2010 by Easy Software Products.
    00007 // Image support by Matthias Melcher, Copyright 2000-2009.
    00008 //
    00009 // This library is free software. Distribution and use rights are outlined in
    00010 // the file "COPYING" which should have been included with this file.  If this
    00011 // file is missing or damaged, see the license at:
    00012 //
    00013 //     http://www.fltk.org/COPYING.php
    00014 //
    00015 // Please report all bugs and problems on the following page:
    00016 //
    00017 //     http://www.fltk.org/str.php
    00018 //
    00019
    00020 /* \file
    00021    Fl_Help_View widget . */
    00022
    00023 #ifndef Fl_Help_View_H
    00024 #  define Fl_Help_View_H
    00025
    00026 //
    00027 // Include necessary header files...
    00028 //
    00029
    00030 #  include <stdio.h>
    00031 #  include "Fl.H"
    00032 #  include "Fl_Group.H"
    00033 #  include "Fl_Scrollbar.H"
    00034 #  include "fl_draw.H"
    00035 #  include "Fl_Shared_Image.H"
    00036 #  include "filename.H"
    00037
    00038
    00039 //
    00040 // Fl_Help_Func type - link callback function for files...
    00041 //
    00042
    00043
    00044 typedef const char *(Fl_Help_Func)(Fl_Widget *, const char *);
    00045
    00046
    00047 //
    00048 // Fl_Help_Block structure...
    00049 //
    00050
    00051 struct Fl_Help_Block {
    00052   const char    *start,         // Start of text
    00053                 *end;           // End of text
    00054   uchar         border;         // Draw border?
    00055   Fl_Color      bgcolor;        // Background color
    00056   int           x,              // Indentation/starting X coordinate
    00057                 y,              // Starting Y coordinate
    00058                 w,              // Width
    00059                 h;              // Height
    00060   int           line[32];       // Left starting position for each line
    00061 };
    00062
    00063 //
    00064 // Fl_Help_Link structure...
    00065 //
    00067 struct Fl_Help_Link {
    00068   char          filename[192],
    00069                 name[32];
    00070   int           x,
    00071                 y,
    00072                 w,
    00073                 h;
    00074 };
    00075
    00076 /*
    00077  * Fl_Help_View font stack opaque implementation
    00078  */
    00079
    00081 struct FL_EXPORT Fl_Help_Font_Style {
    00082   Fl_Font      f;
    00083   Fl_Fontsize  s;
    00084   Fl_Color     c;
    00085   void get(Fl_Font &afont, Fl_Fontsize &asize, Fl_Color &acolor) {afont=f; asize=s; acolor=c;}
    00086   void set(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {f=afont; s=asize; c=acolor;}
    00087   Fl_Help_Font_Style(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {set(afont, asize, acolor);}
    00088   Fl_Help_Font_Style(){} // For in table use
    00089 };
    00090
    00092 const size_t MAX_FL_HELP_FS_ELTS = 100;
    00093
    00094 struct FL_EXPORT Fl_Help_Font_Stack {
    00096   Fl_Help_Font_Stack() {
    00097     nfonts_ = 0;
    00098   }
    00099
    00100   void init(Fl_Font f, Fl_Fontsize s, Fl_Color c) {
    00101     nfonts_ = 0;
    00102     elts_[nfonts_].set(f, s, c);
    00103     fl_font(f, s);
    00104     fl_color(c);
    00105   }
    00107   void top(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { elts_[nfonts_].get(f, s, c); }
    00109   void push(Fl_Font f, Fl_Fontsize s, Fl_Color c) {
    00110     if (nfonts_ <  MAX_FL_HELP_FS_ELTS-1) nfonts_ ++;
    00111     elts_[nfonts_].set(f, s, c);
    00112     fl_font(f, s); fl_color(c);
    00113   }
    00115   void pop(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) {
    00116     if (nfonts_ > 0) nfonts_ --;
    00117     top(f, s, c);
    00118     fl_font(f, s); fl_color(c);
    00119   }
    00121   size_t count() const {return nfonts_;} // Gets the current number of fonts in the stack
    00122
    00123 protected:
    00124   size_t nfonts_;
    00125   Fl_Help_Font_Style elts_[100];
    00126 };
    00127
    00130 struct Fl_Help_Target {
    00131   char          name[32];
    00132   int           y;
    00133 };
    00134
    00200 class FL_EXPORT Fl_Help_View : public Fl_Group {        // Help viewer widget
    00201
    00202   enum { RIGHT = -1, CENTER, LEFT };
    00203
    00204   char          title_[1024];
    00205   Fl_Color      defcolor_,
    00206                 bgcolor_,
    00207                 textcolor_,
    00208                 linkcolor_;
    00209   Fl_Font       textfont_;
    00210   Fl_Fontsize  textsize_;
    00211   const char    *value_;
    00212   Fl_Help_Font_Stack fstack_;
    00213   int           nblocks_,
    00214                 ablocks_;
    00215   Fl_Help_Block *blocks_;
    00216
    00217   Fl_Help_Func  *link_;
    00218
    00219   int           nlinks_,
    00220                 alinks_;
    00221   Fl_Help_Link  *links_;
    00222
    00223   int           ntargets_,
    00224                 atargets_;
    00225   Fl_Help_Target *targets_;
    00226
    00227   char          directory_[FL_PATH_MAX];
    00228   char          filename_[FL_PATH_MAX];
    00229   int           topline_,
    00230                 leftline_,
    00231                 size_,
    00232                 hsize_,
    00233                 scrollbar_size_;
    00234   Fl_Scrollbar  scrollbar_,
    00235                 hscrollbar_;
    00236
    00237   static int    selection_first;
    00238   static int    selection_last;
    00239   static int    selection_push_first;
    00240   static int    selection_push_last;
    00241   static int    selection_drag_first;
    00242   static int    selection_drag_last;
    00243   static int    selected;
    00244   static int    draw_mode;
    00245   static int    mouse_x;
    00246   static int    mouse_y;
    00247   static int    current_pos;
    00248   static Fl_Help_View *current_view;
    00249   static Fl_Color hv_selection_color;
    00250   static Fl_Color hv_selection_text_color;
    00251
    00252
    00253   void initfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { f = textfont_; s = textsize_; c = textcolor_; fstack_.init(f, s, c); }
    00254   void pushfont(Fl_Font f, Fl_Fontsize s) {fstack_.push(f, s, textcolor_);}
    00255   void pushfont(Fl_Font f, Fl_Fontsize s, Fl_Color c) {fstack_.push(f, s, c);}
    00256   void popfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) {fstack_.pop(f, s, c);}
    00257
    00258   Fl_Help_Block *add_block(const char *s, int xx, int yy, int ww, int hh, uchar border = 0);
    00259   void          add_link(const char *n, int xx, int yy, int ww, int hh);
    00260   void          add_target(const char *n, int yy);
    00261   static int    compare_targets(const Fl_Help_Target *t0, const Fl_Help_Target *t1);
    00262   int           do_align(Fl_Help_Block *block, int line, int xx, int a, int &l);
    00263   void          draw();
    00264   void          format();
    00265   void          format_table(int *table_width, int *columns, const char *table);
    00266   void          free_data();
    00267   int           get_align(const char *p, int a);
    00268   const char    *get_attr(const char *p, const char *n, char *buf, int bufsize);
    00269   Fl_Color      get_color(const char *n, Fl_Color c);
    00270   Fl_Shared_Image *get_image(const char *name, int W, int H);
    00271   int           get_length(const char *l);
    00272   int           handle(int);
    00273
    00274   void          hv_draw(const char *t, int x, int y);
    00275   char          begin_selection();
    00276   char          extend_selection();
    00277   void          end_selection(int c=0);
    00278   void          clear_global_selection();
    00279   Fl_Help_Link  *find_link(int, int);
    00280   void          follow_link(Fl_Help_Link*);
    00281
    00282 public:
    00283
    00284   Fl_Help_View(int xx, int yy, int ww, int hh, const char *l = 0);
    00285   ~Fl_Help_View();
    00287   const char    *directory() const { if (directory_[0]) return (directory_);
    00288                                         else return ((const char *)0); }
    00290   const char    *filename() const { if (filename_[0]) return (filename_);
    00291                                         else return ((const char *)0); }
    00292   int           find(const char *s, int p = 0);
    00315   void          link(Fl_Help_Func *fn) { link_ = fn; }
    00316   int           load(const char *f);
    00317   void          resize(int,int,int,int);
    00319   int           size() const { return (size_); }
    00320   void          size(int W, int H) { Fl_Widget::size(W, H); }
    00322   void          textcolor(Fl_Color c) { if (textcolor_ == defcolor_) textcolor_ = c; defcolor_ = c; }
    00324   Fl_Color      textcolor() const { return (defcolor_); }
    00326   void          textfont(Fl_Font f) { textfont_ = f; format(); }
    00328   Fl_Font       textfont() const { return (textfont_); }
    00330   void          textsize(Fl_Fontsize s) { textsize_ = s; format(); }
    00332   Fl_Fontsize  textsize() const { return (textsize_); }
    00334   const char    *title() { return (title_); }
    00335   void          topline(const char *n);
    00336   void          topline(int);
    00338   int           topline() const { return (topline_); }
    00339   void          leftline(int);
    00341   int           leftline() const { return (leftline_); }
    00342   void          value(const char *val);
    00344   const char    *value() const { return (value_); }
    00345   void          clear_selection();
    00346   void          select_all();
    00356   int scrollbar_size() const {
    00357       return(scrollbar_size_);
    00358   }
    00378   void scrollbar_size(int newSize) {
    00379       scrollbar_size_ = newSize;
    00380   }
    00381 };
    00382
    00383 #endif // !Fl_Help_View_H
    00384
    00385 //
    00386 // End of "$Id: Fl_Help_View.H 9126 2011-10-04 13:10:55Z manolo $".
    00387 //