html.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:25k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * html.h
  3.  *
  4.  * HyperText Markup Language stream classes.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: html.h,v $
  30.  * Revision 1.20  1999/03/09 08:01:46  robertj
  31.  * Changed comments for doc++ support (more to come).
  32.  *
  33.  * Revision 1.19  1999/02/16 08:07:10  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.18  1998/09/23 06:19:27  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.17  1997/07/08 13:15:31  robertj
  40.  * DLL support.
  41.  *
  42.  * Revision 1.16  1997/06/16 13:18:02  robertj
  43.  * Set Is() function to be const as it should have been.
  44.  *
  45.  * Revision 1.15  1996/08/17 10:00:18  robertj
  46.  * Changes for Windows DLL support.
  47.  *
  48.  * Revision 1.14  1996/06/28 13:08:41  robertj
  49.  * Changed PHTML class so can create html fragments.
  50.  * Fixed nesting problem in tables.
  51.  *
  52.  * Revision 1.13  1996/06/01 04:18:40  robertj
  53.  * Fixed bug in RadioButton, having 2 VALUE fields
  54.  *
  55.  * Revision 1.12  1996/04/14 02:52:02  robertj
  56.  * Added hidden fields to HTML.
  57.  *
  58.  * Revision 1.11  1996/03/12 11:30:00  robertj
  59.  * Fixed resetting of HTML output using operator=.
  60.  *
  61.  * Revision 1.10  1996/03/10 13:14:53  robertj
  62.  * Simplified some of the classes and added catch all string for attributes.
  63.  *
  64.  * Revision 1.9  1996/03/03 07:36:44  robertj
  65.  * Added missing public's to standard character attribute classes.
  66.  *
  67.  * Revision 1.8  1996/02/25 11:14:19  robertj
  68.  * Radio button support for forms.
  69.  *
  70.  * Revision 1.7  1996/02/19 13:18:25  robertj
  71.  * Removed MSC_VER test as now completely removed from WIN16 library.
  72.  *
  73.  * Revision 1.6  1996/02/08 11:50:38  robertj
  74.  * More implementation.
  75.  *
  76.  * Revision 1.5  1996/02/03 11:01:25  robertj
  77.  * Further implementation.
  78.  *
  79.  * Revision 1.4  1996/01/28 14:15:56  robertj
  80.  * More comments.
  81.  *
  82.  * Revision 1.3  1996/01/28 02:45:38  robertj
  83.  * Further implementation.
  84.  *
  85.  * Revision 1.2  1996/01/26 02:24:24  robertj
  86.  * Further implemetation.
  87.  *
  88.  * Revision 1.1  1996/01/24 23:45:37  robertj
  89.  * Initial revision
  90.  *
  91.  */
  92. #ifndef _PHTML
  93. #define _PHTML
  94. #ifdef __GNUC__
  95. #pragma interface
  96. #endif
  97. //////////////////////////////////////////////////////////////////////////////
  98. // PHTML
  99. /** This class describes a HyperText markup Language string as used by the
  100.    World Wide Web and the #PURL# and #PHTTPSocket# class.
  101.    
  102.    All of the standard stream I/O operators, manipulators etc will operate on
  103.    the PString class.
  104.  */
  105. class PHTML : public PStringStream
  106. {
  107.   PCLASSINFO(PHTML, PStringStream)
  108.   public:
  109.     enum ElementInSet {
  110.       InHTML,
  111.       InHead,
  112.       InBody,
  113.       InTitle,
  114.       InHeading,
  115.       InDivision,
  116.       InPreFormat,
  117.       InAnchor,
  118.       InNote,
  119.       InAddress,
  120.       InBlockQuote,
  121.       InCredit,
  122.       InBold,
  123.       InItalic,
  124.       InTeleType,
  125.       InUnderline,
  126.       InStrikeThrough,
  127.       InBig,
  128.       InSmall,
  129.       InSubscript,
  130.       InSuperscript,
  131.       InEmphasis,
  132.       InCite,
  133.       InStrong,
  134.       InCode,
  135.       InSample,
  136.       InKeyboard,
  137.       InVariable,
  138.       InDefinition,
  139.       InQuote,
  140.       InAuthor,
  141.       InPerson,
  142.       InAcronym,
  143.       InAbbrev,
  144.       InInsertedText,
  145.       InDeletedText,
  146.       InList,
  147.       InListHeading,
  148.       InDefinitionTerm,
  149.       InTable,
  150.       InForm,
  151.       InSelect,
  152.       InTextArea,
  153.       NumElementsInSet
  154.     };
  155.     /** Construct a new HTML object. If a title is specified in the
  156.        constructor then the HEAD, TITLE and BODY elements are output and the
  157.        string is used in a H1 element.
  158.      */
  159.     PHTML(
  160.       ElementInSet initialState = NumElementsInSet
  161.     );
  162.     PHTML(
  163.       const char * cstr     // C string representation of the title string.
  164.     );
  165.     PHTML(
  166.       const PString & str   // String representation of the title string.
  167.     );
  168.     ~PHTML();
  169.     /** Restart the HTML string output using the specified value as the
  170.        new title. If <CODE>title</CODE> is empty then no HEAD or TITLE
  171.        elements are placed into the HTML.
  172.      */
  173.     PHTML & operator=(
  174.       const char * cstr    // String for title in restating HTML.
  175.     );
  176.     PHTML & operator=(
  177.       const PString & str    // String for title in restating HTML.
  178.     );
  179.   // New functions for class.
  180.     BOOL Is(ElementInSet elmt) const;
  181.     void Set(ElementInSet elmt);
  182.     void Clr(ElementInSet elmt);
  183.     void Toggle(ElementInSet elmt);
  184.     class Element {
  185.       protected:
  186.         enum OptionalCRLF { NoCRLF, OpenCRLF, CloseCRLF, BothCRLF };
  187.         Element(
  188.           const char * nam,
  189.           const char * att,
  190.           ElementInSet elmt,
  191.           ElementInSet req,
  192.           OptionalCRLF opt
  193.         ) { name = nam; attr= att; inElement = elmt; reqElement = req; crlf = opt; }
  194.         virtual void Output(PHTML & html) const;
  195.         virtual void AddAttr(PHTML & html) const;
  196.       private:
  197.         const char * name;
  198.         const char * attr;
  199.         ElementInSet inElement;
  200.         ElementInSet reqElement;
  201.         OptionalCRLF crlf;
  202.       friend ostream & operator<<(ostream & strm, const Element & elmt)
  203.         { elmt.Output((PHTML&)strm); return strm; }
  204.     };
  205.     class HTML : public Element {
  206.       public:
  207.         HTML(const char * attr = NULL);
  208.     };
  209.     class Head : public Element {
  210.       public:
  211.         Head();
  212.       protected:
  213.         virtual void Output(PHTML & html) const;
  214.     };
  215.     class Body : public Element {
  216.       public:
  217.         Body(const char * attr = NULL);
  218.       protected:
  219.         virtual void Output(PHTML & html) const;
  220.     };
  221.     class Title : public Element {
  222.       public:
  223.         Title();
  224.         Title(const char * titleCStr);
  225.         Title(const PString & titleStr);
  226.       protected:
  227.         virtual void Output(PHTML & html) const;
  228.       private:
  229.         const char * titleString;
  230.     };
  231.     class Banner : public Element {
  232.       public:
  233.         Banner(const char * attr = NULL);
  234.     };
  235.     class Division : public Element {
  236.       public:
  237.         Division(const char * attr = NULL);
  238.     };
  239.     class Heading : public Element {
  240.       public:
  241.         Heading(int number,
  242.                 int sequence = 0,
  243.                 int skip = 0,
  244.                 const char * attr = NULL);
  245.         Heading(int number,
  246.                 const char * image,
  247.                 int sequence = 0,
  248.                 int skip = 0,
  249.                 const char * attr = NULL);
  250.         Heading(int number,
  251.                 const PString & imageStr,
  252.                 int sequence = 0,
  253.                 int skip = 0,
  254.                 const char * attr = NULL);
  255.       protected:
  256.         virtual void AddAttr(PHTML & html) const;
  257.       private:
  258.         int num;
  259.         const char * srcString;
  260.         int seqNum, skipSeq;
  261.     };
  262.     class BreakLine : public Element {
  263.       public:
  264.         BreakLine(const char * attr = NULL);
  265.     };
  266.     class Paragraph : public Element {
  267.       public:
  268.         Paragraph(const char * attr = NULL);
  269.     };
  270.     class PreFormat : public Element {
  271.       public:
  272.         PreFormat(int widthInChars = 0,
  273.                   const char * attr = NULL);
  274.       protected:
  275.         virtual void AddAttr(PHTML & html) const;
  276.       private:
  277.         int width;
  278.     };
  279.     class HotLink : public Element {
  280.       public:
  281.         HotLink(const char * href = NULL, const char * attr = NULL);
  282.       protected:
  283.         virtual void AddAttr(PHTML & html) const;
  284.       private:
  285.         const char * hrefString;
  286.     };
  287.     class Target : public Element {
  288.       public:
  289.         Target(const char * name = NULL, const char * attr = NULL);
  290.       protected:
  291.         virtual void AddAttr(PHTML & html) const;
  292.       private:
  293.         const char * nameString;
  294.     };
  295.     class ImageElement : public Element {
  296.       protected:
  297.         ImageElement(const char * nam,
  298.                      const char * attr,
  299.                      ElementInSet elmt,
  300.                      ElementInSet req,
  301.                      OptionalCRLF opt,
  302.                      const char * image);
  303.         virtual void AddAttr(PHTML & html) const;
  304.         const char * srcString;
  305.     };
  306.     class Image : public ImageElement {
  307.       public:
  308.         Image(const char * src,
  309.               int width = 0,
  310.               int height = 0,
  311.               const char * attr = NULL);
  312.         Image(const char * src,
  313.               const char * alt,
  314.               int width = 0,
  315.               int height = 0,
  316.               const char * attr = NULL);
  317.       protected:
  318.         virtual void AddAttr(PHTML & html) const;
  319.       private:
  320.         const char * altString;
  321.         int width, height;
  322.     };
  323.     class HRule : public ImageElement {
  324.       public:
  325.         HRule(const char * image = NULL, const char * attr = NULL);
  326.     };
  327.     class Note : public ImageElement {
  328.       public:
  329.         Note(const char * image = NULL, const char * attr = NULL);
  330.     };
  331.     class Address : public Element {
  332.       public:
  333.         Address(const char * attr = NULL);
  334.     };
  335.     class BlockQuote : public Element {
  336.       public:
  337.         BlockQuote(const char * attr = NULL);
  338.     };
  339.     class Credit : public Element {
  340.       public:
  341.         Credit(const char * attr = NULL);
  342.     };
  343.     class SetTab : public Element {
  344.       public:
  345.         SetTab(const char * id, const char * attr = NULL);
  346.       protected:
  347.         virtual void AddAttr(PHTML & html) const;
  348.       private:
  349.         const char * ident;
  350.     };
  351.     class Tab : public Element {
  352.       public:
  353.         Tab(int indent, const char * attr = NULL);
  354.         Tab(const char * id, const char * attr = NULL);
  355.       protected:
  356.         virtual void AddAttr(PHTML & html) const;
  357.       private:
  358.         const char * ident;
  359.         int indentSize;
  360.     };
  361.     class Bold : public Element {
  362.       public: Bold() : Element("B", NULL, InBold, InBody, NoCRLF) { }
  363.     };
  364.     class Italic : public Element {
  365.       public: Italic() : Element("I", NULL, InItalic, InBody, NoCRLF) { }
  366.     };
  367.     class TeleType : public Element {
  368.       public: TeleType() : Element("TT", NULL, InTeleType, InBody, NoCRLF) { }
  369.     };
  370.     class Underline : public Element {
  371.       public: Underline() : Element("U", NULL, InUnderline, InBody, NoCRLF) { }
  372.     };
  373.     class StrikeThrough : public Element {
  374.       public: StrikeThrough()
  375.                       : Element("S", NULL, InStrikeThrough, InBody, NoCRLF) { }
  376.     };
  377.     class Big : public Element {
  378.       public: Big() : Element("BIG", NULL, InBig, InBody, NoCRLF) { }
  379.     };
  380.     class Small : public Element {
  381.       public: Small() : Element("SMALL", NULL, InSmall, InBody, NoCRLF) { }
  382.     };
  383.     class Subscript : public Element {
  384.       public: Subscript()
  385.                         : Element("SUB", NULL, InSubscript, InBody, NoCRLF) { }
  386.     };
  387.     class Superscript : public Element {
  388.       public: Superscript()
  389.                       : Element("SUP", NULL, InSuperscript, InBody, NoCRLF) { }
  390.     };
  391.     class Emphasis : public Element {
  392.       public: Emphasis() : Element("EM", NULL, InEmphasis, InBody, NoCRLF) { }
  393.     };
  394.     class Cite : public Element {
  395.       public: Cite() : Element("CITE", NULL, InCite, InBody, NoCRLF) { }
  396.     };
  397.     class Strong : public Element {
  398.       public: Strong() : Element("STRONG", NULL, InStrong, InBody, NoCRLF) { }
  399.     };
  400.     class Code : public Element {
  401.       public: Code() : Element("CODE", NULL, InCode, InBody, NoCRLF) { }
  402.     };
  403.     class Sample : public Element {
  404.       public: Sample() : Element("SAMP", NULL, InSample, InBody, NoCRLF) { }
  405.     };
  406.     class Keyboard : public Element {
  407.       public: Keyboard() : Element("KBD", NULL, InKeyboard, InBody, NoCRLF) { }
  408.     };
  409.     class Variable : public Element {
  410.       public: Variable() : Element("VAR", NULL, InVariable, InBody, NoCRLF) { }
  411.     };
  412.     class Definition : public Element {
  413.       public: Definition()
  414.                        : Element("DFN", NULL, InDefinition, InBody, NoCRLF) { }
  415.     };
  416.     class Quote : public Element {
  417.       public: Quote() : Element("Q", NULL, InQuote, InBody, NoCRLF) { }
  418.     };
  419.     class Author : public Element {
  420.       public: Author() : Element("AU", NULL, InAuthor, InBody, NoCRLF) { }
  421.     };
  422.     class Person : public Element {
  423.       public: Person() : Element("PERSON", NULL, InPerson, InBody, NoCRLF) { }
  424.     };
  425.     class Acronym : public Element {
  426.       public: Acronym():Element("ACRONYM", NULL, InAcronym, InBody, NoCRLF) { }
  427.     };
  428.     class Abbrev : public Element {
  429.       public: Abbrev() : Element("ABBREV", NULL, InAbbrev, InBody, NoCRLF) { }
  430.     };
  431.     class InsertedText : public Element {
  432.       public: InsertedText()
  433.                      : Element("INS", NULL, InInsertedText, InBody, NoCRLF) { }
  434.     };
  435.     class DeletedText : public Element {
  436.       public: DeletedText()
  437.                       : Element("DEL", NULL, InDeletedText, InBody, NoCRLF) { }
  438.     };
  439.     class SimpleList : public Element {
  440.       public:
  441.         SimpleList(const char * attr = NULL);
  442.       protected:
  443.         virtual void AddAttr(PHTML & html) const;
  444.     };
  445.     class BulletList : public Element {
  446.       public:
  447.         BulletList(const char * attr = NULL);
  448.     };
  449.     class OrderedList : public Element {
  450.       public:
  451.         OrderedList(int seqNum = 0, const char * attr = NULL);
  452.       protected:
  453.         virtual void AddAttr(PHTML & html) const;
  454.       private:
  455.         int sequenceNum;
  456.     };
  457.     class DefinitionList : public Element {
  458.       public:
  459.         DefinitionList(const char * attr = NULL);
  460.     };
  461.     class ListHeading : public Element {
  462.       public:
  463.         ListHeading(const char * attr = NULL);
  464.     };
  465.     class ListItem : public Element {
  466.       public:
  467.         ListItem(int skip = 0, const char * attr = NULL);
  468.       protected:
  469.         virtual void AddAttr(PHTML & html) const;
  470.       private:
  471.         int skipSeq;
  472.     };
  473.     class DefinitionTerm : public Element {
  474.       public:
  475.         DefinitionTerm(const char * attr = NULL);
  476.       protected:
  477.         virtual void Output(PHTML & html) const;
  478.     };
  479.     class DefinitionItem : public Element {
  480.       public:
  481.         DefinitionItem(const char * attr = NULL);
  482.       protected:
  483.         virtual void Output(PHTML & html) const;
  484.     };
  485.     enum BorderCodes {
  486.       NoBorder,
  487.       Border
  488.     };
  489.     class TableStart : public Element {
  490.       public:
  491.         TableStart(const char * attr = NULL);
  492.         TableStart(BorderCodes border, const char * attr = NULL);
  493.       protected:
  494.         virtual void Output(PHTML & html) const;
  495.         virtual void AddAttr(PHTML & html) const;
  496.       private:
  497.         BOOL borderFlag;
  498.     };
  499.     friend class TableStart;
  500.     class TableEnd : public Element {
  501.       public:
  502.         TableEnd();
  503.       protected:
  504.         virtual void Output(PHTML & html) const;
  505.     };
  506.     friend class TableEnd;
  507.     class TableRow : public Element {
  508.       public:
  509.         TableRow(const char * attr = NULL);
  510.     };
  511.     class TableHeader : public Element {
  512.       public:
  513.         TableHeader(const char * attr = NULL);
  514.     };
  515.     class TableData : public Element {
  516.       public:
  517.         TableData(const char * attr = NULL);
  518.     };
  519.     class Form : public Element {
  520.       public:
  521.         Form(
  522.           const char * method = NULL,
  523.           const char * action = NULL,
  524.           const char * encoding = NULL,
  525.           const char * script = NULL
  526.         );
  527.       protected:
  528.         virtual void AddAttr(PHTML & html) const;
  529.       private:
  530.         const char * methodString;
  531.         const char * actionString;
  532.         const char * mimeTypeString;
  533.         const char * scriptString;
  534.     };
  535.     enum DisableCodes {
  536.       Enabled,
  537.       Disabled
  538.     };
  539.     class FieldElement : public Element {
  540.       protected:
  541.         FieldElement(
  542.           const char * nam,
  543.           const char * attr,
  544.           ElementInSet elmt,
  545.           OptionalCRLF opt,
  546.           DisableCodes disabled
  547.         );
  548.         virtual void AddAttr(PHTML & html) const;
  549.       private:
  550.         BOOL disabledFlag;
  551.     };
  552.     class Select : public FieldElement {
  553.       public:
  554.         Select(
  555.           const char * fname = NULL,
  556.           const char * attr = NULL
  557.         );
  558.         Select(
  559.           const char * fname,
  560.           DisableCodes disabled,
  561.           const char * attr = NULL
  562.         );
  563.       protected:
  564.         virtual void AddAttr(PHTML & html) const;
  565.       private:
  566.         const char * nameString;
  567.     };
  568.     enum SelectionCodes {
  569.       NotSelected,
  570.       Selected
  571.     };
  572.     class Option : public FieldElement {
  573.       public:
  574.         Option(
  575.           const char * attr = NULL
  576.         );
  577.         Option(
  578.           SelectionCodes select,
  579.           const char * attr = NULL
  580.         );
  581.         Option(
  582.           DisableCodes disabled,
  583.           const char * attr = NULL
  584.         );
  585.         Option(
  586.           SelectionCodes select,
  587.           DisableCodes disabled,
  588.           const char * attr = NULL
  589.         );
  590.       protected:
  591.         virtual void AddAttr(PHTML & html) const;
  592.       private:
  593.         BOOL selectedFlag;
  594.     };
  595.     class FormField : public FieldElement {
  596.       protected:
  597.         FormField(
  598.           const char * nam,
  599.           const char * attr,
  600.           ElementInSet elmt,
  601.           OptionalCRLF opt,
  602.           DisableCodes disabled,
  603.           const char * fname
  604.         );
  605.         virtual void AddAttr(PHTML & html) const;
  606.       private:
  607.         const char * nameString;
  608.     };
  609.     class TextArea : public FormField {
  610.       public:
  611.         TextArea(
  612.           const char * fname,
  613.           DisableCodes disabled = Enabled,
  614.           const char * attr = NULL
  615.         );
  616.         TextArea(
  617.           const char * fname,
  618.           int rows, int cols,
  619.           DisableCodes disabled = Enabled,
  620.           const char * attr = NULL
  621.         );
  622.       protected:
  623.         virtual void AddAttr(PHTML & html) const;
  624.       private:
  625.         int numRows, numCols;
  626.     };
  627.     class InputField : public FormField {
  628.       protected:
  629.         InputField(
  630.           const char * type,
  631.           const char * fname,
  632.           DisableCodes disabled,
  633.           const char * attr
  634.         );
  635.         virtual void AddAttr(PHTML & html) const;
  636.       private:
  637.         const char * typeString;
  638.     };
  639.     class HiddenField : public InputField {
  640.       public:
  641.         HiddenField(
  642.           const char * fname,
  643.           const char * value,
  644.           const char * attr = NULL
  645.         );
  646.       protected:
  647.         virtual void AddAttr(PHTML & html) const;
  648.       private:
  649.         const char * valueString;
  650.     };
  651.     class InputText : public InputField {
  652.       public:
  653.         InputText(
  654.           const char * fname,
  655.           int size,
  656.           const char * init = NULL,
  657.           const char * attr = NULL
  658.         );
  659.         InputText(
  660.           const char * fname,
  661.           int size,
  662.           DisableCodes disabled,
  663.           const char * attr = NULL
  664.         );
  665.         InputText(
  666.           const char * fname,
  667.           int size,
  668.           int maxLength,
  669.           DisableCodes disabled = Enabled,
  670.           const char * attr = NULL
  671.         );
  672.         InputText(
  673.           const char * fname,
  674.           int size,
  675.           const char * init,
  676.           int maxLength,
  677.           DisableCodes disabled = Enabled,
  678.           const char * attr = NULL
  679.         );
  680.       protected:
  681.         InputText(
  682.           const char * type,
  683.           const char * fname,
  684.           int size,
  685.           const char * init,
  686.           int maxLength,
  687.           DisableCodes disabled,
  688.           const char * attr
  689.         );
  690.         virtual void AddAttr(PHTML & html) const;
  691.       private:
  692.         const char * value;
  693.         int width, length;
  694.     };
  695.     class InputPassword : public InputText {
  696.       public:
  697.         InputPassword(
  698.           const char * fname,
  699.           int size,
  700.           const char * init = NULL,
  701.           const char * attr = NULL
  702.         );
  703.         InputPassword(
  704.           const char * fname,
  705.           int size,
  706.           DisableCodes disabled,
  707.           const char * attr = NULL
  708.         );
  709.         InputPassword(
  710.           const char * fname,
  711.           int size,
  712.           int maxLength,
  713.           DisableCodes disabled = Enabled,
  714.           const char * attr = NULL
  715.         );
  716.         InputPassword(
  717.           const char * fname,
  718.           int size,
  719.           const char * init,
  720.           int maxLength,
  721.           DisableCodes disabled = Enabled,
  722.           const char * attr = NULL
  723.         );
  724.     };
  725.     enum CheckedCodes {
  726.       UnChecked,
  727.       Checked
  728.     };
  729.     class RadioButton : public InputField {
  730.       public:
  731.         RadioButton(
  732.           const char * fname,
  733.           const char * value,
  734.           const char * attr = NULL
  735.         );
  736.         RadioButton(
  737.           const char * fname,
  738.           const char * value,
  739.           DisableCodes disabled,
  740.           const char * attr = NULL
  741.         );
  742.         RadioButton(
  743.           const char * fname,
  744.           const char * value,
  745.           CheckedCodes check,
  746.           DisableCodes disabled = Enabled,
  747.           const char * attr = NULL
  748.         );
  749.       protected:
  750.         RadioButton(
  751.           const char * type,
  752.           const char * fname,
  753.           const char * value,
  754.           CheckedCodes check,
  755.           DisableCodes disabled,
  756.           const char * attr
  757.         );
  758.         virtual void AddAttr(PHTML & html) const;
  759.       private:
  760.         const char * valueString;
  761.         BOOL checkedFlag;
  762.     };
  763.     class CheckBox : public RadioButton {
  764.       public:
  765.         CheckBox(
  766.           const char * fname,
  767.           const char * attr = NULL
  768.         );
  769.         CheckBox(
  770.           const char * fname,
  771.           DisableCodes disabled,
  772.           const char * attr = NULL
  773.         );
  774.         CheckBox(
  775.           const char * fname,
  776.           CheckedCodes check,
  777.           DisableCodes disabled = Enabled,
  778.           const char * attr = NULL
  779.         );
  780.     };
  781.     class InputRange : public InputField {
  782.       public:
  783.         InputRange(
  784.           const char * fname,
  785.           int min, int max,
  786.           int value = 0,
  787.           DisableCodes disabled = Enabled,
  788.           const char * attr = NULL
  789.         );
  790.       protected:
  791.         virtual void AddAttr(PHTML & html) const;
  792.       private:
  793.         int minValue, maxValue, initValue;
  794.     };
  795.     class InputFile : public InputField {
  796.       public:
  797.         InputFile(
  798.           const char * fname,
  799.           const char * accept = NULL,
  800.           DisableCodes disabled = Enabled,
  801.           const char * attr = NULL
  802.         );
  803.       protected:
  804.         virtual void AddAttr(PHTML & html) const;
  805.       private:
  806.         const char * acceptString;
  807.     };
  808.     class InputImage : public InputField {
  809.       public:
  810.         InputImage(
  811.           const char * fname,
  812.           const char * src = NULL,
  813.           DisableCodes disabled = Enabled,
  814.           const char * attr = NULL
  815.         );
  816.       protected:
  817.         InputImage(
  818.           const char * type,
  819.           const char * fname,
  820.           const char * src,
  821.           DisableCodes disabled,
  822.           const char * attr
  823.         );
  824.         virtual void AddAttr(PHTML & html) const;
  825.       private:
  826.         const char * srcString;
  827.     };
  828.     class InputScribble : public InputImage {
  829.       public:
  830.         InputScribble(
  831.           const char * fname,
  832.           const char * src = NULL,
  833.           DisableCodes disabled = Enabled,
  834.           const char * attr = NULL
  835.         );
  836.     };
  837.     class ResetButton : public InputImage {
  838.       public:
  839.         ResetButton(
  840.           const char * title,
  841.           const char * fname = NULL,
  842.           const char * src = NULL,
  843.           DisableCodes disabled = Enabled,
  844.           const char * attr = NULL
  845.         );
  846.       protected:
  847.         ResetButton(
  848.           const char * type,
  849.           const char * title,
  850.           const char * fname = NULL,
  851.           const char * src = NULL,
  852.           DisableCodes disabled = Enabled,
  853.           const char * attr = NULL
  854.         );
  855.         virtual void AddAttr(PHTML & html) const;
  856.       private:
  857.         const char * titleString;
  858.     };
  859.     class SubmitButton : public ResetButton {
  860.       public:
  861.         SubmitButton(
  862.           const char * title,
  863.           const char * fname = NULL,
  864.           const char * src = NULL,
  865.           DisableCodes disabled = Enabled,
  866.           const char * attr = NULL
  867.         );
  868.     };
  869.   private:
  870.     ElementInSet initialElement;
  871.     BYTE elementSet[NumElementsInSet/8+1];
  872.     PINDEX tableNestLevel;
  873.     PHTML & operator=(
  874.       const PHTML & html    // HTML to copy
  875.     );
  876.     // Cannot do HTML to HTML copy.
  877. };
  878. #endif
  879. // End Of File ///////////////////////////////////////////////////////////////