📄 httpform.h
字号:
/* * httpform.h * * Forms management using HTTP User Interface. * * Portable Windows Library * * Copyright (c) 1993-2002 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: httpform.h,v $ * Revision 1.17 2003/03/24 04:30:41 robertj * Added function to set and get strings from PConfig in correct format for * use with HTTP form array contsructs. * * Revision 1.16 2002/11/06 22:47:24 robertj * Fixed header comment (copyright etc) * * Revision 1.15 2002/09/16 01:08:59 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.14 2001/10/10 08:07:48 robertj * Fixed large memory leak of strings when doing POST to a form. * * Revision 1.13 2000/12/18 07:12:37 robertj * Added ability to have fixed length array fields. * * Revision 1.12 1999/03/09 08:01:46 robertj * Changed comments for doc++ support (more to come). * * Revision 1.11 1999/02/16 08:07:10 robertj * MSVC 6.0 compatibility changes. * * Revision 1.10 1998/11/30 02:50:48 robertj * New directory structure * * Revision 1.9 1998/09/23 06:19:31 robertj * Added open source copyright license. * * Revision 1.8 1998/08/20 05:45:33 robertj * Fixed bug where substitutions did not always occur if near end of macro block. * * Revision 1.7 1998/01/26 00:25:24 robertj * Major rewrite of HTTP forms management. * * Revision 1.6 1997/08/09 07:46:51 robertj * Fixed problems with value of SELECT fields in form * * Revision 1.5 1997/07/26 11:38:17 robertj * Support for overridable pages in HTTP service applications. * * Revision 1.4 1997/07/08 13:16:12 robertj * Major HTTP form enhancements for lists and arrays of fields. * * Revision 1.3 1997/06/08 04:49:40 robertj * Adding new llist based form field. * * Revision 1.2 1997/04/01 06:01:39 robertj * Allowed value list in drop down box to be modified once created. * * Revision 1.1 1996/06/28 12:55:56 robertj * Initial revision * */#ifndef _PHTTPFORM#define _PHTTPFORM#ifdef P_USE_PRAGMA#pragma interface#endif#include <ptclib/http.h>///////////////////////////////////////////////////////////////////////////////// PHTTPField/** This class is the abstract base class for fields in a #PHTTPForm# resource type. */class PHTTPField : public PObject{ PCLASSINFO(PHTTPField, PObject) public: PHTTPField( const char * bname, // base name (identifier) for the field. const char * title, // Title text for field (defaults to name). const char * help // Help text for the field. ); // Create a new field in a HTTP form. /** Compare the fields using the field names. @return Comparison of the name fields of the two fields. */ virtual Comparison Compare( const PObject & obj ) const; /** Get the identifier name of the field. @return String for field name. */ const PCaselessString & GetName() const { return fullName; } /** Get the identifier name of the field. @return String for field name. */ const PCaselessString & GetBaseName() const { return baseName; } /** Set the name for the field. */ virtual void SetName( const PString & newName // New name for field ); /** Locate the field naem, recusing down for composite fields. @return Pointer to located field, or NULL if not found. */ virtual const PHTTPField * LocateName( const PString & name // Full field name to locate ) const; /** Get the title of the field. @return String for title placed next to the field. */ const PString & GetTitle() const { return title; } /** Get the title of the field. @return String for title placed next to the field. */ const PString & GetHelp() const { return help; } void SetHelp( const PString & text // Help text. ) { help = text; } void SetHelp( const PString & hotLinkURL, // URL for link to help page. const PString & linkText // Help text in the link. ); void SetHelp( const PString & hotLinkURL, // URL for link to help page. const PString & imageURL, // URL for image to be displayed in link. const PString & imageText // Text in the link when image unavailable. ); // Set the help text for the field. /** Create a new field of the same class as the current field. @return New field object instance. */ virtual PHTTPField * NewField() const = 0; virtual void ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const; // Splice expanded macro substitutions into text string /** Convert the field to HTML form tag for inclusion into the HTTP page. */ virtual void GetHTMLTag( PHTML & html // HTML to receive the fields HTML tag. ) const = 0; /** Convert the field input to HTML for inclusion into the HTTP page. */ virtual PString GetHTMLInput( const PString & input // Source HTML text for input tag. ) const; /** Convert the field input to HTML for inclusion into the HTTP page. */ virtual PString GetHTMLSelect( const PString & selection // Source HTML text for input tag. ) const; /** Convert the field to HTML for inclusion into the HTTP page. */ virtual void GetHTMLHeading( PHTML & html // HTML to receive the field info. ) const; /** Get the string value of the field. @return String for field value. */ virtual PString GetValue(BOOL dflt = FALSE) const = 0; /** Set the value of the field. */ virtual void SetValue( const PString & newValue // New value for the field. ) = 0; /** Get the value of the PConfig to the sub-field. If the field is not composite then it always sets the value as for the non-indexed version. */ virtual void LoadFromConfig( PConfig & cfg // Configuration for value transfer. ); /** Set the value of the sub-field into the PConfig. If the field is not composite then it always sets the value as for the non-indexed version. */ virtual void SaveToConfig( PConfig & cfg // Configuration for value transfer. ) const; /** Validate the new field value before #SetValue()# is called. @return BOOL if the new field value is OK. */ virtual BOOL Validated( const PString & newVal, // Proposed new value for the field. PStringStream & msg // Stream to take error HTML if value not valid. ) const; /** Retrieve all the names in the field and subfields. @return List of strings for each subfield. */ virtual void GetAllNames(PStringList & list) const; /** Set the value of the field in a list of fields. */ virtual void SetAllValues( const PStringToString & data // New value for the field. ); /** Validate the new field value in a list before #SetValue()# is called. @return BOOL if the all the new field values are OK. */ virtual BOOL ValidateAll( const PStringToString & data, // Proposed new value for the field. PStringStream & msg // Stream to take error HTML if value not valid. ) const; BOOL NotYetInHTML() const { return notInHTML; } void SetInHTML() { notInHTML = FALSE; } protected: PCaselessString baseName; PCaselessString fullName; PString title; PString help; BOOL notInHTML;};PLIST(PHTTPFieldList, PHTTPField);class PHTTPCompositeField : public PHTTPField{ PCLASSINFO(PHTTPCompositeField, PHTTPField) public: PHTTPCompositeField( const char * name, // Name (identifier) for the field. const char * title = NULL, // Title text for field (defaults to name). const char * help = NULL // Help text for the field. ); virtual void SetName( const PString & name // New name for field ); virtual const PHTTPField * LocateName( const PString & name // Full field name to locate ) const; virtual PHTTPField * NewField() const; virtual void ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const; virtual void GetHTMLTag( PHTML & html // HTML to receive the field info. ) const; virtual PString GetHTMLInput( const PString & input // Source HTML text for input tag. ) const; virtual void GetHTMLHeading( PHTML & html // HTML to receive the field info. ) const; virtual PString GetValue(BOOL dflt = FALSE) const; virtual void SetValue( const PString & newValue // New value for the field. ); virtual void LoadFromConfig( PConfig & cfg // Configuration for value transfer. ); virtual void SaveToConfig( PConfig & cfg // Configuration for value transfer. ) const; virtual void GetAllNames(PStringList & list) const; virtual void SetAllValues( const PStringToString & data // New value for the field. ); virtual BOOL ValidateAll( const PStringToString & data, // Proposed new value for the field. PStringStream & msg // Stream to take error HTML if value not valid. ) const; /** Get the number of sub-fields in the composite field. Note that this is the total including any composite sub-fields, ie, it is the size of the whole tree of primitive fields. @return Returns field count. */ virtual PINDEX GetSize() const; void Append(PHTTPField * fld); PHTTPField & operator[](PINDEX idx) const { return fields[idx]; } void RemoveAt(PINDEX idx) { fields.RemoveAt(idx); } void RemoveAll() { fields.RemoveAll(); } protected: PHTTPFieldList fields;};class PHTTPSubForm : public PHTTPCompositeField{ PCLASSINFO(PHTTPSubForm, PHTTPCompositeField) public: PHTTPSubForm( const PString & subFormName, // URL for the sub-form const char * name, // Name (identifier) for the field. const char * title = NULL, // Title text for field (defaults to name). PINDEX primaryField = 0, // Pimary field whove value is in hot link PINDEX secondaryField = P_MAX_INDEX // Seconary field next to hotlink ); PHTTPField * NewField() const; void GetHTMLTag(PHTML & html) const; void GetHTMLHeading(PHTML & html) const; protected: PString subFormName; PINDEX primary; PINDEX secondary;};class PHTTPFieldArray : public PHTTPCompositeField{ PCLASSINFO(PHTTPFieldArray, PHTTPCompositeField) public: PHTTPFieldArray( PHTTPField * baseField, BOOL ordered, PINDEX fixedSize = 0 ); ~PHTTPFieldArray(); virtual PHTTPField * NewField() const; virtual void ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const; virtual void GetHTMLTag( PHTML & html // HTML to receive the field info. ) const; virtual void LoadFromConfig( PConfig & cfg // Configuration for value transfer. ); virtual void SaveToConfig( PConfig & cfg // Configuration for value transfer. ) const; virtual void SetAllValues( const PStringToString & data // New value for the field. ); virtual PINDEX GetSize() const; void SetSize(PINDEX newSize); PStringArray GetStrings( PConfig & cfg /// Config file to get strings from ); void SetStrings( PConfig & cfg, /// Config file to Set strings to const PStringArray & values /// Strings to set ); protected: void AddBlankField(); void AddArrayControlBox(PHTML & html, PINDEX fld) const; void SetArrayFieldName(PINDEX idx) const; PHTTPField * baseField; BOOL orderedArray; BOOL canAddElements;};class PHTTPStringField : public PHTTPField{ PCLASSINFO(PHTTPStringField, PHTTPField) public: PHTTPStringField( const char * name, PINDEX size, const char * initVal = NULL, const char * help = NULL ); PHTTPStringField( const char * name, const char * title, PINDEX size, const char * initVal = NULL, const char * help = NULL ); virtual PHTTPField * NewField() const; virtual void GetHTMLTag( PHTML & html // HTML to receive the field info. ) const; virtual PString GetValue(BOOL dflt = FALSE) const; virtual void SetValue( const PString & newVal ); protected: PString value; PString initialValue; PINDEX size;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -