Add current project to File Browser (#221)
* Add current project to File Browser * ready for testing * Collapse other projects
This commit is contained in:
parent
8ca782f7c4
commit
4db981e3ec
3 changed files with 55 additions and 17 deletions
|
@ -349,6 +349,15 @@ DvDirTreeView::DvDirTreeView(QWidget *parent)
|
|||
ret = ret && connect(this->model(), SIGNAL(layoutChanged()), this,
|
||||
SLOT(resizeToConts()));
|
||||
|
||||
ret = ret && connect(dynamic_cast<DvDirModel *>(this->model()),
|
||||
&DvDirModel::projectAdded, [=]() {
|
||||
collapseAll();
|
||||
setCurrentNode(TProjectManager::instance()
|
||||
->getCurrentProjectPath()
|
||||
.getParentDir(),
|
||||
true);
|
||||
});
|
||||
|
||||
if (Preferences::instance()->isWatchFileSystemEnabled()) {
|
||||
ret = ret && connect(this, SIGNAL(expanded(const QModelIndex &)), this,
|
||||
SLOT(onExpanded(const QModelIndex &)));
|
||||
|
|
|
@ -1075,27 +1075,27 @@ void DvDirModelRootNode::refreshChildren() {
|
|||
|
||||
addChild(new DvDirModelHistoryNode(this));
|
||||
|
||||
TProjectManager *pm = TProjectManager::instance();
|
||||
// std::vector<TFilePath> projectRoots;
|
||||
// pm->getProjectRoots(projectRoots);
|
||||
|
||||
// int i;
|
||||
// for (i = 0; i < (int)projectRoots.size(); i++) {
|
||||
// TFilePath projectRoot = projectRoots[i];
|
||||
// std::wstring roothDir = projectRoot.getWideString();
|
||||
// DvDirModelSpecialFileFolderNode *projectRootNode =
|
||||
// new DvDirModelSpecialFileFolderNode(
|
||||
// this, L"Project root (" + roothDir + L")", projectRoot);
|
||||
// projectRootNode->setPixmap(QPixmap(recolorPixmap(svgToPixmap(
|
||||
// getIconThemePath("actions/18/folder_project_root.svg")))));
|
||||
// m_projectRootNodes.push_back(projectRootNode);
|
||||
// addChild(projectRootNode);
|
||||
// }
|
||||
|
||||
TProjectManager *pm = TProjectManager::instance();
|
||||
TFilePath sandboxProjectPath = pm->getSandboxProjectFolder();
|
||||
m_sandboxProjectNode = new DvDirModelProjectNode(this, sandboxProjectPath);
|
||||
addChild(m_sandboxProjectNode);
|
||||
|
||||
TFilePath projectPath = pm->getCurrentProjectPath().getParentDir();
|
||||
if (projectPath != pm->getSandboxProjectFolder()) {
|
||||
m_currentProjectNode = new DvDirModelProjectNode(this, projectPath);
|
||||
m_projectPaths.insert(projectPath);
|
||||
addChild(m_currentProjectNode);
|
||||
}
|
||||
|
||||
if (m_projectPaths.size() > 1) {
|
||||
for (auto i : m_projectPaths) {
|
||||
if (i == projectPath) continue;
|
||||
DvDirModelProjectNode *addedProjectNode =
|
||||
new DvDirModelProjectNode(this, projectPath);
|
||||
addChild(addedProjectNode);
|
||||
}
|
||||
}
|
||||
|
||||
// SVN Repositories
|
||||
QList<SVNRepository> repositories =
|
||||
VersionControl::instance()->getRepositories();
|
||||
|
@ -1117,6 +1117,17 @@ void DvDirModelRootNode::refreshChildren() {
|
|||
m_sceneFolderNode =
|
||||
new DvDirModelSceneFolderNode(this, L"Scene Folder", TFilePath());
|
||||
m_sceneFolderNode->setPixmap(QPixmap(":Resources/clapboard.png"));
|
||||
} else {
|
||||
TProjectManager *pm = TProjectManager::instance();
|
||||
TFilePath projectPath = pm->getCurrentProjectPath().getParentDir();
|
||||
if (projectPath != pm->getSandboxProjectFolder() &&
|
||||
(m_projectPaths.find(projectPath) == m_projectPaths.end())) {
|
||||
std::string rootString = projectPath.getQString().toStdString();
|
||||
m_currentProjectNode = new DvDirModelProjectNode(this, projectPath);
|
||||
m_projectPaths.insert(projectPath);
|
||||
addChild(m_currentProjectNode);
|
||||
updateSceneFolderNodeVisibility();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1173,6 +1184,10 @@ DvDirModelNode *DvDirModelRootNode::getNodeByPath(const TFilePath &path) {
|
|||
if (node) return node;
|
||||
}
|
||||
|
||||
if (m_projectPaths.size() > 0 && m_currentProjectNode &&
|
||||
m_currentProjectNode->getPath() == path)
|
||||
return m_currentProjectNode;
|
||||
|
||||
// or it could be the sandbox project or in the sandbox project
|
||||
if (m_sandboxProjectNode && m_sandboxProjectNode->getPath() == path)
|
||||
return m_sandboxProjectNode;
|
||||
|
@ -1475,6 +1490,15 @@ DvDirModel *DvDirModel::instance() {
|
|||
void DvDirModel::onSceneSwitched() {
|
||||
DvDirModelRootNode *rootNode = dynamic_cast<DvDirModelRootNode *>(m_root);
|
||||
if (rootNode) {
|
||||
int projectPaths = rootNode->getProjectPathsSize();
|
||||
m_root->refreshChildren();
|
||||
if (rootNode->getProjectPathsSize() != projectPaths) {
|
||||
TProjectManager *pm = TProjectManager::instance();
|
||||
TFilePath projectPath = pm->getCurrentProjectPath().getParentDir();
|
||||
QModelIndex index = getIndexByPath(projectPath);
|
||||
refresh(index);
|
||||
emit(projectAdded());
|
||||
}
|
||||
ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
|
||||
if (scene) {
|
||||
if (scene->isUntitled())
|
||||
|
|
|
@ -310,6 +310,8 @@ class DvDirModelRootNode final : public DvDirModelNode {
|
|||
DvDirModelMyComputerNode *m_myComputerNode;
|
||||
DvDirModelNetworkNode *m_networkNode;
|
||||
DvDirModelProjectNode *m_sandboxProjectNode;
|
||||
DvDirModelProjectNode *m_currentProjectNode;
|
||||
std::set<TFilePath> m_projectPaths;
|
||||
DvDirModelSceneFolderNode *m_sceneFolderNode;
|
||||
std::vector<DvDirModelSpecialFileFolderNode *> m_specialNodes;
|
||||
|
||||
|
@ -318,6 +320,7 @@ class DvDirModelRootNode final : public DvDirModelNode {
|
|||
public:
|
||||
DvDirModelRootNode();
|
||||
void refreshChildren() override;
|
||||
int getProjectPathsSize() { return m_projectPaths.size(); }
|
||||
|
||||
DvDirModelNode *getNodeByPath(const TFilePath &path) override;
|
||||
// QPixmap getPixmap(bool isOpen) const;
|
||||
|
@ -381,6 +384,8 @@ public:
|
|||
emit beginInsertRows(parent, first, last);
|
||||
}
|
||||
void notifyEndInsertRows() { emit endInsertRows(); }
|
||||
signals:
|
||||
void projectAdded();
|
||||
|
||||
protected slots:
|
||||
// when the scene switched, update the path of the scene location node
|
||||
|
|
Loading…
Reference in a new issue