add style for colorbox in outfit window
This commit is contained in:
		
							parent
							
								
									c999a49dc7
								
							
						
					
					
						commit
						ba62863ff7
					
				| 
						 | 
				
			
			@ -17,7 +17,7 @@ Checkout our website at {http://otclient.info}[http://otclient.info/] for tutori
 | 
			
		|||
== Need help?
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 250 B  | 
| 
						 | 
				
			
			@ -30,4 +30,19 @@ CheckBox < UICheckBox
 | 
			
		|||
 | 
			
		||||
  $disabled:
 | 
			
		||||
    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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,10 +9,10 @@ local currentOutfit = 1
 | 
			
		|||
local function update()
 | 
			
		||||
  local creatureWidget = window:getChildById('creature')
 | 
			
		||||
  creatureWidget:setOutfitType(outfits[currentOutfit][1])
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  local nameWidget = window:getChildById('name')
 | 
			
		||||
  nameWidget:setText(outfits[currentOutfit][2])
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  local availableAddons = outfits[currentOutfit][3]
 | 
			
		||||
  local addon1 = window:getChildById('addon1')
 | 
			
		||||
  local addon2 = window:getChildById('addon2')
 | 
			
		||||
| 
						 | 
				
			
			@ -20,7 +20,7 @@ local function update()
 | 
			
		|||
  addon1:setChecked(false)
 | 
			
		||||
  addon2:setChecked(false)
 | 
			
		||||
  addon3:setChecked(false)
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  -- Maybe rework this someday
 | 
			
		||||
  if availableAddons == 1 then
 | 
			
		||||
    addon1:setChecked(true)
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ local function update()
 | 
			
		|||
    addon2:setChecked(true)
 | 
			
		||||
    addon3:setChecked(true)
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- public functions
 | 
			
		||||
| 
						 | 
				
			
			@ -61,28 +61,28 @@ function Outfit.create(creature, outfitList)
 | 
			
		|||
  Outfit.destroy()
 | 
			
		||||
  window = loadUI("/outfit/outfit.otui", UI.root)
 | 
			
		||||
  window:lock()
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  local creatureWidget = window:getChildById('creature')
 | 
			
		||||
  creatureWidget:setCreature(creature)
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  local firstColor = UIWidget.create()
 | 
			
		||||
  window:addChild(firstColor)
 | 
			
		||||
  firstColor:setStyle('ColorFirst')
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  for i=0,18 do
 | 
			
		||||
    for j=0,6 do
 | 
			
		||||
      local color = UICheckBox.create()
 | 
			
		||||
      window:addChild(color)
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      local outfitColor = getOufitColor(j*19 + i)
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      color:setStyle('Color')
 | 
			
		||||
      color:setBackgroundColor(outfitColor)
 | 
			
		||||
      color:setMarginTop(j * 3 + j * 12)
 | 
			
		||||
      color:setMarginLeft(i * 3 + i * 12)
 | 
			
		||||
      color:setMarginTop(j * 3 + j * 14)
 | 
			
		||||
      color:setMarginLeft(i * 3 + i * 14)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  outfits = outfitList
 | 
			
		||||
  currentOutfit = 1
 | 
			
		||||
  update()
 | 
			
		||||
| 
						 | 
				
			
			@ -96,14 +96,14 @@ function Outfit.destroy()
 | 
			
		|||
end
 | 
			
		||||
 | 
			
		||||
function Outfit.nextType()
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  currentOutfit = currentOutfit + 1
 | 
			
		||||
  if currentOutfit > #outfits then
 | 
			
		||||
    currentOutfit = 1
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  update()
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function Outfit.previousType()
 | 
			
		||||
| 
						 | 
				
			
			@ -111,9 +111,9 @@ function Outfit.previousType()
 | 
			
		|||
  if currentOutfit <= 0 then
 | 
			
		||||
    currentOutfit = #outfits
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  update()
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- hooked events
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
  id: color
 | 
			
		||||
  margin.left: 20
 | 
			
		||||
  anchors.top: creature.top
 | 
			
		||||
  anchors.left: creature.right
 | 
			
		||||
  
 | 
			
		||||
Color < ColorCheckBox
 | 
			
		||||
 | 
			
		||||
Color < ColorBox
 | 
			
		||||
  anchors.top: color.top
 | 
			
		||||
  anchors.left: color.right
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
Window
 | 
			
		||||
  title: Select Outfit
 | 
			
		||||
  size: 420 280
 | 
			
		||||
  
 | 
			
		||||
  size: 450 280
 | 
			
		||||
 | 
			
		||||
  anchors.horizontalCenter: parent.horizontalCenter
 | 
			
		||||
  anchors.verticalCenter: parent.verticalCenter
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  onEnter: Outfit.accept()
 | 
			
		||||
  onEscape: Outfit.destroy()
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  Label
 | 
			
		||||
    id: name
 | 
			
		||||
    text: Outfit Name
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +26,7 @@ Window
 | 
			
		|||
    anchors.left: parent.left
 | 
			
		||||
    margin.top: 34
 | 
			
		||||
    margin.left: 20
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  Creature
 | 
			
		||||
    id: creature
 | 
			
		||||
    anchors.top: name.bottom
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +40,7 @@ Window
 | 
			
		|||
    margin.top: 3
 | 
			
		||||
    anchors.top: creature.bottom
 | 
			
		||||
    anchors.right: creature.right
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
  Button
 | 
			
		||||
    @onClick: Outfit.previousType()
 | 
			
		||||
    text: <<
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +48,7 @@ Window
 | 
			
		|||
    margin.top: 3
 | 
			
		||||
    anchors.top: creature.bottom
 | 
			
		||||
    anchors.left: creature.left
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
  CheckBox
 | 
			
		||||
    id: addon1
 | 
			
		||||
    text: Addon 1
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +57,7 @@ Window
 | 
			
		|||
    width: 100
 | 
			
		||||
    anchors.top: prev.bottom
 | 
			
		||||
    anchors.left: prev.left
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
  CheckBox
 | 
			
		||||
    id: addon2
 | 
			
		||||
    text: Addon 2
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +66,7 @@ Window
 | 
			
		|||
    width: 100
 | 
			
		||||
    anchors.top: prev.bottom
 | 
			
		||||
    anchors.left: prev.left
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
  CheckBox
 | 
			
		||||
    id: addon3
 | 
			
		||||
    text: Addon 3
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +75,7 @@ Window
 | 
			
		|||
    width: 100
 | 
			
		||||
    anchors.top: prev.bottom
 | 
			
		||||
    anchors.left: prev.left
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  HorizontalSeparator
 | 
			
		||||
    anchors.left: parent.left
 | 
			
		||||
    anchors.right: parent.right
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -163,13 +163,14 @@ bool luavalue_cast(int index, Rect& rect)
 | 
			
		|||
        rect.setWidth(g_lua.popInteger());
 | 
			
		||||
        g_lua.getField("height", index);
 | 
			
		||||
        rect.setHeight(g_lua.popInteger());
 | 
			
		||||
        return true;
 | 
			
		||||
    } else if(g_lua.isString()) {
 | 
			
		||||
        return Fw::cast(g_lua.toString(index), rect);
 | 
			
		||||
    } else if(g_lua.isNil()) {
 | 
			
		||||
        rect = Rect();
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// point
 | 
			
		||||
| 
						 | 
				
			
			@ -196,7 +197,7 @@ bool luavalue_cast(int index, Point& point)
 | 
			
		|||
        point = Point();
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// size
 | 
			
		||||
| 
						 | 
				
			
			@ -223,7 +224,7 @@ bool luavalue_cast(int index, Size& size)
 | 
			
		|||
        size = Size();
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// otml nodes
 | 
			
		||||
| 
						 | 
				
			
			@ -270,9 +271,9 @@ bool luavalue_cast(int index, OTMLNodePtr& node)
 | 
			
		|||
                node->writeAt(cnodeName, g_lua.toString());
 | 
			
		||||
            g_lua.pop();
 | 
			
		||||
        }
 | 
			
		||||
    } else
 | 
			
		||||
        return false;
 | 
			
		||||
    return true;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// object ptr
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ void UICheckBox::render()
 | 
			
		|||
void UICheckBox::onMouseRelease(const Point& mousePos, Fw::MouseButton button)
 | 
			
		||||
{
 | 
			
		||||
    if(isPressed() && getRect().contains(mousePos))
 | 
			
		||||
        setState(Fw::CheckedState, !isChecked());
 | 
			
		||||
        setChecked(!isChecked());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,8 +30,8 @@ class UICheckBox : public UIWidget
 | 
			
		|||
public:
 | 
			
		||||
    void render();
 | 
			
		||||
 | 
			
		||||
    bool isChecked() { return hasState(Fw::CheckedState); }
 | 
			
		||||
    void setChecked(bool checked) { setState(Fw::CheckedState, checked); }
 | 
			
		||||
    bool isChecked();
 | 
			
		||||
    void setChecked(bool checked);
 | 
			
		||||
 | 
			
		||||
    void setText(const std::string& text) { m_text = text; }
 | 
			
		||||
    std::string getText() { return m_text; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -615,10 +615,10 @@ void UIWidget::updateLayout()
 | 
			
		|||
        m_layout->update();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UIWidget::setState(Fw::WidgetState state, bool on)
 | 
			
		||||
bool UIWidget::setState(Fw::WidgetState state, bool on)
 | 
			
		||||
{
 | 
			
		||||
    if(state == Fw::InvalidState)
 | 
			
		||||
        return;
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    int oldStates = m_states;
 | 
			
		||||
    if(on)
 | 
			
		||||
| 
						 | 
				
			
			@ -626,8 +626,11 @@ void UIWidget::setState(Fw::WidgetState state, bool on)
 | 
			
		|||
    else
 | 
			
		||||
        m_states &= ~state;
 | 
			
		||||
 | 
			
		||||
    if(oldStates != m_states)
 | 
			
		||||
    if(oldStates != m_states) {
 | 
			
		||||
        updateStyle();
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool UIWidget::hasState(Fw::WidgetState state)
 | 
			
		||||
| 
						 | 
				
			
			@ -700,9 +703,7 @@ void UIWidget::updateState(Fw::WidgetState state)
 | 
			
		|||
            child->updateState(state);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(newStatus != oldStatus) {
 | 
			
		||||
        setState(state, newStatus);
 | 
			
		||||
 | 
			
		||||
    if(setState(state, newStatus)) {
 | 
			
		||||
        if(state == Fw::FocusState) {
 | 
			
		||||
            g_dispatcher.addEvent(std::bind(&UIWidget::onFocusChange, asUIWidget(), newStatus, m_lastFocusReason));
 | 
			
		||||
        } else if(state == Fw::HoverState)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,7 +149,7 @@ public:
 | 
			
		|||
 | 
			
		||||
    void updateStates();
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
    void updateStyle();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,6 +39,9 @@
 | 
			
		|||
#include <otclient/ui/uimap.h>
 | 
			
		||||
#include <otclient/core/outfit.h>
 | 
			
		||||
 | 
			
		||||
void push_luavalue(const Outfit& outfit);
 | 
			
		||||
bool luavalue_cast(int index, Outfit& outfit);
 | 
			
		||||
 | 
			
		||||
void OTClient::registerLuaFunctions()
 | 
			
		||||
{
 | 
			
		||||
    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));
 | 
			
		||||
#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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue