summaryrefslogtreecommitdiff
path: root/app/bin/celev.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/bin/celev.c')
-rw-r--r--app/bin/celev.c293
1 files changed, 161 insertions, 132 deletions
diff --git a/app/bin/celev.c b/app/bin/celev.c
index 1da4b22..e55a1fe 100644
--- a/app/bin/celev.c
+++ b/app/bin/celev.c
@@ -17,20 +17,16 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <math.h>
-#include <string.h>
#include "cselect.h"
#include "cundo.h"
#include "custom.h"
#include "fileio.h"
-#include "i18n.h"
#include "param.h"
#include "track.h"
#include "ccurve.h"
-#include "utility.h"
static wWin_p elevW;
@@ -44,7 +40,8 @@ static EPINX_T elevEp;
static BOOL_T elevUndo = FALSE;
static char * elevModeLabels[] = { N_("None"), N_("Defined"), N_("Hidden"),
- N_("Computed"), N_("Grade"), N_("Station"), N_("Ignore"), NULL };
+ N_("Computed"), N_("Grade"), N_("Station"), N_("Ignore"), NULL
+ };
static paramFloatRange_t r_1000_1000 = { -1000, 1000 };
static paramData_t elevationPLs[] = {
@@ -53,41 +50,44 @@ static paramData_t elevationPLs[] = {
#define I_HEIGHT (1)
{ PD_FLOAT, &elevHeightV, "value", PDO_DIM|PDO_DLGNEWCOLUMN, &r_1000_1000 },
#define I_COMPUTED (2)
- { PD_MESSAGE, NULL, "computed", 0, (void*)80 },
+ { PD_MESSAGE, NULL, "computed", 0, I2VP(80) },
#define I_GRADE (3)
- { PD_MESSAGE, NULL, "grade", 0, (void*)80 },
+ { PD_MESSAGE, NULL, "grade", 0, I2VP(80) },
#define I_STATION (4)
- { PD_STRING, elevStationV, "station", PDO_DLGUNDERCMDBUTT|PDO_STRINGLIMITLENGTH, (void*)200, NULL, 0, 0, sizeof(elevStationV)} };
-static paramGroup_t elevationPG = { "elev", 0, elevationPLs, sizeof elevationPLs/sizeof elevationPLs[0] };
+ { PD_STRING, elevStationV, "station", PDO_DLGUNDERCMDBUTT|PDO_STRINGLIMITLENGTH, I2VP(200), NULL, 0, 0, sizeof(elevStationV)}
+};
+static paramGroup_t elevationPG = { "elev", 0, elevationPLs, COUNT( elevationPLs ) };
static dynArr_t anchors_da;
#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
-static void CreateSquareAnchor(coOrd p) {
+static void CreateSquareAnchor(coOrd p)
+{
DIST_T d = tempD.scale*0.25;
int i = anchors_da.cnt;
DYNARR_SET(trkSeg_t,anchors_da,i+4);
- for (int j =0; j<4;j++) {
+ for (int j =0; j<4; j++) {
anchors(i+j).type = SEG_STRLIN;
anchors(i+j).color = wDrawColorBlue;
- anchors(i+j).width = 0;
+ anchors(i+j).lineWidth = 0;
}
anchors(i).u.l.pos[0].x = anchors(i+2).u.l.pos[1].x =
- anchors(i+3).u.l.pos[0].x = anchors(i+3).u.l.pos[1].x = p.x-d/2;
+ anchors(i+3).u.l.pos[0].x = anchors(i+3).u.l.pos[1].x = p.x-d/2;
anchors(i).u.l.pos[0].y = anchors(i).u.l.pos[1].y =
- anchors(i+1).u.l.pos[0].y = anchors(i+3).u.l.pos[1].y = p.y-d/2;
+ anchors(i+1).u.l.pos[0].y = anchors(i+3).u.l.pos[1].y = p.y-d/2;
anchors(i).u.l.pos[1].x =
- anchors(i+1).u.l.pos[0].x = anchors(i+1).u.l.pos[1].x =
- anchors(i+2).u.l.pos[0].x = p.x+d/2;
+ anchors(i+1).u.l.pos[0].x = anchors(i+1).u.l.pos[1].x =
+ anchors(i+2).u.l.pos[0].x = p.x+d/2;
anchors(i+1).u.l.pos[1].y =
- anchors(i+2).u.l.pos[0].y = anchors(i+2).u.l.pos[1].y =
- anchors(i+3).u.l.pos[0].y = p.y+d/2;
+ anchors(i+2).u.l.pos[0].y = anchors(i+2).u.l.pos[1].y =
+ anchors(i+3).u.l.pos[0].y = p.y+d/2;
}
-static void CreateEndAnchor(coOrd p, wBool_t lock) {
+static void CreateEndAnchor(coOrd p, wBool_t lock)
+{
DIST_T d = tempD.scale*0.15;
DYNARR_APPEND(trkSeg_t,anchors_da,1);
@@ -98,11 +98,12 @@ static void CreateEndAnchor(coOrd p, wBool_t lock) {
anchors(i).u.c.radius = d/2;
anchors(i).u.c.a0 = 0.0;
anchors(i).u.c.a1 = 360.0;
- anchors(i).width = 0;
+ anchors(i).lineWidth = 0;
}
-static void CreateSplitAnchor(coOrd pos, track_p t) {
- DIST_T d = tempD.scale*0.1;
+static void CreateSplitAnchor(coOrd pos, track_p t)
+{
+// DIST_T d = tempD.scale*0.1;
DIST_T w = tempD.scale/tempD.dpi*4;
int i;
ANGLE_T a = NormalizeAngle(GetAngleAtPoint(t,pos,NULL,NULL)+90.0);
@@ -112,31 +113,37 @@ static void CreateSplitAnchor(coOrd pos, track_p t) {
anchors(i).color = wDrawColorBlue;
Translate(&anchors(i).u.l.pos[0],pos,a,GetTrkGauge(t));
Translate(&anchors(i).u.l.pos[1],pos,a,-GetTrkGauge(t));
- anchors(i).width = w;
+ anchors(i).lineWidth = w;
}
-void static CreateMoveAnchor(coOrd pos) {
+#if 0
+void static CreateMoveAnchor(coOrd pos)
+{
DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
- DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,0,TRUE,wDrawColorBlue);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,0,TRUE,
+ wDrawColorBlue);
DYNARR_SET(trkSeg_t,anchors_da,anchors_da.cnt+5);
- DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,90,TRUE,wDrawColorBlue);
+ DrawArrowHeads(&DYNARR_N(trkSeg_t,anchors_da,anchors_da.cnt-5),pos,90,TRUE,
+ wDrawColorBlue);
DYNARR_APPEND(trkSeg_t,anchors_da,1);
CreateSquareAnchor(pos);
}
+#endif
static void LayoutElevW(
- paramData_t * pd,
- int inx,
- wPos_t colX,
- wPos_t * x,
- wPos_t * y )
+ paramData_t * pd,
+ int inx,
+ wWinPix_t colX,
+ wWinPix_t * x,
+ wWinPix_t * y )
{
- static wPos_t h = 0;
+ static wWinPix_t h = 0;
switch ( inx ) {
case I_HEIGHT:
- h = wControlGetHeight( elevationPLs[I_MODE].control )/((sizeof elevModeLabels/sizeof elevModeLabels[0])-1);
+ h = wControlGetHeight( elevationPLs[I_MODE].control )/(COUNT(
+ elevModeLabels )-1);
#ifndef WINDOWS
h += 3;
#endif
@@ -157,8 +164,9 @@ static int GetElevMode( void )
int newMode;
static int modeMap[7] = { ELEV_NONE, ELEV_DEF|ELEV_VISIBLE, ELEV_DEF, ELEV_COMP|ELEV_VISIBLE, ELEV_GRADE|ELEV_VISIBLE, ELEV_STATION|ELEV_VISIBLE, ELEV_IGNORE };
mode = (int)elevModeV;
- if (mode<0||mode>=7)
+ if (mode<0||mode>=7) {
return -1;
+ }
newMode = modeMap[mode];
return newMode;
}
@@ -172,8 +180,9 @@ static void DoElevUpdate( paramGroup_p pg, int inx, void * valueP )
if ( inx == 0 ) {
long mode = *(long*)valueP;
- if ( mode < 0 || mode >= 7 )
+ if ( mode < 0 || mode >= 7 ) {
return;
+ }
ParamControlActive( &elevationPG, I_HEIGHT, FALSE );
ParamControlActive( &elevationPG, I_STATION, FALSE );
switch ( mode ) {
@@ -194,23 +203,28 @@ static void DoElevUpdate( paramGroup_p pg, int inx, void * valueP )
}
ParamLoadData( &elevationPG );
newMode = GetElevMode();
- if (newMode == -1)
+ if (newMode == -1) {
return;
- if (elevTrk == NULL)
+ }
+ if (elevTrk == NULL) {
return;
+ }
oldMode = GetTrkEndElevUnmaskedMode( elevTrk, elevEp );
elevNewValue = 0.0;
- if ((newMode&ELEV_MASK) == ELEV_DEF)
+ if ((newMode&ELEV_MASK) == ELEV_DEF) {
elevNewValue = elevHeightV;
+ }
if (oldMode == newMode) {
if ((newMode&ELEV_MASK) == ELEV_DEF) {
elevOldValue = GetTrkEndElevHeight( elevTrk, elevEp );
diff = fabs( elevOldValue-elevNewValue );
- if ( diff < 0.02 )
+ if ( diff < 0.02 ) {
return;
+ }
} else if ((newMode&ELEV_MASK) == ELEV_STATION) {
- if ( strcmp(elevStationV, GetTrkEndElevStation( elevTrk, elevEp ) ) == 0)
+ if ( strcmp(elevStationV, GetTrkEndElevStation( elevTrk, elevEp ) ) == 0) {
return;
+ }
} else {
return;
}
@@ -243,7 +257,6 @@ static void ElevSelect( track_p trk, EPINX_T ep )
int mode;
DIST_T elevX, grade, elev, dist;
long radio;
- BOOL_T computedOk;
BOOL_T gradeOk = TRUE;
track_p trk1;
EPINX_T ep1;
@@ -266,10 +279,11 @@ static void ElevSelect( track_p trk, EPINX_T ep )
radio = 0;
break;
case ELEV_DEF:
- if ( mode & ELEV_VISIBLE )
+ if ( mode & ELEV_VISIBLE ) {
radio = 1;
- else
+ } else {
radio = 2;
+ }
elevHeightV = GetTrkEndElevHeight(trk,ep);
elevOldValue = elevHeightV;
ParamLoadControl( &elevationPG, I_HEIGHT );
@@ -296,69 +310,61 @@ static void ElevSelect( track_p trk, EPINX_T ep )
elevModeV = radio;
ParamLoadControl( &elevationPG, I_MODE );
gradeOk = ComputeElev( trk, ep, FALSE, &elevX, &grade, TRUE );
- computedOk = TRUE;
- if (oldElevationEvaluation || computedOk) {
- sprintf( message, "%0.2f%s", round(PutDim( elevX )*100.0)/100.0, (units==UNITS_METRIC?"cm":"\"") );
- ParamLoadMessage( &elevationPG, I_COMPUTED, message );
- if (gradeOk) {
- sprintf( message, "%0.1f%%", fabs(round(grade*1000.0)/10.0) );
- } else {
- if ( EndPtIsDefinedElev(trk,ep) ) {
- elev = GetElevation(trk);
- dist = GetTrkLength(trk,ep,-1);
- if (dist>0.1)
- sprintf( message, "%0.1f%%", fabs(round((elev-elevX)/dist)*1000.0)/10.0 );
- else
- sprintf( message, _("Undefined") );
- if ( (trk1=GetTrkEndTrk(trk,ep)) && (ep1=GetEndPtConnectedToMe(trk1,trk))>=0 ) {
- elev = GetElevation(trk1);
- dist = GetTrkLength(trk1,ep1,-1);
- if (dist>0.1)
- sprintf( message+strlen(message), " - %0.1f%%", fabs(round((elev-elevX)/dist)*1000.0)/10.0 );
- else
- sprintf( message+strlen(message), " - %s", _("Undefined") );
- }
+ sprintf( message, "%0.2f%s", round(PutDim( elevX )*100.0)/100.0,
+ (units==UNITS_METRIC?"cm":"\"") );
+ ParamLoadMessage( &elevationPG, I_COMPUTED, message );
+ if (gradeOk) {
+ sprintf( message, "%0.1f%%", fabs(round(grade*1000.0)/10.0) );
+ } else {
+ if ( EndPtIsDefinedElev(trk,ep) ) {
+ elev = GetElevation(trk);
+ dist = GetTrkLength(trk,ep,-1);
+ if (dist>0.1) {
+ sprintf( message, "%0.1f%%", fabs(round(((elev-elevX)/dist)*1000.0))/10.0 );
} else {
- strcpy( message, _("Undefined") );
+ sprintf( message, _("Undefined") );
}
+ if ( (trk1=GetTrkEndTrk(trk,ep)) && (ep1=GetEndPtConnectedToMe(trk1,trk))>=0 ) {
+ elev = GetElevation(trk1);
+ dist = GetTrkLength(trk1,ep1,-1);
+ if (dist>0.1) {
+ sprintf( message+strlen(message), " - %0.1f%%",
+ fabs(round(((elev-elevX)/dist)*1000.0))/10.0 );
+ } else {
+ sprintf( message+strlen(message), " - %s", _("Undefined") );
+ }
+ }
+ } else {
+ strcpy( message, _("Undefined") );
}
- ParamLoadMessage( &elevationPG, I_GRADE, message );
- if ( (mode&ELEV_MASK)!=ELEV_DEF ) {
- elevHeightV = elevX;
- ParamLoadControl( &elevationPG, I_HEIGHT );
- }
+ }
+ ParamLoadMessage( &elevationPG, I_GRADE, message );
+ if ( (mode&ELEV_MASK)!=ELEV_DEF ) {
+ elevHeightV = elevX;
+ ParamLoadControl( &elevationPG, I_HEIGHT );
}
wShow(elevW);
}
-static BOOL_T GetPointElev(track_p trk, coOrd pos, DIST_T * height) {
- DIST_T len, len1, elev0, elev1, dist0, dist1;
+static BOOL_T GetPointElev(track_p trk, coOrd pos, DIST_T * height)
+{
+ DIST_T elev0, elev1, dist0, dist1;
if ( IsTrack( trk ) && GetTrkEndPtCnt(trk) == 2 ) {
+ if ( GetTrkLength( trk, 0, 1 ) < 0.1 ) {
+ return FALSE;
+ }
dist0 = FindDistance(pos,GetTrkEndPos(trk,0));
dist1 = FindDistance(pos,GetTrkEndPos(trk,1));
- if (EndPtIsDefinedElev(trk,0))
- elev0 = GetTrkEndElevHeight(trk,0);
- else {
- if (!GetTrkEndElevCachedHeight(trk,0,&elev0,&len)) {
- if (GetTrkLength( trk, 0, 1 )<0.1) return FALSE;
- ComputeElev( trk, 0, FALSE, &elev0, NULL, TRUE );
- }
- }
- if (EndPtIsDefinedElev(trk,1))
- elev1 = GetTrkEndElevHeight(trk,1);
- else {
- if (!GetTrkEndElevCachedHeight(trk,1,&elev1,&len1)) {
- if (GetTrkLength( trk, 0, 1 )<0.1) return FALSE;
- ComputeElev( trk, 0, FALSE, &elev0, NULL, TRUE );
- }
- }
- if (dist1+dist0 < 0.1) {
+ ComputeElev( trk, 0, FALSE, &elev0, NULL, FALSE );
+ ComputeElev( trk, 1, FALSE, &elev1, NULL, FALSE );
+ if (dist1+dist0 <= 0.1) {
*height = elev0;
return TRUE;
}
*height = ((elev1-elev0)*(dist0/(dist0+dist1)))+elev0;
return TRUE;
- } else if (GetTrkEndPtCnt(trk) == 1 && GetTrkEndElevCachedHeight(trk,0,&elev0,&len)) {
+ } else if (GetTrkEndPtCnt(trk) == 1 &&
+ ComputeElev( trk, 0, FALSE, &elev0, NULL, FALSE ) ) {
*height = elev0;
return TRUE;
}
@@ -370,12 +376,14 @@ static STATUS_T CmdElevation( wAction_t action, coOrd pos )
{
track_p trk0, trk1;
EPINX_T ep0;
- int oldTrackCount;
+// int oldTrackCount;
switch (action) {
case C_START:
- if ( elevW == NULL )
- elevW = ParamCreateDialog( &elevationPG, MakeWindowTitle(_("Elevation")), _("Done"), DoElevDone, wHide, TRUE, LayoutElevW, 0, DoElevUpdate );
+ if ( elevW == NULL ) {
+ elevW = ParamCreateDialog( &elevationPG, MakeWindowTitle(_("Elevation")),
+ _("Done"), DoElevDone, wHide, TRUE, LayoutElevW, 0, DoElevUpdate );
+ }
elevModeV = 0;
elevHeightV = 0.0;
elevStationV[0] = 0;
@@ -387,7 +395,8 @@ static STATUS_T CmdElevation( wAction_t action, coOrd pos )
ParamControlActive( &elevationPG, I_STATION, FALSE );
ParamLoadMessage( &elevationPG, I_COMPUTED, "" );
ParamLoadMessage( &elevationPG, I_GRADE, "" );
- InfoMessage( _("Click on end, +Shift to split, +Ctrl to move description") );
+ InfoMessage(
+ _("Click on end, +Shift to split, +Ctrl to move description, +Alt to show elevation") );
elevTrk = NULL;
elevUndo = FALSE;
CmdMoveDescription( action, pos );
@@ -396,14 +405,15 @@ static STATUS_T CmdElevation( wAction_t action, coOrd pos )
case wActionMove:
DYNARR_RESET(trkSeg_t,anchors_da);
if (MyGetKeyState()&WKEY_CTRL) {
- commandContext = (void*) 1; //Just end points
+ commandContext = I2VP(1); //Just end points
CmdMoveDescription( action, pos );
return C_CONTINUE;
}
- BOOL_T xing = FALSE;
+// BOOL_T xing = FALSE;
coOrd p0 = pos, p2=pos;
if ((trk0 = OnTrack2(&p0,FALSE, TRUE, FALSE, NULL)) != NULL) {
- EPINX_T ep0 = 0, ep1 = 1;
+ EPINX_T ep0 = 0;
+// EPINX_T ep1 = 1;
DIST_T elev0, elev1;
if (GetTrkEndPtCnt(trk0) == 2) {
if (!GetPointElev(trk0,p0,&elev0)) {
@@ -414,49 +424,59 @@ static STATUS_T CmdElevation( wAction_t action, coOrd pos )
InfoMessage( _("Move to end or track crossing") );
return C_CONTINUE;
}
- if ((trk1 = OnTrack2(&p2,FALSE, TRUE, FALSE, trk0)) != NULL) {
- if (IsClose(FindDistance(p0,p2))) {
- if (GetEndPtConnectedToMe(trk0,trk1) == -1) { //Not simply connected to each other!!!
- if (GetTrkEndPtCnt(trk1) == 2) {
- if (GetPointElev(trk1,p2,&elev1)) {
- if (MyGetKeyState()&WKEY_SHIFT) {
- InfoMessage (_("Crossing - First %0.3f, Second %0.3f, Clearance %0.3f - Click to Split"), PutDim(elev0), PutDim(elev1), PutDim(fabs(elev0-elev1)));
- } else
- InfoMessage (_("Crossing - First %0.3f, Second %0.3f, Clearance %0.3f"), PutDim(elev0), PutDim(elev1), PutDim(fabs(elev0-elev1)));
+ if (((MyGetKeyState()&WKEY_ALT))) { //Add square with Alt
+ if ((trk1 = OnTrack2(&p2,FALSE, TRUE, FALSE, trk0)) != NULL) {
+ if (IsClose(FindDistance(p0,p2))) {
+ if (GetEndPtConnectedToMe(trk0,
+ trk1) == -1) { //Not simply connected to each other!!!
+ if (GetTrkEndPtCnt(trk1) == 2) {
+ if (GetPointElev(trk1,p2,&elev1)) {
+ if (MyGetKeyState()&WKEY_SHIFT) {
+ InfoMessage (
+ _("Crossing - First %0.3f, Second %0.3f, Clearance %0.3f - Click to Split"),
+ PutDim(elev0), PutDim(elev1), PutDim(fabs(elev0-elev1)));
+ } else {
+ InfoMessage (_("Crossing - First %0.3f, Second %0.3f, Clearance %0.3f"),
+ PutDim(elev0), PutDim(elev1), PutDim(fabs(elev0-elev1)));
+ }
+ }
+ CreateSquareAnchor(p2);
+ return C_CONTINUE;
}
- CreateSquareAnchor(p2);
- return C_CONTINUE;
}
}
}
}
if ((ep0 = PickEndPoint( p0, trk0 )) != -1) {
- if (IsClose(FindDistance(GetTrkEndPos(trk0,ep0),pos))) {
- CreateEndAnchor(GetTrkEndPos(trk0,ep0),FALSE);
- InfoMessage (_("Track End elevation %0.3f"), PutDim(elev0));
- } else if ((MyGetKeyState()&WKEY_SHIFT) && QueryTrack(trk0,Q_MODIFY_CAN_SPLIT)
- && !(QueryTrack(trk0,Q_IS_TURNOUT))) {
+ if ((MyGetKeyState()&WKEY_SHIFT) && QueryTrack(trk0,Q_MODIFY_CAN_SPLIT)
+ && !(QueryTrack(trk0,Q_IS_TURNOUT))) {
InfoMessage( _("Click to split here - elevation %0.3f"), PutDim(elev0));
CreateSplitAnchor(p0,trk0);
- } else {
- InfoMessage( _("Track Point elevation %0.3f"), PutDim(elev0));
+ } else if ((IsClose(FindDistance(GetTrkEndPos(trk0,ep0),p0))
+ || (FindDistance(GetTrkEndPos(trk0,ep0),p0)<minLength))) {
+ CreateEndAnchor(GetTrkEndPos(trk0,ep0),FALSE);
+ InfoMessage (_("Track End elevation %0.3f - snap End Pt"), PutDim(elev0));
+ } else if (MyGetKeyState()&WKEY_ALT) {
CreateEndAnchor(p0,TRUE);
+ InfoMessage (_("Track End elevation %0.3f"), PutDim(elev0));
}
- } else InfoMessage( _("Click on end, +Shift to split, +Ctrl to move description") );
- } else
- InfoMessage( _("Click on end, +Shift to split, +Ctrl to move description") );
+ } else { InfoMessage( _("Click on End Pt, +Shift to split, +Ctrl to move description, +Alt show Elevation") ); }
+ } else {
+ InfoMessage(
+ _("Click on End Pt, +Shift to split, +Ctrl to move description, +Alt show Elevation") );
+ }
return C_CONTINUE;
case C_DOWN:
case C_MOVE:
case C_UP:
if (MyGetKeyState()&WKEY_CTRL) {
- commandContext = (void*) 1; //Just end points
+ commandContext = I2VP(1); //Just end points
CmdMoveDescription( action, pos );
DYNARR_RESET(trkSeg_t,anchors_da);
elevTrk = NULL;
return C_CONTINUE;
}
- /*no break*/
+ /*no break*/
case C_LCLICK:
;
p0= pos;
@@ -466,19 +486,22 @@ static STATUS_T CmdElevation( wAction_t action, coOrd pos )
InfoMessage( _("Click on end, +Shift to split, +Ctrl to move description") );
} else {
ep0 = PickEndPoint( p0, trk0 );
- if (IsClose(FindDistance(GetTrkEndPos(trk0,ep0),pos))) {
- InfoMessage( _("Point selected!") );
- ElevSelect( trk0, ep0 );
- } else if ( (MyGetKeyState()&WKEY_SHIFT) ) {
+ if ( (MyGetKeyState()&WKEY_SHIFT) ) {
UndoStart( _("Split track"), "SplitTrack( T%d[%d] )", GetTrkIndex(trk0), ep0 );
- oldTrackCount = trackCount;
+// oldTrackCount = trackCount;
if (!QueryTrack(trk0,Q_IS_TURNOUT) &&
- !SplitTrack( trk0, p0, ep0, &trk1, FALSE ))
+ !SplitTrack( trk0, p0, ep0, &trk1, FALSE )) {
return C_CONTINUE;
+ }
InfoMessage( _("Track split!") );
ElevSelect( trk0, ep0 );
UndoEnd();
elevUndo = FALSE;
+ } else if (IsClose(FindDistance(GetTrkEndPos(trk0,ep0),p0)) ||
+ (FindDistance(GetTrkEndPos(trk0,ep0),
+ p0)<minLength)) { //Snap if close visually or track
+ InfoMessage( _("Point selected!") );
+ ElevSelect( trk0, ep0 );
}
}
DYNARR_RESET(trkSeg_t,anchors_da);
@@ -493,10 +516,14 @@ static STATUS_T CmdElevation( wAction_t action, coOrd pos )
InfoMessage( "" );
return C_TERMINATE;
case C_REDRAW:
+ wSetCursor(mainD.d,defaultCursor);
DoElevHilight( NULL );
HilightSelectedEndPt( TRUE, elevTrk, elevEp );
- if (anchors_da.cnt)
- DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
+ DrawSegsDA( &tempD, NULL, zero, 0.0, &anchors_da, trackGauge, wDrawColorBlack,
+ 0 );
+ if (anchors_da.cnt) {
+ wSetCursor(mainD.d,wCursorNone);
+ }
CmdMoveDescription( action, pos );
return C_CONTINUE;
}
@@ -506,11 +533,13 @@ static STATUS_T CmdElevation( wAction_t action, coOrd pos )
-#include "bitmaps/elev.xpm"
+#include "bitmaps/elevation.xpm3"
EXPORT void InitCmdElevation( wMenu_p menu )
{
ParamRegister( &elevationPG );
- AddMenuButton( menu, CmdElevation, "cmdElevation", _("Elevation"), wIconCreatePixMap(elev_xpm), LEVEL0_50, IC_POPUP|IC_LCLICK|IC_RCLICK|IC_WANT_MOVE, ACCL_ELEVATION, NULL );
+ AddMenuButton( menu, CmdElevation, "cmdElevation", _("Elevation"),
+ wIconCreatePixMap(elevation_xpm3[iconSize]), LEVEL0_50,
+ IC_POPUP|IC_LCLICK|IC_RCLICK|IC_WANT_MOVE, ACCL_ELEVATION, NULL );
}