home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 2 / AUCD2.iso / program / vista.arc / !hyperview / h / viewer < prev   
Text File  |  1996-01-25  |  10KB  |  313 lines

  1. // **************************************************************************
  2. //                     Copyright 1996 David Allison
  3. //
  4. //             VV    VV    IIIIII     SSSSS     TTTTTT       AA
  5. //             VV    VV      II      SS           TT       AA  AA
  6. //             VV    VV      II        SSSS       TT      AA    AA
  7. //              VV  VV       II           SS      TT      AAAAAAAA
  8. //                VV       IIIIII     SSSS        TT      AA    AA
  9. //
  10. //                    MULTI-THREADED C++ WIMP CLASS LIBRARY
  11. //                                for RISC OS
  12. // **************************************************************************
  13. //
  14. //             P U B L I C    D O M A I N    L I C E N C E
  15. //             -------------------------------------------
  16. //
  17. //     This library is copyright. You may not sell the library for
  18. //     profit, but you may sell products which use it providing
  19. //     those products are presented as executable code and are not
  20. //     libraries themselves.  The library is supplied without any
  21. //     warranty and the copyright owner cannot be held responsible for
  22. //     damage resulting from failure of any part of this library.
  23. //
  24. //          See the User Manual for details of the licence.
  25. //
  26. // *************************************************************************
  27.  
  28. #ifndef __viewer_h
  29. #define __viewer_h
  30.  
  31. #include "Vista:vista.h"
  32. #include "viewer.h"
  33. #include <stdio.h>
  34. #include <setjmp.h>
  35.  
  36. class Viewer ;
  37. class HyperView ;
  38.  
  39. class HTMLObject
  40.    {
  41.    public:
  42.       HTMLObject(Viewer *v) ;
  43.       virtual ~HTMLObject() ;
  44.       Viewer *viewer ;
  45.       HTMLObject *next ;
  46.       HTMLObject *prev ;
  47.    } ;
  48.  
  49. class Paragraph ;
  50.  
  51. class ParagraphBody : public FontObject
  52.    {
  53.    public:
  54.       ParagraphBody(Paragraph *p, Window *w, char *name, int fhandle, int x0, int y0, int width, int priority = 0, char *menu = 0) ;
  55.       ~ParagraphBody() ;
  56.       void pointer (int entering) ;                  // pointer entering or leaving object
  57.       void click (int mx, int my, int button) ;      // click on object
  58.       void set_url (char *url) ;
  59.  
  60.       int hyperlink ;
  61.       char *url ;                // uniform resouce locator for hyperlink
  62.       Paragraph *p ;
  63.    } ;
  64.  
  65. class PointerIcon : public Icon
  66.    {
  67.    public:
  68.       PointerIcon (Window *w, Icon *temp, int x, int y, int width, int height, ParagraphBody *body) ;
  69.       ~PointerIcon() ;
  70.       void click(int mx, int my, int button, int icon) ;   // icon has been clicked
  71.    private:
  72.       ParagraphBody *body ;
  73.    } ;
  74.  
  75. class Paragraph : public HTMLObject
  76.    {
  77.    public:
  78.       Paragraph(Viewer *v, int x, int y, int width, int priority) ;        // specify top left x,y and width
  79.       ~Paragraph() ;
  80.       void add_text (char *text) ;                           // add text to the object
  81.       void finish() ;                                        // finish off the object
  82.       int height() ;
  83.       void bold() ;
  84.       void normal() ;
  85.       void italic() ;
  86.       void header(int level) ;
  87.       void system() ;
  88.       void begin_hyperlink() ;
  89.       void end_hyperlink() ;
  90.       void read_position (int &x, int &y) ;
  91.       int width() ;
  92.       void set_font (int) ;
  93.       void set_indent(int) ;
  94.       void set_url (char *url) ;
  95.       void set_last_gap(int gap) ;
  96.       int last_line_height() ;
  97.       void redraw() ;                   // redraw the window under the paragraph
  98.       ParagraphBody *body ;             // paragraph body
  99.       int current_font ;
  100.    } ;
  101.  
  102. class Image : public HTMLObject
  103.    {
  104.    public:
  105.       Image (Viewer *v, char *filename, int x, int y, int priority) ;
  106.       ~Image() ;
  107.       int height() ;
  108.       int width() ;
  109.    private:
  110.       DrawObject *image ;
  111.    } ;
  112.  
  113. class HRuleObject : public Object
  114.    {
  115.    public:
  116.       HRuleObject (Window *w, int y, int width, int priority) ;
  117.       ~HRuleObject() ;
  118.       void redraw (int x0, int y0, int x1, int y1) ;
  119.    } ;
  120.  
  121. class HLine : public HTMLObject
  122.    {
  123.    public:
  124.       HLine (Viewer *v, int y, int width, int priority) ;
  125.       ~HLine() ;
  126.       int height() ;
  127.       int width() ;
  128.    private:
  129.       HRuleObject *line ;
  130.    } ;
  131.  
  132.  
  133. class Controls : public Window
  134.    {
  135.    enum buttons
  136.       {
  137.       BACK,
  138.       FORWARD,
  139.       HOME
  140.       } ;
  141.    public:
  142.       Controls(Viewer *v) ;
  143.       ~Controls() ;
  144.       virtual void click(int mx, int my, int button, int icon) ;   // icon has been clicked
  145.    private:
  146.       Viewer *viewer ;
  147.    } ;
  148.  
  149. class Display : public Window
  150.    {
  151.    public:
  152.       Display(Window *parent) ;
  153.       ~Display() ;
  154.       void print (char *text) ;
  155.    private:
  156.       Icon *output ;
  157.    } ;
  158.  
  159.  
  160. const int PARAGRAPH_NORMAL_PRIORITY = 1 ;
  161.  
  162. struct Anchor
  163.    {
  164.    Anchor *left, *right ;
  165.    char *name ;              // anchor name
  166.    int x ;                   // x coordinate in window
  167.    int y ;                   // y coord
  168.    } ;
  169.  
  170. struct Context
  171.    {
  172.    Context *prev ;            // previous context
  173.    Context *next ;            // next context
  174.    char filename[256] ;
  175.    char root[256] ;
  176.    int x ;
  177.    int y ;
  178.    } ;
  179.  
  180. class Viewer : public Window
  181.    {
  182.    public:
  183.       Viewer(HyperView *h) ;
  184.       ~Viewer() ;
  185.       void close() ;                        // on closing
  186.       void display_file(char *filename, bool new_ctx = true) ;   // diaplay a file in the viewer
  187.       void set_home_document(char *filename) ;
  188.       void add_object(HTMLObject *) ;                   // add a new HTML object to viewer
  189.       void clear() ;                        // clear the viewer of all objects
  190.       int normal_font() ;                   // return font handle for normal font
  191.       int bold_font() ;
  192.       int italic_font() ;
  193.       int bold_italic_font() ;
  194.       int header_font (int level) ;
  195.       int system_font() ;
  196.       void print (char *format...) ;
  197.       bool parse_url (char *url, char *filename, char *anchor) ;   // parse a url into filename and anchor
  198.       void follow_hyperlink (char *filename, char *anchor) ;       // follow a hyper link
  199.       void back() ;                                                // go back one context
  200.       void forward() ;                                             // go forward one context
  201.       void home() ;                                                // go to home document
  202.       Viewer *next ;
  203.       Viewer *prev ;
  204.    private:
  205.       enum Tokens
  206.          {
  207.          TITLE,
  208.      P,
  209.      BR,
  210.      IMG,
  211.      EM,
  212.      B,
  213.      PRE,
  214.      H1,
  215.      H2,
  216.      H3,
  217.      H4,
  218.      H5,
  219.      H6,
  220.      STRING,
  221.      NUMBER,
  222.      A,
  223.      EQUALS,
  224.      WORD,
  225.      EOL,
  226.      HR,
  227.      HTML,
  228.      UL,
  229.      LI,
  230.      OL,
  231.      END = 0x100
  232.          } ;
  233.       enum Attributes
  234.          {
  235.          NAME,
  236.          HREF,
  237.          ALIGN,
  238.          TOP,
  239.          MIDDLE,
  240.          BOTTOM,
  241.          ALT,
  242.          ISMAP,
  243.      CEND,            // command end token
  244.          SRC
  245.          } ;
  246.       HyperView *hyperview ;
  247.       Controls *controls ;
  248.       Display *display ;
  249.       HTMLObject *objects ;
  250.       HTMLObject *last_object ;
  251.       int normal_fhandle ;                // normal font handle
  252.       int bold_fhandle ;                  // bold font handle
  253.       int italic_fhandle ;                // italic font handle
  254.       int bold_italic_fhandle ;           // bold and italic font
  255.       int header_fonts[6] ;               // header font handles
  256.       int system_fhandle ;                // system font handle
  257.       jmp_buf eof_state ;                 // jmp_buf for end of file
  258.       FILE *fp ;
  259.       static char line[4096] ;            // line
  260.       static char sentence[4096] ;        // sentence being built
  261.       char *ch ;
  262.       char *p ;                           // current position in sentence
  263.       char spelling[256] ;
  264.       int value ;
  265.       Paragraph *paragraph ;              // current paragraph
  266.       int x, y ;                          // current x and y coords
  267.       int width ;                         // window width in OS coords
  268.       int min_height ;                    // minimum window height
  269.       char document_root[256] ;           // root directory for documents
  270.       char home_document[256] ;           // home document file name
  271.       char current_document[256] ;        // current document
  272.       int sp ;
  273.       int stack[256] ;
  274.       int current_font ;
  275.       bool preformatted ;
  276.       bool eol ;
  277.       int num_bytes ;
  278.  
  279.       Anchor *anchors ;                   // tree of anchors in window
  280.       Anchor *insert_anchor (Anchor *t, Anchor **root, char *name) ;
  281.       Anchor *find_anchor (Anchor *t, char *name) ;
  282.       void delete_anchor (Anchor *t) ;
  283.       Anchor *current_anchor ;
  284.  
  285.       Context *context_stack ;
  286.       Context *current_context ;
  287.  
  288.       Icon *template_pointer_icon ;
  289.       bool converted ;
  290.  
  291.       void next_line() ;
  292.       int next_char() ;
  293.       int token() ;                       // read a single token
  294.       int word() ;                        // read a single word
  295.       int reserved_word(bool&) ;
  296.       int html_reserved_word() ;          // reserved word inside HTML command
  297.       void new_paragraph(int font, int priority = PARAGRAPH_NORMAL_PRIORITY) ;
  298.       void process_html() ;
  299.       void append_word (char *word) ;
  300.       void begin_anchor() ;
  301.       void end_anchor() ;
  302.       void html_error() ;            // an error in an HTML command - abort command
  303.       Image *insert_image(int xpos) ;  // insert an image
  304.       void save_current_context() ;                                // push current context onto stack
  305.       void new_context() ;                                         // get a new context
  306.       void scroll_to (int x, int y) ;                                     // scroll to y coord
  307.       void scroll_to_anchor(char *) ;                              // scroll to an anchor
  308.       void push(int handle) ;
  309.       int pop() ;
  310.    } ;
  311.  
  312. #endif
  313.