From 0749e6a9d5cfbccb821fb90a82620bd9e5b429ed Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Fri, 26 Aug 2011 15:44:18 -0300 Subject: [PATCH] improved charlist --- modules/core/messagebox/messagebox.lua | 2 +- modules/mainmenu/entergame.lua | 67 +++++++++++++++----------- modules/mainmenu/ui/charlist.otui | 27 +++++++++-- src/framework/ui/uilabel.cpp | 7 ++- src/framework/ui/uilabel.h | 3 ++ 5 files changed, 74 insertions(+), 32 deletions(-) diff --git a/modules/core/messagebox/messagebox.lua b/modules/core/messagebox/messagebox.lua index e550cf35..3f81f531 100644 --- a/modules/core/messagebox/messagebox.lua +++ b/modules/core/messagebox/messagebox.lua @@ -19,7 +19,7 @@ function MessageBox.create(title, text, flags) label:resizeToText() -- set window size based on label size - window:setWidth(label:getWidth() + 60) + window:setWidth(label:getWidth() + 48) window:setHeight(label:getHeight() + 64) window:updateParentLayout() diff --git a/modules/mainmenu/entergame.lua b/modules/mainmenu/entergame.lua index 192a68b0..797ff0d0 100644 --- a/modules/mainmenu/entergame.lua +++ b/modules/mainmenu/entergame.lua @@ -8,18 +8,49 @@ function EnterGame_characterWindow_okClicked() Game.loginWorld(account, password, selected.worldHost, selected.worldPort, selected.characterName) charactersWindow:destroy() mainMenu:hide() + else + displayErrorBox('Error', 'You must select a character to login!') end end +local function showMotd(motdNumber, motdMessage) + if motdNumber ~= Configs.get("motd") then + displayInfoBox("Message of the day", motdMessage) + Configs.set("motd", motdNumber) + end +end + +local function createCharactersWindow(characters, premDays) + local charactersWindow = UI.loadAndDisplayLocked('/mainmenu/ui/charlist.otui') + local charactersList = charactersWindow:getChildById('charactersList') + local accountStatusLabel = charactersWindow:getChildById('accountStatusLabel') + for i,characterInfo in ipairs(characters) do + local characterName = characterInfo[1] + local worldName = characterInfo[2] + local worldHost = characterInfo[3] + local worldIp = characterInfo[4] + + local label = UILabel.create() + charactersList:addChild(label) + label:setText(characterName .. ' (' .. worldName .. ')') + label:setStyle('CharactersListLabel') + label.characterName = characterName + label.worldHost = worldHost + label.worldPort = worldIp + end + if premDays > 0 then + accountStatusLabel:setText("Account Status:\nPremium Account (" .. premDays .. ' days left)') + end +end function EnterGame_connectToLoginServer() local protocolLogin = ProtocolLogin.create() local recreateEnterGame = function() - UI.loadAndDisplayLocked("/mainmenu/ui/entergamewindow.otui") + UI.loadAndDisplayLocked('/mainmenu/ui/entergamewindow.otui') end - local loadBox = displayCancelBox("Please wait", "Connecting..") + local loadBox = displayCancelBox('Please wait', 'Connecting to login server...') loadBox.onCancel = function(msgbox) -- cancel protocol and reacreate enter game window @@ -29,43 +60,25 @@ function EnterGame_connectToLoginServer() protocolLogin.onError = function(protocol, error) loadBox:destroy() - local errorBox = displayErrorBox("Login Error", error) + local errorBox = displayErrorBox('Login Error', error) errorBox.onOk = recreateEnterGame end protocolLogin.onMotd = function(protocol, motd) loadBox:destroy() local motdNumber = string.sub(motd, 0, string.find(motd, "\n")) - local motdText = string.sub(motd, string.find(motd, "\n") + 1, string.len(motd)) - if motdNumber ~= Configs.get("motd") then - displayInfoBox("Message of the day", motdText) - Configs.set("motd", motdNumber) - end + local motdMessage = string.sub(motd, string.find(motd, "\n") + 1, string.len(motd)) + showMotd(motdNumber, motdMessage) end protocolLogin.onCharacterList = function(protocol, characters, premDays) loadBox:destroy() - local charactersWindow = UI.loadAndDisplayLocked('/mainmenu/ui/charlist.otui') - local charactersList = charactersWindow:getChildById('charactersList') - for i,characterInfo in ipairs(characters) do - local characterName = characterInfo[1] - local worldName = characterInfo[2] - local worldHost = characterInfo[3] - local worldIp = characterInfo[4] - - local label = UILabel.create() - charactersList:addChild(label) - label:setText(characterName .. ' (' .. worldName .. ')') - label:setStyle('CharactersListLabel') - label.characterName = characterName - label.worldHost = worldHost - label.worldPort = worldIp - end + createCharactersWindow(characters, premDays) end - local enterGameWindow = UI.root:getChildById("enterGameWindow") - account = enterGameWindow:getChildById("accountNameLineEdit"):getText() - password = enterGameWindow:getChildById("accountPasswordLineEdit"):getText() + local enterGameWindow = UI.root:getChildById('enterGameWindow') + account = enterGameWindow:getChildById('accountNameLineEdit'):getText() + password = enterGameWindow:getChildById('accountPasswordLineEdit'):getText() protocolLogin:login(account, password) enterGameWindow:destroy() diff --git a/modules/mainmenu/ui/charlist.otui b/modules/mainmenu/ui/charlist.otui index d72a4593..fabb155d 100644 --- a/modules/mainmenu/ui/charlist.otui +++ b/modules/mainmenu/ui/charlist.otui @@ -1,7 +1,8 @@ CharactersListLabel < Label image: /core_ui/images/empty_rect.png - font: helvetica-12px-bold + font: tibia-10px-monochrome background-color: #00000000 + offset: 2 0 focusable: true margin.left: 1 margin.right: 1 @@ -14,16 +15,36 @@ CharactersListLabel < Label MainWindow id: charactersWindow title: Charlist - size: 200 250 + size: 250 250 TextList id: charactersList anchors.fill: parent + anchors.bottom: next.top margin.top: 30 - margin.bottom: 50 + margin.bottom: 5 margin.left: 16 margin.right: 16 + Label + text: |- + Account Status: + Free Account + id: accountStatusLabel + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: next.top + margin.left: 16 + margin.bottom: 5 + + HorizontalSeparator + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: next.top + margin.left: 16 + margin.right: 16 + margin.bottom: 10 + Button id: buttonOk text: Ok diff --git a/src/framework/ui/uilabel.cpp b/src/framework/ui/uilabel.cpp index f873f193..7702d70a 100644 --- a/src/framework/ui/uilabel.cpp +++ b/src/framework/ui/uilabel.cpp @@ -12,7 +12,9 @@ void UILabel::setup() void UILabel::render() { UIWidget::render(); - m_font->renderText(m_text, m_rect, m_align, m_foregroundColor); + Rect textRect = m_rect; + textRect.setTopLeft(textRect.topLeft() + m_offset); + m_font->renderText(m_text, textRect, m_align, m_foregroundColor); } void UILabel::setText(const std::string& text) @@ -43,5 +45,8 @@ void UILabel::onStyleApply(const OTMLNodePtr& styleNode) setText(node->value()); else if(node->tag() == "align") setAlign(fw::translateAlignment(node->value())); + else if(node->tag() == "offset") { + setOffset(node->value()); + } } } diff --git a/src/framework/ui/uilabel.h b/src/framework/ui/uilabel.h index ba540e7e..387fe9bc 100644 --- a/src/framework/ui/uilabel.h +++ b/src/framework/ui/uilabel.h @@ -13,15 +13,18 @@ public: void setText(const std::string& text); void setAlign(AlignmentFlag align) { m_align = align; } + void setOffset(const Point& offset) { m_offset = offset; } std::string getText() const { return m_text; } AlignmentFlag getAlign() const { return m_align; } + Point getOffset() const { return m_offset; } protected: virtual void onStyleApply(const OTMLNodePtr& styleNode); private: std::string m_text; + Point m_offset; AlignmentFlag m_align; };