mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-11 23:54:18 +00:00
169 lines
6.2 KiB
C++
169 lines
6.2 KiB
C++
/*
|
|
==============================================================================
|
|
|
|
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;
|
|
}
|
|
}
|
|
};
|