op.h
Go to the documentation of this file.
00001 /**********************************************************************
00002 op.h - plugin options or operations
00003 
00004 Copyright (C) 2007 by Chris Morley
00005 
00006 This file is part of the Open Babel project.
00007 For more information, see <http://openbabel.org/>
00008 
00009 This program is free software; you can redistribute it and/or modify
00010 it under the terms of the GNU General Public License as published by
00011 the Free Software Foundation version 2 of the License.
00012 
00013 This program is distributed in the hope that it will be useful, but
00014 WITHOUT ANY WARRANTY; without even the implied warranty of
00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016 General Public License for more details.
00017 ***********************************************************************/
00018 
00019 #ifndef OB_OP_H
00020 #define OB_OP_H
00021 
00022 #include <openbabel/babelconfig.h>
00023 #include <string>
00024 #include <map>
00025 #include <openbabel/plugin.h>
00026 #include <openbabel/base.h>
00027 
00028 namespace OpenBabel
00029 {
00030   class OBConversion; //used only as a pointer
00031 
00032 // Class introduction below
00033 class OBAPI OBOp : public OBPlugin
00034 {
00035   MAKE_PLUGIN(OBOp);
00036 
00037 public:
00038   typedef const std::map<std::string, std::string> OpMap ;
00039 
00041   virtual const char* TypeID(){ return "ops"; }
00042 
00044   //NOTE: the parameters were changed in r3532
00045   virtual bool Do(OBBase* pOb, const char* OptionText=NULL, OpMap* pOptions=NULL, OBConversion* pConv=NULL)=0;
00046 
00048   virtual bool WorksWith(OBBase* pOb)const=0;
00049 
00051   virtual bool ProcessVec(std::vector<OBBase*>& /* vec */){ return false; }
00052 
00054   static std::string OpOptions(OBBase* pOb)
00055   {
00056     std::string s;
00057     OBPlugin::PluginIterator itr;
00058     for(itr=OBPlugin::Begin("ops");itr!=OBPlugin::End("ops");++itr)
00059     {
00060       OBOp* pOp = dynamic_cast<OBOp*>(itr->second);
00061        //ignore ops with IDs that begin with '_' or have "not displayed in GUI" in their first line of description
00062       if(*(itr->first)=='_'
00063         || OBPlugin::FirstLine(pOp->Description()).find("not displayed in GUI")!=std::string::npos)
00064         continue;
00065       if(pOp && pOp->WorksWith(pOb))
00066       {
00067         s += "--";
00068         s += itr->first; //ID
00069         s += ' ';
00070         s += OBPlugin::FirstLine(pOp->Description()) + '\n';
00071       }
00072     }
00073     s += '\n';
00074     return s;
00075   }
00076 
00082   static bool DoOps(OBBase* pOb, OpMap* pOptions, OBConversion* pConv)
00083   {
00084     OpMap::const_iterator itr;
00085     for(itr=pOptions->begin();itr!=pOptions->end();++itr)
00086     {
00087       OBOp* pOp = FindType(itr->first.c_str());
00088       if(pOp)
00089         if(!pOp->Do(pOb, itr->second.c_str(), pOptions, pConv))
00090           return false; //Op has decided molecule should not be output
00091     }
00092     return true;
00093   }
00094 };
00095 
00138 }//namespace
00139 
00140 #endif
00141 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines