1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-16 10:19:47 +02:00
vcmi/client/windows/CHeroBackpackWindow.cpp

93 lines
3.1 KiB
C++
Raw Normal View History

2023-07-06 21:14:12 +02:00
/*
* CHeroBackpackWindow.cpp, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "CHeroBackpackWindow.h"
#include "../gui/CGuiHandler.h"
2023-07-17 18:42:55 +02:00
#include "../gui/Shortcut.h"
#include "../widgets/Buttons.h"
#include "../widgets/Images.h"
2024-01-18 13:42:52 +02:00
#include "../widgets/TextControls.h"
#include "CMessage.h"
#include "render/Canvas.h"
2023-08-21 17:08:15 +02:00
#include "CPlayerInterface.h"
2023-07-06 21:14:12 +02:00
2023-12-17 16:30:19 +02:00
CHeroBackpackWindow::CHeroBackpackWindow(const CGHeroInstance * hero)
2024-01-19 15:12:35 +02:00
: CStatusbarWindow(0)
2023-07-06 21:14:12 +02:00
{
2023-11-07 14:17:34 +02:00
OBJECT_CONSTRUCTION_CAPTURING(255 - DISPOSE);
stretchedBackground = std::make_shared<CFilledTexture>(ImagePath::builtin("DIBOXBCK"), Rect(0, 0, 0, 0));
2023-12-17 16:30:19 +02:00
arts = std::make_shared<CArtifactsOfHeroBackpack>();
arts->moveBy(Point(windowMargin, windowMargin));
2023-09-18 21:58:08 +02:00
addSetAndCallbacks(arts);
2023-11-07 14:17:34 +02:00
arts->setHero(hero);
2023-07-16 20:16:12 +02:00
addCloseCallback(std::bind(&CHeroBackpackWindow::close, this));
2024-01-18 13:42:52 +02:00
quitButton = std::make_shared<CButton>(Point(), AnimationPath::builtin("IOKAY32.def"), CButton::tooltip(""),
[this]() { WindowBase::close(); }, EShortcut::GLOBAL_RETURN);
2023-11-07 14:17:34 +02:00
pos.w = stretchedBackground->pos.w = arts->pos.w + 2 * windowMargin;
pos.h = stretchedBackground->pos.h = arts->pos.h + quitButton->pos.h + 3 * windowMargin;
quitButton->moveTo(Point(pos.x + pos.w / 2 - quitButton->pos.w / 2, pos.y + arts->pos.h + 2 * windowMargin));
2024-01-18 13:42:52 +02:00
statusbar = CGStatusBar::create(0, pos.h, ImagePath::builtin("ADROLLVR.bmp"), pos.w);
pos.h += statusbar->pos.h;
2023-12-17 16:30:19 +02:00
center();
}
void CHeroBackpackWindow::showAll(Canvas & to)
{
CIntObject::showAll(to);
CMessage::drawBorder(PlayerColor(LOCPLINT->playerID), to, pos.w+28, pos.h+29, pos.x-14, pos.y-15);
2023-07-16 20:16:12 +02:00
}
2023-11-07 14:17:34 +02:00
CHeroQuickBackpackWindow::CHeroQuickBackpackWindow(const CGHeroInstance * hero, ArtifactPosition targetSlot)
2024-01-19 15:12:35 +02:00
: CWindowObject(0)
2023-11-07 14:17:34 +02:00
{
OBJECT_CONSTRUCTION_CAPTURING(255 - DISPOSE);
2023-12-17 16:30:19 +02:00
stretchedBackground = std::make_shared<CFilledTexture>(ImagePath::builtin("DIBOXBCK"), Rect(0, 0, 0, 0));
arts = std::make_shared<CArtifactsOfHeroQuickBackpack>(targetSlot);
arts->moveBy(Point(windowMargin, windowMargin));
addSetAndCallbacks(static_cast<std::weak_ptr<CArtifactsOfHeroQuickBackpack>>(arts));
2023-11-07 14:17:34 +02:00
arts->setHero(hero);
addCloseCallback(std::bind(&CHeroQuickBackpackWindow::close, this));
2023-12-17 16:30:19 +02:00
addUsedEvents(GESTURE);
pos.w = stretchedBackground->pos.w = arts->pos.w + 2 * windowMargin;
pos.h = stretchedBackground->pos.h = arts->pos.h + windowMargin;
}
void CHeroQuickBackpackWindow::gesture(bool on, const Point & initialPosition, const Point & finalPosition)
{
if(on)
return;
arts->swapSelected();
close();
}
2023-11-07 14:17:34 +02:00
2023-12-17 16:30:19 +02:00
void CHeroQuickBackpackWindow::gesturePanning(const Point & initialPosition, const Point & currentPosition, const Point & lastUpdateDistance)
{
arts->selectSlotAt(currentPosition);
redraw();
2023-11-07 14:17:34 +02:00
}
void CHeroQuickBackpackWindow::showAll(Canvas & to)
{
if(arts->getSlotsNum() == 0)
{
2023-12-17 16:30:19 +02:00
// Dirty solution for closing that window
2023-11-07 14:17:34 +02:00
close();
return;
}
CMessage::drawBorder(PlayerColor(LOCPLINT->playerID), to, pos.w + 28, pos.h + 29, pos.x - 14, pos.y - 15);
2023-12-17 16:30:19 +02:00
CIntObject::showAll(to);
2023-11-07 14:17:34 +02:00
}