+// t oredirect all calls to the root document
+#define ROOT_DOC std::dynamic_pointer_cast<Model_Document>(moduleDocument())
+
+bool Model_Session::load(const char* theFileName)
+{
+ return ROOT_DOC->load(theFileName);
+}
+
+bool Model_Session::save(const char* theFileName, std::list<std::string>& theResults)
+{
+ return ROOT_DOC->save(theFileName, theResults);
+}
+
+void Model_Session::closeAll()
+{
+ ROOT_DOC->close(true);
+ Model_Application::getApplication()->deleteAllDocuments();
+}
+
+void Model_Session::startOperation()
+{
+ ROOT_DOC->startOperation();
+ static std::shared_ptr<Events_Message> aStartedMsg
+ (new Events_Message(Events_Loop::eventByName("StartOperation")));
+ Events_Loop::loop()->send(aStartedMsg);
+}
+
+void Model_Session::finishOperation()
+{
+ ROOT_DOC->finishOperation();
+}
+
+void Model_Session::abortOperation()
+{
+ ROOT_DOC->abortOperation();
+ static std::shared_ptr<Events_Message> anAbortMsg
+ (new Events_Message(Events_Loop::eventByName("AbortOperation")));
+ Events_Loop::loop()->send(anAbortMsg);
+}
+
+bool Model_Session::isOperation()
+{
+ return ROOT_DOC->isOperation();
+}
+
+bool Model_Session::isModified()
+{
+ return ROOT_DOC->isModified();
+}
+
+bool Model_Session::canUndo()
+{
+ return ROOT_DOC->canUndo();
+}
+
+void Model_Session::undo()
+{
+ ROOT_DOC->undo();
+}
+
+bool Model_Session::canRedo()
+{
+ return ROOT_DOC->canRedo();
+}
+
+void Model_Session::redo()
+{
+ ROOT_DOC->redo();
+}
+