Browse Source

Introjucer: reconfigured settings files so that per-project settings are stored separately from global properties.

tags/2021-05-28
jules 13 years ago
parent
commit
753ebf48e5
13 changed files with 134 additions and 97 deletions
  1. +1
    -1
      extras/Introjucer/Source/Application/jucer_AppearanceSettings.cpp
  2. +5
    -5
      extras/Introjucer/Source/Application/jucer_MainWindow.cpp
  3. +1
    -9
      extras/Introjucer/Source/Application/jucer_MainWindow.h
  4. +4
    -4
      extras/Introjucer/Source/Project/jucer_ConfigPage.cpp
  5. +2
    -2
      extras/Introjucer/Source/Project/jucer_Module.cpp
  6. +5
    -0
      extras/Introjucer/Source/Project/jucer_Project.cpp
  7. +3
    -0
      extras/Introjucer/Source/Project/jucer_Project.h
  8. +12
    -10
      extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp
  9. +39
    -0
      extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.cpp
  10. +6
    -31
      extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.h
  11. +2
    -2
      extras/Introjucer/Source/Utility/jucer_MiscUtilities.h
  12. +48
    -29
      extras/Introjucer/Source/Utility/jucer_StoredSettings.cpp
  13. +6
    -4
      extras/Introjucer/Source/Utility/jucer_StoredSettings.h

+ 1
- 1
extras/Introjucer/Source/Application/jucer_AppearanceSettings.cpp View File

@@ -79,7 +79,7 @@ AppearanceSettings::AppearanceSettings (bool updateAppWhenChanged)
File AppearanceSettings::getSchemesFolder()
{
File f (getAppProperties().getFile().getSiblingFile ("Schemes"));
File f (getGlobalProperties().getFile().getSiblingFile ("Schemes"));
f.createDirectory();
return f;
}


+ 5
- 5
extras/Introjucer/Source/Application/jucer_MainWindow.cpp View File

@@ -58,7 +58,7 @@ MainWindow::MainWindow()
{
commandManager->getKeyMappings()->resetToDefaultMappings();
ScopedPointer <XmlElement> keys (getAppProperties().getXmlValue ("keyMappings"));
ScopedPointer <XmlElement> keys (getGlobalProperties().getXmlValue ("keyMappings"));
if (keys != nullptr)
commandManager->getKeyMappings()->restoreFromXml (*keys);
@@ -82,7 +82,7 @@ MainWindow::~MainWindow()
removeKeyListener (commandManager->getKeyMappings());
// save the current size and position to our settings file..
getAppProperties().setValue ("lastMainWindowPos", getWindowStateAsString());
getGlobalProperties().setValue ("lastMainWindowPos", getWindowStateAsString());
clearContentComponent();
currentProject = nullptr;
@@ -125,7 +125,7 @@ bool MainWindow::closeProject (Project* project)
if (project == nullptr)
return true;
getAppProperties().setValue (getProjectWindowPosName(), getWindowStateAsString());
project->getStoredProperties().setValue (getProjectWindowPosName(), getWindowStateAsString());
ProjectContentComponent* const pcc = getProjectContentComponent();
@@ -169,10 +169,10 @@ void MainWindow::restoreWindowPosition()
String windowState;
if (currentProject != nullptr)
windowState = getAppProperties().getValue (getProjectWindowPosName());
windowState = currentProject->getStoredProperties().getValue (getProjectWindowPosName());
if (windowState.isEmpty())
windowState = getAppProperties().getValue ("lastMainWindowPos");
windowState = getGlobalProperties().getValue ("lastMainWindowPos");
restoreWindowStateFromString (windowState);
}


+ 1
- 9
extras/Introjucer/Source/Application/jucer_MainWindow.h View File

@@ -77,15 +77,7 @@ public:
private:
ScopedPointer <Project> currentProject;
String getProjectWindowPosName() const
{
jassert (currentProject != nullptr);
if (currentProject == nullptr)
return String::empty;
return "projectWindowPos_" + currentProject->getProjectUID();
}
static const char* getProjectWindowPosName() { return "projectWindowPos"; }
void createProjectContentCompIfNeeded();
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow);


+ 4
- 4
extras/Introjucer/Source/Project/jucer_ConfigPage.cpp View File

@@ -70,7 +70,7 @@ namespace ProjectSettingsTreeClasses
bool isMissing() { return false; }
bool canBeSelected() const { return true; }
bool mightContainSubItems() { return false; }
String getUniqueName() const { return config->project.getProjectUID() + "_config_" + config->getName(); }
String getUniqueName() const { return "config_" + config->getName(); }
String getRenamingName() const { return getDisplayName(); }
String getDisplayName() const { return config->getName(); }
void setName (const String&) {}
@@ -170,7 +170,7 @@ namespace ProjectSettingsTreeClasses
bool canBeSelected() const { return true; }
bool mightContainSubItems() { return exporter->getNumConfigurations() > 0; }
String getUniqueName() const { return project.getProjectUID() + "_exporter_" + String (exporterIndex); }
String getUniqueName() const { return "exporter_" + String (exporterIndex); }
String getRenamingName() const { return getDisplayName(); }
String getDisplayName() const { return exporter->getName(); }
void setName (const String&) {}
@@ -292,7 +292,7 @@ namespace ProjectSettingsTreeClasses
bool canBeSelected() const { return true; }
bool mightContainSubItems() { return false; }
String getUniqueName() const { return project.getProjectUID() + "_modules"; }
String getUniqueName() const { return "modules"; }
String getRenamingName() const { return getDisplayName(); }
String getDisplayName() const { return "Modules"; }
void setName (const String&) {}
@@ -353,7 +353,7 @@ namespace ProjectSettingsTreeClasses
void showDocument() { showSettingsPage (new SettingsComp (project)); }
bool canBeSelected() const { return true; }
bool mightContainSubItems() { return project.getNumExporters() > 0; }
String getUniqueName() const { return project.getProjectUID() + "_config_root"; }
String getUniqueName() const { return "config_root"; }
void addSubItems()
{


+ 2
- 2
extras/Introjucer/Source/Project/jucer_Module.cpp View File

@@ -146,7 +146,7 @@ File ModuleList::getLocalModulesFolder (Project* project)
{
File defaultJuceFolder (getDefaultModulesFolder (project));
File f (getAppProperties().getValue ("lastJuceFolder", defaultJuceFolder.getFullPathName()));
File f (getGlobalProperties().getValue ("lastJuceFolder", defaultJuceFolder.getFullPathName()));
f = getModulesFolderForJuceOrModulesFolder (f);
if ((! ModuleList::isModulesFolder (f)) && ModuleList::isModulesFolder (defaultJuceFolder))
@@ -163,7 +163,7 @@ File ModuleList::getModuleFolder (const String& uid) const
void ModuleList::setLocalModulesFolder (const File& file)
{
//jassert (FileHelpers::isJuceFolder (file));
getAppProperties().setValue ("lastJuceFolder", file.getFullPathName());
getGlobalProperties().setValue ("lastJuceFolder", file.getFullPathName());
}
struct ModuleSorter


+ 5
- 0
extras/Introjucer/Source/Project/jucer_Project.cpp View File

@@ -966,3 +966,8 @@ bool Project::ExporterIterator::next()
return true;
}
PropertiesFile& Project::getStoredProperties() const
{
return getAppSettings().getProjectProperties (getProjectUID());
}

+ 3
- 0
extras/Introjucer/Source/Project/jucer_Project.h View File

@@ -253,6 +253,9 @@ public:
//==============================================================================
String getFileTemplate (const String& templateName);
//==============================================================================
PropertiesFile& getStoredProperties() const;
//==============================================================================
void valueTreePropertyChanged (ValueTree& tree, const Identifier& property);
void valueTreeChildAdded (ValueTree& parentTree, ValueTree& childWhichHasBeenAdded);


+ 12
- 10
extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp View File

@@ -37,7 +37,7 @@ class FileTreeTab : public TreePanelBase
{
public:
FileTreeTab (Project& project)
: TreePanelBase ("treeViewState_" + project.getProjectUID())
: TreePanelBase (&project, "fileTreeState")
{
tree.setMultiSelectEnabled (true);
setRoot (new GroupTreeViewItem (project.getMainGroup()));
@@ -49,7 +49,7 @@ class ConfigTreeTab : public TreePanelBase
{
public:
ConfigTreeTab (Project& project)
: TreePanelBase ("settingsTreeViewState_" + project.getProjectUID())
: TreePanelBase (&project, "settingsTreeState")
{
tree.setMultiSelectEnabled (false);
setRoot (createProjectConfigTreeViewRoot (project));
@@ -189,8 +189,6 @@ void ProjectContentComponent::setProject (Project* newProject)
{
if (project != newProject)
{
PropertiesFile& settings = getAppProperties();
if (project != nullptr)
project->removeChangeListener (this);
@@ -199,10 +197,12 @@ void ProjectContentComponent::setProject (Project* newProject)
if (project != nullptr && treeViewTabs.isShowing())
{
PropertiesFile& settings = project->getStoredProperties();
if (treeViewTabs.getWidth() > 0)
settings.setValue ("projectTreeviewWidth_" + project->getProjectUID(), treeViewTabs.getWidth());
settings.setValue ("projectPanelWidth", treeViewTabs.getWidth());
settings.setValue ("lastTab_" + project->getProjectUID(), treeViewTabs.getCurrentTabName());
settings.setValue ("lastTab", treeViewTabs.getCurrentTabName());
}
treeViewTabs.clearTabs();
@@ -214,7 +214,9 @@ void ProjectContentComponent::setProject (Project* newProject)
createProjectTabs();
const String lastTabName (settings.getValue ("lastTab_" + project->getProjectUID()));
PropertiesFile& settings = project->getStoredProperties();
const String lastTabName (settings.getValue ("lastTab"));
int lastTabIndex = treeViewTabs.getTabNames().indexOf (lastTabName);
if (lastTabIndex < 0 || lastTabIndex > treeViewTabs.getNumTabs())
@@ -222,7 +224,7 @@ void ProjectContentComponent::setProject (Project* newProject)
treeViewTabs.setCurrentTabIndex (lastTabIndex);
int lastTreeWidth = settings.getValue ("projectTreeviewWidth_" + project->getProjectUID()).getIntValue();
int lastTreeWidth = settings.getValue ("projectPanelWidth").getIntValue();
if (lastTreeWidth < 150)
lastTreeWidth = 240;
@@ -283,7 +285,7 @@ void ProjectContentComponent::saveOpenDocumentList()
ScopedPointer<XmlElement> xml (recentDocumentList.createXML());
if (xml != nullptr)
getAppProperties().setValue ("lastDocs_" + project->getProjectUID(), xml);
project->getStoredProperties().setValue ("lastDocs", xml);
}
}
@@ -291,7 +293,7 @@ void ProjectContentComponent::reloadLastOpenDocuments()
{
if (project != nullptr)
{
ScopedPointer<XmlElement> xml (getAppProperties().getXmlValue ("lastDocs_" + project->getProjectUID()));
ScopedPointer<XmlElement> xml (project->getStoredProperties().getXmlValue ("lastDocs"));
if (xml != nullptr)
{


+ 39
- 0
extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.cpp View File

@@ -27,6 +27,45 @@
#include "../Project/jucer_ProjectContentComponent.h"
//==============================================================================
void TreePanelBase::setRoot (JucerTreeViewBase* root)
{
rootItem = root;
tree.setRootItem (root);
tree.getRootItem()->setOpen (true);
if (project != nullptr)
{
const ScopedPointer<XmlElement> treeOpenness (project->getStoredProperties()
.getXmlValue (opennessStateKey));
if (treeOpenness != nullptr)
{
tree.restoreOpennessState (*treeOpenness, true);
for (int i = tree.getNumSelectedItems(); --i >= 0;)
{
JucerTreeViewBase* item = dynamic_cast<JucerTreeViewBase*> (tree.getSelectedItem (i));
if (item != nullptr)
item->cancelDelayedSelectionTimer();
}
}
}
}
void TreePanelBase::saveOpenness()
{
if (project != nullptr)
{
const ScopedPointer<XmlElement> opennessState (tree.getOpennessState (true));
if (opennessState != nullptr)
project->getStoredProperties().setValue (opennessStateKey, opennessState);
else
project->getStoredProperties().removeValue (opennessStateKey);
}
}
//==============================================================================
JucerTreeViewBase::JucerTreeViewBase()
: textX (0)


+ 6
- 31
extras/Introjucer/Source/Utility/jucer_JucerTreeViewBase.h View File

@@ -28,7 +28,7 @@
#include "../jucer_Headers.h"
class ProjectContentComponent;
class Project;
//==============================================================================
class JucerTreeViewBase : public TreeViewItem
@@ -109,8 +109,8 @@ private:
class TreePanelBase : public Component
{
public:
TreePanelBase (const String& opennessStateKey_)
: opennessStateKey (opennessStateKey_)
TreePanelBase (const Project* p, const String& treeviewID)
: project (p), opennessStateKey (treeviewID)
{
addAndMakeVisible (&tree);
tree.setRootItemVisible (true);
@@ -125,34 +125,8 @@ public:
tree.setRootItem (nullptr);
}
void setRoot (JucerTreeViewBase* root)
{
rootItem = root;
tree.setRootItem (root);
tree.getRootItem()->setOpen (true);
const ScopedPointer<XmlElement> treeOpenness (getAppProperties().getXmlValue (opennessStateKey));
if (treeOpenness != nullptr)
{
tree.restoreOpennessState (*treeOpenness, true);
for (int i = tree.getNumSelectedItems(); --i >= 0;)
{
JucerTreeViewBase* item = dynamic_cast<JucerTreeViewBase*> (tree.getSelectedItem (i));
if (item != nullptr)
item->cancelDelayedSelectionTimer();
}
}
}
void saveOpenness()
{
const ScopedPointer<XmlElement> opennessState (tree.getOpennessState (true));
if (opennessState != nullptr)
getAppProperties().setValue (opennessStateKey, opennessState);
}
void setRoot (JucerTreeViewBase* root);
void saveOpenness();
void deleteSelectedItems()
{
@@ -194,6 +168,7 @@ public:
return Rectangle<int> (0, 2, getWidth() - 2, getHeight() - 2);
}
const Project* project;
TreeView tree;
ScopedPointer<JucerTreeViewBase> rootItem;


+ 2
- 2
extras/Introjucer/Source/Utility/jucer_MiscUtilities.h View File

@@ -189,7 +189,7 @@ public:
setResizeLimits (minW, minH, maxW, maxH);
setContentOwned (content, false);
const String windowState (getAppProperties().getValue (windowPosProperty));
const String windowState (getGlobalProperties().getValue (windowPosProperty));
if (windowState.isNotEmpty())
restoreWindowStateFromString (windowState);
@@ -202,7 +202,7 @@ public:
~FloatingToolWindow()
{
getAppProperties().setValue (windowPosProperty, getWindowStateAsString());
getGlobalProperties().setValue (windowPosProperty, getWindowStateAsString());
}
void closeButtonPressed()


+ 48
- 29
extras/Introjucer/Source/Utility/jucer_StoredSettings.cpp View File

@@ -33,9 +33,9 @@ StoredSettings& getAppSettings()
return *JucerApplication::getApp().settings;
}
PropertiesFile& getAppProperties()
PropertiesFile& getGlobalProperties()
{
return getAppSettings().getProps();
return getAppSettings().getGlobalProperties();
}
//==============================================================================
@@ -54,16 +54,48 @@ void StoredSettings::initialise()
reload();
}
PropertiesFile& StoredSettings::getProps()
PropertiesFile& StoredSettings::getGlobalProperties()
{
jassert (props != nullptr);
return *props;
return *propertyFiles.getUnchecked (0);
}
static PropertiesFile* createPropsFile (const String& filename)
{
PropertiesFile::Options options;
options.applicationName = filename;
options.filenameSuffix = "settings";
options.osxLibrarySubFolder = "Application Support";
#if JUCE_LINUX
options.folderName = ".introjucer";
#else
options.folderName = "Introjucer";
#endif
return new PropertiesFile (options);
}
PropertiesFile& StoredSettings::getProjectProperties (const String& projectUID)
{
const String filename ("Introjucer_Project_" + projectUID);
for (int i = propertyFiles.size(); --i >= 0;)
{
PropertiesFile* const props = propertyFiles.getUnchecked(i);
if (props->getFile().getFileNameWithoutExtension() == filename)
return *props;
}
PropertiesFile* p = createPropsFile (filename);
propertyFiles.add (p);
return *p;
}
void StoredSettings::flush()
{
if (props != nullptr)
for (int i = propertyFiles.size(); --i >= 0;)
{
PropertiesFile* const props = propertyFiles.getUnchecked(i);
{
const ScopedPointer<XmlElement> xml (appearance.settings.createXml());
props->setValue ("editorColours", xml);
@@ -87,28 +119,14 @@ void StoredSettings::flush()
void StoredSettings::reload()
{
props = nullptr;
{
// These settings are used in defining the properties file's location.
PropertiesFile::Options options;
options.applicationName = "Introjucer";
options.filenameSuffix = "settings";
options.osxLibrarySubFolder = "Application Support";
#if JUCE_LINUX
options.folderName = ".introjucer";
#else
options.folderName = "Introjucer";
#endif
props = new PropertiesFile (options);
}
propertyFiles.clear();
propertyFiles.add (createPropsFile ("Introjucer"));
// recent files...
recentFiles.restoreFromString (props->getValue ("recentFiles"));
recentFiles.restoreFromString (getGlobalProperties().getValue ("recentFiles"));
recentFiles.removeNonExistentFiles();
ScopedPointer<XmlElement> xml (props->getXmlValue ("editorColours"));
ScopedPointer<XmlElement> xml (getGlobalProperties().getXmlValue ("editorColours"));
if (xml == nullptr)
xml = XmlDocument::parse (BinaryData::colourscheme_dark_xml);
@@ -118,10 +136,10 @@ void StoredSettings::reload()
loadSwatchColours();
}
Array<File> StoredSettings::getLastProjects() const
Array<File> StoredSettings::getLastProjects()
{
StringArray s;
s.addTokens (props->getValue ("lastProjects"), "|", "");
s.addTokens (getGlobalProperties().getValue ("lastProjects"), "|", "");
Array<File> f;
for (int i = 0; i < s.size(); ++i)
@@ -136,7 +154,7 @@ void StoredSettings::setLastProjects (const Array<File>& files)
for (int i = 0; i < files.size(); ++i)
s.add (files.getReference(i).getFullPathName());
props->setValue ("lastProjects", s.joinIntoString ("|"));
getGlobalProperties().setValue ("lastProjects", s.joinIntoString ("|"));
}
//==============================================================================
@@ -155,10 +173,11 @@ void StoredSettings::loadSwatchColours()
#undef COL
const int numSwatchColours = 24;
PropertiesFile& props = getGlobalProperties();
for (int i = 0; i < numSwatchColours; ++i)
swatchColours.add (Colour::fromString (props->getValue ("swatchColour" + String (i),
colours [2 + i].toString())));
swatchColours.add (Colour::fromString (props.getValue ("swatchColour" + String (i),
colours [2 + i].toString())));
}
int StoredSettings::ColourSelectorWithSwatches::getNumSwatches() const


+ 6
- 4
extras/Introjucer/Source/Utility/jucer_StoredSettings.h View File

@@ -38,14 +38,16 @@ public:
void initialise();
PropertiesFile& getProps();
PropertiesFile& getGlobalProperties();
PropertiesFile& getProjectProperties (const String& projectUID);
void flush();
void reload();
//==============================================================================
RecentlyOpenedFilesList recentFiles;
Array<File> getLastProjects() const;
Array<File> getLastProjects();
void setLastProjects (const Array<File>& files);
//==============================================================================
@@ -67,7 +69,7 @@ public:
StringArray monospacedFontNames;
private:
ScopedPointer<PropertiesFile> props;
OwnedArray<PropertiesFile> propertyFiles;
void loadSwatchColours();
@@ -75,7 +77,7 @@ private:
};
StoredSettings& getAppSettings();
PropertiesFile& getAppProperties();
PropertiesFile& getGlobalProperties();
#endif // __JUCER_STOREDSETTINGS_JUCEHEADER__

Loading…
Cancel
Save