1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00
JUCE/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp
2012-09-24 14:03:54 +01:00

124 lines
3.9 KiB
C++

/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-11 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
class TextPropertyComponent::LabelComp : public Label
{
public:
LabelComp (TextPropertyComponent& owner_,
const int maxChars_, const bool isMultiline_)
: Label (String::empty, String::empty),
owner (owner_),
maxChars (maxChars_),
isMultiline (isMultiline_)
{
setEditable (true, true, false);
setColour (backgroundColourId, owner.findColour (TextPropertyComponent::backgroundColourId));
setColour (outlineColourId, owner.findColour (TextPropertyComponent::outlineColourId));
setColour (textColourId, owner.findColour (TextPropertyComponent::textColourId));
}
TextEditor* createEditorComponent()
{
TextEditor* const ed = Label::createEditorComponent();
ed->setInputRestrictions (maxChars);
if (isMultiline)
{
ed->setMultiLine (true, true);
ed->setReturnKeyStartsNewLine (true);
}
return ed;
}
void textWasEdited()
{
owner.textWasEdited();
}
private:
TextPropertyComponent& owner;
int maxChars;
bool isMultiline;
};
//==============================================================================
TextPropertyComponent::TextPropertyComponent (const String& name,
const int maxNumChars,
const bool isMultiLine)
: PropertyComponent (name)
{
createEditor (maxNumChars, isMultiLine);
}
TextPropertyComponent::TextPropertyComponent (const Value& valueToControl,
const String& name,
const int maxNumChars,
const bool isMultiLine)
: PropertyComponent (name)
{
createEditor (maxNumChars, isMultiLine);
textEditor->getTextValue().referTo (valueToControl);
}
TextPropertyComponent::~TextPropertyComponent()
{
}
void TextPropertyComponent::setText (const String& newText)
{
textEditor->setText (newText, true);
}
String TextPropertyComponent::getText() const
{
return textEditor->getText();
}
void TextPropertyComponent::createEditor (const int maxNumChars, const bool isMultiLine)
{
addAndMakeVisible (textEditor = new LabelComp (*this, maxNumChars, isMultiLine));
if (isMultiLine)
{
textEditor->setJustificationType (Justification::topLeft);
preferredHeight = 100;
}
}
void TextPropertyComponent::refresh()
{
textEditor->setText (getText(), false);
}
void TextPropertyComponent::textWasEdited()
{
const String newText (textEditor->getText());
if (getText() != newText)
setText (newText);
}