| @@ -260,7 +260,7 @@ public: | |||||
| audioSourcePlayer.setSource (&synthAudioSource); | audioSourcePlayer.setSource (&synthAudioSource); | ||||
| deviceManager.addAudioCallback (&audioSourcePlayer); | deviceManager.addAudioCallback (&audioSourcePlayer); | ||||
| deviceManager.addMidiInputCallback (String::empty, &(synthAudioSource.midiCollector)); | |||||
| deviceManager.addMidiInputCallback (String(), &(synthAudioSource.midiCollector)); | |||||
| setOpaque (true); | setOpaque (true); | ||||
| setSize (640, 480); | setSize (640, 480); | ||||
| @@ -269,7 +269,7 @@ public: | |||||
| ~AudioSynthesiserDemo() | ~AudioSynthesiserDemo() | ||||
| { | { | ||||
| audioSourcePlayer.setSource (nullptr); | audioSourcePlayer.setSource (nullptr); | ||||
| deviceManager.removeMidiInputCallback (String::empty, &(synthAudioSource.midiCollector)); | |||||
| deviceManager.removeMidiInputCallback (String(), &(synthAudioSource.midiCollector)); | |||||
| deviceManager.removeAudioCallback (&audioSourcePlayer); | deviceManager.removeAudioCallback (&audioSourcePlayer); | ||||
| deviceManager.removeAudioCallback (&liveAudioDisplayComp); | deviceManager.removeAudioCallback (&liveAudioDisplayComp); | ||||
| } | } | ||||
| @@ -31,7 +31,7 @@ class CodeEditorDemo : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| CodeEditorDemo() | CodeEditorDemo() | ||||
| : fileChooser ("File", File::nonexistent, true, false, false, | |||||
| : fileChooser ("File", File(), true, false, false, | |||||
| "*.cpp;*.h;*.hpp;*.c;*.mm;*.m", String(), | "*.cpp;*.h;*.hpp;*.c;*.mm;*.m", String(), | ||||
| "Choose a C++ file to open it in the editor") | "Choose a C++ file to open it in the editor") | ||||
| { | { | ||||
| @@ -34,9 +34,9 @@ class FontsDemo : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| FontsDemo() | FontsDemo() | ||||
| : heightLabel (String::empty, "Height:"), | |||||
| kerningLabel (String::empty, "Kerning:"), | |||||
| scaleLabel (String::empty, "Scale:"), | |||||
| : heightLabel (String(), "Height:"), | |||||
| kerningLabel (String(), "Kerning:"), | |||||
| scaleLabel (String(), "Scale:"), | |||||
| styleLabel ("Style"), | styleLabel ("Style"), | ||||
| boldToggle ("Bold"), | boldToggle ("Bold"), | ||||
| italicToggle ("Italic") | italicToggle ("Italic") | ||||
| @@ -395,7 +395,7 @@ class ImagesRenderingDemo : public GraphicsDemoBase | |||||
| { | { | ||||
| public: | public: | ||||
| ImagesRenderingDemo (ControllersComponent& cc, bool argb_, bool tiled_) | ImagesRenderingDemo (ControllersComponent& cc, bool argb_, bool tiled_) | ||||
| : GraphicsDemoBase (cc, String ("Images") + (argb_ ? ": ARGB" : ": RGB") + (tiled_ ? " Tiled" : String::empty )), | |||||
| : GraphicsDemoBase (cc, String ("Images") + (argb_ ? ": ARGB" : ": RGB") + (tiled_ ? " Tiled" : String() )), | |||||
| isArgb (argb_), isTiled (tiled_) | isArgb (argb_), isTiled (tiled_) | ||||
| { | { | ||||
| argbImage = ImageFileFormat::loadFrom (BinaryData::juce_icon_png, (size_t) BinaryData::juce_icon_pngSize); | argbImage = ImageFileFormat::loadFrom (BinaryData::juce_icon_png, (size_t) BinaryData::juce_icon_pngSize); | ||||
| @@ -86,7 +86,7 @@ public: | |||||
| File getLastDocumentOpened() override | File getLastDocumentOpened() override | ||||
| { | { | ||||
| // not interested in this for now | // not interested in this for now | ||||
| return File::nonexistent; | |||||
| return File(); | |||||
| } | } | ||||
| void setLastDocumentOpened (const File& /*file*/) override | void setLastDocumentOpened (const File& /*file*/) override | ||||
| @@ -836,8 +836,8 @@ struct OpenGLDemoClasses | |||||
| controlsOverlay->statusLabel.setText (statusText, dontSendNotification); | controlsOverlay->statusLabel.setText (statusText, dontSendNotification); | ||||
| newVertexShader = String::empty; | |||||
| newFragmentShader = String::empty; | |||||
| newVertexShader = String(); | |||||
| newFragmentShader = String(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -97,7 +97,7 @@ public: | |||||
| if (shader != nullptr) | if (shader != nullptr) | ||||
| { | { | ||||
| statusLabel.setText (String::empty, dontSendNotification); | |||||
| statusLabel.setText (String(), dontSendNotification); | |||||
| shader->fillRect (g.getInternalContext(), getLocalBounds()); | shader->fillRect (g.getInternalContext(), getLocalBounds()); | ||||
| } | } | ||||
| @@ -35,8 +35,8 @@ class MovieComponentWithFileBrowser : public Component, | |||||
| public: | public: | ||||
| MovieComponentWithFileBrowser() | MovieComponentWithFileBrowser() | ||||
| : isDragOver (false), | : isDragOver (false), | ||||
| fileChooser ("movie", File::nonexistent, true, false, false, | |||||
| "*", String::empty, "(choose a video file to play)") | |||||
| fileChooser ("movie", File(), true, false, false, | |||||
| "*", String(), "(choose a video file to play)") | |||||
| { | { | ||||
| addAndMakeVisible (videoComp); | addAndMakeVisible (videoComp); | ||||
| @@ -242,7 +242,7 @@ private: | |||||
| static String::CharPointerType findEndOfFaceToken (String::CharPointerType t) noexcept | static String::CharPointerType findEndOfFaceToken (String::CharPointerType t) noexcept | ||||
| { | { | ||||
| return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String::empty.getCharPointer()); | |||||
| return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String().getCharPointer()); | |||||
| } | } | ||||
| }; | }; | ||||
| @@ -453,11 +453,11 @@ class ToolbarDemoComp : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| ToolbarDemoComp() | ToolbarDemoComp() | ||||
| : depthLabel (String::empty, "Toolbar depth:"), | |||||
| infoLabel (String::empty, "As well as showing off toolbars, this demo illustrates how to store " | |||||
| "a set of SVG files in a Zip file, embed that in your application, and read " | |||||
| "them back in at runtime.\n\nThe icon images here are taken from the open-source " | |||||
| "Tango icon project."), | |||||
| : depthLabel (String(), "Toolbar depth:"), | |||||
| infoLabel (String(), "As well as showing off toolbars, this demo illustrates how to store " | |||||
| "a set of SVG files in a Zip file, embed that in your application, and read " | |||||
| "them back in at runtime.\n\nThe icon images here are taken from the open-source " | |||||
| "Tango icon project."), | |||||
| orientationButton ("Vertical/Horizontal"), | orientationButton ("Vertical/Horizontal"), | ||||
| customiseButton ("Customise...") | customiseButton ("Customise...") | ||||
| { | { | ||||
| @@ -356,9 +356,9 @@ private: | |||||
| { | { | ||||
| switch (type) | switch (type) | ||||
| { | { | ||||
| case xml: codeDocument.replaceAllContent (BinaryData::treedemo_xml); break; | |||||
| case json: codeDocument.replaceAllContent (BinaryData::juce_module_info); break; | |||||
| default: codeDocument.replaceAllContent (String::empty); break; | |||||
| case xml: codeDocument.replaceAllContent (BinaryData::treedemo_xml); break; | |||||
| case json: codeDocument.replaceAllContent (BinaryData::juce_module_info); break; | |||||
| default: codeDocument.replaceAllContent (String()); break; | |||||
| } | } | ||||
| } | } | ||||
| @@ -367,32 +367,32 @@ private: | |||||
| } | } | ||||
| case MainAppWindow::useLookAndFeelV1: | case MainAppWindow::useLookAndFeelV1: | ||||
| result.setInfo ("Use LookAndFeel_V1", String::empty, generalCategory, 0); | |||||
| result.setInfo ("Use LookAndFeel_V1", String(), generalCategory, 0); | |||||
| result.addDefaultKeypress ('i', ModifierKeys::commandModifier); | result.addDefaultKeypress ('i', ModifierKeys::commandModifier); | ||||
| result.setTicked (isLookAndFeelSelected<LookAndFeel_V1>()); | result.setTicked (isLookAndFeelSelected<LookAndFeel_V1>()); | ||||
| break; | break; | ||||
| case MainAppWindow::useLookAndFeelV2: | case MainAppWindow::useLookAndFeelV2: | ||||
| result.setInfo ("Use LookAndFeel_V2", String::empty, generalCategory, 0); | |||||
| result.setInfo ("Use LookAndFeel_V2", String(), generalCategory, 0); | |||||
| result.addDefaultKeypress ('o', ModifierKeys::commandModifier); | result.addDefaultKeypress ('o', ModifierKeys::commandModifier); | ||||
| result.setTicked (isLookAndFeelSelected<LookAndFeel_V2>()); | result.setTicked (isLookAndFeelSelected<LookAndFeel_V2>()); | ||||
| break; | break; | ||||
| case MainAppWindow::useLookAndFeelV3: | case MainAppWindow::useLookAndFeelV3: | ||||
| result.setInfo ("Use LookAndFeel_V3", String::empty, generalCategory, 0); | |||||
| result.setInfo ("Use LookAndFeel_V3", String(), generalCategory, 0); | |||||
| result.addDefaultKeypress ('p', ModifierKeys::commandModifier); | result.addDefaultKeypress ('p', ModifierKeys::commandModifier); | ||||
| result.setTicked (isLookAndFeelSelected<LookAndFeel_V3>()); | result.setTicked (isLookAndFeelSelected<LookAndFeel_V3>()); | ||||
| break; | break; | ||||
| case MainAppWindow::toggleRepaintDebugging: | case MainAppWindow::toggleRepaintDebugging: | ||||
| result.setInfo ("Toggle repaint display", String::empty, generalCategory, 0); | |||||
| result.setInfo ("Toggle repaint display", String(), generalCategory, 0); | |||||
| result.addDefaultKeypress ('r', ModifierKeys()); | result.addDefaultKeypress ('r', ModifierKeys()); | ||||
| result.setTicked (juceDemoRepaintDebuggingActive); | result.setTicked (juceDemoRepaintDebuggingActive); | ||||
| break; | break; | ||||
| case MainAppWindow::useNativeTitleBar: | case MainAppWindow::useNativeTitleBar: | ||||
| { | { | ||||
| result.setInfo ("Use native window title bar", String::empty, generalCategory, 0); | |||||
| result.setInfo ("Use native window title bar", String(), generalCategory, 0); | |||||
| result.addDefaultKeypress ('n', ModifierKeys::commandModifier); | result.addDefaultKeypress ('n', ModifierKeys::commandModifier); | ||||
| bool nativeTitlebar = false; | bool nativeTitlebar = false; | ||||
| @@ -405,7 +405,7 @@ private: | |||||
| #if ! JUCE_LINUX | #if ! JUCE_LINUX | ||||
| case MainAppWindow::goToKioskMode: | case MainAppWindow::goToKioskMode: | ||||
| result.setInfo ("Show full-screen kiosk mode", String::empty, generalCategory, 0); | |||||
| result.setInfo ("Show full-screen kiosk mode", String(), generalCategory, 0); | |||||
| result.addDefaultKeypress ('f', ModifierKeys::commandModifier); | result.addDefaultKeypress ('f', ModifierKeys::commandModifier); | ||||
| result.setTicked (Desktop::getInstance().getKioskModeComponent() != 0); | result.setTicked (Desktop::getInstance().getKioskModeComponent() != 0); | ||||
| break; | break; | ||||
| @@ -50,18 +50,18 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| MPESetupComponent() | MPESetupComponent() | ||||
| : masterChannelLabel (String::empty, "Master channel:"), | |||||
| noteChannelsLabel (String::empty, "Nr. of note channels:"), | |||||
| masterPitchbendRangeLabel (String::empty, "Master pitchbend range (semitones):"), | |||||
| notePitchbendRangeLabel (String::empty, "Note pitchbend range (semitones):"), | |||||
| : masterChannelLabel (String(), "Master channel:"), | |||||
| noteChannelsLabel (String(), "Nr. of note channels:"), | |||||
| masterPitchbendRangeLabel (String(), "Master pitchbend range (semitones):"), | |||||
| notePitchbendRangeLabel (String(), "Note pitchbend range (semitones):"), | |||||
| addZoneButton ("Add this zone"), | addZoneButton ("Add this zone"), | ||||
| clearAllZonesButton ("Clear all zones"), | clearAllZonesButton ("Clear all zones"), | ||||
| legacyStartChannelLabel (String::empty, "First channel:"), | |||||
| legacyEndChannelLabel (String::empty, "Last channel:"), | |||||
| legacyPitchbendRangeLabel (String::empty, "Pitchbend range (semitones):"), | |||||
| legacyStartChannelLabel (String(), "First channel:"), | |||||
| legacyEndChannelLabel (String(), "Last channel:"), | |||||
| legacyPitchbendRangeLabel (String(), "Pitchbend range (semitones):"), | |||||
| legacyModeEnabledToggle ("Enable Legacy Mode"), | legacyModeEnabledToggle ("Enable Legacy Mode"), | ||||
| voiceStealingEnabledToggle ("Enable synth voice stealing"), | voiceStealingEnabledToggle ("Enable synth voice stealing"), | ||||
| numberOfVoicesLabel (String::empty, "Number of synth voices") | |||||
| numberOfVoicesLabel (String(), "Number of synth voices") | |||||
| { | { | ||||
| initialiseComboBoxWithConsecutiveIntegers (masterChannel, masterChannelLabel, 1, 15, defaultMasterChannel); | initialiseComboBoxWithConsecutiveIntegers (masterChannel, masterChannelLabel, 1, 15, defaultMasterChannel); | ||||
| @@ -41,8 +41,8 @@ public: | |||||
| { | { | ||||
| setLookAndFeel (&lookAndFeel); | setLookAndFeel (&lookAndFeel); | ||||
| setSize (880, 720); | setSize (880, 720); | ||||
| audioDeviceManager.initialise (0, 2, 0, true, String::empty, 0); | |||||
| audioDeviceManager.addMidiInputCallback(String::empty, this); | |||||
| audioDeviceManager.initialise (0, 2, 0, true, String(), 0); | |||||
| audioDeviceManager.addMidiInputCallback (String(), this); | |||||
| audioDeviceManager.addAudioCallback (this); | audioDeviceManager.addAudioCallback (this); | ||||
| addAndMakeVisible (audioSetupComp); | addAndMakeVisible (audioSetupComp); | ||||
| @@ -65,7 +65,7 @@ public: | |||||
| ~MainComponent() | ~MainComponent() | ||||
| { | { | ||||
| audioDeviceManager.removeMidiInputCallback (String::empty, this); | |||||
| audioDeviceManager.removeMidiInputCallback (String(), this); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -167,7 +167,7 @@ MainContentComponent::MainContentComponent () | |||||
| midiMonitor.setScrollbarsShown (true); | midiMonitor.setScrollbarsShown (true); | ||||
| midiMonitor.setCaretVisible (false); | midiMonitor.setCaretVisible (false); | ||||
| midiMonitor.setPopupMenuEnabled (false); | midiMonitor.setPopupMenuEnabled (false); | ||||
| midiMonitor.setText (String::empty); | |||||
| midiMonitor.setText (String()); | |||||
| addAndMakeVisible (midiMonitor); | addAndMakeVisible (midiMonitor); | ||||
| if (! BluetoothMidiDevicePairingDialogue::isAvailable()) | if (! BluetoothMidiDevicePairingDialogue::isAvailable()) | ||||
| @@ -243,7 +243,7 @@ private: | |||||
| static String::CharPointerType findEndOfFaceToken (String::CharPointerType t) noexcept | static String::CharPointerType findEndOfFaceToken (String::CharPointerType t) noexcept | ||||
| { | { | ||||
| return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String::empty.getCharPointer()); | |||||
| return CharacterFunctions::findEndOfToken (t, CharPointer_ASCII ("/ \t"), String().getCharPointer()); | |||||
| } | } | ||||
| }; | }; | ||||
| @@ -59,9 +59,9 @@ public: | |||||
| JuceDemoPluginAudioProcessorEditor::JuceDemoPluginAudioProcessorEditor (JuceDemoPluginAudioProcessor& owner) | JuceDemoPluginAudioProcessorEditor::JuceDemoPluginAudioProcessorEditor (JuceDemoPluginAudioProcessor& owner) | ||||
| : AudioProcessorEditor (owner), | : AudioProcessorEditor (owner), | ||||
| midiKeyboard (owner.keyboardState, MidiKeyboardComponent::horizontalKeyboard), | midiKeyboard (owner.keyboardState, MidiKeyboardComponent::horizontalKeyboard), | ||||
| timecodeDisplayLabel (String::empty), | |||||
| gainLabel (String::empty, "Throughput level:"), | |||||
| delayLabel (String::empty, "Delay:") | |||||
| timecodeDisplayLabel (String()), | |||||
| gainLabel (String(), "Throughput level:"), | |||||
| delayLabel (String(), "Delay:") | |||||
| { | { | ||||
| // add some sliders.. | // add some sliders.. | ||||
| addAndMakeVisible (gainSlider = new ParameterSlider (*owner.gainParam)); | addAndMakeVisible (gainSlider = new ParameterSlider (*owner.gainParam)); | ||||
| @@ -256,7 +256,7 @@ Result FilterGraph::saveDocument (const File& file) | |||||
| { | { | ||||
| ScopedPointer<XmlElement> xml (createXml()); | ScopedPointer<XmlElement> xml (createXml()); | ||||
| if (! xml->writeToFile (file, String::empty)) | |||||
| if (! xml->writeToFile (file, String())) | |||||
| return Result::fail ("Couldn't write to the file"); | return Result::fail ("Couldn't write to the file"); | ||||
| return Result::ok(); | return Result::ok(); | ||||
| @@ -969,7 +969,7 @@ void GraphEditorPanel::dragConnector (const MouseEvent& e) | |||||
| if (draggingConnector != nullptr) | if (draggingConnector != nullptr) | ||||
| { | { | ||||
| draggingConnector->setTooltip (String::empty); | |||||
| draggingConnector->setTooltip (String()); | |||||
| int x = e2.x; | int x = e2.x; | ||||
| int y = e2.y; | int y = e2.y; | ||||
| @@ -1013,7 +1013,7 @@ void GraphEditorPanel::endDraggingConnector (const MouseEvent& e) | |||||
| if (draggingConnector == nullptr) | if (draggingConnector == nullptr) | ||||
| return; | return; | ||||
| draggingConnector->setTooltip (String::empty); | |||||
| draggingConnector->setTooltip (String()); | |||||
| const MouseEvent e2 (e.getEventRelativeTo (this)); | const MouseEvent e2 (e.getEventRelativeTo (this)); | ||||
| @@ -1108,7 +1108,7 @@ GraphDocumentComponent::GraphDocumentComponent (AudioPluginFormatManager& format | |||||
| addAndMakeVisible (statusBar = new TooltipBar()); | addAndMakeVisible (statusBar = new TooltipBar()); | ||||
| deviceManager->addAudioCallback (&graphPlayer); | deviceManager->addAudioCallback (&graphPlayer); | ||||
| deviceManager->addMidiInputCallback (String::empty, &graphPlayer.getMidiMessageCollector()); | |||||
| deviceManager->addMidiInputCallback (String(), &graphPlayer.getMidiMessageCollector()); | |||||
| graphPanel->updateComponents(); | graphPanel->updateComponents(); | ||||
| } | } | ||||
| @@ -1143,7 +1143,7 @@ void GraphDocumentComponent::unfocusKeyboardComponent() | |||||
| void GraphDocumentComponent::releaseGraph() | void GraphDocumentComponent::releaseGraph() | ||||
| { | { | ||||
| deviceManager->removeAudioCallback (&graphPlayer); | deviceManager->removeAudioCallback (&graphPlayer); | ||||
| deviceManager->removeMidiInputCallback (String::empty, &graphPlayer.getMidiMessageCollector()); | |||||
| deviceManager->removeMidiInputCallback (String(), &graphPlayer.getMidiMessageCollector()); | |||||
| deviceManager->removeChangeListener (graphPanel); | deviceManager->removeChangeListener (graphPanel); | ||||
| deleteAllChildren(); | deleteAllChildren(); | ||||
| @@ -387,12 +387,12 @@ void MainHostWindow::getCommandInfo (const CommandID commandID, ApplicationComma | |||||
| break; | break; | ||||
| case CommandIDs::showPluginListEditor: | case CommandIDs::showPluginListEditor: | ||||
| result.setInfo ("Edit the list of available plug-Ins...", String::empty, category, 0); | |||||
| result.setInfo ("Edit the list of available plug-Ins...", String(), category, 0); | |||||
| result.addDefaultKeypress ('p', ModifierKeys::commandModifier); | result.addDefaultKeypress ('p', ModifierKeys::commandModifier); | ||||
| break; | break; | ||||
| case CommandIDs::showAudioSettings: | case CommandIDs::showAudioSettings: | ||||
| result.setInfo ("Change the audio device settings", String::empty, category, 0); | |||||
| result.setInfo ("Change the audio device settings", String(), category, 0); | |||||
| result.addDefaultKeypress ('a', ModifierKeys::commandModifier); | result.addDefaultKeypress ('a', ModifierKeys::commandModifier); | ||||
| break; | break; | ||||
| @@ -401,7 +401,7 @@ void MainHostWindow::getCommandInfo (const CommandID commandID, ApplicationComma | |||||
| break; | break; | ||||
| case CommandIDs::aboutBox: | case CommandIDs::aboutBox: | ||||
| result.setInfo ("About...", String::empty, category, 0); | |||||
| result.setInfo ("About...", String(), category, 0); | |||||
| break; | break; | ||||
| case CommandIDs::allWindowsForward: | case CommandIDs::allWindowsForward: | ||||
| @@ -437,7 +437,7 @@ bool MainHostWindow::perform (const InvocationInfo& info) | |||||
| case CommandIDs::saveAs: | case CommandIDs::saveAs: | ||||
| if (graphEditor != nullptr && graphEditor->graph != nullptr) | if (graphEditor != nullptr && graphEditor->graph != nullptr) | ||||
| graphEditor->graph->saveAs (File::nonexistent, true, true, true); | |||||
| graphEditor->graph->saveAs (File(), true, true, true); | |||||
| break; | break; | ||||
| case CommandIDs::showPluginListEditor: | case CommandIDs::showPluginListEditor: | ||||
| @@ -577,6 +577,6 @@ bool MainHostWindow::isDoublePrecisionProcessing() | |||||
| void MainHostWindow::updatePrecisionMenuItem (ApplicationCommandInfo& info) | void MainHostWindow::updatePrecisionMenuItem (ApplicationCommandInfo& info) | ||||
| { | { | ||||
| info.setInfo ("Double floating point precision rendering", String::empty, "General", 0); | |||||
| info.setInfo ("Double floating point precision rendering", String(), "General", 0); | |||||
| info.setTicked (isDoublePrecisionProcessing()); | info.setTicked (isDoublePrecisionProcessing()); | ||||
| } | } | ||||
| @@ -170,7 +170,7 @@ bool AppearanceSettings::readFromFile (const File& file) | |||||
| bool AppearanceSettings::writeToFile (const File& file) const | bool AppearanceSettings::writeToFile (const File& file) const | ||||
| { | { | ||||
| const ScopedPointer<XmlElement> xml (settings.createXml()); | const ScopedPointer<XmlElement> xml (settings.createXml()); | ||||
| return xml != nullptr && xml->writeToFile (file, String::empty); | |||||
| return xml != nullptr && xml->writeToFile (file, String()); | |||||
| } | } | ||||
| Font AppearanceSettings::getDefaultCodeFont() | Font AppearanceSettings::getDefaultCodeFont() | ||||
| @@ -77,7 +77,7 @@ Identifier PathSettingsTab::getKeyForPropertyComponent (TextPropertyComponent* c | |||||
| // this property component does not have a key associated to it! | // this property component does not have a key associated to it! | ||||
| jassertfalse; | jassertfalse; | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| Component* PathSettingsTab::getContent() | Component* PathSettingsTab::getContent() | ||||
| @@ -286,7 +286,7 @@ struct AppearanceEditor | |||||
| StringArray names; | StringArray names; | ||||
| names.add ("<Default Monospaced>"); | names.add ("<Default Monospaced>"); | ||||
| names.add (String::empty); | |||||
| names.add (String()); | |||||
| names.addArray (getAppSettings().monospacedFontNames); | names.addArray (getAppSettings().monospacedFontNames); | ||||
| return new ChoicePropertyComponent (Value (new FontNameValueSource (value)), | return new ChoicePropertyComponent (Value (new FontNameValueSource (value)), | ||||
| @@ -62,7 +62,7 @@ public: | |||||
| Component* createEditor() override { return new ItemPreviewComponent (file); } | Component* createEditor() override { return new ItemPreviewComponent (file); } | ||||
| Component* createViewer() override { return createEditor(); } | Component* createViewer() override { return createEditor(); } | ||||
| void fileHasBeenRenamed (const File& newFile) override { file = newFile; } | void fileHasBeenRenamed (const File& newFile) override { file = newFile; } | ||||
| String getState() const override { return String::empty; } | |||||
| String getState() const override { return String(); } | |||||
| void restoreState (const String&) override {} | void restoreState (const String&) override {} | ||||
| String getType() const override | String getType() const override | ||||
| @@ -62,7 +62,7 @@ public: | |||||
| virtual void fileHasBeenRenamed (const File& newFile) = 0; | virtual void fileHasBeenRenamed (const File& newFile) = 0; | ||||
| virtual String getState() const = 0; | virtual String getState() const = 0; | ||||
| virtual void restoreState (const String& state) = 0; | virtual void restoreState (const String& state) = 0; | ||||
| virtual File getCounterpartFile() const { return File::nonexistent; } | |||||
| virtual File getCounterpartFile() const { return File(); } | |||||
| }; | }; | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -639,7 +639,7 @@ void CppCodeEditorComponent::insertComponentClass() | |||||
| const char* classNameField = "Class Name"; | const char* classNameField = "Class Name"; | ||||
| aw.addTextEditor (classNameField, String::empty, String::empty, false); | |||||
| aw.addTextEditor (classNameField, String(), String(), false); | |||||
| aw.addButton (TRANS ("Insert Code"), 1, KeyPress (KeyPress::returnKey)); | aw.addButton (TRANS ("Insert Code"), 1, KeyPress (KeyPress::returnKey)); | ||||
| aw.addButton (TRANS ("Cancel"), 0, KeyPress (KeyPress::escapeKey)); | aw.addButton (TRANS ("Cancel"), 0, KeyPress (KeyPress::escapeKey)); | ||||
| @@ -46,7 +46,7 @@ public: | |||||
| bool needsSaving() const override { return codeDoc != nullptr && codeDoc->hasChangedSinceSavePoint(); } | bool needsSaving() const override { return codeDoc != nullptr && codeDoc->hasChangedSinceSavePoint(); } | ||||
| bool hasFileBeenModifiedExternally() override { return modDetector.hasBeenModified(); } | bool hasFileBeenModifiedExternally() override { return modDetector.hasBeenModified(); } | ||||
| void fileHasBeenRenamed (const File& newFile) override { modDetector.fileHasBeenRenamed (newFile); } | void fileHasBeenRenamed (const File& newFile) override { modDetector.fileHasBeenRenamed (newFile); } | ||||
| String getState() const override { return lastState != nullptr ? lastState->toString() : String::empty; } | |||||
| String getState() const override { return lastState != nullptr ? lastState->toString() : String(); } | |||||
| void restoreState (const String& state) override { lastState = new CodeEditorComponent::State (state); } | void restoreState (const String& state) override { lastState = new CodeEditorComponent::State (state); } | ||||
| File getCounterpartFile() const override | File getCounterpartFile() const override | ||||
| @@ -55,14 +55,14 @@ public: | |||||
| if (! ComponentTypeHandler::restoreFromXml (xml, comp, layout)) | if (! ComponentTypeHandler::restoreFromXml (xml, comp, layout)) | ||||
| return false; | return false; | ||||
| ComboBox defaultBox (String::empty); | |||||
| ComboBox defaultBox; | |||||
| ComboBox* const c = dynamic_cast<ComboBox*> (comp); | ComboBox* const c = dynamic_cast<ComboBox*> (comp); | ||||
| jassert (c != nullptr); | jassert (c != nullptr); | ||||
| c->setEditableText (xml.getBoolAttribute ("editable", defaultBox.isTextEditable())); | c->setEditableText (xml.getBoolAttribute ("editable", defaultBox.isTextEditable())); | ||||
| c->setJustificationType (Justification (xml.getIntAttribute ("layout", defaultBox.getJustificationType().getFlags()))); | c->setJustificationType (Justification (xml.getIntAttribute ("layout", defaultBox.getJustificationType().getFlags()))); | ||||
| c->getProperties().set ("items", xml.getStringAttribute ("items", String::empty)); | |||||
| c->getProperties().set ("items", xml.getStringAttribute ("items", String())); | |||||
| c->setTextWhenNothingSelected (xml.getStringAttribute ("textWhenNonSelected", defaultBox.getTextWhenNothingSelected())); | c->setTextWhenNothingSelected (xml.getStringAttribute ("textWhenNonSelected", defaultBox.getTextWhenNothingSelected())); | ||||
| c->setTextWhenNoChoicesAvailable (xml.getStringAttribute ("textWhenNoItems", defaultBox.getTextWhenNoChoicesAvailable())); | c->setTextWhenNoChoicesAvailable (xml.getStringAttribute ("textWhenNoItems", defaultBox.getTextWhenNoChoicesAvailable())); | ||||
| @@ -196,7 +196,7 @@ bool ComponentTypeHandler::restoreFromXml (const XmlElement& xml, | |||||
| for (int i = 0; i < colours.size(); ++i) | for (int i = 0; i < colours.size(); ++i) | ||||
| { | { | ||||
| const String col (xml.getStringAttribute (colours[i]->xmlTagName, String::empty)); | |||||
| const String col (xml.getStringAttribute (colours[i]->xmlTagName, String())); | |||||
| if (col.isNotEmpty()) | if (col.isNotEmpty()) | ||||
| comp->setColour (colours[i]->colourId, Colour::fromString (col)); | comp->setColour (colours[i]->colourId, Colour::fromString (col)); | ||||
| @@ -518,12 +518,12 @@ void ComponentTypeHandler::fillInResizeCode (GeneratedCode& code, Component* com | |||||
| if (pos.rect.isPositionAbsolute()) | if (pos.rect.isPositionAbsolute()) | ||||
| code.constructorCode += r + "\n"; | code.constructorCode += r + "\n"; | ||||
| else | else | ||||
| code.getCallbackCode (String::empty, "void", "resized()", false) += r; | |||||
| code.getCallbackCode (String(), "void", "resized()", false) += r; | |||||
| } | } | ||||
| String ComponentTypeHandler::getCreationParameters (GeneratedCode&, Component*) | String ComponentTypeHandler::getCreationParameters (GeneratedCode&, Component*) | ||||
| { | { | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| void ComponentTypeHandler::fillInCreationCode (GeneratedCode& code, Component* component, const String& memberVariableName) | void ComponentTypeHandler::fillInCreationCode (GeneratedCode& code, Component* component, const String& memberVariableName) | ||||
| @@ -93,7 +93,7 @@ public: | |||||
| return false; | return false; | ||||
| ((GenericComponent*) comp)->actualClassName = xml.getStringAttribute ("class", "Component"); | ((GenericComponent*) comp)->actualClassName = xml.getStringAttribute ("class", "Component"); | ||||
| ((GenericComponent*) comp)->constructorParams = xml.getStringAttribute ("params", String::empty); | |||||
| ((GenericComponent*) comp)->constructorParams = xml.getStringAttribute ("params", String()); | |||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -44,7 +44,7 @@ public: | |||||
| XmlElement* e = ComponentTypeHandler::createXmlFor (comp, layout); | XmlElement* e = ComponentTypeHandler::createXmlFor (comp, layout); | ||||
| e->setAttribute ("title", g->getText()); | e->setAttribute ("title", g->getText()); | ||||
| GroupComponent defaultComp (String::empty, String::empty); | |||||
| GroupComponent defaultComp; | |||||
| if (g->getTextLabelPosition().getFlags() != defaultComp.getTextLabelPosition().getFlags()) | if (g->getTextLabelPosition().getFlags() != defaultComp.getTextLabelPosition().getFlags()) | ||||
| e->setAttribute ("textpos", g->getTextLabelPosition().getFlags()); | e->setAttribute ("textpos", g->getTextLabelPosition().getFlags()); | ||||
| @@ -82,7 +82,7 @@ public: | |||||
| String s; | String s; | ||||
| GroupComponent defaultComp (String::empty, String::empty); | |||||
| GroupComponent defaultComp; | |||||
| if (g->getTextLabelPosition().getFlags() != defaultComp.getTextLabelPosition().getFlags()) | if (g->getTextLabelPosition().getFlags() != defaultComp.getTextLabelPosition().getFlags()) | ||||
| { | { | ||||
| @@ -101,15 +101,15 @@ public: | |||||
| setImageKeepProportions (l, ib, xml.getBoolAttribute ("keepProportions", true), false); | setImageKeepProportions (l, ib, xml.getBoolAttribute ("keepProportions", true), false); | ||||
| setImageResource (l, ib, normalImage, xml.getStringAttribute ("resourceNormal", String::empty), false); | |||||
| setImageResource (l, ib, normalImage, xml.getStringAttribute ("resourceNormal", String()), false); | |||||
| setImageOpacity (l, ib, normalImage, (float) xml.getDoubleAttribute ("opacityNormal", 1.0f), false); | setImageOpacity (l, ib, normalImage, (float) xml.getDoubleAttribute ("opacityNormal", 1.0f), false); | ||||
| setImageColour (l, ib, normalImage, Colour::fromString (xml.getStringAttribute ("colourNormal", "0")), false); | setImageColour (l, ib, normalImage, Colour::fromString (xml.getStringAttribute ("colourNormal", "0")), false); | ||||
| setImageResource (l, ib, overImage, xml.getStringAttribute ("resourceOver", String::empty), false); | |||||
| setImageResource (l, ib, overImage, xml.getStringAttribute ("resourceOver", String()), false); | |||||
| setImageOpacity (l, ib, overImage, (float) xml.getDoubleAttribute ("opacityOver", 1.0f), false); | setImageOpacity (l, ib, overImage, (float) xml.getDoubleAttribute ("opacityOver", 1.0f), false); | ||||
| setImageColour (l, ib, overImage, Colour::fromString (xml.getStringAttribute ("colourOver", "0")), false); | setImageColour (l, ib, overImage, Colour::fromString (xml.getStringAttribute ("colourOver", "0")), false); | ||||
| setImageResource (l, ib, downImage, xml.getStringAttribute ("resourceDown", String::empty), false); | |||||
| setImageResource (l, ib, downImage, xml.getStringAttribute ("resourceDown", String()), false); | |||||
| setImageOpacity (l, ib, downImage, (float) xml.getDoubleAttribute ("opacityDown", 1.0f), false); | setImageOpacity (l, ib, downImage, (float) xml.getDoubleAttribute ("opacityDown", 1.0f), false); | ||||
| setImageColour (l, ib, downImage, Colour::fromString (xml.getStringAttribute ("colourDown", "0")), false); | setImageColour (l, ib, downImage, Colour::fromString (xml.getStringAttribute ("colourDown", "0")), false); | ||||
| @@ -68,7 +68,7 @@ public: | |||||
| if (! ComponentTypeHandler::restoreFromXml (xml, comp, layout)) | if (! ComponentTypeHandler::restoreFromXml (xml, comp, layout)) | ||||
| return false; | return false; | ||||
| Label defaultLabel (String::empty, String::empty); | |||||
| Label defaultLabel; | |||||
| Font font; | Font font; | ||||
| font.setHeight ((float) xml.getDoubleAttribute ("fontsize", 15.0)); | font.setHeight ((float) xml.getDoubleAttribute ("fontsize", 15.0)); | ||||
| @@ -147,7 +147,7 @@ public: | |||||
| default: jassertfalse; break; | default: jassertfalse; break; | ||||
| } | } | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| void fillInCreationCode (GeneratedCode& code, Component* component, const String& memberVariableName) | void fillInCreationCode (GeneratedCode& code, Component* component, const String& memberVariableName) | ||||
| @@ -275,7 +275,7 @@ public: | |||||
| TabDemoContentComp* const tdc = dynamic_cast<TabDemoContentComp*> (tc->getTabContentComponent (tabIndex)); | TabDemoContentComp* const tdc = dynamic_cast<TabDemoContentComp*> (tc->getTabContentComponent (tabIndex)); | ||||
| jassert (tdc != nullptr); | jassert (tdc != nullptr); | ||||
| return tdc != 0 ? tdc->contentClassName : String::empty; | |||||
| return tdc != 0 ? tdc->contentClassName : String(); | |||||
| } | } | ||||
| static void setTabClassName (TabbedComponent* tc, int tabIndex, const String& newName) | static void setTabClassName (TabbedComponent* tc, int tabIndex, const String& newName) | ||||
| @@ -295,7 +295,7 @@ public: | |||||
| TabDemoContentComp* const tdc = dynamic_cast<TabDemoContentComp*> (tc->getTabContentComponent (tabIndex)); | TabDemoContentComp* const tdc = dynamic_cast<TabDemoContentComp*> (tc->getTabContentComponent (tabIndex)); | ||||
| jassert (tdc != nullptr); | jassert (tdc != nullptr); | ||||
| return tdc != 0 ? tdc->constructorParams : String::empty; | |||||
| return tdc != 0 ? tdc->constructorParams : String(); | |||||
| } | } | ||||
| static void setTabConstructorParams (TabbedComponent* tc, int tabIndex, const String& newParams) | static void setTabConstructorParams (TabbedComponent* tc, int tabIndex, const String& newParams) | ||||
| @@ -315,7 +315,7 @@ public: | |||||
| TabDemoContentComp* const tdc = dynamic_cast<TabDemoContentComp*> (tc->getTabContentComponent (tabIndex)); | TabDemoContentComp* const tdc = dynamic_cast<TabDemoContentComp*> (tc->getTabContentComponent (tabIndex)); | ||||
| jassert (tdc != nullptr); | jassert (tdc != nullptr); | ||||
| return tdc != 0 ? tdc->jucerComponentFile : String::empty; | |||||
| return tdc != 0 ? tdc->jucerComponentFile : String(); | |||||
| } | } | ||||
| static void setTabJucerFile (TabbedComponent* tc, int tabIndex, const String& newFile) | static void setTabJucerFile (TabbedComponent* tc, int tabIndex, const String& newFile) | ||||
| @@ -66,7 +66,7 @@ public: | |||||
| v->setScrollBarThickness (xml.getIntAttribute ("scrollbarThickness", defaultViewport.getScrollBarThickness())); | v->setScrollBarThickness (xml.getIntAttribute ("scrollbarThickness", defaultViewport.getScrollBarThickness())); | ||||
| setViewportJucerComponentFile (v, xml.getStringAttribute ("jucerFile", String::empty)); | |||||
| setViewportJucerComponentFile (v, xml.getStringAttribute ("jucerFile", String())); | |||||
| setViewportGenericComponentClass (v, xml.getStringAttribute ("contentClass")); | setViewportGenericComponentClass (v, xml.getStringAttribute ("contentClass")); | ||||
| setViewportContentType (v, xml.getIntAttribute ("contentType", 0)); | setViewportContentType (v, xml.getIntAttribute ("contentType", 0)); | ||||
| setViewportConstructorParams (v, xml.getStringAttribute ("constructorParams")); | setViewportConstructorParams (v, xml.getStringAttribute ("constructorParams")); | ||||
| @@ -150,7 +150,7 @@ public: | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| classNm = String::empty; | |||||
| classNm = String(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -505,7 +505,7 @@ private: | |||||
| const String filename (getViewportJucerComponentFile (component)); | const String filename (getViewportJucerComponentFile (component)); | ||||
| if (filename.isEmpty()) | if (filename.isEmpty()) | ||||
| return File::nonexistent; | |||||
| return File(); | |||||
| return document.getCppFile().getSiblingFile (filename); | return document.getCppFile().getSiblingFile (filename); | ||||
| } | } | ||||
| @@ -275,7 +275,7 @@ class ButtonTestComponent : public Button | |||||
| { | { | ||||
| public: | public: | ||||
| ButtonTestComponent (ButtonDocument* const doc, const bool fillBackground) | ButtonTestComponent (ButtonDocument* const doc, const bool fillBackground) | ||||
| : Button (String::empty), | |||||
| : Button (String()), | |||||
| document (doc), | document (doc), | ||||
| alwaysFillBackground (fillBackground) | alwaysFillBackground (fillBackground) | ||||
| { | { | ||||
| @@ -158,7 +158,7 @@ String BinaryResources::browseForResource (const String& title, | |||||
| return name; | return name; | ||||
| } | } | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| String BinaryResources::findUniqueName (const String& rootName) const | String BinaryResources::findUniqueName (const String& rootName) const | ||||
| @@ -715,7 +715,7 @@ void ComponentLayout::fillInGeneratedCode (GeneratedCode& code) const | |||||
| String ComponentLayout::getComponentMemberVariableName (Component* comp) const | String ComponentLayout::getComponentMemberVariableName (Component* comp) const | ||||
| { | { | ||||
| if (comp == nullptr) | if (comp == nullptr) | ||||
| return String::empty; | |||||
| return String(); | |||||
| String name (comp->getProperties() ["memberName"].toString()); | String name (comp->getProperties() ["memberName"].toString()); | ||||
| @@ -730,7 +730,7 @@ void ComponentLayout::setComponentMemberVariableName (Component* comp, const Str | |||||
| jassert (comp != nullptr); | jassert (comp != nullptr); | ||||
| const String oldName (getComponentMemberVariableName (comp)); | const String oldName (getComponentMemberVariableName (comp)); | ||||
| comp->getProperties().set ("memberName", String::empty); | |||||
| comp->getProperties().set ("memberName", String()); | |||||
| const String n (getUnusedMemberName (CodeHelpers::makeValidIdentifier (newName, false, true, false), comp)); | const String n (getUnusedMemberName (CodeHelpers::makeValidIdentifier (newName, false, true, false), comp)); | ||||
| comp->getProperties().set ("memberName", n); | comp->getProperties().set ("memberName", n); | ||||
| @@ -775,7 +775,7 @@ String ComponentLayout::getUnusedMemberName (String nameRoot, Component* comp) c | |||||
| String ComponentLayout::getComponentVirtualClassName (Component* comp) const | String ComponentLayout::getComponentVirtualClassName (Component* comp) const | ||||
| { | { | ||||
| if (comp == nullptr) | if (comp == nullptr) | ||||
| return String::empty; | |||||
| return String(); | |||||
| return comp->getProperties() ["virtualName"]; | return comp->getProperties() ["virtualName"]; | ||||
| } | } | ||||
| @@ -173,7 +173,7 @@ void JucerDocument::setParentClasses (const String& classes) | |||||
| s = s.fromFirstOccurrenceOf (" ", false, false); | s = s.fromFirstOccurrenceOf (" ", false, false); | ||||
| if (s.trim().isEmpty()) | if (s.trim().isEmpty()) | ||||
| type = s = String::empty; | |||||
| type = s = String(); | |||||
| } | } | ||||
| s = type + CodeHelpers::makeValidIdentifier (s.trim(), false, false, true); | s = type + CodeHelpers::makeValidIdentifier (s.trim(), false, false, true); | ||||
| @@ -378,11 +378,11 @@ bool JucerDocument::loadFromXml (const XmlElement& xml) | |||||
| && getTypeName().equalsIgnoreCase (xml.getStringAttribute ("documentType"))) | && getTypeName().equalsIgnoreCase (xml.getStringAttribute ("documentType"))) | ||||
| { | { | ||||
| className = xml.getStringAttribute ("className", defaultClassName); | className = xml.getStringAttribute ("className", defaultClassName); | ||||
| templateFile = xml.getStringAttribute ("template", String::empty); | |||||
| componentName = xml.getStringAttribute ("componentName", String::empty); | |||||
| templateFile = xml.getStringAttribute ("template", String()); | |||||
| componentName = xml.getStringAttribute ("componentName", String()); | |||||
| parentClasses = xml.getStringAttribute ("parentClasses", defaultParentClasses); | parentClasses = xml.getStringAttribute ("parentClasses", defaultParentClasses); | ||||
| constructorParams = xml.getStringAttribute ("constructorParams", String::empty); | |||||
| variableInitialisers = xml.getStringAttribute ("variableInitialisers", String::empty); | |||||
| constructorParams = xml.getStringAttribute ("constructorParams", String()); | |||||
| variableInitialisers = xml.getStringAttribute ("variableInitialisers", String()); | |||||
| fixedSize = xml.getBoolAttribute ("fixedSize", false); | fixedSize = xml.getBoolAttribute ("fixedSize", false); | ||||
| initialWidth = xml.getIntAttribute ("initialWidth", 300); | initialWidth = xml.getIntAttribute ("initialWidth", 300); | ||||
| @@ -425,10 +425,10 @@ void JucerDocument::fillInGeneratedCode (GeneratedCode& code) const | |||||
| code.constructorCode << "setName (" + quotedString (componentName, false) + ");\n"; | code.constructorCode << "setName (" + quotedString (componentName, false) + ");\n"; | ||||
| // call these now, just to make sure they're the first two methods in the list. | // call these now, just to make sure they're the first two methods in the list. | ||||
| code.getCallbackCode (String::empty, "void", "paint (Graphics& g)", false) | |||||
| code.getCallbackCode (String(), "void", "paint (Graphics& g)", false) | |||||
| << "//[UserPrePaint] Add your own custom painting code here..\n//[/UserPrePaint]\n\n"; | << "//[UserPrePaint] Add your own custom painting code here..\n//[/UserPrePaint]\n\n"; | ||||
| code.getCallbackCode (String::empty, "void", "resized()", false) | |||||
| code.getCallbackCode (String(), "void", "resized()", false) | |||||
| << "//[UserPreResize] Add your own custom resize code here..\n//[/UserPreResize]\n\n"; | << "//[UserPreResize] Add your own custom resize code here..\n//[/UserPreResize]\n\n"; | ||||
| if (ComponentLayout* l = getComponentLayout()) | if (ComponentLayout* l = getComponentLayout()) | ||||
| @@ -449,10 +449,10 @@ void JucerDocument::fillInGeneratedCode (GeneratedCode& code) const | |||||
| if (initialWidth > 0 || initialHeight > 0) | if (initialWidth > 0 || initialHeight > 0) | ||||
| code.constructorCode << "\nsetSize (" << initialWidth << ", " << initialHeight << ");\n"; | code.constructorCode << "\nsetSize (" << initialWidth << ", " << initialHeight << ");\n"; | ||||
| code.getCallbackCode (String::empty, "void", "paint (Graphics& g)", false) | |||||
| code.getCallbackCode (String(), "void", "paint (Graphics& g)", false) | |||||
| << "//[UserPaint] Add your own custom painting code here..\n//[/UserPaint]"; | << "//[UserPaint] Add your own custom painting code here..\n//[/UserPaint]"; | ||||
| code.getCallbackCode (String::empty, "void", "resized()", false) | |||||
| code.getCallbackCode (String(), "void", "resized()", false) | |||||
| << "//[UserResized] Add your own custom resize handling here..\n//[/UserResized]"; | << "//[UserResized] Add your own custom resize handling here..\n//[/UserResized]"; | ||||
| // add optional methods | // add optional methods | ||||
| @@ -491,7 +491,7 @@ void JucerDocument::fillInPaintCode (GeneratedCode& code) const | |||||
| { | { | ||||
| for (int i = 0; i < getNumPaintRoutines(); ++i) | for (int i = 0; i < getNumPaintRoutines(); ++i) | ||||
| getPaintRoutine (i) | getPaintRoutine (i) | ||||
| ->fillInGeneratedCode (code, code.getCallbackCode (String::empty, "void", "paint (Graphics& g)", false)); | |||||
| ->fillInGeneratedCode (code, code.getCallbackCode (String(), "void", "paint (Graphics& g)", false)); | |||||
| } | } | ||||
| void JucerDocument::setTemplateFile (const String& newFile) | void JucerDocument::setTemplateFile (const String& newFile) | ||||
| @@ -377,7 +377,7 @@ public: | |||||
| String getResource() const | String getResource() const | ||||
| { | { | ||||
| if (element == nullptr) | if (element == nullptr) | ||||
| return String::empty; | |||||
| return String(); | |||||
| if (isForStroke) | if (isForStroke) | ||||
| return element->getStrokeType().fill.imageResourceName; | return element->getStrokeType().fill.imageResourceName; | ||||
| @@ -893,12 +893,12 @@ void ColouredElement::addColourAttributes (XmlElement* const e) const | |||||
| bool ColouredElement::loadColourAttributes (const XmlElement& xml) | bool ColouredElement::loadColourAttributes (const XmlElement& xml) | ||||
| { | { | ||||
| fillType.restoreFromString (xml.getStringAttribute ("fill", String::empty)); | |||||
| fillType.restoreFromString (xml.getStringAttribute ("fill", String())); | |||||
| isStrokePresent = showOutline && xml.getBoolAttribute ("hasStroke", false); | isStrokePresent = showOutline && xml.getBoolAttribute ("hasStroke", false); | ||||
| strokeType.restoreFromString (xml.getStringAttribute ("stroke", String::empty)); | |||||
| strokeType.fill.restoreFromString (xml.getStringAttribute ("strokeColour", String::empty)); | |||||
| strokeType.restoreFromString (xml.getStringAttribute ("stroke", String())); | |||||
| strokeType.fill.restoreFromString (xml.getStringAttribute ("strokeColour", String())); | |||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -202,7 +202,7 @@ public: | |||||
| break; | break; | ||||
| } | } | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| void restoreFromString (const String& s) | void restoreFromString (const String& s) | ||||
| @@ -77,8 +77,8 @@ public: | |||||
| String resource (document.getResources() | String resource (document.getResources() | ||||
| .browseForResource ("Select an image file to add as a resource", | .browseForResource ("Select an image file to add as a resource", | ||||
| "*.jpg;*.jpeg;*.png;*.gif;*.svg", | "*.jpg;*.jpeg;*.png;*.gif;*.svg", | ||||
| File::nonexistent, | |||||
| String::empty)); | |||||
| File(), | |||||
| String())); | |||||
| if (resource.isNotEmpty()) | if (resource.isNotEmpty()) | ||||
| setResource (resource); | setResource (resource); | ||||
| @@ -86,7 +86,7 @@ public: | |||||
| else | else | ||||
| { | { | ||||
| if (choices[newIndex] == getNoneText() && allowChoiceOfNoResource) | if (choices[newIndex] == getNoneText() && allowChoiceOfNoResource) | ||||
| setResource (String::empty); | |||||
| setResource (String()); | |||||
| else | else | ||||
| setResource (choices [newIndex]); | setResource (choices [newIndex]); | ||||
| } | } | ||||
| @@ -110,7 +110,7 @@ public: | |||||
| choices.clear(); | choices.clear(); | ||||
| choices.add ("-- create a new image resource -- "); | choices.add ("-- create a new image resource -- "); | ||||
| choices.add (String::empty); | |||||
| choices.add (String()); | |||||
| if (allowChoiceOfNoResource) | if (allowChoiceOfNoResource) | ||||
| choices.add (getNoneText()); | choices.add (getNoneText()); | ||||
| @@ -368,7 +368,7 @@ public: | |||||
| if (xml.hasTagName (getTagName())) | if (xml.hasTagName (getTagName())) | ||||
| { | { | ||||
| position.restoreFromXml (xml, position); | position.restoreFromXml (xml, position); | ||||
| resourceName = xml.getStringAttribute ("resource", String::empty); | |||||
| resourceName = xml.getStringAttribute ("resource", String()); | |||||
| opacity = xml.getDoubleAttribute ("opacity", 1.0); | opacity = xml.getDoubleAttribute ("opacity", 1.0); | ||||
| mode = (StretchMode) xml.getIntAttribute ("mode", (int) stretched); | mode = (StretchMode) xml.getIntAttribute ("mode", (int) stretched); | ||||
| @@ -405,7 +405,7 @@ private: | |||||
| if (element != nullptr) | if (element != nullptr) | ||||
| return element->getResource(); | return element->getResource(); | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| }; | }; | ||||
| @@ -425,7 +425,7 @@ void PaintElementPath::fillInGeneratedCode (GeneratedCode& code, String& paintMe | |||||
| r << '\n'; | r << '\n'; | ||||
| if (somePointsAreRelative) | if (somePointsAreRelative) | ||||
| code.getCallbackCode (String::empty, "void", "resized()", false) | |||||
| code.getCallbackCode (String(), "void", "resized()", false) | |||||
| << pathVariable << ".clear();\n" << r; | << pathVariable << ".clear();\n" << r; | ||||
| else | else | ||||
| code.constructorCode << r; | code.constructorCode << r; | ||||
| @@ -35,9 +35,9 @@ public: | |||||
| const bool allowEditingOfFilename, | const bool allowEditingOfFilename, | ||||
| const String& fileBrowserWildcard = "*") | const String& fileBrowserWildcard = "*") | ||||
| : PropertyComponent (name), | : PropertyComponent (name), | ||||
| filenameComp (name, File::nonexistent, allowEditingOfFilename, | |||||
| filenameComp (name, File(), allowEditingOfFilename, | |||||
| isDirectory, false, fileBrowserWildcard, | isDirectory, false, fileBrowserWildcard, | ||||
| String::empty, String::empty) | |||||
| String(), String()) | |||||
| { | { | ||||
| addAndMakeVisible (filenameComp); | addAndMakeVisible (filenameComp); | ||||
| filenameComp.addListener (this); | filenameComp.addListener (this); | ||||
| @@ -36,7 +36,7 @@ public: | |||||
| choices.add (getDefaultSans()); | choices.add (getDefaultSans()); | ||||
| choices.add (getDefaultSerif()); | choices.add (getDefaultSerif()); | ||||
| choices.add (getDefaultMono()); | choices.add (getDefaultMono()); | ||||
| choices.add (String::empty); | |||||
| choices.add (String()); | |||||
| static StringArray fontNames; | static StringArray fontNames; | ||||
| @@ -90,7 +90,7 @@ public: | |||||
| static String getTypefaceNameCode (const String& typefaceName) | static String getTypefaceNameCode (const String& typefaceName) | ||||
| { | { | ||||
| if (typefaceName == getDefaultFont()) return String::empty; | |||||
| if (typefaceName == getDefaultFont()) return String(); | |||||
| if (typefaceName == getDefaultSans()) return "Font::getDefaultSansSerifFontName(), "; | if (typefaceName == getDefaultSans()) return "Font::getDefaultSansSerifFontName(), "; | ||||
| if (typefaceName == getDefaultSerif()) return "Font::getDefaultSerifFontName(), "; | if (typefaceName == getDefaultSerif()) return "Font::getDefaultSerifFontName(), "; | ||||
| if (typefaceName == getDefaultMono()) return "Font::getDefaultMonospacedFontName(), "; | if (typefaceName == getDefaultMono()) return "Font::getDefaultMonospacedFontName(), "; | ||||
| @@ -414,7 +414,7 @@ protected: | |||||
| public: | public: | ||||
| PositionPropLabel (PositionPropertyBase& owner_) | PositionPropLabel (PositionPropertyBase& owner_) | ||||
| : Label (String::empty, String::empty), | |||||
| : Label (String(), String()), | |||||
| owner (owner_) | owner (owner_) | ||||
| { | { | ||||
| setEditable (true, true, false); | setEditable (true, true, false); | ||||
| @@ -47,7 +47,7 @@ public: | |||||
| : PropertyComponent ("extra callbacks", 250), | : PropertyComponent ("extra callbacks", 250), | ||||
| document (doc) | document (doc) | ||||
| { | { | ||||
| addAndMakeVisible (listBox = new ListBox (String::empty, this)); | |||||
| addAndMakeVisible (listBox = new ListBox (String(), this)); | |||||
| listBox->setRowHeight (22); | listBox->setRowHeight (22); | ||||
| document.addChangeListener (this); | document.addChangeListener (this); | ||||
| @@ -817,20 +817,20 @@ void JucerDocumentEditor::getCommandInfo (const CommandID commandID, Application | |||||
| break; | break; | ||||
| case StandardApplicationCommandIDs::cut: | case StandardApplicationCommandIDs::cut: | ||||
| result.setInfo (TRANS ("Cut"), String::empty, "Editing", 0); | |||||
| result.setInfo (TRANS ("Cut"), String(), "Editing", 0); | |||||
| result.setActive (isSomethingSelected()); | result.setActive (isSomethingSelected()); | ||||
| result.defaultKeypresses.add (KeyPress ('x', cmd, 0)); | result.defaultKeypresses.add (KeyPress ('x', cmd, 0)); | ||||
| break; | break; | ||||
| case StandardApplicationCommandIDs::copy: | case StandardApplicationCommandIDs::copy: | ||||
| result.setInfo (TRANS ("Copy"), String::empty, "Editing", 0); | |||||
| result.setInfo (TRANS ("Copy"), String(), "Editing", 0); | |||||
| result.setActive (isSomethingSelected()); | result.setActive (isSomethingSelected()); | ||||
| result.defaultKeypresses.add (KeyPress ('c', cmd, 0)); | result.defaultKeypresses.add (KeyPress ('c', cmd, 0)); | ||||
| break; | break; | ||||
| case StandardApplicationCommandIDs::paste: | case StandardApplicationCommandIDs::paste: | ||||
| { | { | ||||
| result.setInfo (TRANS ("Paste"), String::empty, "Editing", 0); | |||||
| result.setInfo (TRANS ("Paste"), String(), "Editing", 0); | |||||
| result.defaultKeypresses.add (KeyPress ('v', cmd, 0)); | result.defaultKeypresses.add (KeyPress ('v', cmd, 0)); | ||||
| bool canPaste = false; | bool canPaste = false; | ||||
| @@ -851,18 +851,18 @@ void JucerDocumentEditor::getCommandInfo (const CommandID commandID, Application | |||||
| break; | break; | ||||
| case StandardApplicationCommandIDs::del: | case StandardApplicationCommandIDs::del: | ||||
| result.setInfo (TRANS ("Delete"), String::empty, "Editing", 0); | |||||
| result.setInfo (TRANS ("Delete"), String(), "Editing", 0); | |||||
| result.setActive (isSomethingSelected()); | result.setActive (isSomethingSelected()); | ||||
| break; | break; | ||||
| case StandardApplicationCommandIDs::selectAll: | case StandardApplicationCommandIDs::selectAll: | ||||
| result.setInfo (TRANS ("Select All"), String::empty, "Editing", 0); | |||||
| result.setInfo (TRANS ("Select All"), String(), "Editing", 0); | |||||
| result.setActive (currentPaintRoutine != nullptr || currentLayout != nullptr); | result.setActive (currentPaintRoutine != nullptr || currentLayout != nullptr); | ||||
| result.defaultKeypresses.add (KeyPress ('a', cmd, 0)); | result.defaultKeypresses.add (KeyPress ('a', cmd, 0)); | ||||
| break; | break; | ||||
| case StandardApplicationCommandIDs::deselectAll: | case StandardApplicationCommandIDs::deselectAll: | ||||
| result.setInfo (TRANS ("Deselect All"), String::empty, "Editing", 0); | |||||
| result.setInfo (TRANS ("Deselect All"), String(), "Editing", 0); | |||||
| result.setActive (currentPaintRoutine != nullptr || currentLayout != nullptr); | result.setActive (currentPaintRoutine != nullptr || currentLayout != nullptr); | ||||
| result.defaultKeypresses.add (KeyPress ('d', cmd, 0)); | result.defaultKeypresses.add (KeyPress ('d', cmd, 0)); | ||||
| break; | break; | ||||
| @@ -84,7 +84,7 @@ ResourceEditorPanel::ResourceEditorPanel (JucerDocument& doc) | |||||
| delButton.addListener (this); | delButton.addListener (this); | ||||
| delButton.setEnabled (false); | delButton.setEnabled (false); | ||||
| addAndMakeVisible (listBox = new TableListBox (String::empty, this)); | |||||
| addAndMakeVisible (listBox = new TableListBox (String(), this)); | |||||
| listBox->getHeader().addColumn ("name", 1, 150, 80, 400); | listBox->getHeader().addColumn ("name", 1, 150, 80, 400); | ||||
| listBox->getHeader().addColumn ("original file", 2, 350, 80, 800); | listBox->getHeader().addColumn ("original file", 2, 350, 80, 800); | ||||
| listBox->getHeader().addColumn ("size", 3, 100, 40, 150); | listBox->getHeader().addColumn ("size", 3, 100, 40, 150); | ||||
| @@ -247,8 +247,8 @@ void ResourceEditorPanel::buttonClicked (Button* b) | |||||
| document.getResources() | document.getResources() | ||||
| .browseForResource ("Select a file to add as a resource", | .browseForResource ("Select a file to add as a resource", | ||||
| "*", | "*", | ||||
| File::nonexistent, | |||||
| String::empty); | |||||
| File(), | |||||
| String()); | |||||
| } | } | ||||
| else if (b == &delButton) | else if (b == &delButton) | ||||
| { | { | ||||
| @@ -219,7 +219,7 @@ struct ClassDatabase | |||||
| if (isAbstract) return "This class is abstract"; | if (isAbstract) return "This class is abstract"; | ||||
| if (noDefaultConstructor) return "This class has no default constructor"; | if (noDefaultConstructor) return "This class has no default constructor"; | ||||
| if (inAnonymousNamespace) return "This class is declared inside an anonymous namespace"; | if (inAnonymousNamespace) return "This class is declared inside an anonymous namespace"; | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| bool isDisallowed (const InstantiationFlags& disallowedFlags) const | bool isDisallowed (const InstantiationFlags& disallowedFlags) const | ||||
| @@ -82,7 +82,7 @@ private: | |||||
| } | } | ||||
| String getRenamingName() const override { return getDisplayName(); } | String getRenamingName() const override { return getDisplayName(); } | ||||
| String getDisplayName() const override { return (namespaceToShow != nullptr ? namespaceToShow->name : String::empty) + "::"; } | |||||
| String getDisplayName() const override { return (namespaceToShow != nullptr ? namespaceToShow->name : String()) + "::"; } | |||||
| void setName (const String&) override {} | void setName (const String&) override {} | ||||
| bool isMissing() override { return false; } | bool isMissing() override { return false; } | ||||
| Icon getIcon() const override { return Icon (getIcons().graph, getContrastingColour (Colours::darkred, 0.5f)); } | Icon getIcon() const override { return Icon (getIcons().graph, getContrastingColour (Colours::darkred, 0.5f)); } | ||||
| @@ -190,7 +190,7 @@ struct CppParserHelpers | |||||
| if (CPlusPlusCodeTokeniser::isReservedKeyword (ed.getText().replaceSection (ed.getHighlightedRegion().getStart(), | if (CPlusPlusCodeTokeniser::isReservedKeyword (ed.getText().replaceSection (ed.getHighlightedRegion().getStart(), | ||||
| ed.getHighlightedRegion().getLength(), | ed.getHighlightedRegion().getLength(), | ||||
| s))) | s))) | ||||
| return String::empty; | |||||
| return String(); | |||||
| return s; | return s; | ||||
| } | } | ||||
| @@ -27,7 +27,7 @@ class ErrorListComp : public TreePanelBase, | |||||
| { | { | ||||
| public: | public: | ||||
| ErrorListComp (ErrorList& el) | ErrorListComp (ErrorList& el) | ||||
| : TreePanelBase (nullptr, String::empty), | |||||
| : TreePanelBase (nullptr, String()), | |||||
| errorList (el) | errorList (el) | ||||
| { | { | ||||
| setName ("Errors and Warnings"); | setName ("Errors and Warnings"); | ||||
| @@ -82,7 +82,7 @@ struct SourceCodeRange | |||||
| String toString() const | String toString() const | ||||
| { | { | ||||
| if (file.isEmpty() && range.isEmpty()) | if (file.isEmpty() && range.isEmpty()) | ||||
| return String::empty; | |||||
| return String(); | |||||
| return file + ":" + String (range.getStart()) + ":" + String (range.getEnd()); | return file + ":" + String (range.getStart()) + ":" + String (range.getEnd()); | ||||
| } | } | ||||
| @@ -179,7 +179,7 @@ public: | |||||
| return defaultInstallation; | return defaultInstallation; | ||||
| #endif | #endif | ||||
| return File::nonexistent; | |||||
| return File(); | |||||
| } | } | ||||
| protected: | protected: | ||||
| @@ -188,7 +188,7 @@ private: | |||||
| if (isCodeBlocks() && isWindows()) | if (isCodeBlocks() && isWindows()) | ||||
| { | { | ||||
| defines.set ("__MINGW__", "1"); | defines.set ("__MINGW__", "1"); | ||||
| defines.set ("__MINGW_EXTENSION", String::empty); | |||||
| defines.set ("__MINGW_EXTENSION", String()); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -767,7 +767,7 @@ protected: | |||||
| << newLine | << newLine | ||||
| << "#endif" << newLine; | << "#endif" << newLine; | ||||
| if (iconFile != File::nonexistent) | |||||
| if (iconFile != File()) | |||||
| mo << newLine | mo << newLine | ||||
| << "IDI_ICON1 ICON DISCARDABLE " << iconFile.getFileName().quoted() | << "IDI_ICON1 ICON DISCARDABLE " << iconFile.getFileName().quoted() | ||||
| << newLine | << newLine | ||||
| @@ -862,7 +862,7 @@ public: | |||||
| if (group.getID() == ProjectSaver::getGeneratedGroupID()) | if (group.getID() == ProjectSaver::getGeneratedGroupID()) | ||||
| { | { | ||||
| if (iconFile != File::nonexistent) | |||||
| if (iconFile != File()) | |||||
| { | { | ||||
| group.addFileAtIndex (iconFile, -1, true); | group.addFileAtIndex (iconFile, -1, true); | ||||
| group.findItemForFile (iconFile).getShouldAddToBinaryResourcesValue() = false; | group.findItemForFile (iconFile).getShouldAddToBinaryResourcesValue() = false; | ||||
| @@ -884,7 +884,7 @@ public: | |||||
| { | { | ||||
| MemoryOutputStream mo; | MemoryOutputStream mo; | ||||
| writeSolutionFile (mo, getSolutionVersionString(), String::empty, getVCProjFile()); | |||||
| writeSolutionFile (mo, getSolutionVersionString(), String(), getVCProjFile()); | |||||
| overwriteFileIfDifferentOrThrow (getSLNFile(), mo); | overwriteFileIfDifferentOrThrow (getSLNFile(), mo); | ||||
| } | } | ||||
| @@ -1493,7 +1493,7 @@ protected: | |||||
| { | { | ||||
| XmlElement* targetName = props->createNewChildElement ("TargetName"); | XmlElement* targetName = props->createNewChildElement ("TargetName"); | ||||
| setConditionAttribute (*targetName, config); | setConditionAttribute (*targetName, config); | ||||
| targetName->addTextElement (config.getOutputFilename (String::empty, true)); | |||||
| targetName->addTextElement (config.getOutputFilename (String(), true)); | |||||
| } | } | ||||
| { | { | ||||
| @@ -1660,7 +1660,7 @@ protected: | |||||
| } | } | ||||
| } | } | ||||
| if (iconFile != File::nonexistent) | |||||
| if (iconFile != File()) | |||||
| { | { | ||||
| XmlElement* e = otherFilesGroup->createNewChildElement ("None"); | XmlElement* e = otherFilesGroup->createNewChildElement ("None"); | ||||
| e->setAttribute ("Include", prependDot (iconFile.getFileName())); | e->setAttribute ("Include", prependDot (iconFile.getFileName())); | ||||
| @@ -1694,7 +1694,7 @@ protected: | |||||
| if (projectType.isStaticLibrary()) return "StaticLibrary"; | if (projectType.isStaticLibrary()) return "StaticLibrary"; | ||||
| jassertfalse; | jassertfalse; | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| static const char* getOptimisationLevelString (int level) | static const char* getOptimisationLevelString (int level) | ||||
| @@ -1777,7 +1777,7 @@ protected: | |||||
| for (int i = 0; i < projectItem.getNumChildren(); ++i) | for (int i = 0; i < projectItem.getNumChildren(); ++i) | ||||
| addFilesToFilter (projectItem.getChild(i), | addFilesToFilter (projectItem.getChild(i), | ||||
| (path.isEmpty() ? String::empty : (path + "\\")) + projectItem.getChild(i).getName(), | |||||
| (path.isEmpty() ? String() : (path + "\\")) + projectItem.getChild(i).getName(), | |||||
| cpps, headers, otherFiles, groups); | cpps, headers, otherFiles, groups); | ||||
| } | } | ||||
| else if (projectItem.shouldBeAddedToTargetProject()) | else if (projectItem.shouldBeAddedToTargetProject()) | ||||
| @@ -550,7 +550,7 @@ public: | |||||
| xcodeIsExecutable = true; | xcodeIsExecutable = true; | ||||
| xcodeCreatePList = false; | xcodeCreatePList = false; | ||||
| xcodeFileType = "compiled.mach-o.executable"; | xcodeFileType = "compiled.mach-o.executable"; | ||||
| xcodeBundleExtension = String::empty; | |||||
| xcodeBundleExtension = String(); | |||||
| xcodeProductType = "com.apple.product-type.tool"; | xcodeProductType = "com.apple.product-type.tool"; | ||||
| xcodeCopyToProductInstallPathAfterBuild = false; | xcodeCopyToProductInstallPathAfterBuild = false; | ||||
| break; | break; | ||||
| @@ -833,5 +833,5 @@ String ProjectExporter::getExternalLibraryFlags (const BuildConfiguration& confi | |||||
| if (libraries.size() != 0) | if (libraries.size() != 0) | ||||
| return replacePreprocessorTokens (config, "-l" + libraries.joinIntoString (" -l")).trim(); | return replacePreprocessorTokens (config, "-l" + libraries.joinIntoString (" -l")).trim(); | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| @@ -384,7 +384,7 @@ protected: | |||||
| static void writeXmlOrThrow (const XmlElement& xml, const File& file, const String& encoding, int maxCharsPerLine, bool useUnixNewLines = false) | static void writeXmlOrThrow (const XmlElement& xml, const File& file, const String& encoding, int maxCharsPerLine, bool useUnixNewLines = false) | ||||
| { | { | ||||
| MemoryOutputStream mo; | MemoryOutputStream mo; | ||||
| xml.writeToStream (mo, String::empty, false, true, encoding, maxCharsPerLine); | |||||
| xml.writeToStream (mo, String(), false, true, encoding, maxCharsPerLine); | |||||
| if (useUnixNewLines) | if (useUnixNewLines) | ||||
| { | { | ||||
| @@ -287,7 +287,7 @@ private: | |||||
| if (xml != nullptr) | if (xml != nullptr) | ||||
| { | { | ||||
| MemoryOutputStream mo; | MemoryOutputStream mo; | ||||
| xml->writeToStream (mo, String::empty); | |||||
| xml->writeToStream (mo, String()); | |||||
| replaceFileIfDifferent (projectFile, mo); | replaceFileIfDifferent (projectFile, mo); | ||||
| } | } | ||||
| } | } | ||||
| @@ -324,9 +324,9 @@ private: | |||||
| if (! foundCodeSection) | if (! foundCodeSection) | ||||
| { | { | ||||
| userContent.add (String::empty); | |||||
| userContent.add (String()); | |||||
| userContent.add ("// (You can add your own code in this section, and the Projucer will not overwrite it)"); | userContent.add ("// (You can add your own code in this section, and the Projucer will not overwrite it)"); | ||||
| userContent.add (String::empty); | |||||
| userContent.add (String()); | |||||
| } | } | ||||
| return userContent.joinIntoString (newLine) + newLine; | return userContent.joinIntoString (newLine) + newLine; | ||||
| @@ -36,7 +36,7 @@ class TextWithDefaultPropertyComponent : public PropertyComponent, | |||||
| { | { | ||||
| public: | public: | ||||
| LabelComp (TextWithDefaultPropertyComponent& tpc, const int charLimit) | LabelComp (TextWithDefaultPropertyComponent& tpc, const int charLimit) | ||||
| : Label (String::empty, String::empty), | |||||
| : Label (String(), String()), | |||||
| owner (tpc), | owner (tpc), | ||||
| maxChars (charLimit) | maxChars (charLimit) | ||||
| { | { | ||||
| @@ -158,7 +158,7 @@ private: | |||||
| void editorShown (Label*, TextEditor& editor) override | void editorShown (Label*, TextEditor& editor) override | ||||
| { | { | ||||
| if (cachedValue.isUsingDefault()) | if (cachedValue.isUsingDefault()) | ||||
| editor.setText (String::empty, dontSendNotification); | |||||
| editor.setText (String(), dontSendNotification); | |||||
| } | } | ||||
| void editorHidden (Label*, TextEditor&) override {} | void editorHidden (Label*, TextEditor&) override {} | ||||
| @@ -65,7 +65,7 @@ try : TextPropertyComponent (propertyName, 1024, false), | |||||
| // which has set the project value to whatever is displayed in the label (this may be the | // which has set the project value to whatever is displayed in the label (this may be the | ||||
| // global/fallback value). In this case we have to reset the project value to blank: | // global/fallback value). In this case we have to reset the project value to blank: | ||||
| if (initialValueIsEmpty) | if (initialValueIsEmpty) | ||||
| getValue().setValue (String::empty); | |||||
| getValue().setValue (String()); | |||||
| getValue().addListener (this); | getValue().addListener (this); | ||||
| setColour (textColourId, getTextColourToDisplay()); | setColour (textColourId, getTextColourToDisplay()); | ||||
| @@ -114,7 +114,7 @@ void DependencyPathPropertyComponent::labelTextChanged (Label*) | |||||
| void DependencyPathPropertyComponent::editorShown (Label* /*label*/, TextEditor& editor) | void DependencyPathPropertyComponent::editorShown (Label* /*label*/, TextEditor& editor) | ||||
| { | { | ||||
| if (! pathValueSource.isUsingProjectSettings()) | if (! pathValueSource.isUsingProjectSettings()) | ||||
| editor.setText (String::empty, dontSendNotification); | |||||
| editor.setText (String(), dontSendNotification); | |||||
| } | } | ||||
| void DependencyPathPropertyComponent::editorHidden (Label*, TextEditor&) | void DependencyPathPropertyComponent::editorHidden (Label*, TextEditor&) | ||||
| @@ -90,7 +90,7 @@ private: | |||||
| if ((value.refersToSameSourceAs (globalSettingsValue) && isUsingGlobalSettings())) | if ((value.refersToSameSourceAs (globalSettingsValue) && isUsingGlobalSettings())) | ||||
| { | { | ||||
| sendChangeMessage (true); | sendChangeMessage (true); | ||||
| setValue (String::empty); // make sure that the project-specific value is still blank | |||||
| setValue (String()); // make sure that the project-specific value is still blank | |||||
| } | } | ||||
| } | } | ||||
| @@ -761,7 +761,7 @@ void EnabledModuleList::addModuleFromUserSelectedFile() | |||||
| { | { | ||||
| static File lastLocation (findDefaultModulesFolder (project)); | static File lastLocation (findDefaultModulesFolder (project)); | ||||
| FileChooser fc ("Select a module to add...", lastLocation, String::empty, false); | |||||
| FileChooser fc ("Select a module to add...", lastLocation, String(), false); | |||||
| if (fc.browseForDirectory()) | if (fc.browseForDirectory()) | ||||
| { | { | ||||
| @@ -1231,15 +1231,13 @@ void Project::createExporterForCurrentPlatform() | |||||
| String Project::getFileTemplate (const String& templateName) | String Project::getFileTemplate (const String& templateName) | ||||
| { | { | ||||
| int dataSize; | int dataSize; | ||||
| const char* data = BinaryData::getNamedResource (templateName.toUTF8(), dataSize); | |||||
| if (data == nullptr) | |||||
| { | |||||
| jassertfalse; | |||||
| return String::empty; | |||||
| } | |||||
| if (const char* data = BinaryData::getNamedResource (templateName.toUTF8(), dataSize)) | |||||
| return String::fromUTF8 (data, dataSize); | |||||
| jassertfalse; | |||||
| return String(); | |||||
| return String::fromUTF8 (data, dataSize); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -637,7 +637,7 @@ bool ProjectContentComponent::hasFileInRecentList (const File& f) const | |||||
| File ProjectContentComponent::getCurrentFile() const | File ProjectContentComponent::getCurrentFile() const | ||||
| { | { | ||||
| return currentDocument != nullptr ? currentDocument->getFile() | return currentDocument != nullptr ? currentDocument->getFile() | ||||
| : File::nonexistent; | |||||
| : File(); | |||||
| } | } | ||||
| bool ProjectContentComponent::showDocument (OpenDocumentManager::Document* doc, bool grabFocus) | bool ProjectContentComponent::showDocument (OpenDocumentManager::Document* doc, bool grabFocus) | ||||
| @@ -1174,7 +1174,7 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica | |||||
| break; | break; | ||||
| case CommandIDs::deleteSelectedItem: | case CommandIDs::deleteSelectedItem: | ||||
| result.setInfo ("Delete Selected File", String::empty, CommandCategories::general, 0); | |||||
| result.setInfo ("Delete Selected File", String(), CommandCategories::general, 0); | |||||
| result.defaultKeypresses.add (KeyPress (KeyPress::deleteKey, 0, 0)); | result.defaultKeypresses.add (KeyPress (KeyPress::deleteKey, 0, 0)); | ||||
| result.defaultKeypresses.add (KeyPress (KeyPress::backspaceKey, 0, 0)); | result.defaultKeypresses.add (KeyPress (KeyPress::backspaceKey, 0, 0)); | ||||
| result.setActive (dynamic_cast<TreePanelBase*> (treeViewTabs.getCurrentContentComponent()) != nullptr); | result.setActive (dynamic_cast<TreePanelBase*> (treeViewTabs.getCurrentContentComponent()) != nullptr); | ||||
| @@ -140,7 +140,7 @@ public: | |||||
| virtual void browseToAddExistingFiles() | virtual void browseToAddExistingFiles() | ||||
| { | { | ||||
| const File location (item.isGroup() ? item.determineGroupFolder() : getFile()); | const File location (item.isGroup() ? item.determineGroupFolder() : getFile()); | ||||
| FileChooser fc ("Add Files to Jucer Project", location, String::empty, false); | |||||
| FileChooser fc ("Add Files to Jucer Project", location, String(), false); | |||||
| if (fc.browseForMultipleFilesOrDirectories()) | if (fc.browseForMultipleFilesOrDirectories()) | ||||
| { | { | ||||
| @@ -156,7 +156,7 @@ public: | |||||
| virtual void checkFileStatus() // (recursive) | virtual void checkFileStatus() // (recursive) | ||||
| { | { | ||||
| const File file (getFile()); | const File file (getFile()); | ||||
| const bool nowMissing = file != File::nonexistent && ! file.exists(); | |||||
| const bool nowMissing = file != File() && ! file.exists(); | |||||
| if (nowMissing != isFileMissing) | if (nowMissing != isFileMissing) | ||||
| { | { | ||||
| @@ -235,7 +235,7 @@ public: | |||||
| bool mightContainSubItems() override { return item.getNumChildren() > 0; } | bool mightContainSubItems() override { return item.getNumChildren() > 0; } | ||||
| String getUniqueName() const override { jassert (item.getID().isNotEmpty()); return item.getID(); } | String getUniqueName() const override { jassert (item.getID().isNotEmpty()); return item.getID(); } | ||||
| bool canBeSelected() const override { return true; } | bool canBeSelected() const override { return true; } | ||||
| String getTooltip() override { return String::empty; } | |||||
| String getTooltip() override { return String(); } | |||||
| File getDraggableFile() const override { return getFile(); } | File getDraggableFile() const override { return getFile(); } | ||||
| var getDragSourceDescription() override | var getDragSourceDescription() override | ||||
| @@ -39,7 +39,7 @@ public: | |||||
| const String& propertyDescription, | const String& propertyDescription, | ||||
| bool isDirectory, | bool isDirectory, | ||||
| const String& wildcards = "*", | const String& wildcards = "*", | ||||
| const File& rootToUseForRelativePaths = File::nonexistent) | |||||
| const File& rootToUseForRelativePaths = File()) | |||||
| : PropertyComponent (propertyDescription), | : PropertyComponent (propertyDescription), | ||||
| innerComp (valueToControl, isDirectory, wildcards, rootToUseForRelativePaths) | innerComp (valueToControl, isDirectory, wildcards, rootToUseForRelativePaths) | ||||
| { | { | ||||
| @@ -122,8 +122,8 @@ private: | |||||
| void setTo (const File& f) | void setTo (const File& f) | ||||
| { | { | ||||
| value = (root == File::nonexistent) ? f.getFullPathName() | |||||
| : f.getRelativePathFrom (root); | |||||
| value = (root == File()) ? f.getFullPathName() | |||||
| : f.getRelativePathFrom (root); | |||||
| } | } | ||||
| Value value; | Value value; | ||||
| @@ -27,7 +27,7 @@ class SVGPathDataComponent : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| SVGPathDataComponent() | SVGPathDataComponent() | ||||
| : desc (String::empty, | |||||
| : desc (String(), | |||||
| "Paste an SVG path string into the top box, and it'll be converted to some C++ " | "Paste an SVG path string into the top box, and it'll be converted to some C++ " | ||||
| "code that will load it as a Path object..") | "code that will load it as a Path object..") | ||||
| { | { | ||||
| @@ -201,7 +201,7 @@ struct TranslationHelpers | |||||
| if (currentItem.isNotEmpty()) | if (currentItem.isNotEmpty()) | ||||
| result.add (currentItem); | result.add (currentItem); | ||||
| currentItem = String::empty; | |||||
| currentItem = String(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -273,7 +273,7 @@ struct TranslationHelpers | |||||
| { | { | ||||
| lines.add ("language: " + original.getLanguageName()); | lines.add ("language: " + original.getLanguageName()); | ||||
| lines.add ("countries: " + original.getCountryCodes().joinIntoString (" ")); | lines.add ("countries: " + original.getCountryCodes().joinIntoString (" ")); | ||||
| lines.add (String::empty); | |||||
| lines.add (String()); | |||||
| const StringArray& originalKeys (originalStrings.getAllKeys()); | const StringArray& originalKeys (originalStrings.getAllKeys()); | ||||
| const StringArray& originalValues (originalStrings.getAllValues()); | const StringArray& originalValues (originalStrings.getAllValues()); | ||||
| @@ -296,7 +296,7 @@ struct TranslationHelpers | |||||
| { | { | ||||
| lines.add ("language: [enter full name of the language here!]"); | lines.add ("language: [enter full name of the language here!]"); | ||||
| lines.add ("countries: [enter list of 2-character country codes here!]"); | lines.add ("countries: [enter list of 2-character country codes here!]"); | ||||
| lines.add (String::empty); | |||||
| lines.add (String()); | |||||
| } | } | ||||
| for (int i = 0; i < preStrings.size(); ++i) | for (int i = 0; i < preStrings.size(); ++i) | ||||
| @@ -429,8 +429,7 @@ private: | |||||
| void loadFile() | void loadFile() | ||||
| { | { | ||||
| FileChooser fc ("Choose a translation file to load", | FileChooser fc ("Choose a translation file to load", | ||||
| File::nonexistent, | |||||
| "*"); | |||||
| File(), "*"); | |||||
| if (fc.browseForFileToOpen()) | if (fc.browseForFileToOpen()) | ||||
| { | { | ||||
| @@ -27,7 +27,7 @@ class UTF8Component : public Component, | |||||
| { | { | ||||
| public: | public: | ||||
| UTF8Component() | UTF8Component() | ||||
| : desc (String::empty, | |||||
| : desc (String(), | |||||
| "Type any string into the box, and it'll be shown below as a portable UTF-8 literal, " | "Type any string into the box, and it'll be shown below as a portable UTF-8 literal, " | ||||
| "ready to cut-and-paste into your source-code...") | "ready to cut-and-paste into your source-code...") | ||||
| { | { | ||||
| @@ -142,7 +142,7 @@ public: | |||||
| TRANS ("Please enter the name for the new class"), | TRANS ("Please enter the name for the new class"), | ||||
| AlertWindow::NoIcon, nullptr); | AlertWindow::NoIcon, nullptr); | ||||
| aw.addTextEditor (getClassNameFieldName(), String::empty, String::empty, false); | |||||
| aw.addTextEditor (getClassNameFieldName(), String(), String(), false); | |||||
| aw.addButton (TRANS ("Create Files"), 1, KeyPress (KeyPress::returnKey)); | aw.addButton (TRANS ("Create Files"), 1, KeyPress (KeyPress::returnKey)); | ||||
| aw.addButton (TRANS ("Cancel"), 0, KeyPress (KeyPress::escapeKey)); | aw.addButton (TRANS ("Cancel"), 0, KeyPress (KeyPress::escapeKey)); | ||||
| @@ -38,7 +38,7 @@ static ComboBox& createFileCreationOptionComboBox (Component& setupComp, | |||||
| c->addItemList (fileOptions, 1); | c->addItemList (fileOptions, 1); | ||||
| c->setSelectedId (1, dontSendNotification); | c->setSelectedId (1, dontSendNotification); | ||||
| Label* l = new Label (String::empty, TRANS("Files to Auto-Generate") + ":"); | |||||
| Label* l = new Label (String(), TRANS("Files to Auto-Generate") + ":"); | |||||
| l->attachToComponent (c, true); | l->attachToComponent (c, true); | ||||
| itemsCreated.add (l); | itemsCreated.add (l); | ||||
| @@ -34,9 +34,9 @@ public: | |||||
| ModulesFolderPathBox (File initialFileOrDirectory) | ModulesFolderPathBox (File initialFileOrDirectory) | ||||
| : currentPathBox ("currentPathBox"), | : currentPathBox ("currentPathBox"), | ||||
| openFolderButton (TRANS("...")), | openFolderButton (TRANS("...")), | ||||
| modulesLabel (String::empty, TRANS("Modules Folder") + ":") | |||||
| modulesLabel (String(), TRANS("Modules Folder") + ":") | |||||
| { | { | ||||
| if (initialFileOrDirectory == File::nonexistent) | |||||
| if (initialFileOrDirectory == File()) | |||||
| initialFileOrDirectory = findDefaultModulesFolder(); | initialFileOrDirectory = findDefaultModulesFolder(); | ||||
| setModulesFolder (initialFileOrDirectory); | setModulesFolder (initialFileOrDirectory); | ||||
| @@ -263,14 +263,14 @@ public: | |||||
| WizardComp() | WizardComp() | ||||
| : platformTargets(), | : platformTargets(), | ||||
| projectName (TRANS("Project name")), | projectName (TRANS("Project name")), | ||||
| nameLabel (String::empty, TRANS("Project Name") + ":"), | |||||
| typeLabel (String::empty, TRANS("Project Type") + ":"), | |||||
| nameLabel (String(), TRANS("Project Name") + ":"), | |||||
| typeLabel (String(), TRANS("Project Type") + ":"), | |||||
| fileBrowser (FileBrowserComponent::saveMode | fileBrowser (FileBrowserComponent::saveMode | ||||
| | FileBrowserComponent::canSelectDirectories | | FileBrowserComponent::canSelectDirectories | ||||
| | FileBrowserComponent::doNotClearFileNameOnRootChange, | | FileBrowserComponent::doNotClearFileNameOnRootChange, | ||||
| NewProjectWizardClasses::getLastWizardFolder(), nullptr, nullptr), | NewProjectWizardClasses::getLastWizardFolder(), nullptr, nullptr), | ||||
| fileOutline (String::empty, TRANS("Project Folder") + ":"), | |||||
| targetsOutline (String::empty, TRANS("Target Platforms") + ":"), | |||||
| fileOutline (String(), TRANS("Project Folder") + ":"), | |||||
| targetsOutline (String(), TRANS("Target Platforms") + ":"), | |||||
| createButton (TRANS("Create") + "..."), | createButton (TRANS("Create") + "..."), | ||||
| cancelButton (TRANS("Cancel")), | cancelButton (TRANS("Cancel")), | ||||
| modulesPathBox (findDefaultModulesFolder()) | modulesPathBox (findDefaultModulesFolder()) | ||||
| @@ -254,7 +254,7 @@ public: | |||||
| appFolder = appFolder.getParentDirectory(); | appFolder = appFolder.getParentDirectory(); | ||||
| } | } | ||||
| return File::nonexistent; | |||||
| return File(); | |||||
| } | } | ||||
| private: | private: | ||||
| @@ -254,7 +254,7 @@ struct OpenDiskDevice | |||||
| [device releaseMediaReservation]; | [device releaseMediaReservation]; | ||||
| [device releaseExclusiveAccess]; | [device releaseExclusiveAccess]; | ||||
| return String::empty; | |||||
| return String(); | |||||
| } | } | ||||
| DRDevice* device; | DRDevice* device; | ||||
| @@ -129,7 +129,7 @@ public: | |||||
| if (settings != nullptr) | if (settings != nullptr) | ||||
| f = File (settings->getValue ("lastStateFile")); | f = File (settings->getValue ("lastStateFile")); | ||||
| if (f == File::nonexistent) | |||||
| if (f == File()) | |||||
| f = File::getSpecialLocation (File::userDocumentsDirectory); | f = File::getSpecialLocation (File::userDocumentsDirectory); | ||||
| return f; | return f; | ||||
| @@ -44,12 +44,11 @@ public: | |||||
| @param formatToLookFor this is the type of format that you want to look for | @param formatToLookFor this is the type of format that you want to look for | ||||
| @param directoriesToSearch the path to search | @param directoriesToSearch the path to search | ||||
| @param searchRecursively true to search recursively | @param searchRecursively true to search recursively | ||||
| @param deadMansPedalFile if this isn't File::nonexistent, then it will | |||||
| be used as a file to store the names of any plugins | |||||
| that crash during initialisation. If there are | |||||
| any plugins listed in it, then these will always | |||||
| be scanned after all other possible files have | |||||
| been tried - in this way, even if there's a few | |||||
| @param deadMansPedalFile if this isn't File(), then it will be used as a file | |||||
| to store the names of any plugins that crash during | |||||
| initialisation. If there are any plugins listed in it, | |||||
| then these will always be scanned after all other possible | |||||
| files have been tried - in this way, even if there's a few | |||||
| dodgy plugins in your path, then a couple of rescans | dodgy plugins in your path, then a couple of rescans | ||||
| will still manage to find all the proper plugins. | will still manage to find all the proper plugins. | ||||
| It's probably best to choose a file in the user's | It's probably best to choose a file in the user's | ||||
| @@ -336,7 +336,7 @@ public: | |||||
| bool allowPluginsWhichRequireAsynchronousInstantiation, int threads, | bool allowPluginsWhichRequireAsynchronousInstantiation, int threads, | ||||
| const String& title, const String& text) | const String& title, const String& text) | ||||
| : owner (plc), formatToScan (format), propertiesToUse (properties), | : owner (plc), formatToScan (format), propertiesToUse (properties), | ||||
| pathChooserWindow (TRANS("Select folders to scan..."), String::empty, AlertWindow::NoIcon), | |||||
| pathChooserWindow (TRANS("Select folders to scan..."), String(), AlertWindow::NoIcon), | |||||
| progressWindow (title, text, AlertWindow::NoIcon), | progressWindow (title, text, AlertWindow::NoIcon), | ||||
| progress (0.0), numThreads (threads), allowAsync (allowPluginsWhichRequireAsynchronousInstantiation), | progress (0.0), numThreads (threads), allowAsync (allowPluginsWhichRequireAsynchronousInstantiation), | ||||
| finished (false) | finished (false) | ||||
| @@ -422,7 +422,7 @@ private: | |||||
| + TRANS ("Are you sure you want to scan the folder \"XYZ\"?") | + TRANS ("Are you sure you want to scan the folder \"XYZ\"?") | ||||
| .replace ("XYZ", f.getFullPathName()), | .replace ("XYZ", f.getFullPathName()), | ||||
| TRANS ("Scan"), | TRANS ("Scan"), | ||||
| String::empty, | |||||
| String(), | |||||
| nullptr, | nullptr, | ||||
| ModalCallbackFunction::create (warnAboutStupidPathsCallback, this)); | ModalCallbackFunction::create (warnAboutStupidPathsCallback, this)); | ||||
| return; | return; | ||||
| @@ -76,7 +76,7 @@ class AudioDeviceSelectorComponent::MidiInputSelectorComponentListBox : public | |||||
| { | { | ||||
| public: | public: | ||||
| MidiInputSelectorComponentListBox (AudioDeviceManager& dm, const String& noItems) | MidiInputSelectorComponentListBox (AudioDeviceManager& dm, const String& noItems) | ||||
| : ListBox (String::empty, nullptr), | |||||
| : ListBox (String(), nullptr), | |||||
| deviceManager (dm), | deviceManager (dm), | ||||
| noItemsMessage (noItems) | noItemsMessage (noItems) | ||||
| { | { | ||||
| @@ -340,11 +340,11 @@ public: | |||||
| || comboBoxThatHasChanged == inputDeviceDropDown) | || comboBoxThatHasChanged == inputDeviceDropDown) | ||||
| { | { | ||||
| if (outputDeviceDropDown != nullptr) | if (outputDeviceDropDown != nullptr) | ||||
| config.outputDeviceName = outputDeviceDropDown->getSelectedId() < 0 ? String::empty | |||||
| config.outputDeviceName = outputDeviceDropDown->getSelectedId() < 0 ? String() | |||||
| : outputDeviceDropDown->getText(); | : outputDeviceDropDown->getText(); | ||||
| if (inputDeviceDropDown != nullptr) | if (inputDeviceDropDown != nullptr) | ||||
| config.inputDeviceName = inputDeviceDropDown->getSelectedId() < 0 ? String::empty | |||||
| config.inputDeviceName = inputDeviceDropDown->getSelectedId() < 0 ? String() | |||||
| : inputDeviceDropDown->getText(); | : inputDeviceDropDown->getText(); | ||||
| if (! type.hasSeparateInputsAndOutputs()) | if (! type.hasSeparateInputsAndOutputs()) | ||||
| @@ -390,7 +390,7 @@ public: | |||||
| { | { | ||||
| if (AudioIODevice* const device = setup.manager->getCurrentAudioDevice()) | if (AudioIODevice* const device = setup.manager->getCurrentAudioDevice()) | ||||
| { | { | ||||
| Component modalWindow (String::empty); | |||||
| Component modalWindow; | |||||
| modalWindow.setOpaque (true); | modalWindow.setOpaque (true); | ||||
| modalWindow.addToDesktop (0); | modalWindow.addToDesktop (0); | ||||
| modalWindow.enterModalState(); | modalWindow.enterModalState(); | ||||
| @@ -445,7 +445,7 @@ public: | |||||
| addAndMakeVisible (outputChanList | addAndMakeVisible (outputChanList | ||||
| = new ChannelSelectorListBox (setup, ChannelSelectorListBox::audioOutputType, | = new ChannelSelectorListBox (setup, ChannelSelectorListBox::audioOutputType, | ||||
| TRANS ("(no audio output channels found)"))); | TRANS ("(no audio output channels found)"))); | ||||
| outputChanLabel = new Label (String::empty, TRANS("Active output channels:")); | |||||
| outputChanLabel = new Label (String(), TRANS("Active output channels:")); | |||||
| outputChanLabel->setJustificationType (Justification::centredRight); | outputChanLabel->setJustificationType (Justification::centredRight); | ||||
| outputChanLabel->attachToComponent (outputChanList, true); | outputChanLabel->attachToComponent (outputChanList, true); | ||||
| } | } | ||||
| @@ -466,7 +466,7 @@ public: | |||||
| addAndMakeVisible (inputChanList | addAndMakeVisible (inputChanList | ||||
| = new ChannelSelectorListBox (setup, ChannelSelectorListBox::audioInputType, | = new ChannelSelectorListBox (setup, ChannelSelectorListBox::audioInputType, | ||||
| TRANS("(no audio input channels found)"))); | TRANS("(no audio input channels found)"))); | ||||
| inputChanLabel = new Label (String::empty, TRANS("Active input channels:")); | |||||
| inputChanLabel = new Label (String(), TRANS("Active input channels:")); | |||||
| inputChanLabel->setJustificationType (Justification::centredRight); | inputChanLabel->setJustificationType (Justification::centredRight); | ||||
| inputChanLabel->attachToComponent (inputChanList, true); | inputChanLabel->attachToComponent (inputChanList, true); | ||||
| } | } | ||||
| @@ -605,11 +605,11 @@ private: | |||||
| { | { | ||||
| if (outputDeviceDropDown == nullptr) | if (outputDeviceDropDown == nullptr) | ||||
| { | { | ||||
| outputDeviceDropDown = new ComboBox (String::empty); | |||||
| outputDeviceDropDown = new ComboBox (String()); | |||||
| outputDeviceDropDown->addListener (this); | outputDeviceDropDown->addListener (this); | ||||
| addAndMakeVisible (outputDeviceDropDown); | addAndMakeVisible (outputDeviceDropDown); | ||||
| outputDeviceLabel = new Label (String::empty, | |||||
| outputDeviceLabel = new Label (String(), | |||||
| type.hasSeparateInputsAndOutputs() ? TRANS("Output:") | type.hasSeparateInputsAndOutputs() ? TRANS("Output:") | ||||
| : TRANS("Device:")); | : TRANS("Device:")); | ||||
| outputDeviceLabel->attachToComponent (outputDeviceDropDown, true); | outputDeviceLabel->attachToComponent (outputDeviceDropDown, true); | ||||
| @@ -634,11 +634,11 @@ private: | |||||
| { | { | ||||
| if (inputDeviceDropDown == nullptr) | if (inputDeviceDropDown == nullptr) | ||||
| { | { | ||||
| inputDeviceDropDown = new ComboBox (String::empty); | |||||
| inputDeviceDropDown = new ComboBox (String()); | |||||
| inputDeviceDropDown->addListener (this); | inputDeviceDropDown->addListener (this); | ||||
| addAndMakeVisible (inputDeviceDropDown); | addAndMakeVisible (inputDeviceDropDown); | ||||
| inputDeviceLabel = new Label (String::empty, TRANS("Input:")); | |||||
| inputDeviceLabel = new Label (String(), TRANS("Input:")); | |||||
| inputDeviceLabel->attachToComponent (inputDeviceDropDown, true); | inputDeviceLabel->attachToComponent (inputDeviceDropDown, true); | ||||
| addAndMakeVisible (inputLevelMeter | addAndMakeVisible (inputLevelMeter | ||||
| @@ -655,9 +655,9 @@ private: | |||||
| { | { | ||||
| if (sampleRateDropDown == nullptr) | if (sampleRateDropDown == nullptr) | ||||
| { | { | ||||
| addAndMakeVisible (sampleRateDropDown = new ComboBox (String::empty)); | |||||
| addAndMakeVisible (sampleRateDropDown = new ComboBox (String())); | |||||
| sampleRateLabel = new Label (String::empty, TRANS("Sample rate:")); | |||||
| sampleRateLabel = new Label (String(), TRANS("Sample rate:")); | |||||
| sampleRateLabel->attachToComponent (sampleRateDropDown, true); | sampleRateLabel->attachToComponent (sampleRateDropDown, true); | ||||
| } | } | ||||
| else | else | ||||
| @@ -682,9 +682,9 @@ private: | |||||
| { | { | ||||
| if (bufferSizeDropDown == nullptr) | if (bufferSizeDropDown == nullptr) | ||||
| { | { | ||||
| addAndMakeVisible (bufferSizeDropDown = new ComboBox (String::empty)); | |||||
| addAndMakeVisible (bufferSizeDropDown = new ComboBox (String())); | |||||
| bufferSizeLabel = new Label (String::empty, TRANS("Audio buffer size:")); | |||||
| bufferSizeLabel = new Label (String(), TRANS("Audio buffer size:")); | |||||
| bufferSizeLabel->attachToComponent (bufferSizeDropDown, true); | bufferSizeLabel->attachToComponent (bufferSizeDropDown, true); | ||||
| } | } | ||||
| else | else | ||||
| @@ -724,7 +724,7 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| ChannelSelectorListBox (const AudioDeviceSetupDetails& setupDetails, | ChannelSelectorListBox (const AudioDeviceSetupDetails& setupDetails, | ||||
| const BoxType boxType, const String& noItemsText) | const BoxType boxType, const String& noItemsText) | ||||
| : ListBox (String::empty, nullptr), | |||||
| : ListBox (String(), nullptr), | |||||
| setup (setupDetails), type (boxType), noItemsMessage (noItemsText) | setup (setupDetails), type (boxType), noItemsMessage (noItemsText) | ||||
| { | { | ||||
| refresh(); | refresh(); | ||||
| @@ -993,7 +993,7 @@ AudioDeviceSelectorComponent::AudioDeviceSelectorComponent (AudioDeviceManager& | |||||
| if (types.size() > 1) | if (types.size() > 1) | ||||
| { | { | ||||
| deviceTypeDropDown = new ComboBox (String::empty); | |||||
| deviceTypeDropDown = new ComboBox (String()); | |||||
| for (int i = 0; i < types.size(); ++i) | for (int i = 0; i < types.size(); ++i) | ||||
| deviceTypeDropDown->addItem (types.getUnchecked(i)->getTypeName(), i + 1); | deviceTypeDropDown->addItem (types.getUnchecked(i)->getTypeName(), i + 1); | ||||
| @@ -1001,7 +1001,7 @@ AudioDeviceSelectorComponent::AudioDeviceSelectorComponent (AudioDeviceManager& | |||||
| addAndMakeVisible (deviceTypeDropDown); | addAndMakeVisible (deviceTypeDropDown); | ||||
| deviceTypeDropDown->addListener (this); | deviceTypeDropDown->addListener (this); | ||||
| deviceTypeDropDownLabel = new Label (String::empty, TRANS("Audio device type:")); | |||||
| deviceTypeDropDownLabel = new Label (String(), TRANS("Audio device type:")); | |||||
| deviceTypeDropDownLabel->setJustificationType (Justification::centredRight); | deviceTypeDropDownLabel->setJustificationType (Justification::centredRight); | ||||
| deviceTypeDropDownLabel->attachToComponent (deviceTypeDropDown, true); | deviceTypeDropDownLabel->attachToComponent (deviceTypeDropDown, true); | ||||
| } | } | ||||
| @@ -1012,7 +1012,7 @@ AudioDeviceSelectorComponent::AudioDeviceSelectorComponent (AudioDeviceManager& | |||||
| = new MidiInputSelectorComponentListBox (deviceManager, | = new MidiInputSelectorComponentListBox (deviceManager, | ||||
| "(" + TRANS("No MIDI inputs available") + ")")); | "(" + TRANS("No MIDI inputs available") + ")")); | ||||
| midiInputsLabel = new Label (String::empty, TRANS ("Active MIDI inputs:")); | |||||
| midiInputsLabel = new Label (String(), TRANS ("Active MIDI inputs:")); | |||||
| midiInputsLabel->setJustificationType (Justification::topRight); | midiInputsLabel->setJustificationType (Justification::topRight); | ||||
| midiInputsLabel->attachToComponent (midiInputsList, true); | midiInputsLabel->attachToComponent (midiInputsList, true); | ||||
| @@ -1032,7 +1032,7 @@ AudioDeviceSelectorComponent::AudioDeviceSelectorComponent (AudioDeviceManager& | |||||
| if (showMidiOutputSelector) | if (showMidiOutputSelector) | ||||
| { | { | ||||
| addAndMakeVisible (midiOutputSelector = new ComboBox (String::empty)); | |||||
| addAndMakeVisible (midiOutputSelector = new ComboBox (String())); | |||||
| midiOutputSelector->addListener (this); | midiOutputSelector->addListener (this); | ||||
| midiOutputLabel = new Label ("lm", TRANS("MIDI Output:")); | midiOutputLabel = new Label ("lm", TRANS("MIDI Output:")); | ||||
| @@ -26,7 +26,7 @@ class MidiKeyboardUpDownButton : public Button | |||||
| { | { | ||||
| public: | public: | ||||
| MidiKeyboardUpDownButton (MidiKeyboardComponent& comp, const int d) | MidiKeyboardUpDownButton (MidiKeyboardComponent& comp, const int d) | ||||
| : Button (String::empty), owner (comp), delta (d) | |||||
| : Button (String()), owner (comp), delta (d) | |||||
| { | { | ||||
| } | } | ||||
| @@ -85,12 +85,22 @@ bool NamedValueSet::isEmpty() const noexcept | |||||
| return values.isEmpty(); | return values.isEmpty(); | ||||
| } | } | ||||
| static const var& getNullVarRef() noexcept | |||||
| { | |||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| return var::null; | |||||
| #else | |||||
| static var nullVar; | |||||
| return nullVar; | |||||
| #endif | |||||
| } | |||||
| const var& NamedValueSet::operator[] (const Identifier& name) const noexcept | const var& NamedValueSet::operator[] (const Identifier& name) const noexcept | ||||
| { | { | ||||
| if (const var* v = getVarPointer (name)) | if (const var* v = getVarPointer (name)) | ||||
| return *v; | return *v; | ||||
| return var::null; | |||||
| return getNullVarRef(); | |||||
| } | } | ||||
| var NamedValueSet::getWithDefault (const Identifier& name, const var& defaultReturnValue) const | var NamedValueSet::getWithDefault (const Identifier& name, const var& defaultReturnValue) const | ||||
| @@ -189,7 +199,7 @@ const var& NamedValueSet::getValueAt (const int index) const noexcept | |||||
| return values.getReference (index).value; | return values.getReference (index).value; | ||||
| jassertfalse; | jassertfalse; | ||||
| return var::null; | |||||
| return getNullVarRef(); | |||||
| } | } | ||||
| var* NamedValueSet::getVarPointerAt (int index) const noexcept | var* NamedValueSet::getVarPointerAt (int index) const noexcept | ||||
| @@ -434,7 +434,9 @@ var::var() noexcept : type (&VariantType_Void::instance) {} | |||||
| var::var (const VariantType& t) noexcept : type (&t) {} | var::var (const VariantType& t) noexcept : type (&t) {} | ||||
| var::~var() noexcept { type->cleanUp (value); } | var::~var() noexcept { type->cleanUp (value); } | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| const var var::null; | const var var::null; | ||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| var::var (const var& valueToCopy) : type (valueToCopy.type) | var::var (const var& valueToCopy) : type (valueToCopy.type) | ||||
| @@ -582,7 +584,7 @@ const var& var::operator[] (const Identifier& propertyName) const | |||||
| if (DynamicObject* const o = getDynamicObject()) | if (DynamicObject* const o = getDynamicObject()) | ||||
| return o->getProperty (propertyName); | return o->getProperty (propertyName); | ||||
| return var::null; | |||||
| return getNullVarRef(); | |||||
| } | } | ||||
| const var& var::operator[] (const char* const propertyName) const | const var& var::operator[] (const char* const propertyName) const | ||||
| @@ -70,8 +70,10 @@ public: | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~var() noexcept; | ~var() noexcept; | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| /** A static var object that can be used where you need an empty variant object. */ | /** A static var object that can be used where you need an empty variant object. */ | ||||
| static const var null; | static const var null; | ||||
| #endif | |||||
| var (const var& valueToCopy); | var (const var& valueToCopy); | ||||
| var (int value) noexcept; | var (int value) noexcept; | ||||
| @@ -68,7 +68,9 @@ File& File::operator= (File&& other) noexcept | |||||
| } | } | ||||
| #endif | #endif | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| const File File::nonexistent; | const File File::nonexistent; | ||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| static String removeEllipsis (const String& path) | static String removeEllipsis (const String& path) | ||||
| @@ -1009,9 +1011,9 @@ public: | |||||
| const File home (File::getSpecialLocation (File::userHomeDirectory)); | const File home (File::getSpecialLocation (File::userHomeDirectory)); | ||||
| const File temp (File::getSpecialLocation (File::tempDirectory)); | const File temp (File::getSpecialLocation (File::tempDirectory)); | ||||
| expect (! File::nonexistent.exists()); | |||||
| expect (! File::nonexistent.existsAsFile()); | |||||
| expect (! File::nonexistent.isDirectory()); | |||||
| expect (! File().exists()); | |||||
| expect (! File().existsAsFile()); | |||||
| expect (! File().isDirectory()); | |||||
| #if ! JUCE_WINDOWS | #if ! JUCE_WINDOWS | ||||
| expect (File("/").isDirectory()); | expect (File("/").isDirectory()); | ||||
| #endif | #endif | ||||
| @@ -49,8 +49,7 @@ public: | |||||
| /** Creates an (invalid) file object. | /** Creates an (invalid) file object. | ||||
| The file is initially set to an empty path, so getFullPathName() will return | The file is initially set to an empty path, so getFullPathName() will return | ||||
| an empty string, and comparing the file to File::nonexistent will return | |||||
| true. | |||||
| an empty string. | |||||
| You can use its operator= method to point it at a proper file. | You can use its operator= method to point it at a proper file. | ||||
| */ | */ | ||||
| @@ -95,8 +94,13 @@ public: | |||||
| #endif | #endif | ||||
| //============================================================================== | //============================================================================== | ||||
| /** This static constant is used for referring to an 'invalid' file. */ | |||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| /** This static constant is used for referring to an 'invalid' file. | |||||
| Bear in mind that you should avoid this kind of static variable, and always prefer | |||||
| to use File() or {} if you need a default-constructed File object. | |||||
| */ | |||||
| static const File nonexistent; | static const File nonexistent; | ||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Checks whether the file actually exists. | /** Checks whether the file actually exists. | ||||
| @@ -625,7 +625,7 @@ public: | |||||
| beginTest ("JSON"); | beginTest ("JSON"); | ||||
| Random r = getRandom(); | Random r = getRandom(); | ||||
| expect (JSON::parse (String::empty) == var()); | |||||
| expect (JSON::parse (String()) == var()); | |||||
| expect (JSON::parse ("{}").isObject()); | expect (JSON::parse ("{}").isObject()); | ||||
| expect (JSON::parse ("[]").isArray()); | expect (JSON::parse ("[]").isArray()); | ||||
| expect (JSON::parse ("[ 1234 ]")[0].isInt()); | expect (JSON::parse ("[ 1234 ]")[0].isInt()); | ||||
| @@ -156,6 +156,16 @@ | |||||
| //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 | //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 | ||||
| #endif | #endif | ||||
| /* Config: JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| If disabled, this will turn off dangerous static globals like String::empty, var::null, etc | |||||
| which can cause nasty order-of-initialisation problems if they are referenced during static | |||||
| constructor code. | |||||
| */ | |||||
| #ifndef JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| #define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 | |||||
| #endif | |||||
| #ifndef JUCE_STRING_UTF_TYPE | #ifndef JUCE_STRING_UTF_TYPE | ||||
| #define JUCE_STRING_UTF_TYPE 8 | #define JUCE_STRING_UTF_TYPE 8 | ||||
| #endif | #endif | ||||
| @@ -237,7 +237,9 @@ private: | |||||
| } | } | ||||
| }; | }; | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| const String String::empty; | const String String::empty; | ||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| String::String() noexcept : text (&(emptyString.text)) | String::String() noexcept : text (&(emptyString.text)) | ||||
| @@ -2270,7 +2272,7 @@ public: | |||||
| beginTest ("Basics"); | beginTest ("Basics"); | ||||
| expect (String().length() == 0); | expect (String().length() == 0); | ||||
| expect (String() == String::empty); | |||||
| expect (String() == String()); | |||||
| String s1, s2 ("abcd"); | String s1, s2 ("abcd"); | ||||
| expect (s1.isEmpty() && ! s1.isNotEmpty()); | expect (s1.isEmpty() && ! s1.isNotEmpty()); | ||||
| expect (s2.isNotEmpty() && ! s2.isEmpty()); | expect (s2.isNotEmpty() && ! s2.isEmpty()); | ||||
| @@ -2282,16 +2284,16 @@ public: | |||||
| expect (String ("abcdefg", 4) == L"abcd"); | expect (String ("abcdefg", 4) == L"abcd"); | ||||
| expect (String ("abcdefg", 4) == String (L"abcdefg", 4)); | expect (String ("abcdefg", 4) == String (L"abcdefg", 4)); | ||||
| expect (String::charToString ('x') == "x"); | expect (String::charToString ('x') == "x"); | ||||
| expect (String::charToString (0) == String::empty); | |||||
| expect (String::charToString (0) == String()); | |||||
| expect (s2 + "e" == "abcde" && s2 + 'e' == "abcde"); | expect (s2 + "e" == "abcde" && s2 + 'e' == "abcde"); | ||||
| expect (s2 + L'e' == "abcde" && s2 + L"e" == "abcde"); | expect (s2 + L'e' == "abcde" && s2 + L"e" == "abcde"); | ||||
| expect (s1.equalsIgnoreCase ("abcD") && s1 < "abce" && s1 > "abbb"); | expect (s1.equalsIgnoreCase ("abcD") && s1 < "abce" && s1 > "abbb"); | ||||
| expect (s1.startsWith ("ab") && s1.startsWith ("abcd") && ! s1.startsWith ("abcde")); | expect (s1.startsWith ("ab") && s1.startsWith ("abcd") && ! s1.startsWith ("abcde")); | ||||
| expect (s1.startsWithIgnoreCase ("aB") && s1.endsWithIgnoreCase ("CD")); | expect (s1.startsWithIgnoreCase ("aB") && s1.endsWithIgnoreCase ("CD")); | ||||
| expect (s1.endsWith ("bcd") && ! s1.endsWith ("aabcd")); | expect (s1.endsWith ("bcd") && ! s1.endsWith ("aabcd")); | ||||
| expectEquals (s1.indexOf (String::empty), 0); | |||||
| expectEquals (s1.indexOfIgnoreCase (String::empty), 0); | |||||
| expect (s1.startsWith (String::empty) && s1.endsWith (String::empty) && s1.contains (String::empty)); | |||||
| expectEquals (s1.indexOf (String()), 0); | |||||
| expectEquals (s1.indexOfIgnoreCase (String()), 0); | |||||
| expect (s1.startsWith (String()) && s1.endsWith (String()) && s1.contains (String())); | |||||
| expect (s1.contains ("cd") && s1.contains ("ab") && s1.contains ("abcd")); | expect (s1.contains ("cd") && s1.contains ("ab") && s1.contains ("abcd")); | ||||
| expect (s1.containsChar ('a')); | expect (s1.containsChar ('a')); | ||||
| expect (! s1.containsChar ('x')); | expect (! s1.containsChar ('x')); | ||||
| @@ -2472,9 +2474,9 @@ public: | |||||
| } | } | ||||
| beginTest ("Numeric conversions"); | beginTest ("Numeric conversions"); | ||||
| expect (String::empty.getIntValue() == 0); | |||||
| expect (String::empty.getDoubleValue() == 0.0); | |||||
| expect (String::empty.getFloatValue() == 0.0f); | |||||
| expect (String().getIntValue() == 0); | |||||
| expect (String().getDoubleValue() == 0.0); | |||||
| expect (String().getFloatValue() == 0.0f); | |||||
| expect (s.getIntValue() == 12345678); | expect (s.getIntValue() == 12345678); | ||||
| expect (s.getLargeIntValue() == (int64) 12345678); | expect (s.getLargeIntValue() == (int64) 12345678); | ||||
| expect (s.getDoubleValue() == 12345678.0); | expect (s.getDoubleValue() == 12345678.0); | ||||
| @@ -2511,11 +2513,11 @@ public: | |||||
| expect (s3.containsAnyOf (String (L"zzzFs"))); | expect (s3.containsAnyOf (String (L"zzzFs"))); | ||||
| expect (s3.startsWith ("abcd")); | expect (s3.startsWith ("abcd")); | ||||
| expect (s3.startsWithIgnoreCase (String (L"abCD"))); | expect (s3.startsWithIgnoreCase (String (L"abCD"))); | ||||
| expect (s3.startsWith (String::empty)); | |||||
| expect (s3.startsWith (String())); | |||||
| expect (s3.startsWithChar ('a')); | expect (s3.startsWithChar ('a')); | ||||
| expect (s3.endsWith (String ("HIJ"))); | expect (s3.endsWith (String ("HIJ"))); | ||||
| expect (s3.endsWithIgnoreCase (String (L"Hij"))); | expect (s3.endsWithIgnoreCase (String (L"Hij"))); | ||||
| expect (s3.endsWith (String::empty)); | |||||
| expect (s3.endsWith (String())); | |||||
| expect (s3.endsWithChar (L'J')); | expect (s3.endsWithChar (L'J')); | ||||
| expect (s3.indexOf ("HIJ") == 7); | expect (s3.indexOf ("HIJ") == 7); | ||||
| expect (s3.indexOf (String (L"HIJK")) == -1); | expect (s3.indexOf (String (L"HIJK")) == -1); | ||||
| @@ -2565,28 +2567,28 @@ public: | |||||
| expect (! String ("xx?y").matchesWildcard ("xx?y?", true)); | expect (! String ("xx?y").matchesWildcard ("xx?y?", true)); | ||||
| expect (String ("xx?y").matchesWildcard ("xx??", true)); | expect (String ("xx?y").matchesWildcard ("xx??", true)); | ||||
| expectEquals (s5.fromFirstOccurrenceOf (String::empty, true, false), s5); | |||||
| expectEquals (s5.fromFirstOccurrenceOf (String(), true, false), s5); | |||||
| expectEquals (s5.fromFirstOccurrenceOf ("xword2", true, false), s5.substring (100)); | expectEquals (s5.fromFirstOccurrenceOf ("xword2", true, false), s5.substring (100)); | ||||
| expectEquals (s5.fromFirstOccurrenceOf (String (L"word2"), true, false), s5.substring (5)); | expectEquals (s5.fromFirstOccurrenceOf (String (L"word2"), true, false), s5.substring (5)); | ||||
| expectEquals (s5.fromFirstOccurrenceOf ("Word2", true, true), s5.substring (5)); | expectEquals (s5.fromFirstOccurrenceOf ("Word2", true, true), s5.substring (5)); | ||||
| expectEquals (s5.fromFirstOccurrenceOf ("word2", false, false), s5.getLastCharacters (6)); | expectEquals (s5.fromFirstOccurrenceOf ("word2", false, false), s5.getLastCharacters (6)); | ||||
| expectEquals (s5.fromFirstOccurrenceOf ("Word2", false, true), s5.getLastCharacters (6)); | expectEquals (s5.fromFirstOccurrenceOf ("Word2", false, true), s5.getLastCharacters (6)); | ||||
| expectEquals (s5.fromLastOccurrenceOf (String::empty, true, false), s5); | |||||
| expectEquals (s5.fromLastOccurrenceOf (String(), true, false), s5); | |||||
| expectEquals (s5.fromLastOccurrenceOf ("wordx", true, false), s5); | expectEquals (s5.fromLastOccurrenceOf ("wordx", true, false), s5); | ||||
| expectEquals (s5.fromLastOccurrenceOf ("word", true, false), s5.getLastCharacters (5)); | expectEquals (s5.fromLastOccurrenceOf ("word", true, false), s5.getLastCharacters (5)); | ||||
| expectEquals (s5.fromLastOccurrenceOf ("worD", true, true), s5.getLastCharacters (5)); | expectEquals (s5.fromLastOccurrenceOf ("worD", true, true), s5.getLastCharacters (5)); | ||||
| expectEquals (s5.fromLastOccurrenceOf ("word", false, false), s5.getLastCharacters (1)); | expectEquals (s5.fromLastOccurrenceOf ("word", false, false), s5.getLastCharacters (1)); | ||||
| expectEquals (s5.fromLastOccurrenceOf ("worD", false, true), s5.getLastCharacters (1)); | expectEquals (s5.fromLastOccurrenceOf ("worD", false, true), s5.getLastCharacters (1)); | ||||
| expect (s5.upToFirstOccurrenceOf (String::empty, true, false).isEmpty()); | |||||
| expect (s5.upToFirstOccurrenceOf (String(), true, false).isEmpty()); | |||||
| expectEquals (s5.upToFirstOccurrenceOf ("word4", true, false), s5); | expectEquals (s5.upToFirstOccurrenceOf ("word4", true, false), s5); | ||||
| expectEquals (s5.upToFirstOccurrenceOf ("word2", true, false), s5.substring (0, 10)); | expectEquals (s5.upToFirstOccurrenceOf ("word2", true, false), s5.substring (0, 10)); | ||||
| expectEquals (s5.upToFirstOccurrenceOf ("Word2", true, true), s5.substring (0, 10)); | expectEquals (s5.upToFirstOccurrenceOf ("Word2", true, true), s5.substring (0, 10)); | ||||
| expectEquals (s5.upToFirstOccurrenceOf ("word2", false, false), s5.substring (0, 5)); | expectEquals (s5.upToFirstOccurrenceOf ("word2", false, false), s5.substring (0, 5)); | ||||
| expectEquals (s5.upToFirstOccurrenceOf ("Word2", false, true), s5.substring (0, 5)); | expectEquals (s5.upToFirstOccurrenceOf ("Word2", false, true), s5.substring (0, 5)); | ||||
| expectEquals (s5.upToLastOccurrenceOf (String::empty, true, false), s5); | |||||
| expectEquals (s5.upToLastOccurrenceOf (String(), true, false), s5); | |||||
| expectEquals (s5.upToLastOccurrenceOf ("zword", true, false), s5); | expectEquals (s5.upToLastOccurrenceOf ("zword", true, false), s5); | ||||
| expectEquals (s5.upToLastOccurrenceOf ("word", true, false), s5.dropLastCharacters (1)); | expectEquals (s5.upToLastOccurrenceOf ("word", true, false), s5.dropLastCharacters (1)); | ||||
| expectEquals (s5.dropLastCharacters(1).upToLastOccurrenceOf ("word", true, false), s5.dropLastCharacters (1)); | expectEquals (s5.dropLastCharacters(1).upToLastOccurrenceOf ("word", true, false), s5.dropLastCharacters (1)); | ||||
| @@ -2604,9 +2606,9 @@ public: | |||||
| expect (s5.replaceCharacters ("wo", "xy") != s5); | expect (s5.replaceCharacters ("wo", "xy") != s5); | ||||
| expectEquals (s5.replaceCharacters ("wo", "xy").replaceCharacters ("xy", "wo"), s5); | expectEquals (s5.replaceCharacters ("wo", "xy").replaceCharacters ("xy", "wo"), s5); | ||||
| expectEquals (s5.retainCharacters ("1wordxya"), String ("wordwordword")); | expectEquals (s5.retainCharacters ("1wordxya"), String ("wordwordword")); | ||||
| expect (s5.retainCharacters (String::empty).isEmpty()); | |||||
| expect (s5.retainCharacters (String()).isEmpty()); | |||||
| expect (s5.removeCharacters ("1wordxya") == " 2 3"); | expect (s5.removeCharacters ("1wordxya") == " 2 3"); | ||||
| expectEquals (s5.removeCharacters (String::empty), s5); | |||||
| expectEquals (s5.removeCharacters (String()), s5); | |||||
| expect (s5.initialSectionContainingOnly ("word") == L"word"); | expect (s5.initialSectionContainingOnly ("word") == L"word"); | ||||
| expect (String ("word").initialSectionContainingOnly ("word") == L"word"); | expect (String ("word").initialSectionContainingOnly ("word") == L"word"); | ||||
| expectEquals (s5.initialSectionNotContaining (String ("xyz ")), String ("word")); | expectEquals (s5.initialSectionNotContaining (String ("xyz ")), String ("word")); | ||||
| @@ -2647,9 +2649,9 @@ public: | |||||
| expectEquals (s.joinIntoString ("-"), String ("4-3-2-1-0")); | expectEquals (s.joinIntoString ("-"), String ("4-3-2-1-0")); | ||||
| s.remove (2); | s.remove (2); | ||||
| expectEquals (s.joinIntoString ("--"), String ("4--3--1--0")); | expectEquals (s.joinIntoString ("--"), String ("4--3--1--0")); | ||||
| expectEquals (s.joinIntoString (String::empty), String ("4310")); | |||||
| expectEquals (s.joinIntoString (StringRef()), String ("4310")); | |||||
| s.clear(); | s.clear(); | ||||
| expectEquals (s.joinIntoString ("x"), String::empty); | |||||
| expectEquals (s.joinIntoString ("x"), String()); | |||||
| StringArray toks; | StringArray toks; | ||||
| toks.addTokens ("x,,", ";,", ""); | toks.addTokens ("x,,", ";,", ""); | ||||
| @@ -147,13 +147,15 @@ public: | |||||
| ~String() noexcept; | ~String() noexcept; | ||||
| //============================================================================== | //============================================================================== | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| /** This is a static empty string object that can be used if you need a reference to one. | /** This is a static empty string object that can be used if you need a reference to one. | ||||
| The value of String::empty is exactly the same as String(), and in almost all cases | The value of String::empty is exactly the same as String(), and in almost all cases | ||||
| it's better to avoid String::empty and just use String() instead, so that the compiler | |||||
| it's better to avoid String::empty and just use String() or {} instead, so that the compiler | |||||
| only has to reason about locally-constructed objects, rather than taking into account | only has to reason about locally-constructed objects, rather than taking into account | ||||
| the fact that you're referencing a global shared static memory address. | the fact that you're referencing a global shared static memory address. | ||||
| */ | */ | ||||
| static const String empty; | static const String empty; | ||||
| #endif | |||||
| /** This is the character encoding type used internally to store the string. | /** This is the character encoding type used internally to store the string. | ||||
| @@ -127,7 +127,12 @@ const String& StringArray::operator[] (const int index) const noexcept | |||||
| if (isPositiveAndBelow (index, strings.size())) | if (isPositiveAndBelow (index, strings.size())) | ||||
| return strings.getReference (index); | return strings.getReference (index); | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| return String::empty; | return String::empty; | ||||
| #else | |||||
| static String empty; | |||||
| return empty; | |||||
| #endif | |||||
| } | } | ||||
| String& StringArray::getReference (const int index) noexcept | String& StringArray::getReference (const int index) noexcept | ||||
| @@ -262,9 +262,9 @@ public: | |||||
| Random r = getRandom(); | Random r = getRandom(); | ||||
| testDiff (String::empty, String::empty); | |||||
| testDiff ("x", String::empty); | |||||
| testDiff (String::empty, "x"); | |||||
| testDiff (String(), String()); | |||||
| testDiff ("x", String()); | |||||
| testDiff (String(), "x"); | |||||
| testDiff ("x", "x"); | testDiff ("x", "x"); | ||||
| testDiff ("x", "y"); | testDiff ("x", "y"); | ||||
| testDiff ("xxx", "x"); | testDiff ("xxx", "x"); | ||||
| @@ -60,7 +60,7 @@ public: | |||||
| @param counterName the name used when printing out the statistics | @param counterName the name used when printing out the statistics | ||||
| @param runsPerPrintout the number of start/stop iterations before calling | @param runsPerPrintout the number of start/stop iterations before calling | ||||
| printStatistics() | printStatistics() | ||||
| @param loggingFile a file to dump the results to - if this is File::nonexistent, | |||||
| @param loggingFile a file to dump the results to - if this is File(), | |||||
| the results are just written to the debugger output | the results are just written to the debugger output | ||||
| */ | */ | ||||
| PerformanceCounter (const String& counterName, | PerformanceCounter (const String& counterName, | ||||
| @@ -460,12 +460,22 @@ int XmlElement::getNumAttributes() const noexcept | |||||
| return attributes.size(); | return attributes.size(); | ||||
| } | } | ||||
| static const String& getEmptyStringRef() noexcept | |||||
| { | |||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| return String::empty; | |||||
| #else | |||||
| static String empty; | |||||
| return empty; | |||||
| #endif | |||||
| } | |||||
| const String& XmlElement::getAttributeName (const int index) const noexcept | const String& XmlElement::getAttributeName (const int index) const noexcept | ||||
| { | { | ||||
| if (const XmlAttributeNode* const att = attributes [index]) | if (const XmlAttributeNode* const att = attributes [index]) | ||||
| return att->name.toString(); | return att->name.toString(); | ||||
| return String::empty; | |||||
| return getEmptyStringRef(); | |||||
| } | } | ||||
| const String& XmlElement::getAttributeValue (const int index) const noexcept | const String& XmlElement::getAttributeValue (const int index) const noexcept | ||||
| @@ -473,7 +483,7 @@ const String& XmlElement::getAttributeValue (const int index) const noexcept | |||||
| if (const XmlAttributeNode* const att = attributes [index]) | if (const XmlAttributeNode* const att = attributes [index]) | ||||
| return att->value; | return att->value; | ||||
| return String::empty; | |||||
| return getEmptyStringRef(); | |||||
| } | } | ||||
| XmlElement::XmlAttributeNode* XmlElement::getAttribute (StringRef attributeName) const noexcept | XmlElement::XmlAttributeNode* XmlElement::getAttribute (StringRef attributeName) const noexcept | ||||
| @@ -496,7 +506,7 @@ const String& XmlElement::getStringAttribute (StringRef attributeName) const noe | |||||
| if (const XmlAttributeNode* att = getAttribute (attributeName)) | if (const XmlAttributeNode* att = getAttribute (attributeName)) | ||||
| return att->value; | return att->value; | ||||
| return String::empty; | |||||
| return getEmptyStringRef(); | |||||
| } | } | ||||
| String XmlElement::getStringAttribute (StringRef attributeName, const String& defaultReturnValue) const | String XmlElement::getStringAttribute (StringRef attributeName, const String& defaultReturnValue) const | ||||
| @@ -627,7 +627,9 @@ ValueTree::ValueTree() noexcept | |||||
| { | { | ||||
| } | } | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| const ValueTree ValueTree::invalid; | const ValueTree ValueTree::invalid; | ||||
| #endif | |||||
| ValueTree::ValueTree (const Identifier& type) : object (new ValueTree::SharedObject (type)) | ValueTree::ValueTree (const Identifier& type) : object (new ValueTree::SharedObject (type)) | ||||
| { | { | ||||
| @@ -721,20 +723,30 @@ ValueTree ValueTree::getParent() const noexcept | |||||
| ValueTree ValueTree::getSibling (const int delta) const noexcept | ValueTree ValueTree::getSibling (const int delta) const noexcept | ||||
| { | { | ||||
| if (object == nullptr || object->parent == nullptr) | if (object == nullptr || object->parent == nullptr) | ||||
| return invalid; | |||||
| return ValueTree(); | |||||
| const int index = object->parent->indexOf (*this) + delta; | const int index = object->parent->indexOf (*this) + delta; | ||||
| return ValueTree (object->parent->children.getObjectPointer (index)); | return ValueTree (object->parent->children.getObjectPointer (index)); | ||||
| } | } | ||||
| static const var& getNullVarRef() noexcept | |||||
| { | |||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| return var::null; | |||||
| #else | |||||
| static var nullVar; | |||||
| return nullVar; | |||||
| #endif | |||||
| } | |||||
| const var& ValueTree::operator[] (const Identifier& name) const noexcept | const var& ValueTree::operator[] (const Identifier& name) const noexcept | ||||
| { | { | ||||
| return object == nullptr ? var::null : object->properties[name]; | |||||
| return object == nullptr ? getNullVarRef() : object->properties[name]; | |||||
| } | } | ||||
| const var& ValueTree::getProperty (const Identifier& name) const noexcept | const var& ValueTree::getProperty (const Identifier& name) const noexcept | ||||
| { | { | ||||
| return object == nullptr ? var::null : object->properties[name]; | |||||
| return object == nullptr ? getNullVarRef() : object->properties[name]; | |||||
| } | } | ||||
| var ValueTree::getProperty (const Identifier& name, const var& defaultReturnValue) const | var ValueTree::getProperty (const Identifier& name, const var& defaultReturnValue) const | ||||
| @@ -523,10 +523,13 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| /** An invalid ValueTree that can be used if you need to return one as an error condition, etc. | /** An invalid ValueTree that can be used if you need to return one as an error condition, etc. | ||||
| This invalid object is equivalent to ValueTree created with its default constructor. | |||||
| This invalid object is equivalent to ValueTree created with its default constructor, but | |||||
| you should always prefer to avoid it and use ValueTree() or {} instead. | |||||
| */ | */ | ||||
| static const ValueTree invalid; | static const ValueTree invalid; | ||||
| #endif | |||||
| /** Returns the total number of references to the shared underlying data structure that this | /** Returns the total number of references to the shared underlying data structure that this | ||||
| ValueTree is using. | ValueTree is using. | ||||
| @@ -79,7 +79,9 @@ bool AffineTransform::isIdentity() const noexcept | |||||
| && (mat11 == 1.0f); | && (mat11 == 1.0f); | ||||
| } | } | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| const AffineTransform AffineTransform::identity; | const AffineTransform AffineTransform::identity; | ||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| AffineTransform AffineTransform::followedBy (const AffineTransform& other) const noexcept | AffineTransform AffineTransform::followedBy (const AffineTransform& other) const noexcept | ||||
| @@ -67,15 +67,13 @@ public: | |||||
| /** Compares two transforms. */ | /** Compares two transforms. */ | ||||
| bool operator!= (const AffineTransform& other) const noexcept; | bool operator!= (const AffineTransform& other) const noexcept; | ||||
| /** A ready-to-use identity transform, which you can use to append other | |||||
| transformations to. | |||||
| e.g. @code | |||||
| AffineTransform myTransform = AffineTransform().rotated (.5f) | |||||
| .scaled (2.0f); | |||||
| @endcode | |||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| /** A ready-to-use identity transform. | |||||
| Note that you should always avoid using a static variable like this, and | |||||
| prefer AffineTransform() or {} if you need a default-constructed instance. | |||||
| */ | */ | ||||
| static const AffineTransform identity; | static const AffineTransform identity; | ||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Transforms a 2D coordinate using this matrix. */ | /** Transforms a 2D coordinate using this matrix. */ | ||||
| @@ -259,7 +259,9 @@ Image::~Image() | |||||
| { | { | ||||
| } | } | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| const Image Image::null; | const Image Image::null; | ||||
| #endif | |||||
| int Image::getReferenceCount() const noexcept { return image == nullptr ? 0 : image->getSharedCount(); } | int Image::getReferenceCount() const noexcept { return image == nullptr ? 0 : image->getSharedCount(); } | ||||
| int Image::getWidth() const noexcept { return image == nullptr ? 0 : image->width; } | int Image::getWidth() const noexcept { return image == nullptr ? 0 : image->width; } | ||||
| @@ -146,10 +146,13 @@ public: | |||||
| */ | */ | ||||
| inline bool isNull() const noexcept { return image == nullptr; } | inline bool isNull() const noexcept { return image == nullptr; } | ||||
| #if JUCE_ALLOW_STATIC_NULL_VARIABLES | |||||
| /** A null Image object that can be used when you need to return an invalid image. | /** A null Image object that can be used when you need to return an invalid image. | ||||
| This object is the equivalient to an Image created with the default constructor. | |||||
| This object is the equivalient to an Image created with the default constructor, and | |||||
| you should always prefer to use Image() or {} when you need an empty image object. | |||||
| */ | */ | ||||
| static const Image null; | static const Image null; | ||||
| #endif | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Returns the image's width (in pixels). */ | /** Returns the image's width (in pixels). */ | ||||