diff options
Diffstat (limited to 'app/bin/dcar.c')
| -rw-r--r-- | app/bin/dcar.c | 97 | 
1 files changed, 84 insertions, 13 deletions
| diff --git a/app/bin/dcar.c b/app/bin/dcar.c index 11a5a1e..cab29e7 100644 --- a/app/bin/dcar.c +++ b/app/bin/dcar.c @@ -35,6 +35,7 @@ static int log_carList;  static int log_carInvList;  static int log_carDlgState;  static int log_carDlgList; +static int log_carDlgDims;  //static paramFloatRange_t r0_99999 = { 0, 99999, 80 };  static paramFloatRange_t r0d001_99999 = { 0.001, 99999, 80 }; @@ -1178,6 +1179,7 @@ static BOOL_T CarPartWrite(  	BOOL_T rc = TRUE;  	carPartParent_p parentP=partP->parent;  	tabString_t tabs[7]; +	long longCenterOffset = (long)(partP->dim.truckCenterOffset*1000);  	SetCLocale(); @@ -1191,8 +1193,9 @@ static BOOL_T CarPartWrite(  	         tabs[T_NUMBER].len, tabs[T_NUMBER].ptr );  	rc &= fprintf( f, "CARPART %s \"%s\"", GetScaleName(partP->parent->scale),  	               PutTitle(message) )>0; -	rc &= fprintf( f, " %ld %ld %0.3f %0.3f 0 0 %0.3f %0.3f %ld\n", +	rc &= fprintf( f, " %ld %ld %0.3f %0.3f 0 %ld %0.3f %0.3f %ld\n",  	               partP->options, partP->type, partP->dim.carLength, partP->dim.carWidth, +	               longCenterOffset,  	               partP->dim.truckCenter, partP->dim.coupledLength, wDrawGetRGB(partP->color) )>0;  	SetUserLocale(); @@ -1643,6 +1646,7 @@ static void CarItemHotbarUpdate(  		}  		carItemInx = (wIndex_t)VP2L(wListGetItemContext( (wList_p)  		                            pg->paramPtr[inx].control, carItemInx )); +		CHECK( carItemInx < carItemHotbar_da.cnt );  		item = carItemHotbar(carItemInx);  		if ( item != NULL ) {  			currCarItemPtr = item; @@ -1787,6 +1791,7 @@ static char * CarItemHotbarProc(  	char * cp;  	wWinPix_t w, h; +	CHECK( carItemInx < carItemHotbar_da.cnt );  	item = carItemHotbar(carItemInx);  	if ( item == NULL ) {  		return NULL; @@ -1811,7 +1816,8 @@ static char * CarItemHotbarProc(  			/*wListSetValue( (wList_p)newCarPLs[0].control, "Select a car" );*/  			wListSetIndex( (wList_p)newCarPLs[0].control, 0 );  			cp = CarItemHotbarProc( HB_BARTITLE, I2VP(carItemInx), NULL, NULL ); -			strncpy( newCarLabel1, cp, sizeof newCarLabel1 ); +			strncpy( newCarLabel1, cp, sizeof(newCarLabel1) -1); +			newCarLabel1[sizeof(newCarLabel1) -1] = 0;  			ParamLoadControls( &newCarPG );  			ParamGroupRecord( &newCarPG ); @@ -1869,6 +1875,8 @@ EXPORT void AddHotBarCarDesc( void )  	coOrd orig;  	coOrd size; +	LOG( log_carDlgDims, 1, ( "AddHotBarCarDesc/load carItemHB: carItemHB.cnt:%d\n", +	                          carItemInfo_da.cnt ) );  	DYNARR_SET( carItem_t*, carItemHotbar_da, carItemInfo_da.cnt );  	memcpy( &carItemHotbar(0), &carItemInfo(0),  	        carItemInfo_da.cnt * sizeof carItemHotbar(0) ); @@ -1891,6 +1899,7 @@ EXPORT void AddHotBarCarDesc( void )  			orig = zero;  			size.x = item1->dim.carLength;  			size.y = item1->dim.carWidth; +			LOG( log_carDlgDims, 1, ( "AddHotBarElement( %d: %s\n", inx, item1->title ) );  			AddHotBarElement( FormatCarTitle( item1, carHotbarContents[carHotbarModeInx] ),  			                  size, orig, FALSE, FALSE, (60.0*12.0/curScaleRatio), I2VP(inx),  			                  CarItemHotbarProc ); @@ -2128,7 +2137,9 @@ EXPORT void CarItemDraw(          int direction,          BOOL_T locoIsMaster,          vector_t *coupler, +#ifdef CAR_CLEARANCE          BOOL_T pencils, +#endif          track_p traverse)  {  	coOrd size, pos, pos2; @@ -2168,9 +2179,11 @@ EXPORT void CarItemDraw(  		DrawSegs( d, pos, item->angle-90.0, item->segPtr, item->segCnt, 0.0, color );  	} +#ifdef CAR_CLEARANCE  	if (pencils) {  // No code for pencils  	} +#endif  	if ( drawCarTrucks ) { @@ -3741,8 +3754,10 @@ static void CarDlgUpdate(  	cmp_key_t cmp_key;  	coOrd orig, size, size2;  	carPartParent_p parentP; +#ifdef TRUCK_OFFSET  	static DIST_T carDlgTruckOffsetL;  	static DIST_T carDlgTruckOffsetR; +#endif  	static long carDlgClock;  	static long carDlgCarLengthClock;  	static long carDlgTruckCenterClock; @@ -3756,6 +3771,7 @@ static void CarDlgUpdate(  	switch ( inx ) {  	case -1: +#ifdef TRUCK_OFFSET  		if ( carDlgDim.truckCenter > 0  		     && carDlgDim.carLength > carDlgDim.truckCenter ) {  			carDlgTruckOffsetL = (carDlgDim.carLength - carDlgDim.truckCenter)/2 - @@ -3766,9 +3782,18 @@ static void CarDlgUpdate(  			carDlgTruckOffsetL = 0;  			carDlgTruckOffsetR = 0;  		} +#endif  		carDlgCarLengthClock = carDlgCoupledLengthClock = carDlgTruckCenterClock =  		                               carDlgCouplerLengthClock = carDlgClock = 0; +#ifdef TRUCK_OFFSET +		LOG( log_carDlgDims, 1, +		     ( "truckCenter(%d): trkCenter:%0.3f, .carLength:%0.3f = trackOffset: %0.3f %0.3f\n", +		       carDlgDim.truckCenter, +		       carDlgDim.carLength, +		       carDlgTruckOffsetL, +		       carDlgTruckOffsetR ) ); +#endif  		redraw = TRUE;  		break; @@ -3991,17 +4016,21 @@ static void CarDlgUpdate(  	case I_CD_TRKOFFSET:  		carDlgChanged++; +#ifdef TRUCK_OFFSET  		if ( carDlgDim.truckCenterOffset == 0 ) {  			carDlgTruckOffsetL = carDlgDim.truckCenter/2;  			carDlgTruckOffsetR = carDlgTruckOffsetL;  		} else if (carDlgDim.carLength - carDlgDim.truckCenter > 2*fabs(  		                   carDlgDim.truckCenterOffset)) { -			carDlgTruckOffsetL = carDlgDim.truckCenter/2 - carDlgDim.truckCenterOffset; -			carDlgTruckOffsetR = carDlgDim.truckCenter/2 + carDlgDim.truckCenterOffset; +			carDlgTruckOffsetL = (carDlgDim.carLength-carDlgDim.truckCenter)/2 - +			                     carDlgDim.truckCenterOffset; +			carDlgTruckOffsetR = (carDlgDim.carLength-carDlgDim.truckCenter)/2 + +			                     carDlgDim.truckCenterOffset;  		} else {  			carDlgTruckOffsetL = 0;  			carDlgTruckOffsetR = 0;  		} +#endif  		if ( 2*carDlgDim.truckCenterOffset > carDlgDim.carLength -  		     carDlgDim.truckCenter) {  			ok = FALSE; @@ -4009,11 +4038,22 @@ static void CarDlgUpdate(  			             _("Truck Center Offset plus Truck Centers must be less than Car Length") );  		}  		redraw = TRUE; +#ifdef TRUCK_OFFSET +		LOG( log_carDlgDims, 1, +		     ("I_CD_TRKOFFSET: len:%0.3f, center:%0.3f, cenoff:%0.3f = offset:%0.3f %0.3f\n", +		      carDlgDim.carLength, +		      carDlgDim.truckCenter, +		      carDlgDim.truckCenterOffset, +		      carDlgTruckOffsetL, +		      carDlgTruckOffsetR ) ); +#endif  		break;  	case I_CD_TRKCENTER:  		carDlgChanged++; -		if ( carDlgDim.truckCenter == 0 ) { +#ifdef TRUCK_OFFSET +		if ( carDlgDim.truckCenter == 0 || +		     carDlgDim.truckCenterOffset == 0.0 ) {  			carDlgTruckOffsetL = 0;  			carDlgTruckOffsetR = 0;  		} else if ( carDlgDim.truckCenter < @@ -4023,12 +4063,22 @@ static void CarDlgUpdate(  			return;  		} else if ( carDlgDim.carLength - carDlgDim.truckCenter > 2*fabs(  		                    carDlgDim.truckCenterOffset) ) { -			carDlgTruckOffsetL = carDlgDim.truckCenter/2-carDlgDim.truckCenterOffset; -			carDlgTruckOffsetR = carDlgDim.truckCenter/2+carDlgDim.truckCenterOffset; +			carDlgTruckOffsetL = (carDlgDim.carLength-carDlgDim.truckCenter)/2 - +			                     carDlgDim.truckCenterOffset; +			carDlgTruckOffsetR = (carDlgDim.carLength-carDlgDim.truckCenter)/2 + +			                     carDlgDim.truckCenterOffset;  		} else {  			carDlgTruckOffsetL = 0;  			carDlgTruckOffsetR = 0;  		} +		LOG( log_carDlgDims, 1, +		     ("I_CD_TRKCENTER: len:%0.3f, center:%0.3f, cenoff:%0.3f = offset:%0.3f %0.3f\n", +		      carDlgDim.carLength, +		      carDlgDim.truckCenter, +		      carDlgDim.truckCenterOffset, +		      carDlgTruckOffsetL, +		      carDlgTruckOffsetR ) ); +#endif  		redraw = TRUE;  		break; @@ -4135,6 +4185,7 @@ static void CarDlgUpdate(  		carDlgDim.carLength = size2.x;  		carDlgDim.carWidth = size2.y;  		carDlgDim.coupledLength = carDlgDim.carLength + 32; +#ifdef TRUCK_OFFSET  		if ( carDlgDim.carLength > 120 ) {  			carDlgDim.truckCenter = carDlgDim.carLength - 120;  			carDlgTruckOffsetL = (carDlgDim.carLength - carDlgDim.truckCenter)/2; @@ -4144,6 +4195,7 @@ static void CarDlgUpdate(  			carDlgTruckOffsetL = 0;  			carDlgTruckOffsetR = 0;  		} +#endif  		carDlgFlipToggle = FALSE;  		ParamLoadControl( &carDlgPG, I_CD_CARLENGTH );  		ParamLoadControl( &carDlgPG, I_CD_CARWIDTH ); @@ -4168,6 +4220,14 @@ static void CarDlgUpdate(  	}  	if ( checkTruckCenter && carDlgDim.carLength > 0 ) { +#ifdef TRUCK_OFFSET +		DIST_T offL = (carDlgDim.carLength - carDlgDim.truckCenter)/2 - +		              carDlgDim.truckCenterOffset; +		DIST_T offR = (carDlgDim.carLength - carDlgDim.truckCenter)/2 + +		              carDlgDim.truckCenterOffset; +		LOG( log_carDlgDims, 1, ( "OFF %0.3f %0.3f %0.3f %0.3f\n", +		                          carDlgTruckOffsetL, carDlgTruckOffsetR, offL, offR ) ); +  		if ( carDlgTruckOffsetL > 0 || carDlgTruckOffsetR > 0 ) {  			carDlgDim.truckCenter = carDlgDim.carLength - ( carDlgTruckOffsetL +  			                        carDlgTruckOffsetR ); @@ -4176,6 +4236,11 @@ static void CarDlgUpdate(  			carDlgDim.truckCenter = carDlgDim.carLength * 0.75;  			carDlgDim.truckCenterOffset = 0;  		} +		LOG( log_carDlgDims, 1, +		     ( "checkTruckCenter length:%0.3f, offset %0.3f, %0.3f = truckCenter:%0.3f, truckCenterOffset:%0.3f\n", +		       carDlgDim.carLength, carDlgTruckOffsetL, carDlgTruckOffsetR, +		       carDlgDim.truckCenter, carDlgDim.truckCenterOffset ) ); +#endif  		ParamLoadControl( &carDlgPG, I_CD_TRKCENTER );  		ParamLoadControl( &carDlgPG, I_CD_TRKOFFSET );  	} @@ -4596,7 +4661,8 @@ static void DoCarPartDlg( carDlgAction_e *actions )  	if ( carDlgPG.win == NULL ) {  		ParamCreateDialog( &carDlgPG, MakeWindowTitle(_("New Car Part")), _("Add"), -		                   CarDlgOk, CarDlgClose, TRUE, CarDlgLayout, +		                   CarDlgOk, ParamCancel_Custom( CarDlgClose ), +		                   TRUE, CarDlgLayout,  		                   F_BLOCK|F_RESIZE|F_RECALLSIZE|PD_F_ALT_CANCELLABEL, CarDlgUpdate );  		if ( carDlgDim.carWidth==0 ) { @@ -4845,6 +4911,8 @@ static void CarInvDlgDeleteShelve( void )  				}  				bShowMsg = TRUE;  			} +			LOG( log_carDlgDims, 1, ( "CarInvDlgDeleteShelve( %d, %s\n", inx, +			                          item->title ) );  			wListDelete( (wList_p)carInvPLs[I_CI_LIST].control, inx );  			if ( item->title ) { MyFree( item->title ); }  			if ( item->data.number ) { MyFree( item->data.number ); } @@ -4855,10 +4923,12 @@ static void CarInvDlgDeleteShelve( void )  			carItemInfo_da.cnt -= 1;  			inx--;  			cnt--; +			bNeedReload = TRUE; //DB  		}  	}  	if ( bNeedReload ) {  		CarInvListLoad(); +		ChangeHotBar( CHANGE_SCALE );  		MainRedraw(); // Shelve Car from layout  	}  	SetFileChanged(); @@ -5684,7 +5754,7 @@ EXPORT void DoCarDlg( void * unused )  	int inx, inx2;  	if ( carInvPG.win == NULL ) {  		ParamCreateDialog( &carInvPG, MakeWindowTitle(_("Car Inventory")), _("Find"), -		                   CarInvDlgFind, wHide, TRUE, NULL, +		                   CarInvDlgFind, ParamCancel_Current, TRUE, NULL,  		                   F_BLOCK|F_RESIZE|F_RECALLSIZE|PD_F_ALT_CANCELLABEL, CarInvDlgUpdate );  		for ( inx=I_CI_SORT; inx<I_CI_SORT+N_SORT; inx++ ) {  			for ( inx2=0; inx2<COUNT( sortOrders ); inx2++ ) { @@ -5750,6 +5820,7 @@ EXPORT void InitCarDlg( void )  	log_carInvList = LogFindIndex( "carInvList" );  	log_carDlgState = LogFindIndex( "carDlgState" );  	log_carDlgList = LogFindIndex( "carDlgList" ); +	log_carDlgDims = LogFindIndex( "carDlgDims" );  	carDlgBodyColor = wDrawFindColor( wRGB(255,128,0) );  	ParamRegister( &carDlgPG );  	ParamRegister( &carInvPG ); @@ -5843,8 +5914,8 @@ static int CarProtoCustMgmProc(  } -#include "bitmaps/carpart.xpm" -#include "bitmaps/carproto.xpm" +#include "bitmaps/carpart.image1" +#include "bitmaps/carproto.image1"  EXPORT void CarCustMgmLoad( void )  { @@ -5856,10 +5927,10 @@ EXPORT void CarCustMgmLoad( void )  	static wIcon_p carprotoI = NULL;  	if ( carpartI == NULL ) { -		carpartI = wIconCreatePixMap( carpart_xpm ); +		carpartI = wIconCreatePixMap( carpart_image1 );  	}  	if ( carprotoI == NULL ) { -		carprotoI = wIconCreatePixMap( carproto_xpm ); +		carprotoI = wIconCreatePixMap( carproto_image1 );  	}  	for ( parentX=0; parentX<carPartParent_da.cnt; parentX++ ) { | 
