]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
ahora si se puede guardar un archivo, igual todavia hay que definir bien el formato
authorNicolás Dimov <ndimov@gmail.com>
Sun, 9 Nov 2003 23:36:37 +0000 (23:36 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Sun, 9 Nov 2003 23:36:37 +0000 (23:36 +0000)
13 files changed:
Constructor/cistern.cpp
Constructor/cistern.h
Constructor/conduct.cpp
Constructor/conduct.h
Constructor/constructor.cpp
Constructor/constructor.glade
Constructor/constructor.h
Constructor/item.cpp
Constructor/item.h
Constructor/splitter.cpp
Constructor/splitter.h
Constructor/union.cpp
Constructor/union.h

index 81d0fad80970b6d04c2c1f669af318f7776900fc..41073c197557879a5016400e42856549849ab9ff 100644 (file)
@@ -22,6 +22,9 @@ Cistern::~Cistern()
 
 bool Cistern::on_button_press_event(GdkEventButton *event)
 {
+       if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 1))
+               combo_entry->set_text(name);
+       
        if ((event->type == GDK_BUTTON_PRESS) && ( event->button ==2)){
                image = null; 
                image->render_to_drawable(get_window(),get_style()->get_black_gc(),0,0,0,0,image->get_width(),image->get_height(),Gdk::RGB_DITHER_NONE,0,0);
@@ -87,3 +90,25 @@ double Cistern::get_contenido_inicial()
 {
        return contenido_inicial;
 }
+
+void Cistern::save(FILE *archivo)
+{
+       char c_id[50], c_cap[50], c_x[50], c_y[50], c_img[50], c_ini[50];
+       sprintf(c_x,"\t\t<x>%d</x>\n",x);
+       sprintf(c_y,"\t\t<y>%d</y>\n",y);
+       sprintf(c_id,"%d",ID);
+       sprintf(c_cap,"\t\t<capacidad>%.2f</capacidad>\n", capacidad);
+       sprintf(c_ini,"\t\t<inicial>%.2f</inicial>\n", contenido_inicial);
+       sprintf(c_img,"\t\t<orientacion>%d</orientacion>\n",imgActual);
+       Glib::ustring dato;
+       dato = "\t<tanque nombre=\""+name+"\" id=\"";
+       dato += c_id;
+       dato += "\">\n";
+       dato += c_cap;
+       dato += c_ini;
+       dato += c_img;
+       dato += c_x; 
+       dato += c_y;
+       dato += "\t</tanque>\n";
+       fprintf(archivo,dato.c_str());  
+}
index 2bb8c981a87742b950006e1583f358f78d54c274..7b552d28220e88c7ded310c9c9edb36f00141f5a 100644 (file)
@@ -17,6 +17,7 @@ class Cistern : public CItem {
                double get_capacidad();
                void set_contenido_inicial(double _ini);
                double get_contenido_inicial();
+               virtual void save(FILE *archivo);
        protected:
                double capacidad, contenido_inicial;
                int imgActual;  
index aa1c0922c2cfba26ae075ec2859bd937dda3ffaa..1daf3560cf3a6fedecd91cdd5e550ea9566c0ca6 100644 (file)
@@ -18,6 +18,9 @@ Conduct::~Conduct()
 bool Conduct::on_button_press_event(GdkEventButton *event)
 {
        int w, h;
+       if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 1))
+               combo_entry->set_text(name);
+       
        if ((event->type == GDK_BUTTON_PRESS) && ( event->button ==2)){
                image = null; 
                image->render_to_drawable(get_window(),get_style()->get_black_gc(),0,0,0,0,image->get_width(),image->get_height(),Gdk::RGB_DITHER_NONE,0,0);
@@ -62,3 +65,23 @@ void Conduct::on_menu_popup_propiedades()
        event.button = 1;
        Conduct::on_button_press_event(&event);
 }
+
+void Conduct::save(FILE *archivo)
+{
+       char c_id[50], c_caudal[50], c_x[50], c_y[50], c_img[50];
+       sprintf(c_x,"\t\t<x>%d</x>\n",x);
+       sprintf(c_y,"\t\t<y>%d</y>\n",y);
+       sprintf(c_id,"%d",ID);
+       sprintf(c_caudal,"\t\t<caudal>%.2f</caudal>\n", caudal_max);
+       sprintf(c_img,"\t\t<orientacion>%d</orientacion>\n",imgActual);
+       Glib::ustring dato;
+       dato = "\t<tubo nombre=\""+name+"\" id=\"";
+       dato += c_id;
+       dato += "\">\n";
+       dato += c_caudal;
+       dato += c_img;
+       dato += c_x; 
+       dato += c_y;
+       dato += "\t</tubo>\n";
+       fprintf(archivo,dato.c_str());  
+}
index 78878a82e2a29b6d6274f30fbcea216c92a13e62..84007ed51d584b843b5b559c3b24c1f9052a6d06 100644 (file)
@@ -10,6 +10,7 @@ class Conduct : public CItem {
                virtual bool on_button_press_event(GdkEventButton *event);
                virtual void on_menu_popup_rotar();
                virtual void on_menu_popup_propiedades();
+               virtual void save(FILE *archivo);
        private:
                int imgActual;  
        
index 7553c9126bb2cc77895064bc6db79abd94cf845e..e8180b0d3109e8907a663590d6f68a3422da3275 100644 (file)
@@ -17,13 +17,14 @@ Constructor::Constructor(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glad
        refGlade->get_widget("btn_y", btn_y);
        refGlade->get_widget("btn_tanque",btn_tanque);
        refGlade->get_widget("main_menu_quit",main_menu_quit);
+       refGlade->get_widget("main_menu_save",main_menu_save);
        refGlade->get_widget("edit_menu_del",edit_menu_del);
        refGlade->get_widget("chk_btn_logica",chk_btn_logica);
+       refGlade->get_widget("file_selection",file_selection);
+       refGlade->get_widget("combo_entry",combo_entry);
        
        refGlade->get_widget_derived("workplace", workplace);  //fixed
        
-       
-       
        //Targets
        listTargets.push_back( Gtk::TargetEntry("STRING") );
        listTargets.push_back( Gtk::TargetEntry("text/plain") );
@@ -42,15 +43,20 @@ Constructor::Constructor(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glad
        chk_btn_logica->signal_clicked().connect(SigC::slot(*this, &Constructor::on_chk_btn_clicked));
        
        main_menu_quit->signal_activate().connect(SigC::slot(*this, &Constructor::on_main_menu_quit));
+       main_menu_save->signal_activate().connect(SigC::slot(*this, &Constructor::on_main_menu_save));
        edit_menu_del->signal_activate().connect(SigC::slot(*this,&Constructor::on_edit_menu_del));
+                       
+       btn_file_cancel = file_selection->get_cancel_button();
+       btn_file_ok = file_selection->get_ok_button();
+       btn_file_cancel->signal_clicked().connect(SigC::slot(*this,&Constructor::on_btn_file_cancel_clicked));
+       btn_file_ok->signal_clicked().connect(SigC::slot(*this,&Constructor::on_btn_file_ok_clicked));
        
        // Señales para cambiar el icono cuando empieza el drag.
        btn_canio->signal_drag_begin().connect( SigC::slot(*this, &Constructor::on_canio_drag_begin));
        btn_y->signal_drag_begin().connect( SigC::slot(*this, &Constructor::on_y_drag_begin));
        btn_codo->signal_drag_begin().connect( SigC::slot(*this, &Constructor::on_codo_drag_begin));
        btn_tanque->signal_drag_begin().connect( SigC::slot(*this, &Constructor::on_tanque_drag_begin));
-       
-       
+
        workplace->drag_dest_set(listTargets);
        workplace->signal_drag_data_received().connect( SigC::slot(*this, &Constructor::on_item_drop_drag_received) );  
        workplace->listaItems = &listaItems;    
@@ -97,6 +103,11 @@ void Constructor::on_main_menu_quit()
        //hide();
 }
 
+void Constructor::on_main_menu_save()
+{
+       file_selection->show();
+}
+
 void Constructor::on_edit_menu_del()
 {
        // hay que meter algo aca.
@@ -107,6 +118,29 @@ void Constructor::on_chk_btn_clicked()
        logica = !logica;
 }
 
+void Constructor::on_btn_file_ok_clicked()
+{
+       std::list<CItem *>::iterator i = listaItems.begin();
+       std::string file_name = file_selection->get_filename();
+       if ( (archivo = fopen( file_name.c_str(), "w+")) != NULL ){
+               fprintf (archivo,"<planta>\n");
+               while ( i != listaItems.end() ){
+                       CItem *temp = *i;
+                       temp->save(archivo);
+                       i++;
+               }
+               fprintf(archivo,"</planta>\n");
+       } else 
+               std::cout<<"NO SE ABRIO EL ARCHIVO"<<std::endl;
+       fclose(archivo);
+       file_selection->hide();
+}
+
+void Constructor::on_btn_file_cancel_clicked()
+{
+       file_selection->hide();
+}
+
 void Constructor::on_canio_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context)
 {
        context->set_icon(ico_canio, 5, 5); 
@@ -183,16 +217,20 @@ void Constructor::on_item_drop_drag_received(const Glib::RefPtr<Gdk::DragContext
                                                                a = new Union();
                                                                        else if (strcmp((const char *)selection_data->data, "item_tanque.png")==0) 
                                                                                a = new Cistern();
-                                                                                       else
-                                                                                               a = new CItem();
+
                        //Seteo el ID del item
                        Glib::ustring name("item");
+                       // FIXME
+                       char char_id[10];
+                       sprintf(char_id," %d",id);
                        a->set_id(++id);                
-                       a->set_name( name );
+                       a->set_name( name+char_id );
                        if ( can_drop(a, i*32, j*32) ) {
                                workplace->put(*a, i*32, j*32);
                                //Apunto al workplace
                                a->workplace= workplace;
+                               //Apunto a la lista.
+                               a->combo_entry = combo_entry;
                                //Seteo la posicion del item
                                a->set_position(i*32,j*32);
                                // Seteo la lista de tipos de drags 
index 532532854fff323a944ab24644909aaca9911844..db62ae0de9fcb2e4a0fda14fbe8b4cca24010769 100644 (file)
@@ -60,7 +60,7 @@
                      </child>
 
                      <child>
-                       <widget class="GtkImageMenuItem" id="save1">
+                       <widget class="GtkImageMenuItem" id="main_menu_save">
                          <property name="visible">True</property>
                          <property name="label">gtk-save</property>
                          <property name="use_stock">True</property>
              <property name="enable_arrows_always">False</property>
 
              <child internal-child="entry">
-               <widget class="GtkEntry" id="combo-entry1">
+               <widget class="GtkEntry" id="combo_entry">
                  <property name="visible">True</property>
                  <property name="can_focus">True</property>
                  <property name="editable">True</property>
   </child>
 </widget>
 
-<widget class="GtkFileSelection" id="fileselection1">
+<widget class="GtkFileSelection" id="file_selection">
   <property name="border_width">10</property>
   <property name="title" translatable="yes">Select File</property>
-  <property name="type">GTK_WINDOW_POPUP</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER</property>
   <property name="modal">False</property>
   <property name="resizable">True</property>
   <property name="destroy_with_parent">False</property>
index a0de6bc9ead67f7ea23fae28acd42c0cdeffc656..f9b5bf316b36a116ea2dae01caef6b9163daae50 100644 (file)
@@ -11,6 +11,8 @@
 #include <gtkmm/fixed.h>
 #include <gtkmm/scrolledwindow.h>
 #include <gtkmm/checkbutton.h>
+#include <gtkmm/fileselection.h>
+#include <gtkmm/entry.h>
 #include "workplace.h"
 #include "item.h"
 #include "splitter.h"
@@ -22,12 +24,16 @@ class Constructor : public Gtk::Window {
        public: 
                Constructor(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
                virtual ~Constructor();
+       private:
+               FILE *archivo;
        protected: 
        int id;
                // / defino los elementos de la ventana.
-       Gtk::Button *btn_canio, *btn_codo, *btn_y, *btn_tanque;
-       Gtk::ImageMenuItem *main_menu_quit, *edit_menu_del;
+       Gtk::Button *btn_canio, *btn_codo, *btn_y, *btn_tanque, *btn_file_ok, *btn_file_cancel;
+       Gtk::ImageMenuItem *main_menu_quit, *edit_menu_del, *main_menu_save;
        Gtk::CheckButton *chk_btn_logica;
+       Gtk::FileSelection *file_selection;
+       Gtk::Entry *combo_entry;
        WorkPlace *workplace;
        Glib::RefPtr<Gdk::Pixbuf> ico_canio, ico_y, ico_codo, ico_tanque;
        std::list<Gtk::TargetEntry> listTargets;
@@ -42,8 +48,11 @@ class Constructor : public Gtk::Window {
        virtual void on_btn_codo_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
        virtual void on_btn_tanque_drag_get(const Glib::RefPtr<Gdk::DragContext>& context, GtkSelectionData* selection_data, guint info, guint time);
        virtual void on_main_menu_quit();
+       virtual void on_main_menu_save();
        virtual void on_edit_menu_del();
        virtual void on_chk_btn_clicked();
+       virtual void on_btn_file_ok_clicked();
+       virtual void on_btn_file_cancel_clicked();
                
        // señales para cambiar el icono.
        virtual void on_canio_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context);
index 08af2cfecea9d6beca45211cfa282ac234546ff7..79515ff4990ab1d3bded0be364dac10eecfef20b 100644 (file)
@@ -65,49 +65,70 @@ void CItem::set_position(int _x, int _y)
        this->y = _y;
 }
 
-int CItem::get_position_x()
+void CItem::set_id(int _id)
 {
-       return x;
+       ID = _id;
 }
 
-int CItem::get_position_y()
+void CItem::set_caudal(double _caudal)
 {
-       return y;
+        caudal_max = _caudal;
 }
 
-bool CItem::is_occupied_area(int _a, int _b)
-{      
-       if ( ( _a >= x ) && ( _a < x+image->get_width()) && (_b >= y) && (_b < y+image->get_height()) )  
-                       return true;
-               else return false;
+void CItem::set_name(Glib::ustring _name)
+{
+       name = _name;
 }
 
-void CItem::set_id(int _id)
+void CItem::set_conector_in(int _in)
 {
-       ID = _id;
+       conector_in = _in;
 }
 
-int CItem::get_id()
+void CItem::set_conector_out(int _out)
 {
-       return ID;
+       conector_out = _out;
 }
 
-void CItem::set_caudal(double _caudal)
+int CItem::get_position_x()
 {
-        caudal_max = _caudal;
+       return x;
 }
 
-double CItem::get_caudal()
+int CItem::get_position_y()
 {
-       return caudal_max;
+       return y;
 }
 
-void CItem::set_name(Glib::ustring _name)
+int CItem::get_id()
 {
-       name = _name;
+       return ID;
 }
 
+double CItem::get_caudal()
+{
+       return caudal_max;
+}
+
+
 Glib::ustring CItem::get_name()
 {
        return name;
 }
+
+int CItem::get_conector_in()
+{
+       return conector_in;
+}
+
+int CItem::get_conector_out()
+{
+       return conector_out;
+}
+
+bool CItem::is_occupied_area(int _a, int _b)
+{      
+       if ( ( _a >= x ) && ( _a < x+image->get_width()) && (_b >= y) && (_b < y+image->get_height()) )  
+                       return true;
+               else return false;
+}
index 9b8eabd7be1f22dbf1cc00f6577a4a52ac6e174a..3c78eaf2e0903e4b10873fcf4e7112a4fec16903 100644 (file)
@@ -8,6 +8,7 @@
 #include <gtkmm.h>
 #include <gdkmm.h>
 #include <libglademm.h>
+#include <gtkmm/entry.h>
 #include "itemptywnd.h"
 
 class WorkPlace;
@@ -23,19 +24,25 @@ public:
        virtual void on_menu_popup_eliminar();
        virtual void on_menu_popup_conectar();
        Glib::RefPtr<Gdk::Pixbuf> get_image() { return image; }
-       void set_position(int _x, int _y);
+       virtual void save(FILE *archivo) = 0;
        int get_position_x();
        int get_position_y();
-       bool is_occupied_area(int _a, int _b);
-       void set_id(int _id);
        int get_id();
-       void set_caudal(double _caudal);
+       int get_conector_in();
+       int get_conector_out();
        double get_caudal();
+       void set_position(int _x, int _y);
+       void set_id(int _id);
+       void set_caudal(double _caudal);
        void set_name(Glib::ustring _name);
+       void set_conector_in(int _in);
+       void set_conector_out(int _out);
+       bool is_occupied_area(int _a, int _b);
        Glib::ustring get_name();
        WorkPlace *workplace;
+       Gtk::Entry *combo_entry;
 protected:
-       int ID; 
+       int ID, conector_in, conector_out
        Glib::ustring name;
        double caudal_max;
        Gtk::Menu menu_popup;
index a9510de03795957dc02b40fdcfa329612cb74aad..71241baee52341add60b00f37a984476390c1eb7 100644 (file)
@@ -19,6 +19,9 @@ Splitter::~Splitter()
 
 bool Splitter::on_button_press_event(GdkEventButton *event)
 {
+       if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 1))
+               combo_entry->set_text(name);
+       
        if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 2)){
                image = null;   
                image->render_to_drawable(get_window(),get_style()->get_black_gc(),0,0,0,0,image->get_width(),image->get_height(),Gdk::RGB_DITHER_NONE,0,0);
@@ -67,3 +70,23 @@ void Splitter::on_menu_popup_propiedades()
        event.button = 1;
        Splitter::on_button_press_event(&event);
 }
+
+void Splitter::save(FILE *archivo)
+{
+       char c_id[50], c_caudal[50], c_x[50], c_y[50], c_img[50];
+       sprintf(c_x,"\t\t<x>%d</x>\n",x);
+       sprintf(c_y,"\t\t<y>%d</y>\n",y);
+       sprintf(c_id,"%d",ID);
+       sprintf(c_caudal,"\t\t<caudal>%.2f</caudal>\n", caudal_max);
+       sprintf(c_img,"\t\t<orientacion>%d</orientacion>\n",imgActual);
+       Glib::ustring dato;
+       dato = "\t<codo nombre=\""+name+"\" id=\"";
+       dato += c_id;
+       dato += "\">\n";
+       dato += c_caudal;
+       dato += c_img;
+       dato += c_x; 
+       dato += c_y;
+       dato += "\t</codo>\n";
+       fprintf(archivo,dato.c_str());  
+}
index fac9059623c69c31064640a7e7709979d6a30ab3..b8f55d451af9e77568f3d060cc79d28838738009 100644 (file)
@@ -10,6 +10,7 @@ class Splitter : public CItem {
                virtual bool on_button_press_event(GdkEventButton *event);
                virtual void on_menu_popup_rotar();
                virtual void on_menu_popup_propiedades();
+               virtual void save(FILE *archivo);
        private:
                int imgActual;  
        
index 6c5301aadfeb6fdfe9b6597f2a597c6bd2008756..82a51409f12e7f795266dfd4e434f5bef6da7aba 100644 (file)
@@ -19,6 +19,9 @@ Union::~Union()
 
 bool Union::on_button_press_event(GdkEventButton *event)
 {
+       if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 1))
+               combo_entry->set_text(name);
+       
        if ((event->type == GDK_BUTTON_PRESS) && (event->button == 2 )){
                image = null;   
                image->render_to_drawable(get_window(),get_style()->get_black_gc(),0,0,0,0,image->get_width(),image->get_height(),Gdk::RGB_DITHER_NONE,0,0);
@@ -68,3 +71,23 @@ void Union::on_menu_popup_propiedades()
        event.button = 1;
        Union::on_button_press_event(&event);
 }
+
+void Union::save(FILE *archivo)
+{
+       char c_id[50], c_caudal[50], c_x[50], c_y[50], c_img[50];
+       sprintf(c_x,"\t\t<x>%d</x>\n",x);
+       sprintf(c_y,"\t\t<y>%d</y>\n",y);
+       sprintf(c_id,"%d",ID);
+       sprintf(c_caudal,"\t\t<caudal>%.2f</caudal>\n", caudal_max);
+       sprintf(c_img,"\t\t<orientacion>%d</orientacion>\n",imgActual);
+       Glib::ustring dato;
+       dato = "\t<union nombre=\""+name+"\" id=\"";
+       dato += c_id;
+       dato += "\">\n";
+       dato += c_caudal;
+       dato += c_img;
+       dato += c_x; 
+       dato += c_y;
+       dato += "\t</union>\n";
+       fprintf(archivo,dato.c_str());  
+}
index 5f6279bb0f687832db142da12f507db81fe71722..aa435b694873541a88c2f1998a46389c3b3490d4 100644 (file)
@@ -11,6 +11,7 @@ class Union : public CItem {
                virtual bool on_button_press_event(GdkEventButton *event);
                virtual void on_menu_popup_rotar();
                virtual void on_menu_popup_propiedades();
+               virtual void save(FILE *archivo);
        private:
                int imgActual;