mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
152 lines
5.4 KiB
C++
152 lines
5.4 KiB
C++
/*
|
|
==============================================================================
|
|
|
|
This file is part of the JUCE library.
|
|
Copyright (c) 2015 - ROLI Ltd.
|
|
|
|
Permission is granted to use this software under the terms of either:
|
|
a) the GPL v2 (or any later version)
|
|
b) the Affero GPL v3
|
|
|
|
Details of these licenses can be found at: www.gnu.org/licenses
|
|
|
|
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
To release a closed-source product which uses JUCE, commercial licenses are
|
|
available: visit www.juce.com for more information.
|
|
|
|
==============================================================================
|
|
*/
|
|
|
|
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;
|
|
|
|
if (GroupItem* parentGroup = dynamic_cast<GroupItem*> (getParentProjectItem()))
|
|
{
|
|
parentGroup->addCreateFileMenuItems (m);
|
|
m.addSeparator();
|
|
}
|
|
|
|
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();
|
|
m.addItem (3, "Delete");
|
|
|
|
launchPopupMenu (m);
|
|
}
|
|
|
|
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;
|
|
|
|
default:
|
|
if (GroupItem* parentGroup = dynamic_cast<GroupItem*> (getParentProjectItem()))
|
|
parentGroup->processCreateFileMenuItem (resultCode);
|
|
|
|
break;
|
|
}
|
|
}
|
|
};
|