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,
|
ret = ret && connect(this->model(), SIGNAL(layoutChanged()), this,
|
||||||
SLOT(resizeToConts()));
|
SLOT(resizeToConts()));
|
||||||
|
|
||||||
|
ret = ret && connect(dynamic_cast<DvDirModel *>(this->model()),
|
||||||
|
&DvDirModel::projectAdded, [=]() {
|
||||||
|
collapseAll();
|
||||||
|
setCurrentNode(TProjectManager::instance()
|
||||||
|
->getCurrentProjectPath()
|
||||||
|
.getParentDir(),
|
||||||
|
true);
|
||||||
|
});
|
||||||
|
|
||||||
if (Preferences::instance()->isWatchFileSystemEnabled()) {
|
if (Preferences::instance()->isWatchFileSystemEnabled()) {
|
||||||
ret = ret && connect(this, SIGNAL(expanded(const QModelIndex &)), this,
|
ret = ret && connect(this, SIGNAL(expanded(const QModelIndex &)), this,
|
||||||
SLOT(onExpanded(const QModelIndex &)));
|
SLOT(onExpanded(const QModelIndex &)));
|
||||||
|
|
|
@ -1075,27 +1075,27 @@ void DvDirModelRootNode::refreshChildren() {
|
||||||
|
|
||||||
addChild(new DvDirModelHistoryNode(this));
|
addChild(new DvDirModelHistoryNode(this));
|
||||||
|
|
||||||
TProjectManager *pm = TProjectManager::instance();
|
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);
|
|
||||||
// }
|
|
||||||
|
|
||||||
TFilePath sandboxProjectPath = pm->getSandboxProjectFolder();
|
TFilePath sandboxProjectPath = pm->getSandboxProjectFolder();
|
||||||
m_sandboxProjectNode = new DvDirModelProjectNode(this, sandboxProjectPath);
|
m_sandboxProjectNode = new DvDirModelProjectNode(this, sandboxProjectPath);
|
||||||
addChild(m_sandboxProjectNode);
|
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
|
// SVN Repositories
|
||||||
QList<SVNRepository> repositories =
|
QList<SVNRepository> repositories =
|
||||||
VersionControl::instance()->getRepositories();
|
VersionControl::instance()->getRepositories();
|
||||||
|
@ -1117,6 +1117,17 @@ void DvDirModelRootNode::refreshChildren() {
|
||||||
m_sceneFolderNode =
|
m_sceneFolderNode =
|
||||||
new DvDirModelSceneFolderNode(this, L"Scene Folder", TFilePath());
|
new DvDirModelSceneFolderNode(this, L"Scene Folder", TFilePath());
|
||||||
m_sceneFolderNode->setPixmap(QPixmap(":Resources/clapboard.png"));
|
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 (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
|
// or it could be the sandbox project or in the sandbox project
|
||||||
if (m_sandboxProjectNode && m_sandboxProjectNode->getPath() == path)
|
if (m_sandboxProjectNode && m_sandboxProjectNode->getPath() == path)
|
||||||
return m_sandboxProjectNode;
|
return m_sandboxProjectNode;
|
||||||
|
@ -1475,6 +1490,15 @@ DvDirModel *DvDirModel::instance() {
|
||||||
void DvDirModel::onSceneSwitched() {
|
void DvDirModel::onSceneSwitched() {
|
||||||
DvDirModelRootNode *rootNode = dynamic_cast<DvDirModelRootNode *>(m_root);
|
DvDirModelRootNode *rootNode = dynamic_cast<DvDirModelRootNode *>(m_root);
|
||||||
if (rootNode) {
|
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();
|
ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
|
||||||
if (scene) {
|
if (scene) {
|
||||||
if (scene->isUntitled())
|
if (scene->isUntitled())
|
||||||
|
|
|
@ -310,6 +310,8 @@ class DvDirModelRootNode final : public DvDirModelNode {
|
||||||
DvDirModelMyComputerNode *m_myComputerNode;
|
DvDirModelMyComputerNode *m_myComputerNode;
|
||||||
DvDirModelNetworkNode *m_networkNode;
|
DvDirModelNetworkNode *m_networkNode;
|
||||||
DvDirModelProjectNode *m_sandboxProjectNode;
|
DvDirModelProjectNode *m_sandboxProjectNode;
|
||||||
|
DvDirModelProjectNode *m_currentProjectNode;
|
||||||
|
std::set<TFilePath> m_projectPaths;
|
||||||
DvDirModelSceneFolderNode *m_sceneFolderNode;
|
DvDirModelSceneFolderNode *m_sceneFolderNode;
|
||||||
std::vector<DvDirModelSpecialFileFolderNode *> m_specialNodes;
|
std::vector<DvDirModelSpecialFileFolderNode *> m_specialNodes;
|
||||||
|
|
||||||
|
@ -318,6 +320,7 @@ class DvDirModelRootNode final : public DvDirModelNode {
|
||||||
public:
|
public:
|
||||||
DvDirModelRootNode();
|
DvDirModelRootNode();
|
||||||
void refreshChildren() override;
|
void refreshChildren() override;
|
||||||
|
int getProjectPathsSize() { return m_projectPaths.size(); }
|
||||||
|
|
||||||
DvDirModelNode *getNodeByPath(const TFilePath &path) override;
|
DvDirModelNode *getNodeByPath(const TFilePath &path) override;
|
||||||
// QPixmap getPixmap(bool isOpen) const;
|
// QPixmap getPixmap(bool isOpen) const;
|
||||||
|
@ -381,6 +384,8 @@ public:
|
||||||
emit beginInsertRows(parent, first, last);
|
emit beginInsertRows(parent, first, last);
|
||||||
}
|
}
|
||||||
void notifyEndInsertRows() { emit endInsertRows(); }
|
void notifyEndInsertRows() { emit endInsertRows(); }
|
||||||
|
signals:
|
||||||
|
void projectAdded();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
// when the scene switched, update the path of the scene location node
|
// when the scene switched, update the path of the scene location node
|
||||||
|
|
Loading…
Reference in a new issue