Commit 0e45474c authored by Yann Boucher's avatar Yann Boucher
Browse files

Ajout d'un mode toggle pour le GridView

parent 6255f283
Pipeline #78941 passed with stages
in 17 seconds
......@@ -84,6 +84,16 @@ public:
//! \returns L'état actuel de l'édition.
unsigned current_pen() const;
//! \brief Active le mode "toggle", qui permet de changer l'état d'une cellule de manière cyclique en cliquant dessus, passant d'un état check à uncheck, et inversement si cliqué à nouveau.
//! \param checked_state L'état lorsqu'une cellule est sélectionnée
//! \param unchecked_state L'état d'une cellule non sélectionnée
void enable_toggle_mode(unsigned checked_state, unsigned unchecked_state = 0);
//! \brief Désactive le mode "toggle".
void disable_toggle_mode();
//! \brief Retourne un booléen indiquant si le mode actuel est le mode "toggle".
bool in_toggle_mode() const
{ return m_in_toggle_mode; }
//! \brief Insère une structure à une position donnée.
//! \param origin La coordonnée où placer la structure.
//! \param s La structure à placer.
......@@ -105,8 +115,8 @@ public:
//! \param grid La Grid à copier vers l'affichage du GridView.
void copy_grid(const Grid& grid);
//! \brief Retourne une Grid représentant l'état actuel affiché par la GridView.
//! \returns Une Grid correspondante.
Grid get_grid() const;
//! \returns Une référence constante vers une Grid correspondante.
const Grid &get_grid() const;
//! \brief Réinitialise la sélection.
void clear_selection();
......@@ -140,6 +150,8 @@ private:
void delete_selection();
void select_all();
void click_on(Coord coord);
const QPixmap &grid_pixmap() const;
private slots:
......@@ -157,6 +169,8 @@ private:
QImage m_grid_image;
QPixmap m_grid_pixmap;
Grid m_grid;
bool m_in_toggle_mode;
unsigned m_checked_state, m_unchecked_state;
std::vector<QGraphicsRectItem*> m_selection_rects;
bool m_handling_rubberband;
DragDropHandlerItem* m_drag_drop_handler;
......
......@@ -175,8 +175,7 @@ void GridGraphicsView::mousePressEvent(QMouseEvent *event)
if (QGuiApplication::keyboardModifiers() == Qt::NoModifier && event->button() == Qt::LeftButton)
{
unsigned state = m_gridview.current_pen();
m_gridview.set_cell_state(coord, state);
m_gridview.click_on(coord);
m_gridview.update_gridview();
}
else if (event->button() == Qt::RightButton)
......@@ -184,7 +183,6 @@ void GridGraphicsView::mousePressEvent(QMouseEvent *event)
if ((QGuiApplication::keyboardModifiers() & Qt::ControlModifier) == 0)
m_gridview.clear_selection();
QGraphicsView::mousePressEvent(event);
//item->setSelected(true);
}
else
......@@ -198,7 +196,7 @@ void GridGraphicsView::mouseMoveEvent(QMouseEvent *event)
if (!sceneRect().contains(item_pos) || !sceneRect().contains(mapToScene(m_last_mouse_pos)))
return;
if (QGuiApplication::keyboardModifiers() == Qt::NoModifier && event->buttons() == Qt::LeftButton)
if (!m_gridview.in_toggle_mode() && QGuiApplication::keyboardModifiers() == Qt::NoModifier && event->buttons() == Qt::LeftButton)
{
draw_bresenham(mapToScene(m_last_mouse_pos), item_pos);
m_gridview.update_gridview();
......@@ -274,7 +272,7 @@ void GridGraphicsView::draw_bresenham(QPointF from, QPointF to)
}
GridView::GridView(QWidget *parent)
: QFrame(parent), m_undo_history(10), m_grid(10, 10), m_handling_rubberband(false), m_width(10), m_height(10)
: QFrame(parent), m_undo_history(10), m_grid(10, 10), m_in_toggle_mode(false), m_handling_rubberband(false), m_width(10), m_height(10)
{
//setMouseTracking(true);
......@@ -349,6 +347,18 @@ unsigned GridView::current_pen() const
return m_pen;
}
void GridView::enable_toggle_mode(unsigned checked_state, unsigned unchecked_state)
{
m_in_toggle_mode = true;
m_checked_state = checked_state;
m_unchecked_state = unchecked_state;
}
void GridView::disable_toggle_mode()
{
m_in_toggle_mode = false;
}
void GridView::set_clipboard(const Structure &s)
{
m_copy_paste_buffer = s;
......@@ -371,7 +381,7 @@ void GridView::copy_grid(const Grid &grid)
update_gridview();
}
Grid GridView::get_grid() const
const Grid& GridView::get_grid() const
{
return m_grid;
}
......@@ -507,6 +517,22 @@ void GridView::select_all()
create_selection_rect(QRect(0, 0, m_width, m_height));
}
void GridView::click_on(Coord coord)
{
if (!in_toggle_mode())
{
set_cell_state(coord, current_pen());
}
else
{
unsigned prev_state = get_grid().get_state(coord);
if (prev_state == m_checked_state)
set_cell_state(coord, m_unchecked_state);
else
set_cell_state(coord, m_checked_state);
}
}
void GridView::paste_structure_at(Coord origin, const Structure &s)
{
push_history();
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment