diff --git a/stuff/fxs/presets/macroFx/.gitkeep b/stuff/fxs/presets/macroFx/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/toonz/sources/include/toonz/toonzfolders.h b/toonz/sources/include/toonz/toonzfolders.h index 04aa8938..22bb652f 100644 --- a/toonz/sources/include/toonz/toonzfolders.h +++ b/toonz/sources/include/toonz/toonzfolders.h @@ -41,6 +41,7 @@ DVAPI TFilePath getFirstProjectsFolder(); DVAPI TFilePath getStudioPaletteFolder(); DVAPI TFilePath getFxPresetFolder(); DVAPI TFilePath getLibraryFolder(); +DVAPI TFilePath getPluginsFolder(); DVAPI TFilePath getReslistPath(bool forCleanup); DVAPI TFilePath getCacheRootFolder(); DVAPI TFilePath getProfileFolder(); diff --git a/toonz/sources/toonz/filebrowser.cpp b/toonz/sources/toonz/filebrowser.cpp index f11ef804..12aca45c 100644 --- a/toonz/sources/toonz/filebrowser.cpp +++ b/toonz/sources/toonz/filebrowser.cpp @@ -598,6 +598,7 @@ void FileBrowser::refreshCurrentFolderItems() { if (it->getType() != "tnz" && it->getType() != "scr" && it->getType() != "tnzbat" && it->getType() != "mpath" && it->getType() != "curve" && it->getType() != "tpl" && + it->getType() != "macrofx" && it->getType() != "plugin" && TFileType::getInfo(*it) == TFileType::UNKNOW_FILE) continue; } else if (!m_filter.contains(QString::fromStdString(it->getType()))) diff --git a/toonz/sources/toonz/filebrowsermodel.cpp b/toonz/sources/toonz/filebrowsermodel.cpp index 98c86406..923b5953 100644 --- a/toonz/sources/toonz/filebrowsermodel.cpp +++ b/toonz/sources/toonz/filebrowsermodel.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #ifdef _WIN32 #include @@ -77,6 +78,14 @@ TFilePath getDesktopPath() { return TFilePath(dir.absolutePath().toStdString()); #endif } + +// Downloads Path +TFilePath getDownloadsPath() { + QStringList stdLocs = + QStandardPaths::standardLocations(QStandardPaths::DownloadLocation); + if (stdLocs.isEmpty()) return TFilePath(); + return TFilePath(stdLocs[0]); +} } // namespace //============================================================================= @@ -1022,6 +1031,57 @@ QPixmap DvDirModelNetworkNode::getPixmap(bool isOpen) const { return pixmap; } +//============================================================================= +// +// DvDirModelStuffFolderNode [Tahoma2D] +// +//----------------------------------------------------------------------------- + +DvDirModelStuffFolderNode::DvDirModelStuffFolderNode(DvDirModelNode *parent) + : DvDirModelNode(parent, L"Tahoma2D") { + m_nodeType = "StuffFolder"; +} + +//----------------------------------------------------------------------------- + +void DvDirModelStuffFolderNode::refreshChildren() { + m_childrenValid = true; + if (!m_children.empty()) clearPointerContainer(m_children); + + DvDirModelSpecialFileFolderNode *child = new DvDirModelSpecialFileFolderNode( + this, L"Library", ToonzFolder::getLibraryFolder()); + child->setPixmap( + recolorPixmap(svgToPixmap(getIconThemePath("actions/16/library.svg")))); + addChild(child); + + child = new DvDirModelSpecialFileFolderNode( + this, L"Fx Macros", + ToonzFolder::getFxPresetFolder() + TFilePath("presets/macroFx")); + child->setPixmap( + recolorPixmap(svgToPixmap(getIconThemePath("actions/16/fx_logo.svg")))); + addChild(child); + + child = new DvDirModelSpecialFileFolderNode(this, L"Fx Plugins", + ToonzFolder::getPluginsFolder()); + child->setPixmap( + recolorPixmap(svgToPixmap(getIconThemePath("actions/16/plugins.svg")))); + addChild(child); + + child = new DvDirModelSpecialFileFolderNode( + this, L"Studio Palettes", ToonzFolder::getStudioPaletteFolder()); + child->setPixmap( + recolorPixmap(svgToPixmap(getIconThemePath("actions/16/palette.svg")))); + addChild(child); +} + +//----------------------------------------------------------------------------- + +QPixmap DvDirModelStuffFolderNode::getPixmap(bool isOpen) const { + QIcon icon = createQIcon("tahoma2d"); + static QPixmap pixmap = icon.pixmap(16); + return pixmap; +} + //============================================================================= // // DvDirModelRootNode [Root] @@ -1070,13 +1130,22 @@ void DvDirModelRootNode::refreshChildren() { m_specialNodes.push_back(child); addChild(child); - child = new DvDirModelSpecialFileFolderNode( - this, L"Library", ToonzFolder::getLibraryFolder()); - child->setPixmap( - recolorPixmap(svgToPixmap(getIconThemePath("actions/16/library.svg")))); + child = new DvDirModelSpecialFileFolderNode(this, L"Downloads", + getDownloadsPath()); + child->setPixmap(recolorPixmap( + svgToPixmap(getIconThemePath("actions/16/downloads.svg")))); m_specialNodes.push_back(child); addChild(child); + DvDirModelStuffFolderNode *childstuff = new DvDirModelStuffFolderNode(this); + for (int i = 0; i < childstuff->getChildCount(); i++) { + DvDirModelSpecialFileFolderNode *node = + dynamic_cast( + childstuff->getChild(i)); + m_specialNodes.push_back(node); + } + addChild(childstuff); + addChild(new DvDirModelHistoryNode(this)); TProjectManager *pm = TProjectManager::instance(); diff --git a/toonz/sources/toonz/filebrowsermodel.h b/toonz/sources/toonz/filebrowsermodel.h index 383c0c71..7fd837d6 100644 --- a/toonz/sources/toonz/filebrowsermodel.h +++ b/toonz/sources/toonz/filebrowsermodel.h @@ -304,6 +304,16 @@ public: //----------------------------------------------------------------------------- +class DvDirModelStuffFolderNode final : public DvDirModelNode { +public: + DvDirModelStuffFolderNode(DvDirModelNode *parent); + void refreshChildren() override; + QPixmap getPixmap(bool isOpen) const override; + bool isFolder() const override { return true; } +}; + +//----------------------------------------------------------------------------- + class DvDirModelRootNode final : public DvDirModelNode { std::vector m_versionControlNodes; std::vector m_projectNodes; diff --git a/toonz/sources/toonz/icons/dark/actions/16/downloads.svg b/toonz/sources/toonz/icons/dark/actions/16/downloads.svg new file mode 100644 index 00000000..2025dfc6 --- /dev/null +++ b/toonz/sources/toonz/icons/dark/actions/16/downloads.svg @@ -0,0 +1,48 @@ + +image/svg+xml + + + \ No newline at end of file diff --git a/toonz/sources/toonz/icons/dark/actions/16/plugins.svg b/toonz/sources/toonz/icons/dark/actions/16/plugins.svg new file mode 100644 index 00000000..bccbca35 --- /dev/null +++ b/toonz/sources/toonz/icons/dark/actions/16/plugins.svg @@ -0,0 +1,60 @@ + +image/svg+xml + + + \ No newline at end of file diff --git a/toonz/sources/toonz/icons/dark/actions/16/tahoma2d.svg b/toonz/sources/toonz/icons/dark/actions/16/tahoma2d.svg new file mode 100644 index 00000000..2da0353f --- /dev/null +++ b/toonz/sources/toonz/icons/dark/actions/16/tahoma2d.svg @@ -0,0 +1,60 @@ + +image/svg+xml + + + \ No newline at end of file diff --git a/toonz/sources/toonz/toonz.qrc b/toonz/sources/toonz/toonz.qrc index 7e0bb8e7..c039d162 100644 --- a/toonz/sources/toonz/toonz.qrc +++ b/toonz/sources/toonz/toonz.qrc @@ -53,7 +53,11 @@ icons/dark/actions/16/rotateleft.svg icons/dark/actions/16/rotateright.svg - + icons/dark/actions/16/tahoma2d.svg + icons/dark/actions/16/plugins.svg + icons/dark/actions/16/downloads.svg + + icons/dark/actions/16/menu.svg icons/dark/actions/16/export.svg icons/dark/actions/16/import.svg diff --git a/toonz/sources/toonzlib/toonzfolders.cpp b/toonz/sources/toonzlib/toonzfolders.cpp index 69d64a0f..0a316ee4 100644 --- a/toonz/sources/toonzlib/toonzfolders.cpp +++ b/toonz/sources/toonzlib/toonzfolders.cpp @@ -107,6 +107,11 @@ TFilePath ToonzFolder::getFxPresetFolder() { return fp; } +TFilePath ToonzFolder::getPluginsFolder() { + TFilePath fp = getStuffDir() + TFilePath("plugins"); + return fp; +} + TFilePath ToonzFolder::getCacheRootFolder() { static enum STATE { FIRSTTIME, OK, NG } state = FIRSTTIME; QString cacheDir = diff --git a/toonz/sources/toonzqt/gutil.cpp b/toonz/sources/toonzqt/gutil.cpp index 6de9986e..3d7ce99e 100644 --- a/toonz/sources/toonzqt/gutil.cpp +++ b/toonz/sources/toonzqt/gutil.cpp @@ -641,7 +641,8 @@ bool isResource(const QString &path) { return (TFileType::isViewable(type) || type & TFileType::MESH_IMAGE || type == TFileType::AUDIO_LEVEL || type == TFileType::TABSCENE || - type == TFileType::TOONZSCENE || fp.getType() == "tpl"); + type == TFileType::TOONZSCENE || fp.getType() == "tpl" || + fp.getType() == "macrofx" || fp.getType() == "plugin"); } //-----------------------------------------------------------------------------