/************************************************************************ ** ** FILE : hakasetz.c ** ** ZWECK : ** ** AUTOR : Michael C. Ancutici ** Universitaet Stuttgart, Fakultaet Informatik ** ** DATUM : 14.03.93 ** *************************************************************************/ #include "hakasetz.h" #include "haka.H" #include "haka.h" #include "kawin.h" #include "ka.h" #include "tra.h" #include "ste.h" #include "hamess.h" #include "hakadraw.h" #include "cellkalook.h" #include "kaio.h" #include "celltype.h" #include "cellkaio.h" #include "hakamisc.h" static String KaFuncOn = ": HaKaSetStart() \n\ : \n\ : \n\ : \n\ : \n\ :"; /************************************************************************* ** FUNKTION: HaKaSetSTZiel ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ void HaKaSetSTZiel( w, event, SNr) Widget w; XEvent *event; int SNr; { ECKE *e; char ergLook; XtPointer d; int x = ((XButtonEvent *)event)->x; int y = ((XButtonEvent *)event)->y; int TNr; KAWIN_SPEC KaWinSpec; /**** EXISTIERT ZIELKNOTEN ? **********************************/ if (!CellKaGetZiel( x, y, CE_TRANSITION, &TNr)) { HaMessage( HA_NO_TRANS_FOUND); return; } /**** EXISTIERT KANTE BEREITS ? *******************************/ if ((KaKante[ SNr][ TNr].NachTrans)) { HaMessage( HA_KA_EXIST); return; } /**** IN CELL PRUEFEN, OB STELLE ODER TRANS IM WEG ************/ ergLook = CellKaLookFor( HaKaFirst.x, HaKaFirst.y, x, y, ((Ecke) ? CE_NOTHING : SNr), TNr ); if (ergLook != CE_OK) { HaMessage( HA_OBJ_NEAR_OBJ); return; } /**** KANTENDATEN EINTRAGEN ***********************************/ HaKaDClearX( SNr, TNr); if (KaNeu( -1, SNr, TNr, ENeuNr, Ecke) < 0) { HaMessage( HA_NO_FREE_KA); HaKaDWriteX( SNr, TNr); return; } HaKaDWriteX( SNr, TNr); /**** KANTENZUG ENDGUELTIG ZEICHNEN ************************************/ /**** es fehlen : Eckrundungen, **/ HaKaDrawXIntern( CE_STELLE, SNr, CE_TRANSITION, TNr, Ecke, KaGC, TRUE); HaKaRedraw(); /**** KANTENZUG IN CELL EINTRAGEN *********************************/ CellSTKaInsert( SNr, TNr); ENeuNr = 0; Ecke = NULL; XtOverrideTranslations( HaGraphPlane, XtParseTranslationTable( KaFuncOn)); HaMessage( HA_CLEAR); /**** ATTRIBUTE SETZEN ? *********************************************/ if ( ((XButtonEvent *)event)->button == 2) { KaWinSpec.SNr = SNr; KaWinSpec.TNr = TNr; KaWinSpec.ST = TRUE; KaWinPopup( HaGraphPlane, (XtPointer)(&KaWinSpec), d); } } /************************************************************************* ** FUNKTION: HaKaSetTSZiel ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ void HaKaSetTSZiel( w, event, TNr) Widget w; XEvent *event; int TNr; { ECKE *e; char ergLook; XtPointer d; int x = ((XButtonEvent *)event)->x; int y = ((XButtonEvent *)event)->y; int SNr; KAWIN_SPEC KaWinSpec; /**** EXISTIERT ZIELKNOTEN ? ****************************************/ if ( !CellKaGetZiel( x, y, CE_STELLE, &SNr) ) { HaMessage( HA_NO_STELLE_FOUND); return; } /**** EXISTIERT KANTE BEREITS ? *******************************/ if ( (KaKante[ SNr][ TNr].NachStelle) ) { HaMessage( HA_KA_EXIST); return; } /**** IN CELL PRUEFEN, OB STELLE ODER TRANS IM WEG ************/ ergLook = CellKaLookFor( HaKaFirst.x, HaKaFirst.y, x, y, SNr, ((Ecke) ? CE_NOTHING : TNr) ) ; if (ergLook != CE_OK) { HaMessage( HA_OBJ_NEAR_OBJ); return; } /**** KANTENDATEN EINTRAGEN ***********************************/ HaKaDClearX( SNr, TNr); if (KaNeu( +1, SNr, TNr, ENeuNr, Ecke) < 0) { HaMessage( HA_NO_FREE_KA); HaKaDWriteX( SNr, TNr); return; } HaKaDWriteX( SNr, TNr); /**** KANTENZUG ENDGUELTIG ZEICHNEN ************************************/ /**** es fehlen : Eckrundungen, **/ HaKaDrawXIntern( CE_TRANSITION, TNr, CE_STELLE, SNr, Ecke, KaGC, TRUE); HaKaRedraw(); /**** KANTENZUG IN CELL EINTRAGEN *********************************/ CellTSKaInsert( SNr, TNr); ENeuNr = 0; Ecke = NULL; XtOverrideTranslations( HaGraphPlane, XtParseTranslationTable( KaFuncOn)); HaMessage( HA_CLEAR); /**** ATTRIBUTE SETZEN ? **********************************************/ if ( ((XButtonEvent *)event)->button == 2) { /* Attribute setzen ? */ KaWinSpec.SNr = SNr; KaWinSpec.TNr = TNr; KaWinSpec.ST = FALSE; KaWinPopup( HaGraphPlane, &KaWinSpec, d); } } /************************************************************************* ** FUNKTION: HaKaSetZiel ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ void HaKaSetZiel( w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params; { if (StartTyp == CE_STELLE) HaKaSetSTZiel( w, event, StartNr); else HaKaSetTSZiel( w, event, StartNr); }