00001 #ifndef _MUNDO_QT_H 00002 #define _MUNDO_QT_H 00003 00004 #include <QWidget> 00005 #include <QMouseEvent> 00006 #include <QPaintEvent> 00007 #include <QMutex> 00008 #include <QMenu> 00009 #include "stat.h" 00010 #include "info.h" 00011 #include "../core/mundo.h" 00012 00013 /* Constates para valores padroes */ 00014 #define TAMANHO_X 8192 00015 #define TAMANHO_Y 6144 00016 00017 #define ENERGIA_GRAO 200 00018 #define TETO_ENERGETICO ((TAMANHO_X*TAMANHO_Y)/900) 00019 00020 #define PROBABILIDADE_MUTACAO 60 00021 #define INTENSIDADE_MUTACAO 1 00022 00023 class MundoQT : public QWidget, public Mundo 00024 { 00025 Q_OBJECT 00026 00027 public: 00028 00029 /* Constructor */ 00030 MundoQT(QWidget *parent = 0, Qt::WFlags f = 0); 00031 ~MundoQT(); 00032 00033 /* Controle de execucao */ 00034 QMutex* getMutex(); 00035 void setMutex(QMutex *m); 00036 bool executando; 00037 00038 /* Seta menus popup */ 00039 void setMenuBiota(QMenu *m); 00040 void setMenuGrao(QMenu *m); 00041 void setMenuVoid(QMenu *m); 00042 void setMenuParede(QMenu *m); 00043 00044 /* Seta telas */ 00045 inline void setStat(Stat *s) { stat = s; } 00046 inline void setInfo(Info *i) { info = i; } 00047 00048 /* getters */ 00049 inline Biota getSelecionado() 00050 { 00051 return selecionado->biota; 00052 } 00053 00054 signals: 00055 00056 void changeHorizontalBar(int); 00057 void changeVerticalBar(int); 00058 void estadoModificado(QString texto); 00059 00060 public slots: 00061 00062 void offsetxChanged(int); 00063 void offsetyChanged(int); 00064 00065 void atualizar(); 00066 void estatistica(); 00067 00068 void limpar(); 00069 void reiniciar(); 00070 00071 void novaParede(); 00072 void removerParede(); 00073 void novoGrao(); 00074 void removerGrao(); 00075 void novoBiota(); 00076 void salvarBiota(); 00077 void abrirBiota(); 00078 void removerBiota(); 00079 void mutacaoBiota(); 00080 00081 inline void fixarSelecionado() {fixar = !fixar;} 00082 inline void autoSelecionar() {autoSelec = !autoSelec;} 00083 00084 void maisVelho(); 00085 void maisEnergia(); 00086 void geracaoMaisNova(); 00087 void geracaoMaisAntiga(); 00088 void maisFilhos(); 00089 00090 void abrirSimulacao(); 00091 void salvarSimulacao(); 00092 00093 protected: 00094 00095 /* Operacoes */ 00096 void posicionarParede(Vetor<float> pos); 00097 bool selecionarParede(Vetor<float> pos); 00098 00099 /* Desenhar */ 00100 void paintEvent(QPaintEvent *event); 00101 00102 /* Eventos do mouse */ 00103 void mouseDoubleClickEvent ( QMouseEvent * event ); 00104 void mouseMoveEvent ( QMouseEvent * event ); 00105 void mousePressEvent ( QMouseEvent * event ); 00106 void wheelEvent ( QWheelEvent * event ); 00107 void mouseReleaseEvent ( QMouseEvent * event ); 00108 00109 private: 00110 00111 /* Paredes */ 00112 struct NohParede *parede_selecionada; 00113 00114 #define PONTA_INICIO 0 00115 #define PONTA_FIM 1 00116 #define MEIO 2 00117 00118 int pontaSelecionada; 00119 Vetor<float> ancora_parede; 00120 00121 /* Representacao grafica */ 00122 float zm; 00123 float offsetx; 00124 float offsety; 00125 00126 /* Interação com usuario */ 00127 Vetor<float> lastPos; 00128 QMenu *menuBiota; 00129 QMenu *menuGrao; 00130 QMenu *menuVoid; 00131 QMenu *menuParede; 00132 void mudaBarraStatus(); 00133 bool fixar; 00134 bool autoSelec; 00135 00136 /* Controle de execucao */ 00137 QMutex *mutex; 00138 00139 /* telas */ 00140 Info *info; 00141 Stat *stat; 00142 }; 00143 00144 #endif