1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Projucer: Added an option to clear the recent files list and added some more menu items for managing the currently open windows

This commit is contained in:
ed 2018-02-07 12:57:16 +00:00
parent 1355e1d1f3
commit cf61037ea4
3 changed files with 92 additions and 21 deletions

View file

@ -329,7 +329,8 @@ ApplicationCommandManager& ProjucerApplication::getCommandManager()
enum
{
recentProjectsBaseID = 100,
activeDocumentsBaseID = 300,
openWindowsBaseID = 300,
activeDocumentsBaseID = 400,
colourSchemeBaseID = 1000,
codeEditorColourSchemeBaseID = 2000,
};
@ -341,18 +342,19 @@ MenuBarModel* ProjucerApplication::getMenuModel()
StringArray ProjucerApplication::getMenuNames()
{
return { "File", "Edit", "View", "Build", "Window", "GUI Editor", "Tools", "Help" };
return { "File", "Edit", "View", "Build", "Window", "Document", "GUI Editor", "Tools", "Help" };
}
void ProjucerApplication::createMenu (PopupMenu& menu, const String& menuName)
{
if (menuName == "File") createFileMenu (menu);
else if (menuName == "Edit") createEditMenu (menu);
else if (menuName == "View") createViewMenu (menu);
else if (menuName == "Build") createBuildMenu (menu);
else if (menuName == "Window") createWindowMenu (menu);
else if (menuName == "Tools") createToolsMenu (menu);
else if (menuName == "Help") createHelpMenu (menu);
if (menuName == "File") createFileMenu (menu);
else if (menuName == "Edit") createEditMenu (menu);
else if (menuName == "View") createViewMenu (menu);
else if (menuName == "Build") createBuildMenu (menu);
else if (menuName == "Window") createWindowMenu (menu);
else if (menuName == "Document") createDocumentMenu (menu);
else if (menuName == "Tools") createToolsMenu (menu);
else if (menuName == "Help") createHelpMenu (menu);
else if (menuName == "GUI Editor") createGUIEditorMenu (menu);
else jassertfalse; // names have changed?
}
@ -363,9 +365,19 @@ void ProjucerApplication::createFileMenu (PopupMenu& menu)
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::open);
PopupMenu recentFiles;
settings->recentFiles.createPopupMenuItems (recentFiles, recentProjectsBaseID, true, true);
menu.addSubMenu ("Open Recent", recentFiles);
{
PopupMenu recentFiles;
settings->recentFiles.createPopupMenuItems (recentFiles, recentProjectsBaseID, true, true);
if (recentFiles.getNumItems() > 0)
{
recentFiles.addSeparator();
recentFiles.addCommandItem (commandManager, CommandIDs::clearRecentFiles);
}
menu.addSubMenu ("Open Recent", recentFiles);
}
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::closeDocument);
@ -485,12 +497,28 @@ void ProjucerApplication::createWindowMenu (PopupMenu& menu)
menu.addCommandItem (commandManager, CommandIDs::closeWindow);
menu.addSeparator();
int counter = 0;
for (auto* window : mainWindowList.windows)
{
if (window != nullptr)
{
if (auto* project = window->getProject())
menu.addItem (openWindowsBaseID + counter++, project->getProjectNameString());
}
}
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::closeAllWindows);
}
void ProjucerApplication::createDocumentMenu (PopupMenu& menu)
{
menu.addCommandItem (commandManager, CommandIDs::goToPreviousDoc);
menu.addCommandItem (commandManager, CommandIDs::goToNextDoc);
menu.addCommandItem (commandManager, CommandIDs::goToCounterpart);
menu.addSeparator();
const int numDocs = jmin (50, openDocumentManager.getNumOpenDocuments());
auto numDocs = jmin (50, openDocumentManager.getNumOpenDocuments());
for (int i = 0; i < numDocs; ++i)
{
@ -533,9 +561,14 @@ void ProjucerApplication::handleMainMenuCommand (int menuItemID)
// open a file from the "recent files" menu
openFile (settings->recentFiles.getFile (menuItemID - recentProjectsBaseID));
}
else if (menuItemID >= openWindowsBaseID && menuItemID < (openWindowsBaseID + 100))
{
if (auto* window = mainWindowList.windows.getUnchecked (menuItemID - openWindowsBaseID))
window->toFront (true);
}
else if (menuItemID >= activeDocumentsBaseID && menuItemID < (activeDocumentsBaseID + 200))
{
if (OpenDocumentManager::Document* doc = openDocumentManager.getOpenDocument (menuItemID - activeDocumentsBaseID))
if (auto* doc = openDocumentManager.getOpenDocument (menuItemID - activeDocumentsBaseID))
mainWindowList.openDocument (doc, true);
else
jassertfalse;
@ -566,7 +599,9 @@ void ProjucerApplication::getAllCommands (Array <CommandID>& commands)
const CommandID ids[] = { CommandIDs::newProject,
CommandIDs::open,
CommandIDs::closeAllWindows,
CommandIDs::closeAllDocuments,
CommandIDs::clearRecentFiles,
CommandIDs::saveAll,
CommandIDs::showGlobalPathsWindow,
CommandIDs::showUTF8Tool,
@ -602,11 +637,21 @@ void ProjucerApplication::getCommandInfo (CommandID commandID, ApplicationComman
CommandCategories::general, 0);
break;
case CommandIDs::closeAllWindows:
result.setInfo ("Close All Windows", "Closes all open windows", CommandCategories::general, 0);
result.setActive (mainWindowList.windows.size() > 0);
break;
case CommandIDs::closeAllDocuments:
result.setInfo ("Close All Documents", "Closes all open documents", CommandCategories::general, 0);
result.setActive (openDocumentManager.getNumOpenDocuments() > 0);
break;
case CommandIDs::clearRecentFiles:
result.setInfo ("Clear Recent Files", "Clears all recent files from the menu", CommandCategories::general, 0);
result.setActive (settings->recentFiles.getNumFiles() > 0);
break;
case CommandIDs::saveAll:
result.setInfo ("Save All", "Saves all open documents", CommandCategories::general, 0);
result.defaultKeypresses.add (KeyPress ('s', ModifierKeys::commandModifier | ModifierKeys::altModifier, 0));
@ -676,7 +721,9 @@ bool ProjucerApplication::perform (const InvocationInfo& info)
case CommandIDs::newProject: createNewProject(); break;
case CommandIDs::open: askUserToOpenFile(); break;
case CommandIDs::saveAll: openDocumentManager.saveAll(); break;
case CommandIDs::closeAllWindows: closeAllMainWindowsAndQuitIfNeeded(); break;
case CommandIDs::closeAllDocuments: closeAllDocuments (true); break;
case CommandIDs::clearRecentFiles: clearRecentFiles(); break;
case CommandIDs::showUTF8Tool: showUTF8ToolWindow(); break;
case CommandIDs::showSVGPathTool: showSVGPathDataToolWindow(); break;
case CommandIDs::showGlobalPathsWindow: showPathsWindow(); break;
@ -729,6 +776,25 @@ bool ProjucerApplication::closeAllMainWindows()
return server != nullptr || mainWindowList.askAllWindowsToClose();
}
void ProjucerApplication::closeAllMainWindowsAndQuitIfNeeded()
{
if (closeAllMainWindows())
{
#if ! JUCE_MAC
if (mainWindowList.windows.size() == 0)
systemRequestedQuit();
#endif
}
}
void ProjucerApplication::clearRecentFiles()
{
settings->recentFiles.clear();
settings->recentFiles.clearRecentFilesNatively();
settings->flush();
menuModel->menuItemsChanged();
}
//==============================================================================
void ProjucerApplication::showUTF8ToolWindow()
{

View file

@ -75,6 +75,7 @@ public:
void createBuildMenu (PopupMenu&);
void createColourSchemeItems (PopupMenu&);
void createWindowMenu (PopupMenu&);
void createDocumentMenu (PopupMenu&);
void createToolsMenu (PopupMenu&);
void createHelpMenu (PopupMenu&);
void createExtraAppleMenuItems (PopupMenu&);
@ -92,6 +93,8 @@ public:
bool openFile (const File&);
bool closeAllDocuments (bool askUserToSave);
bool closeAllMainWindows();
void closeAllMainWindowsAndQuitIfNeeded();
void clearRecentFiles();
PropertiesFile::Options getPropertyFileOptionsFor (const String& filename, bool isProjectSettings);

View file

@ -62,13 +62,15 @@ namespace CommandIDs
showExporterSettings = 0x300036,
closeWindow = 0x300040,
closeAllDocuments = 0x300041,
goToPreviousDoc = 0x300042,
goToNextDoc = 0x300043,
goToCounterpart = 0x300044,
deleteSelectedItem = 0x300045,
goToPreviousWindow = 0x300046,
goToNextWindow = 0x300047,
closeAllWindows = 0x300041,
closeAllDocuments = 0x300042,
goToPreviousDoc = 0x300043,
goToNextDoc = 0x300044,
goToCounterpart = 0x300045,
deleteSelectedItem = 0x300046,
goToPreviousWindow = 0x300047,
goToNextWindow = 0x300048,
clearRecentFiles = 0x300049,
showFindPanel = 0x300050,
findSelection = 0x300051,