- clean working copy for leaving SVN

This commit is contained in:
2022-06-28 19:04:46 +02:00
parent 62a2d47cb3
commit 762b8f0e7d
1966 changed files with 699872 additions and 126 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,372 @@
# Automatically generated makefile, created by the Introjucer
# Don't edit this file! Your changes will be overwritten when you re-save the Introjucer project!
# (this disables dependency generation if multiple architectures are set)
DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)
ifndef CONFIG
CONFIG=Debug
endif
ifeq ($(CONFIG),Debug)
BINDIR := build
LIBDIR := build
OBJDIR := build/intermediate/Debug
OUTDIR := build
ifeq ($(TARGET_ARCH),)
TARGET_ARCH := -march=native
endif
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=3.1.0" -D "JUCE_APP_VERSION_HEX=0x30100" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -std=gnu++0x
CXXFLAGS += $(CFLAGS)
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt
LDDEPS :=
RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=3.1.0" -D "JUCE_APP_VERSION_HEX=0x30100" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules
TARGET := Introjucer
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)
CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)
endif
ifeq ($(CONFIG),Release)
BINDIR := build
LIBDIR := build
OBJDIR := build/intermediate/Release
OUTDIR := build
ifeq ($(TARGET_ARCH),)
TARGET_ARCH := -march=native
endif
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=3.1.0" -D "JUCE_APP_VERSION_HEX=0x30100" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 -std=gnu++0x
CXXFLAGS += $(CFLAGS)
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt
LDDEPS :=
RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=3.1.0" -D "JUCE_APP_VERSION_HEX=0x30100" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules
TARGET := Introjucer
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)
CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)
endif
OBJECTS := \
$(OBJDIR)/jucer_AppearanceSettings_788d9889.o \
$(OBJDIR)/jucer_CommandLine_f35de107.o \
$(OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o \
$(OBJDIR)/jucer_Main_f8488f5b.o \
$(OBJDIR)/jucer_MainWindow_1e163aeb.o \
$(OBJDIR)/jucer_OpenDocumentManager_4c72d210.o \
$(OBJDIR)/jucer_SourceCodeEditor_461f5487.o \
$(OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o \
$(OBJDIR)/jucer_ButtonDocument_56c341cc.o \
$(OBJDIR)/jucer_ComponentDocument_92868083.o \
$(OBJDIR)/jucer_ColouredElement_70cbc839.o \
$(OBJDIR)/jucer_PaintElement_653460.o \
$(OBJDIR)/jucer_PaintElementPath_908894a5.o \
$(OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o \
$(OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o \
$(OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o \
$(OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o \
$(OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o \
$(OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o \
$(OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o \
$(OBJDIR)/jucer_TestComponent_db757dc4.o \
$(OBJDIR)/jucer_BinaryResources_e0f99b46.o \
$(OBJDIR)/jucer_ComponentLayout_6ea00129.o \
$(OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o \
$(OBJDIR)/jucer_JucerDocument_ff8afcc2.o \
$(OBJDIR)/jucer_ObjectTypes_4406f01c.o \
$(OBJDIR)/jucer_PaintRoutine_e1e891ee.o \
$(OBJDIR)/jucer_ProjectExporter_eefe2e5b.o \
$(OBJDIR)/jucer_ResourceFile_6af120d3.o \
$(OBJDIR)/jucer_Module_3f7666a5.o \
$(OBJDIR)/jucer_Project_c131864a.o \
$(OBJDIR)/jucer_ProjectContentComponent_60de0eee.o \
$(OBJDIR)/jucer_ProjectType_1bc27a24.o \
$(OBJDIR)/jucer_CodeHelpers_c317179c.o \
$(OBJDIR)/jucer_FileHelpers_f98ed0ad.o \
$(OBJDIR)/jucer_Icons_9db2f51e.o \
$(OBJDIR)/jucer_JucerTreeViewBase_d043309d.o \
$(OBJDIR)/jucer_MiscUtilities_25b68c82.o \
$(OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o \
$(OBJDIR)/jucer_StoredSettings_26078d2c.o \
$(OBJDIR)/jucer_NewFileWizard_fac97f47.o \
$(OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o \
$(OBJDIR)/BinaryData_ce4232d4.o \
$(OBJDIR)/juce_core_1ee54a40.o \
$(OBJDIR)/juce_cryptography_3b1f489a.o \
$(OBJDIR)/juce_data_structures_84790dfc.o \
$(OBJDIR)/juce_events_584896b4.o \
$(OBJDIR)/juce_graphics_f9afc18.o \
$(OBJDIR)/juce_gui_basics_90929794.o \
$(OBJDIR)/juce_gui_extra_b81d9e1c.o \
.PHONY: clean
$(OUTDIR)/$(TARGET): $(OBJECTS) $(LDDEPS) $(RESOURCES)
@echo Linking The Introjucer
-@mkdir -p $(BINDIR)
-@mkdir -p $(LIBDIR)
-@mkdir -p $(OUTDIR)
@$(BLDCMD)
clean:
@echo Cleaning The Introjucer
@$(CLEANCMD)
strip:
@echo Stripping The Introjucer
-@strip --strip-unneeded $(OUTDIR)/$(TARGET)
$(OBJDIR)/jucer_AppearanceSettings_788d9889.o: ../../Source/Application/jucer_AppearanceSettings.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_AppearanceSettings.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_CommandLine_f35de107.o: ../../Source/Application/jucer_CommandLine.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_CommandLine.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o: ../../Source/Application/jucer_DocumentEditorComponent.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_DocumentEditorComponent.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_Main_f8488f5b.o: ../../Source/Application/jucer_Main.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_Main.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_MainWindow_1e163aeb.o: ../../Source/Application/jucer_MainWindow.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_MainWindow.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_OpenDocumentManager_4c72d210.o: ../../Source/Application/jucer_OpenDocumentManager.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_OpenDocumentManager.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_SourceCodeEditor_461f5487.o: ../../Source/Code\ Editor/jucer_SourceCodeEditor.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_SourceCodeEditor.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o: ../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ComponentTypeHandler.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ButtonDocument_56c341cc.o: ../../Source/ComponentEditor/documents/jucer_ButtonDocument.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ButtonDocument.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ComponentDocument_92868083.o: ../../Source/ComponentEditor/documents/jucer_ComponentDocument.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ComponentDocument.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ColouredElement_70cbc839.o: ../../Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ColouredElement.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_PaintElement_653460.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElement.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_PaintElement.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_PaintElementPath_908894a5.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_PaintElementPath.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o: ../../Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ComponentLayoutEditor.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o: ../../Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ComponentOverlayComponent.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o: ../../Source/ComponentEditor/ui/jucer_EditingPanelBase.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_EditingPanelBase.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o: ../../Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_JucerDocumentEditor.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_PaintRoutineEditor.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_PaintRoutinePanel.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o: ../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ResourceEditorPanel.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_TestComponent_db757dc4.o: ../../Source/ComponentEditor/ui/jucer_TestComponent.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_TestComponent.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_BinaryResources_e0f99b46.o: ../../Source/ComponentEditor/jucer_BinaryResources.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_BinaryResources.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ComponentLayout_6ea00129.o: ../../Source/ComponentEditor/jucer_ComponentLayout.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ComponentLayout.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o: ../../Source/ComponentEditor/jucer_GeneratedCode.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_GeneratedCode.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_JucerDocument_ff8afcc2.o: ../../Source/ComponentEditor/jucer_JucerDocument.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_JucerDocument.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ObjectTypes_4406f01c.o: ../../Source/ComponentEditor/jucer_ObjectTypes.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ObjectTypes.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_PaintRoutine_e1e891ee.o: ../../Source/ComponentEditor/jucer_PaintRoutine.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_PaintRoutine.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ProjectExporter_eefe2e5b.o: ../../Source/Project\ Saving/jucer_ProjectExporter.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ProjectExporter.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ResourceFile_6af120d3.o: ../../Source/Project\ Saving/jucer_ResourceFile.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ResourceFile.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_Module_3f7666a5.o: ../../Source/Project/jucer_Module.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_Module.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_Project_c131864a.o: ../../Source/Project/jucer_Project.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_Project.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ProjectContentComponent_60de0eee.o: ../../Source/Project/jucer_ProjectContentComponent.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ProjectContentComponent.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ProjectType_1bc27a24.o: ../../Source/Project/jucer_ProjectType.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_ProjectType.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_CodeHelpers_c317179c.o: ../../Source/Utility/jucer_CodeHelpers.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_CodeHelpers.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_FileHelpers_f98ed0ad.o: ../../Source/Utility/jucer_FileHelpers.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_FileHelpers.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_Icons_9db2f51e.o: ../../Source/Utility/jucer_Icons.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_Icons.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_JucerTreeViewBase_d043309d.o: ../../Source/Utility/jucer_JucerTreeViewBase.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_JucerTreeViewBase.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_MiscUtilities_25b68c82.o: ../../Source/Utility/jucer_MiscUtilities.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_MiscUtilities.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o: ../../Source/Utility/jucer_SlidingPanelComponent.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_SlidingPanelComponent.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_StoredSettings_26078d2c.o: ../../Source/Utility/jucer_StoredSettings.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_StoredSettings.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_NewFileWizard_fac97f47.o: ../../Source/Wizards/jucer_NewFileWizard.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_NewFileWizard.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o: ../../Source/Wizards/jucer_NewProjectWizardClasses.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling jucer_NewProjectWizardClasses.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling BinaryData.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_core_1ee54a40.o: ../../../../modules/juce_core/juce_core.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_core.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_cryptography_3b1f489a.o: ../../../../modules/juce_cryptography/juce_cryptography.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_cryptography.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_data_structures_84790dfc.o: ../../../../modules/juce_data_structures/juce_data_structures.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_data_structures.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_events_584896b4.o: ../../../../modules/juce_events/juce_events.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_events.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_graphics_f9afc18.o: ../../../../modules/juce_graphics/juce_graphics.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_graphics.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_gui_basics_90929794.o: ../../../../modules/juce_gui_basics/juce_gui_basics.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_gui_basics.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/juce_gui_extra_b81d9e1c.o: ../../../../modules/juce_gui_extra/juce_gui_extra.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling juce_gui_extra.cpp"
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
-include $(OBJECTS:%.o=%.d)
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string>Icon.icns</string>
<key>CFBundleIdentifier</key>
<string>com.rawmaterialsoftware.introjucer</string>
<key>CFBundleName</key>
<string>The Introjucer</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>3.1.0</string>
<key>CFBundleVersion</key>
<string>3.1.0</string>
<key>NSHumanReadableCopyright</key>
<string>Raw Material Software Ltd.</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>jucer</string>
</array>
<key>CFBundleTypeName</key>
<string>jucer</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>NSPersistentStoreTypeKey</key>
<string>XML</string>
</dict>
</array>
</dict>
</plist>
@@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual C++ Express 2005
Project("{62DDBD62-D03F-FBCA-D85C-731B2D53653D}") = "The Introjucer", "The Introjucer.vcproj", "{26ABE2A4-1F2F-8375-088D-D692A4408B5A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.ActiveCfg = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.Build.0 = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.ActiveCfg = Release|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,33 @@
#ifdef JUCE_USER_DEFINED_RC_FILE
#include JUCE_USER_DEFINED_RC_FILE
#else
#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,1,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "Raw Material Software Ltd.\0"
VALUE "FileDescription", "The Introjucer\0"
VALUE "FileVersion", "3.1.0\0"
VALUE "ProductName", "The Introjucer\0"
VALUE "ProductVersion", "3.1.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 65001
END
END
#endif
IDI_ICON1 ICON DISCARDABLE "icon.ico"
IDI_ICON2 ICON DISCARDABLE "icon.ico"
@@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual C++ Express 2008
Project("{62DDBD62-D03F-FBCA-D85C-731B2D53653D}") = "The Introjucer", "The Introjucer.vcproj", "{26ABE2A4-1F2F-8375-088D-D692A4408B5A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.ActiveCfg = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.Build.0 = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.ActiveCfg = Release|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,33 @@
#ifdef JUCE_USER_DEFINED_RC_FILE
#include JUCE_USER_DEFINED_RC_FILE
#else
#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,1,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "Raw Material Software Ltd.\0"
VALUE "FileDescription", "The Introjucer\0"
VALUE "FileVersion", "3.1.0\0"
VALUE "ProductName", "The Introjucer\0"
VALUE "ProductVersion", "3.1.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 65001
END
END
#endif
IDI_ICON1 ICON DISCARDABLE "icon.ico"
IDI_ICON2 ICON DISCARDABLE "icon.ico"
@@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{62DDBD62-D03F-FBCA-D85C-731B2D53653D}") = "The Introjucer", "The Introjucer.vcxproj", "{26ABE2A4-1F2F-8375-088D-D692A4408B5A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.ActiveCfg = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.Build.0 = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.ActiveCfg = Release|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,33 @@
#ifdef JUCE_USER_DEFINED_RC_FILE
#include JUCE_USER_DEFINED_RC_FILE
#else
#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,1,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "Raw Material Software Ltd.\0"
VALUE "FileDescription", "The Introjucer\0"
VALUE "FileVersion", "3.1.0\0"
VALUE "ProductName", "The Introjucer\0"
VALUE "ProductVersion", "3.1.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 65001
END
END
#endif
IDI_ICON1 ICON DISCARDABLE "icon.ico"
IDI_ICON2 ICON DISCARDABLE "icon.ico"
@@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2012
Project("{62DDBD62-D03F-FBCA-D85C-731B2D53653D}") = "The Introjucer", "The Introjucer.vcxproj", "{26ABE2A4-1F2F-8375-088D-D692A4408B5A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.ActiveCfg = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.Build.0 = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.ActiveCfg = Release|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,33 @@
#ifdef JUCE_USER_DEFINED_RC_FILE
#include JUCE_USER_DEFINED_RC_FILE
#else
#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,1,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "Raw Material Software Ltd.\0"
VALUE "FileDescription", "The Introjucer\0"
VALUE "FileVersion", "3.1.0\0"
VALUE "ProductName", "The Introjucer\0"
VALUE "ProductVersion", "3.1.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 65001
END
END
#endif
IDI_ICON1 ICON DISCARDABLE "icon.ico"
IDI_ICON2 ICON DISCARDABLE "icon.ico"
@@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2013
Project("{62DDBD62-D03F-FBCA-D85C-731B2D53653D}") = "The Introjucer", "The Introjucer.vcxproj", "{26ABE2A4-1F2F-8375-088D-D692A4408B5A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.ActiveCfg = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Debug|Win32.Build.0 = Debug|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.ActiveCfg = Release|Win32
{26ABE2A4-1F2F-8375-088D-D692A4408B5A}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,33 @@
#ifdef JUCE_USER_DEFINED_RC_FILE
#include JUCE_USER_DEFINED_RC_FILE
#else
#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,1,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "Raw Material Software Ltd.\0"
VALUE "FileDescription", "The Introjucer\0"
VALUE "FileVersion", "3.1.0\0"
VALUE "ProductName", "The Introjucer\0"
VALUE "ProductVersion", "3.1.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 65001
END
END
#endif
IDI_ICON1 ICON DISCARDABLE "icon.ico"
IDI_ICON2 ICON DISCARDABLE "icon.ico"
@@ -0,0 +1,616 @@
<?xml version="1.0" encoding="UTF-8"?>
<JUCERPROJECT id="M70qfTRRk" name="The Introjucer" projectType="guiapp" juceLinkage="amalg_multi"
juceFolder="../../juce" jucerVersion="3.1.0" version="3.1.0"
buildVST="1" buildRTAS="0" buildAU="1" vstFolderMac="~/SDKs/vstsdk2.4"
vstFolderPC="c:\SDKs\vstsdk2.4" rtasFolderMac="~/SDKs/PT_80_SDK"
rtasFolderPC="c:\SDKs\PT_80_SDK" pluginName="The Introjucer"
pluginDesc="The Introjucer" pluginManufacturer="yourcompany"
pluginManufacturerCode="abcd" pluginCode="Abcd" pluginChannelConfigs="{ {1, 1}, {2, 2} }"
pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0"
pluginSilenceInIsSilenceOut="0" pluginTailLength="0" pluginEditorRequiresKeys="0"
pluginAUExportPrefix="TheIntrojucerAU" pluginAUViewClass="TheIntrojucerAU_V1"
pluginRTASCategory="" bundleIdentifier="com.rawmaterialsoftware.introjucer"
companyName="Raw Material Software Ltd." includeBinaryInAppConfig="1">
<EXPORTFORMATS>
<XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"
documentExtensions=".jucer" objCExtraSuffix="zNNCr" bigIcon="rVgowdy"
extraCompilerFlags="-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="Introjucer"
osxSDK="default" osxCompatibility="default" osxArchitecture="Native"/>
<CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="Introjucer"
osxSDK="default" osxCompatibility="10.5 SDK" osxArchitecture="Native"/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_cryptography" path="../../modules"/>
<MODULEPATH id="juce_core" path="../../modules"/>
</MODULEPATHS>
</XCODE_MAC>
<VS2005 targetFolder="Builds/VisualStudio2005" vstFolder="c:\SDKs\vstsdk2.4"
rtasFolder="c:\SDKs\PT_80_SDK" libraryType="1" bigIcon="rVgowdy">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="Introjucer"
winWarningLevel="4" generateManifest="1"/>
<CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="Introjucer"
winWarningLevel="4" generateManifest="1"/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_cryptography" path="../../modules"/>
<MODULEPATH id="juce_core" path="../../modules"/>
</MODULEPATHS>
</VS2005>
<VS2008 targetFolder="Builds/VisualStudio2008" vstFolder="c:\SDKs\vstsdk2.4"
rtasFolder="c:\SDKs\PT_80_SDK" libraryType="1" bigIcon="rVgowdy">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="Introjucer"
winWarningLevel="4" generateManifest="1"/>
<CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="Introjucer"
winWarningLevel="4" generateManifest="1"/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_cryptography" path="../../modules"/>
<MODULEPATH id="juce_core" path="../../modules"/>
</MODULEPATHS>
</VS2008>
<LINUX_MAKE targetFolder="Builds/Linux" vstFolder="~/SDKs/vstsdk2.4" bigIcon="rVgowdy"
extraCompilerFlags="-std=gnu++0x">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="Introjucer"
libraryPath="/usr/X11R6/lib/"/>
<CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="Introjucer"
libraryPath="/usr/X11R6/lib/"/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_cryptography" path="../../modules"/>
<MODULEPATH id="juce_core" path="../../modules"/>
</MODULEPATHS>
</LINUX_MAKE>
<VS2010 targetFolder="Builds/VisualStudio2010" vstFolder="c:\SDKs\vstsdk2.4"
rtasFolder="c:\SDKs\PT_80_SDK" libraryType="1" bigIcon="rVgowdy">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="Introjucer"
winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"/>
<CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="Introjucer"
winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_cryptography" path="../../modules"/>
<MODULEPATH id="juce_core" path="../../modules"/>
</MODULEPATHS>
</VS2010>
<VS2012 targetFolder="Builds/VisualStudio2012" bigIcon="rVgowdy">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
isDebug="1" optimisation="1" targetName="The Introjucer"/>
<CONFIGURATION name="Release" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
isDebug="0" optimisation="2" targetName="The Introjucer"/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_cryptography" path="../../modules"/>
<MODULEPATH id="juce_core" path="../../modules"/>
</MODULEPATHS>
</VS2012>
<VS2013 targetFolder="Builds/VisualStudio2013" bigIcon="rVgowdy">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
isDebug="1" optimisation="1" targetName="The Introjucer"/>
<CONFIGURATION name="Release" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
isDebug="0" optimisation="2" targetName="The Introjucer"/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_cryptography" path="../../modules"/>
<MODULEPATH id="juce_core" path="../../modules"/>
</MODULEPATHS>
</VS2013>
<CODEBLOCKS targetFolder="Builds/CodeBlocks">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="The Introjucer"/>
<CONFIGURATION name="Release" isDebug="0" optimisation="2" targetName="The Introjucer"/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_cryptography" path="../../modules"/>
<MODULEPATH id="juce_core" path="../../modules"/>
</MODULEPATHS>
</CODEBLOCKS>
</EXPORTFORMATS>
<MAINGROUP name="The Introjucer" id="NhrJq66R">
<GROUP id="mslFIKZ" name="Application">
<FILE id="pI5xt5" name="jucer_AppearanceSettings.cpp" compile="1" resource="0"
file="Source/Application/jucer_AppearanceSettings.cpp"/>
<FILE id="oCCddi" name="jucer_AppearanceSettings.h" compile="0" resource="0"
file="Source/Application/jucer_AppearanceSettings.h"/>
<FILE id="PXX8Yi" name="jucer_Application.h" compile="0" resource="0"
file="Source/Application/jucer_Application.h"/>
<FILE id="RWf1Jy" name="jucer_AutoUpdater.h" compile="0" resource="0"
file="Source/Application/jucer_AutoUpdater.h"/>
<FILE id="lHd3UQJ" name="jucer_CommandIDs.h" compile="0" resource="0"
file="Source/Application/jucer_CommandIDs.h"/>
<FILE id="MyVf4S" name="jucer_CommandLine.cpp" compile="1" resource="0"
file="Source/Application/jucer_CommandLine.cpp"/>
<FILE id="SuOWc2" name="jucer_CommandLine.h" compile="0" resource="0"
file="Source/Application/jucer_CommandLine.h"/>
<FILE id="vXhFyvd" name="jucer_CommonHeaders.h" compile="0" resource="0"
file="Source/Application/jucer_CommonHeaders.h"/>
<FILE id="YNZhhqp" name="jucer_DocumentEditorComponent.cpp" compile="1"
resource="0" file="Source/Application/jucer_DocumentEditorComponent.cpp"/>
<FILE id="tyrTEq" name="jucer_DocumentEditorComponent.h" compile="0"
resource="0" file="Source/Application/jucer_DocumentEditorComponent.h"/>
<FILE id="C4MqR1U" name="jucer_FilePreviewComponent.h" compile="0"
resource="0" file="Source/Application/jucer_FilePreviewComponent.h"/>
<FILE id="qXOJtpg" name="jucer_Headers.h" compile="0" resource="0"
file="Source/jucer_Headers.h"/>
<FILE id="ga7xgxf" name="jucer_Main.cpp" compile="1" resource="0" file="Source/Application/jucer_Main.cpp"/>
<FILE id="Glk9Bg" name="jucer_MainWindow.cpp" compile="1" resource="0"
file="Source/Application/jucer_MainWindow.cpp"/>
<FILE id="OUmWPg" name="jucer_MainWindow.h" compile="0" resource="0"
file="Source/Application/jucer_MainWindow.h"/>
<FILE id="9hfMs0O" name="jucer_OpenDocumentManager.cpp" compile="1"
resource="0" file="Source/Application/jucer_OpenDocumentManager.cpp"/>
<FILE id="NYEknlp" name="jucer_OpenDocumentManager.h" compile="0" resource="0"
file="Source/Application/jucer_OpenDocumentManager.h"/>
</GROUP>
<GROUP id="i1s14uV" name="Code Editor">
<FILE id="36CkPUf" name="jucer_SourceCodeEditor.cpp" compile="1" resource="0"
file="Source/Code Editor/jucer_SourceCodeEditor.cpp"/>
<FILE id="CygyGGA" name="jucer_SourceCodeEditor.h" compile="0" resource="0"
file="Source/Code Editor/jucer_SourceCodeEditor.h"/>
</GROUP>
<GROUP id="{2CEB6C89-822E-5334-4BA3-EBCA71F15B1D}" name="ComponentEditor">
<GROUP id="{991D022D-772C-89CA-9279-97CBE57A95A1}" name="components">
<FILE id="rITV4W" name="jucer_ButtonHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_ButtonHandler.h"/>
<FILE id="ETf5wP" name="jucer_ComboBoxHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_ComboBoxHandler.h"/>
<FILE id="VYwZMA" name="jucer_ComponentNameProperty.h" compile="0"
resource="0" file="Source/ComponentEditor/components/jucer_ComponentNameProperty.h"/>
<FILE id="HKreNg" name="jucer_ComponentTypeHandler.cpp" compile="1"
resource="0" file="Source/ComponentEditor/components/jucer_ComponentTypeHandler.cpp"/>
<FILE id="qf7M8f" name="jucer_ComponentTypeHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_ComponentTypeHandler.h"/>
<FILE id="BNNvIv" name="jucer_ComponentUndoableAction.h" compile="0"
resource="0" file="Source/ComponentEditor/components/jucer_ComponentUndoableAction.h"/>
<FILE id="K8TvLo" name="jucer_GenericComponentHandler.h" compile="0"
resource="0" file="Source/ComponentEditor/components/jucer_GenericComponentHandler.h"/>
<FILE id="wZGCvQ" name="jucer_GroupComponentHandler.h" compile="0"
resource="0" file="Source/ComponentEditor/components/jucer_GroupComponentHandler.h"/>
<FILE id="PJxFrK" name="jucer_HyperlinkButtonHandler.h" compile="0"
resource="0" file="Source/ComponentEditor/components/jucer_HyperlinkButtonHandler.h"/>
<FILE id="YSwPme" name="jucer_ImageButtonHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_ImageButtonHandler.h"/>
<FILE id="LDl6E2" name="jucer_JucerComponentHandler.h" compile="0"
resource="0" file="Source/ComponentEditor/components/jucer_JucerComponentHandler.h"/>
<FILE id="KV8ITI" name="jucer_LabelHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_LabelHandler.h"/>
<FILE id="Ib9vrK" name="jucer_SliderHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_SliderHandler.h"/>
<FILE id="LE1P9T" name="jucer_TabbedComponentHandler.h" compile="0"
resource="0" file="Source/ComponentEditor/components/jucer_TabbedComponentHandler.h"/>
<FILE id="yNGaOZ" name="jucer_TextButtonHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_TextButtonHandler.h"/>
<FILE id="uCcFPZ" name="jucer_TextEditorHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_TextEditorHandler.h"/>
<FILE id="Vc0nqL" name="jucer_ToggleButtonHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_ToggleButtonHandler.h"/>
<FILE id="LxUfLS" name="jucer_TreeViewHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_TreeViewHandler.h"/>
<FILE id="UK7au4" name="jucer_ViewportHandler.h" compile="0" resource="0"
file="Source/ComponentEditor/components/jucer_ViewportHandler.h"/>
</GROUP>
<GROUP id="{4205F9F4-CA03-599A-8C9B-E26061861F6F}" name="documents">
<FILE id="TYU1VV" name="jucer_ButtonDocument.cpp" compile="1" resource="0"
file="Source/ComponentEditor/documents/jucer_ButtonDocument.cpp"/>
<FILE id="X7tlEa" name="jucer_ButtonDocument.h" compile="0" resource="0"
file="Source/ComponentEditor/documents/jucer_ButtonDocument.h"/>
<FILE id="aKYUKO" name="jucer_ComponentDocument.cpp" compile="1" resource="0"
file="Source/ComponentEditor/documents/jucer_ComponentDocument.cpp"/>
<FILE id="QWjkNQ" name="jucer_ComponentDocument.h" compile="0" resource="0"
file="Source/ComponentEditor/documents/jucer_ComponentDocument.h"/>
</GROUP>
<GROUP id="{A0FB1797-F730-7BC3-D880-3BA303E7399E}" name="paintelements">
<FILE id="inuiZP" name="jucer_ColouredElement.cpp" compile="1" resource="0"
file="Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp"/>
<FILE id="HPmBrY" name="jucer_ColouredElement.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_ColouredElement.h"/>
<FILE id="dJaub3" name="jucer_ElementSiblingComponent.h" compile="0"
resource="0" file="Source/ComponentEditor/paintelements/jucer_ElementSiblingComponent.h"/>
<FILE id="K7K9w1" name="jucer_FillType.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_FillType.h"/>
<FILE id="VwZZZW" name="jucer_GradientPointComponent.h" compile="0"
resource="0" file="Source/ComponentEditor/paintelements/jucer_GradientPointComponent.h"/>
<FILE id="bev2oi" name="jucer_ImageResourceProperty.h" compile="0"
resource="0" file="Source/ComponentEditor/paintelements/jucer_ImageResourceProperty.h"/>
<FILE id="clRcIu" name="jucer_PaintElement.cpp" compile="1" resource="0"
file="Source/ComponentEditor/paintelements/jucer_PaintElement.cpp"/>
<FILE id="F4AEGr" name="jucer_PaintElement.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_PaintElement.h"/>
<FILE id="xU4ubN" name="jucer_PaintElementEllipse.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_PaintElementEllipse.h"/>
<FILE id="RcWpm8" name="jucer_PaintElementGroup.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_PaintElementGroup.h"/>
<FILE id="ft5MWO" name="jucer_PaintElementImage.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_PaintElementImage.h"/>
<FILE id="pnsBvh" name="jucer_PaintElementPath.cpp" compile="1" resource="0"
file="Source/ComponentEditor/paintelements/jucer_PaintElementPath.cpp"/>
<FILE id="TBaAHE" name="jucer_PaintElementPath.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_PaintElementPath.h"/>
<FILE id="dd1jYM" name="jucer_PaintElementRectangle.h" compile="0"
resource="0" file="Source/ComponentEditor/paintelements/jucer_PaintElementRectangle.h"/>
<FILE id="PFMc79" name="jucer_PaintElementRoundedRectangle.h" compile="0"
resource="0" file="Source/ComponentEditor/paintelements/jucer_PaintElementRoundedRectangle.h"/>
<FILE id="YIfBIW" name="jucer_PaintElementText.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_PaintElementText.h"/>
<FILE id="yKXEgv" name="jucer_PaintElementUndoableAction.h" compile="0"
resource="0" file="Source/ComponentEditor/paintelements/jucer_PaintElementUndoableAction.h"/>
<FILE id="M6U5Wv" name="jucer_PointComponent.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_PointComponent.h"/>
<FILE id="xT3Eb0" name="jucer_StrokeType.h" compile="0" resource="0"
file="Source/ComponentEditor/paintelements/jucer_StrokeType.h"/>
</GROUP>
<GROUP id="{721DE2A1-8F94-F2B8-6AD8-BC8B1A9E5705}" name="properties">
<FILE id="NLsN0X" name="jucer_ColourPropertyComponent.h" compile="0"
resource="0" file="Source/ComponentEditor/properties/jucer_ColourPropertyComponent.h"/>
<FILE id="DRH56I" name="jucer_ComponentBooleanProperty.h" compile="0"
resource="0" file="Source/ComponentEditor/properties/jucer_ComponentBooleanProperty.h"/>
<FILE id="rfuwQh" name="jucer_ComponentChoiceProperty.h" compile="0"
resource="0" file="Source/ComponentEditor/properties/jucer_ComponentChoiceProperty.h"/>
<FILE id="vEgZwf" name="jucer_ComponentColourProperty.h" compile="0"
resource="0" file="Source/ComponentEditor/properties/jucer_ComponentColourProperty.h"/>
<FILE id="NA8Z1Q" name="jucer_ComponentTextProperty.h" compile="0"
resource="0" file="Source/ComponentEditor/properties/jucer_ComponentTextProperty.h"/>
<FILE id="W8Rfzk" name="jucer_FilePropertyComponent.h" compile="0"
resource="0" file="Source/ComponentEditor/properties/jucer_FilePropertyComponent.h"/>
<FILE id="ro0hFm" name="jucer_FontPropertyComponent.h" compile="0"
resource="0" file="Source/ComponentEditor/properties/jucer_FontPropertyComponent.h"/>
<FILE id="bZrq82" name="jucer_JustificationProperty.h" compile="0"
resource="0" file="Source/ComponentEditor/properties/jucer_JustificationProperty.h"/>
<FILE id="qg4Jzu" name="jucer_PositionPropertyBase.h" compile="0" resource="0"
file="Source/ComponentEditor/properties/jucer_PositionPropertyBase.h"/>
</GROUP>
<GROUP id="{2E376C88-458D-B030-6A17-32378D83EA2C}" name="ui">
<FILE id="yUp6KD" name="jucer_ComponentLayoutEditor.cpp" compile="1"
resource="0" file="Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.cpp"/>
<FILE id="MSAX1Y" name="jucer_ComponentLayoutEditor.h" compile="0"
resource="0" file="Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.h"/>
<FILE id="iKlcXq" name="jucer_ComponentLayoutPanel.h" compile="0" resource="0"
file="Source/ComponentEditor/ui/jucer_ComponentLayoutPanel.h"/>
<FILE id="hJ1gT9" name="jucer_ComponentOverlayComponent.cpp" compile="1"
resource="0" file="Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.cpp"/>
<FILE id="BFfCA3" name="jucer_ComponentOverlayComponent.h" compile="0"
resource="0" file="Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.h"/>
<FILE id="jbijT3" name="jucer_EditingPanelBase.cpp" compile="1" resource="0"
file="Source/ComponentEditor/ui/jucer_EditingPanelBase.cpp"/>
<FILE id="RNGdaa" name="jucer_EditingPanelBase.h" compile="0" resource="0"
file="Source/ComponentEditor/ui/jucer_EditingPanelBase.h"/>
<FILE id="D5pfJg" name="jucer_JucerCommandIDs.h" compile="0" resource="0"
file="Source/ComponentEditor/ui/jucer_JucerCommandIDs.h"/>
<FILE id="HsjExN" name="jucer_JucerDocumentEditor.cpp" compile="1"
resource="0" file="Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp"/>
<FILE id="b2FF1t" name="jucer_JucerDocumentEditor.h" compile="0" resource="0"
file="Source/ComponentEditor/ui/jucer_JucerDocumentEditor.h"/>
<FILE id="Re59Al" name="jucer_PaintRoutineEditor.cpp" compile="1" resource="0"
file="Source/ComponentEditor/ui/jucer_PaintRoutineEditor.cpp"/>
<FILE id="mTow9T" name="jucer_PaintRoutineEditor.h" compile="0" resource="0"
file="Source/ComponentEditor/ui/jucer_PaintRoutineEditor.h"/>
<FILE id="g1E8EJ" name="jucer_PaintRoutinePanel.cpp" compile="1" resource="0"
file="Source/ComponentEditor/ui/jucer_PaintRoutinePanel.cpp"/>
<FILE id="wzRGI9" name="jucer_PaintRoutinePanel.h" compile="0" resource="0"
file="Source/ComponentEditor/ui/jucer_PaintRoutinePanel.h"/>
<FILE id="ktQ4ng" name="jucer_RelativePositionedRectangle.h" compile="0"
resource="0" file="Source/ComponentEditor/ui/jucer_RelativePositionedRectangle.h"/>
<FILE id="CFe5dO" name="jucer_ResourceEditorPanel.cpp" compile="1"
resource="0" file="Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp"/>
<FILE id="S8hsI2" name="jucer_ResourceEditorPanel.h" compile="0" resource="0"
file="Source/ComponentEditor/ui/jucer_ResourceEditorPanel.h"/>
<FILE id="jwLtCu" name="jucer_SnapGridPainter.h" compile="0" resource="0"
file="Source/ComponentEditor/ui/jucer_SnapGridPainter.h"/>
<FILE id="QqRZKi" name="jucer_TestComponent.cpp" compile="1" resource="0"
file="Source/ComponentEditor/ui/jucer_TestComponent.cpp"/>
<FILE id="mIEmG7" name="jucer_TestComponent.h" compile="0" resource="0"
file="Source/ComponentEditor/ui/jucer_TestComponent.h"/>
</GROUP>
<FILE id="q9RAaZ" name="jucer_BinaryResources.cpp" compile="1" resource="0"
file="Source/ComponentEditor/jucer_BinaryResources.cpp"/>
<FILE id="sbNvpB" name="jucer_BinaryResources.h" compile="0" resource="0"
file="Source/ComponentEditor/jucer_BinaryResources.h"/>
<FILE id="smSHM5" name="jucer_ComponentLayout.cpp" compile="1" resource="0"
file="Source/ComponentEditor/jucer_ComponentLayout.cpp"/>
<FILE id="MNeOnz" name="jucer_ComponentLayout.h" compile="0" resource="0"
file="Source/ComponentEditor/jucer_ComponentLayout.h"/>
<FILE id="pxZtWJ" name="jucer_GeneratedCode.cpp" compile="1" resource="0"
file="Source/ComponentEditor/jucer_GeneratedCode.cpp"/>
<FILE id="uCwazM" name="jucer_GeneratedCode.h" compile="0" resource="0"
file="Source/ComponentEditor/jucer_GeneratedCode.h"/>
<FILE id="Ck53JI" name="jucer_JucerDocument.cpp" compile="1" resource="0"
file="Source/ComponentEditor/jucer_JucerDocument.cpp"/>
<FILE id="TMo2IM" name="jucer_JucerDocument.h" compile="0" resource="0"
file="Source/ComponentEditor/jucer_JucerDocument.h"/>
<FILE id="Cg97A0" name="jucer_ObjectTypes.cpp" compile="1" resource="0"
file="Source/ComponentEditor/jucer_ObjectTypes.cpp"/>
<FILE id="OXJG49" name="jucer_ObjectTypes.h" compile="0" resource="0"
file="Source/ComponentEditor/jucer_ObjectTypes.h"/>
<FILE id="sGXKcJ" name="jucer_PaintRoutine.cpp" compile="1" resource="0"
file="Source/ComponentEditor/jucer_PaintRoutine.cpp"/>
<FILE id="ctReDx" name="jucer_PaintRoutine.h" compile="0" resource="0"
file="Source/ComponentEditor/jucer_PaintRoutine.h"/>
<FILE id="DNlSpr" name="jucer_UtilityFunctions.h" compile="0" resource="0"
file="Source/ComponentEditor/jucer_UtilityFunctions.h"/>
</GROUP>
<GROUP id="{579C9644-D5C2-8469-9439-F91C81337531}" name="Project Saving">
<FILE id="TtXohM" name="jucer_ProjectExport_Android.h" compile="0"
resource="0" file="Source/Project Saving/jucer_ProjectExport_Android.h"/>
<FILE id="EkBkj1" name="jucer_ProjectExport_CodeBlocks.h" compile="0"
resource="0" file="Source/Project Saving/jucer_ProjectExport_CodeBlocks.h"/>
<FILE id="mVXrLi" name="jucer_ProjectExport_Make.h" compile="0" resource="0"
file="Source/Project Saving/jucer_ProjectExport_Make.h"/>
<FILE id="ILeTrs" name="jucer_ProjectExport_MSVC.h" compile="0" resource="0"
file="Source/Project Saving/jucer_ProjectExport_MSVC.h"/>
<FILE id="qGukX7" name="jucer_ProjectExport_XCode.h" compile="0" resource="0"
file="Source/Project Saving/jucer_ProjectExport_XCode.h"/>
<FILE id="IhUUL3" name="jucer_ProjectExporter.cpp" compile="1" resource="0"
file="Source/Project Saving/jucer_ProjectExporter.cpp"/>
<FILE id="DDuG44" name="jucer_ProjectExporter.h" compile="0" resource="0"
file="Source/Project Saving/jucer_ProjectExporter.h"/>
<FILE id="ASAH0z" name="jucer_ProjectSaver.h" compile="0" resource="0"
file="Source/Project Saving/jucer_ProjectSaver.h"/>
<FILE id="EEyV81" name="jucer_ResourceFile.cpp" compile="1" resource="0"
file="Source/Project Saving/jucer_ResourceFile.cpp"/>
<FILE id="dCnNH" name="jucer_ResourceFile.h" compile="0" resource="0"
file="Source/Project Saving/jucer_ResourceFile.h"/>
</GROUP>
<GROUP id="vGFZIJg" name="Project">
<FILE id="a9a1b" name="jucer_AudioPluginModule.h" compile="0" resource="0"
file="Source/Project/jucer_AudioPluginModule.h"/>
<FILE id="xYS0qQ" name="jucer_ConfigTree_Base.h" compile="0" resource="0"
file="Source/Project/jucer_ConfigTree_Base.h"/>
<FILE id="mLHZta" name="jucer_ConfigTree_Exporter.h" compile="0" resource="0"
file="Source/Project/jucer_ConfigTree_Exporter.h"/>
<FILE id="OO3lfM" name="jucer_ConfigTree_Modules.h" compile="0" resource="0"
file="Source/Project/jucer_ConfigTree_Modules.h"/>
<FILE id="sQjHbVN" name="jucer_GroupInformationComponent.h" compile="0"
resource="0" file="Source/Project/jucer_GroupInformationComponent.h"/>
<FILE id="MJkOAX" name="jucer_Module.cpp" compile="1" resource="0"
file="Source/Project/jucer_Module.cpp"/>
<FILE id="VZmQQ6" name="jucer_Module.h" compile="0" resource="0" file="Source/Project/jucer_Module.h"/>
<FILE id="AbVStQ" name="jucer_ModulesPanel.h" compile="0" resource="0"
file="Source/Project/jucer_ModulesPanel.h"/>
<FILE id="o4UdN4D" name="jucer_Project.cpp" compile="1" resource="0"
file="Source/Project/jucer_Project.cpp"/>
<FILE id="aFopF9G" name="jucer_Project.h" compile="0" resource="0"
file="Source/Project/jucer_Project.h"/>
<FILE id="KqyDGWJ" name="jucer_ProjectContentComponent.cpp" compile="1"
resource="0" file="Source/Project/jucer_ProjectContentComponent.cpp"/>
<FILE id="mIJMR08" name="jucer_ProjectContentComponent.h" compile="0"
resource="0" file="Source/Project/jucer_ProjectContentComponent.h"/>
<FILE id="UwhAsi1" name="jucer_ProjectTree_Base.h" compile="0" resource="0"
file="Source/Project/jucer_ProjectTree_Base.h"/>
<FILE id="wiMMXX" name="jucer_ProjectTree_File.h" compile="0" resource="0"
file="Source/Project/jucer_ProjectTree_File.h"/>
<FILE id="WaT0B16" name="jucer_ProjectTree_Group.h" compile="0" resource="0"
file="Source/Project/jucer_ProjectTree_Group.h"/>
<FILE id="WQ6fWQ" name="jucer_ProjectType.cpp" compile="1" resource="0"
file="Source/Project/jucer_ProjectType.cpp"/>
<FILE id="davId" name="jucer_ProjectType.h" compile="0" resource="0"
file="Source/Project/jucer_ProjectType.h"/>
</GROUP>
<GROUP id="Ga8fLmv" name="Utility">
<FILE id="mceJWJc" name="jucer_CodeHelpers.cpp" compile="1" resource="0"
file="Source/Utility/jucer_CodeHelpers.cpp"/>
<FILE id="BBRteob" name="jucer_CodeHelpers.h" compile="0" resource="0"
file="Source/Utility/jucer_CodeHelpers.h"/>
<FILE id="wQtNWXb" name="jucer_Colours.h" compile="0" resource="0"
file="Source/Utility/jucer_Colours.h"/>
<FILE id="MQYSse6" name="jucer_FileHelpers.cpp" compile="1" resource="0"
file="Source/Utility/jucer_FileHelpers.cpp"/>
<FILE id="NeLXzRp" name="jucer_FileHelpers.h" compile="0" resource="0"
file="Source/Utility/jucer_FileHelpers.h"/>
<FILE id="f6iMAs" name="jucer_Icons.cpp" compile="1" resource="0" file="Source/Utility/jucer_Icons.cpp"/>
<FILE id="EtL6vF" name="jucer_Icons.h" compile="0" resource="0" file="Source/Utility/jucer_Icons.h"/>
<FILE id="4fxv0YC" name="jucer_JucerTreeViewBase.cpp" compile="1" resource="0"
file="Source/Utility/jucer_JucerTreeViewBase.cpp"/>
<FILE id="F0vVVSX" name="jucer_JucerTreeViewBase.h" compile="0" resource="0"
file="Source/Utility/jucer_JucerTreeViewBase.h"/>
<FILE id="P4hiiqU" name="jucer_MiscUtilities.cpp" compile="1" resource="0"
file="Source/Utility/jucer_MiscUtilities.cpp"/>
<FILE id="xyRXOU6" name="jucer_MiscUtilities.h" compile="0" resource="0"
file="Source/Utility/jucer_MiscUtilities.h"/>
<FILE id="i0HWAP4" name="jucer_PresetIDs.h" compile="0" resource="0"
file="Source/Utility/jucer_PresetIDs.h"/>
<FILE id="F3VxlRX" name="jucer_RelativePath.h" compile="0" resource="0"
file="Source/Utility/jucer_RelativePath.h"/>
<FILE id="w40H5T" name="jucer_SlidingPanelComponent.cpp" compile="1"
resource="0" file="Source/Utility/jucer_SlidingPanelComponent.cpp"/>
<FILE id="a5dZ4L" name="jucer_SlidingPanelComponent.h" compile="0"
resource="0" file="Source/Utility/jucer_SlidingPanelComponent.h"/>
<FILE id="5UDCwsI" name="jucer_StoredSettings.cpp" compile="1" resource="0"
file="Source/Utility/jucer_StoredSettings.cpp"/>
<FILE id="BkswLvF" name="jucer_StoredSettings.h" compile="0" resource="0"
file="Source/Utility/jucer_StoredSettings.h"/>
<FILE id="l75UWh" name="jucer_TranslationTool.h" compile="0" resource="0"
file="Source/Utility/jucer_TranslationTool.h"/>
<FILE id="lZ9s99o" name="jucer_ValueSourceHelpers.h" compile="0" resource="0"
file="Source/Utility/jucer_ValueSourceHelpers.h"/>
</GROUP>
<GROUP id="{8B3486A1-A1FE-D1F3-DC93-A9648E7A0B81}" name="Wizards">
<FILE id="jNmG53" name="jucer_NewFileWizard.cpp" compile="1" resource="0"
file="Source/Wizards/jucer_NewFileWizard.cpp"/>
<FILE id="hDWsJe" name="jucer_NewFileWizard.h" compile="0" resource="0"
file="Source/Wizards/jucer_NewFileWizard.h"/>
<FILE id="z1x9qC" name="jucer_NewProjectWizard.h" compile="0" resource="0"
file="Source/Wizards/jucer_NewProjectWizard.h"/>
<FILE id="Qj5Pic" name="jucer_NewProjectWizardClasses.cpp" compile="1"
resource="0" file="Source/Wizards/jucer_NewProjectWizardClasses.cpp"/>
<FILE id="EorFIT" name="jucer_NewProjectWizardClasses.h" compile="0"
resource="0" file="Source/Wizards/jucer_NewProjectWizardClasses.h"/>
<FILE id="gANG6q" name="jucer_NewProjectWizardComponent.h" compile="0"
resource="0" file="Source/Wizards/jucer_NewProjectWizardComponent.h"/>
<FILE id="XsYjVu" name="jucer_ProjectWizard_Animated.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_Animated.h"/>
<FILE id="C3QHDx" name="jucer_ProjectWizard_AudioApp.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_AudioApp.h"/>
<FILE id="VslsJm" name="jucer_ProjectWizard_AudioPlugin.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_AudioPlugin.h"/>
<FILE id="YnNfnf" name="jucer_ProjectWizard_Blank.h" compile="0" resource="0"
file="Source/Wizards/jucer_ProjectWizard_Blank.h"/>
<FILE id="ZGv05z" name="jucer_ProjectWizard_Console.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_Console.h"/>
<FILE id="MSY7Sv" name="jucer_ProjectWizard_DLL.h" compile="0" resource="0"
file="Source/Wizards/jucer_ProjectWizard_DLL.h"/>
<FILE id="DLKmUb" name="jucer_ProjectWizard_GUIApp.h" compile="0" resource="0"
file="Source/Wizards/jucer_ProjectWizard_GUIApp.h"/>
<FILE id="ok6sWB" name="jucer_ProjectWizard_openGL.h" compile="0" resource="0"
file="Source/Wizards/jucer_ProjectWizard_openGL.h"/>
<FILE id="NEahcu" name="jucer_ProjectWizard_StaticLibrary.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_StaticLibrary.h"/>
<FILE id="mwwjfj" name="jucer_StartPageComponent.h" compile="0" resource="0"
file="Source/Wizards/jucer_StartPageComponent.h"/>
<FILE id="BlL6EA" name="jucer_TemplateThumbnailsComponent.h" compile="0"
resource="0" file="Source/Wizards/jucer_TemplateThumbnailsComponent.h"/>
<GROUP id="{2EFFC5F3-CE4A-FCEB-391B-A644E7394EE3}" name="templates">
<FILE id="Ksvdgw" name="jucer_AnimatedComponentTemplate.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_AnimatedComponentTemplate.cpp"/>
<FILE id="zI7KxE" name="jucer_AudioComponentTemplate.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_AudioComponentTemplate.cpp"/>
<FILE id="8H7vztx" name="jucer_AudioPluginEditorTemplate.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_AudioPluginEditorTemplate.cpp"/>
<FILE id="908LsXi" name="jucer_AudioPluginEditorTemplate.h" compile="0"
resource="1" file="Source/BinaryData/jucer_AudioPluginEditorTemplate.h"/>
<FILE id="AfHjhZ9" name="jucer_AudioPluginFilterTemplate.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_AudioPluginFilterTemplate.cpp"/>
<FILE id="pvgTmND" name="jucer_AudioPluginFilterTemplate.h" compile="0"
resource="1" file="Source/BinaryData/jucer_AudioPluginFilterTemplate.h"/>
<FILE id="gM9qyy" name="jucer_ComponentTemplate.cpp" compile="0" resource="1"
file="Source/BinaryData/jucer_ComponentTemplate.cpp"/>
<FILE id="TSDD99" name="jucer_ComponentTemplate.h" compile="0" resource="1"
file="Source/BinaryData/jucer_ComponentTemplate.h"/>
<FILE id="xl685P" name="jucer_ContentCompTemplate.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_ContentCompTemplate.cpp"/>
<FILE id="gFj8Jl" name="jucer_ContentCompTemplate.h" compile="0" resource="1"
file="Source/BinaryData/jucer_ContentCompTemplate.h"/>
<FILE id="BnCgp2" name="jucer_InlineComponentTemplate.h" compile="0"
resource="1" file="Source/BinaryData/jucer_InlineComponentTemplate.h"/>
<FILE id="pizYtv9" name="jucer_MainConsoleAppTemplate.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_MainConsoleAppTemplate.cpp"/>
<FILE id="tZCXSl" name="jucer_MainTemplate_NoWindow.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_MainTemplate_NoWindow.cpp"/>
<FILE id="R7OBsx" name="jucer_MainTemplate_SimpleWindow.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_MainTemplate_SimpleWindow.cpp"/>
<FILE id="W9iwHx" name="jucer_MainTemplate_Window.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_MainTemplate_Window.cpp"/>
<FILE id="fWEsCu" name="jucer_NewComponentTemplate.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_NewComponentTemplate.cpp"/>
<FILE id="ljPBjw" name="jucer_NewComponentTemplate.h" compile="0" resource="1"
file="Source/BinaryData/jucer_NewComponentTemplate.h"/>
<FILE id="cI2ImgX" name="jucer_NewCppFileTemplate.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_NewCppFileTemplate.cpp"/>
<FILE id="YDcz5P" name="jucer_NewCppFileTemplate.h" compile="0" resource="1"
file="Source/BinaryData/jucer_NewCppFileTemplate.h"/>
<FILE id="teqnin" name="jucer_NewInlineComponentTemplate.h" compile="0"
resource="1" file="Source/BinaryData/jucer_NewInlineComponentTemplate.h"/>
<FILE id="MMiar4" name="jucer_OpenGLComponentTemplate.cpp" compile="0"
resource="1" file="Source/BinaryData/jucer_OpenGLComponentTemplate.cpp"/>
</GROUP>
</GROUP>
<GROUP id="KPIRFfz" name="BinaryData">
<FILE id="RSJcrRl" name="AudioPluginXCodeScript.txt" compile="0" resource="1"
file="Source/BinaryData/AudioPluginXCodeScript.txt"/>
<FILE id="eYn4jB" name="background_tile.png" compile="0" resource="1"
file="Source/BinaryData/background_tile.png"/>
<FILE id="geMos6" name="colourscheme_dark.xml" compile="0" resource="1"
file="Source/BinaryData/colourscheme_dark.xml"/>
<FILE id="Rm5UQS" name="colourscheme_light.xml" compile="0" resource="1"
file="Source/BinaryData/colourscheme_light.xml"/>
<FILE id="rVgowdy" name="juce_icon.png" compile="0" resource="1" file="Source/BinaryData/juce_icon.png"/>
<FILE id="b8Brir" name="projectIconAndroid.png" compile="0" resource="1"
file="Source/BinaryData/projectIconAndroid.png"/>
<FILE id="wdeicV" name="projectIconCodeblocks.png" compile="0" resource="1"
file="Source/BinaryData/projectIconCodeblocks.png"/>
<FILE id="xwPVtR" name="projectIconLinuxMakefile.png" compile="0" resource="1"
file="Source/BinaryData/projectIconLinuxMakefile.png"/>
<FILE id="TXWwpL" name="projectIconVisualStudio.png" compile="0" resource="1"
file="Source/BinaryData/projectIconVisualStudio.png"/>
<FILE id="WFftCh" name="projectIconXcode.png" compile="0" resource="1"
file="Source/BinaryData/projectIconXcode.png"/>
<FILE id="FZNKix" name="projectIconXcodeIOS.png" compile="0" resource="1"
file="Source/BinaryData/projectIconXcodeIOS.png"/>
<FILE id="TNXogM" name="RecentFilesMenuTemplate.nib" compile="0" resource="1"
file="Source/BinaryData/RecentFilesMenuTemplate.nib"/>
<FILE id="khQDTB" name="wizard_AnimatedApp.svg" compile="0" resource="1"
file="Source/BinaryData/wizard_AnimatedApp.svg"/>
<FILE id="b59ILn" name="wizard_AudioApp.svg" compile="0" resource="1"
file="Source/BinaryData/wizard_AudioApp.svg"/>
<FILE id="KRfxLR" name="wizard_AudioPlugin.svg" compile="0" resource="1"
file="Source/BinaryData/wizard_AudioPlugin.svg"/>
<FILE id="qDz5HP" name="wizard_ConsoleApp.svg" compile="0" resource="1"
file="Source/BinaryData/wizard_ConsoleApp.svg"/>
<FILE id="Oqscrn" name="wizard_DLL.svg" compile="0" resource="1" file="Source/BinaryData/wizard_DLL.svg"/>
<FILE id="tTa6MB" name="wizard_GUI.svg" compile="0" resource="1" file="Source/BinaryData/wizard_GUI.svg"/>
<FILE id="X6oRVj" name="wizard_Highlight.svg" compile="0" resource="1"
file="Source/BinaryData/wizard_Highlight.svg"/>
<FILE id="MvraQX" name="wizard_Openfile.svg" compile="0" resource="1"
file="Source/BinaryData/wizard_Openfile.svg"/>
<FILE id="SvQOsO" name="wizard_OpenGL.svg" compile="0" resource="1"
file="Source/BinaryData/wizard_OpenGL.svg"/>
<FILE id="l1q1aL" name="wizard_StaticLibrary.svg" compile="0" resource="1"
file="Source/BinaryData/wizard_StaticLibrary.svg"/>
</GROUP>
</MAINGROUP>
<JUCEOPTIONS JUCE_ASIO="disabled" JUCE_WASAPI="disabled" JUCE_DIRECTSOUND="disabled"
JUCE_ALSA="disabled" JUCE_QUICKTIME="disabled" JUCE_OPENGL="disabled"
JUCE_USE_FLAC="disabled" JUCE_USE_CDBURNER="disabled" JUCE_USE_CDREADER="disabled"
JUCE_USE_CAMERA="disabled" JUCE_PLUGINHOST_VST="disabled" JUCE_PLUGINHOST_AU="disabled"
JUCE_USE_OGGVORBIS="disabled" JUCE_USE_COREIMAGE_LOADER="disabled"
JUCE_LOG_ASSERTIONS="enabled"/>
<MODULES>
<MODULE id="juce_core" showAllCode="1"/>
<MODULE id="juce_cryptography" showAllCode="1"/>
<MODULE id="juce_data_structures" showAllCode="1"/>
<MODULE id="juce_events" showAllCode="1"/>
<MODULE id="juce_graphics" showAllCode="1"/>
<MODULE id="juce_gui_basics" showAllCode="1"/>
<MODULE id="juce_gui_extra" showAllCode="1"/>
</MODULES>
<LIVE_SETTINGS>
<OSX enableCxx11="1" systemHeaderPath="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/include"/>
</LIVE_SETTINGS>
</JUCERPROJECT>
@@ -0,0 +1,98 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
There's a section below where you can add your own custom code safely, and the
Introjucer will preserve the contents of that block, but the best way to change
any of these definitions is by using the Introjucer's project settings.
Any commented-out settings will assume their default values.
*/
#ifndef __JUCE_APPCONFIG_M70QFTRRK__
#define __JUCE_APPCONFIG_M70QFTRRK__
//==============================================================================
// [BEGIN_USER_CODE_SECTION]
// (You can add your own code in this section, and the Introjucer will not overwrite it)
// [END_USER_CODE_SECTION]
//==============================================================================
#define JUCE_MODULE_AVAILABLE_juce_core 1
#define JUCE_MODULE_AVAILABLE_juce_cryptography 1
#define JUCE_MODULE_AVAILABLE_juce_data_structures 1
#define JUCE_MODULE_AVAILABLE_juce_events 1
#define JUCE_MODULE_AVAILABLE_juce_graphics 1
#define JUCE_MODULE_AVAILABLE_juce_gui_basics 1
#define JUCE_MODULE_AVAILABLE_juce_gui_extra 1
//==============================================================================
// juce_core flags:
#ifndef JUCE_FORCE_DEBUG
//#define JUCE_FORCE_DEBUG
#endif
#ifndef JUCE_LOG_ASSERTIONS
#define JUCE_LOG_ASSERTIONS 1
#endif
#ifndef JUCE_CHECK_MEMORY_LEAKS
//#define JUCE_CHECK_MEMORY_LEAKS
#endif
#ifndef JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
//#define JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
#endif
#ifndef JUCE_INCLUDE_ZLIB_CODE
//#define JUCE_INCLUDE_ZLIB_CODE
#endif
//==============================================================================
// juce_graphics flags:
#ifndef JUCE_USE_COREIMAGE_LOADER
#define JUCE_USE_COREIMAGE_LOADER 0
#endif
#ifndef JUCE_USE_DIRECTWRITE
//#define JUCE_USE_DIRECTWRITE
#endif
//==============================================================================
// juce_gui_basics flags:
#ifndef JUCE_ENABLE_REPAINT_DEBUGGING
//#define JUCE_ENABLE_REPAINT_DEBUGGING
#endif
#ifndef JUCE_USE_XSHM
//#define JUCE_USE_XSHM
#endif
#ifndef JUCE_USE_XRENDER
//#define JUCE_USE_XRENDER
#endif
#ifndef JUCE_USE_XCURSOR
//#define JUCE_USE_XCURSOR
#endif
//==============================================================================
// juce_gui_extra flags:
#ifndef JUCE_WEB_BROWSER
//#define JUCE_WEB_BROWSER
#endif
#ifndef JUCE_ENABLE_LIVE_CONSTANT_EDITOR
//#define JUCE_ENABLE_LIVE_CONSTANT_EDITOR
#endif
#endif // __JUCE_APPCONFIG_M70QFTRRK__
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,152 @@
/* =========================================================================================
This is an auto-generated file: Any edits you make may be overwritten!
*/
#ifndef BINARYDATA_H_62491730_INCLUDED
#define BINARYDATA_H_62491730_INCLUDED
namespace BinaryData
{
extern const char* jucer_AnimatedComponentTemplate_cpp;
const int jucer_AnimatedComponentTemplate_cppSize = 1949;
extern const char* jucer_AudioComponentTemplate_cpp;
const int jucer_AudioComponentTemplate_cppSize = 2991;
extern const char* jucer_AudioPluginEditorTemplate_cpp;
const int jucer_AudioPluginEditorTemplate_cppSize = 1180;
extern const char* jucer_AudioPluginEditorTemplate_h;
const int jucer_AudioPluginEditorTemplate_hSize = 1012;
extern const char* jucer_AudioPluginFilterTemplate_cpp;
const int jucer_AudioPluginFilterTemplate_cppSize = 5039;
extern const char* jucer_AudioPluginFilterTemplate_h;
const int jucer_AudioPluginFilterTemplate_hSize = 2727;
extern const char* jucer_ComponentTemplate_cpp;
const int jucer_ComponentTemplate_cppSize = 2083;
extern const char* jucer_ComponentTemplate_h;
const int jucer_ComponentTemplate_hSize = 2156;
extern const char* jucer_ContentCompTemplate_cpp;
const int jucer_ContentCompTemplate_cppSize = 886;
extern const char* jucer_ContentCompTemplate_h;
const int jucer_ContentCompTemplate_hSize = 924;
extern const char* jucer_InlineComponentTemplate_h;
const int jucer_InlineComponentTemplate_hSize = 1143;
extern const char* jucer_MainConsoleAppTemplate_cpp;
const int jucer_MainConsoleAppTemplate_cppSize = 470;
extern const char* jucer_MainTemplate_NoWindow_cpp;
const int jucer_MainTemplate_NoWindow_cppSize = 2010;
extern const char* jucer_MainTemplate_SimpleWindow_cpp;
const int jucer_MainTemplate_SimpleWindow_cppSize = 3866;
extern const char* jucer_MainTemplate_Window_cpp;
const int jucer_MainTemplate_Window_cppSize = 3778;
extern const char* jucer_NewComponentTemplate_cpp;
const int jucer_NewComponentTemplate_cppSize = 1389;
extern const char* jucer_NewComponentTemplate_h;
const int jucer_NewComponentTemplate_hSize = 648;
extern const char* jucer_NewCppFileTemplate_cpp;
const int jucer_NewCppFileTemplate_cppSize = 262;
extern const char* jucer_NewCppFileTemplate_h;
const int jucer_NewCppFileTemplate_hSize = 308;
extern const char* jucer_NewInlineComponentTemplate_h;
const int jucer_NewInlineComponentTemplate_hSize = 1626;
extern const char* jucer_OpenGLComponentTemplate_cpp;
const int jucer_OpenGLComponentTemplate_cppSize = 1827;
extern const char* AudioPluginXCodeScript_txt;
const int AudioPluginXCodeScript_txtSize = 2922;
extern const char* background_tile_png;
const int background_tile_pngSize = 151;
extern const char* colourscheme_dark_xml;
const int colourscheme_dark_xmlSize = 1050;
extern const char* colourscheme_light_xml;
const int colourscheme_light_xmlSize = 1050;
extern const char* juce_icon_png;
const int juce_icon_pngSize = 83091;
extern const char* projectIconAndroid_png;
const int projectIconAndroid_pngSize = 8150;
extern const char* projectIconCodeblocks_png;
const int projectIconCodeblocks_pngSize = 11917;
extern const char* projectIconLinuxMakefile_png;
const int projectIconLinuxMakefile_pngSize = 16444;
extern const char* projectIconVisualStudio_png;
const int projectIconVisualStudio_pngSize = 7194;
extern const char* projectIconXcode_png;
const int projectIconXcode_pngSize = 18281;
extern const char* projectIconXcodeIOS_png;
const int projectIconXcodeIOS_pngSize = 18111;
extern const char* RecentFilesMenuTemplate_nib;
const int RecentFilesMenuTemplate_nibSize = 2842;
extern const char* wizard_AnimatedApp_svg;
const int wizard_AnimatedApp_svgSize = 2963;
extern const char* wizard_AudioApp_svg;
const int wizard_AudioApp_svgSize = 9802;
extern const char* wizard_AudioPlugin_svg;
const int wizard_AudioPlugin_svgSize = 10809;
extern const char* wizard_ConsoleApp_svg;
const int wizard_ConsoleApp_svgSize = 1204;
extern const char* wizard_DLL_svg;
const int wizard_DLL_svgSize = 3588;
extern const char* wizard_GUI_svg;
const int wizard_GUI_svgSize = 3448;
extern const char* wizard_Highlight_svg;
const int wizard_Highlight_svgSize = 638;
extern const char* wizard_Openfile_svg;
const int wizard_Openfile_svgSize = 686;
extern const char* wizard_OpenGL_svg;
const int wizard_OpenGL_svgSize = 2497;
extern const char* wizard_StaticLibrary_svg;
const int wizard_StaticLibrary_svgSize = 3563;
// Points to the start of a list of resource names.
extern const char* namedResourceList[];
// Number of elements in the namedResourceList array.
const int namedResourceListSize = 43;
// If you provide the name of one of the binary resource variables above, this function will
// return the corresponding data and its size (or a null pointer if the name isn't found).
const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes) throw();
}
#endif
@@ -0,0 +1,41 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
This is the header file that your files should include in order to get all the
JUCE library headers. You should avoid including the JUCE headers directly in
your own source files, because that wouldn't pick up the correct configuration
options for your app.
*/
#ifndef __APPHEADERFILE_M70QFTRRK__
#define __APPHEADERFILE_M70QFTRRK__
#include "AppConfig.h"
#include "modules/juce_core/juce_core.h"
#include "modules/juce_cryptography/juce_cryptography.h"
#include "modules/juce_data_structures/juce_data_structures.h"
#include "modules/juce_events/juce_events.h"
#include "modules/juce_graphics/juce_graphics.h"
#include "modules/juce_gui_basics/juce_gui_basics.h"
#include "modules/juce_gui_extra/juce_gui_extra.h"
#include "BinaryData.h"
#if ! DONT_SET_USING_JUCE_NAMESPACE
// If your code uses a lot of JUCE classes, then this will obviously save you
// a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE.
using namespace juce;
#endif
#if ! JUCE_DONT_DECLARE_PROJECTINFO
namespace ProjectInfo
{
const char* const projectName = "The Introjucer";
const char* const versionString = "3.1.0";
const int versionNumber = 0x30100;
}
#endif
#endif // __APPHEADERFILE_M70QFTRRK__
@@ -0,0 +1,12 @@
Important Note!!
================
The purpose of this folder is to contain files that are auto-generated by the Introjucer,
and ALL files in this folder will be mercilessly DELETED and completely re-written whenever
the Introjucer saves your project.
Therefore, it's a bad idea to make any manual changes to the files in here, or to
put any of your own files in here if you don't want to lose them. (Of course you may choose
to add the folder's contents to your version-control system so that you can re-merge your own
modifications after the Introjucer has saved its changes).
@@ -0,0 +1,5 @@
// This is an auto-generated file to redirect any included
// module headers to the correct external folder.
#include "../../../../../modules/juce_core/juce_core.h"
@@ -0,0 +1,5 @@
// This is an auto-generated file to redirect any included
// module headers to the correct external folder.
#include "../../../../../modules/juce_cryptography/juce_cryptography.h"
@@ -0,0 +1,5 @@
// This is an auto-generated file to redirect any included
// module headers to the correct external folder.
#include "../../../../../modules/juce_data_structures/juce_data_structures.h"
@@ -0,0 +1,5 @@
// This is an auto-generated file to redirect any included
// module headers to the correct external folder.
#include "../../../../../modules/juce_events/juce_events.h"
@@ -0,0 +1,5 @@
// This is an auto-generated file to redirect any included
// module headers to the correct external folder.
#include "../../../../../modules/juce_graphics/juce_graphics.h"
@@ -0,0 +1,5 @@
// This is an auto-generated file to redirect any included
// module headers to the correct external folder.
#include "../../../../../modules/juce_gui_basics/juce_gui_basics.h"
@@ -0,0 +1,5 @@
// This is an auto-generated file to redirect any included
// module headers to the correct external folder.
#include "../../../../../modules/juce_gui_extra/juce_gui_extra.h"
@@ -0,0 +1,628 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#include "jucer_Application.h"
#include "jucer_AppearanceSettings.h"
namespace AppearanceColours
{
struct ColourInfo
{
const char* name;
int colourID;
bool mustBeOpaque;
bool applyToEditorOnly;
};
static const ColourInfo colours[] =
{
{ "Main Window Bkgd", mainBackgroundColourId, true, false },
{ "Treeview Highlight", TreeView::selectedItemBackgroundColourId, false, false },
{ "Code Background", CodeEditorComponent::backgroundColourId, true, false },
{ "Line Number Bkgd", CodeEditorComponent::lineNumberBackgroundId, false, false },
{ "Line Numbers", CodeEditorComponent::lineNumberTextId, false, false },
{ "Plain Text", CodeEditorComponent::defaultTextColourId, false, false },
{ "Selected Text Bkgd", CodeEditorComponent::highlightColourId, false, false },
{ "Caret", CaretComponent::caretColourId, false, true }
};
enum
{
numColours = sizeof (AppearanceColours::colours) / sizeof (AppearanceColours::colours[0])
};
}
//==============================================================================
AppearanceSettings::AppearanceSettings (bool updateAppWhenChanged)
: settings ("COLOUR_SCHEME")
{
if (! IntrojucerApp::getApp().isRunningCommandLine)
{
IntrojucerLookAndFeel lf;
for (int i = 0; i < AppearanceColours::numColours; ++i)
getColourValue (AppearanceColours::colours[i].name) = lf.findColour (AppearanceColours::colours[i].colourID).toString();
CodeDocument doc;
CPlusPlusCodeTokeniser tokeniser;
CodeEditorComponent editor (doc, &tokeniser);
const CodeEditorComponent::ColourScheme cs (editor.getColourScheme());
for (int i = cs.types.size(); --i >= 0;)
{
CodeEditorComponent::ColourScheme::TokenType& t = cs.types.getReference(i);
getColourValue (t.name) = t.colour.toString();
}
getCodeFontValue() = getDefaultCodeFont().toString();
if (updateAppWhenChanged)
settings.addListener (this);
}
}
File AppearanceSettings::getSchemesFolder()
{
File f (getGlobalProperties().getFile().getSiblingFile ("Schemes"));
f.createDirectory();
return f;
}
void AppearanceSettings::writeDefaultSchemeFile (const String& xmlString, const String& name)
{
const File file (getSchemesFolder().getChildFile (name).withFileExtension (getSchemeFileSuffix()));
AppearanceSettings settings (false);
ScopedPointer<XmlElement> xml (XmlDocument::parse (xmlString));
if (xml != nullptr)
settings.readFromXML (*xml);
settings.writeToFile (file);
}
void AppearanceSettings::refreshPresetSchemeList()
{
writeDefaultSchemeFile (BinaryData::colourscheme_dark_xml, "Default (Dark)");
writeDefaultSchemeFile (BinaryData::colourscheme_light_xml, "Default (Light)");
Array<File> newSchemes;
getSchemesFolder().findChildFiles (newSchemes, File::findFiles, false, String ("*") + getSchemeFileSuffix());
if (newSchemes != presetSchemeFiles)
{
presetSchemeFiles.swapWith (newSchemes);
IntrojucerApp::getCommandManager().commandStatusChanged();
}
}
StringArray AppearanceSettings::getPresetSchemes()
{
StringArray s;
for (int i = 0; i < presetSchemeFiles.size(); ++i)
s.add (presetSchemeFiles.getReference(i).getFileNameWithoutExtension());
return s;
}
void AppearanceSettings::selectPresetScheme (int index)
{
readFromFile (presetSchemeFiles [index]);
}
bool AppearanceSettings::readFromXML (const XmlElement& xml)
{
if (xml.hasTagName (settings.getType().toString()))
{
const ValueTree newSettings (ValueTree::fromXml (xml));
// we'll manually copy across the new properties to the existing tree so that
// any open editors will be kept up to date..
settings.copyPropertiesFrom (newSettings, nullptr);
for (int i = settings.getNumChildren(); --i >= 0;)
{
ValueTree c (settings.getChild (i));
const ValueTree newValue (newSettings.getChildWithProperty (Ids::name, c.getProperty (Ids::name)));
if (newValue.isValid())
c.copyPropertiesFrom (newValue, nullptr);
}
return true;
}
return false;
}
bool AppearanceSettings::readFromFile (const File& file)
{
const ScopedPointer<XmlElement> xml (XmlDocument::parse (file));
return xml != nullptr && readFromXML (*xml);
}
bool AppearanceSettings::writeToFile (const File& file) const
{
const ScopedPointer<XmlElement> xml (settings.createXml());
return xml != nullptr && xml->writeToFile (file, String::empty);
}
Font AppearanceSettings::getDefaultCodeFont()
{
return Font (Font::getDefaultMonospacedFontName(), Font::getDefaultStyle(), 13.0f);
}
StringArray AppearanceSettings::getColourNames() const
{
StringArray s;
for (int i = 0; i < settings.getNumChildren(); ++i)
{
const ValueTree c (settings.getChild(i));
if (c.hasType ("COLOUR"))
s.add (c [Ids::name]);
}
return s;
}
void AppearanceSettings::updateColourScheme()
{
applyToLookAndFeel (LookAndFeel::getDefaultLookAndFeel());
IntrojucerApp::getApp().mainWindowList.sendLookAndFeelChange();
}
void AppearanceSettings::applyToLookAndFeel (LookAndFeel& lf) const
{
for (int i = 0; i < AppearanceColours::numColours; ++i)
{
Colour col;
if (getColour (AppearanceColours::colours[i].name, col))
{
if (AppearanceColours::colours[i].mustBeOpaque)
col = Colours::white.overlaidWith (col);
if (! AppearanceColours::colours[i].applyToEditorOnly)
lf.setColour (AppearanceColours::colours[i].colourID, col);
}
}
lf.setColour (ScrollBar::thumbColourId, lf.findColour (mainBackgroundColourId).contrasting().withAlpha (0.13f));
}
void AppearanceSettings::applyToCodeEditor (CodeEditorComponent& editor) const
{
CodeEditorComponent::ColourScheme cs (editor.getColourScheme());
for (int i = cs.types.size(); --i >= 0;)
{
CodeEditorComponent::ColourScheme::TokenType& t = cs.types.getReference(i);
getColour (t.name, t.colour);
}
editor.setColourScheme (cs);
editor.setFont (getCodeFont());
for (int i = 0; i < AppearanceColours::numColours; ++i)
{
if (AppearanceColours::colours[i].applyToEditorOnly)
{
Colour col;
if (getColour (AppearanceColours::colours[i].name, col))
editor.setColour (AppearanceColours::colours[i].colourID, col);
}
}
editor.setColour (ScrollBar::thumbColourId, editor.findColour (CodeEditorComponent::backgroundColourId)
.contrasting()
.withAlpha (0.13f));
}
Font AppearanceSettings::getCodeFont() const
{
const String fontString (settings [Ids::font].toString());
if (fontString.isEmpty())
return getDefaultCodeFont();
return Font::fromString (fontString);
}
Value AppearanceSettings::getCodeFontValue()
{
return settings.getPropertyAsValue (Ids::font, nullptr);
}
Value AppearanceSettings::getColourValue (const String& colourName)
{
ValueTree c (settings.getChildWithProperty (Ids::name, colourName));
if (! c.isValid())
{
c = ValueTree ("COLOUR");
c.setProperty (Ids::name, colourName, nullptr);
settings.addChild (c, -1, nullptr);
}
return c.getPropertyAsValue (Ids::colour, nullptr);
}
bool AppearanceSettings::getColour (const String& name, Colour& result) const
{
const ValueTree colour (settings.getChildWithProperty (Ids::name, name));
if (colour.isValid())
{
result = Colour::fromString (colour [Ids::colour].toString());
return true;
}
return false;
}
//==============================================================================
struct AppearanceEditor
{
class FontScanPanel : public Component,
private Timer
{
public:
FontScanPanel()
{
fontsToScan = Font::findAllTypefaceNames();
startTimer (1);
}
void paint (Graphics& g) override
{
g.fillAll (Colours::darkgrey);
g.setFont (14.0f);
g.setColour (Colours::white);
g.drawFittedText ("Scanning for fonts..", getLocalBounds(), Justification::centred, 2);
const int size = 30;
getLookAndFeel().drawSpinningWaitAnimation (g, Colours::white, (getWidth() - size) / 2, getHeight() / 2 - 50, size, size);
}
void timerCallback() override
{
repaint();
if (fontsToScan.size() == 0)
{
getAppSettings().monospacedFontNames = fontsFound;
if (DialogWindow* w = findParentComponentOfClass<DialogWindow>())
w->setContentOwned (new EditorPanel(), false);
}
else
{
if (isMonospacedTypeface (fontsToScan[0]))
fontsFound.add (fontsToScan[0]);
fontsToScan.remove (0);
}
}
// A rather hacky trick to select only the fixed-pitch fonts..
// This is unfortunately a bit slow, but will work on all platforms.
static bool isMonospacedTypeface (const String& name)
{
const Font font (name, 20.0f, Font::plain);
const int width = font.getStringWidth ("....");
return width == font.getStringWidth ("WWWW")
&& width == font.getStringWidth ("0000")
&& width == font.getStringWidth ("1111")
&& width == font.getStringWidth ("iiii");
}
StringArray fontsToScan, fontsFound;
};
//==============================================================================
class EditorPanel : public Component,
private ButtonListener
{
public:
EditorPanel()
: loadButton ("Load Scheme..."),
saveButton ("Save Scheme...")
{
rebuildProperties();
addAndMakeVisible (panel);
loadButton.setColour (TextButton::buttonColourId, Colours::lightgrey.withAlpha (0.5f));
saveButton.setColour (TextButton::buttonColourId, Colours::lightgrey.withAlpha (0.5f));
loadButton.setColour (TextButton::textColourOffId, Colours::white);
saveButton.setColour (TextButton::textColourOffId, Colours::white);
addAndMakeVisible (loadButton);
addAndMakeVisible (saveButton);
loadButton.addListener (this);
saveButton.addListener (this);
}
void rebuildProperties()
{
AppearanceSettings& scheme = getAppSettings().appearance;
Array <PropertyComponent*> props;
Value fontValue (scheme.getCodeFontValue());
props.add (FontNameValueSource::createProperty ("Code Editor Font", fontValue));
props.add (FontSizeValueSource::createProperty ("Font Size", fontValue));
const StringArray colourNames (scheme.getColourNames());
for (int i = 0; i < colourNames.size(); ++i)
props.add (new ColourPropertyComponent (nullptr, colourNames[i],
scheme.getColourValue (colourNames[i]),
Colours::white, false));
panel.clear();
panel.addProperties (props);
}
void resized() override
{
Rectangle<int> r (getLocalBounds());
panel.setBounds (r.removeFromTop (getHeight() - 28).reduced (4, 2));
loadButton.setBounds (r.removeFromLeft (getWidth() / 2).reduced (10, 4));
saveButton.setBounds (r.reduced (10, 3));
}
private:
PropertyPanel panel;
TextButton loadButton, saveButton;
void buttonClicked (Button* b) override
{
if (b == &loadButton)
loadScheme();
else
saveScheme();
}
void saveScheme()
{
FileChooser fc ("Select a file in which to save this colour-scheme...",
getAppSettings().appearance.getSchemesFolder()
.getNonexistentChildFile ("Scheme", AppearanceSettings::getSchemeFileSuffix()),
AppearanceSettings::getSchemeFileWildCard());
if (fc.browseForFileToSave (true))
{
File file (fc.getResult().withFileExtension (AppearanceSettings::getSchemeFileSuffix()));
getAppSettings().appearance.writeToFile (file);
getAppSettings().appearance.refreshPresetSchemeList();
}
}
void loadScheme()
{
FileChooser fc ("Please select a colour-scheme file to load...",
getAppSettings().appearance.getSchemesFolder(),
AppearanceSettings::getSchemeFileWildCard());
if (fc.browseForFileToOpen())
{
if (getAppSettings().appearance.readFromFile (fc.getResult()))
rebuildProperties();
}
}
JUCE_DECLARE_NON_COPYABLE (EditorPanel)
};
//==============================================================================
class FontNameValueSource : public ValueSourceFilter
{
public:
FontNameValueSource (const Value& source) : ValueSourceFilter (source) {}
var getValue() const override
{
return Font::fromString (sourceValue.toString()).getTypefaceName();
}
void setValue (const var& newValue) override
{
Font font (Font::fromString (sourceValue.toString()));
font.setTypefaceName (newValue.toString().isEmpty() ? Font::getDefaultMonospacedFontName()
: newValue.toString());
sourceValue = font.toString();
}
static ChoicePropertyComponent* createProperty (const String& title, const Value& value)
{
StringArray fontNames = getAppSettings().monospacedFontNames;
Array<var> values;
values.add (Font::getDefaultMonospacedFontName());
values.add (var());
for (int i = 0; i < fontNames.size(); ++i)
values.add (fontNames[i]);
StringArray names;
names.add ("<Default Monospaced>");
names.add (String::empty);
names.addArray (getAppSettings().monospacedFontNames);
return new ChoicePropertyComponent (Value (new FontNameValueSource (value)),
title, names, values);
}
};
//==============================================================================
class FontSizeValueSource : public ValueSourceFilter
{
public:
FontSizeValueSource (const Value& source) : ValueSourceFilter (source) {}
var getValue() const override
{
return Font::fromString (sourceValue.toString()).getHeight();
}
void setValue (const var& newValue) override
{
sourceValue = Font::fromString (sourceValue.toString()).withHeight (newValue).toString();
}
static PropertyComponent* createProperty (const String& title, const Value& value)
{
return new SliderPropertyComponent (Value (new FontSizeValueSource (value)),
title, 5.0, 40.0, 0.1, 0.5);
}
};
};
void AppearanceSettings::showEditorWindow (ScopedPointer<Component>& ownerPointer)
{
if (ownerPointer != nullptr)
{
ownerPointer->toFront (true);
}
else
{
Component* content;
if (getAppSettings().monospacedFontNames.size() == 0)
content = new AppearanceEditor::FontScanPanel();
else
content = new AppearanceEditor::EditorPanel();
const int width = 350;
new FloatingToolWindow ("Appearance Settings",
"colourSchemeEditorPos",
content, ownerPointer,
width, 500,
width, 200, width, 1000);
}
}
//==============================================================================
IntrojucerLookAndFeel::IntrojucerLookAndFeel()
{
setColour (mainBackgroundColourId, Colour::greyLevel (0.8f));
}
int IntrojucerLookAndFeel::getTabButtonBestWidth (TabBarButton&, int) { return 120; }
static Colour getTabBackgroundColour (TabBarButton& button)
{
const Colour bkg (button.findColour (mainBackgroundColourId).contrasting (0.15f));
if (button.isFrontTab())
return bkg.overlaidWith (Colours::yellow.withAlpha (0.5f));
return bkg;
}
void IntrojucerLookAndFeel::drawTabButton (TabBarButton& button, Graphics& g, bool isMouseOver, bool isMouseDown)
{
const Rectangle<int> activeArea (button.getActiveArea());
const Colour bkg (getTabBackgroundColour (button));
g.setGradientFill (ColourGradient (bkg.brighter (0.1f), 0, (float) activeArea.getY(),
bkg.darker (0.1f), 0, (float) activeArea.getBottom(), false));
g.fillRect (activeArea);
g.setColour (button.findColour (mainBackgroundColourId).darker (0.3f));
g.drawRect (activeArea);
const float alpha = button.isEnabled() ? ((isMouseOver || isMouseDown) ? 1.0f : 0.8f) : 0.3f;
const Colour col (bkg.contrasting().withMultipliedAlpha (alpha));
TextLayout textLayout;
LookAndFeel_V3::createTabTextLayout (button, (float) activeArea.getWidth(), (float) activeArea.getHeight(), col, textLayout);
textLayout.draw (g, button.getTextArea().toFloat());
}
static Range<float> getBrightnessRange (const Image& im)
{
float minB = 1.0f, maxB = 0;
const int w = im.getWidth();
const int h = im.getHeight();
for (int y = 0; y < h; ++y)
{
for (int x = 0; x < w; ++x)
{
const float b = im.getPixelAt (x, y).getBrightness();
minB = jmin (minB, b);
maxB = jmax (maxB, b);
}
}
return Range<float> (minB, maxB);
}
void IntrojucerLookAndFeel::fillWithBackgroundTexture (Graphics& g)
{
const Colour bkg (findColour (mainBackgroundColourId));
if (backgroundTextureBaseColour != bkg)
{
backgroundTextureBaseColour = bkg;
const Image original (ImageCache::getFromMemory (BinaryData::background_tile_png,
BinaryData::background_tile_pngSize));
const int w = original.getWidth();
const int h = original.getHeight();
backgroundTexture = Image (Image::RGB, w, h, false);
const Range<float> brightnessRange (getBrightnessRange (original));
const float brightnessOffset = (brightnessRange.getStart() + brightnessRange.getEnd()) / 2.0f;
const float brightnessScale = 0.025f / brightnessRange.getLength();
const float bkgB = bkg.getBrightness();
for (int y = 0; y < h; ++y)
{
for (int x = 0; x < w; ++x)
{
const float b = (original.getPixelAt (x, y).getBrightness() - brightnessOffset) * brightnessScale;
backgroundTexture.setPixelAt (x, y, bkg.withBrightness (jlimit (0.0f, 1.0f, bkgB + b)));
}
}
}
g.setTiledImageFill (backgroundTexture, 0, 0, 1.0f);
g.fillAll();
}
void IntrojucerLookAndFeel::fillWithBackgroundTexture (Component& c, Graphics& g)
{
dynamic_cast<IntrojucerLookAndFeel&> (c.getLookAndFeel()).fillWithBackgroundTexture (g);
}
@@ -0,0 +1,100 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#ifndef __JUCER_APPEARANCESETTINGS_JUCEHEADER__
#define __JUCER_APPEARANCESETTINGS_JUCEHEADER__
class AppearanceSettings : private ValueTree::Listener
{
public:
AppearanceSettings (bool updateAppWhenChanged);
bool readFromFile (const File& file);
bool readFromXML (const XmlElement&);
bool writeToFile (const File& file) const;
void updateColourScheme();
void applyToCodeEditor (CodeEditorComponent& editor) const;
StringArray getColourNames() const;
Value getColourValue (const String& colourName);
bool getColour (const String& name, Colour& resultIfFound) const;
Font getCodeFont() const;
Value getCodeFontValue();
ValueTree settings;
static File getSchemesFolder();
StringArray getPresetSchemes();
void refreshPresetSchemeList();
void selectPresetScheme (int index);
static Font getDefaultCodeFont();
static void showEditorWindow (ScopedPointer<Component>& ownerPointer);
static const char* getSchemeFileSuffix() { return ".scheme"; }
static const char* getSchemeFileWildCard() { return "*.scheme"; }
private:
Array<File> presetSchemeFiles;
static void writeDefaultSchemeFile (const String& xml, const String& name);
void applyToLookAndFeel (LookAndFeel&) const;
void valueTreePropertyChanged (ValueTree&, const Identifier&) override { updateColourScheme(); }
void valueTreeChildAdded (ValueTree&, ValueTree&) override { updateColourScheme(); }
void valueTreeChildRemoved (ValueTree&, ValueTree&) override { updateColourScheme(); }
void valueTreeChildOrderChanged (ValueTree&) override { updateColourScheme(); }
void valueTreeParentChanged (ValueTree&) override { updateColourScheme(); }
void valueTreeRedirected (ValueTree&) override { updateColourScheme(); }
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AppearanceSettings)
};
//==============================================================================
class IntrojucerLookAndFeel : public LookAndFeel_V3
{
public:
IntrojucerLookAndFeel();
void fillWithBackgroundTexture (Graphics&);
static void fillWithBackgroundTexture (Component&, Graphics&);
void drawTabButton (TabBarButton& button, Graphics&, bool isMouseOver, bool isMouseDown) override;
void drawTabAreaBehindFrontButton (TabbedButtonBar&, Graphics&, int, int) override {}
int getTabButtonBestWidth (TabBarButton&, int tabDepth) override;
private:
Image backgroundTexture;
Colour backgroundTextureBaseColour;
};
#endif // __JUCER_APPEARANCESETTINGS_JUCEHEADER__
@@ -0,0 +1,587 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#ifndef __JUCER_APPLICATION_JUCEHEADER__
#define __JUCER_APPLICATION_JUCEHEADER__
#include "../jucer_Headers.h"
#include "jucer_MainWindow.h"
#include "jucer_CommandLine.h"
#include "../Project/jucer_Module.h"
#include "jucer_AutoUpdater.h"
#include "../Code Editor/jucer_SourceCodeEditor.h"
void createGUIEditorMenu (PopupMenu&);
void handleGUIEditorMenuCommand (int);
void registerGUIEditorCommands();
//==============================================================================
class IntrojucerApp : public JUCEApplication
{
public:
//==============================================================================
IntrojucerApp() : isRunningCommandLine (false) {}
//==============================================================================
void initialise (const String& commandLine) override
{
LookAndFeel::setDefaultLookAndFeel (&lookAndFeel);
settings = new StoredSettings();
if (commandLine.isNotEmpty())
{
const int appReturnCode = performCommandLine (commandLine);
if (appReturnCode != commandLineNotPerformed)
{
isRunningCommandLine = true;
setApplicationReturnValue (appReturnCode);
quit();
return;
}
}
if (sendCommandLineToPreexistingInstance())
{
DBG ("Another instance is running - quitting...");
quit();
return;
}
initialiseLogger ("log_");
icons = new Icons();
initCommandManager();
menuModel = new MainMenuModel();
doExtraInitialisation();
settings->appearance.refreshPresetSchemeList();
ImageCache::setCacheTimeout (30 * 1000);
if (commandLine.trim().isNotEmpty() && ! commandLine.trim().startsWithChar ('-'))
anotherInstanceStarted (commandLine);
else
mainWindowList.reopenLastProjects();
mainWindowList.createWindowIfNoneAreOpen();
#if JUCE_MAC
MenuBarModel::setMacMainMenu (menuModel, nullptr, "Open Recent");
#endif
versionChecker = new LatestVersionChecker();
}
void shutdown() override
{
versionChecker = nullptr;
appearanceEditorWindow = nullptr;
utf8Window = nullptr;
svgPathWindow = nullptr;
mainWindowList.forceCloseAllWindows();
openDocumentManager.clear();
#if JUCE_MAC
MenuBarModel::setMacMainMenu (nullptr);
#endif
menuModel = nullptr;
commandManager = nullptr;
settings = nullptr;
LookAndFeel::setDefaultLookAndFeel (nullptr);
if (! isRunningCommandLine)
Logger::writeToLog ("Shutdown");
deleteLogger();
}
//==============================================================================
void systemRequestedQuit() override
{
if (ModalComponentManager::getInstance()->cancelAllModalComponents())
{
new AsyncQuitRetrier();
}
else
{
if (closeAllMainWindows())
quit();
}
}
//==============================================================================
const String getApplicationName() override { return "Introjucer"; }
const String getApplicationVersion() override { return ProjectInfo::versionString; }
bool moreThanOneInstanceAllowed() override
{
return true; // this is handled manually in initialise()
}
void anotherInstanceStarted (const String& commandLine) override
{
openFile (File (commandLine.unquoted()));
}
static IntrojucerApp& getApp()
{
IntrojucerApp* const app = dynamic_cast<IntrojucerApp*> (JUCEApplication::getInstance());
jassert (app != nullptr);
return *app;
}
static ApplicationCommandManager& getCommandManager()
{
ApplicationCommandManager* cm = IntrojucerApp::getApp().commandManager;
jassert (cm != nullptr);
return *cm;
}
//==============================================================================
class MainMenuModel : public MenuBarModel
{
public:
MainMenuModel()
{
setApplicationCommandManagerToWatch (&getCommandManager());
}
StringArray getMenuBarNames() override
{
return getApp().getMenuNames();
}
PopupMenu getMenuForIndex (int /*topLevelMenuIndex*/, const String& menuName) override
{
PopupMenu menu;
getApp().createMenu (menu, menuName);
return menu;
}
void menuItemSelected (int menuItemID, int /*topLevelMenuIndex*/) override
{
getApp().handleMainMenuCommand (menuItemID);
}
};
enum
{
recentProjectsBaseID = 100,
activeDocumentsBaseID = 300,
colourSchemeBaseID = 1000
};
virtual StringArray getMenuNames()
{
const char* const names[] = { "File", "Edit", "View", "Window", "GUI Editor", "Tools", nullptr };
return StringArray (names);
}
virtual void 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 == "Window") createWindowMenu (menu);
else if (menuName == "Tools") createToolsMenu (menu);
else if (menuName == "GUI Editor") createGUIEditorMenu (menu);
else jassertfalse; // names have changed?
}
virtual void createFileMenu (PopupMenu& menu)
{
menu.addCommandItem (commandManager, CommandIDs::newProject);
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::open);
PopupMenu recentFiles;
settings->recentFiles.createPopupMenuItems (recentFiles, recentProjectsBaseID, true, true);
menu.addSubMenu ("Open Recent", recentFiles);
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::closeDocument);
menu.addCommandItem (commandManager, CommandIDs::saveDocument);
menu.addCommandItem (commandManager, CommandIDs::saveDocumentAs);
menu.addCommandItem (commandManager, CommandIDs::saveAll);
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::closeProject);
menu.addCommandItem (commandManager, CommandIDs::saveProject);
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::openInIDE);
menu.addCommandItem (commandManager, CommandIDs::saveAndOpenInIDE);
#if ! JUCE_MAC
menu.addSeparator();
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::quit);
#endif
}
virtual void createEditMenu (PopupMenu& menu)
{
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::undo);
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::redo);
menu.addSeparator();
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::cut);
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::copy);
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::paste);
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::del);
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::selectAll);
menu.addCommandItem (commandManager, StandardApplicationCommandIDs::deselectAll);
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::showFindPanel);
menu.addCommandItem (commandManager, CommandIDs::findSelection);
menu.addCommandItem (commandManager, CommandIDs::findNext);
menu.addCommandItem (commandManager, CommandIDs::findPrevious);
}
virtual void createViewMenu (PopupMenu& menu)
{
menu.addCommandItem (commandManager, CommandIDs::showFilePanel);
menu.addCommandItem (commandManager, CommandIDs::showConfigPanel);
menu.addCommandItem (commandManager, CommandIDs::showProjectSettings);
menu.addCommandItem (commandManager, CommandIDs::showProjectModules);
menu.addSeparator();
createColourSchemeItems (menu);
}
void createColourSchemeItems (PopupMenu& menu)
{
menu.addCommandItem (commandManager, CommandIDs::showAppearanceSettings);
const StringArray presetSchemes (settings->appearance.getPresetSchemes());
if (presetSchemes.size() > 0)
{
PopupMenu schemes;
for (int i = 0; i < presetSchemes.size(); ++i)
schemes.addItem (colourSchemeBaseID + i, presetSchemes[i]);
menu.addSubMenu ("Colour Scheme", schemes);
}
}
virtual void createWindowMenu (PopupMenu& menu)
{
menu.addCommandItem (commandManager, CommandIDs::closeWindow);
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::goToPreviousDoc);
menu.addCommandItem (commandManager, CommandIDs::goToNextDoc);
menu.addCommandItem (commandManager, CommandIDs::goToCounterpart);
menu.addSeparator();
const int numDocs = jmin (50, openDocumentManager.getNumOpenDocuments());
for (int i = 0; i < numDocs; ++i)
{
OpenDocumentManager::Document* doc = openDocumentManager.getOpenDocument(i);
menu.addItem (activeDocumentsBaseID + i, doc->getName());
}
menu.addSeparator();
menu.addCommandItem (commandManager, CommandIDs::closeAllDocuments);
}
virtual void createToolsMenu (PopupMenu& menu)
{
menu.addCommandItem (commandManager, CommandIDs::showUTF8Tool);
menu.addCommandItem (commandManager, CommandIDs::showSVGPathTool);
menu.addCommandItem (commandManager, CommandIDs::showTranslationTool);
}
virtual void handleMainMenuCommand (int menuItemID)
{
if (menuItemID >= recentProjectsBaseID && menuItemID < recentProjectsBaseID + 100)
{
// open a file from the "recent files" menu
openFile (settings->recentFiles.getFile (menuItemID - recentProjectsBaseID));
}
else if (menuItemID >= activeDocumentsBaseID && menuItemID < activeDocumentsBaseID + 200)
{
if (OpenDocumentManager::Document* doc = openDocumentManager.getOpenDocument (menuItemID - activeDocumentsBaseID))
mainWindowList.openDocument (doc, true);
else
jassertfalse;
}
else if (menuItemID >= colourSchemeBaseID && menuItemID < colourSchemeBaseID + 200)
{
settings->appearance.selectPresetScheme (menuItemID - colourSchemeBaseID);
}
else
{
handleGUIEditorMenuCommand (menuItemID);
}
}
//==============================================================================
void getAllCommands (Array <CommandID>& commands) override
{
JUCEApplication::getAllCommands (commands);
const CommandID ids[] = { CommandIDs::newProject,
CommandIDs::open,
CommandIDs::closeAllDocuments,
CommandIDs::saveAll,
CommandIDs::showAppearanceSettings,
CommandIDs::showUTF8Tool,
CommandIDs::showSVGPathTool };
commands.addArray (ids, numElementsInArray (ids));
}
void getCommandInfo (CommandID commandID, ApplicationCommandInfo& result) override
{
switch (commandID)
{
case CommandIDs::newProject:
result.setInfo ("New Project...", "Creates a new Jucer project", CommandCategories::general, 0);
result.defaultKeypresses.add (KeyPress ('n', ModifierKeys::commandModifier, 0));
break;
case CommandIDs::open:
result.setInfo ("Open...", "Opens a Jucer project", CommandCategories::general, 0);
result.defaultKeypresses.add (KeyPress ('o', ModifierKeys::commandModifier, 0));
break;
case CommandIDs::showAppearanceSettings:
result.setInfo ("Fonts and Colours...", "Shows the appearance settings window.", CommandCategories::general, 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::saveAll:
result.setInfo ("Save All", "Saves all open documents", CommandCategories::general, 0);
result.defaultKeypresses.add (KeyPress ('s', ModifierKeys::commandModifier | ModifierKeys::altModifier, 0));
break;
case CommandIDs::showUTF8Tool:
result.setInfo ("UTF-8 String-Literal Helper", "Shows the UTF-8 string literal utility", CommandCategories::general, 0);
break;
case CommandIDs::showSVGPathTool:
result.setInfo ("SVG Path Helper", "Shows the SVG->Path data conversion utility", CommandCategories::general, 0);
break;
default:
JUCEApplication::getCommandInfo (commandID, result);
break;
}
}
bool perform (const InvocationInfo& info) override
{
switch (info.commandID)
{
case CommandIDs::newProject: createNewProject(); break;
case CommandIDs::open: askUserToOpenFile(); break;
case CommandIDs::saveAll: openDocumentManager.saveAll(); break;
case CommandIDs::closeAllDocuments: closeAllDocuments (true); break;
case CommandIDs::showUTF8Tool: showUTF8ToolWindow (utf8Window); break;
case CommandIDs::showSVGPathTool: showSVGPathDataToolWindow (svgPathWindow); break;
case CommandIDs::showAppearanceSettings: AppearanceSettings::showEditorWindow (appearanceEditorWindow); break;
default: return JUCEApplication::perform (info);
}
return true;
}
//==============================================================================
void createNewProject()
{
MainWindow* mw = mainWindowList.getOrCreateEmptyWindow();
mw->showNewProjectWizard();
mainWindowList.avoidSuperimposedWindows (mw);
}
virtual void updateNewlyOpenedProject (Project&) {}
void askUserToOpenFile()
{
FileChooser fc ("Open File");
if (fc.browseForFileToOpen())
openFile (fc.getResult());
}
bool openFile (const File& file)
{
return mainWindowList.openFile (file);
}
bool closeAllDocuments (bool askUserToSave)
{
return openDocumentManager.closeAll (askUserToSave);
}
virtual bool closeAllMainWindows()
{
return mainWindowList.askAllWindowsToClose();
}
//==============================================================================
void initialiseLogger (const char* filePrefix)
{
if (logger == nullptr)
{
logger = FileLogger::createDateStampedLogger (getLogFolderName(), filePrefix, ".txt",
getApplicationName() + " " + getApplicationVersion()
+ " --- Build date: " __DATE__);
Logger::setCurrentLogger (logger);
}
}
struct FileWithTime
{
FileWithTime (const File& f) : file (f), time (f.getLastModificationTime()) {}
FileWithTime() {}
bool operator< (const FileWithTime& other) const { return time < other.time; }
bool operator== (const FileWithTime& other) const { return time == other.time; }
File file;
Time time;
};
void deleteLogger()
{
const int maxNumLogFilesToKeep = 50;
Logger::setCurrentLogger (nullptr);
if (logger != nullptr)
{
Array<File> logFiles;
logger->getLogFile().getParentDirectory().findChildFiles (logFiles, File::findFiles, false);
if (logFiles.size() > maxNumLogFilesToKeep)
{
Array <FileWithTime> files;
for (int i = 0; i < logFiles.size(); ++i)
files.addUsingDefaultSort (logFiles.getReference(i));
for (int i = 0; i < files.size() - maxNumLogFilesToKeep; ++i)
files.getReference(i).file.deleteFile();
}
}
logger = nullptr;
}
virtual void doExtraInitialisation() {}
virtual void addExtraConfigItems (Project&, TreeViewItem&) {}
#if JUCE_LINUX
virtual String getLogFolderName() const { return "~/.config/Introjucer/Logs"; }
#else
virtual String getLogFolderName() const { return "com.juce.introjucer"; }
#endif
virtual PropertiesFile::Options getPropertyFileOptionsFor (const String& filename)
{
PropertiesFile::Options options;
options.applicationName = filename;
options.filenameSuffix = "settings";
options.osxLibrarySubFolder = "Application Support";
#if JUCE_LINUX
options.folderName = "~/.config/Introjucer";
#else
options.folderName = "Introjucer";
#endif
return options;
}
virtual Component* createProjectContentComponent() const
{
return new ProjectContentComponent();
}
//==============================================================================
IntrojucerLookAndFeel lookAndFeel;
ScopedPointer<StoredSettings> settings;
ScopedPointer<Icons> icons;
ScopedPointer<MainMenuModel> menuModel;
MainWindowList mainWindowList;
OpenDocumentManager openDocumentManager;
ScopedPointer<ApplicationCommandManager> commandManager;
ScopedPointer<Component> appearanceEditorWindow, utf8Window, svgPathWindow;
ScopedPointer<FileLogger> logger;
bool isRunningCommandLine;
private:
ScopedPointer<LatestVersionChecker> versionChecker;
class AsyncQuitRetrier : private Timer
{
public:
AsyncQuitRetrier() { startTimer (500); }
void timerCallback() override
{
stopTimer();
delete this;
if (JUCEApplicationBase* app = JUCEApplicationBase::getInstance())
app->systemRequestedQuit();
}
JUCE_DECLARE_NON_COPYABLE (AsyncQuitRetrier)
};
void initCommandManager()
{
commandManager = new ApplicationCommandManager();
commandManager->registerAllCommandsForTarget (this);
{
CodeDocument doc;
CppCodeEditorComponent ed (File::nonexistent, doc);
commandManager->registerAllCommandsForTarget (&ed);
}
registerGUIEditorCommands();
}
};
#endif // __JUCER_APPLICATION_JUCEHEADER__
@@ -0,0 +1,422 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#ifndef JUCER_AUTOUPDATER_H_INCLUDED
#define JUCER_AUTOUPDATER_H_INCLUDED
//==============================================================================
class LatestVersionChecker : private Thread,
private Timer
{
public:
LatestVersionChecker() : Thread ("Updater"),
hasAttemptedToReadWebsite (false)
{
startTimer (2000);
}
~LatestVersionChecker()
{
stopThread (20000);
}
static URL getLatestVersionURL()
{
return URL ("http://www.juce.com/juce/updates/updatelist.php");
}
void checkForNewVersion()
{
hasAttemptedToReadWebsite = true;
{
const ScopedPointer<InputStream> in (getLatestVersionURL().createInputStream (false));
if (in == nullptr || threadShouldExit())
return; // can't connect: fail silently.
jsonReply = JSON::parse (in->readEntireStreamAsString());
}
if (threadShouldExit())
return;
if (jsonReply.isArray() || jsonReply.isObject())
startTimer (100);
}
void processResult (var reply)
{
if (reply.isArray())
{
askUserAboutNewVersion (VersionInfo (reply[0]));
}
else if (reply.isObject())
{
// In the far-distant future, this may be contacting a defunct
// URL, so hopefully the website will contain a helpful message
// for the user..
String message = reply.getProperty ("message", var()).toString();
if (message.isNotEmpty())
{
AlertWindow::showMessageBox (AlertWindow::WarningIcon,
TRANS("JUCE Updater"),
message);
}
}
}
struct VersionInfo
{
VersionInfo (var v)
{
version = v.getProperty ("version", var()).toString().trim();
url = v.getProperty (
#if JUCE_MAC
"url_osx",
#elif JUCE_WINDOWS
"url_win",
#elif JUCE_LINUX
"url_linux",
#endif
var()).toString();
}
bool isDifferentVersionToCurrent() const
{
return version != JUCE_STRINGIFY(JUCE_MAJOR_VERSION)
"." JUCE_STRINGIFY(JUCE_MINOR_VERSION)
"." JUCE_STRINGIFY(JUCE_BUILDNUMBER)
&& version.containsChar ('.')
&& version.length() > 2;
}
String version;
URL url;
};
void askUserAboutNewVersion (const VersionInfo& info)
{
if (info.isDifferentVersionToCurrent())
{
File appParentFolder (File::getSpecialLocation (File::currentApplicationFile).getParentDirectory());
if (isZipFolder (appParentFolder))
{
int result = AlertWindow::showYesNoCancelBox (AlertWindow::InfoIcon,
TRANS("Download JUCE version 123?").replace ("123", info.version),
TRANS("A new version of JUCE is available - would you like to overwrite the folder:\n\n"
"xfldrx\n\n"
" ..with the latest version from juce.com?\n\n"
"(Please note that this will overwrite everything in that folder!)")
.replace ("xfldrx", appParentFolder.getFullPathName()),
TRANS("Overwrite"),
TRANS("Choose another folder..."),
TRANS("Cancel"));
if (result == 1)
DownloadNewVersionThread::performDownload (info.url, appParentFolder);
if (result == 2)
askUserForLocationToDownload (info);
}
else
{
if (AlertWindow::showOkCancelBox (AlertWindow::InfoIcon,
TRANS("Download JUCE version 123?").replace ("123", info.version),
TRANS("A new version of JUCE is available - would you like to download it?")))
askUserForLocationToDownload (info);
}
}
}
void askUserForLocationToDownload (const VersionInfo& info)
{
File targetFolder (findDefaultModulesFolder());
if (isJuceModulesFolder (targetFolder))
targetFolder = targetFolder.getParentDirectory();
FileChooser chooser (TRANS("Please select the location into which you'd like to install the new version"),
targetFolder);
if (chooser.browseForDirectory())
{
targetFolder = chooser.getResult();
if (isJuceModulesFolder (targetFolder))
targetFolder = targetFolder.getParentDirectory();
if (targetFolder.getChildFile ("JUCE").isDirectory())
targetFolder = targetFolder.getChildFile ("JUCE");
if (targetFolder.getChildFile (".git").isDirectory())
{
AlertWindow::showMessageBox (AlertWindow::WarningIcon,
TRANS ("Downloading new JUCE version"),
TRANS ("This folder is a GIT repository!\n\n"
"You should use a \"git pull\" to update it to the latest version. "
"Or to use the Introjucer to get an update, you should select an empty "
"folder into which you'd like to download the new code."));
return;
}
if (isJuceFolder (targetFolder))
{
if (! AlertWindow::showOkCancelBox (AlertWindow::WarningIcon,
TRANS("Overwrite existing JUCE folder?"),
TRANS("Do you want to overwrite the folder:\n\n"
"xfldrx\n\n"
" ..with the latest version from juce.com?\n\n"
"(Please note that this will overwrite everything in that folder!)")
.replace ("xfldrx", targetFolder.getFullPathName())))
{
return;
}
}
else
{
targetFolder = targetFolder.getChildFile ("JUCE").getNonexistentSibling();
}
DownloadNewVersionThread::performDownload (info.url, targetFolder);
}
}
static bool isZipFolder (const File& f)
{
return f.getChildFile ("modules").isDirectory()
&& f.getChildFile ("extras").isDirectory()
&& f.getChildFile ("examples").isDirectory()
&& ! f.getChildFile (".git").isDirectory();
}
private:
void timerCallback() override
{
stopTimer();
if (hasAttemptedToReadWebsite)
processResult (jsonReply);
else
startThread (3);
}
void run() override
{
checkForNewVersion();
}
var jsonReply;
bool hasAttemptedToReadWebsite;
URL newVersionToDownload;
//==============================================================================
class DownloadNewVersionThread : public ThreadWithProgressWindow
{
public:
DownloadNewVersionThread (URL u, File target)
: ThreadWithProgressWindow ("Downloading New Version", true, true),
result (Result::ok()),
url (u), targetFolder (target)
{
}
static void performDownload (URL u, File targetFolder)
{
DownloadNewVersionThread d (u, targetFolder);
if (d.runThread())
{
if (d.result.failed())
{
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
"Installation Failed",
d.result.getErrorMessage());
}
else
{
new RelaunchTimer (targetFolder);
}
}
}
void run() override
{
setProgress (-1.0);
MemoryBlock zipData;
result = download (zipData);
if (result.wasOk() && ! threadShouldExit())
result = unzip (zipData);
}
Result download (MemoryBlock& dest)
{
setStatusMessage ("Downloading...");
const ScopedPointer<InputStream> in (url.createInputStream (false, nullptr, nullptr, String::empty, 10000));
if (in != nullptr)
{
int64 total = 0;
MemoryOutputStream mo (dest, true);
for (;;)
{
if (threadShouldExit())
return Result::fail ("cancel");
int64 written = mo.writeFromInputStream (*in, 8192);
if (written == 0)
break;
total += written;
setStatusMessage (String (TRANS ("Downloading... (123)"))
.replace ("123", File::descriptionOfSizeInBytes (total)));
}
return Result::ok();
}
return Result::fail ("Failed to download from: " + url.toString (false));
}
Result unzip (const MemoryBlock& data)
{
setStatusMessage ("Installing...");
File unzipTarget;
bool isUsingTempFolder = false;
{
MemoryInputStream input (data, false);
ZipFile zip (input);
if (zip.getNumEntries() == 0)
return Result::fail ("The downloaded file wasn't a valid JUCE file!");
unzipTarget = targetFolder;
if (unzipTarget.exists())
{
isUsingTempFolder = true;
unzipTarget = targetFolder.getNonexistentSibling();
if (! unzipTarget.createDirectory())
return Result::fail ("Couldn't create a folder to unzip the new version!");
}
Result r (zip.uncompressTo (unzipTarget));
if (r.failed())
{
if (isUsingTempFolder)
unzipTarget.deleteRecursively();
return r;
}
}
if (isUsingTempFolder)
{
File oldFolder (targetFolder.getSiblingFile (targetFolder.getFileNameWithoutExtension() + "_old").getNonexistentSibling());
if (! targetFolder.moveFileTo (oldFolder))
{
unzipTarget.deleteRecursively();
return Result::fail ("Could not remove the existing folder!");
}
if (! unzipTarget.moveFileTo (targetFolder))
{
unzipTarget.deleteRecursively();
return Result::fail ("Could not overwrite the existing folder!");
}
}
return Result::ok();
}
Result result;
URL url;
File targetFolder;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DownloadNewVersionThread)
};
struct RelaunchTimer : private Timer
{
RelaunchTimer (const File& f) : parentFolder (f)
{
startTimer (1500);
}
void timerCallback() override
{
stopTimer();
File app = parentFolder.getChildFile (
#if JUCE_MAC
"Introjucer.app");
#elif JUCE_WINDOWS
"Introjucer.exe");
#elif JUCE_LINUX
"Introjucer");
#endif
JUCEApplication::quit();
if (app.exists())
{
app.setExecutePermission (true);
#if JUCE_MAC
app.getChildFile("Contents")
.getChildFile("MacOS")
.getChildFile("Introjucer").setExecutePermission (true);
#endif
app.startAsProcess();
}
delete this;
}
File parentFolder;
};
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LatestVersionChecker)
};
#endif // JUCER_AUTOUPDATER_H_INCLUDED
@@ -0,0 +1,73 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
/**
A namespace to hold all the possible command IDs.
*/
namespace CommandIDs
{
enum
{
newProject = 0x200010,
open = 0x200020,
closeDocument = 0x200030,
saveDocument = 0x200040,
saveDocumentAs = 0x200041,
closeProject = 0x200051,
saveProject = 0x200060,
saveAll = 0x200080,
openInIDE = 0x200072,
saveAndOpenInIDE = 0x200073,
showUTF8Tool = 0x200076,
showAppearanceSettings = 0x200077,
showConfigPanel = 0x200074,
showFilePanel = 0x200078,
showTranslationTool = 0x200079,
showProjectSettings = 0x20007a,
showProjectModules = 0x20007b,
showSVGPathTool = 0x20007c,
closeWindow = 0x201001,
closeAllDocuments = 0x201000,
goToPreviousDoc = 0x201002,
goToNextDoc = 0x201003,
goToCounterpart = 0x201004,
deleteSelectedItem = 0x201005,
showFindPanel = 0x2010a0,
findSelection = 0x2010a1,
findNext = 0x2010a2,
findPrevious = 0x2010a3
};
}
namespace CommandCategories
{
static const char* const general = "General";
static const char* const editing = "Editing";
static const char* const view = "View";
static const char* const windows = "Windows";
}
@@ -0,0 +1,382 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#include "../Project/jucer_Project.h"
#include "../Project/jucer_Module.h"
#include "jucer_CommandLine.h"
//==============================================================================
namespace
{
static void hideDockIcon()
{
#if JUCE_MAC
Process::setDockIconVisible (false);
#endif
}
static File getFile (const String& filename)
{
return File::getCurrentWorkingDirectory().getChildFile (filename.unquoted());
}
static bool matchArgument (const String& arg, const String& possible)
{
return arg == possible
|| arg == "-" + possible
|| arg == "--" + possible;
}
static bool checkArgumentCount (const StringArray& args, int minNumArgs)
{
if (args.size() < minNumArgs)
{
std::cout << "Not enough arguments!" << std::endl;
return false;
}
return true;
}
//==============================================================================
struct LoadedProject
{
LoadedProject()
{
hideDockIcon();
}
int load (const File& projectFile)
{
hideDockIcon();
if (! projectFile.exists())
{
std::cout << "The file " << projectFile.getFullPathName() << " doesn't exist!" << std::endl;
return 1;
}
if (! projectFile.hasFileExtension (Project::projectFileExtension))
{
std::cout << projectFile.getFullPathName() << " isn't a valid jucer project file!" << std::endl;
return 1;
}
project = new Project (projectFile);
if (! project->loadFrom (projectFile, true))
{
project = nullptr;
std::cout << "Failed to load the project file: " << projectFile.getFullPathName() << std::endl;
return 1;
}
return 0;
}
int save (bool justSaveResources)
{
if (project != nullptr)
{
Result error (justSaveResources ? project->saveResourcesOnly (project->getFile())
: project->saveProject (project->getFile(), true));
if (error.failed())
{
std::cout << "Error when saving: " << error.getErrorMessage() << std::endl;
return 1;
}
project = nullptr;
}
return 0;
}
ScopedPointer<Project> project;
};
//==============================================================================
/* Running a command-line of the form "introjucer --resave foobar.jucer" will try to load
that project and re-export all of its targets.
*/
static int resaveProject (const StringArray& args, bool justSaveResources)
{
if (! checkArgumentCount (args, 2))
return 1;
LoadedProject proj;
int res = proj.load (getFile (args[1]));
if (res != 0)
return res;
std::cout << (justSaveResources ? "Re-saving project resources: "
: "Re-saving file: ")
<< proj.project->getFile().getFullPathName() << std::endl;
return proj.save (justSaveResources);
}
//==============================================================================
static int setVersion (const StringArray& args)
{
if (! checkArgumentCount (args, 3))
return 1;
LoadedProject proj;
int res = proj.load (getFile (args[2]));
if (res != 0)
return res;
String version (args[1].trim());
std::cout << "Setting project version: " << version << std::endl;
proj.project->getVersionValue() = version;
return proj.save (false);
}
//==============================================================================
static int bumpVersion (const StringArray& args)
{
if (! checkArgumentCount (args, 2))
return 1;
LoadedProject proj;
int res = proj.load (getFile (args[1]));
if (res != 0)
return res;
String version = proj.project->getVersionString();
version = version.upToLastOccurrenceOf (".", true, false)
+ String (version.getTrailingIntValue() + 1);
std::cout << "Bumping project version to: " << version << std::endl;
proj.project->getVersionValue() = version;
return proj.save (false);
}
//==============================================================================
int showStatus (const StringArray& args)
{
hideDockIcon();
if (! checkArgumentCount (args, 2))
return 1;
LoadedProject proj;
int res = proj.load (getFile (args[1]));
if (res != 0)
return res;
std::cout << "Project file: " << proj.project->getFile().getFullPathName() << std::endl
<< "Name: " << proj.project->getTitle() << std::endl
<< "UID: " << proj.project->getProjectUID() << std::endl;
EnabledModuleList& modules = proj.project->getModules();
const int numModules = modules.getNumModules();
if (numModules > 0)
{
std::cout << "Modules:" << std::endl;
for (int i = 0; i < numModules; ++i)
std::cout << " " << modules.getModuleID (i) << std::endl;
}
return 0;
}
//==============================================================================
static String getModulePackageName (const LibraryModule& module)
{
return module.getID() + ".jucemodule";
}
static int zipModule (const File& targetFolder, const File& moduleFolder)
{
jassert (targetFolder.isDirectory());
const File moduleFolderParent (moduleFolder.getParentDirectory());
LibraryModule module (moduleFolder.getChildFile (ModuleDescription::getManifestFileName()));
if (! module.isValid())
{
std::cout << moduleFolder.getFullPathName() << " is not a valid module folder!" << std::endl;
return 1;
}
const File targetFile (targetFolder.getChildFile (getModulePackageName (module)));
ZipFile::Builder zip;
{
DirectoryIterator i (moduleFolder, true, "*", File::findFiles);
while (i.next())
if (! i.getFile().isHidden())
zip.addFile (i.getFile(), 9, i.getFile().getRelativePathFrom (moduleFolderParent));
}
std::cout << "Writing: " << targetFile.getFullPathName() << std::endl;
TemporaryFile temp (targetFile);
ScopedPointer<FileOutputStream> out (temp.getFile().createOutputStream());
bool ok = out != nullptr && zip.writeToStream (*out, nullptr);
out = nullptr;
ok = ok && temp.overwriteTargetFileWithTemporary();
if (! ok)
{
std::cout << "Failed to write to the target file: " << targetFile.getFullPathName() << std::endl;
return 1;
}
return 0;
}
static int buildModules (const StringArray& args, const bool buildAllWithIndex)
{
hideDockIcon();
if (! checkArgumentCount (args, 3))
return 1;
const File targetFolder (getFile (args[1]));
if (! targetFolder.isDirectory())
{
std::cout << "The first argument must be the directory to put the result." << std::endl;
return 1;
}
if (buildAllWithIndex)
{
const File folderToSearch (getFile (args[2]));
DirectoryIterator i (folderToSearch, false, "*", File::findDirectories);
var infoList;
while (i.next())
{
LibraryModule module (i.getFile().getChildFile (ModuleDescription::getManifestFileName()));
if (module.isValid())
{
const int result = zipModule (targetFolder, i.getFile());
if (result != 0)
return result;
var moduleInfo (new DynamicObject());
moduleInfo.getDynamicObject()->setProperty ("file", getModulePackageName (module));
moduleInfo.getDynamicObject()->setProperty ("info", module.moduleInfo.moduleInfo);
infoList.append (moduleInfo);
}
}
const File indexFile (targetFolder.getChildFile ("modulelist"));
std::cout << "Writing: " << indexFile.getFullPathName() << std::endl;
indexFile.replaceWithText (JSON::toString (infoList), false, false);
}
else
{
for (int i = 2; i < args.size(); ++i)
{
const int result = zipModule (targetFolder, getFile (args[i]));
if (result != 0)
return result;
}
}
return 0;
}
//==============================================================================
static int showHelp()
{
hideDockIcon();
std::cout << "The Introjucer!" << std::endl
<< std::endl
<< "Usage: " << std::endl
<< std::endl
<< " introjucer --resave project_file" << std::endl
<< " Resaves all files and resources in a project." << std::endl
<< std::endl
<< " introjucer --resave-resources project_file" << std::endl
<< " Resaves just the binary resources for a project." << std::endl
<< std::endl
<< " introjucer --set-version version_number project_file" << std::endl
<< " Updates the version number in a project." << std::endl
<< std::endl
<< " introjucer --bump-version project_file" << std::endl
<< " Updates the minor version number in a project by 1." << std::endl
<< std::endl
<< " introjucer --status project_file" << std::endl
<< " Displays information about a project." << std::endl
<< std::endl
<< " introjucer --buildmodule target_folder module_folder" << std::endl
<< " Zips a module into a downloadable file format." << std::endl
<< std::endl
<< " introjucer --buildallmodules target_folder module_folder" << std::endl
<< " Zips all modules in a given folder and creates an index for them." << std::endl
<< std::endl;
return 0;
}
}
//==============================================================================
int performCommandLine (const String& commandLine)
{
StringArray args;
args.addTokens (commandLine, true);
args.trim();
if (matchArgument (args[0], "help")) return showHelp();
if (matchArgument (args[0], "resave")) return resaveProject (args, false);
if (matchArgument (args[0], "resave-resources")) return resaveProject (args, true);
if (matchArgument (args[0], "set-version")) return setVersion (args);
if (matchArgument (args[0], "bump-version")) return bumpVersion (args);
if (matchArgument (args[0], "buildmodule")) return buildModules (args, false);
if (matchArgument (args[0], "buildallmodules")) return buildModules (args, true);
if (matchArgument (args[0], "status")) return showStatus (args);
return commandLineNotPerformed;
}
@@ -0,0 +1,34 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#ifndef __JUCER_COMMANDLINE_JUCEHEADER__
#define __JUCER_COMMANDLINE_JUCEHEADER__
int performCommandLine (const String& commandLine);
enum { commandLineNotPerformed = 0x72346231 };
#endif // __JUCER_COMMANDLINE_JUCEHEADER__
@@ -0,0 +1,58 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#ifndef __JUCER_COMMONHEADERS_JUCEHEADER__
#define __JUCER_COMMONHEADERS_JUCEHEADER__
#include "../Utility/jucer_StoredSettings.h"
#include "../Utility/jucer_Icons.h"
#include "../Utility/jucer_MiscUtilities.h"
#include "../Utility/jucer_CodeHelpers.h"
#include "../Utility/jucer_FileHelpers.h"
#include "../Utility/jucer_RelativePath.h"
#include "../Utility/jucer_ValueSourceHelpers.h"
#include "../Utility/jucer_PresetIDs.h"
#include "jucer_CommandIDs.h"
//==============================================================================
const char* const projectItemDragType = "Project Items";
const char* const drawableItemDragType = "Drawable Items";
const char* const componentItemDragType = "Components";
const char* const sourceFileExtensions = "cpp;mm;m;c;cc;cxx;s;asm";
const char* const headerFileExtensions = "h;hpp;hxx;hh;inl";
const char* const cOrCppFileExtensions = "cpp;cc;cxx;c";
const char* const cppFileExtensions = "cpp;cc;cxx";
const char* const objCFileExtensions = "mm;m";
const char* const asmFileExtensions = "s;S;asm";
const char* const sourceOrHeaderFileExtensions = "cpp;mm;m;c;cc;cxx;s;S;asm;h;hpp;hxx;hh;inl";
const char* const fileTypesToCompileByDefault = "cpp;mm;c;m;cc;cxx;s;S;asm;r";
enum ColourIds
{
mainBackgroundColourId = 0x2340000,
};
#endif // __JUCER_COMMONHEADERS_JUCEHEADER__
@@ -0,0 +1,59 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#include "jucer_DocumentEditorComponent.h"
#include "../Project/jucer_ProjectContentComponent.h"
#include "../Application/jucer_Application.h"
//==============================================================================
DocumentEditorComponent::DocumentEditorComponent (OpenDocumentManager::Document* doc)
: document (doc)
{
IntrojucerApp::getApp().openDocumentManager.addListener (this);
}
DocumentEditorComponent::~DocumentEditorComponent()
{
IntrojucerApp::getApp().openDocumentManager.removeListener (this);
}
bool DocumentEditorComponent::documentAboutToClose (OpenDocumentManager::Document* closingDoc)
{
if (document == closingDoc)
{
jassert (document != nullptr);
if (ProjectContentComponent* pcc = findParentComponentOfClass<ProjectContentComponent>())
pcc->hideDocument (document);
}
return true;
}
void DocumentEditorComponent::setEditedState (bool /*hasBeenEdited*/)
{
if (ProjectContentComponent* pcc = findParentComponentOfClass<ProjectContentComponent>())
pcc->updateMainWindowTitle();
}
@@ -0,0 +1,56 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#ifndef __JUCER_DOCUMENTEDITORCOMPONENT_JUCEHEADER__
#define __JUCER_DOCUMENTEDITORCOMPONENT_JUCEHEADER__
#include "jucer_OpenDocumentManager.h"
//==============================================================================
/**
*/
class DocumentEditorComponent : public Component,
public OpenDocumentManager::DocumentCloseListener
{
public:
//==============================================================================
DocumentEditorComponent (OpenDocumentManager::Document* document);
~DocumentEditorComponent();
OpenDocumentManager::Document* getDocument() const { return document; }
bool documentAboutToClose (OpenDocumentManager::Document*) override;
protected:
OpenDocumentManager::Document* document;
void setEditedState (bool hasBeenEdited);
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DocumentEditorComponent)
};
#endif // __JUCER_DOCUMENTEDITORCOMPONENT_JUCEHEADER__
@@ -0,0 +1,131 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#ifndef __JUCER_FILEPREVIEWCOMPONENT_JUCEHEADER__
#define __JUCER_FILEPREVIEWCOMPONENT_JUCEHEADER__
//==============================================================================
/**
*/
class ItemPreviewComponent : public Component
{
public:
ItemPreviewComponent (const File& f) : file (f)
{
setOpaque (true);
tryToLoadImage();
}
void paint (Graphics& g)
{
IntrojucerLookAndFeel::fillWithBackgroundTexture (*this, g);
if (drawable != nullptr)
{
Rectangle<float> contentBounds (drawable->getDrawableBounds());
if (DrawableComposite* dc = dynamic_cast<DrawableComposite*> (drawable.get()))
{
Rectangle<float> r (dc->getContentArea().resolve (nullptr));
if (! r.isEmpty())
contentBounds = r;
}
Rectangle<float> area = RectanglePlacement (RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize)
.appliedTo (contentBounds, Rectangle<float> (4.0f, 22.0f, getWidth() - 8.0f, getHeight() - 26.0f));
Path p;
p.addRectangle (area);
DropShadow (Colours::black.withAlpha (0.5f), 6, Point<int> (0, 1)).drawForPath (g, p);
g.fillCheckerBoard (area.getSmallestIntegerContainer(), 24, 24,
Colour (0xffffffff), Colour (0xffeeeeee));
drawable->draw (g, 1.0f, RectanglePlacement (RectanglePlacement::stretchToFit)
.getTransformToFit (contentBounds, area.toFloat()));
}
g.setFont (Font (14.0f, Font::bold));
g.setColour (findColour (mainBackgroundColourId).contrasting());
g.drawMultiLineText (facts.joinIntoString ("\n"), 10, 15, getWidth() - 16);
}
private:
StringArray facts;
File file;
ScopedPointer<Drawable> drawable;
void tryToLoadImage()
{
facts.clear();
facts.add (file.getFullPathName());
drawable = nullptr;
{
ScopedPointer<InputStream> input (file.createInputStream());
if (input != nullptr)
{
const int64 totalSize = input->getTotalLength();
String formatName;
if (ImageFileFormat* format = ImageFileFormat::findImageFormatForStream (*input))
formatName = " " + format->getFormatName();
input = nullptr;
Image image (ImageCache::getFromFile (file));
if (image.isValid())
{
DrawableImage* d = new DrawableImage();
d->setImage (image);
drawable = d;
facts.add (String (image.getWidth()) + " x " + String (image.getHeight()) + formatName);
}
if (totalSize > 0)
facts.add (File::descriptionOfSizeInBytes (totalSize));
}
}
if (drawable == nullptr)
{
ScopedPointer<XmlElement> svg (XmlDocument::parse (file));
if (svg != nullptr)
drawable = Drawable::createFromSVG (*svg);
}
facts.removeEmptyStrings (true);
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ItemPreviewComponent)
};
#endif // __JUCER_FILEPREVIEWCOMPONENT_JUCEHEADER__
@@ -0,0 +1,27 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#include "jucer_Application.h"
START_JUCE_APPLICATION (IntrojucerApp)
@@ -0,0 +1,581 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#include "../jucer_Headers.h"
#include "jucer_Application.h"
#include "jucer_MainWindow.h"
#include "jucer_OpenDocumentManager.h"
#include "../Code Editor/jucer_SourceCodeEditor.h"
#include "../Wizards/jucer_NewProjectWizardClasses.h"
#include "../Utility/jucer_JucerTreeViewBase.h"
//==============================================================================
MainWindow::MainWindow()
: DocumentWindow (IntrojucerApp::getApp().getApplicationName(),
Colour::greyLevel (0.6f),
DocumentWindow::allButtons,
false)
{
setUsingNativeTitleBar (true);
#if ! JUCE_MAC
setMenuBar (IntrojucerApp::getApp().menuModel);
#endif
createProjectContentCompIfNeeded();
setResizable (true, false);
centreWithSize (800, 600);
ApplicationCommandManager& commandManager = IntrojucerApp::getCommandManager();
// Register all the app commands..
commandManager.registerAllCommandsForTarget (this);
commandManager.registerAllCommandsForTarget (getProjectContentComponent());
// update key mappings..
{
commandManager.getKeyMappings()->resetToDefaultMappings();
ScopedPointer<XmlElement> keys (getGlobalProperties().getXmlValue ("keyMappings"));
if (keys != nullptr)
commandManager.getKeyMappings()->restoreFromXml (*keys);
addKeyListener (commandManager.getKeyMappings());
}
// don't want the window to take focus when the title-bar is clicked..
setWantsKeyboardFocus (false);
getLookAndFeel().setColour (ColourSelector::backgroundColourId, Colours::transparentBlack);
setResizeLimits (600, 500, 32000, 32000);
}
MainWindow::~MainWindow()
{
#if ! JUCE_MAC
setMenuBar (nullptr);
#endif
removeKeyListener (IntrojucerApp::getCommandManager().getKeyMappings());
// save the current size and position to our settings file..
getGlobalProperties().setValue ("lastMainWindowPos", getWindowStateAsString());
clearContentComponent();
currentProject = nullptr;
}
void MainWindow::createProjectContentCompIfNeeded()
{
if (getProjectContentComponent() == nullptr)
{
clearContentComponent();
setContentOwned (IntrojucerApp::getApp().createProjectContentComponent(), false);
jassert (getProjectContentComponent() != nullptr);
}
}
void MainWindow::makeVisible()
{
restoreWindowPosition();
setVisible (true);
addToDesktop(); // (must add before restoring size so that fullscreen will work)
restoreWindowPosition();
getContentComponent()->grabKeyboardFocus();
}
ProjectContentComponent* MainWindow::getProjectContentComponent() const
{
return dynamic_cast<ProjectContentComponent*> (getContentComponent());
}
void MainWindow::closeButtonPressed()
{
IntrojucerApp::getApp().mainWindowList.closeWindow (this);
}
bool MainWindow::closeProject (Project* project)
{
jassert (project == currentProject && project != nullptr);
if (project == nullptr)
return true;
project->getStoredProperties().setValue (getProjectWindowPosName(), getWindowStateAsString());
if (ProjectContentComponent* const pcc = getProjectContentComponent())
{
pcc->saveTreeViewState();
pcc->saveOpenDocumentList();
pcc->hideEditor();
}
if (! IntrojucerApp::getApp().openDocumentManager.closeAllDocumentsUsingProject (*project, true))
return false;
FileBasedDocument::SaveResult r = project->saveIfNeededAndUserAgrees();
if (r == FileBasedDocument::savedOk)
{
setProject (nullptr);
return true;
}
return false;
}
bool MainWindow::closeCurrentProject()
{
return currentProject == nullptr || closeProject (currentProject);
}
void MainWindow::setProject (Project* newProject)
{
createProjectContentCompIfNeeded();
getProjectContentComponent()->setProject (newProject);
currentProject = newProject;
getProjectContentComponent()->updateMainWindowTitle();
IntrojucerApp::getCommandManager().commandStatusChanged();
}
void MainWindow::restoreWindowPosition()
{
String windowState;
if (currentProject != nullptr)
windowState = currentProject->getStoredProperties().getValue (getProjectWindowPosName());
if (windowState.isEmpty())
windowState = getGlobalProperties().getValue ("lastMainWindowPos");
restoreWindowStateFromString (windowState);
}
bool MainWindow::canOpenFile (const File& file) const
{
return (! file.isDirectory())
&& (file.hasFileExtension (Project::projectFileExtension)
|| IntrojucerApp::getApp().openDocumentManager.canOpenFile (file));
}
bool MainWindow::openFile (const File& file)
{
createProjectContentCompIfNeeded();
if (file.hasFileExtension (Project::projectFileExtension))
{
ScopedPointer<Project> newDoc (new Project (file));
Result result (newDoc->loadFrom (file, true));
if (result.wasOk() && closeCurrentProject())
{
setProject (newDoc);
newDoc.release()->setChangedFlag (false);
jassert (getProjectContentComponent() != nullptr);
getProjectContentComponent()->reloadLastOpenDocuments();
return true;
}
}
else if (file.exists())
{
return getProjectContentComponent()->showEditorForFile (file, true);
}
return false;
}
bool MainWindow::isInterestedInFileDrag (const StringArray& filenames)
{
for (int i = filenames.size(); --i >= 0;)
if (canOpenFile (File (filenames[i])))
return true;
return false;
}
void MainWindow::filesDropped (const StringArray& filenames, int /*mouseX*/, int /*mouseY*/)
{
for (int i = filenames.size(); --i >= 0;)
{
const File f (filenames[i]);
if (canOpenFile (f) && openFile (f))
break;
}
}
bool MainWindow::shouldDropFilesWhenDraggedExternally (const DragAndDropTarget::SourceDetails& sourceDetails,
StringArray& files, bool& canMoveFiles)
{
if (TreeView* tv = dynamic_cast<TreeView*> (sourceDetails.sourceComponent.get()))
{
Array<JucerTreeViewBase*> selected;
for (int i = tv->getNumSelectedItems(); --i >= 0;)
if (JucerTreeViewBase* b = dynamic_cast<JucerTreeViewBase*> (tv->getSelectedItem(i)))
selected.add (b);
if (selected.size() > 0)
{
for (int i = selected.size(); --i >= 0;)
{
if (JucerTreeViewBase* jtvb = selected.getUnchecked(i))
{
const File f (jtvb->getDraggableFile());
if (f.existsAsFile())
files.add (f.getFullPathName());
}
}
canMoveFiles = false;
return files.size() > 0;
}
}
return false;
}
void MainWindow::activeWindowStatusChanged()
{
DocumentWindow::activeWindowStatusChanged();
if (ProjectContentComponent* const pcc = getProjectContentComponent())
pcc->updateMissingFileStatuses();
IntrojucerApp::getApp().openDocumentManager.reloadModifiedFiles();
}
void MainWindow::updateTitle (const String& documentName)
{
String name (IntrojucerApp::getApp().getApplicationName());
if (currentProject != nullptr)
name << " - " << currentProject->getDocumentTitle();
if (documentName.isNotEmpty())
name << " - " << documentName;
setName (name);
}
void MainWindow::showNewProjectWizard()
{
jassert (currentProject == nullptr);
setContentOwned (createNewProjectWizardComponent(), true);
centreWithSize (900, 630);
setVisible (true);
addToDesktop();
getContentComponent()->grabKeyboardFocus();
}
//==============================================================================
ApplicationCommandTarget* MainWindow::getNextCommandTarget()
{
return nullptr;
}
void MainWindow::getAllCommands (Array <CommandID>& commands)
{
const CommandID ids[] = { CommandIDs::closeWindow };
commands.addArray (ids, numElementsInArray (ids));
}
void MainWindow::getCommandInfo (const CommandID commandID, ApplicationCommandInfo& result)
{
switch (commandID)
{
case CommandIDs::closeWindow:
result.setInfo ("Close Window", "Closes the current window", CommandCategories::general, 0);
result.defaultKeypresses.add (KeyPress ('w', ModifierKeys::commandModifier, 0));
break;
default:
break;
}
}
bool MainWindow::perform (const InvocationInfo& info)
{
switch (info.commandID)
{
case CommandIDs::closeWindow:
closeButtonPressed();
break;
default:
return false;
}
return true;
}
//==============================================================================
MainWindowList::MainWindowList()
{
}
void MainWindowList::forceCloseAllWindows()
{
windows.clear();
}
bool MainWindowList::askAllWindowsToClose()
{
saveCurrentlyOpenProjectList();
while (windows.size() > 0)
{
if (! windows[0]->closeCurrentProject())
return false;
windows.remove (0);
}
return true;
}
void MainWindowList::createWindowIfNoneAreOpen()
{
if (windows.size() == 0)
createNewMainWindow()->showNewProjectWizard();
}
void MainWindowList::closeWindow (MainWindow* w)
{
jassert (windows.contains (w));
#if ! JUCE_MAC
if (windows.size() == 1)
{
JUCEApplicationBase::getInstance()->systemRequestedQuit();
}
else
#endif
{
if (w->closeCurrentProject())
{
windows.removeObject (w);
saveCurrentlyOpenProjectList();
}
}
}
void MainWindowList::openDocument (OpenDocumentManager::Document* doc, bool grabFocus)
{
getOrCreateFrontmostWindow()->getProjectContentComponent()->showDocument (doc, grabFocus);
}
bool MainWindowList::openFile (const File& file)
{
for (int i = windows.size(); --i >= 0;)
{
MainWindow* const w = windows.getUnchecked(i);
if (w->getProject() != nullptr && w->getProject()->getFile() == file)
{
w->toFront (true);
return true;
}
}
if (file.hasFileExtension (Project::projectFileExtension))
{
MainWindow* const w = getOrCreateEmptyWindow();
bool ok = w->openFile (file);
w->makeVisible();
avoidSuperimposedWindows (w);
return ok;
}
if (file.exists())
return getOrCreateFrontmostWindow()->openFile (file);
return false;
}
MainWindow* MainWindowList::createNewMainWindow()
{
MainWindow* const w = new MainWindow();
windows.add (w);
w->restoreWindowPosition();
avoidSuperimposedWindows (w);
return w;
}
MainWindow* MainWindowList::getOrCreateFrontmostWindow()
{
if (windows.size() == 0)
{
MainWindow* w = createNewMainWindow();
avoidSuperimposedWindows (w);
w->makeVisible();
return w;
}
for (int i = Desktop::getInstance().getNumComponents(); --i >= 0;)
{
MainWindow* mw = dynamic_cast<MainWindow*> (Desktop::getInstance().getComponent (i));
if (windows.contains (mw))
return mw;
}
return windows.getLast();
}
MainWindow* MainWindowList::getOrCreateEmptyWindow()
{
if (windows.size() == 0)
return createNewMainWindow();
for (int i = Desktop::getInstance().getNumComponents(); --i >= 0;)
{
MainWindow* mw = dynamic_cast<MainWindow*> (Desktop::getInstance().getComponent (i));
if (windows.contains (mw) && mw->getProject() == nullptr)
return mw;
}
return createNewMainWindow();
}
void MainWindowList::updateAllWindowTitles()
{
for (int i = 0; i < windows.size(); ++i)
if (ProjectContentComponent* pc = windows.getUnchecked(i)->getProjectContentComponent())
pc->updateMainWindowTitle();
}
void MainWindowList::avoidSuperimposedWindows (MainWindow* const mw)
{
for (int i = windows.size(); --i >= 0;)
{
MainWindow* const other = windows.getUnchecked(i);
const Rectangle<int> b1 (mw->getBounds());
const Rectangle<int> b2 (other->getBounds());
if (mw != other
&& std::abs (b1.getX() - b2.getX()) < 3
&& std::abs (b1.getY() - b2.getY()) < 3
&& std::abs (b1.getRight() - b2.getRight()) < 3
&& std::abs (b1.getBottom() - b2.getBottom()) < 3)
{
int dx = 40, dy = 30;
if (b1.getCentreX() >= mw->getScreenBounds().getCentreX()) dx = -dx;
if (b1.getCentreY() >= mw->getScreenBounds().getCentreY()) dy = -dy;
mw->setBounds (b1.translated (dx, dy));
}
}
}
void MainWindowList::saveCurrentlyOpenProjectList()
{
Array<File> projects;
Desktop& desktop = Desktop::getInstance();
for (int i = 0; i < desktop.getNumComponents(); ++i)
{
if (MainWindow* const mw = dynamic_cast<MainWindow*> (desktop.getComponent(i)))
if (Project* p = mw->getProject())
projects.add (p->getFile());
}
getAppSettings().setLastProjects (projects);
}
void MainWindowList::reopenLastProjects()
{
Array<File> projects (getAppSettings().getLastProjects());
for (int i = 0; i < projects.size(); ++ i)
openFile (projects.getReference(i));
}
void MainWindowList::sendLookAndFeelChange()
{
for (int i = windows.size(); --i >= 0;)
windows.getUnchecked(i)->sendLookAndFeelChange();
}
Project* MainWindowList::getFrontmostProject()
{
Desktop& desktop = Desktop::getInstance();
for (int i = desktop.getNumComponents(); --i >= 0;)
if (MainWindow* const mw = dynamic_cast<MainWindow*> (desktop.getComponent(i)))
if (Project* p = mw->getProject())
return p;
return nullptr;
}
File findDefaultModulesFolder (bool mustContainJuceCoreModule)
{
const MainWindowList& windows = IntrojucerApp::getApp().mainWindowList;
for (int i = windows.windows.size(); --i >= 0;)
{
if (Project* p = windows.windows.getUnchecked (i)->getProject())
{
const File f (EnabledModuleList::findDefaultModulesFolder (*p));
if (isJuceModulesFolder (f) || (f.isDirectory() && ! mustContainJuceCoreModule))
return f;
}
}
if (mustContainJuceCoreModule)
return findDefaultModulesFolder (false);
File f (File::getSpecialLocation (File::currentApplicationFile));
for (;;)
{
File parent (f.getParentDirectory());
if (parent == f || ! parent.isDirectory())
break;
if (isJuceFolder (parent))
return parent.getChildFile ("modules");
f = parent;
}
return File::nonexistent;
}
@@ -0,0 +1,123 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#ifndef __JUCER_MAINWINDOW_JUCEHEADER__
#define __JUCER_MAINWINDOW_JUCEHEADER__
#include "../Project/jucer_ProjectContentComponent.h"
//==============================================================================
/**
The big top-level window where everything happens.
*/
class MainWindow : public DocumentWindow,
public ApplicationCommandTarget,
public FileDragAndDropTarget,
public DragAndDropContainer
{
public:
//==============================================================================
MainWindow();
~MainWindow();
//==============================================================================
void closeButtonPressed() override;
//==============================================================================
bool canOpenFile (const File& file) const;
bool openFile (const File& file);
void setProject (Project* newProject);
Project* getProject() const { return currentProject; }
void makeVisible();
void restoreWindowPosition();
bool closeProject (Project* project);
bool closeCurrentProject();
void showNewProjectWizard();
bool isInterestedInFileDrag (const StringArray& files) override;
void filesDropped (const StringArray& filenames, int mouseX, int mouseY) override;
void activeWindowStatusChanged() override;
void updateTitle (const String& documentName);
ProjectContentComponent* getProjectContentComponent() const;
//==============================================================================
ApplicationCommandTarget* getNextCommandTarget() override;
void getAllCommands (Array <CommandID>& commands) override;
void getCommandInfo (CommandID commandID, ApplicationCommandInfo& result) override;
bool perform (const InvocationInfo& info) override;
bool shouldDropFilesWhenDraggedExternally (const DragAndDropTarget::SourceDetails& sourceDetails,
StringArray& files, bool& canMoveFiles) override;
private:
ScopedPointer <Project> currentProject;
static const char* getProjectWindowPosName() { return "projectWindowPos"; }
void createProjectContentCompIfNeeded();
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow)
};
//==============================================================================
class MainWindowList
{
public:
MainWindowList();
void forceCloseAllWindows();
bool askAllWindowsToClose();
void closeWindow (MainWindow*);
void createWindowIfNoneAreOpen();
void openDocument (OpenDocumentManager::Document*, bool grabFocus);
bool openFile (const File& file);
MainWindow* createNewMainWindow();
MainWindow* getOrCreateFrontmostWindow();
MainWindow* getOrCreateEmptyWindow();
Project* getFrontmostProject();
void reopenLastProjects();
void saveCurrentlyOpenProjectList();
void updateAllWindowTitles();
void avoidSuperimposedWindows (MainWindow*);
void sendLookAndFeelChange();
OwnedArray<MainWindow> windows;
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindowList)
};
#endif // __JUCER_MAINWINDOW_JUCEHEADER__
@@ -0,0 +1,424 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#include "jucer_OpenDocumentManager.h"
#include "jucer_FilePreviewComponent.h"
#include "../Code Editor/jucer_SourceCodeEditor.h"
#include "jucer_Application.h"
//==============================================================================
class UnknownDocument : public OpenDocumentManager::Document
{
public:
UnknownDocument (Project* p, const File& f)
: project (p), file (f)
{
reloadFromFile();
}
//==============================================================================
struct Type : public OpenDocumentManager::DocumentType
{
bool canOpenFile (const File&) override { return true; }
Document* openFile (Project* p, const File& f) override { return new UnknownDocument (p, f); }
};
//==============================================================================
bool loadedOk() const override { return true; }
bool isForFile (const File& f) const override { return file == f; }
bool isForNode (const ValueTree&) const override { return false; }
bool refersToProject (Project& p) const override { return project == &p; }
Project* getProject() const override { return project; }
bool needsSaving() const override { return false; }
bool save() override { return true; }
bool saveAs() override { return false; }
bool hasFileBeenModifiedExternally() override { return fileModificationTime != file.getLastModificationTime(); }
void reloadFromFile() override { fileModificationTime = file.getLastModificationTime(); }
String getName() const override { return file.getFileName(); }
File getFile() const override { return file; }
Component* createEditor() override { return new ItemPreviewComponent (file); }
Component* createViewer() override { return createEditor(); }
void fileHasBeenRenamed (const File& newFile) override { file = newFile; }
String getState() const override { return String::empty; }
void restoreState (const String&) override {}
String getType() const override
{
if (file.getFileExtension().isNotEmpty())
return file.getFileExtension() + " file";
jassertfalse;
return "Unknown";
}
private:
Project* const project;
File file;
Time fileModificationTime;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (UnknownDocument)
};
//==============================================================================
OpenDocumentManager::DocumentType* createGUIDocumentType();
OpenDocumentManager::OpenDocumentManager()
{
registerType (new UnknownDocument::Type());
registerType (new SourceCodeDocument::Type());
registerType (createGUIDocumentType());
}
OpenDocumentManager::~OpenDocumentManager()
{
}
void OpenDocumentManager::clear()
{
documents.clear();
types.clear();
}
//==============================================================================
void OpenDocumentManager::registerType (DocumentType* type)
{
types.add (type);
}
//==============================================================================
void OpenDocumentManager::addListener (DocumentCloseListener* listener)
{
listeners.addIfNotAlreadyThere (listener);
}
void OpenDocumentManager::removeListener (DocumentCloseListener* listener)
{
listeners.removeFirstMatchingValue (listener);
}
//==============================================================================
bool OpenDocumentManager::canOpenFile (const File& file)
{
for (int i = types.size(); --i >= 0;)
if (types.getUnchecked(i)->canOpenFile (file))
return true;
return false;
}
OpenDocumentManager::Document* OpenDocumentManager::openFile (Project* project, const File& file)
{
for (int i = documents.size(); --i >= 0;)
if (documents.getUnchecked(i)->isForFile (file))
return documents.getUnchecked(i);
Document* d = nullptr;
for (int i = types.size(); --i >= 0 && d == nullptr;)
{
if (types.getUnchecked(i)->canOpenFile (file))
{
d = types.getUnchecked(i)->openFile (project, file);
jassert (d != nullptr);
}
}
jassert (d != nullptr); // should always at least have been picked up by UnknownDocument
documents.add (d);
IntrojucerApp::getCommandManager().commandStatusChanged();
return d;
}
int OpenDocumentManager::getNumOpenDocuments() const
{
return documents.size();
}
OpenDocumentManager::Document* OpenDocumentManager::getOpenDocument (int index) const
{
return documents.getUnchecked (index);
}
FileBasedDocument::SaveResult OpenDocumentManager::saveIfNeededAndUserAgrees (OpenDocumentManager::Document* doc)
{
if (! doc->needsSaving())
return FileBasedDocument::savedOk;
const int r = AlertWindow::showYesNoCancelBox (AlertWindow::QuestionIcon,
TRANS("Closing document..."),
TRANS("Do you want to save the changes to \"")
+ doc->getName() + "\"?",
TRANS("Save"),
TRANS("Discard changes"),
TRANS("Cancel"));
if (r == 1) // save changes
return doc->save() ? FileBasedDocument::savedOk
: FileBasedDocument::failedToWriteToFile;
if (r == 2) // discard changes
return FileBasedDocument::savedOk;
return FileBasedDocument::userCancelledSave;
}
bool OpenDocumentManager::closeDocument (int index, bool saveIfNeeded)
{
if (Document* doc = documents [index])
{
if (saveIfNeeded)
if (saveIfNeededAndUserAgrees (doc) != FileBasedDocument::savedOk)
return false;
bool canClose = true;
for (int i = listeners.size(); --i >= 0;)
if (DocumentCloseListener* l = listeners[i])
if (! l->documentAboutToClose (doc))
canClose = false;
if (! canClose)
return false;
documents.remove (index);
IntrojucerApp::getCommandManager().commandStatusChanged();
}
return true;
}
bool OpenDocumentManager::closeDocument (Document* document, bool saveIfNeeded)
{
return closeDocument (documents.indexOf (document), saveIfNeeded);
}
void OpenDocumentManager::closeFile (const File& f, bool saveIfNeeded)
{
for (int i = documents.size(); --i >= 0;)
if (Document* d = documents[i])
if (d->isForFile (f))
closeDocument (i, saveIfNeeded);
}
bool OpenDocumentManager::closeAll (bool askUserToSave)
{
for (int i = getNumOpenDocuments(); --i >= 0;)
if (! closeDocument (i, askUserToSave))
return false;
return true;
}
bool OpenDocumentManager::closeAllDocumentsUsingProject (Project& project, bool saveIfNeeded)
{
for (int i = documents.size(); --i >= 0;)
if (Document* d = documents[i])
if (d->refersToProject (project))
if (! closeDocument (i, saveIfNeeded))
return false;
return true;
}
bool OpenDocumentManager::anyFilesNeedSaving() const
{
for (int i = documents.size(); --i >= 0;)
if (documents.getUnchecked (i)->needsSaving())
return true;
return false;
}
bool OpenDocumentManager::saveAll()
{
for (int i = documents.size(); --i >= 0;)
{
if (! documents.getUnchecked (i)->save())
return false;
IntrojucerApp::getApp().mainWindowList.updateAllWindowTitles();
IntrojucerApp::getCommandManager().commandStatusChanged();
}
return true;
}
void OpenDocumentManager::reloadModifiedFiles()
{
for (int i = documents.size(); --i >= 0;)
{
Document* d = documents.getUnchecked (i);
if (d->hasFileBeenModifiedExternally())
d->reloadFromFile();
}
}
void OpenDocumentManager::fileHasBeenRenamed (const File& oldFile, const File& newFile)
{
for (int i = documents.size(); --i >= 0;)
{
Document* d = documents.getUnchecked (i);
if (d->isForFile (oldFile))
d->fileHasBeenRenamed (newFile);
}
}
//==============================================================================
RecentDocumentList::RecentDocumentList()
{
IntrojucerApp::getApp().openDocumentManager.addListener (this);
}
RecentDocumentList::~RecentDocumentList()
{
IntrojucerApp::getApp().openDocumentManager.removeListener (this);
}
void RecentDocumentList::clear()
{
previousDocs.clear();
nextDocs.clear();
}
void RecentDocumentList::newDocumentOpened (OpenDocumentManager::Document* document)
{
if (document != nullptr && document != getCurrentDocument())
{
nextDocs.clear();
previousDocs.add (document);
}
}
bool RecentDocumentList::canGoToPrevious() const
{
return previousDocs.size() > 1;
}
bool RecentDocumentList::canGoToNext() const
{
return nextDocs.size() > 0;
}
OpenDocumentManager::Document* RecentDocumentList::getPrevious()
{
if (! canGoToPrevious())
return nullptr;
nextDocs.insert (0, previousDocs.remove (previousDocs.size() - 1));
return previousDocs.getLast();
}
OpenDocumentManager::Document* RecentDocumentList::getNext()
{
if (! canGoToNext())
return nullptr;
OpenDocumentManager::Document* d = nextDocs.remove (0);
previousDocs.add (d);
return d;
}
OpenDocumentManager::Document* RecentDocumentList::getClosestPreviousDocOtherThan (OpenDocumentManager::Document* oneToAvoid) const
{
for (int i = previousDocs.size(); --i >= 0;)
if (previousDocs.getUnchecked(i) != oneToAvoid)
return previousDocs.getUnchecked(i);
return nullptr;
}
bool RecentDocumentList::documentAboutToClose (OpenDocumentManager::Document* document)
{
previousDocs.removeAllInstancesOf (document);
nextDocs.removeAllInstancesOf (document);
jassert (! previousDocs.contains (document));
jassert (! nextDocs.contains (document));
return true;
}
static void restoreDocList (Project& project, Array <OpenDocumentManager::Document*>& list, const XmlElement* xml)
{
if (xml != nullptr)
{
OpenDocumentManager& odm = IntrojucerApp::getApp().openDocumentManager;
forEachXmlChildElementWithTagName (*xml, e, "DOC")
{
const File file (e->getStringAttribute ("file"));
if (file.exists())
{
if (OpenDocumentManager::Document* doc = odm.openFile (&project, file))
{
doc->restoreState (e->getStringAttribute ("state"));
list.add (doc);
}
}
}
}
}
void RecentDocumentList::restoreFromXML (Project& project, const XmlElement& xml)
{
clear();
if (xml.hasTagName ("RECENT_DOCUMENTS"))
{
restoreDocList (project, previousDocs, xml.getChildByName ("PREVIOUS"));
restoreDocList (project, nextDocs, xml.getChildByName ("NEXT"));
}
}
static void saveDocList (const Array <OpenDocumentManager::Document*>& list, XmlElement& xml)
{
for (int i = 0; i < list.size(); ++i)
{
const OpenDocumentManager::Document& doc = *list.getUnchecked(i);
XmlElement* e = xml.createNewChildElement ("DOC");
e->setAttribute ("file", doc.getFile().getFullPathName());
e->setAttribute ("state", doc.getState());
}
}
XmlElement* RecentDocumentList::createXML() const
{
XmlElement* xml = new XmlElement ("RECENT_DOCUMENTS");
saveDocList (previousDocs, *xml->createNewChildElement ("PREVIOUS"));
saveDocList (nextDocs, *xml->createNewChildElement ("NEXT"));
return xml;
}
@@ -0,0 +1,153 @@
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2013 - Raw Material Software 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.
==============================================================================
*/
#ifndef __JUCER_OPENDOCUMENTMANAGER_JUCEHEADER__
#define __JUCER_OPENDOCUMENTMANAGER_JUCEHEADER__
#include "../Project/jucer_Project.h"
//==============================================================================
/**
*/
class OpenDocumentManager
{
public:
//==============================================================================
OpenDocumentManager();
~OpenDocumentManager();
//==============================================================================
class Document
{
public:
Document() {}
virtual ~Document() {}
virtual bool loadedOk() const = 0;
virtual bool isForFile (const File& file) const = 0;
virtual bool isForNode (const ValueTree& node) const = 0;
virtual bool refersToProject (Project& project) const = 0;
virtual Project* getProject() const = 0;
virtual String getName() const = 0;
virtual String getType() const = 0;
virtual File getFile() const = 0;
virtual bool needsSaving() const = 0;
virtual bool save() = 0;
virtual bool saveAs() = 0;
virtual bool hasFileBeenModifiedExternally() = 0;
virtual void reloadFromFile() = 0;
virtual Component* createEditor() = 0;
virtual Component* createViewer() = 0;
virtual void fileHasBeenRenamed (const File& newFile) = 0;
virtual String getState() const = 0;
virtual void restoreState (const String& state) = 0;
virtual File getCounterpartFile() const { return File::nonexistent; }
};
//==============================================================================
int getNumOpenDocuments() const;
Document* getOpenDocument (int index) const;
void clear();
bool canOpenFile (const File& file);
Document* openFile (Project* project, const File& file);
bool closeDocument (int index, bool saveIfNeeded);
bool closeDocument (Document* document, bool saveIfNeeded);
bool closeAll (bool askUserToSave);
bool closeAllDocumentsUsingProject (Project& project, bool saveIfNeeded);
void closeFile (const File& f, bool saveIfNeeded);
bool anyFilesNeedSaving() const;
bool saveAll();
FileBasedDocument::SaveResult saveIfNeededAndUserAgrees (Document* doc);
void reloadModifiedFiles();
void fileHasBeenRenamed (const File& oldFile, const File& newFile);
//==============================================================================
class DocumentCloseListener
{
public:
DocumentCloseListener() {}
virtual ~DocumentCloseListener() {}
// return false to force it to stop.
virtual bool documentAboutToClose (Document* document) = 0;
};
void addListener (DocumentCloseListener*);
void removeListener (DocumentCloseListener*);
//==============================================================================
class DocumentType
{
public:
DocumentType() {}
virtual ~DocumentType() {}
virtual bool canOpenFile (const File& file) = 0;
virtual Document* openFile (Project* project, const File& file) = 0;
};
void registerType (DocumentType* type);
private:
OwnedArray<DocumentType> types;
OwnedArray<Document> documents;
Array<DocumentCloseListener*> listeners;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenDocumentManager)
};
//==============================================================================
class RecentDocumentList : private OpenDocumentManager::DocumentCloseListener
{
public:
RecentDocumentList();
~RecentDocumentList();
void clear();
void newDocumentOpened (OpenDocumentManager::Document* document);
OpenDocumentManager::Document* getCurrentDocument() const { return previousDocs.getLast(); }
bool canGoToPrevious() const;
bool canGoToNext() const;
OpenDocumentManager::Document* getPrevious();
OpenDocumentManager::Document* getNext();
OpenDocumentManager::Document* getClosestPreviousDocOtherThan (OpenDocumentManager::Document* oneToAvoid) const;
void restoreFromXML (Project& project, const XmlElement& xml);
XmlElement* createXML() const;
private:
bool documentAboutToClose (OpenDocumentManager::Document*);
Array<OpenDocumentManager::Document*> previousDocs, nextDocs;
};
#endif // __JUCER_OPENDOCUMENTMANAGER_JUCEHEADER__
@@ -0,0 +1,90 @@
# This script takes the build product and copies it to the AU, VST, VST3, RTAS and AAX folders, depending on
# which plugin types you've built
original=$CONFIGURATION_BUILD_DIR/$FULL_PRODUCT_NAME
# this looks inside the binary to detect which platforms are needed..
copyAU=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'AudioUnit' | wc -l`
copyVST=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'VSTPlugin' | wc -l`
copyVST3=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'GetPluginFactory' | wc -l`
copyRTAS=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'CProcess' | wc -l`
copyAAX=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'ACFStartup' | wc -l`
if [ $copyAU -gt 0 ]; then
echo "Copying to AudioUnit folder..."
AU=~/Library/Audio/Plug-Ins/Components/$PRODUCT_NAME.component
if [ -d "$AU" ]; then
rm -r "$AU"
fi
cp -r "$original" "$AU"
sed -i "" -e 's/TDMwPTul/BNDLPTul/g' "$AU/Contents/PkgInfo"
sed -i "" -e 's/TDMw/BNDL/g' "$AU/Contents/$INFOPLIST_FILE"
# Fix info.plist for AUs built with Xcode 3
if [ -f "$DEVELOPER_DIR/Library/Developer/CoreAudio/AudioUnits/AUPublic/AUBase/AUPlugInDispatch.cpp" ]; then
echo
else
echo "Removing AudioComponents entry from Info.plist because this is not a new-format AU"
/usr/libexec/PlistBuddy -c "Delete AudioComponents" "$AU/Contents/Info.plist"
fi
fi
if [ $copyVST -gt 0 ]; then
echo "Copying to VST folder..."
VST=~/Library/Audio/Plug-Ins/VST/$PRODUCT_NAME.vst
if [ -d "$VST" ]; then
rm -r "$VST"
fi
cp -r "$original" "$VST"
sed -i "" -e 's/TDMwPTul/BNDLPTul/g' "$VST/Contents/PkgInfo"
sed -i "" -e 's/TDMw/BNDL/g' "$VST/Contents/$INFOPLIST_FILE"
fi
if [ $copyVST3 -gt 0 ]; then
echo "Copying to VST3 folder..."
VST3=~/Library/Audio/Plug-Ins/VST3/$PRODUCT_NAME.vst3
if [ -d "$VST3" ]; then
rm -r "$VST3"
fi
cp -r "$original" "$VST3"
sed -i "" -e 's/TDMwPTul/BNDLPTul/g' "$VST3/Contents/PkgInfo"
sed -i "" -e 's/TDMw/BNDL/g' "$VST3/Contents/$INFOPLIST_FILE"
fi
if [ $copyRTAS -gt 0 ]; then
echo "Copying to RTAS folder..."
RTAS=/Library/Application\ Support/Digidesign/Plug-Ins/$PRODUCT_NAME.dpm
if [ -d "$RTAS" ]; then
rm -r "$RTAS"
fi
cp -r "$original" "$RTAS"
fi
if [ $copyAAX -gt 0 ]; then
echo "Copying to AAX folder..."
if [ -d "/Applications/ProTools_3PDev/Plug-Ins" ]; then
AAX1="/Applications/ProTools_3PDev/Plug-Ins/$PRODUCT_NAME.aaxplugin"
if [ -d "$AAX1" ]; then
rm -r "$AAX1"
fi
cp -R -H "$original" "$AAX1"
fi
if [ -d "/Library/Application Support/Avid/Audio/Plug-Ins" ]; then
AAX2="/Library/Application Support/Avid/Audio/Plug-Ins/$PRODUCT_NAME.aaxplugin"
if [ -d "$AAX2" ]; then
rm -r "$AAX2"
fi
cp -R -H "$original" "$AAX2"
fi
fi
Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<COLOUR_SCHEME font="&lt;Monospaced&gt;; 13.0">
<COLOUR name="Main Window Bkgd" colour="FF29292A"/>
<COLOUR name="Treeview Highlight" colour="2BFFFEC3"/>
<COLOUR name="Code Background" colour="FF222222"/>
<COLOUR name="Line Number Bkgd" colour="44C1C1C1"/>
<COLOUR name="Line Numbers" colour="E9B2B2B2"/>
<COLOUR name="Plain Text" colour="FFCECECE"/>
<COLOUR name="Selected Text Bkgd" colour="FF2859AC"/>
<COLOUR name="Caret" colour="FFFFFFFF"/>
<COLOUR name="Preprocessor Text" colour="FFF8F631"/>
<COLOUR name="Punctuation" colour="FFCFBEFF"/>
<COLOUR name="Bracket" colour="FF058202"/>
<COLOUR name="String" colour="FFBC45DD"/>
<COLOUR name="Float" colour="ff885500"/>
<COLOUR name="Integer" colour="FF42C8C4"/>
<COLOUR name="Identifier" colour="FFCFCFCF"/>
<COLOUR name="Operator" colour="FFC4EB19"/>
<COLOUR name="Keyword" colour="FFEE6F6F"/>
<COLOUR name="Comment" colour="FF72D20C"/>
<COLOUR name="Error" colour="FFE60000"/>
</COLOUR_SCHEME>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<COLOUR_SCHEME font="&lt;Monospaced&gt;; 13.0">
<COLOUR name="Main Window Bkgd" colour="FFE6E7E9"/>
<COLOUR name="Treeview Highlight" colour="401111ee"/>
<COLOUR name="Code Background" colour="ffffffff"/>
<COLOUR name="Line Number Bkgd" colour="44999999"/>
<COLOUR name="Line Numbers" colour="44000000"/>
<COLOUR name="Plain Text" colour="ff000000"/>
<COLOUR name="Selected Text Bkgd" colour="401111ee"/>
<COLOUR name="Caret" colour="ff000000"/>
<COLOUR name="Preprocessor Text" colour="ff660000"/>
<COLOUR name="Punctuation" colour="ff004400"/>
<COLOUR name="Bracket" colour="ff000055"/>
<COLOUR name="String" colour="ff990099"/>
<COLOUR name="Float" colour="ff885500"/>
<COLOUR name="Integer" colour="ff880000"/>
<COLOUR name="Identifier" colour="ff000000"/>
<COLOUR name="Operator" colour="ff225500"/>
<COLOUR name="Keyword" colour="ff0000cc"/>
<COLOUR name="Comment" colour="ff00aa00"/>
<COLOUR name="Error" colour="ffcc0000"/>
</COLOUR_SCHEME>
Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

@@ -0,0 +1,71 @@
/*
==============================================================================
This file was auto-generated!
==============================================================================
*/
#ifndef MAINCOMPONENT_H_INCLUDED
#define MAINCOMPONENT_H_INCLUDED
INCLUDE_JUCE
//==============================================================================
/*
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class MainContentComponent : public AnimatedAppComponent
{
public:
//==============================================================================
MainContentComponent()
{
setSize (800, 600);
setFramesPerSecond (60);
}
~MainContentComponent()
{
}
void update() override
{
// This function is called at the frequency specified by the setFramesPerSecond() call
// in the constructor. You can use it to update counters, animate values, etc.
}
void paint (Graphics& g) override
{
// (Our component is opaque, so we must completely fill the background with a solid colour)
g.fillAll (Colours::black);
// You can add your drawing code here!
}
void resized() override
{
// This is called when the MainContentComponent is resized.
// If you add any child components, this is where you should
// update their positions.
}
private:
//==============================================================================
// Your private member variables go here...
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)
};
// (This function is called by the app startup code to create our main component)
Component* createMainContentComponent() { return new MainContentComponent(); }
#endif // MAINCOMPONENT_H_INCLUDED
@@ -0,0 +1,95 @@
/*
==============================================================================
This file was auto-generated!
==============================================================================
*/
#ifndef MAINCOMPONENT_H_INCLUDED
#define MAINCOMPONENT_H_INCLUDED
INCLUDE_JUCE
//==============================================================================
/*
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class MainContentComponent : public AudioAppComponent
{
public:
//==============================================================================
MainContentComponent()
{
setSize (800, 600);
// specify the number of input and output channels that we want to open
setAudioChannels (2, 2);
}
~MainContentComponent()
{
shutdownAudio();
}
//=======================================================================
void prepareToPlay (int samplesPerBlockExpected, double sampleRate) override
{
// This function will be called when the audio device is started, or when
// its settings (i.e. sample rate, block size, etc) are changed.
// You can use this function to initialise any resources you might need,
// but be careful - it will be called on the audio thread, not the GUI thread.
// For more details, see the help for AudioProcessor::prepareToPlay()
}
void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override
{
// Your audio-processing code goes here!
// For more details, see the help for AudioProcessor::getNextAudioBlock()
}
void releaseResources() override
{
// This will be called when the audio device stops, or when it is being
// restarted due to a setting change.
// For more details, see the help for AudioProcessor::releaseResources()
}
//=======================================================================
void paint (Graphics& g) override
{
// (Our component is opaque, so we must completely fill the background with a solid colour)
g.fillAll (Colours::black);
// You can add your drawing code here!
}
void resized() override
{
// This is called when the MainContentComponent is resized.
// If you add any child components, this is where you should
// update their positions.
}
private:
//==============================================================================
// Your private member variables go here...
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)
};
// (This function is called by the app startup code to create our main component)
Component* createMainContentComponent() { return new MainContentComponent(); }
#endif // MAINCOMPONENT_H_INCLUDED
@@ -0,0 +1,41 @@
/*
==============================================================================
This file was auto-generated by the Introjucer!
It contains the basic framework code for a JUCE plugin editor.
==============================================================================
*/
EDITORCPPHEADERS
//==============================================================================
EDITORCLASSNAME::EDITORCLASSNAME (FILTERCLASSNAME& p)
: AudioProcessorEditor (&p), processor (p)
{
// Make sure that before the constructor has finished, you've set the
// editor's size to whatever you need it to be.
setSize (400, 300);
}
EDITORCLASSNAME::~EDITORCLASSNAME()
{
}
//==============================================================================
void EDITORCLASSNAME::paint (Graphics& g)
{
g.fillAll (Colours::white);
g.setColour (Colours::black);
g.setFont (15.0f);
g.drawFittedText ("Hello World!", getLocalBounds(), Justification::centred, 1);
}
void EDITORCLASSNAME::resized()
{
// This is generally where you'll want to lay out the positions of any
// subcomponents in your editor..
}
@@ -0,0 +1,39 @@
/*
==============================================================================
This file was auto-generated by the Introjucer!
It contains the basic framework code for a JUCE plugin editor.
==============================================================================
*/
#ifndef HEADERGUARD
#define HEADERGUARD
EDITORHEADERS
//==============================================================================
/**
*/
class EDITORCLASSNAME : public AudioProcessorEditor
{
public:
EDITORCLASSNAME (FILTERCLASSNAME&);
~EDITORCLASSNAME();
//==============================================================================
void paint (Graphics&) override;
void resized() override;
private:
// This reference is provided as a quick way for your editor to
// access the processor object that created it.
FILTERCLASSNAME& processor;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EDITORCLASSNAME)
};
#endif // HEADERGUARD
@@ -0,0 +1,189 @@
/*
==============================================================================
This file was auto-generated by the Introjucer!
It contains the basic framework code for a JUCE plugin processor.
==============================================================================
*/
FILTERHEADERS
//==============================================================================
FILTERCLASSNAME::FILTERCLASSNAME()
{
}
FILTERCLASSNAME::~FILTERCLASSNAME()
{
}
//==============================================================================
const String FILTERCLASSNAME::getName() const
{
return JucePlugin_Name;
}
int FILTERCLASSNAME::getNumParameters()
{
return 0;
}
float FILTERCLASSNAME::getParameter (int index)
{
return 0.0f;
}
void FILTERCLASSNAME::setParameter (int index, float newValue)
{
}
const String FILTERCLASSNAME::getParameterName (int index)
{
return String();
}
const String FILTERCLASSNAME::getParameterText (int index)
{
return String();
}
const String FILTERCLASSNAME::getInputChannelName (int channelIndex) const
{
return String (channelIndex + 1);
}
const String FILTERCLASSNAME::getOutputChannelName (int channelIndex) const
{
return String (channelIndex + 1);
}
bool FILTERCLASSNAME::isInputChannelStereoPair (int index) const
{
return true;
}
bool FILTERCLASSNAME::isOutputChannelStereoPair (int index) const
{
return true;
}
bool FILTERCLASSNAME::acceptsMidi() const
{
#if JucePlugin_WantsMidiInput
return true;
#else
return false;
#endif
}
bool FILTERCLASSNAME::producesMidi() const
{
#if JucePlugin_ProducesMidiOutput
return true;
#else
return false;
#endif
}
bool FILTERCLASSNAME::silenceInProducesSilenceOut() const
{
return false;
}
double FILTERCLASSNAME::getTailLengthSeconds() const
{
return 0.0;
}
int FILTERCLASSNAME::getNumPrograms()
{
return 1; // NB: some hosts don't cope very well if you tell them there are 0 programs,
// so this should be at least 1, even if you're not really implementing programs.
}
int FILTERCLASSNAME::getCurrentProgram()
{
return 0;
}
void FILTERCLASSNAME::setCurrentProgram (int index)
{
}
const String FILTERCLASSNAME::getProgramName (int index)
{
return String();
}
void FILTERCLASSNAME::changeProgramName (int index, const String& newName)
{
}
//==============================================================================
void FILTERCLASSNAME::prepareToPlay (double sampleRate, int samplesPerBlock)
{
// Use this method as the place to do any pre-playback
// initialisation that you need..
}
void FILTERCLASSNAME::releaseResources()
{
// When playback stops, you can use this as an opportunity to free up any
// spare memory, etc.
}
void FILTERCLASSNAME::processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages)
{
// In case we have more outputs than inputs, this code clears any output
// channels that didn't contain input data, (because these aren't
// guaranteed to be empty - they may contain garbage).
// I've added this to avoid people getting screaming feedback
// when they first compile the plugin, but obviously you don't need to
// this code if your algorithm already fills all the output channels.
for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i)
buffer.clear (i, 0, buffer.getNumSamples());
// This is the place where you'd normally do the guts of your plugin's
// audio processing...
for (int channel = 0; channel < getNumInputChannels(); ++channel)
{
float* channelData = buffer.getWritePointer (channel);
// ..do something to the data...
}
}
//==============================================================================
bool FILTERCLASSNAME::hasEditor() const
{
return true; // (change this to false if you choose to not supply an editor)
}
AudioProcessorEditor* FILTERCLASSNAME::createEditor()
{
return new EDITORCLASSNAME (*this);
}
//==============================================================================
void FILTERCLASSNAME::getStateInformation (MemoryBlock& destData)
{
// You should use this method to store your parameters in the memory block.
// You could do that either as raw data, or use the XML or ValueTree classes
// as intermediaries to make it easy to save and load complex data.
}
void FILTERCLASSNAME::setStateInformation (const void* data, int sizeInBytes)
{
// You should use this method to restore your parameters from this memory block,
// whose contents will have been created by the getStateInformation() call.
}
//==============================================================================
// This creates new instances of the plugin..
AudioProcessor* JUCE_CALLTYPE createPluginFilter()
{
return new FILTERCLASSNAME();
}
@@ -0,0 +1,74 @@
/*
==============================================================================
This file was auto-generated by the Introjucer!
It contains the basic framework code for a JUCE plugin processor.
==============================================================================
*/
#ifndef HEADERGUARD
#define HEADERGUARD
APPHEADERS
//==============================================================================
/**
*/
class FILTERCLASSNAME : public AudioProcessor
{
public:
//==============================================================================
FILTERCLASSNAME();
~FILTERCLASSNAME();
//==============================================================================
void prepareToPlay (double sampleRate, int samplesPerBlock) override;
void releaseResources() override;
void processBlock (AudioSampleBuffer&, MidiBuffer&) override;
//==============================================================================
AudioProcessorEditor* createEditor() override;
bool hasEditor() const override;
//==============================================================================
const String getName() const override;
int getNumParameters() override;
float getParameter (int index) override;
void setParameter (int index, float newValue) override;
const String getParameterName (int index) override;
const String getParameterText (int index) override;
const String getInputChannelName (int channelIndex) const override;
const String getOutputChannelName (int channelIndex) const override;
bool isInputChannelStereoPair (int index) const override;
bool isOutputChannelStereoPair (int index) const override;
bool acceptsMidi() const override;
bool producesMidi() const override;
bool silenceInProducesSilenceOut() const override;
double getTailLengthSeconds() const override;
//==============================================================================
int getNumPrograms() override;
int getCurrentProgram() override;
void setCurrentProgram (int index) override;
const String getProgramName (int index) override;
void changeProgramName (int index, const String& newName) override;
//==============================================================================
void getStateInformation (MemoryBlock& destData) override;
void setStateInformation (const void* data, int sizeInBytes) override;
private:
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FILTERCLASSNAME)
};
#endif // HEADERGUARD
@@ -0,0 +1,71 @@
/*
==============================================================================
This is an automatically generated GUI class created by the Introjucer!
Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved.
Created with Introjucer version: %%version%%
------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-13 by Raw Material Software Ltd.
==============================================================================
*/
//[Headers] You can add your own extra header files here...
//[/Headers]
%%includeFilesCPP%%
//[MiscUserDefs] You can add your own user definitions and misc code here...
//[/MiscUserDefs]
//==============================================================================
%%className%%::%%className%% (%%constructorParams%%)
%%initialisers%%{
%%constructor%%
//[Constructor] You can add your own custom stuff here..
//[/Constructor]
}
%%className%%::~%%className%%()
{
//[Destructor_pre]. You can add your own custom destruction code here..
//[/Destructor_pre]
%%destructor%%
//[Destructor]. You can add your own custom destruction code here..
//[/Destructor]
}
//==============================================================================
%%methodDefinitions%%
//[MiscUserCode] You can add your own definitions of your custom methods or any other code here...
//[/MiscUserCode]
//==============================================================================
#if 0
/* -- Introjucer information section --
This is where the Introjucer stores the metadata that describe this GUI layout, so
make changes in here at your peril!
BEGIN_JUCER_METADATA
%%metadata%%
END_JUCER_METADATA
*/
#endif
%%staticMemberDefinitions%%
//[EndFile] You can add extra defines here...
//[/EndFile]
@@ -0,0 +1,64 @@
/*
==============================================================================
This is an automatically generated GUI class created by the Introjucer!
Be careful when adding custom code to these files, as only the code within
the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
and re-saved.
Created with Introjucer version: %%version%%
------------------------------------------------------------------------------
The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-13 by Raw Material Software Ltd.
==============================================================================
*/
#ifndef %%headerGuard%%
#define %%headerGuard%%
//[Headers] -- You can add your own extra header files here --
#include "JuceHeader.h"
//[/Headers]
%%includeFilesH%%
//==============================================================================
/**
//[Comments]
An auto-generated component, created by the Introjucer.
Describe your class and how it works here!
//[/Comments]
*/
%%classDeclaration%%
{
public:
//==============================================================================
%%className%% (%%constructorParams%%);
~%%className%%();
//==============================================================================
//[UserMethods] -- You can add your own custom methods in this section.
//[/UserMethods]
%%publicMemberDeclarations%%
private:
//[UserVariables] -- You can add your own custom variables in this section.
//[/UserVariables]
//==============================================================================
%%privateMemberDeclarations%%
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%className%%)
};
//[EndFile] You can add extra defines here...
//[/EndFile]
#endif // %%headerGuard%%
@@ -0,0 +1,36 @@
/*
==============================================================================
This file was auto-generated!
==============================================================================
*/
INCLUDE_CORRESPONDING_HEADER
//==============================================================================
CONTENTCOMPCLASS::CONTENTCOMPCLASS()
{
setSize (600, 400);
}
CONTENTCOMPCLASS::~CONTENTCOMPCLASS()
{
}
void CONTENTCOMPCLASS::paint (Graphics& g)
{
g.fillAll (Colour (0xff001F36));
g.setFont (Font (16.0f));
g.setColour (Colours::white);
g.drawText ("Hello World!", getLocalBounds(), Justification::centred, true);
}
void CONTENTCOMPCLASS::resized()
{
// This is called when the CONTENTCOMPCLASS is resized.
// If you add any child components, this is where you should
// update their positions.
}
@@ -0,0 +1,36 @@
/*
==============================================================================
This file was auto-generated!
==============================================================================
*/
#ifndef HEADERGUARD
#define HEADERGUARD
INCLUDE_JUCE
//==============================================================================
/*
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class CONTENTCOMPCLASS : public Component
{
public:
//==============================================================================
CONTENTCOMPCLASS();
~CONTENTCOMPCLASS();
void paint (Graphics&);
void resized();
private:
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CONTENTCOMPCLASS)
};
#endif // HEADERGUARD
@@ -0,0 +1,40 @@
//==============================================================================
class COMPONENTCLASS : public Component
{
public:
COMPONENTCLASS()
{
// In your constructor, you should add any child components, and
// initialise any special settings that your component needs.
}
~COMPONENTCLASS()
{
}
void paint (Graphics& g)
{
// You should replace everything in this method with your own drawing code..
g.fillAll (Colours::white); // clear the background
g.setColour (Colours::grey);
g.drawRect (getLocalBounds(), 1); // draw an outline around the component
g.setColour (Colours::lightblue);
g.setFont (14.0f);
g.drawText ("COMPONENTCLASS", getLocalBounds(),
Justification::centred, true); // draw some placeholder text
}
void resized()
{
// This method is where you should set the bounds of any child
// components that your component contains..
}
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (COMPONENTCLASS)
};
@@ -0,0 +1,22 @@
/*
==============================================================================
This file was auto-generated!
It contains the basic startup code for a Juce application.
==============================================================================
*/
APPHEADERS
//==============================================================================
int main (int argc, char* argv[])
{
// ..your code goes here!
return 0;
}
@@ -0,0 +1,54 @@
/*
==============================================================================
This file was auto-generated by the Introjucer!
It contains the basic startup code for a Juce application.
==============================================================================
*/
APPHEADERS
//==============================================================================
class APPCLASSNAME : public JUCEApplication
{
public:
//==============================================================================
APPCLASSNAME() {}
const String getApplicationName() override { return ProjectInfo::projectName; }
const String getApplicationVersion() override { return ProjectInfo::versionString; }
bool moreThanOneInstanceAllowed() override { return ALLOWMORETHANONEINSTANCE; }
//==============================================================================
void initialise (const String& commandLine) override
{
// Add your application's initialisation code here..
}
void shutdown() override
{
// Add your application's shutdown code here..
}
//==============================================================================
void systemRequestedQuit() override
{
// This is called when the app is being asked to quit: you can ignore this
// request and let the app carry on running, or call quit() to allow the app to close.
quit();
}
void anotherInstanceStarted (const String& commandLine) override
{
// When another instance of the app is launched while this one is running,
// this method is invoked, and the commandLine parameter tells you what
// the other instance's command-line arguments were.
}
};
//==============================================================================
// This macro generates the main() routine that launches the app.
START_JUCE_APPLICATION (APPCLASSNAME)
@@ -0,0 +1,101 @@
/*
==============================================================================
This file was auto-generated by the Introjucer!
It contains the basic startup code for a Juce application.
==============================================================================
*/
APPHEADERS
Component* createMainContentComponent();
//==============================================================================
class APPCLASSNAME : public JUCEApplication
{
public:
//==============================================================================
APPCLASSNAME() {}
const String getApplicationName() override { return ProjectInfo::projectName; }
const String getApplicationVersion() override { return ProjectInfo::versionString; }
bool moreThanOneInstanceAllowed() override { return ALLOWMORETHANONEINSTANCE; }
//==============================================================================
void initialise (const String& commandLine) override
{
// This method is where you should put your application's initialisation code..
mainWindow = new MainWindow (getApplicationName());
}
void shutdown() override
{
// Add your application's shutdown code here..
mainWindow = nullptr; // (deletes our window)
}
//==============================================================================
void systemRequestedQuit() override
{
// This is called when the app is being asked to quit: you can ignore this
// request and let the app carry on running, or call quit() to allow the app to close.
quit();
}
void anotherInstanceStarted (const String& commandLine) override
{
// When another instance of the app is launched while this one is running,
// this method is invoked, and the commandLine parameter tells you what
// the other instance's command-line arguments were.
}
//==============================================================================
/*
This class implements the desktop window that contains an instance of
our CONTENTCOMPCLASS class.
*/
class MainWindow : public DocumentWindow
{
public:
MainWindow (String name) : DocumentWindow (name,
Colours::lightgrey,
DocumentWindow::allButtons)
{
setUsingNativeTitleBar (true);
setContentOwned (createMainContentComponent(), true);
setResizable (true, true);
centreWithSize (getWidth(), getHeight());
setVisible (true);
}
void closeButtonPressed() override
{
// This is called when the user tries to close this window. Here, we'll just
// ask the app to quit when this happens, but you can change this to do
// whatever you need.
JUCEApplication::getInstance()->systemRequestedQuit();
}
/* Note: Be careful if you override any DocumentWindow methods - the base
class uses a lot of them, so by overriding you might break its functionality.
It's best to do all your work in your content component instead, but if
you really have to override any DocumentWindow methods, make sure your
subclass also calls the superclass's method.
*/
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow)
};
private:
ScopedPointer<MainWindow> mainWindow;
};
//==============================================================================
// This macro generates the main() routine that launches the app.
START_JUCE_APPLICATION (APPCLASSNAME)
@@ -0,0 +1,99 @@
/*
==============================================================================
This file was auto-generated by the Introjucer!
It contains the basic startup code for a Juce application.
==============================================================================
*/
APPHEADERS
//==============================================================================
class APPCLASSNAME : public JUCEApplication
{
public:
//==============================================================================
APPCLASSNAME() {}
const String getApplicationName() override { return ProjectInfo::projectName; }
const String getApplicationVersion() override { return ProjectInfo::versionString; }
bool moreThanOneInstanceAllowed() override { return ALLOWMORETHANONEINSTANCE; }
//==============================================================================
void initialise (const String& commandLine) override
{
// This method is where you should put your application's initialisation code..
mainWindow = new MainWindow (getApplicationName());
}
void shutdown() override
{
// Add your application's shutdown code here..
mainWindow = nullptr; // (deletes our window)
}
//==============================================================================
void systemRequestedQuit() override
{
// This is called when the app is being asked to quit: you can ignore this
// request and let the app carry on running, or call quit() to allow the app to close.
quit();
}
void anotherInstanceStarted (const String& commandLine) override
{
// When another instance of the app is launched while this one is running,
// this method is invoked, and the commandLine parameter tells you what
// the other instance's command-line arguments were.
}
//==============================================================================
/*
This class implements the desktop window that contains an instance of
our CONTENTCOMPCLASS class.
*/
class MainWindow : public DocumentWindow
{
public:
MainWindow (String name) : DocumentWindow (name,
Colours::lightgrey,
DocumentWindow::allButtons)
{
setUsingNativeTitleBar (true);
setContentOwned (new CONTENTCOMPCLASS(), true);
centreWithSize (getWidth(), getHeight());
setVisible (true);
}
void closeButtonPressed() override
{
// This is called when the user tries to close this window. Here, we'll just
// ask the app to quit when this happens, but you can change this to do
// whatever you need.
JUCEApplication::getInstance()->systemRequestedQuit();
}
/* Note: Be careful if you override any DocumentWindow methods - the base
class uses a lot of them, so by overriding you might break its functionality.
It's best to do all your work in your content component instead, but if
you really have to override any DocumentWindow methods, make sure your
subclass also calls the superclass's method.
*/
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow)
};
private:
ScopedPointer<MainWindow> mainWindow;
};
//==============================================================================
// This macro generates the main() routine that launches the app.
START_JUCE_APPLICATION (APPCLASSNAME)
@@ -0,0 +1,51 @@
/*
==============================================================================
FILENAME
Created: DATE
Author: AUTHOR
==============================================================================
*/
INCLUDE_JUCE
INCLUDE_CORRESPONDING_HEADER
//==============================================================================
COMPONENTCLASS::COMPONENTCLASS()
{
// In your constructor, you should add any child components, and
// initialise any special settings that your component needs.
}
COMPONENTCLASS::~COMPONENTCLASS()
{
}
void COMPONENTCLASS::paint (Graphics& g)
{
/* This demo code just fills the component's background and
draws some placeholder text to get you started.
You should replace everything in this method with your own
drawing code..
*/
g.fillAll (Colours::white); // clear the background
g.setColour (Colours::grey);
g.drawRect (getLocalBounds(), 1); // draw an outline around the component
g.setColour (Colours::lightblue);
g.setFont (14.0f);
g.drawText ("COMPONENTCLASS", getLocalBounds(),
Justification::centred, true); // draw some placeholder text
}
void COMPONENTCLASS::resized()
{
// This method is where you should set the bounds of any child
// components that your component contains..
}
@@ -0,0 +1,33 @@
/*
==============================================================================
FILENAME
Created: DATE
Author: AUTHOR
==============================================================================
*/
#ifndef HEADERGUARD
#define HEADERGUARD
INCLUDE_JUCE
//==============================================================================
/*
*/
class COMPONENTCLASS : public Component
{
public:
COMPONENTCLASS();
~COMPONENTCLASS();
void paint (Graphics&);
void resized();
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (COMPONENTCLASS)
};
#endif // HEADERGUARD
@@ -0,0 +1,11 @@
/*
==============================================================================
FILENAME
Created: DATE
Author: AUTHOR
==============================================================================
*/
INCLUDE_CORRESPONDING_HEADER
@@ -0,0 +1,18 @@
/*
==============================================================================
FILENAME
Created: DATE
Author: AUTHOR
==============================================================================
*/
#ifndef HEADERGUARD
#define HEADERGUARD
#endif // HEADERGUARD
@@ -0,0 +1,65 @@
/*
==============================================================================
FILENAME
Created: DATE
Author: AUTHOR
==============================================================================
*/
#ifndef HEADERGUARD
#define HEADERGUARD
INCLUDE_JUCE
//==============================================================================
/*
*/
class COMPONENTCLASS : public Component
{
public:
COMPONENTCLASS()
{
// In your constructor, you should add any child components, and
// initialise any special settings that your component needs.
}
~COMPONENTCLASS()
{
}
void paint (Graphics& g)
{
/* This demo code just fills the component's background and
draws some placeholder text to get you started.
You should replace everything in this method with your own
drawing code..
*/
g.fillAll (Colours::white); // clear the background
g.setColour (Colours::grey);
g.drawRect (getLocalBounds(), 1); // draw an outline around the component
g.setColour (Colours::lightblue);
g.setFont (14.0f);
g.drawText ("COMPONENTCLASS", getLocalBounds(),
Justification::centred, true); // draw some placeholder text
}
void resized()
{
// This method is where you should set the bounds of any child
// components that your component contains..
}
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (COMPONENTCLASS)
};
#endif // HEADERGUARD
@@ -0,0 +1,76 @@
/*
==============================================================================
This file was auto-generated!
==============================================================================
*/
#ifndef MAINCOMPONENT_H_INCLUDED
#define MAINCOMPONENT_H_INCLUDED
INCLUDE_JUCE
//==============================================================================
/*
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class MainContentComponent : public OpenGLAppComponent
{
public:
//==============================================================================
MainContentComponent()
{
setSize (800, 600);
}
~MainContentComponent()
{
shutdownOpenGL();
}
void initialise() override
{
}
void shutdown() override
{
}
void render() override
{
OpenGLHelpers::clear (Colours::black);
}
void paint (Graphics& g) override
{
// You can add your component specific drawing code here!
// This will draw over the top of the openGL background.
}
void resized() override
{
// This is called when the MainContentComponent is resized.
// If you add any child components, this is where you should
// update their positions.
}
private:
//==============================================================================
// private member variables
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)
};
// (This function is called by the app startup code to create our main component)
Component* createMainContentComponent() { return new MainContentComponent(); }
#endif // MAINCOMPONENT_H_INCLUDED
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve">
<g id="Layer_1_18_">
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="67.5"/>
</g>
<rect x="16.3" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="2.4"/>
<circle fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" cx="80.3" cy="45" r="20.8"/>
<g>
<g>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M97.8,40.1c0.9,3.2,0,8-2.1,8.3
c-2,0.2-10.5-2.2-14.8-3.6c2.9-3.4,8.9-10,10.8-10.8C93.5,33.2,96.9,36.9,97.8,40.1z"/>
</g>
<g>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M93.3,57.7c-2.3,2.4-7,4-8.2,2.4
c-1.2-1.6-3.4-10.2-4.3-14.6c4.4,0.8,13.1,2.8,14.7,4C97.2,50.5,95.6,55.3,93.3,57.7z"/>
</g>
<g>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M75.7,62.6c-3.2-0.8-7-4.1-6.1-6
c0.8-1.9,7.2-8,10.5-11.1c1.5,4.3,4.1,12.7,3.9,14.8C83.9,62.4,79,63.4,75.7,62.6z"/>
</g>
<g>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M62.9,49.9c-0.9-3.2,0-8,2.1-8.3
c2-0.2,10.5,2.2,14.8,3.6c-2.9,3.4-8.9,10-10.8,10.8C67.2,56.8,63.8,53.1,62.9,49.9z"/>
</g>
<g>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M67.4,32.3c2.3-2.4,7-4,8.2-2.4
c1.2,1.6,3.4,10.2,4.3,14.6c-4.4-0.8-13.1-2.8-14.7-4C63.5,39.4,65.1,34.7,67.4,32.3z"/>
</g>
<g>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M84.8,27.4c3.2,0.8,7,4.1,6.1,6
c-0.8,1.9-7.2,8-10.5,11.1c-1.5-4.3-4.1-12.7-3.9-14.8C76.7,27.6,81.6,26.6,84.8,27.4z"/>
</g>
</g>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9
C0,3.1,3.1,0,6.9,0H130c3.8,0,6.9,3.1,6.9,6.9v101.1C136.9,111.7,133.9,114.8,130,114.8z"/>
<path opacity="0.8" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M62.6,61.4
c-9.1-9.1-9.1-23.7,0-32.8"/>
<path opacity="0.5" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M55.9,57.3
c-4.7-7.4-4.7-16.9-0.1-24.4"/>
<line opacity="0.7" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" x1="57.7" y1="41.5" x2="37.8" y2="41.5"/>
<line opacity="0.7" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" x1="57.7" y1="48.4" x2="34.2" y2="48.4"/>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve">
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9
C0,3.1,3.1,0,6.9,0H130c3.8,0,6.9,3.1,6.9,6.9v101.1C136.9,111.7,133.9,114.8,130,114.8z"/>
<rect x="16.5" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3412" stroke-miterlimit="10" width="102.7" height="2.4"/>
<rect x="16.5" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="102.9" height="67.5"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="17.1" y1="43.8" x2="17.1" y2="44.5"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="18.8" y1="43.6" x2="18.8" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="20.4" y1="43.8" x2="20.4" y2="44.5"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="22.1" y1="43.6" x2="22.1" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="23.8" y1="43.1" x2="23.8" y2="45.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="25.4" y1="42.3" x2="25.4" y2="46"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="27.1" y1="43.9" x2="27.1" y2="44.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="28.8" y1="43.3" x2="28.8" y2="45"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="30.4" y1="29.3" x2="30.4" y2="59"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="32.1" y1="40.9" x2="32.1" y2="47.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="33.8" y1="42.7" x2="33.8" y2="45.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="35.4" y1="36.6" x2="35.4" y2="51.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="37.1" y1="33.3" x2="37.1" y2="55.1"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="38.8" y1="42.6" x2="38.8" y2="45.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="40.4" y1="37.4" x2="40.4" y2="50.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="42.1" y1="27.4" x2="42.1" y2="60.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="43.8" y1="39.3" x2="43.8" y2="49"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="45.4" y1="41.1" x2="45.4" y2="47.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="47.1" y1="42.6" x2="47.1" y2="45.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="48.8" y1="36.2" x2="48.8" y2="52.1"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="50.4" y1="42.5" x2="50.4" y2="45.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="52.1" y1="39.3" x2="52.1" y2="49"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="53.8" y1="34.8" x2="53.8" y2="53.5"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="55.4" y1="42.2" x2="55.4" y2="46.1"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="57.1" y1="41" x2="57.1" y2="47.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="58.8" y1="35.4" x2="58.8" y2="53"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="60.4" y1="32.6" x2="60.4" y2="55.8"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="62.1" y1="37.4" x2="62.1" y2="50.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="63.8" y1="38.1" x2="63.8" y2="50.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="65.4" y1="42.2" x2="65.4" y2="46.1"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="67.1" y1="38.9" x2="67.1" y2="49.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="68.8" y1="43.6" x2="68.8" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="70.4" y1="41.4" x2="70.4" y2="47"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="72.1" y1="39" x2="72.1" y2="49.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="73.8" y1="40.9" x2="73.8" y2="47.5"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="75.4" y1="40.6" x2="75.4" y2="47.8"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="77.1" y1="38.4" x2="77.1" y2="49.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="78.8" y1="42" x2="78.8" y2="46.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="80.4" y1="42.2" x2="80.4" y2="46.1"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="82.1" y1="43.6" x2="82.1" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="83.8" y1="42.6" x2="83.8" y2="45.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="85.4" y1="43.3" x2="85.4" y2="45"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="87.1" y1="39.9" x2="87.1" y2="48.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="88.8" y1="42.9" x2="88.8" y2="45.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="90.4" y1="43.6" x2="90.4" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="92.1" y1="43.6" x2="92.1" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="93.8" y1="42.7" x2="93.8" y2="45.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="95.4" y1="41.1" x2="95.4" y2="47.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="97.1" y1="42.7" x2="97.1" y2="45.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="98.8" y1="43.6" x2="98.8" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="100.4" y1="43.1" x2="100.4" y2="45.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="102.1" y1="43.6" x2="102.1" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="103.8" y1="42" x2="103.8" y2="46.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="105.4" y1="43.6" x2="105.4" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="107.1" y1="43.8" x2="107.1" y2="44.5"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="108.8" y1="43.6" x2="108.8" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="110.4" y1="43.6" x2="110.4" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="112.1" y1="42.6" x2="112.1" y2="45.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="113.8" y1="43.1" x2="113.8" y2="45.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="115.4" y1="43.6" x2="115.4" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="117.1" y1="43.8" x2="117.1" y2="44.5"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="118.8" y1="43.8" x2="118.8" y2="44.5"/>
</svg>

After

Width:  |  Height:  |  Size: 9.6 KiB

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve">
<g id="Layer_1_23_">
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="67.5"/>
</g>
<rect x="16.3" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="2.4"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9
C0,3.1,3.1,0,6.9,0H130c3.8,0,6.9,3.1,6.9,6.9v101.1C136.9,111.7,133.9,114.8,130,114.8z"/>
<g id="Layer_1_8_">
<rect x="35.7" y="23.6" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="64.4" height="42.3"/>
</g>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="36" y1="44.1" x2="36" y2="44.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="37.1" y1="44" x2="37.1" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="38.1" y1="44.1" x2="38.1" y2="44.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="39.2" y1="44" x2="39.2" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="40.2" y1="43.7" x2="40.2" y2="45"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="41.3" y1="43.2" x2="41.3" y2="45.5"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="42.3" y1="44.2" x2="42.3" y2="44.5"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="43.3" y1="43.8" x2="43.3" y2="44.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="44.4" y1="35.1" x2="44.4" y2="53.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="45.4" y1="42.3" x2="45.4" y2="46.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="46.5" y1="43.4" x2="46.5" y2="45.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="47.5" y1="39.6" x2="47.5" y2="49.1"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="48.6" y1="37.5" x2="48.6" y2="51.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="49.6" y1="43.4" x2="49.6" y2="45.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="50.6" y1="40.1" x2="50.6" y2="48.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="51.7" y1="33.9" x2="51.7" y2="54.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="52.7" y1="41.3" x2="52.7" y2="47.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="53.8" y1="42.5" x2="53.8" y2="46.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="54.8" y1="43.4" x2="54.8" y2="45.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="55.9" y1="39.4" x2="55.9" y2="49.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="56.9" y1="43.3" x2="56.9" y2="45.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="57.9" y1="41.3" x2="57.9" y2="47.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="59" y1="38.5" x2="59" y2="50.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="60" y1="43.1" x2="60" y2="45.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="61.1" y1="42.4" x2="61.1" y2="46.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="62.1" y1="38.8" x2="62.1" y2="49.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="63.2" y1="37.1" x2="63.2" y2="51.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="64.2" y1="40.1" x2="64.2" y2="48.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="65.2" y1="40.6" x2="65.2" y2="48.1"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="66.3" y1="43.1" x2="66.3" y2="45.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="67.3" y1="41.1" x2="67.3" y2="47.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="68.4" y1="44" x2="68.4" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="69.4" y1="42.6" x2="69.4" y2="46.1"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="70.5" y1="41.1" x2="70.5" y2="47.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="71.5" y1="42.3" x2="71.5" y2="46.4"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="72.5" y1="42.1" x2="72.5" y2="46.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="73.6" y1="40.8" x2="73.6" y2="47.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="74.6" y1="43" x2="74.6" y2="45.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="75.7" y1="43.1" x2="75.7" y2="45.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="76.7" y1="44" x2="76.7" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="77.8" y1="43.4" x2="77.8" y2="45.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="78.8" y1="43.8" x2="78.8" y2="44.9"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="79.9" y1="41.7" x2="79.9" y2="47"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="80.9" y1="43.6" x2="80.9" y2="45.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="81.9" y1="44" x2="81.9" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="83" y1="44" x2="83" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="84" y1="43.4" x2="84" y2="45.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="85.1" y1="42.5" x2="85.1" y2="46.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="86.1" y1="43.5" x2="86.1" y2="45.2"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="87.2" y1="44" x2="87.2" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="88.2" y1="43.7" x2="88.2" y2="45"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="89.2" y1="44" x2="89.2" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="90.3" y1="43" x2="90.3" y2="45.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="91.3" y1="44" x2="91.3" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="92.4" y1="44.2" x2="92.4" y2="44.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="93.4" y1="44" x2="93.4" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="94.5" y1="44" x2="94.5" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="95.5" y1="43.4" x2="95.5" y2="45.3"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="96.5" y1="43.7" x2="96.5" y2="45"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="97.6" y1="44" x2="97.6" y2="44.7"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="98.6" y1="44.2" x2="98.6" y2="44.6"/>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="99.7" y1="44.2" x2="99.7" y2="44.6"/>
<g>
<g>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-miterlimit="10" x1="16.3" y1="35.1" x2="35.8" y2="35.1"/>
<g>
<circle fill="#F29300" cx="35.7" cy="35.1" r="1.7"/>
</g>
</g>
</g>
<g>
<g>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-miterlimit="10" x1="16.3" y1="54.4" x2="35.8" y2="54.4"/>
<g>
<circle fill="#F29300" cx="35.7" cy="54.4" r="1.7"/>
</g>
</g>
</g>
<g>
<g>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-miterlimit="10" x1="119.7" y1="54.4" x2="100.2" y2="54.4"/>
<g>
<circle fill="#F29300" cx="100.3" cy="54.4" r="1.7"/>
</g>
</g>
</g>
<g>
<g>
<line fill="none" stroke="#F29300" stroke-width="1.5" stroke-miterlimit="10" x1="119.7" y1="35.1" x2="100.2" y2="35.1"/>
<g>
<circle fill="#F29300" cx="100.3" cy="35.1" r="1.7"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve">
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9
C0,3.1,3.1,0,6.9,0H130c3.8,0,6.9,3.1,6.9,6.9v101.1C136.9,111.7,133.9,114.8,130,114.8z"/>
<g id="Layer_1_22_">
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="102.9" height="67.5"/>
</g>
<g id="Layer_3_3_">
<g opacity="0.8">
<path fill="#F29300" d="M40.6,28.3l-14.4-6.6v-2.3l17.3,7.8v2.1l-17.3,7.8v-2.3L40.6,28.3z"/>
<path fill="#F29300" d="M62,39.5v1.7H45v-1.7H62z"/>
</g>
<g>
<path fill="#F29300" d="M40.6,28.3l-14.4-6.6v-2.3l17.3,7.8v2.1l-17.3,7.8v-2.3L40.6,28.3z"/>
<path fill="#F29300" d="M62,39.5v1.7H45v-1.7H62z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve">
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.9H6.9c-3.8,0-6.9-3.1-6.9-6.9V7
c0-3.8,3.1-6.9,6.9-6.9H130c3.8,0,6.9,3.1,6.9,6.9V108C136.9,111.8,133.9,114.9,130,114.9z"/>
<g id="Layer_1_19_">
<rect x="16.3" y="11" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="102.9" height="67.5"/>
</g>
<g>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="39.6" y1="25" x2="39.6" y2="62.3"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="41.2" y1="25" x2="41.2" y2="62.3"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="42.8" y1="25" x2="42.8" y2="62.3"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="44.5" y1="25" x2="44.5" y2="62.3"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="46.1" y1="25" x2="46.1" y2="62.3"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="47.7" y1="25" x2="47.7" y2="62.3"/>
</g>
<path fill="none" stroke="#F29100" stroke-width="1.0853" stroke-miterlimit="10" d="M49.9,23.9v38.6c0,0.9-0.7,1.6-1.6,1.6H39
c-0.9,0-1.6-0.7-1.6-1.6V23.9"/>
<g>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="54.8" y1="27.5" x2="67.4" y2="62.6"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="56.3" y1="27" x2="69" y2="62"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="57.8" y1="26.4" x2="70.5" y2="61.5"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="59.4" y1="25.9" x2="72.1" y2="60.9"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="60.9" y1="25.3" x2="73.6" y2="60.4"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="62.4" y1="24.8" x2="75.1" y2="59.8"/>
</g>
<path fill="none" stroke="#F29100" stroke-width="1.0853" stroke-miterlimit="10" d="M64.1,23l13.1,36.3c0.3,0.8-0.1,1.7-0.9,2
l-8.8,3.2c-0.8,0.3-1.7-0.1-2-0.9L52.4,27.2"/>
<g>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="72.5" y1="30.6" x2="93.5" y2="61.4"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="73.8" y1="29.7" x2="94.9" y2="60.5"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="75.2" y1="28.8" x2="96.2" y2="59.6"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="76.5" y1="27.9" x2="97.6" y2="58.6"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="77.9" y1="27" x2="98.9" y2="57.7"/>
<line fill="none" stroke="#F29100" stroke-width="0.4307" stroke-miterlimit="10" x1="79.2" y1="26" x2="100.3" y2="56.8"/>
</g>
<path fill="none" stroke="#F29100" stroke-width="1.0853" stroke-miterlimit="10" d="M80.4,23.9l21.8,31.9c0.5,0.7,0.3,1.7-0.4,2.2
l-7.7,5.3c-0.7,0.5-1.7,0.3-2.2-0.4L70.1,31"/>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve">
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="67.5"/>
<path fill="none" stroke="#F29300" stroke-width="0.7078" stroke-miterlimit="10" d="M55.2,62.5H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0
c0-0.5,0.3-0.9,0.7-0.9h31.8c0.4,0,0.7,0.4,0.7,0.9l0,0C55.9,62.1,55.5,62.5,55.2,62.5z"/>
<path fill="#F29300" d="M38.1,62.5H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0c0-0.5,0.3-0.9,0.7-0.9h14.7c0.4,0,0.7,0.4,0.7,0.9l0,0
C38.7,62.1,38.4,62.5,38.1,62.5z"/>
<path fill="none" stroke="#F29300" stroke-width="0.7078" stroke-miterlimit="10" d="M55.2,67.8H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0
c0-0.5,0.3-0.9,0.7-0.9h31.8c0.4,0,0.7,0.4,0.7,0.9l0,0C55.9,67.4,55.5,67.8,55.2,67.8z"/>
<path fill="#F29300" d="M44.2,67.8H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0c0-0.5,0.3-0.9,0.7-0.9h20.8c0.4,0,0.7,0.4,0.7,0.9l0,0
C44.8,67.4,44.6,67.8,44.2,67.8z"/>
<path fill="none" stroke="#F29300" stroke-width="0.7078" stroke-miterlimit="10" d="M55.2,73H23.4c-0.4,0-0.7-0.4-0.7-0.9l0,0
c0-0.5,0.3-0.9,0.7-0.9h31.8c0.4,0,0.7,0.4,0.7,0.9l0,0C55.9,72.6,55.5,73,55.2,73z"/>
<path fill="#F29300" d="M49.4,73h-26c-0.4,0-0.7-0.4-0.7-0.9l0,0c0-0.5,0.3-0.9,0.7-0.9h26c0.4,0,0.7,0.4,0.7,0.9l0,0
C50.1,72.6,49.8,73,49.4,73z"/>
<rect x="16.3" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="2.4"/>
<circle fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" cx="69.3" cy="39.6" r="13.9"/>
<g>
<g>
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M79.8,33.5c1.1,1.9,1.3,5.2,0,5.7
c-1.3,0.5-7.2,0.3-10.2,0.2c1.3-2.7,4.1-7.9,5.2-8.8C75.9,29.7,78.7,31.6,79.8,33.5z"/>
</g>
<g>
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M79.8,45.6c-1.1,1.9-3.8,3.7-4.9,2.9
c-1.1-0.9-3.9-6.1-5.2-8.8c3-0.2,8.9-0.4,10.2,0.1C81.2,40.4,80.9,43.7,79.8,45.6z"/>
</g>
<g>
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M69.3,51.7c-2.2,0-5.2-1.5-5-2.8
s3.3-6.4,5-8.9c1.7,2.5,4.8,7.5,5,8.9S71.5,51.7,69.3,51.7z"/>
</g>
<g>
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M58.9,45.6c-1.1-1.9-1.3-5.2,0-5.7
c1.3-0.5,7.2-0.3,10.2-0.2c-1.3,2.7-4.1,7.9-5.2,8.8C62.8,49.4,60,47.6,58.9,45.6z"/>
</g>
<g>
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M58.9,33.5c1.1-1.9,3.8-3.7,4.9-2.9
c1.1,0.9,3.9,6.1,5.2,8.8c-3,0.2-8.9,0.4-10.2-0.1C57.5,38.8,57.8,35.5,58.9,33.5z"/>
</g>
<g>
<path fill="none" stroke="#F29300" stroke-width="1.2523" stroke-miterlimit="10" d="M69.3,27.5c2.2,0,5.2,1.5,5,2.8
s-3.3,6.4-5,8.9c-1.7-2.5-4.8-7.5-5-8.9S67.1,27.5,69.3,27.5z"/>
</g>
</g>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9
C0,3.1,3.1,0,6.9,0H130c3.8,0,6.9,3.1,6.9,6.9v101.1C136.9,111.7,133.9,114.8,130,114.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve">
<path opacity="0.2" fill="#F29300" d="M130.1,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9C0,3.1,3.1,0,6.9,0h123.2c3.8,0,6.9,3.1,6.9,6.9
V108C136.9,111.8,133.9,114.8,130.1,114.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 638 B

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 136.9 114.8" enable-background="new 0 0 136.9 114.8" xml:space="preserve">
<rect x="16.3" y="10.9" fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="67.5"/>
<rect x="16.3" y="10.9" fill="none" stroke="#F29300" stroke-width="1.3469" stroke-miterlimit="10" width="103.6" height="2.4"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M75.8,31.5c8.7,4.7,14.8,13.2,13.5,20
c-1.6,8.5-13.8,11.4-26.8,4.3S45.3,36.9,51.6,30.9C56.7,26.1,67.1,26.7,75.8,31.5z"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M86.1,43.6c1,2.4,0.5,5.5-1.3,5
c-1.9-0.5-9.8-5-13.8-7.4c2.9-1.2,8.2-3.2,9.8-3.2C82.2,38.2,85.2,41.4,86.1,43.6z"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M83,55.3c-2.3,1.3-7.3,1.2-8.6-0.7
c-1.2-1.9-2.9-9.5-3.5-12.9c4.2,2.1,12.2,6.3,13.8,7.7C86.3,50.7,85.2,54,83,55.3z"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M63.6,53.5c-3.6-2-7.3-6.3-5.9-7.6
c1.3-1.2,9-3.5,12.5-4.4c1.2,3.5,3.4,11.2,3.1,13C73,56.3,67.3,55.5,63.6,53.5z"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M51.9,38.3c-0.1-2.5,2-5.2,4.1-4.6
c2.1,0.6,9.9,5.1,13.9,7.5c-3.2,1.3-10.5,4.1-12.8,4.1C54.9,45.1,52,40.9,51.9,38.3z"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M60,29.3c2.4-0.4,6.6,0.3,7.5,1.5
c0.9,1.2,2.1,6.8,2.6,9.9c-4.2-2.1-12.3-6.3-13.7-7.6C55,31.8,57.4,29.8,60,29.3z"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M75.2,32.5c2.5,1.4,5.6,4.3,5,5
c-0.7,0.8-6.3,2.5-9.5,3.3c-1.1-3.2-2.7-8.9-2.4-9.9C68.6,30,72.6,31.1,75.2,32.5z"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M130,114.8H6.9c-3.8,0-6.9-3.1-6.9-6.9V6.9
C0,3.1,3.1,0,6.9,0H130c3.8,0,6.9,3.1,6.9,6.9v101.1C136.9,111.7,133.9,114.8,130,114.8z"/>
<path fill="none" stroke="#F29100" stroke-width="1.3469" stroke-miterlimit="10" d="M87.4,55.5c-6.6,10.4-20.4,14.6-30.8,8
s-13.4-19.6-6.9-30"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

Some files were not shown because too many files have changed in this diff Show More