summaryrefslogtreecommitdiff
path: root/src/filetree.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/filetree.cpp')
-rw-r--r--src/filetree.cpp98
1 files changed, 92 insertions, 6 deletions
diff --git a/src/filetree.cpp b/src/filetree.cpp
index 2a64d1c6..c80024c5 100644
--- a/src/filetree.cpp
+++ b/src/filetree.cpp
@@ -888,8 +888,7 @@ void FileTree::addAsExecutable()
.arguments(fec.arguments)
.workingDirectory(target.absolutePath()));
- // todo
- //emit executablesChanged();
+ emit executablesChanged();
}
break;
@@ -909,22 +908,100 @@ void FileTree::addAsExecutable()
void FileTree::exploreOrigin()
{
+ if (auto* item=singleSelection()) {
+ if (item->isFromArchive() || item->isDirectory()) {
+ return;
+ }
+
+ const auto path = item->realPath();
+
+ log::debug("opening in explorer: {}", path);
+ shell::Explore(path);
+ }
}
void FileTree::openModInfo()
{
+ if (auto* item=singleSelection()) {
+ const auto originID = item->originID();
+
+ if (originID == 0) {
+ // unmanaged
+ return;
+ }
+
+ const auto& origin = m_core.directoryStructure()->getOriginByID(originID);
+ const auto& name = QString::fromStdWString(origin.getName());
+
+ unsigned int index = ModInfo::getIndex(name);
+ if (index == UINT_MAX) {
+ log::error("can't open mod info, mod '{}' not found", name);
+ return;
+ }
+
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(index);
+ if (modInfo) {
+ emit displayModInformation(modInfo, index, ModInfoTabIDs::None);
+ }
+ }
}
void FileTree::toggleVisibility()
{
}
+void FileTree::toggleVisibility(bool visible)
+{
+ auto* item = singleSelection();
+ if (!item) {
+ return;
+ }
+
+ const QString currentName = item->realPath();
+ QString newName;
+
+ if (visible) {
+ if (!currentName.endsWith(ModInfo::s_HiddenExt)) {
+ log::error(
+ "cannot unhide '{}', doesn't end with '{}'",
+ currentName, ModInfo::s_HiddenExt);
+
+ return;
+ }
+
+ newName = currentName.left(currentName.size() - ModInfo::s_HiddenExt.size());
+ } else {
+ if (currentName.endsWith(ModInfo::s_HiddenExt)) {
+ log::error(
+ "cannot hide '{}', already ends with '{}'",
+ currentName, ModInfo::s_HiddenExt);
+
+ return;
+ }
+
+ newName = currentName + ModInfo::s_HiddenExt;
+ }
+
+ log::debug("attempting to rename '{}' to '{}'", currentName, newName);
+
+ FileRenamer renamer(
+ m_tree->window(),
+ (visible ? FileRenamer::UNHIDE : FileRenamer::HIDE));
+
+ if (renamer.rename(currentName, newName) == FileRenamer::RESULT_OK) {
+ emit originModified(item->originID());
+ refresh();
+ }
+}
+
void FileTree::hide()
{
+ toggleVisibility(false);
}
void FileTree::unhide()
{
+ toggleVisibility(true);
}
void FileTree::dumpToFile()
@@ -992,14 +1069,14 @@ void FileTree::addFileMenus(QMenu& menu, const FileEntry& file, int originID)
if (isHidden(file)) {
MenuItem(QObject::tr("&Un-Hide"))
- .callback([&]{ hide(); })
+ .callback([&]{ unhide(); })
.hint(QObject::tr("Un-hides the file"))
.disabledHint(QObject::tr("This file is in an archive"))
.enabled(!file.isFromArchive())
.addTo(menu);
} else {
MenuItem(QObject::tr("&Hide"))
- .callback([&]{ unhide(); })
+ .callback([&]{ hide(); })
.hint(QObject::tr("Hides the file"))
.disabledHint(QObject::tr("This file is in an archive"))
.enabled(!file.isFromArchive())
@@ -1083,6 +1160,15 @@ void FileTree::addOpenMenus(QMenu& menu, const MOShared::FileEntry& file)
void FileTree::addCommonMenus(QMenu& menu)
{
- menu.addAction(QObject::tr("Write To File..."), [&]{ dumpToFile(); });
- menu.addAction(QObject::tr("Refresh"), [&]{ refresh(); });
+ menu.addSeparator();
+
+ MenuItem(QObject::tr("&Save Tree to Text File..."))
+ .callback([&]{ dumpToFile(); })
+ .hint(QObject::tr("Writes the list of files to a text file"))
+ .addTo(menu);
+
+ MenuItem(QObject::tr("&Refresh"))
+ .callback([&]{ refresh(); })
+ .hint(QObject::tr("Refreshes the list"))
+ .addTo(menu);
}