//**************************************************************************
//*Cette classe permet de créer une GtK Window. On y mettera des labels    *
//*des boites de saisies et des boutons avec des callbacks qui permettront *
//*d'appeler les constructeurs des autres classes pour créer, lire,        *
//*developper, dessiner... un l_systeme. On met tout les composants dans   *
//*une Gtk Table puis on attache cette grille à la fenetre****************** 

#include <iostream.h>
#include <gtk--/window.h>
#include <gtk--/table.h>
#include <gtk--/button.h>
#include <gtk--/main.h>
#include <gtk--/entry.h>
#include <gtk--/label.h>
#include <gtk--/separator.h>
#include <gtk--/scrolledwindow.h>
#include <gtk--/alignment.h>
#include <fstream>
#include <string>
#include <vector>
#include "lecteur.h"
#include <stdio.h>
using namespace std;
using std::cout;
using SigC::bind;
using SigC::slot;

class interface : public Gtk::Window
{
  Gtk::Table lagrille;
  Gtk::ScrolledWindow scrollzone;
  Gtk::Button m_button1, m_button2;
  Gtk::Entry saisieAngle, saisieAxiome;
  Gtk::Entry saisieSymboleRegle, saisieRegle;
  Gtk::Label labelAxiome, labelAngle, labelSymboleRegle, labelRegle;
  Gtk::Entry saisieNbFois;
  Gtk::Button boutonAppliqueRegle;
  Gtk::Label labelNbFois;
  Gtk::Entry saisieNvAxiome;
  Gtk::Button boutonCreeLSyst;
  l_systeme l_syst;
  zoneDessin zone;
  axiome axiomeLsyst;
  Gtk::Button boutonDessine;
  Gtk::Label labelTitre;
  Gtk::Button boutonClean;
  Gtk::Label labelDestNvLsyst;
  Gtk::Entry saisieDestNvLsyst;
  Gtk::HSeparator separation;
  Gtk::Label labelDestLsyst;
  Gtk::Entry saisieDestLsyst;
  Gtk::Label labelTailleSeg;
  Gtk::Entry saisieTailleSeg;
  
  vector<string> ensRegle;
  string axio;
  string angle;
  vector<string>::iterator iterateur;
  float positionX, positionY, positionNvX, positionNvY, positionMemX, positionMemY;
  float angle2;
  int angleLSyst;
  int tailleTrait;

public:
  interface();
  void validerRegle();
  void ecrireLSyst();
  void creeLSyst();
  void developpeLSyst();
  void dessineAxiome();
  gint delete_event_impl(GdkEventAny*) { 
    Gtk::Main::quit(); return 0; 
  }
};
