mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Use lambda callbacks instead of listeners with Slider, Button, Label, ComboBox and TextEditor classes
This commit is contained in:
parent
6d8d90e9d8
commit
e690350df3
30 changed files with 114 additions and 258 deletions
|
|
@ -28,8 +28,7 @@
|
|||
|
||||
|
||||
//==============================================================================
|
||||
class GlobalSearchPathsWindowComponent : public Component,
|
||||
private ComboBox::Listener
|
||||
class GlobalSearchPathsWindowComponent : public Component
|
||||
{
|
||||
public:
|
||||
GlobalSearchPathsWindowComponent()
|
||||
|
|
@ -60,7 +59,7 @@ public:
|
|||
osSelector.addItem ("Windows", 2);
|
||||
osSelector.addItem ("Linux", 3);
|
||||
|
||||
osSelector.addListener (this);
|
||||
osSelector.onChange = [this] { updateFilePathPropertyComponents(); };
|
||||
|
||||
auto os = TargetOS::getThisOS();
|
||||
|
||||
|
|
@ -120,11 +119,6 @@ private:
|
|||
ComboBox osSelector;
|
||||
InfoButton info;
|
||||
|
||||
void comboBoxChanged (ComboBox*) override
|
||||
{
|
||||
updateFilePathPropertyComponents();
|
||||
}
|
||||
|
||||
TargetOS::OS getSelectedOS() const
|
||||
{
|
||||
auto selectedOS = TargetOS::unknown;
|
||||
|
|
|
|||
|
|
@ -29,8 +29,7 @@
|
|||
|
||||
//==============================================================================
|
||||
class SVGPathDataComponent : public Component,
|
||||
public FileDragAndDropTarget,
|
||||
private TextEditor::Listener
|
||||
public FileDragAndDropTarget
|
||||
|
||||
{
|
||||
public:
|
||||
|
|
@ -43,7 +42,8 @@ public:
|
|||
userText.setMultiLine (true, true);
|
||||
userText.setReturnKeyStartsNewLine (true);
|
||||
addAndMakeVisible (userText);
|
||||
userText.addListener (this);
|
||||
userText.onTextChange = [this] { update(); };
|
||||
userText.onEscapeKey = [this] { getTopLevelComponent()->exitModalState (0); };
|
||||
|
||||
resultText.setFont (getAppSettings().appearance.getCodeFont().withHeight (13.0f));
|
||||
resultText.setMultiLine (true, true);
|
||||
|
|
@ -65,16 +65,6 @@ public:
|
|||
fillPathButton.setToggleState (true, NotificationType::dontSendNotification);
|
||||
}
|
||||
|
||||
void textEditorTextChanged (TextEditor&) override
|
||||
{
|
||||
update();
|
||||
}
|
||||
|
||||
void textEditorEscapeKeyPressed (TextEditor&) override
|
||||
{
|
||||
getTopLevelComponent()->exitModalState (0);
|
||||
}
|
||||
|
||||
void update()
|
||||
{
|
||||
getLastText() = userText.getText();
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
|
||||
|
||||
//==============================================================================
|
||||
class UTF8Component : public Component,
|
||||
private TextEditor::Listener
|
||||
class UTF8Component : public Component
|
||||
{
|
||||
public:
|
||||
UTF8Component()
|
||||
|
|
@ -43,7 +42,8 @@ public:
|
|||
userText.setMultiLine (true, true);
|
||||
userText.setReturnKeyStartsNewLine (true);
|
||||
addAndMakeVisible (userText);
|
||||
userText.addListener (this);
|
||||
userText.onTextChange = [this] { update(); };
|
||||
userText.onEscapeKey = [this] { getTopLevelComponent()->exitModalState (0); };
|
||||
|
||||
resultText.setFont (getAppSettings().appearance.getCodeFont().withHeight (13.0f));
|
||||
resultText.setMultiLine (true, true);
|
||||
|
|
@ -54,16 +54,6 @@ public:
|
|||
userText.setText (getLastText());
|
||||
}
|
||||
|
||||
void textEditorTextChanged (TextEditor&) override
|
||||
{
|
||||
update();
|
||||
}
|
||||
|
||||
void textEditorEscapeKeyPressed (TextEditor&) override
|
||||
{
|
||||
getTopLevelComponent()->exitModalState (0);
|
||||
}
|
||||
|
||||
void update()
|
||||
{
|
||||
getLastText() = userText.getText();
|
||||
|
|
@ -72,7 +62,7 @@ public:
|
|||
|
||||
void resized() override
|
||||
{
|
||||
Rectangle<int> r (getLocalBounds().reduced (8));
|
||||
auto r = getLocalBounds().reduced (8);
|
||||
desc.setBounds (r.removeFromTop (44));
|
||||
r.removeFromTop (8);
|
||||
userText.setBounds (r.removeFromTop (r.getHeight() / 2));
|
||||
|
|
|
|||
|
|
@ -446,7 +446,6 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
class ControlsComponent : public Component,
|
||||
private Slider::Listener,
|
||||
private ChangeListener
|
||||
{
|
||||
public:
|
||||
|
|
@ -464,7 +463,8 @@ private:
|
|||
setMouseClickGrabsKeyboardFocus (false);
|
||||
addAndMakeVisible (&slider);
|
||||
updateRange();
|
||||
slider.addListener (this);
|
||||
slider.onValueChange = [this] { updateSliderValue(); };
|
||||
slider.onDragEnd = [this] { updateRange(); };
|
||||
|
||||
if (showColourSelector)
|
||||
{
|
||||
|
|
@ -511,10 +511,10 @@ private:
|
|||
g.fillRoundedRectangle (getLocalBounds().toFloat(), 8.0f);
|
||||
}
|
||||
|
||||
void sliderValueChanged (Slider* s) override
|
||||
void updateSliderValue()
|
||||
{
|
||||
const String oldText (document.getTextBetween (start, end));
|
||||
const String newText (CppParserHelpers::getReplacementStringInSameFormat (oldText, s->getValue()));
|
||||
const String newText (CppParserHelpers::getReplacementStringInSameFormat (oldText, slider.getValue()));
|
||||
|
||||
if (oldText != newText)
|
||||
document.replaceSection (start.getPosition(), end.getPosition(), newText);
|
||||
|
|
@ -525,9 +525,6 @@ private:
|
|||
updateColourSelector();
|
||||
}
|
||||
|
||||
void sliderDragStarted (Slider*) override {}
|
||||
void sliderDragEnded (Slider*) override { updateRange(); }
|
||||
|
||||
void changeListenerCallback (ChangeBroadcaster*) override
|
||||
{
|
||||
setNewColour (selector.getCurrentColour());
|
||||
|
|
|
|||
|
|
@ -344,8 +344,7 @@ void GenericCodeEditorComponent::removeListener (GenericCodeEditorComponent::Lis
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
class GenericCodeEditorComponent::FindPanel : public Component,
|
||||
private TextEditor::Listener
|
||||
class GenericCodeEditorComponent::FindPanel : public Component
|
||||
{
|
||||
public:
|
||||
FindPanel()
|
||||
|
|
@ -376,7 +375,13 @@ public:
|
|||
findNext.setWantsKeyboardFocus (false);
|
||||
|
||||
editor.setText (getSearchString());
|
||||
editor.addListener (this);
|
||||
editor.onTextChange = [this] { changeSearchString(); };
|
||||
editor.onReturnKey = [this] { ProjucerApplication::getCommandManager().invokeDirectly (CommandIDs::findNext, true); };
|
||||
editor.onEscapeKey = [this]
|
||||
{
|
||||
if (GenericCodeEditorComponent* ed = getOwner())
|
||||
ed->hideFindPanel();
|
||||
};
|
||||
}
|
||||
|
||||
void setCommandManager (ApplicationCommandManager* cm)
|
||||
|
|
@ -406,7 +411,7 @@ public:
|
|||
findPrev.setBounds (getWidth() - 70, y, 30, 22);
|
||||
}
|
||||
|
||||
void textEditorTextChanged (TextEditor&) override
|
||||
void changeSearchString()
|
||||
{
|
||||
setSearchString (editor.getText());
|
||||
|
||||
|
|
@ -414,19 +419,6 @@ public:
|
|||
ed->findNext (true, false);
|
||||
}
|
||||
|
||||
void textEditorFocusLost (TextEditor&) override {}
|
||||
|
||||
void textEditorReturnKeyPressed (TextEditor&) override
|
||||
{
|
||||
ProjucerApplication::getCommandManager().invokeDirectly (CommandIDs::findNext, true);
|
||||
}
|
||||
|
||||
void textEditorEscapeKeyPressed (TextEditor&) override
|
||||
{
|
||||
if (GenericCodeEditorComponent* ed = getOwner())
|
||||
ed->hideFindPanel();
|
||||
}
|
||||
|
||||
GenericCodeEditorComponent* getOwner() const
|
||||
{
|
||||
return findParentComponentOfClass <GenericCodeEditorComponent>();
|
||||
|
|
|
|||
|
|
@ -91,7 +91,6 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
class FindPanel : public Component,
|
||||
private TextEditor::Listener,
|
||||
private Timer,
|
||||
private FocusChangeListener
|
||||
{
|
||||
|
|
@ -100,7 +99,12 @@ public:
|
|||
: callback (cb)
|
||||
{
|
||||
addAndMakeVisible (editor);
|
||||
editor.addListener (this);
|
||||
editor.onTextChange = [this] { startTimer (250); };
|
||||
editor.onFocusLost = [this]
|
||||
{
|
||||
isFocused = false;
|
||||
repaint();
|
||||
};
|
||||
|
||||
Desktop::getInstance().addFocusChangeListener (this);
|
||||
|
||||
|
|
@ -141,17 +145,6 @@ private:
|
|||
editor.setTextToShowWhenEmpty ("Filter...", findColour (widgetTextColourId).withAlpha (0.3f));
|
||||
}
|
||||
|
||||
void textEditorTextChanged (TextEditor&) override
|
||||
{
|
||||
startTimer (250);
|
||||
}
|
||||
|
||||
void textEditorFocusLost (TextEditor&) override
|
||||
{
|
||||
isFocused = false;
|
||||
repaint();
|
||||
}
|
||||
|
||||
void globalFocusChanged (Component* focusedComponent) override
|
||||
{
|
||||
if (focusedComponent == &editor)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
//==============================================================================
|
||||
class HeaderComponent : public Component,
|
||||
private ComboBox::Listener,
|
||||
private ValueTree::Listener,
|
||||
private ChangeListener
|
||||
{
|
||||
|
|
@ -42,7 +41,7 @@ public:
|
|||
addAndMakeVisible (configLabel);
|
||||
addAndMakeVisible (exporterBox);
|
||||
|
||||
exporterBox.addListener (this);
|
||||
exporterBox.onChange = [this] { updateExporterButton(); };
|
||||
|
||||
addAndMakeVisible (juceIcon = new ImageComponent ("icon"));
|
||||
juceIcon->setImage (ImageCache::getFromMemory (BinaryData::juce_icon_png, BinaryData::juce_icon_pngSize),
|
||||
|
|
@ -217,12 +216,6 @@ private:
|
|||
int tabsWidth = 200;
|
||||
|
||||
//==========================================================================
|
||||
void comboBoxChanged (ComboBox* c) override
|
||||
{
|
||||
if (c == &exporterBox)
|
||||
updateExporterButton();
|
||||
}
|
||||
|
||||
void changeListenerCallback (ChangeBroadcaster* source) override
|
||||
{
|
||||
if (source == project)
|
||||
|
|
|
|||
|
|
@ -77,8 +77,8 @@ try : TextPropertyComponent (propertyName, 1024, false),
|
|||
|
||||
getValue().addListener (this);
|
||||
|
||||
if (Label* label = dynamic_cast<Label*> (getChildComponent (0)))
|
||||
label->addListener (this);
|
||||
if (auto* label = dynamic_cast<Label*> (getChildComponent (0)))
|
||||
label->onEditorShow = [this, label] { setEditorText (label); };
|
||||
else
|
||||
jassertfalse;
|
||||
|
||||
|
|
@ -116,18 +116,11 @@ Colour DependencyPathPropertyComponent::getTextColourToDisplay() const
|
|||
: Colours::red;
|
||||
}
|
||||
|
||||
void DependencyPathPropertyComponent::labelTextChanged (Label*)
|
||||
{
|
||||
}
|
||||
|
||||
void DependencyPathPropertyComponent::editorShown (Label* /*label*/, TextEditor& editor)
|
||||
void DependencyPathPropertyComponent::setEditorText (Label* label)
|
||||
{
|
||||
if (! pathValueSource.isUsingProjectSettings())
|
||||
editor.setText (String(), dontSendNotification);
|
||||
}
|
||||
|
||||
void DependencyPathPropertyComponent::editorHidden (Label*, TextEditor&)
|
||||
{
|
||||
if (auto editor = label->getCurrentTextEditor())
|
||||
editor->setText (String(), dontSendNotification);
|
||||
}
|
||||
|
||||
void DependencyPathPropertyComponent::lookAndFeelChanged()
|
||||
|
|
@ -159,7 +152,7 @@ try : TextPropertyComponent (propertyDescription, 1024, false),
|
|||
getValue().addListener (this);
|
||||
|
||||
if (auto* label = dynamic_cast<Label*> (getChildComponent (0)))
|
||||
label->addListener (this);
|
||||
label->onEditorShow = [this, label] { setEditorText (label); };
|
||||
else
|
||||
jassertfalse;
|
||||
|
||||
|
|
@ -238,10 +231,11 @@ void DependencyFilePathPropertyComponent::valueChanged (Value& value)
|
|||
textWasEdited();
|
||||
}
|
||||
|
||||
void DependencyFilePathPropertyComponent::editorShown (Label*, TextEditor& editor)
|
||||
void DependencyFilePathPropertyComponent::setEditorText (Label* label)
|
||||
{
|
||||
if (! pathValueSource.isUsingProjectSettings())
|
||||
editor.setText (String(), dontSendNotification);
|
||||
if (auto editor = label->getCurrentTextEditor())
|
||||
editor->setText (String(), dontSendNotification);
|
||||
}
|
||||
|
||||
void DependencyFilePathPropertyComponent::browse()
|
||||
|
|
|
|||
|
|
@ -148,8 +148,7 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
class DependencyPathPropertyComponent : public TextPropertyComponent,
|
||||
private Value::Listener,
|
||||
private Label::Listener
|
||||
private Value::Listener
|
||||
{
|
||||
public:
|
||||
DependencyPathPropertyComponent (const File& pathRelativeToUse,
|
||||
|
|
@ -178,10 +177,7 @@ private:
|
|||
/** a reference to the value source that this value refers to. */
|
||||
DependencyPathValueSource& pathValueSource;
|
||||
|
||||
// Label::Listener overrides:
|
||||
void labelTextChanged (Label* labelThatHasChanged) override;
|
||||
void editorShown (Label*, TextEditor&) override;
|
||||
void editorHidden (Label*, TextEditor&) override;
|
||||
void setEditorText (Label* label);
|
||||
|
||||
void lookAndFeelChanged() override;
|
||||
|
||||
|
|
@ -191,8 +187,7 @@ private:
|
|||
//==============================================================================
|
||||
class DependencyFilePathPropertyComponent : public TextPropertyComponent,
|
||||
public FileDragAndDropTarget,
|
||||
private Value::Listener,
|
||||
private Label::Listener
|
||||
private Value::Listener
|
||||
{
|
||||
public:
|
||||
DependencyFilePathPropertyComponent (Value& value,
|
||||
|
|
@ -218,9 +213,7 @@ private:
|
|||
|
||||
void valueChanged (Value&) override;
|
||||
|
||||
void labelTextChanged (Label*) override {}
|
||||
void editorHidden (Label*, TextEditor&) override {}
|
||||
void editorShown (Label*, TextEditor&) override;
|
||||
void setEditorText (Label* label);
|
||||
|
||||
void lookAndFeelChanged() override
|
||||
{
|
||||
|
|
|
|||
|
|
@ -53,8 +53,7 @@ public:
|
|||
|
||||
private:
|
||||
struct InnerComponent : public Component,
|
||||
public FileDragAndDropTarget,
|
||||
private TextEditor::Listener
|
||||
public FileDragAndDropTarget
|
||||
{
|
||||
InnerComponent (Value v, bool isDir, const String& wc, const File& rt, const bool multiplePaths)
|
||||
: value (v),
|
||||
|
|
@ -67,7 +66,8 @@ private:
|
|||
{
|
||||
addAndMakeVisible (textbox);
|
||||
textbox.getTextValue().referTo (value);
|
||||
textbox.addListener (this);
|
||||
textbox.onReturnKey = [this] { updateEditorColour (textbox); };
|
||||
textbox.onFocusLost = [this] { updateEditorColour (textbox); };
|
||||
|
||||
addAndMakeVisible (button);
|
||||
button.onClick = [this] { browse(); };
|
||||
|
|
@ -130,9 +130,6 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
void textEditorReturnKeyPressed (TextEditor& editor) override { updateEditorColour (editor); }
|
||||
void textEditorFocusLost (TextEditor& editor) override { updateEditorColour (editor); }
|
||||
|
||||
void updateEditorColour (TextEditor& editor)
|
||||
{
|
||||
if (supportsMultiplePaths)
|
||||
|
|
|
|||
|
|
@ -132,8 +132,7 @@ Component* JucerTreeViewBase::createItemComponent()
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
class RenameTreeItemCallback : public ModalComponentManager::Callback,
|
||||
public TextEditor::Listener
|
||||
class RenameTreeItemCallback : public ModalComponentManager::Callback
|
||||
{
|
||||
public:
|
||||
RenameTreeItemCallback (JucerTreeViewBase& ti, Component& parent, const Rectangle<int>& bounds)
|
||||
|
|
@ -143,7 +142,9 @@ public:
|
|||
ed.setPopupMenuEnabled (false);
|
||||
ed.setSelectAllWhenFocused (true);
|
||||
ed.setFont (item.getFont());
|
||||
ed.addListener (this);
|
||||
ed.onReturnKey = [this] { ed.exitModalState (1); };
|
||||
ed.onEscapeKey = [this] { ed.exitModalState (0); };
|
||||
ed.onFocusLost = [this] { ed.exitModalState (0); };
|
||||
ed.setText (item.getRenamingName());
|
||||
ed.setBounds (bounds);
|
||||
|
||||
|
|
@ -157,11 +158,6 @@ public:
|
|||
item.setName (ed.getText());
|
||||
}
|
||||
|
||||
void textEditorTextChanged (TextEditor&) override {}
|
||||
void textEditorReturnKeyPressed (TextEditor& editor) override { editor.exitModalState (1); }
|
||||
void textEditorEscapeKeyPressed (TextEditor& editor) override { editor.exitModalState (0); }
|
||||
void textEditorFocusLost (TextEditor& editor) override { editor.exitModalState (0); }
|
||||
|
||||
private:
|
||||
struct RenameEditor : public TextEditor
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
|
||||
|
||||
//==============================================================================
|
||||
class ModulesFolderPathBox : public Component,
|
||||
private ComboBox::Listener
|
||||
class ModulesFolderPathBox : public Component
|
||||
{
|
||||
public:
|
||||
ModulesFolderPathBox (File initialFileOrDirectory)
|
||||
|
|
@ -45,7 +44,8 @@ public:
|
|||
|
||||
addAndMakeVisible (currentPathBox);
|
||||
currentPathBox.setEditableText (true);
|
||||
currentPathBox.addListener (this);
|
||||
currentPathBox.onChange = [this] { setModulesFolder (File::getCurrentWorkingDirectory()
|
||||
.getChildFile (currentPathBox.getText())); };
|
||||
|
||||
addAndMakeVisible (openFolderButton);
|
||||
openFolderButton.setTooltip (TRANS ("Select JUCE modules folder"));
|
||||
|
|
@ -121,11 +121,6 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void comboBoxChanged (ComboBox*) override
|
||||
{
|
||||
setModulesFolder (File::getCurrentWorkingDirectory().getChildFile (currentPathBox.getText()));
|
||||
}
|
||||
|
||||
File modulesFolder;
|
||||
bool isUsingGlobalPaths;
|
||||
|
||||
|
|
@ -285,8 +280,6 @@ private:
|
|||
a list box of platform targets to generate.
|
||||
*/
|
||||
class WizardComp : public Component,
|
||||
private ComboBox::Listener,
|
||||
private TextEditor::Listener,
|
||||
private FileBrowserListener
|
||||
{
|
||||
public:
|
||||
|
|
@ -300,13 +293,17 @@ public:
|
|||
addChildAndSetID (&projectName, "projectName");
|
||||
projectName.setText ("NewProject");
|
||||
nameLabel.attachToComponent (&projectName, true);
|
||||
projectName.addListener (this);
|
||||
projectName.onTextChange = [this]
|
||||
{
|
||||
updateCreateButton();
|
||||
fileBrowser.setFileName (File::createLegalFileName (projectName.getText()));
|
||||
};
|
||||
|
||||
addChildAndSetID (&projectType, "projectType");
|
||||
projectType.addItemList (getWizardNames(), 1);
|
||||
projectType.setSelectedId (1, dontSendNotification);
|
||||
typeLabel.attachToComponent (&projectType, true);
|
||||
projectType.addListener (this);
|
||||
projectType.onChange = [this] { updateFileCreationTypes(); };
|
||||
|
||||
addChildAndSetID (&fileOutline, "fileOutline");
|
||||
fileOutline.setColour (GroupComponent::outlineColourId, Colours::black.withAlpha (0.2f));
|
||||
|
|
@ -447,17 +444,6 @@ public:
|
|||
filesToCreate.setSelectedId (1, dontSendNotification);
|
||||
}
|
||||
|
||||
void comboBoxChanged (ComboBox*) override
|
||||
{
|
||||
updateFileCreationTypes();
|
||||
}
|
||||
|
||||
void textEditorTextChanged (TextEditor&) override
|
||||
{
|
||||
updateCreateButton();
|
||||
fileBrowser.setFileName (File::createLegalFileName (projectName.getText()));
|
||||
}
|
||||
|
||||
void selectionChanged() override {}
|
||||
|
||||
void fileClicked (const File&, const MouseEvent&) override {}
|
||||
|
|
|
|||
|
|
@ -134,8 +134,7 @@ private:
|
|||
Project Template Component for front page.
|
||||
Features multiple icon buttons to select the type of project template
|
||||
*/
|
||||
class TemplateTileBrowser : public Component,
|
||||
private Button::Listener
|
||||
class TemplateTileBrowser : public Component
|
||||
{
|
||||
public:
|
||||
TemplateTileBrowser (WizardComp* projectWizard)
|
||||
|
|
@ -152,7 +151,8 @@ public:
|
|||
optionButtons.add (b);
|
||||
addAndMakeVisible (b);
|
||||
b->setDescription (wizard->getDescription());
|
||||
b->addListener (this);
|
||||
b->onClick = [this, b] { showWizardButton (b); };
|
||||
b->onStateChange = [this] { repaint(); };
|
||||
}
|
||||
|
||||
// Handle Open Project button functionality
|
||||
|
|
@ -262,16 +262,11 @@ private:
|
|||
NewProjectWizardClasses::WizardComp* newProjectWizard;
|
||||
ScopedPointer<TemplateOptionButton> blankProjectButton, openProjectButton, exampleProjectButton;
|
||||
|
||||
void buttonClicked (Button* b) override
|
||||
void showWizardButton (Button* b)
|
||||
{
|
||||
if (dynamic_cast<TemplateOptionButton*> (b) != nullptr)
|
||||
showWizard (b->getButtonText());
|
||||
}
|
||||
|
||||
void buttonStateChanged (Button*) override
|
||||
{
|
||||
repaint();
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TemplateTileBrowser)
|
||||
};
|
||||
|
|
|
|||
|
|
@ -99,7 +99,14 @@ FileBrowserComponent::FileBrowserComponent (int flags_,
|
|||
filenameBox.setMultiLine (false);
|
||||
filenameBox.setSelectAllWhenFocused (true);
|
||||
filenameBox.setText (filename, false);
|
||||
filenameBox.addListener (this);
|
||||
filenameBox.onTextChange = [this] { sendListenerChangeMessage(); };
|
||||
filenameBox.onReturnKey = [this] { changeFilename(); };
|
||||
filenameBox.onFocusLost = [this]
|
||||
{
|
||||
if (! isSaveMode())
|
||||
selectionChanged();
|
||||
};
|
||||
|
||||
filenameBox.setReadOnly ((flags & (filenameBoxIsReadOnly | canSelectMultipleItems)) != 0);
|
||||
|
||||
addAndMakeVisible (fileLabel);
|
||||
|
|
@ -439,12 +446,7 @@ bool FileBrowserComponent::keyPressed (const KeyPress& key)
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
void FileBrowserComponent::textEditorTextChanged (TextEditor&)
|
||||
{
|
||||
sendListenerChangeMessage();
|
||||
}
|
||||
|
||||
void FileBrowserComponent::textEditorReturnKeyPressed (TextEditor&)
|
||||
void FileBrowserComponent::changeFilename()
|
||||
{
|
||||
if (filenameBox.getText().containsChar (File::getSeparatorChar()))
|
||||
{
|
||||
|
|
@ -472,16 +474,6 @@ void FileBrowserComponent::textEditorReturnKeyPressed (TextEditor&)
|
|||
}
|
||||
}
|
||||
|
||||
void FileBrowserComponent::textEditorEscapeKeyPressed (TextEditor&)
|
||||
{
|
||||
}
|
||||
|
||||
void FileBrowserComponent::textEditorFocusLost (TextEditor&)
|
||||
{
|
||||
if (! isSaveMode())
|
||||
selectionChanged();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void FileBrowserComponent::updateSelectedPath()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ namespace juce
|
|||
*/
|
||||
class JUCE_API FileBrowserComponent : public Component,
|
||||
private FileBrowserListener,
|
||||
private TextEditor::Listener,
|
||||
private FileFilter,
|
||||
private Timer
|
||||
{
|
||||
|
|
@ -235,14 +234,6 @@ public:
|
|||
/** @internal */
|
||||
void lookAndFeelChanged() override;
|
||||
/** @internal */
|
||||
void textEditorTextChanged (TextEditor&) override;
|
||||
/** @internal */
|
||||
void textEditorReturnKeyPressed (TextEditor&) override;
|
||||
/** @internal */
|
||||
void textEditorEscapeKeyPressed (TextEditor&) override;
|
||||
/** @internal */
|
||||
void textEditorFocusLost (TextEditor&) override;
|
||||
/** @internal */
|
||||
bool keyPressed (const KeyPress&) override;
|
||||
/** @internal */
|
||||
void selectionChanged() override;
|
||||
|
|
@ -295,6 +286,7 @@ private:
|
|||
void sendListenerChangeMessage();
|
||||
bool isFileOrDirSuitable (const File&) const;
|
||||
void updateSelectedPath();
|
||||
void changeFilename();
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FileBrowserComponent)
|
||||
};
|
||||
|
|
|
|||
|
|
@ -239,14 +239,14 @@ void ChoicePropertyComponent::refresh()
|
|||
if (! comboBox.isVisible())
|
||||
{
|
||||
createComboBox();
|
||||
comboBox.addListener (this);
|
||||
comboBox.onChange = [this] { changeIndex(); };
|
||||
}
|
||||
|
||||
comboBox.setSelectedId (getIndex() + 1, dontSendNotification);
|
||||
}
|
||||
}
|
||||
|
||||
void ChoicePropertyComponent::comboBoxChanged (ComboBox*)
|
||||
void ChoicePropertyComponent::changeIndex()
|
||||
{
|
||||
if (isCustomClass)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -46,8 +46,7 @@ namespace juce
|
|||
|
||||
@see PropertyComponent, PropertyPanel
|
||||
*/
|
||||
class JUCE_API ChoicePropertyComponent : public PropertyComponent,
|
||||
private ComboBox::Listener
|
||||
class JUCE_API ChoicePropertyComponent : public PropertyComponent
|
||||
{
|
||||
protected:
|
||||
/** Creates the component.
|
||||
|
|
@ -146,7 +145,7 @@ private:
|
|||
void createComboBox();
|
||||
void createComboBoxWithDefault (const String&);
|
||||
|
||||
void comboBoxChanged (ComboBox*) override;
|
||||
void changeIndex();
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ChoicePropertyComponent)
|
||||
};
|
||||
|
|
|
|||
|
|
@ -41,7 +41,11 @@ SliderPropertyComponent::SliderPropertyComponent (const String& name,
|
|||
slider.setSkewFactor (skewFactor, symmetricSkew);
|
||||
slider.setSliderStyle (Slider::LinearBar);
|
||||
|
||||
slider.addListener (this);
|
||||
slider.onValueChange = [this]
|
||||
{
|
||||
if (getValue() != slider.getValue())
|
||||
setValue (slider.getValue());
|
||||
};
|
||||
}
|
||||
|
||||
SliderPropertyComponent::SliderPropertyComponent (const Value& valueToControl,
|
||||
|
|
@ -80,10 +84,4 @@ void SliderPropertyComponent::refresh()
|
|||
slider.setValue (getValue(), dontSendNotification);
|
||||
}
|
||||
|
||||
void SliderPropertyComponent::sliderValueChanged (Slider*)
|
||||
{
|
||||
if (getValue() != slider.getValue())
|
||||
setValue (slider.getValue());
|
||||
}
|
||||
|
||||
} // namespace juce
|
||||
|
|
|
|||
|
|
@ -33,8 +33,7 @@ namespace juce
|
|||
|
||||
@see PropertyComponent, Slider
|
||||
*/
|
||||
class JUCE_API SliderPropertyComponent : public PropertyComponent,
|
||||
private Slider::Listener
|
||||
class JUCE_API SliderPropertyComponent : public PropertyComponent
|
||||
{
|
||||
protected:
|
||||
//==============================================================================
|
||||
|
|
@ -92,8 +91,6 @@ public:
|
|||
//==============================================================================
|
||||
/** @internal */
|
||||
void refresh();
|
||||
/** @internal */
|
||||
void sliderValueChanged (Slider*);
|
||||
|
||||
protected:
|
||||
/** The slider component being used in this component.
|
||||
|
|
|
|||
|
|
@ -431,7 +431,7 @@ void ComboBox::lookAndFeelChanged()
|
|||
setWantsKeyboardFocus (labelEditableState == labelIsNotEditable);
|
||||
}
|
||||
|
||||
label->addListener (this);
|
||||
label->onTextChange = [this] { triggerAsyncUpdate(); };
|
||||
label->addMouseListener (this, false);
|
||||
|
||||
label->setColour (Label::backgroundColourId, Colours::transparentBlack);
|
||||
|
|
@ -483,12 +483,6 @@ bool ComboBox::keyStateChanged (const bool isKeyDown)
|
|||
void ComboBox::focusGained (FocusChangeType) { repaint(); }
|
||||
void ComboBox::focusLost (FocusChangeType) { repaint(); }
|
||||
|
||||
void ComboBox::labelTextChanged (Label*)
|
||||
{
|
||||
triggerAsyncUpdate();
|
||||
}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
void ComboBox::showPopupIfNotActive()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ namespace juce
|
|||
*/
|
||||
class JUCE_API ComboBox : public Component,
|
||||
public SettableTooltipClient,
|
||||
public Label::Listener,
|
||||
public Value::Listener,
|
||||
private AsyncUpdater
|
||||
{
|
||||
|
|
@ -379,8 +378,6 @@ public:
|
|||
|
||||
//==============================================================================
|
||||
/** @internal */
|
||||
void labelTextChanged (Label*) override;
|
||||
/** @internal */
|
||||
void enablementChanged() override;
|
||||
/** @internal */
|
||||
void colourChanged() override;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ namespace juce
|
|||
|
||||
class Slider::Pimpl : public AsyncUpdater, // this needs to be public otherwise it will cause an
|
||||
// error when JUCE_DLL_BUILD=1
|
||||
private Label::Listener,
|
||||
private Value::Listener
|
||||
{
|
||||
public:
|
||||
|
|
@ -398,9 +397,9 @@ public:
|
|||
setMaxValue (valueMax.getValue(), dontSendNotification, true);
|
||||
}
|
||||
|
||||
void labelTextChanged (Label* label) override
|
||||
void textChanged()
|
||||
{
|
||||
auto newValue = owner.snapValue (owner.getValueFromText (label->getText()), notDragging);
|
||||
auto newValue = owner.snapValue (owner.getValueFromText (valueBox->getText()), notDragging);
|
||||
|
||||
if (newValue != static_cast<double> (currentValue.getValue()))
|
||||
{
|
||||
|
|
@ -572,7 +571,7 @@ public:
|
|||
valueBox->setText (previousTextBoxContent, dontSendNotification);
|
||||
valueBox->setTooltip (owner.getTooltip());
|
||||
updateTextBoxEnablement();
|
||||
valueBox->addListener (this);
|
||||
valueBox->onTextChange = [this] { textChanged(); };
|
||||
|
||||
if (style == LinearBar || style == LinearBarVertical)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ void AlertWindow::setMessage (const String& message)
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
void AlertWindow::buttonClicked (Button* button)
|
||||
void AlertWindow::exitAlert (Button* button)
|
||||
{
|
||||
if (auto* parent = button->getParentComponent())
|
||||
parent->exitModalState (button->getCommandID());
|
||||
|
|
@ -101,7 +101,7 @@ void AlertWindow::addButton (const String& name,
|
|||
b->setCommandToTrigger (0, returnValue, false);
|
||||
b->addShortcut (shortcutKey1);
|
||||
b->addShortcut (shortcutKey2);
|
||||
b->addListener (this);
|
||||
b->onClick = [this, b] { exitAlert (b); };
|
||||
|
||||
Array<TextButton*> buttonsArray (buttons.begin(), buttons.size());
|
||||
auto& lf = getLookAndFeel();
|
||||
|
|
|
|||
|
|
@ -40,8 +40,7 @@ namespace juce
|
|||
|
||||
@see ThreadWithProgressWindow
|
||||
*/
|
||||
class JUCE_API AlertWindow : public TopLevelWindow,
|
||||
private Button::Listener
|
||||
class JUCE_API AlertWindow : public TopLevelWindow
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -455,8 +454,6 @@ protected:
|
|||
/** @internal */
|
||||
bool keyPressed (const KeyPress&) override;
|
||||
/** @internal */
|
||||
void buttonClicked (Button*) override;
|
||||
/** @internal */
|
||||
void lookAndFeelChanged() override;
|
||||
/** @internal */
|
||||
void userTriedToCloseWindow() override;
|
||||
|
|
@ -482,6 +479,7 @@ private:
|
|||
Component* const associatedComponent;
|
||||
bool escapeKeyCancels = true;
|
||||
|
||||
void exitAlert (Button* button);
|
||||
void updateLayout (bool onlyIncreaseSize);
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AlertWindow)
|
||||
|
|
|
|||
|
|
@ -335,7 +335,7 @@ ColourSelector::ColourSelector (int sectionsToShow, int edge, int gapAroundColou
|
|||
sliders[3]->setVisible ((flags & showAlphaChannel) != 0);
|
||||
|
||||
for (int i = 4; --i >= 0;)
|
||||
sliders[i]->addListener (this);
|
||||
sliders[i]->onValueChange = [this] { changeColour(); };
|
||||
}
|
||||
|
||||
if ((flags & showColourspace) != 0)
|
||||
|
|
@ -554,7 +554,7 @@ void ColourSelector::resized()
|
|||
}
|
||||
}
|
||||
|
||||
void ColourSelector::sliderValueChanged (Slider*)
|
||||
void ColourSelector::changeColour()
|
||||
{
|
||||
if (sliders[0] != nullptr)
|
||||
setCurrentColour (Colour ((uint8) sliders[0]->getValue(),
|
||||
|
|
|
|||
|
|
@ -37,8 +37,7 @@ namespace juce
|
|||
when the colour changes.
|
||||
*/
|
||||
class JUCE_API ColourSelector : public Component,
|
||||
public ChangeBroadcaster,
|
||||
protected Slider::Listener
|
||||
public ChangeBroadcaster
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -160,7 +159,7 @@ private:
|
|||
void setSV (float newS, float newV);
|
||||
void updateHSV();
|
||||
void update (NotificationType);
|
||||
void sliderValueChanged (Slider*) override;
|
||||
void changeColour();
|
||||
void paint (Graphics&) override;
|
||||
void resized() override;
|
||||
|
||||
|
|
|
|||
|
|
@ -144,10 +144,10 @@ LivePropertyEditorBase::LivePropertyEditorBase (LiveValueBase& v, CodeDocument&
|
|||
valueEditor.setMultiLine (v.isString());
|
||||
valueEditor.setReturnKeyStartsNewLine (v.isString());
|
||||
valueEditor.setText (v.getStringValue (wasHex), dontSendNotification);
|
||||
valueEditor.addListener (this);
|
||||
valueEditor.onTextChange = [this] { applyNewValue (valueEditor.getText()); };
|
||||
sourceEditor.setReadOnly (true);
|
||||
sourceEditor.setFont (sourceEditor.getFont().withHeight (13.0f));
|
||||
resetButton.addListener (this);
|
||||
resetButton.onClick = [this] { applyNewValue (value.getOriginalStringValue (wasHex)); };
|
||||
}
|
||||
|
||||
void LivePropertyEditorBase::paint (Graphics& g)
|
||||
|
|
@ -181,16 +181,6 @@ void LivePropertyEditorBase::resized()
|
|||
sourceEditor.setBounds (r);
|
||||
}
|
||||
|
||||
void LivePropertyEditorBase::textEditorTextChanged (TextEditor&)
|
||||
{
|
||||
applyNewValue (valueEditor.getText());
|
||||
}
|
||||
|
||||
void LivePropertyEditorBase::buttonClicked (Button*)
|
||||
{
|
||||
applyNewValue (value.getOriginalStringValue (wasHex));
|
||||
}
|
||||
|
||||
void LivePropertyEditorBase::applyNewValue (const String& s)
|
||||
{
|
||||
value.setStringValue (s);
|
||||
|
|
@ -444,8 +434,7 @@ Component* createColourEditor (LivePropertyEditorBase& editor)
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
struct SliderComp : public Component,
|
||||
private Slider::Listener
|
||||
struct SliderComp : public Component
|
||||
{
|
||||
SliderComp (LivePropertyEditorBase& e, bool useFloat)
|
||||
: editor (e), isFloat (useFloat)
|
||||
|
|
@ -453,7 +442,12 @@ struct SliderComp : public Component,
|
|||
slider.setTextBoxStyle (Slider::NoTextBox, true, 0, 0);
|
||||
addAndMakeVisible (slider);
|
||||
updateRange();
|
||||
slider.addListener (this);
|
||||
slider.onDragEnd = [this] { updateRange(); };
|
||||
slider.onValueChange = [this]
|
||||
{
|
||||
editor.applyNewValue (isFloat ? getAsString ((double) slider.getValue(), editor.wasHex)
|
||||
: getAsString ((int64) slider.getValue(), editor.wasHex));
|
||||
};
|
||||
}
|
||||
|
||||
virtual void updateRange()
|
||||
|
|
@ -467,16 +461,6 @@ struct SliderComp : public Component,
|
|||
slider.setValue (v, dontSendNotification);
|
||||
}
|
||||
|
||||
void sliderValueChanged (Slider*) override
|
||||
{
|
||||
editor.applyNewValue (isFloat ? getAsString ((double) slider.getValue(), editor.wasHex)
|
||||
: getAsString ((int64) slider.getValue(), editor.wasHex));
|
||||
|
||||
}
|
||||
|
||||
void sliderDragStarted (Slider*) override {}
|
||||
void sliderDragEnded (Slider*) override { updateRange(); }
|
||||
|
||||
void resized() override
|
||||
{
|
||||
slider.setBounds (getLocalBounds().removeFromTop (25));
|
||||
|
|
@ -490,15 +474,17 @@ struct SliderComp : public Component,
|
|||
//==============================================================================
|
||||
struct BoolSliderComp : public SliderComp
|
||||
{
|
||||
BoolSliderComp (LivePropertyEditorBase& e) : SliderComp (e, false) {}
|
||||
BoolSliderComp (LivePropertyEditorBase& e)
|
||||
: SliderComp (e, false)
|
||||
{
|
||||
slider.onValueChange = [this] { editor.applyNewValue (slider.getValue() > 0.5 ? "true" : "false"); };
|
||||
}
|
||||
|
||||
void updateRange() override
|
||||
{
|
||||
slider.setRange (0.0, 1.0, dontSendNotification);
|
||||
slider.setValue (editor.value.getStringValue (false) == "true", dontSendNotification);
|
||||
}
|
||||
|
||||
void sliderValueChanged (Slider*) override { editor.applyNewValue (slider.getValue() > 0.5 ? "true" : "false"); }
|
||||
};
|
||||
|
||||
Component* createIntegerSlider (LivePropertyEditorBase& editor) { return new SliderComp (editor, false); }
|
||||
|
|
|
|||
|
|
@ -106,16 +106,12 @@ namespace LiveConstantEditor
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
struct JUCE_API LivePropertyEditorBase : public Component,
|
||||
private TextEditor::Listener,
|
||||
private Button::Listener
|
||||
struct JUCE_API LivePropertyEditorBase : public Component
|
||||
{
|
||||
LivePropertyEditorBase (LiveValueBase&, CodeDocument&);
|
||||
|
||||
void paint (Graphics&) override;
|
||||
void resized() override;
|
||||
void textEditorTextChanged (TextEditor&) override;
|
||||
void buttonClicked (Button*) override;
|
||||
|
||||
void applyNewValue (const String&);
|
||||
void selectOriginalValue();
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ void PreferencesPanel::addSettingsPage (const String& title,
|
|||
|
||||
button->setImages (icon, overIcon, downIcon);
|
||||
button->setRadioGroupId (1);
|
||||
button->addListener (this);
|
||||
button->onClick = [this] { clickedPage(); };
|
||||
button->setClickingTogglesState (true);
|
||||
button->setWantsKeyboardFocus (false);
|
||||
addAndMakeVisible (button);
|
||||
|
|
@ -142,7 +142,7 @@ void PreferencesPanel::setCurrentPage (const String& pageName)
|
|||
}
|
||||
}
|
||||
|
||||
void PreferencesPanel::buttonClicked (Button*)
|
||||
void PreferencesPanel::clickedPage()
|
||||
{
|
||||
for (auto* b : buttons)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -44,8 +44,7 @@ namespace juce
|
|||
and implement the createComponentForPage() method to create suitable components
|
||||
for each of these pages.
|
||||
*/
|
||||
class JUCE_API PreferencesPanel : public Component,
|
||||
private Button::Listener
|
||||
class JUCE_API PreferencesPanel : public Component
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -131,8 +130,6 @@ public:
|
|||
void resized() override;
|
||||
/** @internal */
|
||||
void paint (Graphics&) override;
|
||||
/** @internal */
|
||||
void buttonClicked (Button*) override;
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
|
|
@ -141,6 +138,8 @@ private:
|
|||
OwnedArray<DrawableButton> buttons;
|
||||
int buttonSize;
|
||||
|
||||
void clickedPage();
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PreferencesPanel)
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue