From 4fb5f3455e1f817348c02e6f5c42e3979dd51d64 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 19 Jan 2011 18:46:30 +0200 Subject: Add job bar to ministatus window. --- src/gui/ministatus.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++++--- src/gui/ministatus.h | 1 + src/gui/statuswindow.cpp | 10 ++++++++++ src/gui/statuswindow.h | 1 + 4 files changed, 57 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/gui/ministatus.cpp b/src/gui/ministatus.cpp index 406ad7ddd..f892cdc8b 100644 --- a/src/gui/ministatus.cpp +++ b/src/gui/ministatus.cpp @@ -67,22 +67,50 @@ MiniStatusWindow::MiniStatusWindow(): mMpBar = 0; } + int job = Net::getPlayerHandler()->getJobLocation() + && serverConfig.getValueBool("showJob", false); + mXpBar = new ProgressBar(0, 100, 20, Theme::PROG_EXP); StatusWindow::updateXPBar(mXpBar); + if (job) + { + mJobBar = new ProgressBar(0, 100, 20, Theme::PROG_JOB); + StatusWindow::updateJobBar(mJobBar); + } + else + { + mJobBar = 0; + } + mStatusBar = new ProgressBar(100, 150, 20, Theme::PROG_EXP); mHpBar->setPosition(0, 3); if (mMpBar) + { mMpBar->setPosition(mHpBar->getWidth() + 3, 3); - mXpBar->setPosition(mMpBar ? mMpBar->getX() + mMpBar->getWidth() + 3 : - mHpBar->getX() + mHpBar->getWidth() + 3, 3); - mStatusBar->setPosition(mXpBar->getX() + mXpBar->getWidth() + 3, 3); + mXpBar->setPosition(mMpBar->getX() + mMpBar->getWidth() + 3, 3); + } + else + { + mXpBar->setPosition(mHpBar->getX() + mHpBar->getWidth() + 3, 3); + } + if (mJobBar) + { + mJobBar->setPosition(mXpBar->getX() + mXpBar->getWidth() + 3, 3); + mStatusBar->setPosition(mJobBar->getX() + mJobBar->getWidth() + 3, 3); + } + else + { + mStatusBar->setPosition(mXpBar->getX() + mXpBar->getWidth() + 3, 3); + } add(mHpBar); if (mMpBar) add(mMpBar); add(mXpBar); + if (mJobBar) + add(mJobBar); add(mStatusBar); setContentSize(mStatusBar->getX() + mStatusBar->getWidth(), @@ -150,6 +178,7 @@ void MiniStatusWindow::event(Channels channel _UNUSED_, else if (event.getName() == EVENT_UPDATESTAT) { StatusWindow::updateMPBar(mMpBar); + StatusWindow::updateJobBar(mJobBar); } } @@ -212,6 +241,19 @@ void MiniStatusWindow::mouseMoved(gcn::MouseEvent &event) PlayerInfo::getAttribute(MAX_MP))); mStatusPopup->hide(); } + else if (event.getSource() == mJobBar) + { + std::pair exp = PlayerInfo::getStatExperience( + Net::getPlayerHandler()->getJobLocation()); + + mTextPopup->show(x + getX(), y + getY(), + strprintf("%u/%u", exp.first, + exp.second), + strprintf("%s: %u", _("Need"), + exp.second + - exp.first)); + mStatusPopup->hide(); + } else { mTextPopup->hide(); diff --git a/src/gui/ministatus.h b/src/gui/ministatus.h index 080beece3..d30a38a9e 100644 --- a/src/gui/ministatus.h +++ b/src/gui/ministatus.h @@ -82,6 +82,7 @@ class MiniStatusWindow : public Popup, public Mana::Listener ProgressBar *mHpBar; ProgressBar *mMpBar; ProgressBar *mXpBar; + ProgressBar *mJobBar; ProgressBar *mStatusBar; TextPopup *mTextPopup; StatusPopup *mStatusPopup; diff --git a/src/gui/statuswindow.cpp b/src/gui/statuswindow.cpp index 02436c179..853ea1789 100644 --- a/src/gui/statuswindow.cpp +++ b/src/gui/statuswindow.cpp @@ -469,6 +469,16 @@ void StatusWindow::updateXPBar(ProgressBar *bar, bool percent) PlayerInfo::getAttribute(EXP_NEEDED), percent); } +void StatusWindow::updateJobBar(ProgressBar *bar, bool percent) +{ + if (!bar) + return; + + std::pair exp = PlayerInfo::getStatExperience( + Net::getPlayerHandler()->getJobLocation()); + updateProgressBar(bar, exp.first, exp.second, percent); +} + void StatusWindow::updateProgressBar(ProgressBar *bar, int id, bool percent) { std::pair exp = PlayerInfo::getStatExperience(id); diff --git a/src/gui/statuswindow.h b/src/gui/statuswindow.h index 4b324073e..859ac613b 100644 --- a/src/gui/statuswindow.h +++ b/src/gui/statuswindow.h @@ -64,6 +64,7 @@ class StatusWindow : public Window, public Mana::Listener static void updateHPBar(ProgressBar *bar, bool showMax = false); static void updateMPBar(ProgressBar *bar, bool showMax = false); + static void updateJobBar(ProgressBar *bar, bool percent = true); static void updateXPBar(ProgressBar *bar, bool percent = true); static void updateStatusBar(ProgressBar *bar, bool percent = true); static void updateProgressBar(ProgressBar *bar, int value, int max, -- cgit v1.2.3-60-g2f50