memoserv/src/gui/grid.hpp

69 lines
1.6 KiB
C++

#pragma once
#include "nana/gui/widgets/widget.hpp"
#include "nana/gui/animation.hpp"
#include <array>
class MemoryCard;
namespace implem {
//void draw_icons (
// int icon_size,
// const MemoryCard& mc,
// std::array<nana::animation, 15>& icons,
// nana::widget& wid
//);
} //namespace implem
class grid_drawer_trigger : public nana::drawer_trigger {
public:
grid_drawer_trigger();
void set_memorycard (const MemoryCard* mc);
private:
virtual void attached(nana::widget&, nana::paint::graphics&) override;
//void _m_draw_title (nana::paint::graphics&, bool is_mouse_down, bool is_focus);
void _m_draw_background (nana::paint::graphics&, bool is_mouse_down);
//void _m_draw_border (nana::paint::graphics&, bool is_mouse_down);
std::array<nana::animation, 15> m_icons;
nana::widget* m_widget{nullptr};
nana::paint::graphics* m_graph{nullptr};
const MemoryCard* m_memorycard{nullptr};
bool m_is_ms_down{false};
};
template <typename DrawerTrigger>
class basic_grid : public nana::widget_object<nana::category::widget_tag, DrawerTrigger> {
public:
basic_grid() = default;
basic_grid (nana::widget& widget, unsigned int icon_size, const MemoryCard* mc);
private:
int m_icon_size{0};
const MemoryCard* m_memorycard{nullptr};
};
using grid = basic_grid<grid_drawer_trigger>;
template <typename DrawerTrigger>
basic_grid<DrawerTrigger>::basic_grid (
nana::widget& widget,
unsigned int icon_size,
const MemoryCard* mc
) :
m_icon_size(icon_size),
m_memorycard(mc)
{
this->create(
widget.handle(),
nana::rectangle{
0,
0,
(icon_size + 2) * 3 - 2,
(icon_size + 2) * 5 - 2
}
);
this->get_drawer_trigger().set_memorycard(m_memorycard);
}