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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * pwrc.h
  3.  *
  4.  * Portable Windows Resource Compiler
  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: pwrc.h,v $
  30.  * Revision 1.33  1999/10/19 07:08:23  robertj
  31.  * Added #ifdef/#ifndef condition compile functionality
  32.  *
  33.  * Revision 1.32  1999/10/18 04:41:09  robertj
  34.  * Added decompile of .BMP and .ICO files and fixed ability to have 64x64 icons
  35.  *
  36.  * Revision 1.31  1998/12/21 08:02:12  robertj
  37.  * New directory structure
  38.  *
  39.  * Revision 1.30  1998/09/26 01:24:16  robertj
  40.  * Added open source license
  41.  *
  42.  * Revision 1.29  1998/09/26 00:41:10  robertj
  43.  * Fixed name space conflict with type Cursor.
  44.  *
  45.  * Revision 1.28  1998/09/14 13:48:15  robertj
  46.  * Allowed suppression of some warnings.
  47.  *
  48.  * Revision 1.27  1996/05/23 10:06:40  robertj
  49.  * Fixed bug in OK/Cancel buttons of dialogs not being set as special buttons.
  50.  *
  51.  * Revision 1.26  1996/01/23 13:32:46  robertj
  52.  * More changes for editor
  53.  *
  54.  * Revision 1.25  1996/01/02 13:05:16  robertj
  55.  * Changes to support editor.
  56.  *
  57.  * Revision 1.24  1995/12/10 12:12:06  robertj
  58.  * Changes to support graphical resource file editor.
  59.  *
  60.  * Revision 1.23  1995/10/14 15:19:14  robertj
  61.  * Fixed missing font size on font keyword.
  62.  * Changes required by move of standard buttons to PDialog.
  63.  *
  64.  * Revision 1.22  1995/08/24 12:48:51  robertj
  65.  * Added general control type for arbitrary dialog controls.
  66.  * Added output file extension variable.
  67.  *
  68.  * Revision 1.21  1995/07/31 12:30:14  robertj
  69.  * Changed all generated resource IDs to be in the same "number space". This
  70.  *   is to avoid problems with IDs being used for more than one type of resource
  71.  *   eg a menu item and an image for a toolbar.
  72.  * Fixed the generated #line commands to include a relative path instead of an
  73.  *   absolute one.
  74.  *
  75.  * Revision 1.20  1995/04/02 09:28:16  robertj
  76.  * Added "balloon" help.
  77.  *
  78.  * Revision 1.19  1995/02/19 04:17:58  robertj
  79.  * Moved most inline code from header file to cxx file.
  80.  *
  81.  * Revision 1.18  1995/02/11  04:13:58  robertj
  82.  * Strange problem with variable "small" in MSVC 2.0.
  83.  *
  84.  * Revision 1.17  1995/01/27  11:25:44  robertj
  85.  * Added pattern resource.
  86.  *
  87.  * Revision 1.16  1995/01/11  09:45:20  robertj
  88.  * Documentation and normalisation.
  89.  *
  90.  * Revision 1.15  1994/12/12  13:14:06  robertj
  91.  * Changed RealEdit to FloatEdit.
  92.  *
  93.  * Revision 1.14  1994/12/12  10:16:33  robertj
  94.  * Restructuring and documentation of container classes.
  95.  * Renaming of some macros for declaring container classes.
  96.  * Added some extra functionality to PString.
  97.  * Added start to 2 byte characters in PString.
  98.  * Fixed incorrect overrides in PCaselessString.
  99.  *
  100.  * Revision 1.13  1994/12/05  11:38:03  robertj
  101.  * Added #line to generated code.
  102.  *
  103.  * Revision 1.12  1994/10/31  11:26:09  robertj
  104.  * Added interface pragma for GNU C
  105.  *
  106.  * Revision 1.11  1994/06/25  12:31:31  robertj
  107.  * Unix synchronisation
  108.  *
  109.  * Revision 1.10  1994/01/03  05:00:57  robertj
  110.  * Added P to DECLARE_CLASS
  111.  *
  112.  * Revision 1.9  1993/12/31  07:05:07  robertj
  113.  * Changed pixmap images for one pixel one number in PRC file.
  114.  *
  115.  * Revision 1.8  1993/12/01  16:12:09  robertj
  116.  * Windows NT port.
  117.  *
  118.  * Revision 1.7  1993/11/30  18:40:23  robertj
  119.  * Uppercased all macros.
  120.  *
  121.  * Revision 1.6  1993/08/21  04:42:42  robertj
  122.  * Clone() function made optional and removed.
  123.  *
  124.  * Revision 1.5  1993/08/20  21:31:56  robertj
  125.  * Added function to get original literal text string in resource objects.
  126.  *
  127.  * Revision 1.4  1993/07/16  12:48:13  robertj
  128.  * Added converted form of resource string (translated from C literal).
  129.  * Changed resource string dictionary to ResourceObject as consequence of above.
  130.  *
  131.  * Revision 1.3  1993/07/15  04:38:31  robertj
  132.  * Rationalised lex.h, parse.h and main.h out of existance.
  133.  *
  134.  * Revision 1.2  1993/07/14  01:57:48  robertj
  135.  * Removed unused parameters.
  136.  *
  137.  * Revision 1.1  1993/07/03  06:01:08  robertj
  138.  * Initial revision
  139.  *
  140.  */
  141. #ifndef _PWRC_H
  142. #define _PWRC_H
  143. #ifdef __GNUC__
  144. #pragma interface
  145. #endif
  146. /////////////////////////////////////////
  147. //
  148. //  key code for menu accelerators
  149. //
  150. #include <pwlib/keycode.h>
  151. #ifndef _PKEYCODE
  152. };
  153. #endif
  154. PDECLARE_CLASS(AccelCode, PKeyCode)
  155.   public:
  156.     AccelCode(const PString & resrcStr);
  157. };
  158. PLIST(AccelList, AccelCode);
  159. /////////////////////////////////////////
  160. //
  161. //  Line numbers from parser
  162. //
  163. class StdError;
  164. PDECLARE_CLASS(LineNumber, PObject)
  165.   public:
  166.     LineNumber() { Set(); }
  167.     void Set();
  168.   protected:
  169.     PFilePath filename;
  170.     unsigned  number;
  171.   friend ostream & operator<<(ostream & out, const LineNumber & line);
  172.   friend ostream & operator<<(ostream & out, const StdError & e);
  173. };
  174. /////////////////////////////////////////
  175. //
  176. //  standard error output from parser
  177. //
  178. enum StdErrorType { Info, Warning, Fatal };
  179. class StdError {
  180.   public:
  181.     StdError(StdErrorType ne) : e(ne) { }
  182.     StdError(StdErrorType ne, LineNumber & ln) : e(ne), l(ln) { }
  183.     friend ostream & operator<<(ostream & out, const StdError & e);
  184.   protected:
  185.     StdErrorType e;
  186.     LineNumber   l;
  187. };
  188. /////////////////////////////////////////
  189. //
  190. //  point for resource position
  191. //
  192. PDECLARE_CLASS(Point, PObject)
  193.   public:
  194.     Point() { x = -1; y = -1; }
  195.     Point(long nx, long ny);
  196.     Point(const Point & pt) { x = pt.x; y = pt.y; }
  197.     Point & operator=(const Point & pt);
  198.     int X() const { return x; }
  199.     int Y() const { return y; }
  200.     void SetX(long nx);
  201.     void SetY(long ny);
  202.   protected:
  203.     virtual void PrintOn(ostream & out) const;
  204.     int x;
  205.     int y;
  206. };
  207. /////////////////////////////////////////
  208. //
  209. //  #define values
  210. //
  211. PDECLARE_CLASS(DefineValue, PObject)
  212.   public:
  213.     DefineValue(long newIval, BOOL aut)  { ival = newIval; automatic = aut; }
  214.     DefineValue(const PString & newSval) { sval = newSval; automatic = FALSE; }
  215.     operator long() const                { return ival; }
  216.     operator PString() const             { return sval; }
  217.     BOOL IsString() const                { return !sval.IsEmpty(); }
  218.     BOOL WasAutomatic() const            { return automatic; }
  219.   protected:
  220.     long    ival; // calculated integer value
  221.     PString sval; // string value if literal define
  222.     BOOL    automatic;
  223. };
  224. /////////////////////////////////////////
  225. //
  226. //  dictionary to hold #define values
  227. //
  228. PDICTIONARY(DefineDict, PString, DefineValue);
  229. class MainWindow;
  230. class ResourceFile;
  231. PDECLARE_CLASS(ResourceID, PObject)
  232.   public:
  233.     ResourceID(long id) : number(id) { }
  234.     ResourceID(long id, const PString & nam) : number(id), identifier(nam) { }
  235.     long GetNum() const { return number; }
  236.     const PString & GetIdent() const { return identifier; }
  237.   private:
  238.     long    number;
  239.     PString identifier;
  240. };
  241. /////////////////////////////////////////
  242. //
  243. //  a resource item which has an id and a string
  244. //
  245. PDECLARE_CLASS(ResourceObject, PObject)
  246.   public:
  247.     ResourceObject() { id = -1; }
  248.     ResourceObject(ResourceID * newId, PString * newText);
  249.     virtual void EditResource(MainWindow *, ResourceFile *) { PAssertAlways(""); }
  250.     void SetText(PString * newText);
  251.     const PString & GetLiteralText() const   { return textLiteral; }
  252.     const PString & GetConvertedText() const { return textConverted; }
  253.     int GetID() const { return id; }
  254.     void SetID(ResourceID * newID);
  255.     PString GetIDString() const;
  256.   protected:
  257.     Comparison Compare(const PObject & obj) const;
  258.     PINDEX HashFunction() const;
  259.     int     id;
  260.     PString identifier;
  261.     PString textLiteral;
  262.     PString textConverted;
  263. };
  264. PDECLARE_LIST(ResourceList, ResourceObject)
  265.   public:
  266.     enum ResTypes {
  267.       StringRes,
  268.       MenubarRes,
  269.       LayoutRes,
  270.       IconRes,
  271.       CursorRes,
  272.       PatternRes,
  273.       ImageRes,
  274.       DataRes,
  275.       NumResTypes
  276.     };
  277.     ResTypes GetType() const { return type; }
  278.   private:
  279.     ResTypes type;
  280.   friend class ResourceFile;
  281. };
  282. /////////////////////////////////////////
  283. //
  284. //  String resource
  285. //
  286. PDECLARE_CLASS(StringResource, ResourceObject)
  287.   public:
  288.     StringResource(ResourceID * newId, PString * newText)
  289.         : ResourceObject(newId, newText) { }
  290.     virtual void EditResource(MainWindow *, ResourceFile *);
  291. };
  292. /////////////////////////////////////////
  293. //
  294. //  dictionary to hold string resources
  295. //
  296. PDECLARE_DICTIONARY(StringDict, POrdinalKey, StringResource)
  297.   virtual void PrintOn(ostream & out) const;
  298. };
  299. /////////////////////////////////////////
  300. //
  301. //  A resource with a class specification
  302. //
  303. PDECLARE_CLASS(ClassedResource, ResourceObject)
  304.   public:
  305.     ClassedResource(const char * className = "");
  306.     ClassedResource(PString * className);
  307.     ClassedResource(PString * className, PString * ancestorName);
  308.     void SetResClass(const PString & newClassname);
  309.     const PString & GetResClass() const { return resourceClass; }
  310.     void SetAncestorClass(const PString & newClass) { ancestorClass = newClass; }
  311.     PString GetAncestorClass() const         { return ancestorClass; }
  312.   protected:
  313.     PString    resourceClass;
  314.     PString    ancestorClass;
  315.     LineNumber classLine;
  316. };
  317. /////////////////////////////////////////
  318. //
  319. //  menu items
  320. //
  321. class MenuBar;
  322. PDECLARE_CLASS(MenuItem, ResourceObject)
  323.   
  324.   public:
  325.     MenuItem(ResourceID * newID) { SetID(newID); }
  326.     void SetNotify(PString * newNotify);
  327.     void SetFieldName(PString * newFieldname);
  328.     void SetAccelerators(PStringList * accels);
  329.     BOOL NeedsWindowParameter() const;
  330.     void OutputCode(ostream & hdr_stream, ostream & src_stream, MenuBar&mbar);
  331.   protected:
  332.     virtual void PrintOn(ostream & out) const;
  333.     
  334.     PString    notifyName;
  335.     LineNumber notifyLine;
  336.     PString    fieldName;
  337.     LineNumber fieldLine;
  338.     AccelList  accel;
  339.     PStringStream src_before, hdr_before;
  340.     PStringStream src_after, hdr_after;
  341.   friend int yyparse();
  342. };
  343. /////////////////////////////////////////
  344. //
  345. //  list of menu items
  346. //
  347. PLIST(MenuItemList, MenuItem);
  348. PDICTIONARY(MenuItemDict, POrdinalKey, MenuItem);
  349. /////////////////////////////////////////
  350. //
  351. //  menu separator
  352. //
  353. PDECLARE_CLASS(Separator, MenuItem)
  354.   public:
  355.     Separator() : MenuItem(NULL) { }
  356.   protected:
  357.     virtual void PrintOn(ostream & out) const;
  358. };
  359. /////////////////////////////////////////
  360. //
  361. //  sub-menus
  362. //
  363. PDECLARE_CLASS(Menu, MenuItem)
  364.   public:
  365.     Menu(PString * title, MenuItemList * newItems);
  366.     void SetUniqueItemIDs(MenuItemDict & itemDict);
  367.   protected:
  368.     virtual void PrintOn(ostream & out) const;
  369.     MenuItemList items;
  370. };
  371. /////////////////////////////////////////
  372. //
  373. //  list of menus
  374. //
  375. PLIST(MenuList, Menu);
  376. /////////////////////////////////////////
  377. //
  378. //  menubar
  379. //
  380. PDECLARE_CLASS(MenuBar, ClassedResource)
  381.   public:
  382.     MenuBar(ResourceID * newID);
  383.     void AddItem(MenuItem * item);
  384.     void SetMenuList(MenuList * newMenus);
  385.     void SetWindow(PString * newWindow);
  386.     void OutputCode(ostream & hdr_stream, ostream & src_stream);
  387.     virtual void EditResource(MainWindow *, ResourceFile *);
  388.   protected:
  389.     virtual void PrintOn(ostream & out) const;
  390.     LineNumber   firstLine;
  391.     PString      window;
  392.     MenuList     menus;
  393.     MenuItemDict itemDict;
  394.     LineNumber   windowLine;
  395.     PStringStream src_before, hdr_before;
  396.     PStringStream src_after, hdr_after;
  397.   friend int yyparse();
  398.   friend void MenuItem::OutputCode(ostream & hdr_stream,
  399.                                          ostream & src_stream, MenuBar & mbar);
  400. };
  401. /////////////////////////////////////////
  402. //
  403. //  list of menubars
  404. //
  405. PDECLARE_DICTIONARY(MenubarDict, POrdinalKey, MenuBar)
  406.   virtual void PrintOn(ostream & out) const;
  407. };
  408. /////////////////////////////////////////
  409. //
  410. //  A resource with a class specification and a position
  411. //
  412. PDECLARE_CLASS(ComplexResource, ClassedResource)
  413.   public:
  414.     ComplexResource(const char * className = "");
  415.     void  SetDim(Point * newDim);
  416.     Point GetDim() const { return dim; }
  417.     void  SetPos(Point * newPos);
  418.     Point GetPos() const { return pos; }
  419.   protected:
  420.     Point   pos;
  421.     Point   dim;
  422.     BOOL    dim_set;
  423. };
  424. /////////////////////////////////////////
  425. //
  426. //  Control
  427. //    The base control type
  428. //
  429. enum {
  430.   SortedOption = 1,
  431.   MultiSelectOption = 2,
  432.   MultiColumnOption = 4,
  433.   Special = 8,
  434.   OkButtonOption = 16,
  435.   CancelButtonOption = 32,
  436.   HelpButtonOption = 64,
  437.   DefaultButtonOption = 128,
  438. };
  439. class Layout;
  440. PDECLARE_CLASS(Control, ComplexResource)
  441.   public:
  442.     Control(const char * className, const char * valueType);
  443.     void SetFieldName(PString * newFieldname);
  444.     void SetValueName(PString * newValuename, PString * initialiser);
  445.     void SetNotify(PString * newNotify);
  446.     void SetHelp(PString * newHelp);
  447.     virtual void SetOptions(long option);
  448.     virtual void SetLimits(long min, long max, long sml, long lge);
  449.     virtual void SetStringList(PStringList * strlist);
  450.     virtual void SetIcon(long iconID);
  451.     virtual BOOL Validate() { return TRUE; }
  452.     void OutputCode(ostream & hdr_stream, ostream & src_stream,
  453.                     ostream & save, ostream & restore,
  454.                     PString & ok_button, PString & cancel_button,
  455.                     PString & help_button, Layout & layout);
  456.   protected:
  457.     virtual void PrintOn(ostream & out) const;
  458.     PString    valueType;
  459.     PString    valueName;
  460.     LineNumber valueLine;
  461.     PString    initialiser;
  462.     PString    fieldName;
  463.     LineNumber fieldLine;
  464.     PString    notifyName;
  465.     LineNumber notifyLine;
  466.     PString    balloonHelp;
  467.     long       options;
  468.     int        iconID;
  469.     PStringStream src_before, hdr_before;
  470.     PStringStream src_after, hdr_after;
  471.   friend int yyparse();
  472. };
  473. /////////////////////////////////////////
  474. //
  475. //  ListControl
  476. //    The base control type for list controls. This class exists because
  477. //    the AddString and SetOptions functions are overrided from Control
  478. //
  479. PDECLARE_CLASS(ListControl, Control)
  480.   public:
  481.     ListControl(const char * className, const char * valueType);
  482.     virtual void SetOptions(long option);
  483.     virtual void SetStringList(PStringList * strlist);
  484.   protected:
  485.     virtual void PrintOn(ostream & out) const;
  486.     PStringList strList; 
  487. };
  488. /////////////////////////////////////////
  489. //
  490. //  LimitControl
  491. //    The base control type for controls that support limits. This class exists
  492. //    because the SetLimits functions is overrided from Control
  493. //
  494. PDECLARE_CLASS(LimitControl, Control)
  495.   public:
  496.     LimitControl(const char * className, const char * valueType);
  497.     virtual void SetLimits(long min, long max, long sml, long lge);
  498.   protected:
  499.     long minimum, maximum, smallNudge, largeNudge;
  500. };
  501. /////////////////////////////////////////
  502. //
  503. //  control types
  504. //
  505. //  macro for defining controls
  506. #define DECLARE_CONTROL(CTL, PARENT, TYPE, BASECLASS) 
  507.   PDECLARE_CLASS(CTL, PARENT) 
  508.     public: 
  509.       CTL() : PARENT(BASECLASS, TYPE) { } 
  510.     protected: 
  511.       virtual void PrintOn(ostream & out) const; 
  512. DECLARE_CONTROL(PushButton,  Control,      "",                 "PTextButton")
  513.   public:
  514.     virtual void SetOptions(long option);
  515.     virtual BOOL Validate();
  516. };
  517. DECLARE_CONTROL(Check3Way,   Control,      "PCheck3WayBox::CheckValues", "PCheck3WayBox") };
  518. DECLARE_CONTROL(CheckBox,    Control,      "BOOL",             "PCheckBox") };
  519. DECLARE_CONTROL(RadioButton, Control,      "PINDEX",           "PRadioButton") };
  520. DECLARE_CONTROL(LeftText,    Control,      "",                 "PStaticText") };
  521. DECLARE_CONTROL(CentreText,  Control,      "",                 "PStaticText") };
  522. DECLARE_CONTROL(RightText,   Control,      "",                 "PStaticText") };
  523. DECLARE_CONTROL(StaticBox,   Control,      "",                 "PStaticBox") };
  524. DECLARE_CONTROL(EditBox,     Control,      "PString",          "PEditBox") };
  525. DECLARE_CONTROL(TextEditor,  Control,      "PString",          "PMultiLineEditBox") };
  526. DECLARE_CONTROL(Password,    Control,      "PString",          "PPasswordEditBox") };
  527. DECLARE_CONTROL(IntEditBox,  LimitControl, "long",             "PIntegerEditBox") };
  528. DECLARE_CONTROL(FloatEditBox,LimitControl, "double",           "PFloatEditBox") };
  529. DECLARE_CONTROL(HScrollBar,  LimitControl, "PSCROLLBAR_VALUE", "PHorizontalScrollBar") };
  530. DECLARE_CONTROL(VScrollBar,  LimitControl, "PSCROLLBAR_VALUE", "PVerticalScrollBar") };
  531. DECLARE_CONTROL(ChoiceBox,   ListControl,  "PINDEX",           "PChoiceBox") };
  532. DECLARE_CONTROL(ListBox,     ListControl,  "PINDEX",           "PStringListBox") };
  533. DECLARE_CONTROL(ComboBox,    ListControl,  "PString",          "PComboBox") };
  534. DECLARE_CONTROL(StaticIcon,  Control,      "",                 "PStaticIcon")
  535.   public:
  536.     void SetIcon(long icon);
  537. };
  538. DECLARE_CONTROL(UserControl, Control,      "",                 "")
  539.   public:
  540.     virtual BOOL Validate();
  541. };
  542. /////////////////////////////////////////
  543. //
  544. //  list of items
  545. //
  546. PLIST(ControlList, Control);
  547. PDICTIONARY(ControlDict, POrdinalKey, Control);
  548. /////////////////////////////////////////
  549. //
  550. //  Layout
  551. //
  552. PDECLARE_CLASS(Layout, ComplexResource)
  553.   public:
  554.     Layout(const PString & ancestorClass, int option);
  555.     void SetFontInfo(PString * newFontname, int nsize);
  556.     void SetHeader(PString * newHeader);
  557.     void AddControl(Control * newControl);
  558.     void SetUniqueItemIDs();
  559.     void OutputCode(ostream & hdr_stream, ostream & src_stream);
  560.     virtual void EditResource(MainWindow *, ResourceFile *);
  561.   protected:
  562.     virtual void PrintOn(ostream & out) const;
  563.     int subtype;
  564.     LineNumber firstLine;
  565.     ControlList itemList;
  566.     ControlDict itemDict;
  567.     PString header;
  568.     PString fontName;
  569.     int     fontSize;
  570.     PStringStream src_before, hdr_before;
  571.     PStringStream src_after, hdr_after;
  572.   friend int yyparse();
  573.   friend void Control::OutputCode(ostream & hdr_stream, ostream & src_stream,
  574.                                   ostream & save, ostream & restore,
  575.                                   PString & ok_button, PString & cancel_button,
  576.                                   PString & help_button, Layout & layout);
  577. };
  578. /////////////////////////////////////////
  579. //
  580. //  dictionary to hold layout resources
  581. //
  582. PDECLARE_DICTIONARY(DialogDict, POrdinalKey, Layout)
  583.   virtual void PrintOn(ostream & out) const;
  584. };
  585. /////////////////////////////////////////
  586. //
  587. //  holder for assorted binary data items
  588. //
  589. PDECLARE_CLASS(BinaryData, PAbstractArray)
  590.   public:
  591.     BinaryData();
  592.     BinaryData(const BinaryData & array);
  593.     BinaryData & operator=(const BinaryData & array);
  594.     void Append(int newSize, const BYTE * newData);
  595.     void Append(BYTE newByte) { Append(1, &newByte); }
  596.     PINDEX GetSize() const { return realSize; }
  597.       
  598.     operator const char *() const { return theArray; }
  599.   protected:
  600.     virtual void PrintOn(ostream & out) const;
  601.     PINDEX realSize;
  602. };
  603. /////////////////////////////////////////
  604. //
  605. //  all of the pixel map resources contents
  606. //
  607. PDECLARE_CLASS(PixData, BinaryData)
  608.   protected:
  609.     virtual void PrintOn(ostream & out) const;
  610. };
  611. PDECLARE_CLASS(PixelContents, PObject)
  612.   public:
  613.     PixelContents();
  614.     void SetDimensions(long w, long h, long d);
  615.     void SetHotSpot(long hx, long hy);
  616.     void SetClut(BinaryData * data);
  617.     void SetAndMask(PixData * data);
  618.     void SetXorMask(PixData * data);
  619.     void SetPixels(PixData * data);
  620.     void Verify(int dfltWidth, int dfltHeight, const char*resname,
  621.                 BOOL masks, BOOL allowDoubleSize);
  622.     
  623.   protected:
  624.     virtual void PrintOn(ostream & out) const;
  625.     BOOL haveDimensions;
  626.     int width, height, depth;
  627.     BOOL haveHotSpot;
  628.     int x, y;
  629.     BinaryData clut;
  630.     PixData andMask;
  631.     PixData xorMask;
  632.     PixData pixels;
  633.   friend class Icon;
  634.   friend class CursorResource;
  635.   friend class Pattern;
  636.   friend class Image;
  637. };
  638.    
  639. /////////////////////////////////////////
  640. //
  641. //  pixel based resources
  642. //
  643. PDECLARE_CLASS(PixelResource, ResourceObject)
  644.   public:
  645.     PixelResource(ResourceID * newId, PixelContents * newContents);
  646.   protected:
  647.     PixelContents contents;
  648.   friend class PixelEditor;
  649. };
  650.    
  651. /////////////////////////////////////////
  652. //
  653. //  icon resources
  654. //
  655. PDECLARE_CLASS(Icon, PixelResource)
  656.   public:
  657.     Icon(ResourceID * newId, PixelContents * newContents);
  658.     virtual void EditResource(MainWindow *, ResourceFile *);
  659.   protected:
  660.     virtual void PrintOn(ostream & out) const;
  661. };
  662.    
  663. /////////////////////////////////////////
  664. //
  665. //  dictionary to hold icon resources
  666. //
  667. PDECLARE_DICTIONARY(IconDict, POrdinalKey, Icon)
  668.   virtual void PrintOn(ostream & out) const;
  669. };
  670. /////////////////////////////////////////
  671. //
  672. //  cursor resources
  673. //
  674. PDECLARE_CLASS(CursorResource, PixelResource)
  675.   public:
  676.     CursorResource(ResourceID * newId, PixelContents * newContents);
  677.     virtual void EditResource(MainWindow *, ResourceFile *);
  678.   protected:
  679.     virtual void PrintOn(ostream & out) const;
  680. };
  681.    
  682. /////////////////////////////////////////
  683. //
  684. //  dictionary to hold cursor resources
  685. //
  686. PDECLARE_DICTIONARY(CursorDict, POrdinalKey, CursorResource)
  687.   virtual void PrintOn(ostream & out) const;
  688. };
  689. /////////////////////////////////////////
  690. //
  691. //  pattern resources
  692. //
  693. PDECLARE_CLASS(Pattern, PixelResource)
  694.   public:
  695.     Pattern(ResourceID * newId, PixelContents * newContents);
  696.     virtual void EditResource(MainWindow *, ResourceFile *);
  697.   protected:
  698.     virtual void PrintOn(ostream & out) const;
  699. };
  700.    
  701. /////////////////////////////////////////
  702. //
  703. //  dictionary to hold pattern resources
  704. //
  705. PDECLARE_DICTIONARY(PatternDict, POrdinalKey, Pattern)
  706.   virtual void PrintOn(ostream & out) const;
  707. };
  708. /////////////////////////////////////////
  709. //
  710. //  image resources
  711. //
  712. PDECLARE_CLASS(Image, PixelResource)
  713.   public:
  714.     Image(ResourceID * newId, PixelContents * newContents);
  715.     virtual void EditResource(MainWindow *, ResourceFile *);
  716.   protected:
  717.     virtual void PrintOn(ostream & out) const;
  718. };
  719.    
  720. /////////////////////////////////////////
  721. //
  722. //  dictionary to hold image resources
  723. //
  724. PDECLARE_DICTIONARY(ImageDict, POrdinalKey, Image)
  725.   virtual void PrintOn(ostream & out) const;
  726. };
  727. /////////////////////////////////////////
  728. //
  729. //  arbitrary data resources
  730. //
  731. PDECLARE_CLASS(DataResource, ResourceObject)
  732.   public:
  733.     DataResource(ResourceID * newId, PString * newText, BinaryData * newData);
  734.     virtual void EditResource(MainWindow *, ResourceFile *);
  735.   protected:
  736.     virtual void PrintOn(ostream & out) const;
  737.     BinaryData data;
  738. };
  739.    
  740. /////////////////////////////////////////
  741. //
  742. //  dictionary to hold data resources
  743. //
  744. PDECLARE_DICTIONARY(DataDict, POrdinalKey, DataResource)
  745.   virtual void PrintOn(ostream & out) const;
  746. };
  747. /////////////////////////////////////////
  748. //
  749. //  resource file data
  750. //
  751. PDECLARE_CLASS(ResourceFile, PObject)
  752.   public:
  753.     ResourceFile(PFile & prcfile,
  754.                  BOOL suppressInfoWarnings,
  755.                  const PString & predefinedSymbols);
  756.     ResourceID * GetUniqueIdentifierValue(const PAbstractDictionary & dict);
  757.     void Backend(PFile & out);
  758.     void OutputCode(const PFilePath & hdrname,
  759.                 ostream & hdr_stream, ostream & src_stream, BOOL suppressFlag);
  760.     unsigned Warnings() { return warnings; }
  761.     unsigned Fatals()   { return fatals; }
  762.     PINDEX GetNumDefines() const      { return defineDict.GetSize(); }
  763.     PString GetDefineName(PINDEX idx) { return defineDict.GetKeyAt(idx); }
  764.     BOOL IsNameDefined(const PString & name) const { return defineDict.Contains(name); }
  765.     ResourceList resources[ResourceList::NumResTypes];
  766.     
  767.   private:
  768.     void AddDefineIdentifier(PString * identifer, DefineValue * value);
  769.     int GetIdentifierValue(PString * identifer);
  770.     ResourceID * GetAutoIdentifier(PString * ident,
  771.                                              const PAbstractDictionary & dict);
  772.     void AddResource(ResourceList::ResTypes res,
  773.                                    ResourceObject * obj, const char * resname);
  774.     DefineDict   defineDict;
  775.     StringDict   stringDict;
  776.     MenubarDict  menubarDict;
  777.     DialogDict   dialogDict;
  778.     IconDict     iconDict;
  779.     CursorDict   cursorDict;
  780.     PatternDict  patternDict;
  781.     ImageDict    imageDict;
  782.     DataDict     dataDict;
  783.     PAbstractDictionary * resourceDict[ResourceList::NumResTypes];
  784.     PStringStream src_inline, hdr_inline;
  785.     int nextResourceId;
  786.     unsigned warnings;
  787.     unsigned fatals;
  788.     BOOL suppressInfoWarnings;
  789.   friend int yylex();
  790.   friend int yyparse();
  791.   friend ostream & operator<<(ostream & out, const StdError & e);
  792. };
  793. extern PStringArray IncludePath;
  794. #endif
  795. // End PWRC.H /////////////////////////////////////////////////////////////////