Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

swmodule.h

00001 /******************************************************************************
00002  *  swmodule.h  - code for base class 'module'.  Module is the basis for all
00003  *                types of modules (e.g. texts, commentaries, maps, lexicons,
00004  *                etc.)
00005  *
00006  * $Id: swmodule.h-source.html,v 1.10 2001/05/25 10:44:22 jansorg Exp $
00007  *
00008  * Copyright 1998 CrossWire Bible Society (http://www.crosswire.org)
00009  *      CrossWire Bible Society
00010  *      P. O. Box 2528
00011  *      Tempe, AZ  85280-2528
00012  *
00013  * This program is free software; you can redistribute it and/or modify it
00014  * under the terms of the GNU General Public License as published by the
00015  * Free Software Foundation version 2.
00016  *
00017  * This program is distributed in the hope that it will be useful, but
00018  * WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00020  * General Public License for more details.
00021  *
00022  */
00023 
00024 #ifndef SWMODULE_H
00025 #define SWMODULE_H
00026 
00027 #include <swdisp.h>
00028 #include <swkey.h>
00029 #include <listkey.h>
00030 #include <swfilter.h>
00031 #include <list>
00032 
00033 #include <defs.h>
00034 
00035 #define FILTERPAD 5
00036 
00037 using namespace std;
00038 
00039 typedef list < SWFilter * >FilterList;
00040 
00041 
00047 class SWDLLEXPORT SWModule {
00048 
00049 protected:
00050 
00051   char error;
00052 
00054   SWKey *key;
00055 
00056   ListKey listkey;
00057   char *modname;
00058   char *moddesc;
00059   char *modtype;
00060 
00062   SWDisplay *disp;
00063 
00064   static SWDisplay rawdisp;
00065   char *entrybuf;
00066 
00068   FilterList *stripFilters;
00069 
00071   FilterList *rawFilters;
00072 
00074   FilterList *renderFilters;
00075 
00077   FilterList *optionFilters;
00078 
00079   bool render;
00080 
00081 public:
00082 
00089   static void nullPercent (char percent, void *userData);
00090 
00095   bool terminateSearch;
00096 
00109   SWModule (const char *imodname = 0, const char *imoddesc = 0, SWDisplay * idisp = 0, char *imodtype = 0);
00110 
00113   virtual ~ SWModule ();
00114 
00119   virtual char Error ();
00120 
00127   virtual char SetKey (const SWKey *ikey);
00128   virtual char SetKey (const SWKey &ikey);
00129 
00133   virtual SWKey & Key () const {
00134     return *key;
00135   }
00136   
00143   virtual char Key (const SWKey & ikey) {
00144     return SetKey (ikey);
00145   }
00146   
00153   virtual const char *KeyText (const char *imodtype = 0);
00154   
00159   virtual char Display ();
00160   
00167   virtual SWDisplay *Disp (SWDisplay * idisp = 0);
00168   
00175   virtual char *Name (const char *imodname = 0);
00176   
00183   virtual char *Description (const char *imoddesc = 0);
00184   
00191   virtual char *Type (const char *imodtype = 0);
00192 
00193   // search methods
00194 
00206   virtual ListKey & Search (const char *istr, int searchType = 0, int flags = 0,
00207                   SWKey * scope = 0,
00208                   bool * justCheckIfSupported = 0,
00209                   void (*percent) (char, void *) = &nullPercent,
00210                   void *percentUserData = 0);
00214   virtual char createSearchFramework () {
00215     return 0;
00216   }                             // special search framework
00217   
00221   virtual bool hasSearchFramework () {
00222     return false;
00223   }                             // special search framework
00224   
00228   virtual bool isSearchOptimallySupported (const char *istr, int searchType,
00229                                            int flags, SWKey * scope) {
00230       bool retVal = false;
00231       Search (istr, searchType, flags, scope, &retVal);
00232       return retVal;
00233   }
00234 
00239   virtual SWKey *CreateKey ();
00240 
00244   virtual operator char *();
00245   
00250   virtual char *getRawEntry () = 0;
00251   
00255   virtual operator SWKey & () {
00256     return *key;
00257   }
00258   
00262   virtual operator SWKey *() {
00263     return key;
00264   }
00265 
00266   // write interface ----------------------------
00270   virtual bool isWritable () {
00271     return false;
00272   }
00273   
00278   static char createModule (const char *) {
00279     return -1;
00280   }
00281   
00286   virtual SWModule & operator << (const char *) {
00287     return *this;
00288   }
00289   
00294   virtual SWModule & operator << (const SWKey *) {
00295     return *this;
00296   }
00297   
00301   virtual void deleteEntry () {
00302   }
00303   
00304   // end write interface ------------------------
00305 
00311   virtual SWModule & operator -= (int decrement);
00312   
00318   virtual SWModule & operator += (int increment);
00319   
00323   virtual SWModule & operator++ (int) {
00324     return *this += 1;
00325   }
00326   
00330   virtual SWModule & operator-- (int) {
00331     return *this -= 1;
00332   }
00333   
00339   virtual SWModule & operator = (SW_POSITION p);
00340   
00345   virtual SWModule & AddRenderFilter (SWFilter * newfilter) {
00346     renderFilters->push_back (newfilter);
00347     return *this;
00348   }
00349 
00356   virtual void renderFilter (char *buf, long size, SWKey *key) {
00357         filterBuffer(renderFilters, buf, size, key);
00358   }
00359   
00364   virtual SWModule & AddStripFilter (SWFilter * newfilter) {
00365     stripFilters->push_back (newfilter);
00366     return *this;
00367   }
00368 
00375   virtual void stripFilter (char *buf, long size, SWKey *key) {
00376         filterBuffer(stripFilters, buf, size, key);
00377   }
00378   
00383   virtual SWModule & AddRawFilter (SWFilter * newfilter) {
00384     rawFilters->push_back (newfilter);
00385     return *this;
00386   }
00387   
00395   virtual void filterBuffer (FilterList *filters, char *buf, long size, SWKey *key) {
00396         FilterList::iterator it;
00397         for (it = filters->begin(); it != filters->end(); it++) {
00398                 (*it)->ProcessText(buf, size, key);
00399         }
00400   }
00401 
00408   virtual void rawFilter (char *buf, long size, SWKey *key) {
00409         filterBuffer(rawFilters, buf, size, key);
00410   }
00411   
00416   virtual SWModule & AddOptionFilter (SWFilter * newfilter) {
00417     optionFilters->push_back (newfilter);
00418     return *this;
00419   }
00420 
00427   virtual void optionFilter (char *buf, long size, SWKey *key) {
00428         filterBuffer(optionFilters, buf, size, key);
00429   }
00430   
00438   virtual const char *StripText (char *buf = 0, int len = -1);
00439   
00447   virtual const char *RenderText (char *buf = 0, int len = -1);
00448   
00454   virtual const char *StripText (SWKey * tmpKey);
00455   
00461   virtual const char *RenderText (SWKey * tmpKey);
00462   
00463 };
00464 
00465 
00466 #endif

Generated at Thu May 24 19:50:26 2001 for The Sword Project by doxygen1.1.5 written by Dimitri van Heesch, © 1997-2000