3#include "ElementSelector.hpp"
4#include "FileManager.hpp"
9template <
typename ElementPtr>
11ElementSelector<ElementPtr>::ElementSelector(
const Recti& bounds)
14 , mFirstVisibleIndx{0}
15 , mLastingSelectIndxs{}
16 , mShuffleRandomEngine()
25template <
typename ElementPtr>
27template <
typename Element>
30 std::vector<Element> elements)
32 std::vector<ElementPtr> result;
33 for (
auto& element : elements)
35 result.push_back(std::make_unique<Element>(element));
48template <
typename ElementPtr>
54 mLastingSelectIndxs.clear();
57 mFiles.push_back(std::move(file));
68template <
typename ElementPtr>
74 mLastingSelectIndxs.clear();
79 mFiles.reserve(mFiles.size() + files.size());
80 for (
auto& file : files)
82 mFiles.push_back(std::move(file));
87template <
typename ElementPtr>
89void ElementSelector<ElementPtr>::Update()
93template <
typename ElementPtr>
95void ElementSelector<ElementPtr>::HandleResize(
const Recti& bounds)
100template <
typename ElementPtr>
102void ElementSelector<ElementPtr>::SelectUp()
104 if (mSelectedIndx == 0)
108 if (mSelectedIndx < mFirstVisibleIndx)
114template <
typename ElementPtr>
116void ElementSelector<ElementPtr>::SelectDown()
118 if (mSelectedIndx + 1 >= mFiles.size())
122 if (mSelectedIndx > mFirstVisibleIndx + mBounds.height - 1)
128template <
typename ElementPtr>
130void ElementSelector<ElementPtr>::SelectByIndx(std::size_t indx)
132 assert(indx < mFiles.size());
134 mSelectedIndx = indx;
135 mFirstVisibleIndx = indx;
138template <
typename ElementPtr>
140void ElementSelector<ElementPtr>::SelectByName(
const std::string& filename)
142 for (
auto iter{begin(mFiles)}; iter != end(mFiles); ++iter)
144 if ((*iter)->name == filename)
146 SelectByIndx(std::distance(begin(mFiles), iter));
153template <
typename ElementPtr>
155void ElementSelector<ElementPtr>::ClearAllLastingSelections()
157 mLastingSelectIndxs.clear();
160template <
typename ElementPtr>
162void ElementSelector<ElementPtr>::LastingSelectOnCurrent()
164 if (mLastingSelectIndxs.contains(mSelectedIndx))
166 mLastingSelectIndxs.erase(mSelectedIndx);
170 mLastingSelectIndxs.insert(mSelectedIndx);
174template <
typename ElementPtr>
176void ElementSelector<ElementPtr>::ShuffleElements()
178 std::shuffle(mFiles.begin(), mFiles.end(), mShuffleRandomEngine);
181template <
typename ElementPtr>
188template <
typename ElementPtr>
192 mFirstVisibleIndx = state.firstVisibleElementIndx;
193 mSelectedIndx = state.selectedElementIndx;
196template <
typename ElementPtr>
198std::vector<std::size_t> ElementSelector<ElementPtr>::GetLastingSelectedElementsIndices()
201 std::vector<std::size_t> lastingSelectedIndices;
202 for (
auto& indx : mLastingSelectIndxs)
204 assert((
"Bad indx!", indx >= 0 && indx < mFiles.size()));
205 lastingSelectedIndices.push_back(indx);
207 return lastingSelectedIndices;
210template <
typename ElementPtr>
212std::vector<ElementPtr> ElementSelector<ElementPtr>::GetLastingSelectedElements()
const
214 std::vector<ElementPtr> lastingSelected;
215 for (
auto& indx : mLastingSelectIndxs)
217 assert((
"Bad indx!", indx >= 0 && indx < mFiles.size()));
218 lastingSelected.push_back(mFiles[indx]);
220 return lastingSelected;
223template <
typename ElementPtr>
225std::vector<ElementPtr> ElementSelector<ElementPtr>::GetElements()
const
230template <
typename ElementPtr>
232std::size_t ElementSelector<ElementPtr>::GetSelectedPosition()
const
234 return mSelectedIndx;
237template <
typename ElementPtr>
239std::size_t ElementSelector<ElementPtr>::GetElementsSize()
const
241 return mFiles.size();
244template <
typename ElementPtr>
246const std::optional<ElementPtr> ElementSelector<ElementPtr>::GetSelected()
const
248 if (mSelectedIndx < mFiles.size())
250 return mFiles[mSelectedIndx];
void Load(std::vector< ElementPtr > element, bool overwrite)
Definition ElementSelector.tpp:70
static std::vector< ElementPtr > CrutchConverter(std::vector< Element > elements)
ElementSelector::CrutchConverter - convert vector of Element to vector of Element_Ptr;.
Definition ElementSelector.tpp:29
Definition ElementSelector.hpp:34
Definition ElementSelector.hpp:28
The ElementSelectorState - struct to store element selector state .
Definition ElementSelector.hpp:20