Commit 31995faf authored by Yann Boucher's avatar Yann Boucher
Browse files

Connexion d'un slot de l'UI pour permettre le choix de l'état à ajouter lors...

Connexion d'un slot de l'UI pour permettre le choix de l'état à ajouter lors d'un clic sur la grille
parent 10e4c433
Pipeline #77957 passed with stages
in 16 seconds
......@@ -51,7 +51,7 @@ public:
//! Crée un nouvel état
void newEtat(const state& s);
//! Renvoie l'état en fonction de son identifiant
state getState(unsigned int it);
state getState(unsigned int it) const;
//! Affecte l'identifiant d'état à un état
void setState(unsigned int i, const state& s);
......
......@@ -27,6 +27,21 @@ Cette classe représente le widget utilisé pour l'affichage et l'interaction av
#include "grid.h"
class GridItem;
class GridView;
class GridGraphicsView : public QGraphicsView
{
public:
GridGraphicsView(GridView& gridview, QWidget* parent)
: QGraphicsView(parent), m_gridview(gridview)
{}
protected:
void mousePressEvent(QMouseEvent* event);
private:
GridView& m_gridview;
};
class GridView : public QFrame
{
Q_OBJECT
......@@ -35,6 +50,10 @@ public:
public:
void set_alphabet(const Alphabet& alph);
const Alphabet& alphabet() const;
void set_current_pen(unsigned state);
unsigned current_pen() const;
void copy_grid(const Grid& grid);
Grid get_grid() const;
......@@ -56,10 +75,11 @@ protected:
void keyReleaseEvent(QKeyEvent *event);
private:
QGraphicsView* m_view;
GridGraphicsView* m_view;
QGraphicsScene* m_scene;
unsigned m_width;
unsigned m_height;
unsigned m_pen;
Structure m_copy_paste_buffer;
Alphabet m_alph;
};
......
......@@ -49,6 +49,8 @@ private slots:
//! \brief Affiche l'interface pour sauvegarder la sélection actuelle comme une structure
void afficher_interface_sauvegarde_structure(bool);
void on_nbrStateComboBox_currentTextChanged(const QString &arg1);
private:
Ui::MainWindow *ui;
};
......
......@@ -14,7 +14,7 @@ void Alphabet::newEtat(const state& s){ // Définition de la méthode de créati
etats.push_back(s);
}
state Alphabet::getState(unsigned int it){ // Définition de la méthode de récupération d'un état en fonction de son identifiant
state Alphabet::getState(unsigned int it) const{ // Définition de la méthode de récupération d'un état en fonction de son identifiant
if (it < etats.size())
{
return etats[it];
......
......@@ -69,7 +69,6 @@ protected:
painter->drawRect(rect);
}
// infos associées à la cellule affichée
public:
unsigned cell_state;
......@@ -84,6 +83,31 @@ static QColor stateColor_to_QColor(const stateColor& sc)
return QColor::fromRgb(sc.getRed(), sc.getGreen(), sc.getBlue());
}
void GridGraphicsView::mousePressEvent(QMouseEvent *event)
{
QGraphicsItem* gitem_ptr = itemAt(event->pos());
GridItem* item = dynamic_cast<GridItem*>(gitem_ptr);
if (event->button() == Qt::LeftButton)
{
assert(item);
unsigned state = m_gridview.current_pen();
item->setBrush(QBrush(stateColor_to_QColor(m_gridview.alphabet().getState(state).getColor())));
item->cell_state = 0;
item->update();
}
else if (event->button() == Qt::RightButton)
{
assert(item);
QGraphicsView::mousePressEvent(event);
item->setSelected(true);
}
else
QGraphicsView::mousePressEvent(event);
}
GridView::GridView(QWidget *parent)
: QFrame(parent), m_width(0), m_height(0)
{
......@@ -93,7 +117,7 @@ GridView::GridView(QWidget *parent)
m_scene = new QGraphicsScene(this);
m_view = new QGraphicsView(this);
m_view = new GridGraphicsView(*this, this);
m_view->setRenderHint(QPainter::Antialiasing, false);
m_view->setDragMode(QGraphicsView::RubberBandDrag);
m_view->setOptimizationFlags(QGraphicsView::DontSavePainterState);
......@@ -112,6 +136,7 @@ GridView::GridView(QWidget *parent)
m_width = m_height = 100;
set_current_pen(0);
// Test Alphabet
Alphabet alph(state{stateColor{255, 255, 255}, "Dead"});
alph.newEtat(state{stateColor{0, 0, 255}, "Alive"});
......@@ -139,6 +164,21 @@ void GridView::set_alphabet(const Alphabet &alph)
m_alph = alph;
}
const Alphabet &GridView::alphabet() const
{
return m_alph;
}
void GridView::set_current_pen(unsigned state)
{
m_pen = state;
}
unsigned GridView::current_pen() const
{
return m_pen;
}
void GridView::copy_grid(const Grid &grid)
{
m_scene->clear();
......
......@@ -121,3 +121,10 @@ void MainWindow::on_validateGridDim_clicked()
// Appliquer la dimension à la grille
ui->validateGridDim->setEnabled(false);
}
void MainWindow::on_nbrStateComboBox_currentTextChanged(const QString &arg1)
{
unsigned val = arg1.toInt();
ui->grid_view->set_current_pen(val);
}
......@@ -6,8 +6,16 @@ int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow m;
m.show();
try
{
MainWindow m;
m.show();
return a.exec();
return a.exec();
}
catch (const std::exception& e)
{
QMessageBox::critical(nullptr, "Exception", e.what());
return -1;
}
}
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