文档对象是一个MapDocument类, 它的主要功能有:
不管什么编辑器, 针对文档的操作就这么几种, 看看所有编辑器工具栏上那万年不变的前几个图标就知道了.
先弹出NewMapDialog, 确定各种参数后就会生成一个MapDocument对象
让人意外的是MapDocument是NewMapDialog创建的, 而不是DocumentManager
估计这么做的原因是参数太多, 私有访问比较方便吧?
然后调用DocumentManager::addDocument把文档加入管理器, 同时创建显示需要的一些东西, 并绑定事件
在读取之前, 会先查询一下插件管理器, 看看有没有可以读文件的插件
如果选择的文件已经打开, 则直接切换到那个文档, 不再打开新的
读完文件后就有了Map对象, 创建出MapDocument, 剩下的流程就跟新建一样addDocument就行了
关闭之前需要确认保存, 而需不需要保存则是看QUndoStack是不是空的(跟我之前YY的一样)
DocumentManager干的事就是删除Tab, 释放显示对象和MapDocument对象
如果没有名字, 就换成"另存为"的操作流程
保存的时候同样也要扫描插件看扩展的格式writer
保存完的话就要把文档对应的QUndoStack标记空了, 这样就不会出现没有修改重复保存的情况
最后就把文件加入"recent file"
这个打开记录是保存在QSettings里的, 在编辑器下次启动时也会还原打开的文件
QSettings是个之前没用过的东西, 可以保存各种选项, 而且还不用操作保存/读取, 挺实用的
这么看下来多文档模型还是挺清晰的, 最重要的是管理好状态切换