Added default text to ComboBox which is displayed when no item is selected
parent
6557785d51
commit
822fa05179
|
@ -1,6 +1,8 @@
|
|||
TGUI 0.8.5 (TBD)
|
||||
-----------------
|
||||
|
||||
- Svg images are now supported
|
||||
- ComboBox can now contain some text when no item is selected
|
||||
- Added RightClicked signal to ListView
|
||||
- Added functions to ListView to change existing items
|
||||
- ChildWindow can now have a different border color in focused state
|
||||
|
|
|
@ -50,6 +50,8 @@ struct ComboBoxProperties : WidgetProperties
|
|||
comboBox->setItemsToDisplay(static_cast<std::size_t>(tgui::stoi(value)));
|
||||
else if (property == "TextSize")
|
||||
comboBox->setTextSize(static_cast<unsigned int>(tgui::stoi(value)));
|
||||
else if (property == "DefaultText")
|
||||
comboBox->setDefaultText(value);
|
||||
else if (property == "MaximumItems")
|
||||
comboBox->setMaximumItems(static_cast<unsigned int>(tgui::stoi(value)));
|
||||
else if (property == "ExpandDirection")
|
||||
|
@ -74,6 +76,7 @@ struct ComboBoxProperties : WidgetProperties
|
|||
pair.second["Padding"] = {"Outline", renderer->getPadding().toString()};
|
||||
pair.second["BackgroundColor"] = {"Color", tgui::Serializer::serialize(renderer->getBackgroundColor())};
|
||||
pair.second["TextColor"] = {"Color", tgui::Serializer::serialize(renderer->getTextColor())};
|
||||
pair.second["DefaultTextColor"] = {"Color", tgui::Serializer::serialize(renderer->getDefaultTextColor())};
|
||||
pair.second["ArrowColor"] = {"Color", tgui::Serializer::serialize(renderer->getArrowColor())};
|
||||
pair.second["ArrowColorHover"] = {"Color", tgui::Serializer::serialize(renderer->getArrowColorHover())};
|
||||
pair.second["ArrowBackgroundColor"] = {"Color", tgui::Serializer::serialize(renderer->getArrowBackgroundColor())};
|
||||
|
@ -83,6 +86,7 @@ struct ComboBoxProperties : WidgetProperties
|
|||
pair.second["TextureArrow"] = {"Texture", tgui::Serializer::serialize(renderer->getTextureArrow())};
|
||||
pair.second["TextureArrowHover"] = {"Texture", tgui::Serializer::serialize(renderer->getTextureArrowHover())};
|
||||
pair.second["TextStyle"] = {"TextStyle", tgui::Serializer::serialize(renderer->getTextStyle())};
|
||||
pair.second["DefaultTextStyle"] = {"TextStyle", tgui::Serializer::serialize(renderer->getDefaultTextStyle())};
|
||||
return pair;
|
||||
}
|
||||
|
||||
|
|
|
@ -94,6 +94,26 @@ namespace tgui
|
|||
TextStyle getTextStyle() const;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Changes the text style of the default text (the text drawn when no item is selected)
|
||||
///
|
||||
/// @param style The new default text style
|
||||
///
|
||||
/// @code
|
||||
/// comboBox->getSharedRenderer()->setDefaultTextStyle(sf::Text::Italic | sf::Text::Bold);
|
||||
/// @endcode
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void setDefaultTextStyle(TextStyle style);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Returns the text style of the default text (the text drawn when no item is selected)
|
||||
///
|
||||
/// @return Style of the default text
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
TextStyle getDefaultTextStyle() const;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Changes the background color of the combo box
|
||||
///
|
||||
|
@ -130,6 +150,22 @@ namespace tgui
|
|||
Color getTextColor() const;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Sets the color of the default text that can optionally be displayed when no item is selected
|
||||
///
|
||||
/// @param defaultTextColor The new default text color
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void setDefaultTextColor(Color defaultTextColor);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Returns the color of the default text that can optionally be displayed when no item is selected
|
||||
///
|
||||
/// @return Default text color
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
Color getDefaultTextColor() const;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Changes the color behind the arrow
|
||||
///
|
||||
|
|
|
@ -455,6 +455,22 @@ namespace tgui
|
|||
unsigned int getTextSize() const;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Changes the default text of the combo box. This is the text drawn when no item is selected.
|
||||
///
|
||||
/// @param defaultText The new default text
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void setDefaultText(const sf::String& defaultText);
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Returns the default text of the combo box. This is the text drawn when no item is selected.
|
||||
///
|
||||
/// @return The default text of the combo box
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
const sf::String& getDefaultText() const;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Changes the side where the list is displayed
|
||||
/// @param direction On which side of the combo box should the list be displayed?
|
||||
|
@ -612,6 +628,7 @@ namespace tgui
|
|||
ListBox::Ptr m_listBox = ListBox::create();
|
||||
|
||||
Text m_text;
|
||||
Text m_defaultText;
|
||||
|
||||
#ifdef TGUI_NEXT
|
||||
ExpandDirection m_expandDirection = ExpandDirection::Automatic;
|
||||
|
|
|
@ -35,6 +35,7 @@ namespace tgui
|
|||
|
||||
TGUI_RENDERER_PROPERTY_COLOR(ComboBoxRenderer, BackgroundColor, Color::White)
|
||||
TGUI_RENDERER_PROPERTY_COLOR(ComboBoxRenderer, TextColor, Color::Black)
|
||||
TGUI_RENDERER_PROPERTY_COLOR(ComboBoxRenderer, DefaultTextColor, {})
|
||||
TGUI_RENDERER_PROPERTY_COLOR(ComboBoxRenderer, ArrowBackgroundColor, Color::White)
|
||||
TGUI_RENDERER_PROPERTY_COLOR(ComboBoxRenderer, ArrowBackgroundColorHover, {})
|
||||
TGUI_RENDERER_PROPERTY_COLOR(ComboBoxRenderer, ArrowColor, Color::Black)
|
||||
|
@ -46,6 +47,7 @@ namespace tgui
|
|||
TGUI_RENDERER_PROPERTY_TEXTURE(ComboBoxRenderer, TextureArrowHover)
|
||||
|
||||
TGUI_RENDERER_PROPERTY_TEXT_STYLE(ComboBoxRenderer, TextStyle, sf::Text::Regular)
|
||||
TGUI_RENDERER_PROPERTY_TEXT_STYLE(ComboBoxRenderer, DefaultTextStyle, {})
|
||||
|
||||
TGUI_RENDERER_PROPERTY_RENDERER(ComboBoxRenderer, ListBox, "listbox")
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ namespace tgui
|
|||
m_type = "ComboBox";
|
||||
m_draggableWidget = true;
|
||||
m_text.setFont(m_fontCached);
|
||||
m_defaultText.setFont(m_fontCached);
|
||||
|
||||
initListBox();
|
||||
|
||||
|
@ -59,6 +60,7 @@ namespace tgui
|
|||
m_nrOfItemsToDisplay {other.m_nrOfItemsToDisplay},
|
||||
m_listBox {ListBox::copy(other.m_listBox)},
|
||||
m_text {other.m_text},
|
||||
m_defaultText {other.m_defaultText},
|
||||
m_expandDirection {other.m_expandDirection},
|
||||
m_spriteBackground {other.m_spriteBackground},
|
||||
m_spriteArrow {other.m_spriteArrow},
|
||||
|
@ -83,6 +85,7 @@ namespace tgui
|
|||
m_nrOfItemsToDisplay {std::move(other.m_nrOfItemsToDisplay)},
|
||||
m_listBox {std::move(other.m_listBox)},
|
||||
m_text {std::move(other.m_text)},
|
||||
m_defaultText {std::move(other.m_defaultText)},
|
||||
m_expandDirection {std::move(other.m_expandDirection)},
|
||||
m_spriteBackground {std::move(other.m_spriteBackground)},
|
||||
m_spriteArrow {std::move(other.m_spriteArrow)},
|
||||
|
@ -112,6 +115,7 @@ namespace tgui
|
|||
std::swap(m_nrOfItemsToDisplay, temp.m_nrOfItemsToDisplay);
|
||||
std::swap(m_listBox, temp.m_listBox);
|
||||
std::swap(m_text, temp.m_text);
|
||||
std::swap(m_defaultText, temp.m_defaultText);
|
||||
std::swap(m_expandDirection, temp.m_expandDirection);
|
||||
std::swap(m_spriteBackground, temp.m_spriteBackground);
|
||||
std::swap(m_spriteArrow, temp.m_spriteArrow);
|
||||
|
@ -140,6 +144,7 @@ namespace tgui
|
|||
m_nrOfItemsToDisplay = std::move(other.m_nrOfItemsToDisplay);
|
||||
m_listBox = std::move(other.m_listBox);
|
||||
m_text = std::move(other.m_text);
|
||||
m_defaultText = std::move(other.m_defaultText);
|
||||
m_expandDirection = std::move(other.m_expandDirection);
|
||||
m_spriteBackground = std::move(other.m_spriteBackground);
|
||||
m_spriteArrow = std::move(other.m_spriteArrow);
|
||||
|
@ -228,6 +233,7 @@ namespace tgui
|
|||
}
|
||||
|
||||
m_text.setCharacterSize(m_listBox->getTextSize());
|
||||
m_defaultText.setCharacterSize(m_listBox->getTextSize());
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -443,6 +449,7 @@ namespace tgui
|
|||
{
|
||||
m_listBox->setTextSize(textSize);
|
||||
m_text.setCharacterSize(m_listBox->getTextSize());
|
||||
m_defaultText.setCharacterSize(m_listBox->getTextSize());
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -454,6 +461,20 @@ namespace tgui
|
|||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void ComboBox::setDefaultText(const sf::String& defaultText)
|
||||
{
|
||||
m_defaultText.setString(defaultText);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
const sf::String& ComboBox::getDefaultText() const
|
||||
{
|
||||
return m_defaultText.getString();
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void ComboBox::setExpandDirection(ExpandDirection direction)
|
||||
{
|
||||
m_expandDirection = direction;
|
||||
|
@ -581,10 +602,28 @@ namespace tgui
|
|||
else if (property == "textcolor")
|
||||
{
|
||||
m_text.setColor(getSharedRenderer()->getTextColor());
|
||||
if (!getSharedRenderer()->getDefaultTextColor().isSet())
|
||||
m_defaultText.setColor(getSharedRenderer()->getTextColor());
|
||||
}
|
||||
else if (property == "textstyle")
|
||||
{
|
||||
m_text.setStyle(getSharedRenderer()->getTextStyle());
|
||||
if (!getSharedRenderer()->getDefaultTextStyle().isSet())
|
||||
m_defaultText.setStyle(getSharedRenderer()->getTextStyle());
|
||||
}
|
||||
else if (property == "defaulttextcolor")
|
||||
{
|
||||
if (getSharedRenderer()->getDefaultTextColor().isSet())
|
||||
m_defaultText.setColor(getSharedRenderer()->getDefaultTextColor());
|
||||
else
|
||||
m_defaultText.setColor(getSharedRenderer()->getTextColor());
|
||||
}
|
||||
else if (property == "defaulttextstyle")
|
||||
{
|
||||
if (getSharedRenderer()->getDefaultTextStyle().isSet())
|
||||
m_defaultText.setStyle(getSharedRenderer()->getDefaultTextStyle());
|
||||
else
|
||||
m_defaultText.setStyle(getSharedRenderer()->getTextStyle());
|
||||
}
|
||||
else if (property == "texturebackground")
|
||||
{
|
||||
|
@ -636,12 +675,14 @@ namespace tgui
|
|||
m_spriteArrowHover.setOpacity(m_opacityCached);
|
||||
|
||||
m_text.setOpacity(m_opacityCached);
|
||||
m_defaultText.setOpacity(m_opacityCached);
|
||||
}
|
||||
else if (property == "font")
|
||||
{
|
||||
Widget::rendererChanged(property);
|
||||
|
||||
m_text.setFont(m_fontCached);
|
||||
m_defaultText.setFont(m_fontCached);
|
||||
m_listBox->setInheritedFont(m_fontCached);
|
||||
|
||||
setSize(m_size);
|
||||
|
@ -910,13 +951,18 @@ namespace tgui
|
|||
}
|
||||
|
||||
// Draw the selected item
|
||||
if (!m_text.getString().isEmpty())
|
||||
const int selectedItemIndex = getSelectedItemIndex();
|
||||
if (((selectedItemIndex >= 0) && !m_text.getString().isEmpty()) || ((selectedItemIndex == -1) && !m_defaultText.getString().isEmpty()))
|
||||
{
|
||||
const Clipping clipping{target, statesForText, {m_paddingCached.getLeft(), m_paddingCached.getTop()}, {getInnerSize().x - m_paddingCached.getLeft() - m_paddingCached.getRight() - arrowSize, getInnerSize().y - m_paddingCached.getTop() - m_paddingCached.getBottom()}};
|
||||
|
||||
statesForText.transform.translate(m_paddingCached.getLeft() + m_text.getExtraHorizontalPadding(),
|
||||
m_paddingCached.getTop() + (((getInnerSize().y - m_paddingCached.getTop() - m_paddingCached.getBottom()) - m_text.getSize().y) / 2.0f));
|
||||
m_text.draw(target, statesForText);
|
||||
|
||||
if (selectedItemIndex >= 0)
|
||||
m_text.draw(target, statesForText);
|
||||
else
|
||||
m_defaultText.draw(target, statesForText);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -246,6 +246,13 @@ TEST_CASE("[ComboBox]")
|
|||
REQUIRE(comboBox->getTextSize() == 25);
|
||||
}
|
||||
|
||||
SECTION("DefaultText")
|
||||
{
|
||||
REQUIRE(comboBox->getDefaultText().isEmpty());
|
||||
comboBox->setDefaultText("Hello");
|
||||
REQUIRE(comboBox->getDefaultText() == "Hello");
|
||||
}
|
||||
|
||||
SECTION("ExpandDirection")
|
||||
{
|
||||
REQUIRE(comboBox->getExpandDirection() == tgui::ComboBox::ExpandDirection::Down);
|
||||
|
@ -353,10 +360,12 @@ TEST_CASE("[ComboBox]")
|
|||
REQUIRE_NOTHROW(renderer->setProperty("ArrowColor", "rgb(50, 60, 70)"));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("ArrowColorHover", "rgb(60, 70, 80)"));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("TextColor", "rgb(70, 80, 90)"));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("DefaultTextColor", "rgb(110, 120, 130)"));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("BorderColor", "rgb(80, 90, 100)"));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("Borders", "(1, 2, 3, 4)"));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("Padding", "(5, 6, 7, 8)"));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("TextStyle", "Bold"));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("DefaultTextStyle", "Italic"));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("ListBox", "{ BackgroundColor = Red; TextColor = Blue; }"));
|
||||
}
|
||||
|
||||
|
@ -368,10 +377,12 @@ TEST_CASE("[ComboBox]")
|
|||
REQUIRE_NOTHROW(renderer->setProperty("ArrowColor", sf::Color{50, 60, 70}));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("ArrowColorHover", sf::Color{60, 70, 80}));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("TextColor", sf::Color{70, 80, 90}));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("DefaultTextColor", sf::Color{110, 120, 130}));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("BorderColor", sf::Color{80, 90, 100}));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("Borders", tgui::Borders{1, 2, 3, 4}));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("Padding", tgui::Borders{5, 6, 7, 8}));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("TextStyle", sf::Text::Bold));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("DefaultTextStyle", sf::Text::Italic));
|
||||
REQUIRE_NOTHROW(renderer->setProperty("ListBox", listBoxRenderer.getData()));
|
||||
}
|
||||
|
||||
|
@ -383,10 +394,12 @@ TEST_CASE("[ComboBox]")
|
|||
renderer->setArrowColor({50, 60, 70});
|
||||
renderer->setArrowColorHover({60, 70, 80});
|
||||
renderer->setTextColor({70, 80, 90});
|
||||
renderer->setDefaultTextColor({110, 120, 130});
|
||||
renderer->setBorderColor({80, 90, 100});
|
||||
renderer->setBorders({1, 2, 3, 4});
|
||||
renderer->setPadding({5, 6, 7, 8});
|
||||
renderer->setTextStyle(sf::Text::Bold);
|
||||
renderer->setDefaultTextStyle(sf::Text::Italic);
|
||||
renderer->setListBox(listBoxRenderer.getData());
|
||||
}
|
||||
|
||||
|
@ -396,10 +409,12 @@ TEST_CASE("[ComboBox]")
|
|||
REQUIRE(renderer->getProperty("ArrowColor").getColor() == sf::Color(50, 60, 70));
|
||||
REQUIRE(renderer->getProperty("ArrowColorHover").getColor() == sf::Color(60, 70, 80));
|
||||
REQUIRE(renderer->getProperty("TextColor").getColor() == sf::Color(70, 80, 90));
|
||||
REQUIRE(renderer->getProperty("DefaultTextColor").getColor() == sf::Color(110, 120, 130));
|
||||
REQUIRE(renderer->getProperty("BorderColor").getColor() == sf::Color(80, 90, 100));
|
||||
REQUIRE(renderer->getProperty("Borders").getOutline() == tgui::Borders(1, 2, 3, 4));
|
||||
REQUIRE(renderer->getProperty("Padding").getOutline() == tgui::Borders(5, 6, 7, 8));
|
||||
REQUIRE(renderer->getProperty("TextStyle").getTextStyle() == sf::Text::Bold);
|
||||
REQUIRE(renderer->getProperty("DefaultTextStyle").getTextStyle() == sf::Text::Italic);
|
||||
|
||||
REQUIRE(renderer->getListBox()->propertyValuePairs.size() == 2);
|
||||
REQUIRE(renderer->getListBox()->propertyValuePairs["backgroundcolor"].getColor() == sf::Color::Red);
|
||||
|
@ -468,11 +483,13 @@ TEST_CASE("[ComboBox]")
|
|||
tgui::ComboBoxRenderer renderer = tgui::RendererData::create();
|
||||
renderer.setBackgroundColor(sf::Color::Green);
|
||||
renderer.setTextColor(sf::Color::Red);
|
||||
renderer.setDefaultTextColor(sf::Color::White);
|
||||
renderer.setBorderColor(sf::Color::Blue);
|
||||
renderer.setArrowBackgroundColor(sf::Color::Cyan);
|
||||
renderer.setArrowColor(sf::Color::Magenta);
|
||||
renderer.setBorders({1, 2, 3, 4});
|
||||
renderer.setTextStyle(sf::Text::Italic);
|
||||
renderer.setDefaultTextStyle(sf::Text::Italic);
|
||||
renderer.setOpacity(0.7f);
|
||||
comboBox->setRenderer(renderer.getData());
|
||||
|
||||
|
@ -593,5 +610,11 @@ TEST_CASE("[ComboBox]")
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("Default text")
|
||||
{
|
||||
comboBox->setDefaultText("Test");
|
||||
TEST_DRAW("ComboBox_DefaultText.png")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
Loading…
Reference in New Issue