X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/f85e6b00bd29ddff6067db8c6d4c56f53bcf4c0b..fb8d2fb83534b0ca76f81e6d107e38d002642a46:/Constructor/src/splitter.cpp?ds=sidebyside diff --git a/Constructor/src/splitter.cpp b/Constructor/src/splitter.cpp index 45d60ce..ea7f2d4 100644 --- a/Constructor/src/splitter.cpp +++ b/Constructor/src/splitter.cpp @@ -2,6 +2,7 @@ Splitter::Splitter(int orientacion) { + in_x = -1; imageN = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/codo_n.png"); imageS = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/codo_s.png"); imageE = Gdk::Pixbuf::create_from_file(PACKAGE_DATA_DIR"/plaqui-constructor/pixmaps/codo_e.png"); @@ -38,8 +39,13 @@ 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 == 1)) { + list_pointed->push_back(name); + combo_entry->set_popdown_strings(*list_pointed); + combo_entry->get_entry()->set_text (name); + workplace->queue_draw(); + WorkPlace::pointed = ID; + } if ((event->type == GDK_BUTTON_PRESS) && ( event->button == 2)){ image = null; @@ -122,91 +128,195 @@ void Splitter::save(FILE *archivo) bool Splitter::check_connection() { - ConnectorType aux; + ConnectorType aux, aux1, aux2; CItem *_item0, *_item1; switch (get_img_actual()) { case 0: - connect_vec[0].type = is_other_connection_area( get_position_x()-5, get_position_y()+16, &_item0); //arriba-izquierda h - connect_vec[1].type = is_other_connection_area( get_position_x()+get_image()->get_width()-16, +get_position_y()+get_image()->get_height() + 5, &_item1);//abajo-derecha v + aux1 = is_other_connection_area( get_position_x()-5, get_position_y()+16, &_item0); //arriba-izquierda h + aux2 = is_other_connection_area( get_position_x()+get_image()->get_width()-16, +get_position_y()+get_image()->get_height() + 5, &_item1);//abajo-derecha v break; case 1: - connect_vec[0].type = is_other_connection_area( get_position_x()+get_image()->get_width() - 16, get_position_y() -5,& _item0);//arriba-derecha v - connect_vec[1].type = is_other_connection_area( get_position_x()-5, get_position_y()+get_image()->get_height()-16, &_item1);//abajo-izquierda h + aux1 = is_other_connection_area( get_position_x()+get_image()->get_width() - 16, get_position_y() -5,& _item0);//arriba-derecha v + aux2 = is_other_connection_area( get_position_x()-5, get_position_y()+get_image()->get_height()-16, &_item1);//abajo-izquierda h break; case 2: - connect_vec[1].type = is_other_connection_area( get_position_x() + 16, get_position_y() - 5, &_item1);//arriba-izquierda v - connect_vec[0].type = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+get_image()->get_height() - 16, &_item0); //abajo-derecha h + aux2 = is_other_connection_area( get_position_x() + 16, get_position_y() - 5, &_item1);//arriba-izquierda v + aux1 = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+get_image()->get_height() - 16, &_item0); //abajo-derecha h break; case 3: - connect_vec[1].type = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y() +16,& _item1);//arriba-derecha h - connect_vec[0].type = is_other_connection_area( get_position_x() + 16, get_position_y()+get_image()->get_height() + 5, &_item0); //abajo-izquierda v + aux2 = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y() +16,& _item1);//arriba-derecha h + aux1 = is_other_connection_area( get_position_x() + 16, get_position_y()+get_image()->get_height() + 5, &_item0); //abajo-izquierda v } - if (connect_vec[0].type != UNDEF && connect_vec[1].type != UNDEF) { - aux = connect_vec[0].type; - connect_vec[0].type = connect_vec[1].type; - connect_vec[1].type = aux; + if ((aux2 != UNDEF) && (aux1 != UNDEF)) { + if (!is_connected) { + connect_vec[0].type = aux2; + connect_vec[1].type = aux1; + } connect_vec[0].id_dest = _item0->get_id(); connect_vec[1].id_dest = _item1->get_id(); return ( is_connected = (connect_vec[0].type != connect_vec[1].type) ); } - else return is_connected; + return is_connected = false; } ConnectorType Splitter::get_connector_type(int _a, int _b) { CItem *_item; - if ( ! is_connected ) { - switch (imgActual) { - case 0: - if ( (_a <= x+10)&&(_a > x) && (_b <=y+22)&&(_b>=y+10) ) // arriba - izquierda h - return is_other_connection_area (get_position_x()+get_image()->get_width()-16, +get_position_y()+get_image()->get_height() + 5, &_item); - 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 - return is_other_connection_area( get_position_x()-5, get_position_y()+16,& _item); - break; - case 1: - if ( (_a <= x+image->get_width()-10)&&(_a >= x+image->get_width()-22) && (_b <=y+10)&&(_b > y) ) //arriba-derecha v - return is_other_connection_area( get_position_x()-5, get_position_y()+get_image()->get_height()-16, &_item); - if ( (_a <= x+10)&&(_a > x)&&(_b<=y+image->get_height()-10)&&(_b>=y+image->get_height()-22) ) // abajo-izquierda h - return is_other_connection_area( get_position_x()+get_image()->get_width() - 16, get_position_y() -5, &_item); - break; - case 2: - if ( (_a <= x+22)&&(_a >= x+10) && (_b <=y+10)&&(_b > y) ) //arriba-izquierda v - return is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+get_image()->get_height() - 16, &_item); - 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 - return is_other_connection_area( get_position_x() + 16, get_position_y() - 5,& _item); - break; - case 3: - if ( (_a <= x+image->get_width()-1)&&(_a >= x+image->get_width()-10) && (_b <=y+22)&&(_b>=y+10) ) //arriba-derecha h - return is_other_connection_area( get_position_x() + 16, get_position_y()+get_image()->get_height() + 5, &_item); - if ( (_a <= x+22)&&(_a>=x+10)&&(_b<=y+image->get_height()-1)&&(_b>=y+image->get_height()-10) ) // abajo-izquierda v - return is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y() +16,& _item); - } - } else { - switch (imgActual) { - case 0: - if ( (_a <= x+10)&&(_a > x) && (_b <=y+22)&&(_b>=y+10) ) // arriba - izquierda h - return connect_vec[0].type; - 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 - return connect_vec[1].type; - break; - case 1: - if ( (_a <= x+image->get_width()-10)&&(_a >= x+image->get_width()-22) && (_b <=y+10)&&(_b > y) ) //arriba-derecha v - return connect_vec[0].type; - if ( (_a <= x+10)&&(_a > x)&&(_b<=y+image->get_height()-10)&&(_b>=y+image->get_height()-22) ) // abajo-izquierda h - return connect_vec[1].type; - break; - case 2: - if ( (_a <= x+22)&&(_a >= x+10) && (_b <=y+10)&&(_b > y) ) //arriba-izquierda v - return connect_vec[1].type; - 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 - return connect_vec[0].type; - break; - case 3: - if ( (_a <= x+image->get_width()-1)&&(_a >= x+image->get_width()-10) && (_b <=y+22)&&(_b>=y+10) ) //arriba-derecha h - return connect_vec[1].type; - if ( (_a <= x+22)&&(_a>=x+10)&&(_b<=y+image->get_height()-1)&&(_b>=y+image->get_height()-10) ) // abajo-izquierda v - return connect_vec[0].type; - } + switch (imgActual) { + case 0: + if ( (_a <= x+10)&&(_a > x) && (_b <=y+22)&&(_b>=y+10) ) {// arriba - izquierda h + if ( is_connected ) return connect_vec[0].type; + connect_vec[1].type = is_other_connection_area (get_position_x()+get_image()->get_width()-16, +get_position_y()+get_image()->get_height() + 5, &_item); + switch ( connect_vec[1].type ) { + case IN: + connect_vec[0].type = IN; + connect_vec[1].type = OUT; + break; + case OUT: + connect_vec[0].type = OUT; + connect_vec[1].type = IN; + break; + case UNDEF: + return UNDEF; + } + is_connected = true; + return connect_vec[0].type; + } + 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 + if ( is_connected ) return connect_vec[1].type; + connect_vec[0].type = is_other_connection_area( get_position_x()-5, get_position_y()+16,& _item); + switch ( connect_vec[0].type ) { + case IN: + connect_vec[0].type = OUT; + connect_vec[1].type = IN; + break; + case OUT: + connect_vec[0].type = IN; + connect_vec[1].type = OUT; + break; + case UNDEF: + return UNDEF; + } + is_connected = true; + return connect_vec[1].type; + } + break; + case 1: + if ( (_a <= x+image->get_width()-10)&&(_a >= x+image->get_width()-22) && (_b <=y+10)&&(_b > y) ) {//arriba-derecha v + if (is_connected) return connect_vec[0].type; + connect_vec[1].type = is_other_connection_area( get_position_x()-5, get_position_y()+get_image()->get_height()-16, &_item); + switch ( connect_vec[1].type ) { + case IN: + connect_vec[0].type = IN; + connect_vec[1].type = OUT; + break; + case OUT: + connect_vec[0].type = OUT; + connect_vec[1].type = IN; + break; + case UNDEF: + return UNDEF; + } + is_connected = true; + return connect_vec[0].type; + } + + if ( (_a <= x+10)&&(_a > x)&&(_b<=y+image->get_height()-10)&&(_b>=y+image->get_height()-22) ) {// abajo-izquierda h + if ( is_connected ) return connect_vec[1].type; + connect_vec[0].type = is_other_connection_area( get_position_x()+get_image()->get_width() - 16, get_position_y() -5, &_item); + switch ( connect_vec[0].type ) { + case IN: + connect_vec[0].type = OUT; + connect_vec[1].type = IN; + break; + case OUT: + connect_vec[0].type = IN; + connect_vec[1].type = OUT; + break; + case UNDEF: + return UNDEF; + } + is_connected = true; + return connect_vec[1].type; + } + break; + case 2: + if ( (_a <= x+22)&&(_a >= x+10) && (_b <=y+10)&&(_b > y) ) {//arriba-izquierda v + if ( is_connected ) return connect_vec[1].type; + connect_vec[0].type = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+get_image()->get_height() - 16, &_item); + switch ( connect_vec[0].type ) { + case IN: + connect_vec[0].type = OUT; + connect_vec[1].type = IN; + break; + case OUT: + connect_vec[0].type = IN; + connect_vec[1].type = OUT; + break; + case UNDEF: + return UNDEF; + } + is_connected = true; + return connect_vec[1].type; + } + + 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 + if (is_connected ) return connect_vec[0].type; + connect_vec[1].type = is_other_connection_area( get_position_x() + 16, get_position_y() - 5,& _item); + switch ( connect_vec[1].type ) { + case IN: + connect_vec[0].type = IN; + connect_vec[1].type = OUT; + break; + case OUT: + connect_vec[0].type = OUT; + connect_vec[1].type = IN; + break; + case UNDEF: + return UNDEF; + } + is_connected = true; + return connect_vec[0].type; + } + break; + case 3: + if ( (_a <= x+image->get_width()-1)&&(_a >= x+image->get_width()-10) && (_b <=y+22)&&(_b>=y+10) ) {//arriba-derecha h + if ( is_connected ) return connect_vec[1].type; + connect_vec[0].type = is_other_connection_area( get_position_x() + 16, get_position_y()+get_image()->get_height() + 5, &_item); + switch ( connect_vec[0].type ) { + case IN: + connect_vec[0].type = OUT; + connect_vec[1].type = IN; + break; + case OUT: + connect_vec[0].type = IN; + connect_vec[1].type = OUT; + break; + case UNDEF: + return UNDEF; + } + is_connected = true; + return connect_vec[1].type; + } + + if ( (_a <= x+22)&&(_a>=x+10)&&(_b<=y+image->get_height()-1)&&(_b>=y+image->get_height()-10) ) {// abajo-izquierda v + if ( is_connected ) return connect_vec[0].type; + connect_vec[1].type = is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y() +16,& _item); + switch ( connect_vec[1].type ) { + case IN: + connect_vec[0].type = IN; + connect_vec[1].type = OUT; + break; + case OUT: + connect_vec[0].type = OUT; + connect_vec[1].type = IN; + break; + case UNDEF: + return UNDEF; + } + is_connected = true; + return connect_vec[0].type; + } } return UNDEF; }