|
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2017 - ROLI Ltd.
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- By using JUCE, you agree to the terms of both the JUCE 5 End-User License
- Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
- 27th April 2017).
-
- End User License Agreement: www.juce.com/juce-5-licence
- Privacy Policy: www.juce.com/juce-5-privacy-policy
-
- Or: You may also use this code under the terms of the GPL v3 (see
- www.gnu.org/licenses).
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
- */
-
- class SourceFileItem : public ProjectTreeItemBase
- {
- public:
- SourceFileItem (const Project::Item& projectItem)
- : ProjectTreeItemBase (projectItem)
- {
- }
-
- bool acceptsFileDrop (const StringArray&) const override { return false; }
- bool acceptsDragItems (const OwnedArray <Project::Item>&) override { return false; }
-
- String getDisplayName() const override
- {
- return getFile().getFileName();
- }
-
- static File findCorrespondingHeaderOrCpp (const File& f)
- {
- if (f.hasFileExtension (sourceFileExtensions)) return f.withFileExtension (".h");
- if (f.hasFileExtension (headerFileExtensions)) return f.withFileExtension (".cpp");
-
- return {};
- }
-
- void setName (const String& newName) override
- {
- if (newName != File::createLegalFileName (newName))
- {
- AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
- "That filename contained some illegal characters!");
- triggerAsyncRename (item);
- return;
- }
-
- File oldFile (getFile());
- File newFile (oldFile.getSiblingFile (newName));
- File correspondingFile (findCorrespondingHeaderOrCpp (oldFile));
-
- if (correspondingFile.exists() && newFile.hasFileExtension (oldFile.getFileExtension()))
- {
- Project::Item correspondingItem (item.project.getMainGroup().findItemForFile (correspondingFile));
-
- if (correspondingItem.isValid())
- {
- if (AlertWindow::showOkCancelBox (AlertWindow::NoIcon, "File Rename",
- "Do you also want to rename the corresponding file \"" + correspondingFile.getFileName()
- + "\" to match?"))
- {
- if (! item.renameFile (newFile))
- {
- AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
- "Failed to rename \"" + oldFile.getFullPathName() + "\"!\n\nCheck your file permissions!");
- return;
- }
-
- if (! correspondingItem.renameFile (newFile.withFileExtension (correspondingFile.getFileExtension())))
- {
- AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
- "Failed to rename \"" + correspondingFile.getFullPathName() + "\"!\n\nCheck your file permissions!");
- }
- }
- }
- }
-
- if (! item.renameFile (newFile))
- {
- AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
- "Failed to rename the file!\n\nCheck your file permissions!");
- }
- }
-
- ProjectTreeItemBase* createSubItem (const Project::Item&) override
- {
- jassertfalse;
- return nullptr;
- }
-
- void showDocument() override
- {
- const File f (getFile());
-
- if (f.exists())
- if (ProjectContentComponent* pcc = getProjectContentComponent())
- pcc->showEditorForFile (f, false);
- }
-
- void showPopupMenu() override
- {
- PopupMenu m;
-
- m.addItem (1, "Open in external editor");
- m.addItem (2,
- #if JUCE_MAC
- "Reveal in Finder");
- #else
- "Reveal in Explorer");
- #endif
-
- m.addItem (4, "Rename File...");
- m.addSeparator();
-
- if (auto* group = dynamic_cast<GroupItem*> (getParentItem()))
- {
- if (group->isRoot())
- {
- m.addItem (5, "Binary Resource", true, item.shouldBeAddedToBinaryResources());
- m.addItem (6, "Xcode Resource", true, item.shouldBeAddedToXcodeResources());
- m.addItem (7, "Compile", true, item.shouldBeCompiled());
- m.addSeparator();
- }
- }
-
- m.addItem (3, "Delete");
-
- launchPopupMenu (m);
- }
-
- void showPlusMenu() override
- {
- if (auto* group = dynamic_cast<GroupItem*> (getParentItem()))
- group->showPlusMenu();
- }
-
- void handlePopupMenuResult (int resultCode) override
- {
- switch (resultCode)
- {
- case 1: getFile().startAsProcess(); break;
- case 2: revealInFinder(); break;
- case 3: deleteAllSelectedItems(); break;
- case 4: triggerAsyncRename (item); break;
- case 5: item.getShouldAddToBinaryResourcesValue().setValue (! item.shouldBeAddedToBinaryResources()); break;
- case 6: item.getShouldAddToXcodeResourcesValue().setValue (! item.shouldBeAddedToXcodeResources()); break;
- case 7: item.getShouldCompileValue().setValue (! item.shouldBeCompiled()); break;
-
- default:
- if (GroupItem* parentGroup = dynamic_cast<GroupItem*> (getParentProjectItem()))
- parentGroup->processCreateFileMenuItem (resultCode);
-
- break;
- }
- }
- };
|