diff options
| author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2022-02-06 16:04:24 +0100 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2022-02-06 16:04:24 +0100 | 
| commit | 5d2c2b27a6323e2666378b986129b2a7c2c39e5c (patch) | |
| tree | ce8982b6c0111f79791068de2c2d4c6ce3138a49 /app/bin/cmodify.c | |
| parent | b623f5953691b2a0614e6f1f4def86bdbb9a4113 (diff) | |
New upstream version 5.2.2GAupstream/5.2.2GA
Diffstat (limited to 'app/bin/cmodify.c')
| -rw-r--r-- | app/bin/cmodify.c | 98 | 
1 files changed, 63 insertions, 35 deletions
diff --git a/app/bin/cmodify.c b/app/bin/cmodify.c index 8f82012..1e66e74 100644 --- a/app/bin/cmodify.c +++ b/app/bin/cmodify.c @@ -20,8 +20,6 @@   *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.   */ -#include <math.h> -  #include "cjoin.h"  #include "ccurve.h"  #include "cbezier.h" @@ -29,14 +27,13 @@  #include "cstraigh.h"  #include "cundo.h"  #include "fileio.h" -#include "i18n.h" -#include "messages.h"  #include "param.h"  #include "track.h" -#include "utility.h"  #include "drawgeom.h"  #include "common.h"  #include "layout.h" +#include "cselect.h" +#include "common-ui.h"  static struct {  		track_p Trk; @@ -64,6 +61,7 @@ static BOOL_T modifyBezierMode;  static BOOL_T modifyCornuMode;  static BOOL_T modifyDrawMode;  static BOOL_T modifyRulerMode; +static BOOL_T modifyProtractorMode;  static BOOL_T modifyExtendMode; @@ -79,6 +77,7 @@ static void CreateEndAnchor(coOrd p, wBool_t lock) {  	anchors(i).u.c.a0 = 0.0;  	anchors(i).u.c.a1 = 360.0;  	anchors(i).width = 0; +	wSetCursor(mainD.d,wCursorNone);  }  static void CreateCornuAnchor(coOrd p, wBool_t lock) { @@ -102,6 +101,7 @@ static void CreateCornuAnchor(coOrd p, wBool_t lock) {  	anchors(i).u.c.a0 = 0.0;  	anchors(i).u.c.a1 = 360.0;  	anchors(i).width = 0; +	wSetCursor(mainD.d,wCursorNone);  } @@ -172,7 +172,7 @@ static STATUS_T ModifyCornu(wAction_t action, coOrd pos) {  }  /* - * Picking a DRAW will allow point modifications until terminated with "Enter" + * Picking a DRAW will allow point modifications until terminated with "Enter"/"Space"   */  static STATUS_T ModifyDraw(wAction_t action, coOrd pos) {  	STATUS_T rc = C_CONTINUE; @@ -189,21 +189,22 @@ static STATUS_T ModifyDraw(wAction_t action, coOrd pos) {  			break;  		case C_TEXT:  			//Delete or '0' - continues -			if ((action>>8 !=32) && (action >>8 !=13)) +			if ((action>>8 !=32) && (action >>8 !=13) && (action >>8 !=9))  				return ModifyTrack( Dex.Trk, action, pos ); -			//Enter/Space does not -			if ((action>>8 !=32) && (action>>8 != 13)) return C_CONTINUE; +			//Enter/Space/Tab does not +			if ((action>>8 !=32) && (action>>8 != 13) && (action>>8 != 9)) return C_CONTINUE; +			if (((action>>8) == 9 && (MyGetKeyState()&WKEY_SHIFT))) return C_TERMINATE;  			/*no break*/  		case C_OK: -			UndoStart( _("Modify Track"), "Modify( T%d[%d] )", GetTrkIndex(Dex.Trk), Dex.params.ep ); -			UndoModify( Dex.Trk ); -			rc = ModifyTrack( Dex.Trk, C_TEXT | (13<<8), pos ); +			rc = ModifyTrack( Dex.Trk, C_OK, pos );  			if (rc != C_CONTINUE) modifyDrawMode = FALSE;  			UndoEnd();  			break; +		case C_CONFIRM: +			rc = ModifyTrack( Dex.Trk, action, pos ); +			break;  		case C_CANCEL:  		case C_FINISH: -		case C_CONFIRM:  		case C_TERMINATE:  			rc = ModifyTrack( Dex.Trk, action, pos );  			Dex.Trk = NULL; @@ -218,6 +219,9 @@ static STATUS_T ModifyDraw(wAction_t action, coOrd pos) {  			menuPos = pos;  			rc = ModifyTrack( Dex.Trk, action, pos );  			break; +		case wActionExtKey: +			rc = ModifyTrack( Dex.Trk, action, pos ); +			break;  		default:  			break;  	} @@ -269,35 +273,46 @@ STATUS_T CmdModify(  		modifyCornuMode = FALSE;  		modifyDrawMode = FALSE;  		modifyExtendMode = FALSE; +		modifyRulerMode = FALSE; +		modifyProtractorMode = FALSE; +		SetAllTrackSelect( FALSE );  		return C_CONTINUE;  	case C_DOWN: +	case C_LDOUBLE:  		DYNARR_RESET(trkSeg_t,anchors_da); +		if (modifyProtractorMode) +			return ModifyProtractor(C_DOWN, pos);  		if (modifyBezierMode)  			return ModifyBezier(C_DOWN, pos);  		if (modifyCornuMode)  			return ModifyCornu(C_DOWN, pos);  		if (modifyDrawMode)  			return ModifyDraw(C_DOWN, pos); -		/*no break*/ -	case C_LDOUBLE: +  		DYNARR_SET( trkSeg_t, tempSegs_da, 2 );  		tempSegs(0).color = wDrawColorBlack;  		tempSegs(0).width = 0;  		tempSegs(1).color = wDrawColorBlack;  		tempSegs(1).width = 0;  		tempSegs_da.cnt = 0; -		Dex.Trk = OnTrack( &pos, TRUE, FALSE ); +		Dex.Trk = OnTrack( &pos, FALSE, FALSE );  		//Dex.Trk = trk;  		if (Dex.Trk == NULL) { -			if ( ModifyRuler( C_DOWN, pos ) == C_CONTINUE ) +			if ( ModifyRuler( C_DOWN, pos ) == C_CONTINUE ) {  				modifyRulerMode = TRUE; +			} else if (ModifyProtractor( C_DOWN, pos ) == C_CONTINUE ) { +				modifyProtractorMode = TRUE; +			} else { +				InfoMessage("Not on object, or Ruler, or Protractor"); +				wBeep(); +			}  			return C_CONTINUE;  		}  		if (!CheckTrackLayer( Dex.Trk ) ) {  			Dex.Trk = NULL; -			return C_CONTINUE; +			return C_ERROR;  		}  		trackGauge = (IsTrack(Dex.Trk)?GetTrkGauge(Dex.Trk):0.0);  		if (QueryTrack( Dex.Trk, Q_CAN_MODIFY_CONTROL_POINTS )) { //Bezier @@ -374,6 +389,7 @@ STATUS_T CmdModify(  		if (modifyDrawMode) return ModifyDraw(wActionMove,pos);  		if (modifyBezierMode) return ModifyBezier(wActionMove, pos);  		track_p t; +		wSetCursor(mainD.d,defaultCursor);  		if (((t=OnTrack(&pos,FALSE,TRUE))!= NULL) && CheckTrackLayerSilent( t )) {  			EPINX_T ep = PickUnconnectedEndPointSilent(pos, t);  			if (QueryTrack( t, Q_IS_CORNU )) { @@ -387,6 +403,7 @@ STATUS_T CmdModify(  				ANGLE_T a = tp.angle;  				Translate(&pos,tp.ttcenter,a,tp.ttradius);  				CreateRadiusAnchor(pos,a,FALSE); +				wSetCursor(mainD.d,wCursorNone);  			} else if (QueryTrack(t,Q_CAN_EXTEND)) {  				if (ep != -1) {  					if (MyGetKeyState()&WKEY_CTRL) { @@ -418,15 +435,19 @@ STATUS_T CmdModify(  				}  			}  		} else if (((t=OnTrack(&pos,FALSE,FALSE))!= NULL) -				&& (!(GetLayerFrozen(GetTrkLayer(t)) && GetLayerModule(GetTrkLayer(t)))) +				&& (!(GetLayerFrozen(GetTrkLayer(t)) || GetLayerModule(GetTrkLayer(t))))  				&& (QueryTrack(t, Q_IS_DRAW ) && !QueryTrack(t, Q_IS_TEXT)) ) {  			CreateEndAnchor(pos,FALSE); +		} else { +			ModifyRuler (wActionMove, pos);  		}  		return C_CONTINUE;  	case C_MOVE:  		if ( modifyRulerMode )  			return ModifyRuler( C_MOVE, pos ); +		if ( modifyProtractorMode ) +			return ModifyProtractor( C_MOVE, pos );  		if (Dex.Trk == NULL)  			return C_CONTINUE;  		if ( modifyBezierMode ) @@ -439,7 +460,7 @@ STATUS_T CmdModify(  			goto extendTrackMove;  		tempSegs_da.cnt = 0; -		SnapPos( &pos ); +		if ((MyGetKeyState() & WKEY_ALT) == 0) SnapPos( &pos );  		rc = ModifyTrack( Dex.Trk, C_MOVE, pos );  		if ( rc != C_CONTINUE ) {  			rc = C_CONTINUE; @@ -453,6 +474,8 @@ STATUS_T CmdModify(  			return C_CONTINUE;  		if ( modifyRulerMode )  			return ModifyRuler( C_MOVE, pos ); +		if ( modifyProtractorMode) +			return ModifyProtractor( C_UP, pos);  		if ( modifyBezierMode )  			return ModifyBezier( C_UP, pos);  		if (modifyCornuMode) @@ -463,7 +486,7 @@ STATUS_T CmdModify(  		tempSegs_da.cnt = 0; -		SnapPos( &pos ); +		if ((MyGetKeyState() & WKEY_ALT) == 0) SnapPos( &pos );  		UndoStart( _("Modify Track"), "Modify( T%d[%d] )", GetTrkIndex(Dex.Trk), Dex.params.ep );  		UndoModify( Dex.Trk );  		rc = ModifyTrack( Dex.Trk, C_UP, pos ); @@ -477,6 +500,7 @@ extendTrack:  		changeTrackMode = TRUE;  		modifyExtendMode = TRUE;  		modifyRulerMode = FALSE; +		modifyProtractorMode = FALSE;  		modifyBezierMode = FALSE;  		modifyCornuMode = FALSE;  		modifyDrawMode = FALSE; @@ -486,7 +510,7 @@ extendTrack:  			if (Dex.Trk) {  				if (!CheckTrackLayer( Dex.Trk ) ) {  					Dex.Trk = NULL; -					return C_CONTINUE; +					return C_ERROR;  				}  				trackGauge = GetTrkGauge( Dex.Trk );  				Dex.pos00 = pos; @@ -525,7 +549,7 @@ extendTrackMove:  		tempSegs_da.cnt = 0;  		Dex.valid = FALSE;  		if (Dex.Trk == NULL) return C_CONTINUE; -		SnapPos( &pos ); +		if ((MyGetKeyState() & WKEY_ALT) == 0) SnapPos( &pos );  		if ( Dex.first && FindDistance( pos, Dex.pos00 ) <= minLength )  			return C_CONTINUE;  		Dex.first = FALSE; @@ -543,9 +567,9 @@ extendTrackMove:  					Rotate(&pos,Dex.params.cornuCenter[Dex.params.ep],angle);  				}  			} else pos = Dex.pos00;					//Only out from end -			PlotCurve( crvCmdFromCornu, Dex.pos00, Dex.pos00x, pos, &Dex.curveData, FALSE ); +			PlotCurve( crvCmdFromCornu, Dex.pos00, Dex.pos00x, pos, &Dex.curveData, FALSE, 0.0 );  		} else -			PlotCurve( crvCmdFromEP1, Dex.pos00, Dex.pos00x, pos, &Dex.curveData, TRUE ); +			PlotCurve( crvCmdFromEP1, Dex.pos00, Dex.pos00x, pos, &Dex.curveData, TRUE, 0.0 );  		curveType = Dex.curveData.type;  		if ( curveType == curveTypeStraight ) {  			Dex.r1 = 0.0; @@ -724,14 +748,17 @@ LOG( log_modify, 1, ("R = %0.3f, A0 = %0.3f, A1 = %0.3f\n",  		if ((action>>8) == 'c') {  			panCenter = pos;  			LOG( log_pan, 2, ( "PanCenter:Mod-%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) ); -			PanHere((void*)0); +			PanHere(I2VP(0));  			return C_CONTINUE;  		}  		if ((action>>8) == 'e') { -			DoZoomExtents(0); +			DoZoomExtents(I2VP(0)); +		} +		if ((action>>8) == 's') { +			DoZoomExtents(I2VP(1));  		}  		if ((action>>8) == '0' || (action>>8 == 'o')) { -			PanMenuEnter('o'); +			PanMenuEnter(I2VP('o'));  		}  		if ( !Dex.Trk )  			return C_CONTINUE; @@ -792,14 +819,15 @@ extern wIndex_t describeCmdInx;  void InitCmdModify( wMenu_p menu )  { -	modifyCmdInx = AddMenuButton( menu, CmdModify, "cmdModify", _("Modify"), wIconCreatePixMap(extend_xpm), LEVEL0_50, IC_STICKY|IC_POPUP|IC_WANT_MOVE|IC_CMDMENU, ACCL_MODIFY, NULL ); +	modifyCmdInx = AddMenuButton( menu, CmdModify, "cmdModify", _("Modify"), wIconCreatePixMap(extend_xpm[iconSize]), LEVEL0_50, IC_STICKY|IC_POPUP|IC_WANT_MOVE|IC_CMDMENU, ACCL_MODIFY, NULL ); +	/** @logcmd @showrefby modify=n cmodify.c Log Modify command */  	log_modify = LogFindIndex( "modify" );  	modPopupM = MenuRegister( "Modify Context Menu" ); -	wMenuPushCreate(modPopupM, "cmdSelectMode", GetBalloonHelpStr("cmdSelectMode"), 0, DoCommandB, (void*) (intptr_t) selectCmdInx); -	wMenuPushCreate(modPopupM, "cmdDescribeMode", GetBalloonHelpStr("cmdDescribeMode"), 0, DoCommandB, (void*) (intptr_t) describeCmdInx); -	wMenuPushCreate(modPopupM, "cmdPanMode", GetBalloonHelpStr("cmdPanMode"), 0, DoCommandB, (void*) (intptr_t) panCmdInx); +	wMenuPushCreate(modPopupM, "cmdSelectMode", GetBalloonHelpStr("cmdSelectMode"), 0, DoCommandB, I2VP(selectCmdInx)); +	wMenuPushCreate(modPopupM, "cmdDescribeMode", GetBalloonHelpStr("cmdDescribeMode"), 0, DoCommandB, I2VP(describeCmdInx)); +	wMenuPushCreate(modPopupM, "cmdPanMode", GetBalloonHelpStr("cmdPanMode"), 0, DoCommandB, I2VP(panCmdInx));  	wMenuSeparatorCreate(modPopupM); -	wMenuPushCreate(modPopupM, "", _("Zoom In"), 0,(wMenuCallBack_p) DoZoomUp, (void*) 1); -	wMenuPushCreate(modPopupM, "", _("Zoom Out"), 0,	(wMenuCallBack_p) DoZoomDown, (void*) 1); -	wMenuPushCreate(modPopupM, "", _("Pan center - 'c'"), 0,	(wMenuCallBack_p) PanHere, (void*) 3); +	wMenuPushCreate(modPopupM, "", _("Zoom In"), 0, DoZoomUp, I2VP(1)); +	wMenuPushCreate(modPopupM, "", _("Zoom Out"), 0, DoZoomDown, I2VP(1)); +	wMenuPushCreate(modPopupM, "", _("Pan center - 'c'"), 0, PanHere, I2VP(3));  }  | 
