Add current project to File Browser (#221)

* Add current project to File Browser

* ready for testing

* Collapse other projects
This commit is contained in:
Jeremy Bullock 2020-09-25 22:55:03 -06:00 committed by GitHub
parent 8ca782f7c4
commit 4db981e3ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 17 deletions

View file

@ -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 &)));

View file

@ -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())

View file

@ -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