improve combobox and menu design
This commit is contained in:
parent
7e7050929d
commit
fb20ad1ba1
|
@ -2,7 +2,7 @@ CharacterListLabel < Label
|
||||||
image: /core_styles/images/empty_rect.png
|
image: /core_styles/images/empty_rect.png
|
||||||
font: verdana-11px-monochrome
|
font: verdana-11px-monochrome
|
||||||
background-color: #00000000
|
background-color: #00000000
|
||||||
offset: 2 0
|
text-offset: 2 0
|
||||||
focusable: true
|
focusable: true
|
||||||
margin-left: 1
|
margin-left: 1
|
||||||
margin-right: 1
|
margin-right: 1
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 291 B After Width: | Height: | Size: 457 B |
Binary file not shown.
Before Width: | Height: | Size: 227 B After Width: | Height: | Size: 241 B |
|
@ -30,22 +30,20 @@ TopButton < UIButton
|
||||||
text-translate: 0 0
|
text-translate: 0 0
|
||||||
border-image:
|
border-image:
|
||||||
source: /core_styles/images/top_button.png
|
source: /core_styles/images/top_button.png
|
||||||
size: 26 26
|
clip: 0 0 26 26
|
||||||
border: 3
|
border: 3
|
||||||
|
|
||||||
$hover:
|
$hover:
|
||||||
border-image:
|
border-image:
|
||||||
source: /core_styles/images/top_button.png
|
source: /core_styles/images/top_button.png
|
||||||
size: 26 26
|
clip: 26 0 26 26
|
||||||
offset: 26 0
|
|
||||||
border: 3
|
border: 3
|
||||||
|
|
||||||
$pressed:
|
$pressed:
|
||||||
text-translate: 1 1
|
text-translate: 1 1
|
||||||
border-image:
|
border-image:
|
||||||
source: /core_styles/images/top_button.png
|
source: /core_styles/images/top_button.png
|
||||||
size: 26 26
|
clip: 52 0 26 26
|
||||||
offset: 52 0
|
|
||||||
border: 3
|
border: 3
|
||||||
|
|
||||||
$disabled:
|
$disabled:
|
||||||
|
|
|
@ -12,22 +12,22 @@ CheckBox < UICheckBox
|
||||||
$!checked:
|
$!checked:
|
||||||
image:
|
image:
|
||||||
source: /core_styles/images/checkbox.png
|
source: /core_styles/images/checkbox.png
|
||||||
coords: 0 0 12 12
|
clip: 0 0 12 12
|
||||||
|
|
||||||
$hover !checked:
|
$hover !checked:
|
||||||
image:
|
image:
|
||||||
source: /core_styles/images/checkbox.png
|
source: /core_styles/images/checkbox.png
|
||||||
coords: 0 12 12 12
|
clip: 0 12 12 12
|
||||||
|
|
||||||
$checked:
|
$checked:
|
||||||
image:
|
image:
|
||||||
source: /core_styles/images/checkbox.png
|
source: /core_styles/images/checkbox.png
|
||||||
coords: 0 24 12 12
|
clip: 0 24 12 12
|
||||||
|
|
||||||
$hover checked:
|
$hover checked:
|
||||||
image:
|
image:
|
||||||
source: /core_styles/images/checkbox.png
|
source: /core_styles/images/checkbox.png
|
||||||
coords: 0 36 12 12
|
clip: 0 36 12 12
|
||||||
|
|
||||||
$disabled:
|
$disabled:
|
||||||
background-color: #ffffff88
|
background-color: #ffffff88
|
||||||
|
@ -41,12 +41,12 @@ ColorBox < UICheckBox
|
||||||
$checked:
|
$checked:
|
||||||
image:
|
image:
|
||||||
source: /core_styles/images/colorbox.png
|
source: /core_styles/images/colorbox.png
|
||||||
coords: 16 0 16 16
|
clip: 16 0 16 16
|
||||||
|
|
||||||
$!checked:
|
$!checked:
|
||||||
image:
|
image:
|
||||||
source: /core_styles/images/colorbox.png
|
source: /core_styles/images/colorbox.png
|
||||||
coords: 0 0 16 16
|
clip: 0 0 16 16
|
||||||
|
|
||||||
ButtonBox < UICheckBox
|
ButtonBox < UICheckBox
|
||||||
font: verdana-11px-antialised
|
font: verdana-11px-antialised
|
||||||
|
|
|
@ -1,6 +1,46 @@
|
||||||
ComboBoxPopupMenuSeparator < PopupMenuSeparator
|
ComboBoxPopupMenuButton < UIButton
|
||||||
ComboBoxPopupMenuButton < PopupMenuButton
|
font: verdana-11px-antialised
|
||||||
ComboBoxPopupMenu < PopupMenu
|
background-color: alpha
|
||||||
|
color: #aaaaaa
|
||||||
|
height: 18
|
||||||
|
margin-left: 1
|
||||||
|
margin-right: 1
|
||||||
|
margin-top: 0
|
||||||
|
margin-bottom: 0
|
||||||
|
|
||||||
|
image:
|
||||||
|
source: /core_styles/images/empty_rect.png
|
||||||
|
repeated: true
|
||||||
|
|
||||||
|
$hover:
|
||||||
|
color: #ffffff
|
||||||
|
background-color: #ffffff44
|
||||||
|
|
||||||
|
$disabled:
|
||||||
|
color: #555555
|
||||||
|
|
||||||
|
$first:
|
||||||
|
margin-top: 1
|
||||||
|
|
||||||
|
$last:
|
||||||
|
margin-bottom: 1
|
||||||
|
|
||||||
|
ComboBoxPopupMenuSeparator < UIWidget
|
||||||
|
margin-left: 1
|
||||||
|
margin-right: 1
|
||||||
|
image:
|
||||||
|
source: /core_styles/images/combobox.png
|
||||||
|
repeated: true
|
||||||
|
clip: 1 59 89 1
|
||||||
|
height: 1
|
||||||
|
phantom: true
|
||||||
|
|
||||||
|
ComboBoxPopupMenu < UIPopupMenu
|
||||||
|
border-image:
|
||||||
|
source: /core_styles/images/combobox.png
|
||||||
|
clip: 0 60 89 20
|
||||||
|
border: 1
|
||||||
|
border.top: 0
|
||||||
|
|
||||||
ComboBox < UIComboBox
|
ComboBox < UIComboBox
|
||||||
font: verdana-11px-antialised
|
font: verdana-11px-antialised
|
||||||
|
@ -12,3 +52,18 @@ ComboBox < UIComboBox
|
||||||
source: /core_styles/images/combobox.png
|
source: /core_styles/images/combobox.png
|
||||||
border: 1
|
border: 1
|
||||||
border.right: 17
|
border.right: 17
|
||||||
|
size: 89 20
|
||||||
|
|
||||||
|
$hover:
|
||||||
|
border-image:
|
||||||
|
source: /core_styles/images/combobox.png
|
||||||
|
border: 1
|
||||||
|
border.right: 17
|
||||||
|
clip: 0 20 89 20
|
||||||
|
|
||||||
|
$on:
|
||||||
|
border-image:
|
||||||
|
source: /core_styles/images/combobox.png
|
||||||
|
border: 1
|
||||||
|
border.right: 17
|
||||||
|
clip: 0 40 89 20
|
|
@ -5,6 +5,8 @@ PopupMenuButton < UIButton
|
||||||
height: 18
|
height: 18
|
||||||
margin-left: 3
|
margin-left: 3
|
||||||
margin-right: 3
|
margin-right: 3
|
||||||
|
margin-top: 0
|
||||||
|
margin-bottom: 0
|
||||||
|
|
||||||
image:
|
image:
|
||||||
source: /core_styles/images/empty_rect.png
|
source: /core_styles/images/empty_rect.png
|
||||||
|
@ -26,11 +28,12 @@ PopupMenuButton < UIButton
|
||||||
PopupMenuSeparator < UIWidget
|
PopupMenuSeparator < UIWidget
|
||||||
margin-left: 2
|
margin-left: 2
|
||||||
margin-right: 2
|
margin-right: 2
|
||||||
image:
|
border-image:
|
||||||
source: /core_styles/images/menubox.png
|
source: /core_styles/images/menubox.png
|
||||||
repeated: true
|
border.left: 1
|
||||||
coords: 3 0 26 3
|
border.right: 1
|
||||||
height: 3
|
clip: 0 0 32 2
|
||||||
|
height: 2
|
||||||
phantom: true
|
phantom: true
|
||||||
|
|
||||||
PopupMenu < UIPopupMenu
|
PopupMenu < UIPopupMenu
|
||||||
|
|
|
@ -33,6 +33,8 @@ function UIComboBox:onMousePress(mousePos, mouseButton)
|
||||||
end
|
end
|
||||||
menu:setWidth(self:getWidth())
|
menu:setWidth(self:getWidth())
|
||||||
menu:display({ x = self:getX(), y = self:getY() + self:getHeight() })
|
menu:display({ x = self:getX(), y = self:getY() + self:getHeight() })
|
||||||
|
connect(menu, { onDestroy = function() self:setOn(false) end })
|
||||||
|
self:setOn(true)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,6 @@ function UIPopupMenu.create()
|
||||||
return menu
|
return menu
|
||||||
end
|
end
|
||||||
|
|
||||||
function UIPopupMenu:destroy()
|
|
||||||
table.removevalue(displayedMenuList, self)
|
|
||||||
UIWidget.destroy(self)
|
|
||||||
end
|
|
||||||
|
|
||||||
function UIPopupMenu:display(pos)
|
function UIPopupMenu:display(pos)
|
||||||
-- don't display if not options was added
|
-- don't display if not options was added
|
||||||
if self:getChildCount() == 0 then
|
if self:getChildCount() == 0 then
|
||||||
|
@ -45,6 +40,10 @@ function UIPopupMenu:addSeparator()
|
||||||
createWidget(self:getStyleName() .. 'Separator', self)
|
createWidget(self:getStyleName() .. 'Separator', self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function UIPopupMenu:onDestroy()
|
||||||
|
table.removevalue(displayedMenuList, self)
|
||||||
|
end
|
||||||
|
|
||||||
function UIPopupMenu:onMousePress(mousePos, mouseButton)
|
function UIPopupMenu:onMousePress(mousePos, mouseButton)
|
||||||
-- clicks outside self area destroys the self
|
-- clicks outside self area destroys the self
|
||||||
if not self:containsPoint(mousePos) then
|
if not self:containsPoint(mousePos) then
|
||||||
|
|
|
@ -268,8 +268,9 @@ namespace Fw
|
||||||
OnState = 64,
|
OnState = 64,
|
||||||
FirstState = 128,
|
FirstState = 128,
|
||||||
MiddleState = 256,
|
MiddleState = 256,
|
||||||
AlternateState = 512,
|
LastState = 512,
|
||||||
LastState = 1024,
|
AlternateState = 1024,
|
||||||
|
LastWidgetState = 2048,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum AppicationFlags {
|
enum AppicationFlags {
|
||||||
|
|
|
@ -71,7 +71,7 @@ BorderImagePtr BorderImage::loadFromOTML(const OTMLNodePtr& borderImageNode)
|
||||||
Rect bottomLeftCorner;
|
Rect bottomLeftCorner;
|
||||||
Rect bottomRightCorner;
|
Rect bottomRightCorner;
|
||||||
Rect center;
|
Rect center;
|
||||||
Rect subRect;
|
Rect clipRect;
|
||||||
int top, bottom, left, right, border;
|
int top, bottom, left, right, border;
|
||||||
Size size;
|
Size size;
|
||||||
Point offset;
|
Point offset;
|
||||||
|
@ -81,11 +81,8 @@ BorderImagePtr BorderImage::loadFromOTML(const OTMLNodePtr& borderImageNode)
|
||||||
TexturePtr texture = g_textures.getTexture(source);
|
TexturePtr texture = g_textures.getTexture(source);
|
||||||
|
|
||||||
// load basic border confs
|
// load basic border confs
|
||||||
size = texture->getSize();
|
|
||||||
size = borderImageNode->valueAt("size", size);
|
|
||||||
offset = borderImageNode->valueAt("offset", offset);
|
|
||||||
border = borderImageNode->valueAt("border", 0);
|
border = borderImageNode->valueAt("border", 0);
|
||||||
subRect = Rect(offset, size);
|
clipRect = borderImageNode->valueAt("clip", Rect(0, 0, texture->getSize()));
|
||||||
|
|
||||||
// load border margins
|
// load border margins
|
||||||
top = bottom = left = right = border;
|
top = bottom = left = right = border;
|
||||||
|
@ -95,15 +92,15 @@ BorderImagePtr BorderImage::loadFromOTML(const OTMLNodePtr& borderImageNode)
|
||||||
right = borderImageNode->valueAt("border.right", right);
|
right = borderImageNode->valueAt("border.right", right);
|
||||||
|
|
||||||
// calculates border coords
|
// calculates border coords
|
||||||
leftBorder = Rect(subRect.left(), subRect.top() + top, left, subRect.height() - top - bottom);
|
leftBorder = Rect(clipRect.left(), clipRect.top() + top, left, clipRect.height() - top - bottom);
|
||||||
rightBorder = Rect(subRect.right() - right + 1, subRect.top() + top, right, subRect.height() - top - bottom);
|
rightBorder = Rect(clipRect.right() - right + 1, clipRect.top() + top, right, clipRect.height() - top - bottom);
|
||||||
topBorder = Rect(subRect.left() + left, subRect.top(), subRect.width() - right - left, top);
|
topBorder = Rect(clipRect.left() + left, clipRect.top(), clipRect.width() - right - left, top);
|
||||||
bottomBorder = Rect(subRect.left() + left, subRect.bottom() - bottom + 1, subRect.width() - right - left, bottom);
|
bottomBorder = Rect(clipRect.left() + left, clipRect.bottom() - bottom + 1, clipRect.width() - right - left, bottom);
|
||||||
topLeftCorner = Rect(subRect.left(), subRect.top(), left, top);
|
topLeftCorner = Rect(clipRect.left(), clipRect.top(), left, top);
|
||||||
topRightCorner = Rect(subRect.right() - right + 1, subRect.top(), right, top);
|
topRightCorner = Rect(clipRect.right() - right + 1, clipRect.top(), right, top);
|
||||||
bottomLeftCorner = Rect(subRect.left(), subRect.bottom() - bottom + 1, left, bottom);
|
bottomLeftCorner = Rect(clipRect.left(), clipRect.bottom() - bottom + 1, left, bottom);
|
||||||
bottomRightCorner = Rect(subRect.right() - right + 1, subRect.bottom() - bottom + 1, right, bottom);
|
bottomRightCorner = Rect(clipRect.right() - right + 1, clipRect.bottom() - bottom + 1, right, bottom);
|
||||||
center = Rect(subRect.left() + left, subRect.top() + top, subRect.width() - right - left, subRect.height() - top - bottom);
|
center = Rect(clipRect.left() + left, clipRect.top() + top, clipRect.width() - right - left, clipRect.height() - top - bottom);
|
||||||
|
|
||||||
// load individual border conf if supplied
|
// load individual border conf if supplied
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -43,7 +43,7 @@ void Image::loadFromOTML(const OTMLNodePtr& imageNode)
|
||||||
|
|
||||||
// load texture
|
// load texture
|
||||||
m_texture = g_textures.getTexture(source);
|
m_texture = g_textures.getTexture(source);
|
||||||
m_textureCoords = imageNode->valueAt("coords", Rect(Point(0,0),m_texture->getSize()));
|
m_textureCoords = imageNode->valueAt("clip", Rect(0, 0, m_texture->getSize()));
|
||||||
|
|
||||||
// enable texture bilinear filter
|
// enable texture bilinear filter
|
||||||
if(smooth)
|
if(smooth)
|
||||||
|
|
|
@ -39,6 +39,8 @@ void Application::registerLuaFunctions()
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("destroy", &UIWidget::destroy);
|
g_lua.bindClassMemberFunction<UIWidget>("destroy", &UIWidget::destroy);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setVisible", &UIWidget::setVisible);
|
g_lua.bindClassMemberFunction<UIWidget>("setVisible", &UIWidget::setVisible);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setEnabled", &UIWidget::setEnabled);
|
g_lua.bindClassMemberFunction<UIWidget>("setEnabled", &UIWidget::setEnabled);
|
||||||
|
g_lua.bindClassMemberFunction<UIWidget>("setChecked", &UICheckBox::setChecked);
|
||||||
|
g_lua.bindClassMemberFunction<UIWidget>("setOn", &UICheckBox::setOn);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setPressed", &UIWidget::setPressed);
|
g_lua.bindClassMemberFunction<UIWidget>("setPressed", &UIWidget::setPressed);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setId", &UIWidget::setId);
|
g_lua.bindClassMemberFunction<UIWidget>("setId", &UIWidget::setId);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setFocusable", &UIWidget::setFocusable);
|
g_lua.bindClassMemberFunction<UIWidget>("setFocusable", &UIWidget::setFocusable);
|
||||||
|
@ -52,7 +54,6 @@ void Application::registerLuaFunctions()
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setY", &UIWidget::setY);
|
g_lua.bindClassMemberFunction<UIWidget>("setY", &UIWidget::setY);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setWidth", &UIWidget::setWidth);
|
g_lua.bindClassMemberFunction<UIWidget>("setWidth", &UIWidget::setWidth);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setHeight", &UIWidget::setHeight);
|
g_lua.bindClassMemberFunction<UIWidget>("setHeight", &UIWidget::setHeight);
|
||||||
//g_lua.bindClassMemberFunction<UIWidget>("setImage", &UIWidget::setImage);
|
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setIcon", &UIWidget::setIcon);
|
g_lua.bindClassMemberFunction<UIWidget>("setIcon", &UIWidget::setIcon);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setOpacity", &UIWidget::setOpacity);
|
g_lua.bindClassMemberFunction<UIWidget>("setOpacity", &UIWidget::setOpacity);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setBackgroundColor", &UIWidget::setBackgroundColor);
|
g_lua.bindClassMemberFunction<UIWidget>("setBackgroundColor", &UIWidget::setBackgroundColor);
|
||||||
|
@ -94,6 +95,8 @@ void Application::registerLuaFunctions()
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("isLast", &UIWidget::isLast);
|
g_lua.bindClassMemberFunction<UIWidget>("isLast", &UIWidget::isLast);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("isAlternate", &UIWidget::isAlternate);
|
g_lua.bindClassMemberFunction<UIWidget>("isAlternate", &UIWidget::isAlternate);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("isVisible", &UIWidget::isVisible);
|
g_lua.bindClassMemberFunction<UIWidget>("isVisible", &UIWidget::isVisible);
|
||||||
|
g_lua.bindClassMemberFunction<UIWidget>("isOn", &UICheckBox::isOn);
|
||||||
|
g_lua.bindClassMemberFunction<UIWidget>("isChecked", &UICheckBox::isChecked);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("isHidden", &UIWidget::isHidden);
|
g_lua.bindClassMemberFunction<UIWidget>("isHidden", &UIWidget::isHidden);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("isExplicitlyEnabled", &UIWidget::isExplicitlyEnabled);
|
g_lua.bindClassMemberFunction<UIWidget>("isExplicitlyEnabled", &UIWidget::isExplicitlyEnabled);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("isExplicitlyVisible", &UIWidget::isExplicitlyVisible);
|
g_lua.bindClassMemberFunction<UIWidget>("isExplicitlyVisible", &UIWidget::isExplicitlyVisible);
|
||||||
|
@ -206,8 +209,6 @@ void Application::registerLuaFunctions()
|
||||||
// UICheckBox
|
// UICheckBox
|
||||||
g_lua.registerClass<UICheckBox, UIWidget>();
|
g_lua.registerClass<UICheckBox, UIWidget>();
|
||||||
g_lua.bindClassStaticFunction<UICheckBox>("create", &UIWidget::create<UICheckBox>);
|
g_lua.bindClassStaticFunction<UICheckBox>("create", &UIWidget::create<UICheckBox>);
|
||||||
g_lua.bindClassMemberFunction<UICheckBox>("isChecked", &UICheckBox::isChecked);
|
|
||||||
g_lua.bindClassMemberFunction<UICheckBox>("setChecked", &UICheckBox::setChecked);
|
|
||||||
|
|
||||||
// UIWindow
|
// UIWindow
|
||||||
g_lua.registerClass<UIWindow, UIWidget>();
|
g_lua.registerClass<UIWindow, UIWidget>();
|
||||||
|
|
|
@ -77,14 +77,3 @@ void UICheckBox::onStyleApply(const std::string& styleName, const OTMLNodePtr& s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UICheckBox::isChecked()
|
|
||||||
{
|
|
||||||
return hasState(Fw::CheckedState);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UICheckBox::setChecked(bool checked)
|
|
||||||
{
|
|
||||||
if(setState(Fw::CheckedState, checked))
|
|
||||||
callLuaField("onCheckChange", checked);
|
|
||||||
}
|
|
||||||
|
|
|
@ -31,9 +31,6 @@ public:
|
||||||
UICheckBox();
|
UICheckBox();
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
bool isChecked();
|
|
||||||
void setChecked(bool checked);
|
|
||||||
|
|
||||||
void setText(const std::string& text) { m_text = text; }
|
void setText(const std::string& text) { m_text = text; }
|
||||||
std::string getText() { return m_text; }
|
std::string getText() { return m_text; }
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,8 @@ void UIWidget::destroy()
|
||||||
if(parent->hasChild(asUIWidget()))
|
if(parent->hasChild(asUIWidget()))
|
||||||
parent->removeChild(asUIWidget());
|
parent->removeChild(asUIWidget());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callLuaField("onDestroy");
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIWidget::render()
|
void UIWidget::render()
|
||||||
|
@ -200,6 +202,17 @@ void UIWidget::setPressed(bool pressed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UIWidget::setOn(bool on)
|
||||||
|
{
|
||||||
|
setState(Fw::OnState, on);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIWidget::setChecked(bool checked)
|
||||||
|
{
|
||||||
|
if(setState(Fw::CheckedState, checked))
|
||||||
|
callLuaField("onCheckChange", checked);
|
||||||
|
}
|
||||||
|
|
||||||
void UIWidget::setFocusable(bool focusable)
|
void UIWidget::setFocusable(bool focusable)
|
||||||
{
|
{
|
||||||
if(m_focusable != focusable) {
|
if(m_focusable != focusable) {
|
||||||
|
@ -278,9 +291,9 @@ void UIWidget::setRect(const Rect& rect)
|
||||||
self->m_updateEventScheduled = false;
|
self->m_updateEventScheduled = false;
|
||||||
self->onGeometryChange(oldRect, self->getRect());
|
self->onGeometryChange(oldRect, self->getRect());
|
||||||
});
|
});
|
||||||
}
|
|
||||||
m_updateEventScheduled = true;
|
m_updateEventScheduled = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void UIWidget::setIcon(const std::string& iconFile)
|
void UIWidget::setIcon(const std::string& iconFile)
|
||||||
{
|
{
|
||||||
|
@ -769,8 +782,10 @@ void UIWidget::updateLayout()
|
||||||
void UIWidget::applyStyle(const OTMLNodePtr& styleNode)
|
void UIWidget::applyStyle(const OTMLNodePtr& styleNode)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
m_loadingStyle = true;
|
||||||
onStyleApply(styleNode->tag(), styleNode);
|
onStyleApply(styleNode->tag(), styleNode);
|
||||||
callLuaField("onStyleApply", styleNode->tag(), styleNode);
|
callLuaField("onStyleApply", styleNode->tag(), styleNode);
|
||||||
|
m_loadingStyle = false;
|
||||||
} catch(Exception& e) {
|
} catch(Exception& e) {
|
||||||
logError("Failed to apply style to widget '", m_id, "' style: ", e.what());
|
logError("Failed to apply style to widget '", m_id, "' style: ", e.what());
|
||||||
}
|
}
|
||||||
|
@ -896,7 +911,7 @@ void UIWidget::updateState(Fw::WidgetState state)
|
||||||
|
|
||||||
void UIWidget::updateStates()
|
void UIWidget::updateStates()
|
||||||
{
|
{
|
||||||
for(int state = 1; state != Fw::LastState; state <<= 1)
|
for(int state = 1; state != Fw::LastWidgetState; state <<= 1)
|
||||||
updateState((Fw::WidgetState)state);
|
updateState((Fw::WidgetState)state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -912,6 +927,16 @@ void UIWidget::updateChildrenIndexStates()
|
||||||
|
|
||||||
void UIWidget::updateStyle()
|
void UIWidget::updateStyle()
|
||||||
{
|
{
|
||||||
|
if(m_loadingStyle && !m_updateStyleScheduled) {
|
||||||
|
UIWidgetPtr self = asUIWidget();
|
||||||
|
g_dispatcher.addEvent([self] {
|
||||||
|
self->m_updateStyleScheduled = false;
|
||||||
|
self->updateStyle();
|
||||||
|
});
|
||||||
|
m_updateStyleScheduled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(!m_style)
|
if(!m_style)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -995,6 +1020,10 @@ void UIWidget::onStyleApply(const std::string& styleName, const OTMLNodePtr& sty
|
||||||
setEnabled(node->value<bool>());
|
setEnabled(node->value<bool>());
|
||||||
else if(node->tag() == "visible")
|
else if(node->tag() == "visible")
|
||||||
setVisible(node->value<bool>());
|
setVisible(node->value<bool>());
|
||||||
|
else if(node->tag() == "checked")
|
||||||
|
setChecked(node->value<bool>());
|
||||||
|
else if(node->tag() == "on")
|
||||||
|
setOn(node->value<bool>());
|
||||||
else if(node->tag() == "focusable")
|
else if(node->tag() == "focusable")
|
||||||
setFocusable(node->value<bool>());
|
setFocusable(node->value<bool>());
|
||||||
else if(node->tag() == "phantom")
|
else if(node->tag() == "phantom")
|
||||||
|
|
|
@ -57,6 +57,8 @@ public:
|
||||||
void setVisible(bool visible);
|
void setVisible(bool visible);
|
||||||
void setEnabled(bool enabled);
|
void setEnabled(bool enabled);
|
||||||
void setPressed(bool pressed);
|
void setPressed(bool pressed);
|
||||||
|
void setOn(bool on);
|
||||||
|
void setChecked(bool checked);
|
||||||
void setId(const std::string& id) { m_id = id; }
|
void setId(const std::string& id) { m_id = id; }
|
||||||
void setFocusable(bool focusable);
|
void setFocusable(bool focusable);
|
||||||
void setPhantom(bool phantom) { m_phantom = phantom; }
|
void setPhantom(bool phantom) { m_phantom = phantom; }
|
||||||
|
@ -112,6 +114,8 @@ public:
|
||||||
bool isMiddle() { return hasState(Fw::MiddleState); }
|
bool isMiddle() { return hasState(Fw::MiddleState); }
|
||||||
bool isLast() { return hasState(Fw::LastState); }
|
bool isLast() { return hasState(Fw::LastState); }
|
||||||
bool isAlternate() { return hasState(Fw::AlternateState); }
|
bool isAlternate() { return hasState(Fw::AlternateState); }
|
||||||
|
bool isChecked() { return hasState(Fw::CheckedState); }
|
||||||
|
bool isOn() { return hasState(Fw::OnState); }
|
||||||
bool isVisible();
|
bool isVisible();
|
||||||
bool isHidden() { return !isVisible(); }
|
bool isHidden() { return !isVisible(); }
|
||||||
bool isExplicitlyEnabled() { return m_enabled; }
|
bool isExplicitlyEnabled() { return m_enabled; }
|
||||||
|
@ -226,6 +230,8 @@ protected:
|
||||||
Boolean<false> m_pressed;
|
Boolean<false> m_pressed;
|
||||||
Boolean<false> m_phantom;
|
Boolean<false> m_phantom;
|
||||||
Boolean<false> m_updateEventScheduled;
|
Boolean<false> m_updateEventScheduled;
|
||||||
|
Boolean<false> m_loadingStyle;
|
||||||
|
Boolean<false> m_updateStyleScheduled;
|
||||||
Boolean<true> m_firstOnStyle;
|
Boolean<true> m_firstOnStyle;
|
||||||
Rect m_rect;
|
Rect m_rect;
|
||||||
UILayoutPtr m_layout;
|
UILayoutPtr m_layout;
|
||||||
|
|
Loading…
Reference in New Issue