Fixed textEntered() emission and changed path of images.
[GoMoku3D.git] / src / gui / 3d / RenderWidget.cpp
blob3f0ee34982aa50dc8b5a916fe496243ed1d1f45b
1 /********************************************************************
3 * Copyright (C) 2008 Tobia Zorzan
5 * This file is part of GoMoku3D.
7 * GoMoku3D is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * GoMoku3D is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with GoMoku3D. If not, see <http://www.gnu.org/licenses/>.
20 *******************************************************************/
22 #include "RenderWidget.h"
24 /*!
25 * @class RenderWidget RenderWidget.h
26 * @brief RenderWidget fornisce un widget Qt con visuale 3D.
28 * RenderWidget è la classe a più alto livello della componente 3D dell'applicazione.
29 * I metodi di tale classe sono metodi usati dalle altre componenti, e quindi da
30 * reimplementare in caso si desidere fornire un'altro tipo di visuale del campo di
31 * gioco.
34 /*!
35 * Costruttore della classe.
36 * @param parent Puntatore al widget genitore.
37 * @param dim La dimensione della matrice di gioco. Se uguale a 0, non viene inizializzata
38 * la parte 3D ma viene inserita un'immagine segnaposto.
40 RenderWidget::RenderWidget(QWidget *parent, int dim)
41 : QWidget(parent), _renderarea(0), _layout(0), _imageLabel(0)
43 _layout = new QVBoxLayout(this);
44 if (!_image.load("./gomoku3d.png")) {
45 qWarning() << "Failed to load image file.";
47 if (dim > 0) {
48 init(dim);
49 } else {
50 reset();
53 setWhatsThis(tr("Here is displayed the game matrix. Possible interactions are:\n"
54 "- left mouse button click and drag: rotate the game matrix;\n"
55 "- left mouse button: select a cube;\n"
56 "- mouse wheel: zoom in and out;\n"
57 "- ENTER key: confirm a move for the current player;\n"
58 "- SPACE key: enable the explode function;\n"
59 "- UP, DOWN, LEFT, RIGHT arrows: change selected cube;\n"
60 "- W, S keys: change selected cube.\n"));
63 /*!
64 * Distruttore della classe.
65 * Dealloca gli oggetti puntati dai campi dato della classe al momento della distruzione.
67 RenderWidget::~RenderWidget()
69 if (_renderarea) {
70 delete _renderarea;
72 if (_layout) {
73 delete _layout;
77 /*!
78 * Inizializza la componente 3D e visualizza una matrice di gioco di dimensione uguale a \c dim.
79 * @param dim Dimensione della matrice di gioco da rappresentare.
81 void RenderWidget::init(int dim)
83 if (_imageLabel) {
84 _layout->removeWidget(_imageLabel);
85 delete _imageLabel;
86 _imageLabel = 0;
88 Q_ASSERT(_renderarea == 0);
89 _renderarea = new CubeRenderArea(this, dim);
90 _layout->addWidget(_renderarea->getWidget());
91 GUISettings settings;
92 _defaultCubeColor = settings.defaultCubeColor();
93 this->setFocusProxy(_renderarea->getWidget());
96 /*!
97 * Resetta il widget. Viene distrutta la componente 3D e sostituita con un'immagine segnaposto.
99 void RenderWidget::reset()
101 this->setFocusProxy(0);
102 if (_renderarea) {
103 _renderarea->getWidget()->hide();
104 _layout->removeWidget(_renderarea->getWidget());
105 delete _renderarea;
106 _renderarea = 0;
108 if (!_imageLabel) {
109 _imageLabel = new QLabel();
110 _imageLabel->setPixmap(_image);
111 _layout->addWidget(_imageLabel, 0, Qt::AlignCenter);
116 * Abilita e disabilita la possibilità di inviare mosse dall'interfaccia grafica.
117 * @param value Se \c true permette all'utente di inviare una mossa. Se \c false disabilita l'invio delle mosse.
119 void RenderWidget::acceptMove(bool value)
121 if (_renderarea) {
122 _renderarea->setAcceptMove(value);
127 * Disegna una mossa in posizione indicata da \c p con il colore \c c.
128 * @param p La posizione da colorare.
129 * @param c Il colore da usare per rappresentare la mossa.
131 void RenderWidget::drawMove(Point p, QColor c)
133 if (_renderarea) {
134 if (p.isValid()) {
135 _renderarea->drawMove(p, _renderarea->convertColor(c));
136 } else {
137 qWarning() << "RenderWidget::drawMove() :" << tr("invalid point");
143 * Disegna una serie di mosse contnute nelle liste parametro. Utilizzata principalmente
144 * per rispristinare una situazione di gioco precedente. Se il parametro \c colorsList è
145 * una lista vuota, per titti i punti da rappresentare viene usato il colore di default.
146 * @param pointsList Una lista di punti.
147 * @param colorsList Una lista di colori da utilizzare per le mosse.
149 void RenderWidget::uncheckedDraw(QList<Point> pointsList, QList<QColor> colorsList)
151 if (_renderarea) {
152 if (colorsList.isEmpty()) {
153 // draw all points with the default color
154 SbColor4f color = _renderarea->convertColor(_defaultCubeColor);
155 Point point;
156 foreach(point, pointsList) {
157 _renderarea->drawMove(point, color);
159 } else {
160 Q_ASSERT(pointsList.size() == colorsList.size());
161 for (int i = 0; i < pointsList.size(); i++) {
162 _renderarea->drawMove(pointsList.at(i), _renderarea->convertColor(colorsList.at(i)));
169 * Imposta il colore di sfondo della scena.
170 * Viene utilizzato il colore impostato nelle preferenze.
172 void RenderWidget::updateBackground()
174 if (_renderarea) {
175 GUISettings settings;
176 SbColor background;
177 (_renderarea->convertColor(settings.backgroundColor())).getRGB(background);
178 _renderarea->setBackgroundColor(background);
183 * Imposta il valore della funzione di antialiasing.
184 * @param value Intero \c >=0 \c <= 6 . Più alto è il valore, maggiore è la qualità dello smussamento.
186 void RenderWidget::setAntialiasing(int value)
188 // TODO
189 qDebug() << "Setting antialiasing to:" << value;
193 * Ritorna il valore del campo dato privato \c _renderarea .
195 CubeRenderArea *RenderWidget::renderarea()
197 return _renderarea;
201 * Seleziona una particolare posizione nella visuale 3D.
202 * @param p La posizione da selezionare.
204 void RenderWidget::highlightPoint(Point p)
206 _renderarea->selectCube(p, SbColor(0.9, 0.9, 0));