add style for colorbox in outfit window

This commit is contained in:
Eduardo Bart 2011-11-16 15:03:11 -02:00
parent c999a49dc7
commit ba62863ff7
11 changed files with 116 additions and 56 deletions

View File

@ -17,7 +17,7 @@ Checkout our website at {http://otclient.info}[http://otclient.info/] for tutori
== Need help? == Need help?
If you have any questions or are looking for more information, please feel free to ask on our official If you have any questions or are looking for more information, please feel free to ask on our official
forum at http://otclient.info/ forum at http://otclient.info
== Bugs == Bugs

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

View File

@ -30,4 +30,19 @@ CheckBox < UICheckBox
$disabled: $disabled:
background-color: #ffffff88 background-color: #ffffff88
color: #aaaaaa88 color: #aaaaaa88
ColorBox < UICheckBox
size: 16 16
box-size: 16 16
background-color: #ffffffff
$checked:
image:
source: /core_styles/images/colorbox.png
coords: 16 0 16 16
$!checked:
image:
source: /core_styles/images/colorbox.png
coords: 0 0 16 16

View File

@ -9,10 +9,10 @@ local currentOutfit = 1
local function update() local function update()
local creatureWidget = window:getChildById('creature') local creatureWidget = window:getChildById('creature')
creatureWidget:setOutfitType(outfits[currentOutfit][1]) creatureWidget:setOutfitType(outfits[currentOutfit][1])
local nameWidget = window:getChildById('name') local nameWidget = window:getChildById('name')
nameWidget:setText(outfits[currentOutfit][2]) nameWidget:setText(outfits[currentOutfit][2])
local availableAddons = outfits[currentOutfit][3] local availableAddons = outfits[currentOutfit][3]
local addon1 = window:getChildById('addon1') local addon1 = window:getChildById('addon1')
local addon2 = window:getChildById('addon2') local addon2 = window:getChildById('addon2')
@ -20,7 +20,7 @@ local function update()
addon1:setChecked(false) addon1:setChecked(false)
addon2:setChecked(false) addon2:setChecked(false)
addon3:setChecked(false) addon3:setChecked(false)
-- Maybe rework this someday -- Maybe rework this someday
if availableAddons == 1 then if availableAddons == 1 then
addon1:setChecked(true) addon1:setChecked(true)
@ -42,7 +42,7 @@ local function update()
addon2:setChecked(true) addon2:setChecked(true)
addon3:setChecked(true) addon3:setChecked(true)
end end
end end
-- public functions -- public functions
@ -61,28 +61,28 @@ function Outfit.create(creature, outfitList)
Outfit.destroy() Outfit.destroy()
window = loadUI("/outfit/outfit.otui", UI.root) window = loadUI("/outfit/outfit.otui", UI.root)
window:lock() window:lock()
local creatureWidget = window:getChildById('creature') local creatureWidget = window:getChildById('creature')
creatureWidget:setCreature(creature) creatureWidget:setCreature(creature)
local firstColor = UIWidget.create() local firstColor = UIWidget.create()
window:addChild(firstColor) window:addChild(firstColor)
firstColor:setStyle('ColorFirst') firstColor:setStyle('ColorFirst')
for i=0,18 do for i=0,18 do
for j=0,6 do for j=0,6 do
local color = UICheckBox.create() local color = UICheckBox.create()
window:addChild(color) window:addChild(color)
local outfitColor = getOufitColor(j*19 + i) local outfitColor = getOufitColor(j*19 + i)
color:setStyle('Color') color:setStyle('Color')
color:setBackgroundColor(outfitColor) color:setBackgroundColor(outfitColor)
color:setMarginTop(j * 3 + j * 12) color:setMarginTop(j * 3 + j * 14)
color:setMarginLeft(i * 3 + i * 12) color:setMarginLeft(i * 3 + i * 14)
end end
end end
outfits = outfitList outfits = outfitList
currentOutfit = 1 currentOutfit = 1
update() update()
@ -96,14 +96,14 @@ function Outfit.destroy()
end end
function Outfit.nextType() function Outfit.nextType()
currentOutfit = currentOutfit + 1 currentOutfit = currentOutfit + 1
if currentOutfit > #outfits then if currentOutfit > #outfits then
currentOutfit = 1 currentOutfit = 1
end end
update() update()
end end
function Outfit.previousType() function Outfit.previousType()
@ -111,9 +111,9 @@ function Outfit.previousType()
if currentOutfit <= 0 then if currentOutfit <= 0 then
currentOutfit = #outfits currentOutfit = #outfits
end end
update() update()
end end
-- hooked events -- hooked events

View File

@ -1,31 +1,23 @@
ColorCheckBox < UICheckBox
size: 12 12
box-size: 12 12
background-color: #ffffffff
image:
source: /core_styles/images/empty_rect.png
ColorFirst < UIWidget ColorFirst < UIWidget
id: color id: color
margin.left: 20 margin.left: 20
anchors.top: creature.top anchors.top: creature.top
anchors.left: creature.right anchors.left: creature.right
Color < ColorCheckBox Color < ColorBox
anchors.top: color.top anchors.top: color.top
anchors.left: color.right anchors.left: color.right
Window Window
title: Select Outfit title: Select Outfit
size: 420 280 size: 450 280
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
onEnter: Outfit.accept() onEnter: Outfit.accept()
onEscape: Outfit.destroy() onEscape: Outfit.destroy()
Label Label
id: name id: name
text: Outfit Name text: Outfit Name
@ -34,7 +26,7 @@ Window
anchors.left: parent.left anchors.left: parent.left
margin.top: 34 margin.top: 34
margin.left: 20 margin.left: 20
Creature Creature
id: creature id: creature
anchors.top: name.bottom anchors.top: name.bottom
@ -48,7 +40,7 @@ Window
margin.top: 3 margin.top: 3
anchors.top: creature.bottom anchors.top: creature.bottom
anchors.right: creature.right anchors.right: creature.right
Button Button
@onClick: Outfit.previousType() @onClick: Outfit.previousType()
text: << text: <<
@ -56,7 +48,7 @@ Window
margin.top: 3 margin.top: 3
anchors.top: creature.bottom anchors.top: creature.bottom
anchors.left: creature.left anchors.left: creature.left
CheckBox CheckBox
id: addon1 id: addon1
text: Addon 1 text: Addon 1
@ -65,7 +57,7 @@ Window
width: 100 width: 100
anchors.top: prev.bottom anchors.top: prev.bottom
anchors.left: prev.left anchors.left: prev.left
CheckBox CheckBox
id: addon2 id: addon2
text: Addon 2 text: Addon 2
@ -74,7 +66,7 @@ Window
width: 100 width: 100
anchors.top: prev.bottom anchors.top: prev.bottom
anchors.left: prev.left anchors.left: prev.left
CheckBox CheckBox
id: addon3 id: addon3
text: Addon 3 text: Addon 3
@ -83,7 +75,7 @@ Window
width: 100 width: 100
anchors.top: prev.bottom anchors.top: prev.bottom
anchors.left: prev.left anchors.left: prev.left
HorizontalSeparator HorizontalSeparator
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right

View File

@ -163,13 +163,14 @@ bool luavalue_cast(int index, Rect& rect)
rect.setWidth(g_lua.popInteger()); rect.setWidth(g_lua.popInteger());
g_lua.getField("height", index); g_lua.getField("height", index);
rect.setHeight(g_lua.popInteger()); rect.setHeight(g_lua.popInteger());
return true;
} else if(g_lua.isString()) { } else if(g_lua.isString()) {
return Fw::cast(g_lua.toString(index), rect); return Fw::cast(g_lua.toString(index), rect);
} else if(g_lua.isNil()) { } else if(g_lua.isNil()) {
rect = Rect(); rect = Rect();
return true; return true;
} }
return true; return false;
} }
// point // point
@ -196,7 +197,7 @@ bool luavalue_cast(int index, Point& point)
point = Point(); point = Point();
return true; return true;
} }
return true; return false;
} }
// size // size
@ -223,7 +224,7 @@ bool luavalue_cast(int index, Size& size)
size = Size(); size = Size();
return true; return true;
} }
return true; return false;
} }
// otml nodes // otml nodes
@ -270,9 +271,9 @@ bool luavalue_cast(int index, OTMLNodePtr& node)
node->writeAt(cnodeName, g_lua.toString()); node->writeAt(cnodeName, g_lua.toString());
g_lua.pop(); g_lua.pop();
} }
} else return true;
return false; }
return true; return false;
} }
// object ptr // object ptr

View File

@ -48,7 +48,7 @@ void UICheckBox::render()
void UICheckBox::onMouseRelease(const Point& mousePos, Fw::MouseButton button) void UICheckBox::onMouseRelease(const Point& mousePos, Fw::MouseButton button)
{ {
if(isPressed() && getRect().contains(mousePos)) if(isPressed() && getRect().contains(mousePos))
setState(Fw::CheckedState, !isChecked()); setChecked(!isChecked());
} }
void UICheckBox::onStyleApply(const OTMLNodePtr& styleNode) void UICheckBox::onStyleApply(const OTMLNodePtr& styleNode)
@ -68,3 +68,14 @@ void UICheckBox::onStyleApply(const OTMLNodePtr& styleNode)
} }
} }
} }
bool UICheckBox::isChecked()
{
return hasState(Fw::CheckedState);
}
void UICheckBox::setChecked(bool checked)
{
if(setState(Fw::CheckedState, checked))
callLuaField("onCheckChange", checked);
}

View File

@ -30,8 +30,8 @@ class UICheckBox : public UIWidget
public: public:
void render(); void render();
bool isChecked() { return hasState(Fw::CheckedState); } bool isChecked();
void setChecked(bool checked) { setState(Fw::CheckedState, checked); } 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; }

View File

@ -615,10 +615,10 @@ void UIWidget::updateLayout()
m_layout->update(); m_layout->update();
} }
void UIWidget::setState(Fw::WidgetState state, bool on) bool UIWidget::setState(Fw::WidgetState state, bool on)
{ {
if(state == Fw::InvalidState) if(state == Fw::InvalidState)
return; return false;
int oldStates = m_states; int oldStates = m_states;
if(on) if(on)
@ -626,8 +626,11 @@ void UIWidget::setState(Fw::WidgetState state, bool on)
else else
m_states &= ~state; m_states &= ~state;
if(oldStates != m_states) if(oldStates != m_states) {
updateStyle(); updateStyle();
return true;
}
return false;
} }
bool UIWidget::hasState(Fw::WidgetState state) bool UIWidget::hasState(Fw::WidgetState state)
@ -700,9 +703,7 @@ void UIWidget::updateState(Fw::WidgetState state)
child->updateState(state); child->updateState(state);
} }
if(newStatus != oldStatus) { if(setState(state, newStatus)) {
setState(state, newStatus);
if(state == Fw::FocusState) { if(state == Fw::FocusState) {
g_dispatcher.addEvent(std::bind(&UIWidget::onFocusChange, asUIWidget(), newStatus, m_lastFocusReason)); g_dispatcher.addEvent(std::bind(&UIWidget::onFocusChange, asUIWidget(), newStatus, m_lastFocusReason));
} else if(state == Fw::HoverState) } else if(state == Fw::HoverState)

View File

@ -149,7 +149,7 @@ public:
void updateStates(); void updateStates();
virtual void updateState(Fw::WidgetState state); virtual void updateState(Fw::WidgetState state);
void setState(Fw::WidgetState state, bool on); bool setState(Fw::WidgetState state, bool on);
bool hasState(Fw::WidgetState state); bool hasState(Fw::WidgetState state);
void updateStyle(); void updateStyle();

View File

@ -39,6 +39,9 @@
#include <otclient/ui/uimap.h> #include <otclient/ui/uimap.h>
#include <otclient/core/outfit.h> #include <otclient/core/outfit.h>
void push_luavalue(const Outfit& outfit);
bool luavalue_cast(int index, Outfit& outfit);
void OTClient::registerLuaFunctions() void OTClient::registerLuaFunctions()
{ {
g_lua.bindGlobalFunction("exit", std::bind(&OTClient::exit, &g_client)); g_lua.bindGlobalFunction("exit", std::bind(&OTClient::exit, &g_client));
@ -90,3 +93,40 @@ void OTClient::registerLuaFunctions()
g_lua.bindClassStaticFunction<Game>("talkPrivate", std::bind(&Game::talkPrivate, &g_game, _1, _2, _3)); g_lua.bindClassStaticFunction<Game>("talkPrivate", std::bind(&Game::talkPrivate, &g_game, _1, _2, _3));
#endif #endif
} }
void push_luavalue(const Outfit& outfit)
{
g_lua.newTable();
g_lua.pushInteger(outfit.getType());
g_lua.setField("type");
g_lua.pushInteger(outfit.getAddons());
g_lua.setField("addons");
g_lua.pushInteger(outfit.getHead());
g_lua.setField("head");
g_lua.pushInteger(outfit.getBody());
g_lua.setField("body");
g_lua.pushInteger(outfit.getLegs());
g_lua.setField("legs");
g_lua.pushInteger(outfit.getFeet());
g_lua.setField("feet");
}
bool luavalue_cast(int index, Outfit& outfit)
{
if(g_lua.isTable(index)) {
g_lua.getField("type", index);
outfit.setType(g_lua.popInteger());
g_lua.getField("addons", index);
outfit.setAddons(g_lua.popInteger());
g_lua.getField("head", index);
outfit.setHead(g_lua.popInteger());
g_lua.getField("body", index);
outfit.setBody(g_lua.popInteger());
g_lua.getField("legs", index);
outfit.setLegs(g_lua.popInteger());
g_lua.getField("feet", index);
outfit.setFeet(g_lua.popInteger());
return true;
}
return false;
}