00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 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
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 }
00217
00221 virtual bool hasSearchFramework () {
00222 return false;
00223 }
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 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
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