00001
00002
00003 #ifndef UIDOCUMENT_H
00004 #define UIDOCUMENT_H
00005
00006 #include <vector>
00007 #include <string>
00008 #include <libxml/tree.h>
00009 #include <map>
00010 #include "UINetwork.h"
00011 #include "UINodeParameters.h"
00012 #include <set>
00013 #include "Object.h"
00014 #include "UINodeRepository.h"
00015
00016 namespace FD {
00017
00018 class UINodeMenu;
00019 class Network;
00020 class ParameterSet;
00021
00022
00023 class DocParameterDataText {
00024 public:
00025 std::string name;
00026 std::string value;
00027 std::string type;
00028 };
00029
00034 class UIDocument : public Object {
00035
00036 protected:
00038 std::vector<UINetwork *> networks;
00039
00041 bool modified;
00042
00044 UINodeRepository subnetInfo;
00045
00047 std::vector<DocParameterDataText *> textParams;
00048
00050 std::vector<ParameterText *> docInputs;
00051
00053 std::vector<ParameterText *> docOutputs;
00054
00056 std::vector<ParameterText *> docParams;
00057
00059 std::string docName;
00060
00062 std::string path;
00063
00065 bool untitled;
00066
00068 bool destroyed;
00069
00071 std::string category;
00072
00074 std::string m_comments;
00075
00076 public:
00077
00079 UIDocument(std::string _name);
00080
00082 virtual ~UIDocument();
00083
00085 virtual void load();
00086
00088 virtual void loadXML(xmlNodePtr root);
00089
00091 virtual void loadFromMemory(const char *mem, int size);
00092
00094 void setCategory(const std::string &cat) {category = cat;}
00095
00097 const std::string &getCategory() {return category;}
00098
00100 void setComments(const std::string &comments) {m_comments = comments;}
00101
00103 const std::string &getComments() {return m_comments;}
00104
00106 void setModified() {modified=true;}
00107
00109 void resetModified() {modified=false;}
00110
00112 bool isModified() {return modified;}
00113
00115 UINetwork *addNetwork(std::string name, UINetwork::Type type);
00116
00118 UINetwork *addNetwork(xmlNodePtr xmlNet);
00119
00121 void removeNetwork(UINetwork *toRemove);
00122
00124 bool isUntitled() {return untitled;}
00125
00127 virtual const std::string &getName() {return docName;}
00128
00130 const std::string &getPath() {return path;}
00131
00133 virtual void save();
00134
00136 char *saveToMemory(int &size);
00137
00138 void addParameterText(std::string name, std::string value, std::string type);
00139
00140 UINetwork *getNetworkNamed(const std::string &n);
00141
00142 std::vector<ItemInfo *> getNetInputs(const std::string &netName);
00143
00144 std::vector<ItemInfo *> getNetOutputs(const std::string &netName);
00145
00146 std::vector<ItemInfo *> getNetParams(const std::string &netName);
00147
00148 std::string getDescription(const std::string &type);
00149
00151 void printOn(std::ostream &out=std::cout) const;
00152
00153 std::vector<UINetwork *> get_networks() {return networks;}
00154
00155 std::vector<DocParameterDataText *> get_textParams() {return textParams;}
00156
00157 virtual UINetwork *newNetwork(const std::string &_name, UINetwork::Type type);
00158
00159 virtual UINetwork *newNetwork(xmlNodePtr _net);
00160
00161 Network *build(const std::string &_name, const ParameterSet ¶ms);
00162
00164 std::set<std::string> genCode(std::ostream &out, const std::string &functName, bool localIncludes=false);
00165
00171 void exportNetwork(const std::string &networkName, const std::string &fileName);
00172
00173
00178 void importNetwork(const std::string &fileName);
00179
00180
00181 static Network *buildExternal(const std::string &type, const std::string &_name, const ParameterSet ¶ms);
00182
00183 virtual void run();
00184
00185 virtual void run(ParameterSet &p);
00186
00187 virtual void setFullPath(const std::string &fullpath);
00188
00189 void updateNetInfo(UINetwork *net);
00190
00191 void updateAllNetworks();
00192
00193 static std::string findExternal(const std::string &filename, char *searchPath="FLOWDESIGNER_PATH", bool include_home=true, bool fullPathOutput=true);
00194
00195 static void genCodeExternal(const std::string &type, std::ostream &out, int &id, std::set<std::string> &nodeList);
00196
00197 virtual void updateAllSubnetTerminals(const std::string _nettype, const std::string _terminalname,
00198 UINetTerminal::NetTermType _terminaltype, bool _remove);
00199
00200 UINodeRepository &getRepository() {return subnetInfo;}
00201
00202 protected:
00203
00204 virtual void error(char *err);
00205
00206 private:
00207
00208 static bool findExternalRecursive(const std::string &basePath, const std::string &path, const std::string &type, std::string &fullname, bool fullPathOutput);
00209 };
00210
00211
00212 }
00213
00214 #endif