diff options
Diffstat (limited to 'FL/Fl_HelpView.H')
| -rw-r--r-- | FL/Fl_HelpView.H | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/FL/Fl_HelpView.H b/FL/Fl_HelpView.H new file mode 100644 index 000000000..6ed53a4a2 --- /dev/null +++ b/FL/Fl_HelpView.H @@ -0,0 +1,212 @@ +// +// "$Id: Fl_HelpView.H,v 1.1.2.1 2001/08/02 19:43:49 easysw Exp $" +// +// Help Viewer widget definitions. +// +// Copyright 1997-2001 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 to "fltk-bugs@fltk.org". +// + +#ifndef _Fl_HelpView_H_ +# define _Fl_HelpView_H_ + +// +// Include necessary header files... +// + +# include <stdio.h> +# include <FL/Fl.H> +# include <FL/Fl_Group.H> +# include <FL/Fl_Scrollbar.H> +# include <FL/fl_draw.H> + + +// +// Fl_HelpFunc type - link callback function for files... +// + + +typedef const char *(Fl_HelpFunc)(const char *); + + +// +// Fl_HelpBlock structure... +// + +struct Fl_HelpBlock +{ + const char *start, // Start of text + *end; // End of text + uchar font, // Text font + size, // Text size + border; // Draw border? + int x, // Indentation/starting X coordinate + y, // Starting Y coordinate + w, // Width + h; // Height + int line[32]; // Left starting position for each line +}; + +// +// Fl_HelpLink structure... +// + +struct Fl_HelpLink +{ + 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_HelpTarget structure... +// + +struct Fl_HelpTarget +{ + char name[32]; // Target name + int y; // Y offset of target +}; + +// +// Fl_HelpImage structure... +// + +struct Fl_Pixmap; +struct Fl_Image; + +struct Fl_HelpImage +{ + char *name, // Path and name of the image + wattr[8], // Width attribute + hattr[8]; // Height attribute + Fl_Image *image; // FLTK image representation + unsigned char *data; // Raw image data + int w, h, d; // Image size & depth +}; + +// +// Fl_HelpView class... +// + +class Fl_HelpView : 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_HelpBlock *blocks_; // Blocks + + int nfonts_; // Number of fonts in stack + uchar fonts_[100][2]; // Font stack + + Fl_HelpFunc *link_; // Link transform function + + int nlinks_, // Number of links + alinks_; // Allocated links + Fl_HelpLink *links_; // Links + + int ntargets_, // Number of targets + atargets_; // Allocated targets + Fl_HelpTarget *targets_; // Targets + + char directory_[1024]; // Directory for current file + char filename_[1024]; // Current filename + int topline_, // Top line in document + size_; // Total document length + Fl_Scrollbar scrollbar_; // Vertical scrollbar for document + + int nimage_, // Number of images in a page + aimage_; // Allocated blocks + Fl_HelpImage *image_; // list of image descriptors + + Fl_HelpImage *add_image(const char *name, const char *wattr, + const char *hattr, int make = 1); + Fl_HelpImage *find_image(const char *name, const char *wattr, + const char *hattr); + int load_gif(Fl_HelpImage *img, FILE *fp); + int load_jpeg(Fl_HelpImage *img, FILE *fp); + int load_png(Fl_HelpImage *img, FILE *fp); + + Fl_HelpBlock *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_HelpTarget *t0, const Fl_HelpTarget *t1); + int do_align(Fl_HelpBlock *block, int line, int xx, int a, int &l); + void draw(); + void format(); + 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); + 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]); } + + public: + + Fl_HelpView(int xx, int yy, int ww, int hh, const char *l = 0); + ~Fl_HelpView(); + 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); } + void link(Fl_HelpFunc *fn) { link_ = fn; } + int load(const char *f); + void resize(int,int,int,int); + int size() const { return (size_); } + 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 value(const char *v); + const char *value() const { return (value_); } +}; + +#endif // !_Fl_HelpView_H_ + +// +// End of "$Id: Fl_HelpView.H,v 1.1.2.1 2001/08/02 19:43:49 easysw Exp $". +// |
