summaryrefslogtreecommitdiff
path: root/FL/Fl_Help_View.H
diff options
context:
space:
mode:
Diffstat (limited to 'FL/Fl_Help_View.H')
-rw-r--r--FL/Fl_Help_View.H190
1 files changed, 60 insertions, 130 deletions
diff --git a/FL/Fl_Help_View.H b/FL/Fl_Help_View.H
index 2e47fc784..9357ebf76 100644
--- a/FL/Fl_Help_View.H
+++ b/FL/Fl_Help_View.H
@@ -3,7 +3,7 @@
//
// Copyright 1997-2010 by Easy Software Products.
// Image support by Matthias Melcher, Copyright 2000-2009.
-// Copyright 2011-2024 by Bill Spitzak and others.
+// Copyright 2011-2025 by Bill Spitzak and others.
//
// 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
@@ -16,15 +16,10 @@
// https://www.fltk.org/bugs.php
//
-/* \file
- Fl_Help_View widget . */
-
#ifndef Fl_Help_View_H
#define Fl_Help_View_H
-//
-// Include necessary header files...
-//
+// FLTK header files
#include "Fl.H"
#include "Fl_Group.H"
@@ -32,93 +27,23 @@
#include "fl_draw.H"
#include "filename.H"
+// C++ header files
+
#include <map>
#include <vector>
#include <string>
#include <memory>
-class Fl_Shared_Image;
-//
-// Fl_Help_Func type - link callback function for files...
-//
+// Forward declarations
+class Fl_Shared_Image;
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
- int ol; // is ordered list <OL> element
- int ol_num; // item number in ordered list
-};
-
-
-/*
- * Fl_Help_View font stack opaque implementation
- */
-
-/** Fl_Help_View font stack element definition. */
-struct FL_EXPORT 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_EXPORT 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_[MAX_FL_HELP_FS_ELTS]; ///< font elements
-};
-
-
/**
- The Fl_Help_View widget displays HTML text. Most HTML 2.0
- elements are supported, as well as a primitive implementation of tables.
+ \brief A widget to display formatted text, formatted in a subset of HTML.
+
+ 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:
@@ -187,7 +112,24 @@ protected:
*/
class FL_EXPORT Fl_Help_View : public Fl_Group
{
- // Private class to hold a link with target and its position on screen.
+private: // classes, structs, and types
+
+ /** Private struct to describe blocks of text. */
+ struct Text_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
+ int ol; // is ordered list <OL> element
+ int ol_num; // item number in ordered list
+ };
+
+ /** Private class to hold a link with target and its position on screen. */
class Link {
public:
std::string filename_; // Filename part of a link
@@ -195,8 +137,32 @@ class FL_EXPORT Fl_Help_View : public Fl_Group
Fl_Rect box; // Clickable rectangle that defines the link area
};
+ /** Private font stack element definition. */
+ struct 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);
+ void set(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor);
+ Font_Style(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor);
+ Font_Style() = default; ///< Default constructor
+ };
+
+ /** Private class to hold font information on a stack. */
+ struct Font_Stack {
+ void init(Fl_Font f, Fl_Fontsize s, Fl_Color c);
+ void top(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c);
+ void push(Fl_Font f, Fl_Fontsize s, Fl_Color c);
+ void pop(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c);
+ size_t count() const;
+ protected:
+ std::vector<Font_Style> elts_; ///< font elements
+ };
+
enum { RIGHT = -1, CENTER, LEFT }; ///< Alignments
+private: // data members
+
std::string title_; ///< Title string
Fl_Color defcolor_, ///< Default text color
bgcolor_, ///< Background color
@@ -205,8 +171,8 @@ class FL_EXPORT Fl_Help_View : public Fl_Group
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
- std::vector<Fl_Help_Block> blocks_; ///< Blocks
+ Font_Stack fstack_; ///< font stack management
+ std::vector<Text_Block> blocks_; ///< Blocks
Fl_Help_Func *link_; ///< Link transform function
@@ -240,17 +206,17 @@ class FL_EXPORT Fl_Help_View : public Fl_Group
static Fl_Color hv_selection_color_;
static Fl_Color hv_selection_text_color_;
+private: // methods
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);
+ Text_Block *add_block(const char *s, int xx, int yy, int ww, int hh, uchar border = 0);
void add_link(const std::string &link, int xx, int yy, int ww, int hh);
void add_target(const std::string &n, int yy);
- int do_align(Fl_Help_Block *block, int line, int xx, int a, int &l);
-private:
+ int do_align(Text_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();
@@ -259,7 +225,6 @@ private:
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);
-private:
void hv_draw(const char *t, int x, int y, int entity_extra_length = 0);
char begin_selection();
@@ -270,6 +235,7 @@ private:
void follow_link(std::shared_ptr<Link>);
protected:
+
void draw() override;
public:
@@ -316,45 +282,9 @@ public:
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 \p newSize, 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 newSize to the special value of 0 causes the widget to
- track the global Fl::scrollbar_size(), which is the default.
-
- \param[in] newSize 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 newSize) {
- scrollbar_size_ = newSize;
- }
-
- // Check if the user selected text in this view.
+ int scrollbar_size() const;
+ void scrollbar_size(int newSize);
int text_selected();
-
- // If text is selected in this view, copy it to a clipboard.
int copy(int clipboard=1);
};