| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| | #ifndef SRC_APP_APPLICATION_H_
|
| | #define SRC_APP_APPLICATION_H_
|
| |
|
| | #include <fastsignals/signal.h>
|
| | #include <QtCore/qtextstream.h>
|
| |
|
| | #include <deque>
|
| | #include <list>
|
| | #include <vector>
|
| | #include <list>
|
| | #include <set>
|
| | #include <map>
|
| | #include <string>
|
| |
|
| | #include <Base/Observer.h>
|
| | #include <Base/Parameter.h>
|
| | #include <Base/ProgressIndicator.h>
|
| |
|
| |
|
| | using PyObject = struct _object;
|
| | using PyMethodDef = struct PyMethodDef;
|
| |
|
| | namespace Base
|
| | {
|
| | class ConsoleObserverStd;
|
| | class ConsoleObserverFile;
|
| | }
|
| |
|
| | namespace App
|
| | {
|
| |
|
| | class Document;
|
| | class DocumentObject;
|
| | class ApplicationDirectories;
|
| | class ApplicationObserver;
|
| | class Property;
|
| | class AutoTransaction;
|
| | class ExtensionContainer;
|
| |
|
| | enum GetLinkOption {
|
| |
|
| | GetLinkRecursive = 1,
|
| |
|
| | GetLinkArrayElement = 2,
|
| |
|
| | GetLinkedObject = 4,
|
| |
|
| | GetLinkExternal = 8,
|
| | };
|
| |
|
| | enum class MessageOption {
|
| | Quiet,
|
| | Error,
|
| | Throw,
|
| | };
|
| |
|
| | struct DocumentInitFlags {
|
| | bool createView {true};
|
| | bool temporary {false};
|
| | };
|
| |
|
| | |
| | |
| | |
| |
|
| | class AppExport Application
|
| | {
|
| |
|
| | public:
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | App::Document* newDocument(const char * proposedName=nullptr, const char * proposedLabel=nullptr,
|
| | DocumentInitFlags CreateFlags=DocumentInitFlags());
|
| |
|
| | bool closeDocument(const char* name);
|
| |
|
| | std::string getUniqueDocumentName(const char *Name, bool tempDoc=false) const;
|
| |
|
| | App::Document* openDocument(const char * FileName=nullptr, DocumentInitFlags initFlags = DocumentInitFlags{});
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | std::vector<Document*> openDocuments(const std::vector<std::string> &filenames,
|
| | const std::vector<std::string> *paths=nullptr,
|
| | const std::vector<std::string> *labels=nullptr,
|
| | std::vector<std::string> *errs=nullptr,
|
| | DocumentInitFlags initFlags = DocumentInitFlags{});
|
| |
|
| | App::Document* getActiveDocument() const;
|
| |
|
| | App::Document* getDocument(const char *Name) const;
|
| |
|
| |
|
| | enum class PathMatchMode {
|
| |
|
| | MatchAbsolute = 0,
|
| | |
| | |
| | |
| |
|
| | MatchCanonical = 1,
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | MatchCanonicalWarning = 2,
|
| | };
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | App::Document* getDocumentByPath(const char *path,
|
| | PathMatchMode checkCanonical = PathMatchMode::MatchAbsolute) const;
|
| |
|
| |
|
| | const char * getDocumentName(const App::Document* ) const;
|
| |
|
| | std::vector<App::Document*> getDocuments() const;
|
| |
|
| | void setActiveDocument(App::Document* pDoc);
|
| | void setActiveDocument(const char* Name);
|
| |
|
| | void closeAllDocuments();
|
| |
|
| | int addPendingDocument(const char *FileName, const char *objName, bool allowPartial);
|
| |
|
| | bool isRestoring() const;
|
| |
|
| | bool isClosingAll() const;
|
| |
|
| |
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | int setActiveTransaction(const char *name, bool persist=false);
|
| |
|
| | const char *getActiveTransaction(int *tid=nullptr) const;
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | void closeActiveTransaction(bool abort=false, int id=0);
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | fastsignals::signal<void (const Document&, bool)> signalNewDocument;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalDeleteDocument;
|
| |
|
| | fastsignals::signal<void ()> signalDeletedDocument;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalRelabelDocument;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalRenameDocument;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalActiveDocument;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalSaveDocument;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalStartRestoreDocument;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalFinishRestoreDocument;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalPendingReloadDocument;
|
| |
|
| | fastsignals::signal<void (const Document&, const std::string&)> signalStartSaveDocument;
|
| |
|
| | fastsignals::signal<void (const Document&, const std::string&)> signalFinishSaveDocument;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalUndoDocument;
|
| |
|
| | fastsignals::signal<void ()> signalUndo;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalRedoDocument;
|
| |
|
| | fastsignals::signal<void ()> signalRedo;
|
| |
|
| | fastsignals::signal<void (const std::string&)> signalBeforeOpenTransaction;
|
| |
|
| | fastsignals::signal<void (bool)> signalBeforeCloseTransaction;
|
| |
|
| | fastsignals::signal<void (bool)> signalCloseTransaction;
|
| |
|
| | fastsignals::signal<void (const Document&)> signalShowHidden;
|
| |
|
| | fastsignals::signal<void ()> signalStartOpenDocument;
|
| |
|
| | fastsignals::signal<void ()> signalFinishOpenDocument;
|
| |
|
| |
|
| |
|
| | |
| | |
| | |
| |
|
| |
|
| |
|
| | fastsignals::signal<void (const App::Document&, const App::Property&)> signalBeforeChangeDocument;
|
| |
|
| | fastsignals::signal<void (const App::Document&, const App::Property&)> signalChangedDocument;
|
| |
|
| | fastsignals::signal<void (const App::DocumentObject&)> signalNewObject;
|
| |
|
| |
|
| | fastsignals::signal<void (const App::DocumentObject&)> signalDeletedObject;
|
| |
|
| | fastsignals::signal<void (const App::DocumentObject&, const App::Property&)> signalBeforeChangeObject;
|
| |
|
| | fastsignals::signal<void (const App::DocumentObject&, const App::Property&)> signalChangedObject;
|
| |
|
| | fastsignals::signal<void (const App::DocumentObject&)> signalRelabelObject;
|
| |
|
| | fastsignals::signal<void (const App::DocumentObject&)> signalActivatedObject;
|
| |
|
| | fastsignals::signal<void (const App::Document&)> signalBeforeRecomputeDocument;
|
| |
|
| | fastsignals::signal<void (const App::Document&)> signalRecomputed;
|
| |
|
| | fastsignals::signal<void (const App::DocumentObject&)> signalObjectRecomputed;
|
| |
|
| | fastsignals::signal<void (const App::Document&, std::string)> signalOpenTransaction;
|
| |
|
| | fastsignals::signal<void (const App::Document&)> signalCommitTransaction;
|
| |
|
| | fastsignals::signal<void (const App::Document&)> signalAbortTransaction;
|
| |
|
| |
|
| | |
| | |
| | |
| |
|
| |
|
| |
|
| | fastsignals::signal<void (const App::Property&)> signalAppendDynamicProperty;
|
| |
|
| | fastsignals::signal<void (const App::Property&, const char*)> signalRenameDynamicProperty;
|
| |
|
| | fastsignals::signal<void (const App::Property&)> signalRemoveDynamicProperty;
|
| |
|
| | fastsignals::signal<void (const App::Document&, const App::Property&)> signalChangePropertyEditor;
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| |
|
| |
|
| |
|
| | fastsignals::signal<void (const App::ExtensionContainer&, std::string extension)> signalBeforeAddingDynamicExtension;
|
| |
|
| | fastsignals::signal<void (const App::ExtensionContainer&, std::string extension)> signalAddedDynamicExtension;
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | ParameterManager & GetSystemParameter();
|
| |
|
| | ParameterManager & GetUserParameter();
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | Base::Reference<ParameterGrp> GetParameterGroupByPath(const char* sName);
|
| |
|
| | ParameterManager * GetParameterSet(const char* sName) const;
|
| | const std::map<std::string,Base::Reference<ParameterManager>> & GetParameterSetList() const;
|
| | void AddParameterSet(const char* sName);
|
| | void RemoveParameterSet(const char* sName);
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| |
|
| | void addImportType(const char* Type, const char* ModuleName);
|
| |
|
| | void changeImportModule(const char* Type, const char* OldModuleName, const char* NewModuleName);
|
| |
|
| | std::vector<std::string> getImportModules(const char* Type) const;
|
| |
|
| | std::vector<std::string> getImportModules() const;
|
| |
|
| | std::vector<std::string> getImportTypes(const char* Module) const;
|
| |
|
| | std::vector<std::string> getImportTypes() const;
|
| |
|
| | std::map<std::string, std::string> getImportFilters(const char* Type) const;
|
| |
|
| | std::map<std::string, std::string> getImportFilters() const;
|
| |
|
| |
|
| |
|
| | void addExportType(const char* Type, const char* ModuleName);
|
| |
|
| | void changeExportModule(const char* Type, const char* OldModuleName, const char* NewModuleName);
|
| |
|
| | std::vector<std::string> getExportModules(const char* Type) const;
|
| |
|
| | std::vector<std::string> getExportModules() const;
|
| |
|
| | std::vector<std::string> getExportTypes(const char* Module) const;
|
| |
|
| | std::vector<std::string> getExportTypes() const;
|
| |
|
| | std::map<std::string, std::string> getExportFilters(const char* Type) const;
|
| |
|
| | std::map<std::string, std::string> getExportFilters() const;
|
| |
|
| |
|
| |
|
| |
|
| | static void init(int argc, char ** argv);
|
| | static void initTypes();
|
| | static void destruct();
|
| | static void destructObserver();
|
| | static void processCmdLineFiles();
|
| | static std::list<std::string> getCmdLineFiles();
|
| | static std::list<std::string> processFiles(const std::list<std::string>&);
|
| | static void runApplication();
|
| | friend Application &GetApplication();
|
| | static std::map<std::string, std::string> &Config(){return mConfig;}
|
| | static int GetARGC(){return _argc;}
|
| | static char** GetARGV(){return _argv;}
|
| | static int64_t applicationPid();
|
| |
|
| |
|
| |
|
| |
|
| | static std::string getHomePath();
|
| | static std::string getExecutableName();
|
| | static std::string getNameWithVersion();
|
| | static bool isDevelopmentVersion();
|
| |
|
| |
|
| | static const std::unique_ptr<ApplicationDirectories>& directories();
|
| |
|
| | |
| | |
| | |
| |
|
| | static std::string getTempPath();
|
| | static std::string getTempFileName(const char* FileName=nullptr);
|
| | static std::string getUserCachePath();
|
| | static std::string getUserConfigPath();
|
| | static std::string getUserAppDataDir();
|
| | static std::string getUserMacroDir();
|
| | static std::string getResourceDir();
|
| | static std::string getLibraryDir();
|
| | static std::string getHelpDir();
|
| |
|
| |
|
| |
|
| |
|
| | static void getVerboseCommonInfo(QTextStream& str, const std::map<std::string,std::string>& mConfig);
|
| | static void getVerboseAddOnsInfo(QTextStream& str, const std::map<std::string,std::string>& mConfig);
|
| | static void addModuleInfo(QTextStream& str, const QString& modPath, bool& firstMod);
|
| | static QString prettyProductInfoWrapper();
|
| | static QString getValueOrEmpty(const std::map<std::string, std::string>& map, const std::string& key);
|
| | static constexpr const char* verboseVersionEmitMessage{"verbose_version"};
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | int checkLinkDepth(int depth, MessageOption option = MessageOption::Error);
|
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | std::set<DocumentObject*> getLinksTo(
|
| | const DocumentObject *, int options, int maxCount=0) const;
|
| |
|
| |
|
| | bool hasLinksTo(const DocumentObject *obj) const;
|
| |
|
| |
|
| |
|
| | Base::ProgressIndicator& getProgressIndicator() { return _progressIndicator; }
|
| |
|
| | friend class App::Document;
|
| |
|
| | protected:
|
| |
|
| | void renameDocument(const char *OldName, const char *NewName);
|
| |
|
| | |
| | |
| |
|
| |
|
| | void slotBeforeChangeDocument(const App::Document& doc, const App::Property& prop);
|
| | void slotChangedDocument(const App::Document& doc, const App::Property& prop);
|
| | void slotNewObject(const App::DocumentObject& obj);
|
| | void slotDeletedObject(const App::DocumentObject& obj);
|
| | void slotBeforeChangeObject(const App::DocumentObject& obj, const App::Property& prop);
|
| | void slotChangedObject(const App::DocumentObject& obj, const App::Property& prop);
|
| | void slotRelabelObject(const App::DocumentObject& obj);
|
| | void slotActivatedObject(const App::DocumentObject& obj);
|
| | void slotUndoDocument(const App::Document& doc);
|
| | void slotRedoDocument(const App::Document& doc);
|
| | void slotRecomputedObject(const App::DocumentObject& obj);
|
| | void slotRecomputed(const App::Document& doc);
|
| | void slotBeforeRecompute(const App::Document& doc);
|
| | void slotOpenTransaction(const App::Document& doc, std::string name);
|
| | void slotCommitTransaction(const App::Document& doc);
|
| | void slotAbortTransaction(const App::Document& doc);
|
| | void slotStartSaveDocument(const App::Document& doc, const std::string& filename);
|
| | void slotFinishSaveDocument(const App::Document& doc, const std::string& filename);
|
| | void slotChangePropertyEditor(const App::Document& doc, const App::Property& prop);
|
| |
|
| |
|
| |
|
| | App::Document* openDocumentPrivate(const char * FileName, const char *propFileName,
|
| | const char *label, bool isMainDoc, DocumentInitFlags initFlags, std::vector<std::string> &&objNames);
|
| |
|
| |
|
| | class AppExport TransactionSignaller {
|
| | public:
|
| | TransactionSignaller(bool abort, bool signal);
|
| | ~TransactionSignaller();
|
| | private:
|
| | bool abort;
|
| | };
|
| |
|
| | private:
|
| |
|
| |
|
| | explicit Application(std::map<std::string, std::string> &mConfig);
|
| |
|
| | virtual ~Application();
|
| |
|
| | static void cleanupUnits();
|
| |
|
| | void setActiveDocumentNoSignal(App::Document* pDoc);
|
| |
|
| |
|
| |
|
| | static Base::Reference<ParameterManager> _pcSysParamMngr;
|
| | static Base::Reference<ParameterManager> _pcUserParamMngr;
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | static void setupPythonTypes();
|
| | static void setupPythonException(PyObject*);
|
| |
|
| |
|
| |
|
| | static PyObject* sGetParam (PyObject *self, PyObject *args);
|
| | static PyObject* sSaveParameter (PyObject *self, PyObject *args);
|
| | static PyObject* sGetVersion (PyObject *self, PyObject *args);
|
| | static PyObject* sGetConfig (PyObject *self, PyObject *args);
|
| | static PyObject* sSetConfig (PyObject *self, PyObject *args);
|
| | static PyObject* sDumpConfig (PyObject *self, PyObject *args);
|
| | static PyObject* sAddImportType (PyObject *self, PyObject *args);
|
| | static PyObject* sChangeImportModule(PyObject *self, PyObject *args);
|
| | static PyObject* sGetImportType (PyObject *self, PyObject *args);
|
| | static PyObject* sAddExportType (PyObject *self, PyObject *args);
|
| | static PyObject* sChangeExportModule(PyObject *self, PyObject *args);
|
| | static PyObject* sGetExportType (PyObject *self, PyObject *args);
|
| | static PyObject* sGetResourcePath (PyObject *self, PyObject *args);
|
| | static PyObject* sGetLibraryPath (PyObject *self, PyObject *args);
|
| | static PyObject* sGetTempPath (PyObject *self, PyObject *args);
|
| | static PyObject* sGetUserCachePath (PyObject *self, PyObject *args);
|
| | static PyObject* sGetUserConfigPath (PyObject *self, PyObject *args);
|
| | static PyObject* sGetUserAppDataPath(PyObject *self, PyObject *args);
|
| | static PyObject* sGetUserMacroPath (PyObject *self, PyObject *args);
|
| | static PyObject* sGetHelpPath (PyObject *self, PyObject *args);
|
| | static PyObject* sGetHomePath (PyObject *self, PyObject *args);
|
| |
|
| | static PyObject* sLoadFile (PyObject *self,PyObject *args);
|
| | static PyObject* sOpenDocument (PyObject *self,PyObject *args, PyObject *kwd);
|
| | static PyObject* sSaveDocument (PyObject *self,PyObject *args);
|
| | static PyObject* sSaveDocumentAs (PyObject *self,PyObject *args);
|
| | static PyObject* sNewDocument (PyObject *self,PyObject *args, PyObject *kwd);
|
| | static PyObject* sCloseDocument (PyObject *self,PyObject *args);
|
| | static PyObject* sActiveDocument (PyObject *self,PyObject *args);
|
| | static PyObject* sSetActiveDocument (PyObject *self,PyObject *args);
|
| | static PyObject* sGetDocument (PyObject *self,PyObject *args);
|
| | static PyObject* sListDocuments (PyObject *self,PyObject *args);
|
| | static PyObject* sAddDocObserver (PyObject *self,PyObject *args);
|
| | static PyObject* sRemoveDocObserver (PyObject *self,PyObject *args);
|
| | static PyObject *sIsRestoring (PyObject *self,PyObject *args);
|
| |
|
| | static PyObject *sSetLogLevel (PyObject *self,PyObject *args);
|
| | static PyObject *sGetLogLevel (PyObject *self,PyObject *args);
|
| |
|
| | static PyObject *sCheckLinkDepth (PyObject *self,PyObject *args);
|
| | static PyObject *sGetLinksTo (PyObject *self,PyObject *args);
|
| |
|
| | static PyObject *sGetDependentObjects(PyObject *self,PyObject *args);
|
| |
|
| | static PyObject *sSetActiveTransaction (PyObject *self,PyObject *args);
|
| | static PyObject *sGetActiveTransaction (PyObject *self,PyObject *args);
|
| | static PyObject *sCloseActiveTransaction(PyObject *self,PyObject *args);
|
| | static PyObject *sCheckAbort(PyObject *self,PyObject *args);
|
| | static PyMethodDef Methods[];
|
| |
|
| |
|
| | friend class ApplicationObserver;
|
| |
|
| |
|
| |
|
| | static void initConfig(int argc, char ** argv);
|
| | static void initApplication();
|
| | static void logStatus();
|
| |
|
| | static Application *_pcSingleton;
|
| |
|
| |
|
| |
|
| | |
| | |
| |
|
| | static std::string FindHomePath(const char* sCall);
|
| |
|
| | static void PrintInitHelp();
|
| |
|
| | static void ExtractUserPath();
|
| |
|
| | static void LoadParameters();
|
| |
|
| | static void SaveEnv(const char *);
|
| |
|
| | static std::map<std::string,std::string> mConfig;
|
| |
|
| | static std::unique_ptr<ApplicationDirectories> _appDirs;
|
| | static int _argc;
|
| | static char ** _argv;
|
| |
|
| |
|
| | struct FileTypeItem {
|
| | std::string filter;
|
| | std::string module;
|
| | std::vector<std::string> types;
|
| | };
|
| |
|
| |
|
| | std::vector<FileTypeItem> _mImportTypes;
|
| | std::vector<FileTypeItem> _mExportTypes;
|
| | std::map<std::string,Document*> DocMap;
|
| | mutable std::map<std::string,Document*> DocFileMap;
|
| | std::map<std::string,Base::Reference<ParameterManager>> mpcPramManager;
|
| | std::map<std::string,std::string> &_mConfig;
|
| | App::Document* _pActiveDoc{nullptr};
|
| |
|
| | std::deque<std::string> _pendingDocs;
|
| | std::deque<std::string> _pendingDocsReopen;
|
| | std::map<std::string,std::vector<std::string> > _pendingDocMap;
|
| |
|
| |
|
| |
|
| | std::map<std::string,std::set<std::string> > _docReloadAttempts;
|
| |
|
| | bool _isRestoring{false};
|
| | bool _allowPartial{false};
|
| | bool _isClosingAll{false};
|
| |
|
| |
|
| | int _objCount{-1};
|
| |
|
| | friend class AutoTransaction;
|
| |
|
| | std::string _activeTransactionName;
|
| | int _activeTransactionID{0};
|
| | int _activeTransactionGuard{0};
|
| | bool _activeTransactionTmpName{false};
|
| |
|
| | Base::ProgressIndicator _progressIndicator;
|
| |
|
| | static Base::ConsoleObserverStd *_pConsoleObserverStd;
|
| | static Base::ConsoleObserverFile *_pConsoleObserverFile;
|
| | };
|
| |
|
| |
|
| | inline App::Application &GetApplication(){
|
| | return *App::Application::_pcSingleton;
|
| | }
|
| |
|
| | }
|
| |
|
| |
|
| | #endif
|
| |
|