Browse Source

add slider for new mines

Laserlicht 2 weeks ago
parent
commit
81f713a2b0
2 changed files with 21 additions and 3 deletions
  1. 19 2
      client/windows/CKingdomInterface.cpp
  2. 2 1
      client/windows/CKingdomInterface.h

+ 19 - 2
client/windows/CKingdomInterface.cpp

@@ -38,6 +38,7 @@
 #include "../../lib/StartInfo.h"
 #include "../../lib/callback/CCallback.h"
 #include "../../lib/entities/hero/CHeroHandler.h"
+#include "../../lib/entities/ResourceTypeHandler.h"
 #include "../../lib/texts/TextOperations.h"
 #include "../../lib/mapObjects/CGHeroInstance.h"
 #include "../../lib/mapObjects/CGTownInstance.h"
@@ -476,7 +477,7 @@ CKingdomInterface::CKingdomInterface()
 
 	std::vector<const CGObjectInstance * > ownedObjects = GAME->interface()->cb->getMyObjects();
 	generateObjectsList(ownedObjects);
-	generateMinesList(ownedObjects);
+	generateMinesList(ownedObjects, 0);
 	generateButtons();
 
 	statusbar = CGStatusBar::create(std::make_shared<CPicture>(ImagePath::builtin("KSTATBAR"), 10,pos.h - 45));
@@ -594,12 +595,17 @@ std::shared_ptr<CIntObject> CKingdomInterface::createMainTab(size_t index)
 	}
 }
 
-void CKingdomInterface::generateMinesList(const std::vector<const CGObjectInstance *> & ownedObjects)
+void CKingdomInterface::generateMinesList(const std::vector<const CGObjectInstance *> & ownedObjects, int line)
 {
+	OBJECT_CONSTRUCTION;
+
 	ui32 footerPos = OVERVIEW_SIZE * 116;
 	ResourceSet minesCount = ResourceSet();
 	int totalIncome=0;
 
+	for(auto & ptr : minesBox)
+    	ptr.reset();
+
 	for(const CGObjectInstance * object : ownedObjects)
 	{
 		//Mines
@@ -626,6 +632,15 @@ void CKingdomInterface::generateMinesList(const std::vector<const CGObjectInstan
 		minesBox[i] = std::make_shared<InfoBox>(Point(20+i*80, 31+footerPos), InfoBox::POS_INSIDE, InfoBox::SIZE_SMALL, data);
 		minesBox[i]->removeUsedEvents(LCLICK|SHOW_POPUP); //fixes #890 - mines boxes ignore clicks
 	}
+
+	if(LIBRARY->resourceTypeHandler->getAllObjects().size() > GameConstants::RESOURCE_QUANTITY)
+	{
+		int lines = vstd::divideAndCeil(LIBRARY->resourceTypeHandler->getAllObjects().size(), GameConstants::RESOURCE_QUANTITY);
+		minesSlider = std::make_shared<CSlider>(Point(723, 495), 57, [this, ownedObjects](int to){ generateMinesList(ownedObjects, to); setRedrawParent(true); redraw(); }, 1, lines, line, Orientation::VERTICAL, CSlider::BROWN);
+		minesSlider->setPanningStep(57);
+		minesSlider->setScrollBounds(Rect(-735, 0, 735, 57));
+	}
+
 	incomeArea = std::make_shared<CHoverableArea>();
 	incomeArea->pos = Rect(pos.x+580, pos.y+31+footerPos, 136, 68);
 	incomeArea->hoverText = LIBRARY->generaltexth->allTexts[255];
@@ -722,6 +737,7 @@ CKingdHeroList::CKingdHeroList(size_t maxSize, const CreateHeroItemFunctor & onC
 				return std::make_shared<CAnimImage>(AnimationPath::builtin("OVSLOT"), (idx - 2) % GameConstants::KINGDOM_WINDOW_HEROES_SLOTS);
 			}
 		}, Point(19,21), Point(0,116), maxSize, townCount, 0, 1, Rect(-19, -21, size, size));
+	heroes->getSlider()->setScrollBounds(Rect(0, 0, 725, 483));
 }
 
 void CKingdHeroList::updateGarrisons()
@@ -755,6 +771,7 @@ CKingdTownList::CKingdTownList(size_t maxSize)
 	ui32 size = OVERVIEW_SIZE*116 + 19;
 	towns = std::make_shared<CListBox>(std::bind(&CKingdTownList::createTownItem, this, _1),
 		Point(19,21), Point(0,116), maxSize, townCount, 0, 1, Rect(-19, -21, size, size));
+	towns->getSlider()->setScrollBounds(Rect(0, 0, 725, 483));
 }
 
 void CKingdTownList::townChanged(const CGTownInstance * town)

+ 2 - 1
client/windows/CKingdomInterface.h

@@ -232,6 +232,7 @@ private:
 	std::shared_ptr<CButton> dwellBottom;
 
 	std::array<std::shared_ptr<InfoBox>, 7> minesBox;
+	std::shared_ptr<CSlider> minesSlider;
 
 	std::shared_ptr<CHoverableArea> incomeArea;
 	std::shared_ptr<CLabel> incomeAmount;
@@ -244,7 +245,7 @@ private:
 	//Internal functions used during construction
 	void generateButtons();
 	void generateObjectsList(const std::vector<const CGObjectInstance * > &ownedObjects);
-	void generateMinesList(const std::vector<const CGObjectInstance * > &ownedObjects);
+	void generateMinesList(const std::vector<const CGObjectInstance * > &ownedObjects, int line);
 
 	std::shared_ptr<CIntObject> createOwnedObject(size_t index);
 	std::shared_ptr<CIntObject> createMainTab(size_t index);