]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Constructor/splitter.cpp
Se corrige un bug.
[z.facultad/75.42/plaqui.git] / Constructor / splitter.cpp
1 #include "splitter.h"
2
3 Splitter::Splitter()
4 {
5         imageN = Gdk::Pixbuf::create_from_file("codo_n.png");
6         imageS = Gdk::Pixbuf::create_from_file("codo_s.png");
7         imageE = Gdk::Pixbuf::create_from_file("codo_e.png");
8         imageO = Gdk::Pixbuf::create_from_file("codo_o.png");
9         null = Gdk::Pixbuf::create_from_file("null.png");
10         imgActual = 0;
11         image = imageO;
12         set_size_request(image->get_width(), image->get_height());
13         property_wnd->set_title("Propiedades del Codo");        
14         name = "codo";
15         Connector temp;
16         temp.id_dest = -1;
17         temp.type = UNDEF;
18         connect_vec.push_back(temp);
19         connect_vec.push_back(temp);
20 }
21
22 Splitter::~Splitter()
23 {
24 }
25
26 bool Splitter::on_button_press_event(GdkEventButton *event)
27 {
28         if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 1))
29                 combo_entry->set_text(name);
30         
31         if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 2)){
32                 image = null;   
33                 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);
34                 imgActual++;
35                 switch (imgActual) {
36                         case 1:
37                                 image = imageN;
38                                 break;
39                         case 2:
40                                 image = imageE;
41                                 break;
42                         case 3:
43                                 image = imageS;
44                                 break;
45                         default: 
46                                 imgActual = 0;
47                                 image = imageO;                 
48                 }
49                 set_size_request(image->get_width(),image->get_height());
50                 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);
51         }
52         if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 3)){
53                 menu_popup.popup(event->button, event->time);
54                  return true; //It has been handled.
55         }
56         
57         if ((event->type == GDK_2BUTTON_PRESS) && ( event->button == 1)){
58                 property_wnd->spin_caudal->set_value( caudal_max );
59                 property_wnd->txt_item_name->set_text( name );
60                 property_wnd->show();
61         }
62         return true;
63 }
64 void Splitter::on_menu_popup_rotar()
65 {
66         GdkEventButton event; 
67         event.type = GDK_BUTTON_PRESS;
68         event.button = 2;
69         Splitter::on_button_press_event(&event);
70 }
71
72 void Splitter::on_menu_popup_propiedades()
73 {
74         GdkEventButton event;
75         event.type = GDK_2BUTTON_PRESS;
76         event.button = 1;
77         Splitter::on_button_press_event(&event);
78 }
79
80 void Splitter::save(FILE *archivo)
81 {
82         char c_id[50], c_caudal[50], c_x[50], c_y[50], c_img[50];
83         sprintf(c_x,"\t\t<x>%d</x>\n",x);
84         sprintf(c_y,"\t\t<y>%d</y>\n",y);
85         sprintf(c_id,"%d",ID);
86         sprintf(c_caudal,"\t\t<caudal>%.2f</caudal>\n", caudal_max);
87         sprintf(c_img,"\t\t<orientacion>%d</orientacion>\n",imgActual);
88         Glib::ustring dato;
89         dato = "\t<codo nombre=\""+name+"\" id=\"";
90         dato += c_id;
91         dato += "\">\n";
92         dato += c_caudal;
93         dato += c_img;
94         dato += c_x; 
95         dato += c_y;
96         dato += "\t</codo>\n";
97         fprintf(archivo,dato.c_str());  
98 }
99
100 bool Splitter::check_connection()
101 {
102         switch (get_img_actual()) {
103                         case 0:
104                                 connect_vec[0].type = is_other_connection_area( get_position_x()-5, get_position_y()+16); //arriba-izquierda h
105                                 connect_vec[1].type = is_other_connection_area( get_position_x()+get_image()->get_width()-16, +get_position_y()+get_image()->get_height() + 5);//abajo-derecha v
106                                 break;  
107                         case 1:
108                                 connect_vec[0].type = is_other_connection_area( get_position_x()+get_image()->get_width() - 16, get_position_y() -5);//arriba-derecha v
109                                 connect_vec[1].type = is_other_connection_area( get_position_x()-5, get_position_y()+get_image()->get_height()-16);//abajo-izquierda h
110                                 break;
111                         case 2:
112                                 connect_vec[1].type = is_other_connection_area( get_position_x() + 16, get_position_y() - 5);//arriba-izquierda v
113                                 connect_vec[0].type = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+get_image()->get_height() - 16); //abajo-derecha h
114                                 break;
115                         case 3:
116                                 connect_vec[1].type = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y() +16);//arriba-derecha h
117                                 connect_vec[0].type = is_other_connection_area( get_position_x() + 16, get_position_y()+get_image()->get_height() + 5); //abajo-izquierda v
118         }
119         if (connect_vec[0].type != UNDEF && connect_vec[1].type != UNDEF) 
120                 return ( is_connected = (connect_vec[0].type == connect_vec[1].type) );
121         else return false;
122 }
123
124 ConnectorType Splitter::get_connector_type(int _a, int _b)
125 {
126         if ( ! is_connected ) {
127                 switch (imgActual) {
128                         case 0: 
129                                 if ( (_a <= x+10)&&(_a > x) && (_b <=y+22)&&(_b>=y+10) ) // arriba - izquierda h
130                                         return is_other_connection_area (get_position_x()+get_image()->get_width()-16, +get_position_y()+get_image()->get_height() + 5);
131                                 if ( (_a <= x+image->get_width()-10)&&(_a>=x+image->get_width()-22)&&(_b<=y+image->get_height()-1)&&(_b>=y+image->get_height()-10) )//abajo-derecha v
132                                         return is_other_connection_area( get_position_x()-5, get_position_y()+16);
133                                 break;
134                         case 1:
135                                  if ( (_a <= x+image->get_width()-10)&&(_a >= x+image->get_width()-22) && (_b <=y+10)&&(_b > y) ) //arriba-derecha v
136                                          return  is_other_connection_area( get_position_x()-5, get_position_y()+get_image()->get_height()-16);
137                                  if ( (_a <= x+10)&&(_a > x)&&(_b<=y+image->get_height()-10)&&(_b>=y+image->get_height()-22) ) // abajo-izquierda h
138                                          return is_other_connection_area( get_position_x()+get_image()->get_width() - 16, get_position_y() -5);
139                                  break;
140                         case 2:
141                                 if ( (_a <= x+22)&&(_a >= x+10) && (_b <=y+10)&&(_b > y) ) //arriba-izquierda v
142                                         return is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+get_image()->get_height() - 16); 
143                                 if  ( (_a <= x+image->get_width()-1)&&(_a>=x+image->get_width()-10)&&(_b<=y+image->get_height()-10)&&(_b>=y+image->get_height()-22) ) // abajo-derecha h
144                                         return is_other_connection_area( get_position_x() + 16, get_position_y() - 5);
145                                 break;
146                         case 3:
147                                 if ( (_a <= x+image->get_width()-1)&&(_a >= x+image->get_width()-10) && (_b <=y+22)&&(_b>=y+10) ) //arriba-derecha h
148                                         return is_other_connection_area( get_position_x() + 16, get_position_y()+get_image()->get_height() + 5);
149                                 if ( (_a <= x+22)&&(_a>=x+10)&&(_b<=y+image->get_height()-1)&&(_b>=y+image->get_height()-10) ) // abajo-izquierda v
150                                         return is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y() +16);
151                 }
152         } else {
153                 switch (imgActual) {
154                         case 0: 
155                                 if ( (_a <= x+10)&&(_a > x) && (_b <=y+22)&&(_b>=y+10) ) // arriba - izquierda h
156                                         return connect_vec[0].type;
157                                 if ( (_a <= x+image->get_width()-10)&&(_a>=x+image->get_width()-22)&&(_b<=y+image->get_height()-1)&&(_b>=y+image->get_height()-10) )//abajo-derecha v
158                                         return connect_vec[1].type;
159                                 break;
160                         case 1:
161                                  if ( (_a <= x+image->get_width()-10)&&(_a >= x+image->get_width()-22) && (_b <=y+10)&&(_b > y) ) //arriba-derecha v
162                                          return  connect_vec[0].type;
163                                  if ( (_a <= x+10)&&(_a > x)&&(_b<=y+image->get_height()-10)&&(_b>=y+image->get_height()-22) ) // abajo-izquierda h
164                                          return connect_vec[1].type;
165                                  break;
166                         case 2:
167                                 if ( (_a <= x+22)&&(_a >= x+10) && (_b <=y+10)&&(_b > y) ) //arriba-izquierda v
168                                         return connect_vec[1].type;
169                                 if  ( (_a <= x+image->get_width()-1)&&(_a>=x+image->get_width()-10)&&(_b<=y+image->get_height()-10)&&(_b>=y+image->get_height()-22) ) // abajo-derecha h
170                                         return connect_vec[0].type;
171                                 break;
172                         case 3:
173                                 if ( (_a <= x+image->get_width()-1)&&(_a >= x+image->get_width()-10) && (_b <=y+22)&&(_b>=y+10) ) //arriba-derecha h
174                                         return connect_vec[1].type;
175                                 if ( (_a <= x+22)&&(_a>=x+10)&&(_b<=y+image->get_height()-1)&&(_b>=y+image->get_height()-10) ) // abajo-izquierda v
176                                         return connect_vec[0].type;
177                 }
178         }
179         return UNDEF;
180 }       
181
182 void Splitter::set_default_connector()
183 {
184         connect_vec[0].type = UNDEF;
185         connect_vec[1].type = UNDEF;
186 }