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;
}