summaryrefslogtreecommitdiff
path: root/app/bin/cselect.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/bin/cselect.c')
-rw-r--r--app/bin/cselect.c2828
1 files changed, 1442 insertions, 1386 deletions
diff --git a/app/bin/cselect.c b/app/bin/cselect.c
index 1b153b9..a1158bc 100644
--- a/app/bin/cselect.c
+++ b/app/bin/cselect.c
@@ -17,7 +17,7 @@
*
* 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 "common.h"
@@ -37,8 +37,8 @@
#include "cjoin.h"
#include "draw.h"
#include "misc.h"
-#include "trackx.h"
#include "common-ui.h"
+#include "ctrain.h"
#include "bitmaps/bmendpt.xbm"
@@ -54,6 +54,9 @@ EXPORT wIndex_t moveCmdInx;
EXPORT wIndex_t rotateCmdInx;
EXPORT wIndex_t flipCmdInx;
+EXPORT long selectMode = 0;
+EXPORT long selectZero = 1;
+
#define MAXMOVEMODE (3)
static long moveMode = MAXMOVEMODE;
static BOOL_T enableMoveDraw = TRUE;
@@ -76,25 +79,27 @@ static dynArr_t tlist_da;
{ DYNARR_APPEND( track_p, tlist_da, 10 );\
Tlist(tlist_da.cnt-1) = T; }
-BOOL_T TListSearch(track_p T) {
- for (int i=0;i<tlist_da.cnt-1;i++) { \
- if (Tlist(i) == T) return TRUE;
+BOOL_T TListSearch(track_p T)
+{
+ for (int i=0; i<tlist_da.cnt-1; i++) {
+ \
+ if (Tlist(i) == T) { return TRUE; }
}
return FALSE;
}
static wMenu_p selectPopup1M;
-static wMenu_p selectPopup1CM;
static wMenu_p selectPopup2M;
-static wMenu_p selectPopup2CM;
static wMenu_p selectPopup2RM;
static wMenu_p selectPopup2TM;
static wMenu_p selectPopup2TYM;
static wMenuPush_p menuPushModify;
static wMenuPush_p rotateAlignMI;
static wMenuPush_p descriptionMI;
+static wMenuPush_p tiesMI;
static wMenuPush_p hideMI;
static wMenuPush_p bridgeMI;
+static wMenuPush_p roadbedMI;
static wMenuPush_p tiesMI;
@@ -102,51 +107,53 @@ static BOOL_T doingAlign = FALSE;
static enum { AREA, MOVE } mode;
static void SelectOneTrack(
- track_p trk,
- wBool_t selected );
+ track_p trk,
+ wBool_t selected );
static void DrawSelectedTracksD( drawCmd_p d, wDrawColor color );
static dynArr_t anchors_da;
#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
-void CreateArrowAnchor(coOrd pos,ANGLE_T a,DIST_T len) {
- DYNARR_APPEND(trkSeg_t,anchors_da,1);
- int i = anchors_da.cnt-1;
- anchors(i).type = SEG_STRLIN;
- anchors(i).width = 0;
- anchors(i).u.l.pos[0] = pos;
- Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a+135),len);
- anchors(i).color = wDrawColorBlue;
- DYNARR_APPEND(trkSeg_t,anchors_da,1);
- i = anchors_da.cnt-1;
- anchors(i).type = SEG_STRLIN;
- anchors(i).width = 0;
- anchors(i).u.l.pos[0] = pos;
- Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a-135),len);
- anchors(i).color = wDrawColorBlue;
- wSetCursor(mainD.d,wCursorNone);
+void CreateArrowAnchor(coOrd pos,ANGLE_T a,DIST_T len)
+{
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ int i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).lineWidth = 0;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a+135),len);
+ anchors(i).color = wDrawColorBlue;
+ DYNARR_APPEND(trkSeg_t,anchors_da,1);
+ i = anchors_da.cnt-1;
+ anchors(i).type = SEG_STRLIN;
+ anchors(i).lineWidth = 0;
+ anchors(i).u.l.pos[0] = pos;
+ Translate(&anchors(i).u.l.pos[1],pos,NormalizeAngle(a-135),len);
+ anchors(i).color = wDrawColorBlue;
+ wSetCursor(mainD.d,wCursorNone);
}
-void static CreateRotateAnchor(coOrd pos) {
+void static CreateRotateAnchor(coOrd pos)
+{
DIST_T d = tempD.scale*0.15;
DYNARR_APPEND(trkSeg_t,anchors_da,1);
int i = anchors_da.cnt-1;
anchors(i).type = SEG_CRVLIN;
- anchors(i).width = d/8;
+ anchors(i).lineWidth = d/8;
anchors(i).u.c.center = pos;
anchors(i).u.c.a0 = 180.0;
anchors(i).u.c.a1 = 360.0;
anchors(i).u.c.radius = d*2;
anchors(i).color = wDrawColorAqua;
coOrd head; //Arrows
- for (int j=0;j<3;j++) {
+ for (int j=0; j<3; j++) {
Translate(&head,pos,j*120,d*2);
CreateArrowAnchor(head,NormalizeAngle((j*120)+90),d);
}
DYNARR_APPEND(trkSeg_t,anchors_da,1);
i = anchors_da.cnt-1;
anchors(i).type = SEG_CRVLIN;
- anchors(i).width = d/8;
+ anchors(i).lineWidth = d/8;
anchors(i).u.c.center = pos;
anchors(i).u.c.a0 = 180.0;
anchors(i).u.c.a1 = 360.0;
@@ -155,12 +162,13 @@ void static CreateRotateAnchor(coOrd pos) {
wSetCursor(mainD.d,wCursorNone);
}
-void static CreateModifyAnchor(coOrd pos) {
+void static CreateModifyAnchor(coOrd pos)
+{
DIST_T d = tempD.scale*0.15;
DYNARR_APPEND(trkSeg_t,anchors_da,1);
int i = anchors_da.cnt-1;
anchors(i).type = SEG_FILCRCL;
- anchors(i).width = 0;
+ anchors(i).lineWidth = 0;
anchors(i).u.c.center = pos;
anchors(i).u.c.a0 = 180.0;
anchors(i).u.c.a1 = 360.0;
@@ -169,7 +177,7 @@ void static CreateModifyAnchor(coOrd pos) {
DYNARR_APPEND(trkSeg_t,anchors_da,1);
i = anchors_da.cnt-1;
anchors(i).type = SEG_CRVLIN;
- anchors(i).width = 0;
+ anchors(i).lineWidth = 0;
anchors(i).u.c.center = pos;
anchors(i).u.c.a0 = 180.0;
anchors(i).u.c.a1 = 360.0;
@@ -179,15 +187,16 @@ void static CreateModifyAnchor(coOrd pos) {
}
-void CreateDescribeAnchor(coOrd pos) {
+void CreateDescribeAnchor(coOrd pos)
+{
DIST_T d = tempD.scale*0.15;
- for (int j=0;j<2;j++) {
+ for (int j=0; j<2; j++) {
pos.x += j*d*3/4;
pos.y += j*d/2;
DYNARR_APPEND(trkSeg_t,anchors_da,1);
int i = anchors_da.cnt-1;
anchors(i).type = SEG_CRVLIN;
- anchors(i).width = d/4;
+ anchors(i).lineWidth = d/4;
anchors(i).u.c.center = pos;
anchors(i).u.c.a0 = 270.0;
anchors(i).u.c.a1 = 270.0;
@@ -196,7 +205,7 @@ void CreateDescribeAnchor(coOrd pos) {
DYNARR_APPEND(trkSeg_t,anchors_da,1);
i = anchors_da.cnt-1;
anchors(i).type = SEG_STRLIN;
- anchors(i).width = d/4;
+ anchors(i).lineWidth = d/4;
Translate(&anchors(i).u.l.pos[0],pos,180.0,d*3/4);
Translate(&anchors(i).u.l.pos[1],pos,180.0,d*1.5);
anchors(i).color = wDrawColorPowderedBlue;
@@ -204,13 +213,14 @@ void CreateDescribeAnchor(coOrd pos) {
wSetCursor(mainD.d,wCursorNone);
}
-void CreateActivateAnchor(coOrd pos) {
+void CreateActivateAnchor(coOrd pos)
+{
DIST_T d = tempD.scale*0.15;
coOrd c = pos;
DYNARR_APPEND(trkSeg_t,anchors_da,1);
int i = anchors_da.cnt-1;
anchors(i).type = SEG_CRVLIN;
- anchors(i).width = 0;
+ anchors(i).lineWidth = 0;
c.x -= d*3/4;
anchors(i).u.c.center = c;
anchors(i).u.c.a0 = 0.0;
@@ -221,7 +231,7 @@ void CreateActivateAnchor(coOrd pos) {
i = anchors_da.cnt-1;
c.x += d*1.5;
anchors(i).type = SEG_CRVLIN;
- anchors(i).width = 0;
+ anchors(i).lineWidth = 0;
anchors(i).u.c.center = pos;
anchors(i).u.c.a0 = 0.0;
anchors(i).u.c.a1 = 360.0;
@@ -230,15 +240,19 @@ void CreateActivateAnchor(coOrd pos) {
wSetCursor(mainD.d,wCursorNone);
}
-void static CreateMoveAnchor(coOrd pos) {
+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);
wSetCursor(mainD.d,wCursorNone);
}
-void CreateEndAnchor(coOrd p, wBool_t lock) {
+void CreateEndAnchor(coOrd p, wBool_t lock)
+{
DIST_T d = tempD.scale*0.15;
DYNARR_APPEND(trkSeg_t,anchors_da,1);
@@ -249,7 +263,7 @@ 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;
}
@@ -260,7 +274,8 @@ void CreateEndAnchor(coOrd p, wBool_t lock) {
*
*/
-EXPORT long selectedTrackCount = 0; /**< number of currently selected track components */
+EXPORT long selectedTrackCount =
+ 0; /**< number of currently selected track components */
static void SelectedTrackCountChange( void )
{
@@ -279,20 +294,20 @@ static void SelectedTrackCountChange( void )
static void DrawTrackAndEndPts(
- track_p trk,
- wDrawColor color )
+ track_p trk,
+ wDrawColor color )
{
EPINX_T ep, ep2;
track_p trk2;
DrawTrack( trk, &mainD, color );
- for (ep=0;ep<GetTrkEndPtCnt(trk);ep++) {
+ for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
if ((trk2=GetTrkEndTrk(trk,ep)) != NULL) {
- ASSERT( !IsTrackDeleted(trk) );
+ CHECK( !IsTrackDeleted(trk) );
ep2 = GetEndPtConnectedToMe( trk2, trk );
DrawEndPt( &mainD, trk2, ep2,
- (color==wDrawColorBlack && GetTrkSelected(trk2))?
- selectedColor:color );
+ (color==wDrawColorBlack && GetTrkSelected(trk2))?
+ selectedColor:color );
}
}
}
@@ -301,14 +316,14 @@ static void DrawTrackAndEndPts(
static void RedrawSelectedTracksBoundary()
{
-/* Truth table: 4 cases for a track trk, connected to trk1
- * SELREDRAW
- * trk, trk1: F, F - No changes, nothing to draw
- * T, F - trk changes but trk1 didn't, flip drawing of select boundary marker
- * F, T - trk didn't change but trk1 did, handle redrawing when we get to 2nd track
- * T, T - both changed, but we don't need to redraw anything
- * unfortunately we will do a redundant redraw when we get to the 2nd track
- */
+ /* Truth table: 4 cases for a track trk, connected to trk1
+ * SELREDRAW
+ * trk, trk1: F, F - No changes, nothing to draw
+ * T, F - trk changes but trk1 didn't, flip drawing of select boundary marker
+ * F, T - trk didn't change but trk1 did, handle redrawing when we get to 2nd track
+ * T, T - both changed, but we don't need to redraw anything
+ * unfortunately we will do a redundant redraw when we get to the 2nd track
+ */
// if (importTrack != NULL)
// return;
track_p trk;
@@ -317,8 +332,9 @@ static void RedrawSelectedTracksBoundary()
// This track has changed
for ( EPINX_T ep = 0; ep < GetTrkEndPtCnt(trk); ep++ ) {
track_p trk1 = GetTrkEndTrk( trk, ep );
- if ( trk1 == NULL )
+ if ( trk1 == NULL ) {
continue;
+ }
// if ( GetTrkIndex( trk ) < GetTrkIndex( trk1 )
// continue;
@@ -335,20 +351,23 @@ static void RedrawSelectedTracksBoundary()
ANGLE_T a = GetTrkEndAngle( trk, ep );
coOrd p0, p1, p2;
len = GetTrkGauge(trk)*2.0;
- if (len < 0.10*mainD.scale)
+ if (len < 0.10*mainD.scale) {
len = 0.10*mainD.scale;
- Translate( &p1, p, a+45, len );
- Translate( &p2, p, a+225, len );
- DrawLine( &mainD, p1, p2, 2, color );
- Translate( &p1, p, a-45, len );
- Translate( &p2, p, a-225, len );
- DrawLine( &mainD, p1, p2, 2, color );
+ }
+ if (DrawTwoRails( &mainD, 1 ) ) {
+ Translate( &p1, p, a+45, len );
+ Translate( &p2, p, a+225, len );
+ DrawLine( &mainD, p1, p2, 2, color );
+ Translate( &p1, p, a-45, len );
+ Translate( &p2, p, a-225, len );
+ DrawLine( &mainD, p1, p2, 2, color );
+ }
if ( color == wDrawColorWhite ) {
// Fill in holes by undraw cross
DIST_T len2 = sqrt( GetTrkGauge(trk)*GetTrkGauge(trk)/2.0 );
DIST_T len3 = 0.1*mainD.scale;
color = GetTrkColor( trk, &mainD );
- if ( mainD.scale < twoRailScale ) {
+ if ( DrawTwoRails( &mainD, 1 ) ) {
Translate( &p0, p, a-225, len2 );
Translate( &p1, p0, a, len3 );
Translate( &p2, p0, a+180, len3 );
@@ -393,16 +412,20 @@ EXPORT void SetAllTrackSelect( BOOL_T select )
selectedTrackCount = 0;
trk = NULL;
while ( TrackIterate( &trk ) ) {
- if ((!select) || (GetLayerVisible( GetTrkLayer( trk )) && !GetLayerFrozen(GetTrkLayer( trk )) )) {
- if (select)
+ if ((!select) || (GetLayerVisible( GetTrkLayer( trk ))
+ && !GetLayerFrozen(GetTrkLayer( trk )) )) {
+ if (select) {
selectedTrackCount++;
+ }
if ((GetTrkSelected(trk)!=0) != select) {
- if (select)
+ if (select) {
SetTrkBits( trk, TB_SELECTED );
- else
+ } else {
ClrTrkBits( trk, TB_SELECTED );
- if (!doRedraw)
+ }
+ if (!doRedraw) {
SetTrkBits( trk, TB_SELREDRAW );
+ }
DrawTrackAndEndPts( trk, wDrawColorBlack );
}
}
@@ -421,7 +444,7 @@ EXPORT void SetAllTrackSelect( BOOL_T select )
* \param none
* \return none
*/
-
+
EXPORT void InvertTrackSelect( void * unused )
{
track_p trk;
@@ -429,11 +452,11 @@ EXPORT void InvertTrackSelect( void * unused )
trk = NULL;
while ( TrackIterate( &trk ) ) {
if (GetLayerVisible( GetTrkLayer( trk )) &&
- !GetLayerModule(GetTrkLayer( trk )) && !GetLayerFrozen(GetTrkLayer( trk )) ) {
+ !GetLayerModule(GetTrkLayer( trk )) && !GetLayerFrozen(GetTrkLayer( trk )) ) {
SelectOneTrack( trk, GetTrkSelected(trk)==0 );
}
}
-
+
RedrawSelectedTracksBoundary();
SelectedTrackCountChange();
MainRedraw(); // InvertTrackSelect
@@ -444,28 +467,30 @@ EXPORT void InvertTrackSelect( void * unused )
* \param none
* \return none
*/
-
+
EXPORT void OrphanedTrackSelect( void *ptr )
{
track_p trk;
EPINX_T ep;
int cnt ;
-
+
trk = NULL;
-
+
while( TrackIterate( &trk ) ) {
cnt = 0;
- if( GetLayerVisible( GetTrkLayer( trk ) && !GetLayerModule(GetTrkLayer(trk)) && !GetLayerFrozen(GetTrkLayer(trk)))) {
+ if( GetLayerVisible( GetTrkLayer( trk ) && !GetLayerModule(GetTrkLayer(trk))
+ && !GetLayerFrozen(GetTrkLayer(trk)))) {
for( ep = 0; ep < GetTrkEndPtCnt( trk ); ep++ ) {
- if( GetTrkEndTrk( trk, ep ) )
- cnt++;
+ if( GetTrkEndTrk( trk, ep ) ) {
+ cnt++;
+ }
}
-
+
if( !cnt && GetTrkEndPtCnt( trk )) {
SetTrkBits( trk, TB_SELECTED );
DrawTrackAndEndPts( trk, wDrawColorBlack );
- selectedTrackCount++;
- }
+ selectedTrackCount++;
+ }
}
}
RedrawSelectedTracksBoundary();
@@ -474,43 +499,45 @@ EXPORT void OrphanedTrackSelect( void *ptr )
}
static void SelectOneTrack(
- track_p trk,
- wBool_t selected )
+ track_p trk,
+ wBool_t selected )
{
- BOOL_T bRedraw = (GetTrkSelected(trk) != 0) != selected;
- if ( !bRedraw ) {
- ClrTrkBits( trk, TB_SELREDRAW );
- return;
- }
- SetTrkBits( trk, TB_SELREDRAW );
- if (selected) {
- SetTrkBits( trk, TB_SELECTED );
- selectedTrackCount++;
- } else {
- ClrTrkBits( trk, TB_SELECTED );
- selectedTrackCount--;
- }
- SelectedTrackCountChange();
+ BOOL_T bRedraw = (GetTrkSelected(trk) != 0) != selected;
+ if ( !bRedraw ) {
+ ClrTrkBits( trk, TB_SELREDRAW );
+ return;
+ }
+ SetTrkBits( trk, TB_SELREDRAW );
+ if (selected) {
+ SetTrkBits( trk, TB_SELECTED );
+ selectedTrackCount++;
+ } else {
+ ClrTrkBits( trk, TB_SELECTED );
+ selectedTrackCount--;
+ }
+ SelectedTrackCountChange();
}
EXPORT void HighlightSelectedTracks(
- track_p trk_ignore, BOOL_T keep, BOOL_T invert )
+ track_p trk_ignore, BOOL_T keep, BOOL_T invert )
{
track_p trk = NULL;
- if ( selectedTrackCount == 0 )
+ if ( selectedTrackCount == 0 ) {
return;
+ }
while ( TrackIterate( &trk ) ) {
- if (trk == trk_ignore) continue;
- if(GetTrkSelected(trk)) {
- if (!GetLayerVisible( GetTrkLayer( trk ))) continue;
- if (keep)
- DrawTrack(trk,&tempD,selectedColor);
- else if (invert)
- DrawTrack(trk,&tempD,wDrawColorPreviewUnselected);
- else
- DrawTrack(trk,&tempD,wDrawColorPreviewSelected );
- }
+ if (trk == trk_ignore) { continue; }
+ if(GetTrkSelected(trk)) {
+ if (!GetLayerVisible( GetTrkLayer( trk ))) { continue; }
+ if (keep) {
+ DrawTrack(trk,&tempD,selectedColor);
+ } else if (invert) {
+ DrawTrack(trk,&tempD,wDrawColorPreviewUnselected);
+ } else {
+ DrawTrack(trk,&tempD,wDrawColorPreviewSelected );
+ }
+ }
}
}
@@ -521,28 +548,31 @@ EXPORT void HighlightSelectedTracks(
* Ignore Frozen Tracks
*/
static void SelectConnectedTracks(
- track_p trk, BOOL_T display_only )
+ track_p trk, BOOL_T display_only )
{
track_p trk1;
int inx;
EPINX_T ep;
- tlist_da.cnt = 0;
+ DYNARR_RESET( track_p, tlist_da );
TlistAppend( trk );
InfoCount( 0 );
- if (!display_only) wDrawDelayUpdate( mainD.d, FALSE );
+ if (!display_only) { wDrawDelayUpdate( mainD.d, FALSE ); }
for (inx=0; inx<tlist_da.cnt; inx++) {
- if ( inx > 0 && (selectedTrackCount == 0) && !display_only )
+ if ( inx > 0 && (selectedTrackCount == 0) && !display_only ) {
return;
+ }
trk = Tlist(inx);
if (!GetLayerFrozen(GetTrkLayer(trk))) {
if (inx!=0 &&
- GetTrkSelected(trk)) {
- if (display_only)
+ GetTrkSelected(trk)) {
+ if (display_only) {
DrawTrack(trk,&tempD,wDrawColorPreviewSelected );
+ }
continue;
} else if (GetTrkSelected(trk)) {
- if (display_only)
+ if (display_only) {
DrawTrack(trk,&tempD,wDrawColorPreviewUnselected);
+ }
continue;
}
}
@@ -550,11 +580,11 @@ static void SelectConnectedTracks(
trk1 = GetTrkEndTrk( trk, ep );
if (trk1 && !TListSearch(trk1) && GetLayerVisible( GetTrkLayer( trk1 ))) {
if (GetTrkSelected(trk1)) {
- if (display_only) DrawTrack(trk1,&tempD,wDrawColorPreviewSelected );
- } else TlistAppend( trk1 );
+ if (display_only) { DrawTrack(trk1,&tempD,wDrawColorPreviewSelected ); }
+ } else { TlistAppend( trk1 ); }
}
}
- if (display_only && !GetLayerFrozen(GetTrkLayer(trk))) DrawTrack(trk,&tempD,wDrawColorPreviewSelected );
+ if (display_only && !GetLayerFrozen(GetTrkLayer(trk))) { DrawTrack(trk,&tempD,wDrawColorPreviewSelected ); }
else if (!GetTrkSelected(trk)) {
if (GetLayerModule(GetTrkLayer(trk))) {
continue;
@@ -575,44 +605,47 @@ static void SelectConnectedTracks(
}
typedef void (*doModuleTrackCallBack_t)(track_p, BOOL_T);
-static int DoModuleTracks( int moduleLayer, doModuleTrackCallBack_t doit, BOOL_T val)
+static int DoModuleTracks( int moduleLayer, doModuleTrackCallBack_t doit,
+ BOOL_T val)
{
track_p trk;
trk = NULL;
int cnt = 0;
while ( TrackIterate( &trk ) ) {
if (GetTrkLayer(trk) == moduleLayer) {
- doit( trk, val );
- cnt++;
+ doit( trk, val );
+ cnt++;
}
}
return cnt;
}
-static void DrawSingleTrack(track_p trk, BOOL_T bit) {
+static void DrawSingleTrack(track_p trk, BOOL_T bit)
+{
DrawTrack(trk,&tempD,bit?wDrawColorPreviewSelected:wDrawColorPreviewUnselected);
}
typedef BOOL_T (*testSelectedTrackCallBack_t)(track_p, int);
-static BOOL_T TestAllSelectedTracks( testSelectedTrackCallBack_t testit, int value)
+static BOOL_T TestAllSelectedTracks( testSelectedTrackCallBack_t testit,
+ int value)
{
track_p trk;
- trk = NULL;
- while ( TrackIterate( &trk ) ) {
- if (GetTrkSelected(trk)) {
- if ( !testit( trk, value ) ) {
- return FALSE;
- }
+ trk = NULL;
+ while ( TrackIterate( &trk ) ) {
+ if (GetTrkSelected(trk)) {
+ if ( !testit( trk, value ) ) {
+ return FALSE;
}
}
+ }
return TRUE;
}
typedef BOOL_T (*doSelectedTrackCallBack_t)(track_p, BOOL_T);
-static void DoSelectedTracks( doSelectedTrackCallBack_t doit )
+EXPORT void DoSelectedTracks( doSelectedTrackCallBack_t doit )
{
track_p trk;
trk = NULL;
@@ -645,8 +678,9 @@ static BOOL_T SelectedTracksAreFrozen( void )
EXPORT void SelectTrackWidth( void* width )
{
track_p trk;
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return;
+ }
if (selectedTrackCount<=0) {
ErrorMessage( MSG_NO_SELECTED_TRK );
return;
@@ -670,8 +704,9 @@ static void SelectLineType( void* widthVP )
{
int width = (int)VP2L(widthVP);
track_p trk;
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return;
+ }
if (selectedTrackCount<=0) {
ErrorMessage( MSG_NO_SELECTED_TRK );
return;
@@ -682,11 +717,11 @@ static void SelectLineType( void* widthVP )
while ( TrackIterate( &trk ) ) {
if (GetTrkSelected(trk)) {
UndoModify( trk );
- if (QueryTrack(trk, Q_CAN_MODIFY_CONTROL_POINTS))
+ if (QueryTrack(trk, Q_CAN_MODIFY_CONTROL_POINTS)) {
SetBezierLineType(trk, width);
- else if (QueryTrack(trk, Q_IS_DRAW))
+ } else if (QueryTrack(trk, Q_IS_DRAW)) {
SetLineType( trk, width );
- else if (QueryTrack(trk, Q_IS_STRUCTURE)) {
+ } else if (QueryTrack(trk, Q_IS_STRUCTURE)) {
SetCompoundLineType(trk, width);
}
}
@@ -707,13 +742,15 @@ EXPORT int SelectDelete( void )
}
}
- if (doingDouble || (GetCurrentCommand() == modifyCmdInx)) return 1;
+ if (doingDouble || (GetCurrentCommand() == modifyCmdInx)) { return 1; }
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return 0;
+ }
if (selectedTrackCount>0) {
BOOL_T UndoStarted = FALSE;
- if (!TestAllSelectedTracks(QueryTrack,(int)Q_ISTRAIN)) { // If all Cars, don't bother with UndoStart as there will be nothing to delete
+ if (!TestAllSelectedTracks(QueryTrack,
+ (int)Q_ISTRAIN)) { // If all Cars, don't bother with UndoStart as there will be nothing to delete
UndoStarted = TRUE;
UndoStart( _("Delete Tracks"), "delete" );
}
@@ -725,8 +762,9 @@ EXPORT int SelectDelete( void )
wDrawDelayUpdate( mapD.d, FALSE );
selectedTrackCount = 0;
SelectedTrackCountChange();
- if (UndoStarted)
+ if (UndoStarted) {
UndoEnd();
+ }
} else {
ErrorMessage( MSG_NO_SELECTED_TRK );
}
@@ -736,7 +774,8 @@ EXPORT int SelectDelete( void )
/*
* Called By Windows directly with Delete Key. We first try a simple Delete, and if that doesn't work saying "In Modify" we call Modify with a Text key for Delete
*/
-EXPORT void TrySelectDelete( void ) {
+EXPORT void TrySelectDelete( void )
+{
if(SelectDelete() == 1) {
CmdModify((C_TEXT+(int)(127<<8)),zero);
}
@@ -756,13 +795,15 @@ static BOOL_T FlipHidden( track_p trk, BOOL_T unused )
UndrawNewTrack( trk2 );
}*/
UndoModify( trk );
- if ( drawTunnel == 0 )
+ if ( drawTunnel == 0 ) {
flipHiddenDoSelectRecount = TRUE;
+ }
if (GetTrkVisible(trk)) {
ClrTrkBits( trk, TB_VISIBLE|(drawTunnel==0?(TB_SELECTED|TB_SELREDRAW):0) );
ClrTrkBits (trk, TB_BRIDGE);
ClrTrkBits (trk, TB_NOTIES);
-; } else {
+ ;
+ } else {
SetTrkBits( trk, TB_VISIBLE );
}
/*DrawNewTrack( trk );*/
@@ -787,6 +828,18 @@ static BOOL_T FlipBridge( track_p trk, BOOL_T unused )
return TRUE;
}
+static BOOL_T FlipRoadbed( track_p trk, BOOL_T unused )
+{
+ UndoModify( trk );
+ if (GetTrkRoadbed(trk)) {
+ ClrTrkBits( trk, TB_ROADBED );
+ } else {
+ SetTrkBits( trk, TB_ROADBED );
+ SetTrkBits( trk, TB_VISIBLE);
+ }
+ return TRUE;
+}
+
static BOOL_T FlipTies( track_p trk, BOOL_T unused )
{
UndoModify( trk );
@@ -801,8 +854,9 @@ static BOOL_T FlipTies( track_p trk, BOOL_T unused )
EXPORT void SelectTunnel( void * unused )
{
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return;
+ }
if (selectedTrackCount>0) {
flipHiddenDoSelectRecount = FALSE;
UndoStart( _("Hide Tracks (Tunnel)"), "tunnel" );
@@ -813,14 +867,16 @@ EXPORT void SelectTunnel( void * unused )
} else {
ErrorMessage( MSG_NO_SELECTED_TRK );
}
- if ( flipHiddenDoSelectRecount )
+ if ( flipHiddenDoSelectRecount ) {
SelectRecount();
+ }
}
EXPORT void SelectBridge( void * unused )
{
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return;
+ }
if (selectedTrackCount>0) {
flipHiddenDoSelectRecount = FALSE;
UndoStart( _("Bridge Tracks "), "bridge" );
@@ -834,10 +890,29 @@ EXPORT void SelectBridge( void * unused )
MainRedraw(); // SelectBridge
}
+EXPORT void SelectRoadbed( void * unused )
+{
+ if (SelectedTracksAreFrozen()) {
+ return;
+ }
+ if (selectedTrackCount>0) {
+ flipHiddenDoSelectRecount = FALSE;
+ UndoStart( _("Roadbed Tracks "), "roadbed" );
+ wDrawDelayUpdate( mainD.d, TRUE );
+ DoSelectedTracks( FlipRoadbed );
+ wDrawDelayUpdate( mainD.d, FALSE );
+ UndoEnd();
+ } else {
+ ErrorMessage( MSG_NO_SELECTED_TRK );
+ }
+ MainRedraw(); // SelectBridge
+}
+
EXPORT void SelectTies( void * unused )
{
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return;
+ }
if (selectedTrackCount>0) {
flipHiddenDoSelectRecount = FALSE;
UndoStart( _("Ties Tracks "), "noties" );
@@ -874,22 +949,23 @@ static BOOL_T SetLayer( track_p trk, BOOL_T unused )
EXPORT void MoveSelectedTracksToCurrentLayer( void * unused )
{
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return;
- if (selectedTrackCount>0) {
- UndoStart( _("Move To Current Layer"), "changeLayer" );
- DoSelectedTracks( SetLayer );
- UndoEnd();
- } else {
- ErrorMessage( MSG_NO_SELECTED_TRK );
- }
+ }
+ if (selectedTrackCount>0) {
+ UndoStart( _("Move To Current Layer"), "changeLayer" );
+ DoSelectedTracks( SetLayer );
+ UndoEnd();
+ } else {
+ ErrorMessage( MSG_NO_SELECTED_TRK );
+ }
}
EXPORT void SelectCurrentLayer( void * unused )
{
track_p trk;
trk = NULL;
- if (GetLayerFrozen(curLayer)) return;
+ if (GetLayerFrozen(curLayer)) { return; }
while ( TrackIterate( &trk ) ) {
if ((!GetTrkSelected(trk)) && GetTrkLayer(trk) == curLayer) {
SelectOneTrack( trk, TRUE );
@@ -898,7 +974,8 @@ EXPORT void SelectCurrentLayer( void * unused )
RedrawSelectedTracksBoundary();
}
-EXPORT void DeselectLayer( unsigned int layer ) {
+EXPORT void DeselectLayer( unsigned int layer )
+{
track_p trk;
trk = NULL;
while ( TrackIterate( &trk ) ) {
@@ -926,8 +1003,9 @@ static BOOL_T ClearElevation( track_p trk, BOOL_T unused )
EXPORT void ClearElevations( void * unused )
{
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return;
+ }
if (selectedTrackCount>0) {
UndoStart( _("Clear Elevations"), "clear elevations" );
DoSelectedTracks( ClearElevation );
@@ -951,8 +1029,9 @@ static BOOL_T AddElevation( track_p trk, BOOL_T unused )
if ((trk1=GetTrkEndTrk(trk,ep))) {
ep1 = GetEndPtConnectedToMe( trk1, trk );
if (ep1 >= 0) {
- if (GetTrkSelected(trk1) && GetTrkIndex(trk1)<GetTrkIndex(trk))
+ if (GetTrkSelected(trk1) && GetTrkIndex(trk1)<GetTrkIndex(trk)) {
continue;
+ }
}
}
if (EndPtIsDefinedElev(trk,ep)) {
@@ -969,8 +1048,9 @@ static BOOL_T AddElevation( track_p trk, BOOL_T unused )
EXPORT void AddElevations( DIST_T delta )
{
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return;
+ }
if (selectedTrackCount>0) {
elevDelta = delta;
UndoStart( _("Add Elevations"), "add elevations" );
@@ -985,8 +1065,9 @@ EXPORT void AddElevations( DIST_T delta )
EXPORT void DoRefreshCompound( void * unused )
{
- if (SelectedTracksAreFrozen())
+ if (SelectedTracksAreFrozen()) {
return;
+ }
if (selectedTrackCount>0) {
UndoStart( _("Refresh Compound"), "refresh compound" );
DoSelectedTracks( RefreshCompound );
@@ -1000,7 +1081,8 @@ EXPORT void DoRefreshCompound( void * unused )
static drawCmd_t tempSegsD = {
- NULL, &tempSegDrawFuncs, 0, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix };
+ NULL, &tempSegDrawFuncs, 0, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix
+};
EXPORT void WriteSelectedTracksToTempSegs( void )
{
track_p trk;
@@ -1008,8 +1090,9 @@ EXPORT void WriteSelectedTracksToTempSegs( void )
tempSegsD.dpi = mainD.dpi;
for ( trk=NULL; TrackIterate(&trk); ) {
if ( GetTrkSelected( trk ) ) {
- if ( IsTrack( trk ) )
+ if ( IsTrack( trk ) ) {
continue;
+ }
ClrTrkBits( trk, TB_SELECTED );
DrawTrack( trk, &tempSegsD, wDrawColorBlack );
SetTrkBits( trk, TB_SELECTED );
@@ -1017,260 +1100,6 @@ EXPORT void WriteSelectedTracksToTempSegs( void )
}
}
-static char rescaleFromScale[20];
-static char rescaleFromGauge[20];
-
-static char * rescaleToggleLabels[] = { N_("Scale"), N_("Ratio"), NULL };
-static long rescaleMode;
-static wIndex_t rescaleFromScaleInx;
-static wIndex_t rescaleFromGaugeInx;
-static wIndex_t rescaleToScaleInx;
-static wIndex_t rescaleToGaugeInx;
-static wIndex_t rescaleToInx;
-static long rescaleNoChangeDim = FALSE;
-static FLOAT_T rescalePercent;
-static char * rescaleChangeDimLabels[] = { N_("Do not resize track"), NULL };
-static paramFloatRange_t r0o001_10000 = { 0.001, 10000.0 };
-static paramData_t rescalePLs[] = {
-#define I_RESCALE_MODE (0)
- { PD_RADIO, &rescaleMode, "toggle", PDO_NOPREF, &rescaleToggleLabels, N_("Rescale by:"), BC_HORZ|BC_NOBORDER },
-#define I_RESCALE_FROM_SCALE (1)
- { PD_STRING, rescaleFromScale, "fromS", PDO_NOPREF|PDO_STRINGLIMITLENGTH, I2VP(100), N_("From:"),0, 0, sizeof(rescaleFromScale)},
-#define I_RESCALE_FROM_GAUGE (2)
- { PD_STRING, rescaleFromGauge, "fromG", PDO_NOPREF|PDO_DLGHORZ | PDO_STRINGLIMITLENGTH, I2VP(100), " / ", 0, 0, sizeof(rescaleFromGauge)},
-#define I_RESCALE_TO_SCALE (3)
- { PD_DROPLIST, &rescaleToScaleInx, "toS", PDO_NOPREF|PDO_LISTINDEX, I2VP(100), N_("To: ") },
-#define I_RESCALE_TO_GAUGE (4)
- { PD_DROPLIST, &rescaleToGaugeInx, "toG", PDO_NOPREF|PDO_LISTINDEX|PDO_DLGHORZ, NULL, " / " },
-#define I_RESCALE_CHANGE (5)
- { PD_TOGGLE, &rescaleNoChangeDim, "change-dim", 0, &rescaleChangeDimLabels, "", BC_HORZ|BC_NOBORDER },
-#define I_RESCALE_PERCENT (6)
- { PD_FLOAT, &rescalePercent, "ratio", 0, &r0o001_10000, N_("Ratio") },
- { PD_MESSAGE, "%", NULL, PDO_DLGHORZ } };
-static paramGroup_t rescalePG = { "rescale", 0, rescalePLs, COUNT( rescalePLs ) };
-
-
-static long getboundsCount;
-static coOrd getboundsLo, getboundsHi;
-
-static BOOL_T GetboundsDoIt( track_p trk, BOOL_T unused )
-{
- coOrd hi, lo;
-
- GetBoundingBox( trk, &hi, &lo );
- if ( getboundsCount == 0 ) {
- getboundsLo = lo;
- getboundsHi = hi;
- } else {
- if ( lo.x < getboundsLo.x ) getboundsLo.x = lo.x;
- if ( lo.y < getboundsLo.y ) getboundsLo.y = lo.y;
- if ( hi.x > getboundsHi.x ) getboundsHi.x = hi.x;
- if ( hi.y > getboundsHi.y ) getboundsHi.y = hi.y;
- }
- getboundsCount++;
- return TRUE;
-}
-
-static coOrd rescaleShift;
-static BOOL_T RescaleDoIt( track_p trk, BOOL_T unused )
-{
- EPINX_T ep, ep1;
- track_p trk1;
- UndrawNewTrack( trk );
- UndoModify(trk);
- if ( rescalePercent != 100.0 ) {
- for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
- if ((trk1 = GetTrkEndTrk(trk,ep)) != NULL &&
- !GetTrkSelected(trk1)) {
- ep1 = GetEndPtConnectedToMe( trk1, trk );
- DisconnectTracks( trk, ep, trk1, ep1 );
- }
- }
- /* should the track dimensions ie. length or radius be changed as well? */
- if( rescaleNoChangeDim == 0 )
- RescaleTrack( trk, rescalePercent/100.0, rescaleShift );
- }
-
- if ( rescaleMode==0 )
- SetTrkScale( trk, rescaleToInx );
- getboundsCount++;
- DrawNewTrack( trk );
- return TRUE;
-}
-
-
-static void RescaleDlgOk(
- void * unused )
-{
- coOrd center, size;
- DIST_T d;
- FLOAT_T ratio = rescalePercent/100.0;
-
- UndoStart( _("Rescale Tracks"), "Rescale" );
- getboundsCount = 0;
- DoSelectedTracks( GetboundsDoIt );
- center.x = (getboundsLo.x+getboundsHi.x)/2.0;
- center.y = (getboundsLo.y+getboundsHi.y)/2.0;
- size.x = (getboundsHi.x-getboundsLo.x)/2.0*ratio;
- size.y = (getboundsHi.y-getboundsLo.y)/2.0*ratio;
- getboundsLo.x = center.x - size.x;
- getboundsLo.y = center.y - size.y;
- getboundsHi.x = center.x + size.x;
- getboundsHi.y = center.y + size.y;
- if ( getboundsLo.x < 0 ) {
- getboundsHi.x -= getboundsLo.x;
- getboundsLo.x = 0;
- } else if ( getboundsHi.x > mapD.size.x ) {
- d = getboundsHi.x - mapD.size.x;
- if ( getboundsLo.x < d )
- d = getboundsLo.x;
- getboundsHi.x -= d;
- getboundsLo.x -= d;
- }
- if ( getboundsLo.y < 0 ) {
- getboundsHi.y -= getboundsLo.y;
- getboundsLo.y = 0;
- } else if ( getboundsHi.y > mapD.size.y ) {
- d = getboundsHi.y - mapD.size.y;
- if ( getboundsLo.y < d )
- d = getboundsLo.y;
- getboundsHi.y -= d;
- getboundsLo.y -= d;
- }
- if ( rescaleNoChangeDim == 0 &&
- (getboundsHi.x > mapD.size.x ||
- getboundsHi.y > mapD.size.y )) {
- NoticeMessage( MSG_RESCALE_TOO_BIG, _("Ok"), NULL, FormatDistance(getboundsHi.x), FormatDistance(getboundsHi.y) );
- }
- rescaleShift.x = (getboundsLo.x+getboundsHi.x)/2.0 - center.x*ratio;
- rescaleShift.y = (getboundsLo.y+getboundsHi.y)/2.0 - center.y*ratio;
-
- rescaleToInx = GetScaleInx( rescaleToScaleInx, rescaleToGaugeInx );
- DoSelectedTracks( RescaleDoIt );
-
- // rescale the background if it exists and the layout is resized
- if (HasBackGround() && ratio != 1.0) {
- coOrd pos = GetLayoutBackGroundPos();
- double size = GetLayoutBackGroundSize();
- pos.x = ratio * pos.x + rescaleShift.x;
- pos.y = ratio * pos.y + rescaleShift.y;
- SetLayoutBackGroundPos(pos);
-
- size *= ratio;
- SetLayoutBackGroundSize(size);
- }
- DoRedraw();
- wHide( rescalePG.win );
-}
-
-
-static void RescaleDlgUpdate(
- paramGroup_p pg,
- int inx,
- void * valueP )
-{
- switch (inx) {
- case I_RESCALE_MODE:
- wControlShow( pg->paramPtr[I_RESCALE_FROM_SCALE].control, rescaleMode==0 );
- wControlActive( pg->paramPtr[I_RESCALE_FROM_SCALE].control, FALSE );
- wControlShow( pg->paramPtr[I_RESCALE_TO_SCALE].control, rescaleMode==0 );
- wControlShow( pg->paramPtr[I_RESCALE_FROM_GAUGE].control, rescaleMode==0 );
- wControlActive( pg->paramPtr[I_RESCALE_FROM_GAUGE].control, FALSE );
- wControlShow( pg->paramPtr[I_RESCALE_TO_GAUGE].control, rescaleMode==0 );
- wControlShow( pg->paramPtr[I_RESCALE_CHANGE].control, rescaleMode==0 );
- wControlActive( pg->paramPtr[I_RESCALE_PERCENT].control, rescaleMode==1 );
- if ( rescaleMode!=0 )
- break;
- case I_RESCALE_TO_SCALE:
- LoadGaugeList( (wList_p)rescalePLs[I_RESCALE_TO_GAUGE].control, *((int *)valueP) );
- rescaleToGaugeInx = 0;
- ParamLoadControl( pg, I_RESCALE_TO_GAUGE );
- ParamLoadControl( pg, I_RESCALE_TO_SCALE );
- rescalePercent = GetScaleDescRatio(rescaleFromScaleInx)/GetScaleDescRatio(rescaleToScaleInx)*100.0;
- wControlActive( pg->paramPtr[I_RESCALE_CHANGE].control, (rescaleFromScaleInx != rescaleToScaleInx) );
- ParamLoadControl( pg, I_RESCALE_PERCENT );
- break;
- case I_RESCALE_TO_GAUGE:
- ParamLoadControl( pg, I_RESCALE_TO_GAUGE );
- break;
- case I_RESCALE_FROM_SCALE:
- ParamLoadControl( pg, I_RESCALE_FROM_SCALE );
- break;
- case I_RESCALE_FROM_GAUGE:
- ParamLoadControl( pg, I_RESCALE_FROM_GAUGE );
- break;
- case I_RESCALE_CHANGE:
- ParamLoadControl( pg, I_RESCALE_CHANGE );
- break;
- case -1:
- break;
- }
- ParamDialogOkActive( pg, rescalePercent!=100.0 || rescaleFromGaugeInx != rescaleToGaugeInx );
-}
-
-/**
- * Get the scale gauge information for the selected track pieces.
- * FIXME: special cases like tracks pieces with different gauges or scale need to be handled
- *
- * \param IN trk track element
- * \param IN unused
- * \return TRUE;
- */
-
-static BOOL_T SelectedScaleGauge( track_p trk, BOOL_T unused )
-{
- char *scaleName;
- SCALEINX_T scale;
- SCALEDESCINX_T scaleInx;
- GAUGEINX_T gaugeInx;
-
- scale = GetTrkScale( trk );
- scaleName = GetScaleName( scale );
- if( strcmp( scaleName, "*" )) {
- GetScaleGauge( scale, &scaleInx, &gaugeInx );
- strcpy( rescaleFromScale,GetScaleDesc( scaleInx ));
- strcpy( rescaleFromGauge, GetGaugeDesc( scaleInx, gaugeInx ));
-
- rescaleFromScaleInx = scaleInx;
- rescaleFromGaugeInx = gaugeInx;
- rescaleToScaleInx = scaleInx;
- rescaleToGaugeInx = gaugeInx;
- }
-
- return TRUE;
-}
-
-/**
- * Bring up the rescale dialog. The dialog for rescaling the selected pieces
- * of track is created if necessary and shown. Handling of user input is done via
- * RescaleDlgUpdate()
- */
-
-EXPORT void DoRescale( void * unused )
-{
- if ( rescalePG.win == NULL ) {
- ParamCreateDialog( &rescalePG, MakeWindowTitle(_("Rescale")), _("Ok"), RescaleDlgOk, wHide, TRUE, NULL, F_BLOCK, RescaleDlgUpdate );
- LoadScaleList( (wList_p)rescalePLs[I_RESCALE_TO_SCALE].control );
- LoadGaugeList( (wList_p)rescalePLs[I_RESCALE_TO_GAUGE].control, GetLayoutCurScaleDesc() ); /* set correct gauge list here */
- rescaleFromScaleInx = GetLayoutCurScale();
- rescaleToScaleInx = rescaleFromScaleInx;
- rescalePercent = 100.0;
- }
-
- DoSelectedTracks( SelectedScaleGauge );
-
- RescaleDlgUpdate( &rescalePG, I_RESCALE_MODE, &rescaleMode );
- RescaleDlgUpdate( &rescalePG, I_RESCALE_CHANGE, &rescaleMode );
-
- RescaleDlgUpdate( &rescalePG, I_RESCALE_FROM_GAUGE, rescaleFromGauge );
- RescaleDlgUpdate( &rescalePG, I_RESCALE_FROM_SCALE, rescaleFromScale );
-
- RescaleDlgUpdate( &rescalePG, I_RESCALE_TO_SCALE, &rescaleToScaleInx );
- RescaleDlgUpdate( &rescalePG, I_RESCALE_TO_GAUGE, &rescaleToGaugeInx );
-
- wShow( rescalePG.win );
-}
-
static void DrawSelectedTracksD( drawCmd_p d, wDrawColor color )
{
@@ -1282,31 +1111,35 @@ static void DrawSelectedTracksD( drawCmd_p d, wDrawColor color )
trk = Tlist(inx);
if (d != &mapD) {
GetBoundingBox( trk, &hi, &lo );
- if ( OFF_D( d->orig, d->size, lo, hi ) )
+ if ( OFF_D( d->orig, d->size, lo, hi ) ) {
continue;
+ }
}
- if (color != wDrawColorWhite)
+ if (color != wDrawColorWhite) {
ClrTrkBits(trk, TB_UNDRAWN);
- if (color == wDrawColorWhite)
+ }
+ if (color == wDrawColorWhite) {
SetTrkBits( trk, TB_UNDRAWN );
+ }
}
MainRedraw(); //Omitting all the tracks with TB_UNDRAWN set
/*wDrawDelayUpdate( d->d, FALSE );*/
}
static BOOL_T AddSelectedTrack(
- track_p trk, BOOL_T unused )
+ track_p trk, BOOL_T unused )
{
DYNARR_APPEND( track_p, tlist_da, 10 );
DYNARR_LAST( track_p, tlist_da ) = trk;
return TRUE;
}
-static BOOL_T RemoveSelectedTrack(track_p trk) {
+static BOOL_T RemoveSelectedTrack(track_p trk)
+{
- for(int i=0;i<tlist_da.cnt; i++) {
+ for(int i=0; i<tlist_da.cnt; i++) {
if (DYNARR_N(track_p,tlist_da,i) == trk) {
- for (int j=i;j<tlist_da.cnt-1;j++) {
+ for (int j=i; j<tlist_da.cnt-1; j++) {
DYNARR_N(track_p,tlist_da,j) = DYNARR_N(track_p,tlist_da,j+1);
}
tlist_da.cnt--;
@@ -1316,13 +1149,43 @@ static BOOL_T RemoveSelectedTrack(track_p trk) {
return FALSE;
}
+static long getSelectedBoundsCount;
+static coOrd getSelectedBoundsLo, getSelectedBoundsHi;
+
+static BOOL_T GetBoundsDoIt( track_p trk, BOOL_T unused )
+{
+ coOrd hi, lo;
+
+ GetBoundingBox( trk, &hi, &lo );
+ if ( getSelectedBoundsCount == 0 ) {
+ getSelectedBoundsLo = lo;
+ getSelectedBoundsHi = hi;
+ } else {
+ if ( lo.x < getSelectedBoundsLo.x ) { getSelectedBoundsLo.x = lo.x; }
+ if ( lo.y < getSelectedBoundsLo.y ) { getSelectedBoundsLo.y = lo.y; }
+ if ( hi.x > getSelectedBoundsHi.x ) { getSelectedBoundsHi.x = hi.x; }
+ if ( hi.y > getSelectedBoundsHi.y ) { getSelectedBoundsHi.y = hi.y; }
+ }
+ getSelectedBoundsCount++;
+ return TRUE;
+}
+
+EXPORT void GetSelectedBounds( coOrd * low, coOrd * high )
+{
+ getSelectedBoundsCount = 0;
+ DoSelectedTracks( GetBoundsDoIt );
+ *low = getSelectedBoundsLo;
+ *high = getSelectedBoundsHi;
+}
+
static coOrd moveOrig;
static ANGLE_T moveAngle;
static coOrd moveD_hi, moveD_lo;
static drawCmd_t moveD = {
- NULL, &tempSegDrawFuncs, DC_SIMPLE, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix };
+ NULL, &tempSegDrawFuncs, DC_SIMPLE, 1, 0.0, {0.0, 0.0}, {0.0, 0.0}, Pix2CoOrd, CoOrd2Pix
+};
@@ -1347,12 +1210,13 @@ static void AccumulateTracks( void )
if (trk) {
GetBoundingBox( trk, &hi, &lo );
if (lo.x <= moveD_hi.x && hi.x >= moveD_lo.x &&
- lo.y <= moveD_hi.y && hi.y >= moveD_lo.y ) {
- if (!QueryTrack(trk,Q_IS_CORNU))
- DrawTrack( trk, &moveD, wDrawColorBlack );
+ lo.y <= moveD_hi.y && hi.y >= moveD_lo.y ) {
+ if (!QueryTrack(trk,Q_IS_CORNU)) {
+ DrawTrack( trk, &moveD, wDrawColorBlack );
}
- movedCnt++;
}
+ movedCnt++;
+ }
}
InfoCount( movedCnt );
/*wDrawDelayUpdate( moveD.d, FALSE );*/
@@ -1360,13 +1224,15 @@ static void AccumulateTracks( void )
static dynArr_t auto_select_da;
-static void AddEndCornus() {
- for (int i=0;i<tlist_da.cnt;i++) {
+static void AddEndCornus()
+{
+ for (int i=0; i<tlist_da.cnt; i++) {
track_p trk = DYNARR_N(track_p,tlist_da,i);
track_p tc;
- for (int j=GetTrkEndPtCnt(trk)-1;j>=0;j--) {
+ for (int j=GetTrkEndPtCnt(trk)-1; j>=0; j--) {
tc = GetTrkEndTrk(trk,j);
- if (tc && !GetTrkSelected(tc) && QueryTrack(tc,Q_IS_CORNU) && !QueryTrack(trk,Q_IS_CORNU)) { //On end and cornu
+ if (tc && !GetTrkSelected(tc) && QueryTrack(tc,Q_IS_CORNU)
+ && !QueryTrack(trk,Q_IS_CORNU)) { //On end and cornu
SelectOneTrack( tc, TRUE );
DYNARR_APPEND(track_p,tlist_da,1); //Add to selected list
DYNARR_LAST(track_p,tlist_da) = tc;
@@ -1377,9 +1243,10 @@ static void AddEndCornus() {
}
}
-static void RemoveEndCornus() {
+static void RemoveEndCornus()
+{
track_p tc;
- for (int i=0;i<auto_select_da.cnt;i++) {
+ for (int i=0; i<auto_select_da.cnt; i++) {
tc = DYNARR_N(track_p,auto_select_da,i);
SelectOneTrack( tc, FALSE );
RemoveSelectedTrack(tc);
@@ -1435,16 +1302,20 @@ static void SetMoveD( BOOL_T moveB, coOrd orig, ANGLE_T angle )
moveD_hi = mainD.orig;
Rotate( &moveD_hi, orig, -angle );
moveD_lo = moveD_hi;
- for (inx=0;inx<3;inx++) {
+ for (inx=0; inx<3; inx++) {
Rotate( &corner[inx], orig, -angle );
- if (corner[inx].x < moveD_lo.x)
+ if (corner[inx].x < moveD_lo.x) {
moveD_lo.x = corner[inx].x;
- if (corner[inx].y < moveD_lo.y)
+ }
+ if (corner[inx].y < moveD_lo.y) {
moveD_lo.y = corner[inx].y;
- if (corner[inx].x > moveD_hi.x)
+ }
+ if (corner[inx].x > moveD_hi.x) {
moveD_hi.x = corner[inx].x;
- if (corner[inx].y > moveD_hi.y)
+ }
+ if (corner[inx].y > moveD_hi.y) {
moveD_hi.y = corner[inx].y;
+ }
}
}
AccumulateTracks();
@@ -1456,9 +1327,10 @@ static void DrawMovedTracks( void )
int inx;
track_p trk;
dynArr_t cornu_segs;
+ DYNARR_INIT( trkSeg_t, cornu_segs );
- DrawSegs( &tempD, moveOrig, moveAngle, &tempSegs(0), tempSegs_da.cnt,
- 0.0, selectedColor );
+ DrawSegsDA( &tempD, NULL, moveOrig, moveAngle, &tempSegs_da, 0.0, selectedColor,
+ 0 );
for ( inx=0; inx<tlist_da.cnt; inx++ ) {
trk = Tlist(inx);
@@ -1470,13 +1342,13 @@ static void DrawMovedTracks( void )
coOrd center[2];
trackParams_t trackParams;
if (GetTrackParams(PARAMS_CORNU, trk, zero, &trackParams)) {
- for (int i=0;i<2;i++) {
+ for (int i=0; i<2; i++) {
pos[i] = trackParams.cornuEnd[i];
center[i] = trackParams.cornuCenter[i];
angle[i] = trackParams.cornuAngle[i];
radius[i] = trackParams.cornuRadius[i];
if (!GetTrkEndTrk(trk,i) ||
- (GetTrkEndTrk(trk,i) && GetTrkSelected(GetTrkEndTrk(trk,i)))) {
+ (GetTrkEndTrk(trk,i) && GetTrkSelected(GetTrkEndTrk(trk,i)))) {
if (!move0B) {
Rotate( &pos[i], zero, moveAngle );
Rotate( &center[i],zero, moveAngle );
@@ -1489,10 +1361,8 @@ static void DrawMovedTracks( void )
}
}
CallCornu0(&pos[0],&center[0],&angle[0],&radius[0],&cornu_segs, FALSE);
- trkSeg_p cornu_p = &DYNARR_N(trkSeg_t,cornu_segs,0);
-
- DrawSegsO(&tempD, trk, zero, 0.0, cornu_p,cornu_segs.cnt,
- GetTrkGauge(trk), selectedColor, DTS_LEFT|DTS_RIGHT );
+ DrawSegsDA(&tempD, trk, zero, 0.0, &cornu_segs,
+ GetTrkGauge(trk), selectedColor, DTS_LEFT|DTS_RIGHT );
}
}
@@ -1504,13 +1374,13 @@ static void DrawMovedTracks( void )
static void MoveTracks(
- BOOL_T eraseFirst,
- BOOL_T move,
- BOOL_T rotate,
- coOrd base,
- coOrd orig,
- ANGLE_T angle,
- BOOL_T undo)
+ BOOL_T eraseFirst,
+ BOOL_T move,
+ BOOL_T rotate,
+ coOrd base,
+ coOrd orig,
+ ANGLE_T angle,
+ BOOL_T undo)
{
track_p trk, trk1;
EPINX_T ep, ep1;
@@ -1530,21 +1400,23 @@ static void MoveTracks(
}
//Do non-Cornu first to establish new end-points
for ( inx=0; inx<tlist_da.cnt; inx++ ) {
- trk = Tlist(inx);
- UndoModify( trk );
- if (QueryTrack(trk, Q_IS_CORNU)) continue;
- if (move)
- MoveTrack( trk, base );
- if (rotate)
- RotateTrack( trk, orig, angle );
- for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
- if ((trk1 = GetTrkEndTrk(trk,ep)) != NULL &&
- !GetTrkSelected(trk1)) {
- ep1 = GetEndPtConnectedToMe( trk1, trk );
- DisconnectTracks( trk, ep, trk1, ep1 );
- DrawEndPt( &mainD, trk1, ep1, wDrawColorBlack );
- }
+ trk = Tlist(inx);
+ UndoModify( trk );
+ if (QueryTrack(trk, Q_IS_CORNU)) { continue; }
+ if (move) {
+ MoveTrack( trk, base );
+ }
+ if (rotate) {
+ RotateTrack( trk, orig, angle );
+ }
+ for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
+ if ((trk1 = GetTrkEndTrk(trk,ep)) != NULL &&
+ !GetTrkSelected(trk1)) {
+ ep1 = GetEndPtConnectedToMe( trk1, trk );
+ DisconnectTracks( trk, ep, trk1, ep1 );
+ DrawEndPt( &mainD, trk1, ep1, wDrawColorBlack );
}
+ }
}
//Now do the just Cornus - to reset to where the fixed parts ended up
for ( inx=0; inx<tlist_da.cnt; inx++ ) {
@@ -1552,28 +1424,30 @@ static void MoveTracks(
UndoModify( trk );
BOOL_T fixed_end;
fixed_end = FALSE;
- if (!QueryTrack(trk, Q_IS_CORNU)) continue;
- for (int i=0;i<2;i++) {
+ if (!QueryTrack(trk, Q_IS_CORNU)) { continue; }
+ for (int i=0; i<2; i++) {
track_p te;
if ((te = GetTrkEndTrk(trk,i)) && !GetTrkSelected(te)) {
fixed_end = TRUE;
}
}
- if (!fixed_end) {
- if (move)
+ if (!fixed_end) {
+ if (move) {
MoveTrack( trk, base );
- if (rotate)
+ }
+ if (rotate) {
RotateTrack( trk, orig, angle );
+ }
for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
if ((trk1 = GetTrkEndTrk(trk,ep)) != NULL &&
- !GetTrkSelected(trk1)) {
+ !GetTrkSelected(trk1)) {
ep1 = GetEndPtConnectedToMe( trk1, trk );
DisconnectTracks( trk, ep, trk1, ep1 );
DrawEndPt( &mainD, trk1, ep1, wDrawColorBlack );
}
}
- } else {
- for (int i=0;i<2;i++) {
+ } else {
+ for (int i=0; i<2; i++) {
if ((trk1 = GetTrkEndTrk(trk,i)) && GetTrkSelected(trk1)) {
ep1 = GetEndPtConnectedToMe( trk1, trk );
DisconnectTracks(trk,i,trk1,ep1);
@@ -1610,7 +1484,8 @@ static void MoveTracks(
end_center = trackParms.cornuCenter[i];
end_center.x += base.x;
end_center.y += base.y;
- SetCornuEndPt(trk,i,end_pos,end_center,trackParms.cornuAngle[i],trackParms.cornuRadius[i]);
+ SetCornuEndPt(trk,i,end_pos,end_center,trackParms.cornuAngle[i],
+ trackParms.cornuRadius[i]);
}
if (rotate) {
coOrd end_pos, end_center;
@@ -1626,7 +1501,7 @@ static void MoveTracks(
DrawTrack(trk,&mapD,wDrawColorBlack);
}
}
- }
+ }
InfoCount( inx );
}
@@ -1634,52 +1509,62 @@ static void MoveTracks(
ClrAllTrkBits(TB_UNDRAWN);
DoRedraw();
wSetCursor( mainD.d, defaultCursor );
- if (undo) UndoEnd();
+ if (undo) { UndoEnd(); }
InfoCount( trackCount );
}
-
void MoveToJoin(
- track_p trk0,
- EPINX_T ep0,
- track_p trk1,
- EPINX_T ep1 )
+ track_p trk0,
+ EPINX_T ep0,
+ track_p trk1,
+ EPINX_T ep1 )
{
coOrd orig;
coOrd base;
ANGLE_T angle;
- UndoStart( _("Move To Join"), "Move To Join" );
- base = GetTrkEndPos(trk0,ep0);
- orig = GetTrkEndPos(trk1, ep1 );
- base.x = orig.x - base.x;
- base.y = orig.y - base.y;
- angle = GetTrkEndAngle(trk1,ep1);
- angle -= GetTrkEndAngle(trk0,ep0);
- angle += 180.0;
- angle = NormalizeAngle( angle );
- GetMovedTracks( FALSE );
- MoveTracks( TRUE, TRUE, TRUE, base, orig, angle, TRUE );
- UndrawNewTrack( trk0 );
- UndrawNewTrack( trk1 );
- ConnectTracks( trk0, ep0, trk1, ep1 );
- DrawNewTrack( trk0 );
- DrawNewTrack( trk1 );
- RemoveEndCornus();
+ UndoStart(_("Move To Join"), "Move To Join");
+ base = GetTrkEndPos(trk0, ep0);
+ orig = GetTrkEndPos(trk1, ep1);
+ base.x = orig.x - base.x;
+ base.y = orig.y - base.y;
+ angle = GetTrkEndAngle(trk1, ep1);
+ angle -= GetTrkEndAngle(trk0, ep0);
+ angle += 180.0;
+ angle = NormalizeAngle(angle);
+ GetMovedTracks(FALSE);
+ MoveTracks(TRUE, TRUE, TRUE, base, orig, angle, TRUE);
+ UndrawNewTrack( trk0 );
+ UndrawNewTrack( trk1 );
+ ConnectTracks( trk0, ep0, trk1, ep1 );
+ DrawNewTrack( trk0 );
+ DrawNewTrack( trk1 );
+ RemoveEndCornus();
+
+ track_p trk = NULL;
+ while (TrackIterate(&trk)) {
+ if (GetTrkSelected(trk)) {
+ ConnectAllEndPts(trk);
+ }
+ }
}
-void FreeTempStrings() {
+void FreeTempStrings()
+{
for (int i = 0; i<tempSegs_da.cnt; i++) {
if (tempSegs(i).type == SEG_TEXT) {
- if (tempSegs(i).u.t.string)
+ if (tempSegs(i).u.t.string) {
MyFree(tempSegs(i).u.t.string);
+ }
tempSegs(i).u.t.string = NULL;
}
}
}
-wBool_t FindEndIntersection(coOrd base, coOrd orig, ANGLE_T angle, track_p * t1, EPINX_T * ep1, track_p * t2, EPINX_T * ep2) {
+wBool_t FindEndIntersection(coOrd base, coOrd orig, ANGLE_T angle, track_p * t1,
+ EPINX_T * ep1, track_p * t2, EPINX_T * ep2)
+{
*ep1 = -1;
*ep2 = -1;
*t1 = NULL;
@@ -1689,13 +1574,13 @@ wBool_t FindEndIntersection(coOrd base, coOrd orig, ANGLE_T angle, track_p * t1,
for (int i=0; i<GetTrkEndPtCnt(ts); i++) { //All EndPoints
track_p ct;
if ((ct = GetTrkEndTrk(ts,i))!=NULL) {
- if (GetTrkSelected(ct) || QueryTrack(ts,Q_IS_CORNU)) continue; // Another selected track or Cornu - ignore
+ if (GetTrkSelected(ct) || QueryTrack(ts,Q_IS_CORNU)) { continue; } // Another selected track or Cornu - ignore
}
coOrd pos1 = GetTrkEndPos(ts,i);
- if (angle != 0.0)
+ if (angle != 0.0) {
Rotate(&pos1,orig,angle);
- else {
+ } else {
pos1.x +=base.x;
pos1.y +=base.y;
}
@@ -1703,7 +1588,7 @@ wBool_t FindEndIntersection(coOrd base, coOrd orig, ANGLE_T angle, track_p * t1,
pos2 = pos1;
track_p tt;
if ((tt=OnTrackIgnore(&pos2,FALSE,TRUE,ts))!=NULL) {
- if (GetTrkGauge(ts) != GetTrkGauge(tt)) continue; //Ignore if different gauges
+ if (GetTrkGauge(ts) != GetTrkGauge(tt)) { continue; } //Ignore if different gauges
if (!GetTrkSelected(tt)) { //Ignore if new track is selected
EPINX_T epp = PickUnconnectedEndPointSilent(pos2, tt);
if (epp>=0) {
@@ -1719,7 +1604,8 @@ wBool_t FindEndIntersection(coOrd base, coOrd orig, ANGLE_T angle, track_p * t1,
epp = PickEndPoint(pos2,tt); //Any close end point (even joined)
if (epp>=0) {
ct = GetTrkEndTrk(tt,epp);
- if (ct && GetTrkSelected(ct)) { //Point is junction to selected track - so will be broken
+ if (ct && GetTrkSelected(
+ ct)) { //Point is junction to selected track - so will be broken
DIST_T d = FindDistance(pos1,GetTrkEndPos(tt,epp));
if (IsClose(d)) {
*ep1 = epp;
@@ -1738,14 +1624,15 @@ wBool_t FindEndIntersection(coOrd base, coOrd orig, ANGLE_T angle, track_p * t1,
return FALSE;
}
-void DrawHighlightLayer(int layer) {
+void DrawHighlightLayer(int layer)
+{
track_p ts = NULL;
BOOL_T initial = TRUE;
coOrd layer_hi = zero,layer_lo = zero;
while ( TrackIterate( &ts ) ) {
- if ( !GetLayerVisible( GetTrkLayer( ts))) continue;
- if (!GetTrkSelected(ts)) continue;
- if (GetTrkLayer(ts) != layer) continue;
+ if ( !GetLayerVisible( GetTrkLayer( ts))) { continue; }
+ if (!GetTrkSelected(ts)) { continue; }
+ if (GetTrkLayer(ts) != layer) { continue; }
coOrd hi,lo;
GetBoundingBox(ts, &hi, &lo);
if (initial) {
@@ -1753,10 +1640,10 @@ void DrawHighlightLayer(int layer) {
layer_lo = lo;
initial = FALSE;
} else {
- if (layer_hi.x < hi.x ) layer_hi.x = hi.x;
- if (layer_hi.y < hi.y ) layer_hi.y = hi.y;
- if (layer_lo.x > lo.x ) layer_lo.x = lo.x;
- if (layer_lo.y > lo.y ) layer_lo.y = lo.y;
+ if (layer_hi.x < hi.x ) { layer_hi.x = hi.x; }
+ if (layer_hi.y < hi.y ) { layer_hi.y = hi.y; }
+ if (layer_lo.x > lo.x ) { layer_lo.x = lo.x; }
+ if (layer_lo.y > lo.y ) { layer_lo.y = lo.y; }
}
}
wDrawPix_t margin = (10.5*mainD.scale/mainD.dpi);
@@ -1777,7 +1664,8 @@ void DrawHighlightLayer(int layer) {
DrawPoly(&tempD,4,rect,type,wDrawColorPowderedBlue,wDrawLineDash,DRAW_CLOSED);
}
-void SetUpMenu2(coOrd pos, track_p trk) {
+void SetUpMenu2(coOrd pos, track_p trk)
+{
wMenuPushEnable( menuPushModify,FALSE);
wMenuPushEnable(descriptionMI,FALSE);
wMenuPushEnable( rotateAlignMI, FALSE );
@@ -1785,12 +1673,13 @@ void SetUpMenu2(coOrd pos, track_p trk) {
wMenuPushEnable( bridgeMI, FALSE );
wMenuPushEnable( tiesMI, FALSE );
if ((trk) &&
- QueryTrack(trk,Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
+ QueryTrack(trk,
+ Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
trackParams_t trackParams;
if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
DIST_T dist = FindDistance(pos, trackParams.ttcenter);
if (dist < trackParams.ttradius/4) {
- cmdMenuPos = trackParams.ttcenter;
+ cmdMenuPos = trackParams.ttcenter;
}
}
}
@@ -1801,24 +1690,25 @@ void SetUpMenu2(coOrd pos, track_p trk) {
}
if (trk) {
wMenuPushEnable( menuPushModify,
- (QueryTrack( trk, Q_CAN_MODIFY_CONTROL_POINTS ) ||
- QueryTrack( trk, Q_IS_CORNU ) ||
- (QueryTrack( trk, Q_IS_DRAW ) && !QueryTrack( trk, Q_IS_TEXT )) ||
- QueryTrack( trk, Q_IS_ACTIVATEABLE)));
+ (QueryTrack( trk, Q_CAN_MODIFY_CONTROL_POINTS ) ||
+ QueryTrack( trk, Q_IS_CORNU ) ||
+ (QueryTrack( trk, Q_IS_DRAW ) && !QueryTrack( trk, Q_IS_TEXT )) ||
+ QueryTrack( trk, Q_IS_ACTIVATEABLE)));
}
if ((trk)) {
wMenuPushEnable(descriptionMI, QueryTrack( trk, Q_HAS_DESC ));
moveDescTrk = trk;
moveDescPos = pos;
}
- if (selectedTrackCount>0)
+ if (selectedTrackCount>0) {
wMenuPushEnable( rotateAlignMI, TRUE );
+ }
}
static STATUS_T CmdMove(
- wAction_t action,
- coOrd pos )
+ wAction_t action,
+ coOrd pos )
{
static coOrd base;
static coOrd orig;
@@ -1832,166 +1722,172 @@ static STATUS_T CmdMove(
switch( action & 0xFF) {
- case C_START:
- DYNARR_RESET(trkSeg_t,anchors_da);
- if (selectedTrackCount == 0) {
- ErrorMessage( MSG_NO_SELECTED_TRK );
- return C_TERMINATE;
- }
- if (SelectedTracksAreFrozen()) {
- return C_TERMINATE;
- }
- InfoMessage( _("Drag to move selected tracks - Shift+Ctrl+Arrow micro-steps the move") );
- state = 0;
- ep1 = -1;
- ep2 = -1;
- doingMove = FALSE;
- break;
+ case C_START:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (selectedTrackCount == 0) {
+ ErrorMessage( MSG_NO_SELECTED_TRK );
+ return C_TERMINATE;
+ }
+ if (SelectedTracksAreFrozen()) {
+ return C_TERMINATE;
+ }
+ InfoMessage(
+ _("Drag to move selected tracks - Shift+Ctrl+Arrow micro-steps the move") );
+ state = 0;
+ ep1 = -1;
+ ep2 = -1;
+ doingMove = FALSE;
+ break;
- case wActionMove:
- DYNARR_RESET(trkSeg_t,anchors_da);
- CreateMoveAnchor(pos);
- break;
- case C_DOWN:
- DYNARR_RESET(trkSeg_t,anchors_da);
- if (doingMove) {
- doingMove = FALSE;
- UndoEnd();
- }
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateMoveAnchor(pos);
+ break;
+ case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ if (doingMove) {
+ doingMove = FALSE;
+ UndoEnd();
+ }
- if (SelectedTracksAreFrozen()) {
- return C_TERMINATE;
- }
- UndoStart( _("Move Tracks"), "move" );
- base = zero;
- orig = pos;
- DYNARR_RESET(track_p,auto_select_da);
- GetMovedTracks(TRUE);
- SetMoveD( TRUE, base, 0.0 );
- drawCount = 0;
- state = 1;
- return C_CONTINUE;
- case C_MOVE:
- DYNARR_RESET(trkSeg_t,anchors_da);
- ep1=-1;
- ep2=-1;
- drawEnable = enableMoveDraw;
- base.x = pos.x - orig.x;
- base.y = pos.y - orig.y;
- if ((MyGetKeyState() & WKEY_ALT) == 0) SnapPos( &base );
- SetMoveD( TRUE, base, 0.0 );
- if (((MyGetKeyState()&(WKEY_ALT)) == 0) == magneticSnap) { // ALT
- if (FindEndIntersection(base,zero,0.0,&t1,&ep1,&t2,&ep2)) {
- coOrd pos2 = GetTrkEndPos(t2,ep2);
- pos2.x +=base.x;
- pos2.y +=base.y;
- CreateEndAnchor(pos2,FALSE);
- CreateEndAnchor(GetTrkEndPos(t1,ep1),TRUE);
- }
+ if (SelectedTracksAreFrozen()) {
+ return C_TERMINATE;
+ }
+ UndoStart( _("Move Tracks"), "move" );
+ base = zero;
+ orig = pos;
+ DYNARR_RESET(track_p,auto_select_da);
+ GetMovedTracks(TRUE);
+ SetMoveD( TRUE, base, 0.0 );
+ drawCount = 0;
+ state = 1;
+ return C_CONTINUE;
+ case C_MOVE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ ep1=-1;
+ ep2=-1;
+ drawEnable = enableMoveDraw;
+ base.x = pos.x - orig.x;
+ base.y = pos.y - orig.y;
+ if ((MyGetKeyState() & WKEY_ALT) == 0) { SnapPos( &base ); }
+ SetMoveD( TRUE, base, 0.0 );
+ if (((MyGetKeyState()&(WKEY_ALT)) == 0) == magneticSnap) { // ALT
+ if (FindEndIntersection(base,zero,0.0,&t1,&ep1,&t2,&ep2)) {
+ coOrd pos2 = GetTrkEndPos(t2,ep2);
+ pos2.x +=base.x;
+ pos2.y +=base.y;
+ CreateEndAnchor(pos2,FALSE);
+ CreateEndAnchor(GetTrkEndPos(t1,ep1),TRUE);
}
+ }
#ifdef DRAWCOUNT
- InfoMessage( " [%s %s] #%ld", FormatDistance(base.x), FormatDistance(base.y), drawCount );
+ InfoMessage( " [%s %s] #%ld", FormatDistance(base.x), FormatDistance(base.y),
+ drawCount );
#else
- InfoMessage( " [%s %s]", FormatDistance(base.x), FormatDistance(base.y) );
+ InfoMessage( " [%s %s]", FormatDistance(base.x), FormatDistance(base.y) );
#endif
- drawEnable = TRUE;
- return C_CONTINUE;
- case C_UP:
- DYNARR_RESET(trkSeg_t,anchors_da);
- state = 0;
- FreeTempStrings();
- if (t1 && ep1>=0 && t2 && ep2>=0) {
- MoveToJoin(t2,ep2,t1,ep1);
- } else {
- MoveTracks( FALSE, TRUE, FALSE, base, zero, 0.0, TRUE );
- }
- ep1 = -1;
- ep2 = -1;
- RemoveEndCornus();
- tlist_da.cnt = 0;
- return C_TERMINATE;
+ drawEnable = TRUE;
+ return C_CONTINUE;
+ case C_UP:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ state = 0;
+ FreeTempStrings();
+ if (t1 && ep1>=0 && t2 && ep2>=0) {
+ MoveToJoin(t2,ep2,t1,ep1);
+ } else {
+ MoveTracks( FALSE, TRUE, FALSE, base, zero, 0.0, TRUE );
+ }
+ ep1 = -1;
+ ep2 = -1;
+ RemoveEndCornus();
+ DYNARR_RESET( track_p, tlist_da );
+ return C_TERMINATE;
- case C_CMDMENU:
- if (doingMove) UndoEnd();
- doingMove = FALSE;
- base = pos;
- track_p trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
- if ((trk) &&
- QueryTrack(trk,Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
- trackParams_t trackParams;
- if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
- DIST_T dist = FindDistance(base, trackParams.ttcenter);
- if (dist < trackParams.ttradius/4) {
- cmdMenuPos = trackParams.ttcenter;
- }
+ case C_CMDMENU:
+ if (doingMove) { UndoEnd(); }
+ doingMove = FALSE;
+ base = pos;
+ track_p trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
+ if ((trk) &&
+ QueryTrack(trk,
+ Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
+ trackParams_t trackParams;
+ if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
+ DIST_T dist = FindDistance(base, trackParams.ttcenter);
+ if (dist < trackParams.ttradius/4) {
+ cmdMenuPos = trackParams.ttcenter;
}
}
- moveDescPos = pos;
- moveDescTrk = trk;
- SetUpMenu2(pos,trk);
- menuPos = pos;
- wMenuPopupShow( selectPopup2M );
- return C_CONTINUE;
+ }
+ moveDescPos = pos;
+ moveDescTrk = trk;
+ SetUpMenu2(pos,trk);
+ menuPos = pos;
+ wMenuPopupShow( selectPopup2M );
+ return C_CONTINUE;
- case C_TEXT:
- if ((action>>8) == 'c') {
- panCenter = pos;
- LOG( log_pan, 2, ( "PanCenter:Sel-%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
- PanHere(I2VP(0));
- }
- if ((action>>8) == 'e') {
- DoZoomExtents(I2VP(0));
- }
- if ((action>>8 == 's')) {
- DoZoomExtents(I2VP(1));
- }
- if ((action>>8) == '0' || (action>>8 == 'o')) {
- PanMenuEnter(I2VP('o'));
- }
- if ((action>>8) == 127 || (action>>8) == 8)
- SelectDelete();
+ case C_TEXT:
+ if ((action>>8) == 'c') {
+ panCenter = pos;
+ LOG( log_pan, 2, ( "PanCenter:Sel-%d %0.3f %0.3f\n", __LINE__, panCenter.x,
+ panCenter.y ) );
+ PanHere(I2VP(0));
+ }
+ if ((action>>8) == 'e') {
+ DoZoomExtents(I2VP(0));
+ }
+ if ((action>>8 == 's')) {
+ DoZoomExtents(I2VP(1));
+ }
+ if ((action>>8) == '0' || (action>>8 == 'o')) {
+ PanMenuEnter(I2VP('o'));
+ }
+ if ((action>>8) == 127 || (action>>8) == 8) {
+ SelectDelete();
+ }
+ break;
+ case C_REDRAW:
+ /* DO_REDRAW */
+ //Draw all existing highlight boxes only
+ DrawHighlightBoxes(FALSE, FALSE, NULL);
+ HighlightSelectedTracks(NULL, TRUE, TRUE);
+ DrawSegsDA( &tempD, NULL, zero, 0.0, &anchors_da, trackGauge, wDrawColorBlack,
+ 0 );
+ if ( state == 0 ) {
break;
- case C_REDRAW:
- /* DO_REDRAW */
- //Draw all existing highlight boxes only
- DrawHighlightBoxes(FALSE, FALSE, NULL);
- HighlightSelectedTracks(NULL, TRUE, TRUE);
- if (anchors_da.cnt)
- DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
- if ( state == 0 )
- break;
- DrawMovedTracks();
+ }
+ DrawMovedTracks();
- break;
+ break;
- case wActionExtKey:
- if (state) return C_CONTINUE;
- if (SelectedTracksAreFrozen()) return C_TERMINATE;
- if ((MyGetKeyState() &
- (WKEY_SHIFT | WKEY_CTRL)) == (WKEY_SHIFT | WKEY_CTRL)) { //Both
- base = zero;
- DIST_T w = tempD.scale/tempD.dpi;
- switch((wAccelKey_e) action>>8) {
- case wAccelKey_Up:
- base.y = w;
- break;
- case wAccelKey_Down:
- base.y = -w;
- break;
- case wAccelKey_Left:
- base.x = -w;
- break;
- case wAccelKey_Right:
- base.x = w;
- break;
- default:
- return C_CONTINUE;
- break;
- }
+ case wActionExtKey:
+ if (state) { return C_CONTINUE; }
+ if (SelectedTracksAreFrozen()) { return C_TERMINATE; }
+ if ((MyGetKeyState() &
+ (WKEY_SHIFT | WKEY_CTRL)) == (WKEY_SHIFT | WKEY_CTRL)) { //Both
+ base = zero;
+ DIST_T w = tempD.scale/tempD.dpi;
+ switch((wAccelKey_e) action>>8) {
+ case wAccelKey_Up:
+ base.y = w;
+ break;
+ case wAccelKey_Down:
+ base.y = -w;
+ break;
+ case wAccelKey_Left:
+ base.x = -w;
+ break;
+ case wAccelKey_Right:
+ base.x = w;
+ break;
+ default:
+ return C_CONTINUE;
+ break;
+ }
drawEnable = enableMoveDraw;
GetMovedTracks(TRUE);
- if (!doingMove) UndoStart( _("Move Tracks"), "move" );
+ if (!doingMove) { UndoStart( _("Move Tracks"), "move" ); }
doingMove = TRUE;
SetMoveD( TRUE, base, 0.0 );
MoveTracks( FALSE, TRUE, FALSE, base, zero, 0.0, FALSE );
@@ -2002,28 +1898,28 @@ static STATUS_T CmdMove(
}
RemoveEndCornus();
return C_CONTINUE;
- }
- break;
+ }
+ break;
- case C_FINISH:
- if (doingMove) {
- doingMove = FALSE;
- UndoEnd();
- }
- RemoveEndCornus();
- tlist_da.cnt = 0;
- break;
- case C_CONFIRM:
- case C_CANCEL:
- if (doingMove) {
- doingMove = FALSE;
- UndoUndo(NULL);
- }
- RemoveEndCornus();
- tlist_da.cnt = 0;
- break;
- default:
- break;
+ case C_FINISH:
+ if (doingMove) {
+ doingMove = FALSE;
+ UndoEnd();
+ }
+ RemoveEndCornus();
+ DYNARR_RESET( track_p, tlist_da );
+ break;
+ case C_CONFIRM:
+ case C_CANCEL:
+ if (doingMove) {
+ doingMove = FALSE;
+ UndoUndo(NULL);
+ }
+ RemoveEndCornus();
+ DYNARR_RESET( track_p, tlist_da );
+ break;
+ default:
+ break;
}
return C_CONTINUE;
}
@@ -2045,8 +1941,8 @@ static void RotateAlign( void * alignVP )
}
static STATUS_T CmdRotate(
- wAction_t action,
- coOrd pos )
+ wAction_t action,
+ coOrd pos )
{
static coOrd base;
static coOrd orig_base;
@@ -2068,303 +1964,332 @@ static STATUS_T CmdRotate(
switch( action ) {
- case C_START:
- DYNARR_RESET(trkSeg_t,anchors_da);
- state = 0;
- if (selectedTrackCount == 0) {
- ErrorMessage( MSG_NO_SELECTED_TRK );
- return C_TERMINATE;
- }
- if (SelectedTracksAreFrozen()) {
- return C_TERMINATE;
- }
- InfoMessage( _("Drag to rotate selected tracks, Shift+RightClick for QuickRotate Menu") );
- wMenuPushEnable( rotateAlignMI, TRUE );
- rotateAlignState = 0;
- ep1 = -1;
- ep2 = -1;
- break;
- case wActionMove:
- DYNARR_RESET(trkSeg_t,anchors_da);
- CreateRotateAnchor(pos);
- break;
- case C_DOWN:
- DYNARR_RESET(trkSeg_t,anchors_da);
- state = 1;
- if (SelectedTracksAreFrozen()) {
- return C_TERMINATE;
- }
- UndoStart( _("Rotate Tracks"), "rotate" );
- DYNARR_RESET(track_p,auto_select_da);
- if ( rotateAlignState == 0 ) {
- drawnAngle = FALSE;
- angle = 0.0;
- base = orig = pos;
- trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
- if ((trk) &&
- QueryTrack(trk,Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
- trackParams_t trackParams;
- if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
- DIST_T dist = FindDistance(base, trackParams.ttcenter);
- if (dist < trackParams.ttradius/4) {
- base = orig = trackParams.ttcenter;
- InfoMessage( _("Center of Rotation snapped to Turntable center") );
- }
+ case C_START:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ state = 0;
+ if (selectedTrackCount == 0) {
+ ErrorMessage( MSG_NO_SELECTED_TRK );
+ return C_TERMINATE;
+ }
+ if (SelectedTracksAreFrozen()) {
+ return C_TERMINATE;
+ }
+ InfoMessage(
+ _("Drag to rotate selected tracks, Shift+RightClick for QuickRotate Menu") );
+ wMenuPushEnable( rotateAlignMI, TRUE );
+ rotateAlignState = 0;
+ ep1 = -1;
+ ep2 = -1;
+ break;
+ case wActionMove:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ CreateRotateAnchor(pos);
+ break;
+ case C_DOWN:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ state = 1;
+ if (SelectedTracksAreFrozen()) {
+ return C_TERMINATE;
+ }
+ UndoStart( _("Rotate Tracks"), "rotate" );
+ DYNARR_RESET(track_p,auto_select_da);
+ if ( rotateAlignState == 0 ) {
+ drawnAngle = FALSE;
+ angle = 0.0;
+ base = orig = pos;
+ trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
+ if ((trk) &&
+ QueryTrack(trk,
+ Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
+ trackParams_t trackParams;
+ if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
+ DIST_T dist = FindDistance(base, trackParams.ttcenter);
+ if (dist < trackParams.ttradius/4) {
+ base = orig = trackParams.ttcenter;
+ InfoMessage( _("Center of Rotation snapped to Turntable center") );
}
}
- CreateRotateAnchor(orig);
- GetMovedTracks(TRUE);
- SetMoveD( FALSE, base, angle );
+ }
+ CreateRotateAnchor(orig);
+ GetMovedTracks(TRUE);
+ SetMoveD( FALSE, base, angle );
- /*DrawLine( &mainD, base, orig, 0, wDrawColorBlack );
- DrawMovedTracks(FALSE, orig, angle);*/
- } else {
- pos1 = pos;
- drawnAngle = FALSE;
- onTrackInSplit = TRUE;
- trk = OnTrack( &pos, TRUE, FALSE );
- onTrackInSplit = FALSE;
- if ( trk == NULL ) return C_CONTINUE;
- angle1 = NormalizeAngle( GetAngleAtPoint( trk, pos, NULL, NULL ) );
- if ( rotateAlignState == 1 ) {
- if ( !GetTrkSelected(trk) ) {
- NoticeMessage( MSG_1ST_TRACK_MUST_BE_SELECTED, _("Ok"), NULL );
- } else {
- base = pos;
- baseAngle = angle1;
- getboundsCount = 0;
- DoSelectedTracks( GetboundsDoIt );
- orig.x = (getboundsLo.x+getboundsHi.x)/2.0;
- orig.y = (getboundsLo.y+getboundsHi.y)/2.0;
-/*printf( "orig = [%0.3f %0.3f], baseAngle = %0.3f\n", orig.x, orig.y, baseAngle );*/
- }
+ /*DrawLine( &mainD, base, orig, 0, wDrawColorBlack );
+ DrawMovedTracks(FALSE, orig, angle);*/
+ } else {
+ pos1 = pos;
+ drawnAngle = FALSE;
+ onTrackInSplit = TRUE;
+ trk = OnTrack( &pos, TRUE, FALSE );
+ onTrackInSplit = FALSE;
+ if ( trk == NULL ) { return C_CONTINUE; }
+ angle1 = NormalizeAngle( GetAngleAtPoint( trk, pos, NULL, NULL ) );
+ if ( rotateAlignState == 1 ) {
+ if ( !GetTrkSelected(trk) ) {
+ NoticeMessage( MSG_1ST_TRACK_MUST_BE_SELECTED, _("Ok"), NULL );
} else {
- if ( GetTrkSelected(trk) ) {
- ErrorMessage( MSG_2ND_TRACK_MUST_BE_UNSELECTED );
- angle = 0;
- } else {
- angle = NormalizeAngle(angle1-baseAngle);
- //if ( angle > 90 && angle < 270 )
- // angle = NormalizeAngle( angle + 180.0 );
- //if ( NormalizeAngle( FindAngle( base, pos1 ) - angle1 ) < 180.0 )
- // angle = NormalizeAngle( angle + 180.0 );
-/*printf( "angle 1 = %0.3f\n", angle );*/
- if ( angle1 > 180.0 ) angle1 -= 180.0;
- InfoMessage( _("Angle %0.3f"), angle1 );
- }
- GetMovedTracks(TRUE);
- SetMoveD( FALSE, orig, angle );
+ coOrd low, high;
+ base = pos;
+ baseAngle = angle1;
+ GetSelectedBounds( &low, &high );
+// getboundsCount = 0;
+// DoSelectedTracks( GetboundsDoIt );
+// orig.x = (getboundsLo.x+getboundsHi.x)/2.0;
+// orig.y = (getboundsLo.y+getboundsHi.y)/2.0;
+ orig.x = (low.x+high.x)/2.0;
+ orig.y = (low.y+high.y)/2.0;
+ /*printf( "orig = [%0.3f %0.3f], baseAngle = %0.3f\n", orig.x, orig.y, baseAngle );*/
}
- }
- return C_CONTINUE;
- case C_MOVE:
- DYNARR_RESET(trkSeg_t,anchors_da);
- ep1=-1;
- ep2=-1;
- if ( rotateAlignState == 1 )
- return C_CONTINUE;
- if ( rotateAlignState == 2 ) {
- pos1 = pos;
- onTrackInSplit = TRUE;
- trk = OnTrack( &pos, TRUE, FALSE );
- onTrackInSplit = FALSE;
- if ( trk == NULL )
- return C_CONTINUE;
+ } else {
if ( GetTrkSelected(trk) ) {
ErrorMessage( MSG_2ND_TRACK_MUST_BE_UNSELECTED );
- return C_CONTINUE;
+ angle = 0;
+ } else {
+ angle = NormalizeAngle(angle1-baseAngle);
+ //if ( angle > 90 && angle < 270 )
+ // angle = NormalizeAngle( angle + 180.0 );
+ //if ( NormalizeAngle( FindAngle( base, pos1 ) - angle1 ) < 180.0 )
+ // angle = NormalizeAngle( angle + 180.0 );
+ /*printf( "angle 1 = %0.3f\n", angle );*/
+ if ( angle1 > 180.0 ) { angle1 -= 180.0; }
+ InfoMessage( _("Angle %0.3f"), angle1 );
}
- angle1 = NormalizeAngle( GetAngleAtPoint( trk, pos, NULL, NULL ) );
- angle = NormalizeAngle(angle1-baseAngle);
- if ( angle > 90 && angle < 270 )
- angle = NormalizeAngle( angle + 180.0 );
- if ( NormalizeAngle( FindAngle( pos, pos1 ) - angle1 ) < 180.0 )
- angle = NormalizeAngle( angle + 180.0 );
- if ( angle1 > 180.0 ) angle1 -= 180.0;
- InfoMessage( _("Angle %0.3f"), angle1 );
+ GetMovedTracks(TRUE);
SetMoveD( FALSE, orig, angle );
-/*printf( "angle 2 = %0.3f\n", angle );*/
+ }
+ }
+ return C_CONTINUE;
+ case C_MOVE:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ ep1=-1;
+ ep2=-1;
+ if ( rotateAlignState == 1 ) {
+ return C_CONTINUE;
+ }
+ if ( rotateAlignState == 2 ) {
+ pos1 = pos;
+ onTrackInSplit = TRUE;
+ trk = OnTrack( &pos, TRUE, FALSE );
+ onTrackInSplit = FALSE;
+ if ( trk == NULL ) {
return C_CONTINUE;
}
- ANGLE_T diff_angle = 0.0;
- base = pos;
- drawEnable = enableMoveDraw;
- if ( FindDistance( orig, pos ) > (20.0/BASE_DPI)*mainD.scale ) {
- ANGLE_T old_angle = angle;
- angle = FindAngle( orig, pos );
- if (!drawnAngle) {
- baseAngle = angle;
- drawnAngle = TRUE;
- direction_set = FALSE;
+ if ( GetTrkSelected(trk) ) {
+ ErrorMessage( MSG_2ND_TRACK_MUST_BE_UNSELECTED );
+ return C_CONTINUE;
+ }
+ angle1 = NormalizeAngle( GetAngleAtPoint( trk, pos, NULL, NULL ) );
+ angle = NormalizeAngle(angle1-baseAngle);
+ if ( angle > 90 && angle < 270 ) {
+ angle = NormalizeAngle( angle + 180.0 );
+ }
+ if ( NormalizeAngle( FindAngle( pos, pos1 ) - angle1 ) < 180.0 ) {
+ angle = NormalizeAngle( angle + 180.0 );
+ }
+ if ( angle1 > 180.0 ) { angle1 -= 180.0; }
+ InfoMessage( _("Angle %0.3f"), angle1 );
+ SetMoveD( FALSE, orig, angle );
+ /*printf( "angle 2 = %0.3f\n", angle );*/
+ return C_CONTINUE;
+ }
+ ANGLE_T diff_angle = 0.0;
+ base = pos;
+ drawEnable = enableMoveDraw;
+ if ( FindDistance( orig, pos ) > (20.0/BASE_DPI)*mainD.scale ) {
+ ANGLE_T old_angle = angle;
+ angle = FindAngle( orig, pos );
+ if (!drawnAngle) {
+ baseAngle = angle;
+ drawnAngle = TRUE;
+ direction_set = FALSE;
+ } else {
+ if (!direction_set) {
+ if (DifferenceBetweenAngles(baseAngle,angle)>=0) { clockwise = TRUE; }
+ else { clockwise = FALSE; }
+ direction_set = TRUE;
} else {
- if (!direction_set) {
- if (DifferenceBetweenAngles(baseAngle,angle)>=0) clockwise = TRUE;
- else clockwise = FALSE;
- direction_set = TRUE;
+ if (clockwise) {
+ if (DifferenceBetweenAngles(baseAngle,angle)<0
+ && fabs(DifferenceBetweenAngles(baseAngle, old_angle))<5) {
+ clockwise = FALSE;
+ }
} else {
- if (clockwise) {
- if (DifferenceBetweenAngles(baseAngle,angle)<0 && fabs(DifferenceBetweenAngles(baseAngle, old_angle))<5)
- clockwise = FALSE;
- } else {
- if (DifferenceBetweenAngles(baseAngle,angle)>=0 && fabs(DifferenceBetweenAngles(baseAngle,old_angle))<5)
- clockwise = TRUE;
+ if (DifferenceBetweenAngles(baseAngle,angle)>=0
+ && fabs(DifferenceBetweenAngles(baseAngle,old_angle))<5) {
+ clockwise = TRUE;
}
}
}
- orig_base = base = pos;
- //angle = NormalizeAngle( angle-baseAngle );
- diff_angle = DifferenceBetweenAngles(baseAngle,angle);
- if ( (MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) == (WKEY_CTRL|WKEY_SHIFT) ) { //Both Shift+Ctrl
- if (clockwise) {
- if (diff_angle<0) diff_angle+=360;
- } else {
- if (diff_angle>0) diff_angle-=360;
- }
- diff_angle = floor((diff_angle+7.5)/15.0)*15.0;
- angle = baseAngle+diff_angle;
+ }
+ orig_base = base = pos;
+ //angle = NormalizeAngle( angle-baseAngle );
+ diff_angle = DifferenceBetweenAngles(baseAngle,angle);
+ if ( (MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) ==
+ (WKEY_CTRL|WKEY_SHIFT) ) { //Both Shift+Ctrl
+ if (clockwise) {
+ if (diff_angle<0) { diff_angle+=360; }
+ } else {
+ if (diff_angle>0) { diff_angle-=360; }
}
- Translate( &base, orig, angle, FindDistance(orig,pos) ); //Line one
- Translate( &orig_base,orig, baseAngle, FindDistance(orig,pos)<=(60.0/BASE_DPI*mainD.scale)?FindDistance(orig,pos):60.0/BASE_DPI*mainD.scale ); //Line two
- SetMoveD( FALSE, orig, NormalizeAngle( angle-baseAngle ) );
- if (((MyGetKeyState()&(WKEY_ALT)) == WKEY_ALT) != magneticSnap) { //Just Shift
- if (FindEndIntersection(zero,orig,NormalizeAngle( angle-baseAngle ),&t1,&ep1,&t2,&ep2)) {
- coOrd pos2 = GetTrkEndPos(t2,ep2);
- coOrd pos1 = GetTrkEndPos(t1,ep1);
- Rotate(&pos2,orig,NormalizeAngle( angle-baseAngle ));
- CreateEndAnchor(pos2,FALSE);
- CreateEndAnchor(pos1,TRUE);
- }
+ diff_angle = floor((diff_angle+7.5)/15.0)*15.0;
+ angle = baseAngle+diff_angle;
+ }
+ Translate( &base, orig, angle, FindDistance(orig,pos) ); //Line one
+ Translate( &orig_base,orig, baseAngle, FindDistance(orig,
+ pos)<=(60.0/BASE_DPI*mainD.scale)?FindDistance(orig,
+ pos):60.0/BASE_DPI*mainD.scale ); //Line two
+ SetMoveD( FALSE, orig, NormalizeAngle( angle-baseAngle ) );
+ if (((MyGetKeyState()&(WKEY_ALT)) == WKEY_ALT) != magneticSnap) { //Just Shift
+ if (FindEndIntersection(zero,orig,NormalizeAngle( angle-baseAngle ),&t1,&ep1,
+ &t2,&ep2)) {
+ coOrd pos2 = GetTrkEndPos(t2,ep2);
+ coOrd pos1 = GetTrkEndPos(t1,ep1);
+ Rotate(&pos2,orig,NormalizeAngle( angle-baseAngle ));
+ CreateEndAnchor(pos2,FALSE);
+ CreateEndAnchor(pos1,TRUE);
}
+ }
#ifdef DRAWCOUNT
- InfoMessage( _("Angle %0.3f #%ld"), fabs(diff_angle), drawCount );
+ InfoMessage( _("Angle %0.3f #%ld"), fabs(diff_angle), drawCount );
#else
- InfoMessage( _("Angle %0.3f %s"), fabs(diff_angle), clockwise?"Clockwise":"Counter-Clockwise" );
+ InfoMessage( _("Angle %0.3f %s"), fabs(diff_angle),
+ clockwise?"Clockwise":"Counter-Clockwise" );
#endif
- wFlush();
- drawEnable = TRUE;
- } else
- InfoMessage( _("Origin Set. Drag away to set start angle"));
+ wFlush();
+ drawEnable = TRUE;
+ } else {
+ InfoMessage( _("Origin Set. Drag away to set start angle"));
+ }
- return C_CONTINUE;
+ return C_CONTINUE;
- case C_UP:
- DYNARR_RESET(trkSeg_t,anchors_da);
- state = 0;
- if (t1 && ep1>=0 && t2 && ep2>=0) {
- MoveToJoin(t2,ep2,t1,ep1);
- CleanSegs(&tempSegs_da);
- rotateAlignState = 0;
- } else {
- if ( rotateAlignState == 1 ) {
- if ( trk && GetTrkSelected(trk) ) {
- InfoMessage( _("Align: Click on the 2nd unselected object") );
- rotateAlignState = 2;
- }
- return C_CONTINUE;
- }
- CleanSegs(&tempSegs_da);
- if ( rotateAlignState == 2 ) {
- MoveTracks( FALSE, FALSE, TRUE, zero, orig, angle, TRUE );
- rotateAlignState = 0;
- } else if (drawnAngle) {
- MoveTracks( FALSE, FALSE, TRUE, zero, orig, NormalizeAngle( angle-baseAngle ), TRUE );
+ case C_UP:
+ DYNARR_RESET(trkSeg_t,anchors_da);
+ state = 0;
+ if (t1 && ep1>=0 && t2 && ep2>=0) {
+ MoveToJoin(t2,ep2,t1,ep1);
+ CleanSegs(&tempSegs_da);
+ rotateAlignState = 0;
+ } else {
+ if ( rotateAlignState == 1 ) {
+ if ( trk && GetTrkSelected(trk) ) {
+ InfoMessage( _("Align: Click on the 2nd unselected object") );
+ rotateAlignState = 2;
}
+ return C_CONTINUE;
}
- UndoEnd();
- RemoveEndCornus();
- tlist_da.cnt = 0;
- return C_TERMINATE;
+ CleanSegs(&tempSegs_da);
+ if ( rotateAlignState == 2 ) {
+ MoveTracks( FALSE, FALSE, TRUE, zero, orig, angle, TRUE );
+ rotateAlignState = 0;
+ } else if (drawnAngle) {
+ MoveTracks( FALSE, FALSE, TRUE, zero, orig, NormalizeAngle( angle-baseAngle ),
+ TRUE );
+ }
+ }
+ UndoEnd();
+ RemoveEndCornus();
+ DYNARR_RESET( track_p, tlist_da );
+ return C_TERMINATE;
- case C_CMDMENU:
- base = pos;
- trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
- if ((trk) &&
- QueryTrack(trk,Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
- trackParams_t trackParams;
- if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
- DIST_T dist = FindDistance(base, trackParams.ttcenter);
- if (dist < trackParams.ttradius/4) {
- cmdMenuPos = trackParams.ttcenter;
- }
+ case C_CMDMENU:
+ base = pos;
+ trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
+ if ((trk) &&
+ QueryTrack(trk,
+ Q_CAN_ADD_ENDPOINTS)) { //Turntable snap to center if within 1/4 radius
+ trackParams_t trackParams;
+ if (GetTrackParams(PARAMS_CORNU, trk, pos, &trackParams)) {
+ DIST_T dist = FindDistance(base, trackParams.ttcenter);
+ if (dist < trackParams.ttradius/4) {
+ cmdMenuPos = trackParams.ttcenter;
}
}
- moveDescPos = pos;
- moveDescTrk = trk;
- SetUpMenu2(pos,trk);
- menuPos = pos;
- wMenuPopupShow( selectPopup2M );
- return C_CONTINUE;
+ }
+ moveDescPos = pos;
+ moveDescTrk = trk;
+ SetUpMenu2(pos,trk);
+ menuPos = pos;
+ wMenuPopupShow( selectPopup2M );
+ return C_CONTINUE;
- case C_TEXT:
- if ((action>>8) == 'd') {
- panCenter = pos;
- LOG( log_pan, 2, ( "PanCenter:Sel-%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
- PanHere(I2VP(0));
- }
- if ((action>>8) == 'e') {
- DoZoomExtents(I2VP(0));
- }
- if ((action>>8) == 's') {
- DoZoomExtents(I2VP(1));
- }
- if ((action>>8) == '0' || (action>>8 == 'o')) {
- PanMenuEnter(I2VP('o'));
- }
+ case C_TEXT:
+ if ((action>>8) == 'd') {
+ panCenter = pos;
+ LOG( log_pan, 2, ( "PanCenter:Sel-%d %0.3f %0.3f\n", __LINE__, panCenter.x,
+ panCenter.y ) );
+ PanHere(I2VP(0));
+ }
+ if ((action>>8) == 'e') {
+ DoZoomExtents(I2VP(0));
+ }
+ if ((action>>8) == 's') {
+ DoZoomExtents(I2VP(1));
+ }
+ if ((action>>8) == '0' || (action>>8 == 'o')) {
+ PanMenuEnter(I2VP('o'));
+ }
+ break;
+ case C_REDRAW:
+ DrawHighlightBoxes(FALSE,FALSE,NULL);
+ HighlightSelectedTracks(NULL, TRUE, TRUE);
+ DrawSegsDA( &tempD, NULL, zero, 0.0, &anchors_da, trackGauge, wDrawColorBlack,
+ 0 );
+ /* DO_REDRAW */
+ if ( state == 0 ) {
break;
- case C_REDRAW:
- DrawHighlightBoxes(FALSE,FALSE,NULL);
- HighlightSelectedTracks(NULL, TRUE, TRUE);
- if (anchors_da.cnt)
- DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
- /* DO_REDRAW */
- if ( state == 0 )
- break;
- if ( rotateAlignState != 2 ) {
- DIST_T width = tempD.scale*0.15;
- DrawLine( &tempD, base, orig, 0, wDrawColorBlue );
- if (drawnAngle) {
- DrawLine( &tempD, orig_base, orig, (wDrawWidth)width/2, wDrawColorBlue );
- ANGLE_T a = DifferenceBetweenAngles(FindAngle(orig, orig_base),FindAngle(orig, base));
-
- DIST_T dist = FindDistance(orig,base);
- if (dist>(60.0/BASE_DPI)*mainD.scale) dist = (60.0/BASE_DPI)*mainD.scale;
-
- if (direction_set) {
- if (clockwise) {
- if (a<0) a = a + 360;
- DrawArc( &tempD, orig, dist/2, FindAngle(orig,orig_base), a, FALSE, 0, wDrawColorBlue);
- } else {
- if (a>0) a = a - 360;
- DrawArc( &tempD, orig, dist/2, FindAngle(orig,base), fabs(a), FALSE, 0, wDrawColorBlue);
- }
- DIST_T d;
- d = mainD.scale*0.25;
- ANGLE_T arrow_a = NormalizeAngle(FindAngle(orig,orig_base)+a/2);
- coOrd arr1,arr2,arr3;
- Translate(&arr2,orig,arrow_a,dist/2);
- if (clockwise) arrow_a +=90;
- else arrow_a -=90;
- Translate(&arr1,arr2,arrow_a+135,d/2);
- Translate(&arr3,arr2,arrow_a-135,d/2);
- DrawLine( &tempD, arr1, arr2, 0, wDrawColorBlue );
- DrawLine( &tempD, arr2, arr3, 0, wDrawColorBlue );
+ }
+ if ( rotateAlignState != 2 ) {
+ DIST_T width = tempD.scale*0.15;
+ DrawLine( &tempD, base, orig, 0, wDrawColorBlue );
+ if (drawnAngle) {
+ DrawLine( &tempD, orig_base, orig, (wDrawWidth)width/2, wDrawColorBlue );
+ ANGLE_T a = DifferenceBetweenAngles(FindAngle(orig, orig_base),FindAngle(orig,
+ base));
+
+ DIST_T dist = FindDistance(orig,base);
+ if (dist>(60.0/BASE_DPI)*mainD.scale) { dist = (60.0/BASE_DPI)*mainD.scale; }
+
+ if (direction_set) {
+ if (clockwise) {
+ if (a<0) { a = a + 360; }
+ DrawArc( &tempD, orig, dist/2, FindAngle(orig,orig_base), a, FALSE, 0,
+ wDrawColorBlue);
+ } else {
+ if (a>0) { a = a - 360; }
+ DrawArc( &tempD, orig, dist/2, FindAngle(orig,base), fabs(a), FALSE, 0,
+ wDrawColorBlue);
}
+ DIST_T d;
+ d = mainD.scale*0.25;
+ ANGLE_T arrow_a = NormalizeAngle(FindAngle(orig,orig_base)+a/2);
+ coOrd arr1,arr2,arr3;
+ Translate(&arr2,orig,arrow_a,dist/2);
+ if (clockwise) { arrow_a +=90; }
+ else { arrow_a -=90; }
+ Translate(&arr1,arr2,arrow_a+135,d/2);
+ Translate(&arr3,arr2,arrow_a-135,d/2);
+ DrawLine( &tempD, arr1, arr2, 0, wDrawColorBlue );
+ DrawLine( &tempD, arr2, arr3, 0, wDrawColorBlue );
}
-
}
- DrawMovedTracks();
- break;
}
+ DrawMovedTracks();
+ break;
+
+ }
return C_CONTINUE;
}
-static void QuickMove( void* pos) {
+static void QuickMove( void* pos)
+{
coOrd move_pos = *(coOrd*)pos;
DYNARR_RESET(track_p,auto_select_da);
- if ( SelectedTracksAreFrozen() )
+ if ( SelectedTracksAreFrozen() ) {
return;
+ }
wDrawDelayUpdate( mainD.d, TRUE );
GetMovedTracks(FALSE);
UndoStart( _("Move Tracks"), "Move Tracks" );
@@ -2372,16 +2297,18 @@ static void QuickMove( void* pos) {
wDrawDelayUpdate( mainD.d, FALSE );
}
-static track_p SelectTrackByIndex(TRKINX_T ti, char * message ) {
+static track_p SelectTrackByIndex(TRKINX_T ti, char * message )
+{
track_p trk = FindTrack(ti);
if (trk) {
if (!GetLayerFrozen( GetTrkLayer( trk ) ) ) {
if (GetLayerModule(GetTrkLayer(trk))) {
DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,TRUE);
- snprintf(message, STR_LONG_SIZE, "%s %d",_("In module layer:"),GetTrkLayer(trk)+1);
+ snprintf(message, STR_LONG_SIZE, "%s %d",_("In module layer:"),
+ GetTrkLayer(trk)+1);
} else {
- if (!GetLayerVisible(GetTrkLayer(trk))) FlipLayer(I2VP(GetTrkLayer(trk)));
- if (!GetTrkVisible(trk) && drawTunnel==0 ) drawTunnel = 1; //Force DRAW_TUNNEL_DASH
+ if (!GetLayerVisible(GetTrkLayer(trk))) { FlipLayer(I2VP(GetTrkLayer(trk))); }
+ if (!GetTrkVisible(trk) && drawTunnel==0 ) { drawTunnel = 1; } //Force DRAW_TUNNEL_DASH
SelectOneTrack(trk,TRUE);
}
} else {
@@ -2394,7 +2321,8 @@ static track_p SelectTrackByIndex(TRKINX_T ti, char * message ) {
return trk;
}
-EXPORT void SelectByIndex( void* string) {
+EXPORT void SelectByIndex( void* string)
+{
char result[STR_LONG_SIZE] = "";
char * message;
SetAllTrackSelect(FALSE);
@@ -2414,13 +2342,13 @@ EXPORT void SelectByIndex( void* string) {
}
}
cp = strtok(NULL,",");
- if (cp) single = FALSE;
+ if (cp) { single = FALSE; }
}
DoZoomExtents(I2VP(1));
- if (strlen(result))
+ if (strlen(result)) {
InfoMessage(result);
- else if (single && trk) {
+ } else if (single && trk) {
char msg[STR_SIZE];
DescribeTrack( trk, msg, sizeof msg );
InfoMessage( msg );
@@ -2433,8 +2361,9 @@ static void QuickRotate( void* pangle )
{
ANGLE_T angle = (ANGLE_T)VP2L(pangle);
DYNARR_RESET(track_p,auto_select_da);
- if ( SelectedTracksAreFrozen() )
+ if ( SelectedTracksAreFrozen() ) {
return;
+ }
wDrawDelayUpdate( mainD.d, TRUE );
GetMovedTracks(FALSE);
//DrawSelectedTracksD( &mainD, wDrawColorWhite );
@@ -2457,8 +2386,9 @@ static void ChangeDetailedFlag( void * mode )
if ( ( GetTrkBits( moveDescTrk ) & TB_DETAILDESC ) == 0 ) {
ClrTrkBits( moveDescTrk, TB_HIDEDESC );
SetTrkBits( moveDescTrk, TB_DETAILDESC );
- } else
+ } else {
ClrTrkBits( moveDescTrk, TB_DETAILDESC );
+ }
DrawNewTrack( moveDescTrk );
wDrawDelayUpdate( mainD.d, FALSE );
}
@@ -2469,10 +2399,11 @@ static void ChangeDescFlag( void * mode )
UndoStart( _("Toggle Label"), "Modedesc( T%d )", GetTrkIndex(moveDescTrk) );
UndoModify( moveDescTrk );
UndrawNewTrack( moveDescTrk );
- if ( ( GetTrkBits( moveDescTrk ) & TB_HIDEDESC ) == 0 )
+ if ( ( GetTrkBits( moveDescTrk ) & TB_HIDEDESC ) == 0 ) {
SetTrkBits( moveDescTrk, TB_HIDEDESC );
- else
+ } else {
ClrTrkBits( moveDescTrk, TB_HIDEDESC );
+ }
DrawNewTrack( moveDescTrk );
wDrawDelayUpdate( mainD.d, FALSE );
}
@@ -2481,134 +2412,142 @@ static void ChangeDescFlag( void * mode )
* Mode_o -1 = everything, 0 = elevations only, 1 = descriptions only
*/
-track_p FindTrackDescription(coOrd pos, EPINX_T * ep_o, int * mode_o, BOOL_T show_hidden, BOOL_T * hidden_o) {
- track_p trk = NULL;
- DIST_T d, dd = DIST_INF;
- track_p trk1 = NULL;
- EPINX_T ep1=-1, ep=-1;
- BOOL_T hidden_t, hidden;
- coOrd dpos = pos;
- coOrd cpos;
- int mode = -1;
- while ( TrackIterate( &trk1 ) ) {
- if ( !GetLayerVisible(GetTrkLayer(trk1)) )
- continue;
- if ( (!GetTrkVisible(trk1)) && drawTunnel==0 )
- continue;
- if ( GetLayerFrozen( GetTrkLayer( trk1 ) ))
- continue;
- if ( (labelEnable&LABELENABLE_ENDPT_ELEV)!=0 && *mode_o <= 0) {
- for ( ep1=0; ep1<GetTrkEndPtCnt(trk1); ep1++ ) {
- d = EndPtDescriptionDistance( pos, trk1, ep1, &dpos, FALSE, NULL ); //No hidden
- if ( d < dd ) {
- dd = d;
- trk = trk1;
- ep = ep1;
- mode = 0;
- hidden = FALSE;
- cpos= dpos;
- }
+track_p FindTrackDescription(coOrd pos, EPINX_T * ep_o, int * mode_o,
+ BOOL_T show_hidden, BOOL_T * hidden_o)
+{
+ track_p trk = NULL;
+ DIST_T d, dd = DIST_INF;
+ track_p trk1 = NULL;
+ EPINX_T ep1=-1, ep=-1;
+ BOOL_T hidden_t, hidden;
+ coOrd dpos = pos;
+// coOrd cpos;
+ int mode = -1;
+ while ( TrackIterate( &trk1 ) ) {
+ if ( !GetLayerVisible(GetTrkLayer(trk1)) ) {
+ continue;
+ }
+ if ( (!GetTrkVisible(trk1)) && drawTunnel==0 ) {
+ continue;
+ }
+ if ( GetLayerFrozen( GetTrkLayer( trk1 ) )) {
+ continue;
+ }
+ if ( (labelEnable&LABELENABLE_ENDPT_ELEV)!=0 && *mode_o <= 0) {
+ for ( ep1=0; ep1<GetTrkEndPtCnt(trk1); ep1++ ) {
+ d = EndPtDescriptionDistance( pos, trk1, ep1, &dpos, FALSE, NULL ); //No hidden
+ if ( d < dd ) {
+ dd = d;
+ trk = trk1;
+ ep = ep1;
+ mode = 0;
+ hidden = FALSE;
+// cpos= dpos;
}
}
- if (IsClose(dd)) break;
- if ( *mode_o == 0 || !QueryTrack( trk1, Q_HAS_DESC ) )
- continue;
- if ((labelEnable&LABELENABLE_TRKDESC)==0)
- continue;
- if ( ( GetTrkBits( trk1 ) & TB_HIDEDESC ) != 0 ) {
- if ( !show_hidden ) continue;
- }
- d = CompoundDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
- if ( d < dd ) {
- dd = d;
- trk = trk1;
- ep = -1;
- mode = 1;
- hidden = hidden_t;
- cpos = dpos;
- }
- d = CurveDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
- if ( d < dd ) {
- dd = d;
- trk = trk1;
- ep = -1;
- mode = 2;
- hidden = hidden_t;
- cpos = dpos;
- }
- d = CornuDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
- if ( d < dd ) {
- dd = d;
- trk = trk1;
- ep = -1;
- mode = 3;
- hidden = hidden_t;
- cpos = dpos;
- }
- d = BezierDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
- if ( d < dd ) {
- dd = d;
- trk = trk1;
- ep = -1;
- mode = 4;
- hidden = hidden_t;
- cpos = dpos;
- }
- d = StraightDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
- if (d < dd ) {
- dd = d;
- trk = trk1;
- ep = -1;
- mode = 5;
- hidden = hidden_t;
- cpos = dpos;
- }
- d = JointDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
- if (d < dd ) {
- dd = d;
- trk = trk1;
- ep = -1;
- mode = 6;
- hidden = hidden_t;
- cpos = dpos;
- }
-
- }
-
- coOrd pos1 = pos;
-
- if ((trk != NULL) && IsClose(dd) ) {
- if (ep_o) *ep_o = ep;
- if (mode_o) *mode_o = mode;
- if (hidden_o) *hidden_o = hidden;
- return trk;
- } else { // Return other track for description (not near to description but nearest to track)
- if ((trk1 = OnTrack(&pos1, FALSE, FALSE))==NULL) return NULL;
- if (!QueryTrack( trk1, Q_HAS_DESC )) return NULL;
- if (GetLayerFrozen(GetTrkLayer(trk1))) return NULL;
- if (IsClose(FindDistance(pos,pos1))) {
- if (mode_o) *mode_o = -1;
- if (ep_o) *ep_o = -1;
- if (hidden_o) *hidden_o = GetTrkBits( trk1 ) & TB_HIDEDESC;
- return trk1;
- }
- }
-
- return NULL;
+ }
+ if (IsClose(dd)) { break; }
+ if ( *mode_o == 0 || !QueryTrack( trk1, Q_HAS_DESC ) ) {
+ continue;
+ }
+ if ((labelEnable&LABELENABLE_TRKDESC)==0) {
+ continue;
+ }
+ if ( ( GetTrkBits( trk1 ) & TB_HIDEDESC ) != 0 ) {
+ if ( !show_hidden ) { continue; }
+ }
+ d = CompoundDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
+ if ( d < dd ) {
+ dd = d;
+ trk = trk1;
+ ep = -1;
+ mode = 1;
+ hidden = hidden_t;
+// cpos = dpos;
+ }
+ d = CurveDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
+ if ( d < dd ) {
+ dd = d;
+ trk = trk1;
+ ep = -1;
+ mode = 2;
+ hidden = hidden_t;
+// cpos = dpos;
+ }
+ d = CornuDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
+ if ( d < dd ) {
+ dd = d;
+ trk = trk1;
+ ep = -1;
+ mode = 3;
+ hidden = hidden_t;
+// cpos = dpos;
+ }
+ d = BezierDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
+ if ( d < dd ) {
+ dd = d;
+ trk = trk1;
+ ep = -1;
+ mode = 4;
+ hidden = hidden_t;
+// cpos = dpos;
+ }
+ d = StraightDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
+ if (d < dd ) {
+ dd = d;
+ trk = trk1;
+ ep = -1;
+ mode = 5;
+ hidden = hidden_t;
+// cpos = dpos;
+ }
+ d = JointDescriptionDistance( pos, trk1, &dpos, show_hidden, &hidden_t );
+ if (d < dd ) {
+ dd = d;
+ trk = trk1;
+ ep = -1;
+ mode = 6;
+ hidden = hidden_t;
+// cpos = dpos;
+ }
+
+ }
+
+ coOrd pos1 = pos;
+
+ if ((trk != NULL) && IsClose(dd) ) {
+ if (ep_o) { *ep_o = ep; }
+ if (mode_o) { *mode_o = mode; }
+ if (hidden_o) { *hidden_o = hidden; }
+ return trk;
+ } else { // Return other track for description (not near to description but nearest to track)
+ if ((trk1 = OnTrack(&pos1, FALSE, FALSE))==NULL) { return NULL; }
+ if (!QueryTrack( trk1, Q_HAS_DESC )) { return NULL; }
+ if (GetLayerFrozen(GetTrkLayer(trk1))) { return NULL; }
+ if (IsClose(FindDistance(pos,pos1))) {
+ if (mode_o) { *mode_o = -1; }
+ if (ep_o) { *ep_o = -1; }
+ if (hidden_o) { *hidden_o = GetTrkBits( trk1 ) & TB_HIDEDESC; }
+ return trk1;
+ }
+ }
+
+ return NULL;
}
static long moveDescMode;
STATUS_T CmdMoveDescription(
- wAction_t action,
- coOrd pos )
+ wAction_t action,
+ coOrd pos )
{
static EPINX_T ep;
static BOOL_T hidden;
static int mode;
BOOL_T bChanged;
- moveDescMode = VP2L(commandContext); //Context 0 = everything, 1 means elevations, 2 means descriptions
+ moveDescMode = VP2L(
+ commandContext); //Context 0 = everything, 1 means elevations, 2 means descriptions
bChanged = FALSE;
switch (action&0xFF) {
@@ -2618,55 +2557,58 @@ STATUS_T CmdMoveDescription(
hidden = FALSE;
mode = -1;
if ( labelWhen < 2 || mainD.scale > labelScale ||
- (labelEnable&(LABELENABLE_TRKDESC|LABELENABLE_ENDPT_ELEV))==0 ) {
+ (labelEnable&(LABELENABLE_TRKDESC|LABELENABLE_ENDPT_ELEV))==0 ) {
ErrorMessage( MSG_DESC_NOT_VISIBLE );
return C_ERROR;
}
SetAllTrackSelect( FALSE );
- /* no break */
+ /* no break */
case wActionMove:
- if ( labelWhen < 2 || mainD.scale > labelScale ) return C_CONTINUE;
- mode = moveDescMode-1; // -1 means everything, 0 means elevations only, 1 means descriptions only
- if ((moveDescTrk=FindTrackDescription(pos,&ep,&mode,TRUE,&hidden))!=NULL) {
- if (mode==0) {
- InfoMessage(_("Elevation description"));
+ if ( labelWhen < 2 || mainD.scale > labelScale ) { return C_CONTINUE; }
+ mode = moveDescMode
+ -1; // -1 means everything, 0 means elevations only, 1 means descriptions only
+ if ((moveDescTrk=FindTrackDescription(pos,&ep,&mode,TRUE,&hidden))!=NULL) {
+ if (mode==0) {
+ InfoMessage(_("Elevation description"));
+ } else {
+ if (moveDescMode == 1) {
+ moveDescTrk = NULL;
+ return C_CONTINUE; //Ignore other tracks if only looking for elevations
+ }
+ if (hidden) {
+ InfoMessage(_("Hidden description - 's' to Show, 'd' Details"));
+ moveDescPos = pos;
} else {
- if (moveDescMode == 1) {
- moveDescTrk = NULL;
- return C_CONTINUE; //Ignore other tracks if only looking for elevations
- }
- if (hidden) {
- InfoMessage(_("Hidden description - 's' to Show, 'd' Details"));
- moveDescPos = pos;
- } else {
- InfoMessage(_("Shown description - 'h' to Hide"));
- moveDescPos = pos;
- }
+ InfoMessage(_("Shown description - 'h' to Hide"));
+ moveDescPos = pos;
}
- return C_CONTINUE;
- } else {
- moveDescTrk = NULL;
}
- InfoMessage( _("Select and drag a description") );
- break;
+ return C_CONTINUE;
+ } else {
+ moveDescTrk = NULL;
+ }
+ InfoMessage( _("Select and drag a description") );
+ break;
case C_TEXT:
- if (!moveDescTrk) return C_CONTINUE;
- if (mode == 0) return C_CONTINUE;
+ if (!moveDescTrk) { return C_CONTINUE; }
+ if (mode == 0) { return C_CONTINUE; }
bChanged = FALSE;
if (action>>8 == 's') {
- if ( ( GetTrkBits( moveDescTrk ) & TB_HIDEDESC) != 0 )
+ if ( ( GetTrkBits( moveDescTrk ) & TB_HIDEDESC) != 0 ) {
bChanged = TRUE;
+ }
ClrTrkBits( moveDescTrk, TB_HIDEDESC );
} else if (action>>8 == 'h') {
- if ( ( GetTrkBits( moveDescTrk ) & TB_HIDEDESC) == 0 )
+ if ( ( GetTrkBits( moveDescTrk ) & TB_HIDEDESC) == 0 ) {
bChanged = TRUE;
+ }
SetTrkBits( moveDescTrk, TB_HIDEDESC );
ClrTrkBits( moveDescTrk, TB_DETAILDESC );
} else if (action>>8 == 'd') { //Toggle Detailed
bChanged = TRUE;
- if ((GetTrkBits( moveDescTrk ) & TB_DETAILDESC) != 0)
+ if ((GetTrkBits( moveDescTrk ) & TB_DETAILDESC) != 0) {
ClrTrkBits( moveDescTrk, TB_DETAILDESC);
- else {
+ } else {
ClrTrkBits( moveDescTrk, TB_HIDEDESC );
SetTrkBits( moveDescTrk, TB_DETAILDESC );
}
@@ -2677,57 +2619,62 @@ STATUS_T CmdMoveDescription(
break;
case C_DOWN:
if (( labelWhen < 2 || mainD.scale > labelScale ) ||
- (labelEnable&(LABELENABLE_TRKDESC|LABELENABLE_ENDPT_ELEV))==0 ) {
- ErrorMessage( MSG_DESC_NOT_VISIBLE );
+ (labelEnable&(LABELENABLE_TRKDESC|LABELENABLE_ENDPT_ELEV))==0 ) {
+ ErrorMessage( MSG_DESC_NOT_VISIBLE );
return C_ERROR;
- }
+ }
mode = moveDescMode-1;
moveDescTrk = FindTrackDescription(pos,&ep,&mode,TRUE,&hidden);
- if (moveDescTrk == NULL )
+ if (moveDescTrk == NULL ) {
return C_CONTINUE;
+ }
if (hidden) {
InfoMessage(_("Hidden Label - Drag to reveal"));
} else {
InfoMessage(_("Drag label"));
}
- if (ep == -1 )
+ if (ep == -1 ) {
DrawTrack( moveDescTrk, &mainD, wDrawColorWhite );
- /* no break */
+ }
+ /* no break */
case C_MOVE:
- if (moveDescTrk == NULL )
- return C_CONTINUE;
+ if (moveDescTrk == NULL ) {
+ return C_CONTINUE;
+ }
UndoStart( _("Move Label"), "Modedesc( T%d )", GetTrkIndex(moveDescTrk) );
UndoModify( moveDescTrk );
ClrTrkBits( moveDescTrk, TB_HIDEDESC );
hidden = FALSE;
- /* no break */
+ /* no break */
case C_UP:
- if ( labelWhen < 2 || mainD.scale > labelScale )
+ if ( labelWhen < 2 || mainD.scale > labelScale ) {
return C_CONTINUE;
- if ( moveDescTrk == NULL )
+ }
+ if ( moveDescTrk == NULL ) {
return C_CONTINUE;
- int rc = C_CONTINUE;
+ }
+// int rc = C_CONTINUE;
switch (mode) {
case 0:
- rc = EndPtDescriptionMove( moveDescTrk, ep, action, pos );
+ EndPtDescriptionMove( moveDescTrk, ep, action, pos );
break;
case 1:
- rc = CompoundDescriptionMove( moveDescTrk, action, pos );
+ CompoundDescriptionMove( moveDescTrk, action, pos );
break;
case 2:
- rc = CurveDescriptionMove( moveDescTrk, action, pos );
+ CurveDescriptionMove( moveDescTrk, action, pos );
break;
case 3:
- rc = CornuDescriptionMove( moveDescTrk, action, pos );
+ CornuDescriptionMove( moveDescTrk, action, pos );
break;
case 4:
- rc = BezierDescriptionMove( moveDescTrk, action, pos );
+ BezierDescriptionMove( moveDescTrk, action, pos );
break;
case 5:
- rc = StraightDescriptionMove( moveDescTrk, action, pos);
+ StraightDescriptionMove( moveDescTrk, action, pos);
break;
case 6:
- rc = JointDescriptionMove( moveDescTrk, action, pos);
+ JointDescriptionMove( moveDescTrk, action, pos);
break;
}
hidden = FALSE;
@@ -2738,8 +2685,9 @@ STATUS_T CmdMoveDescription(
}
break;
case C_REDRAW:
- if ( labelWhen < 2 || mainD.scale > labelScale )
+ if ( labelWhen < 2 || mainD.scale > labelScale ) {
return C_CONTINUE;
+ }
if ( moveDescTrk ) {
if (mode==0) {
DrawEndPt2( &tempD, moveDescTrk, ep, drawColorPreviewSelected );
@@ -2762,15 +2710,18 @@ STATUS_T CmdMoveDescription(
} else {
moveDescPos = pos;
}
- if ( moveDescTrk == NULL ) break;
- if ( ! QueryTrack( moveDescTrk, Q_HAS_DESC ) ) break;
+ if ( moveDescTrk == NULL ) { break; }
+ if ( ! QueryTrack( moveDescTrk, Q_HAS_DESC ) ) { break; }
if ( moveDescM == NULL ) {
moveDescM = MenuRegister( "Move Desc Toggle" );
- moveDescMI = wMenuToggleCreate( moveDescM, "", _("Show/Hide Description"), 0, TRUE, ChangeDescFlag, NULL );
- moveDetailDescMI = wMenuToggleCreate( moveDescM, "", _("Toggle Detailed Description"), 0, TRUE, ChangeDetailedFlag, NULL );
+ moveDescMI = wMenuToggleCreate( moveDescM, "", _("Show/Hide Description"), 0,
+ TRUE, ChangeDescFlag, NULL );
+ moveDetailDescMI = wMenuToggleCreate( moveDescM, "",
+ _("Toggle Detailed Description"), 0, TRUE, ChangeDetailedFlag, NULL );
}
wMenuToggleSet( moveDescMI, !( GetTrkBits( moveDescTrk ) & TB_HIDEDESC ) );
- wMenuToggleSet( moveDetailDescMI, ( GetTrkBits( moveDescTrk ) & TB_DETAILDESC ) );
+ wMenuToggleSet( moveDetailDescMI,
+ ( GetTrkBits( moveDescTrk ) & TB_DETAILDESC ) );
menuPos = pos;
wMenuPopupShow( moveDescM );
break;
@@ -2778,14 +2729,14 @@ STATUS_T CmdMoveDescription(
default:
;
}
-
+
return C_CONTINUE;
}
static void FlipTracks(
- coOrd orig,
- ANGLE_T angle )
+ coOrd orig,
+ ANGLE_T angle )
{
track_p trk, trk1;
EPINX_T ep, ep1;
@@ -2797,16 +2748,17 @@ static void FlipTracks(
wDrawDelayUpdate( mapD.d, TRUE );
}
for ( trk=NULL; TrackIterate(&trk); ) {
- if ( !GetTrkSelected(trk) )
+ if ( !GetTrkSelected(trk) ) {
continue;
+ }
UndoModify( trk );
if (selectedTrackCount <= incrementalDrawLimit) {
- DrawTrack( trk, &mainD, wDrawColorWhite );
- DrawTrack( trk, &mapD, wDrawColorWhite );
+ DrawTrack( trk, &mainD, wDrawColorWhite );
+ DrawTrack( trk, &mapD, wDrawColorWhite );
}
for (ep=0; ep<GetTrkEndPtCnt(trk); ep++) {
if ((trk1 = GetTrkEndTrk(trk,ep)) != NULL &&
- !GetTrkSelected(trk1)) {
+ !GetTrkSelected(trk1)) {
ep1 = GetEndPtConnectedToMe( trk1, trk );
DisconnectTracks( trk, ep, trk1, ep1 );
DrawEndPt( &mainD, trk1, ep1, wDrawColorBlack );
@@ -2814,8 +2766,8 @@ static void FlipTracks(
}
FlipTrack( trk, orig, angle );
if (selectedTrackCount <= incrementalDrawLimit) {
- DrawTrack( trk, &mainD, wDrawColorBlack );
- DrawTrack( trk, &mapD, wDrawColorBlack );
+ DrawTrack( trk, &mainD, wDrawColorBlack );
+ DrawTrack( trk, &mapD, wDrawColorBlack );
}
}
if (selectedTrackCount > incrementalDrawLimit) {
@@ -2831,8 +2783,8 @@ static void FlipTracks(
static STATUS_T CmdFlip(
- wAction_t action,
- coOrd pos )
+ wAction_t action,
+ coOrd pos )
{
static coOrd pos0;
static coOrd pos1;
@@ -2840,53 +2792,55 @@ static STATUS_T CmdFlip(
switch( action ) {
- case C_START:
- state = 0;
- if (selectedTrackCount == 0) {
- ErrorMessage( MSG_NO_SELECTED_TRK );
- return C_TERMINATE;
- }
- if (SelectedTracksAreFrozen())
- return C_TERMINATE;
- InfoMessage( _("Drag to mark mirror line") );
- break;
- case C_DOWN:
- state = 1;
- if (SelectedTracksAreFrozen()) {
- return C_TERMINATE;
- }
- pos0 = pos1 = pos;
- return C_CONTINUE;
- case C_MOVE:
- pos1 = pos;
- InfoMessage( _("Angle %0.2f"), FindAngle( pos0, pos1 ) );
- return C_CONTINUE;
- case C_UP:
- UndoStart( _("Flip Tracks"), "flip" );
- FlipTracks( pos0, FindAngle( pos0, pos1 ) );
- state = 0;
+ case C_START:
+ state = 0;
+ if (selectedTrackCount == 0) {
+ ErrorMessage( MSG_NO_SELECTED_TRK );
return C_TERMINATE;
+ }
+ if (SelectedTracksAreFrozen()) {
+ return C_TERMINATE;
+ }
+ InfoMessage( _("Drag to mark mirror line") );
+ break;
+ case C_DOWN:
+ state = 1;
+ if (SelectedTracksAreFrozen()) {
+ return C_TERMINATE;
+ }
+ pos0 = pos1 = pos;
+ return C_CONTINUE;
+ case C_MOVE:
+ pos1 = pos;
+ InfoMessage( _("Angle %0.2f"), FindAngle( pos0, pos1 ) );
+ return C_CONTINUE;
+ case C_UP:
+ UndoStart( _("Flip Tracks"), "flip" );
+ FlipTracks( pos0, FindAngle( pos0, pos1 ) );
+ state = 0;
+ return C_TERMINATE;
#ifdef LATER
- case C_CANCEL:
+ case C_CANCEL:
#endif
- case C_REDRAW:
- DrawHighlightBoxes(FALSE,FALSE,NULL);
- HighlightSelectedTracks(NULL, TRUE, TRUE);
- if ( state == 0 )
- return C_CONTINUE;
- DrawLine( &tempD, pos0, pos1, 0, wDrawColorBlack );
+ case C_REDRAW:
+ DrawHighlightBoxes(FALSE,FALSE,NULL);
+ HighlightSelectedTracks(NULL, TRUE, TRUE);
+ if ( state == 0 ) {
return C_CONTINUE;
+ }
+ DrawLine( &tempD, pos0, pos1, 0, wDrawColorBlack );
+ return C_CONTINUE;
- default:
- break;
+ default:
+ break;
}
return C_CONTINUE;
}
static BOOL_T SelectArea(
- wAction_t action,
- coOrd pos )
+ wAction_t action,
+ coOrd pos )
{
static coOrd pos0;
static int state;
@@ -2938,36 +2892,39 @@ static BOOL_T SelectArea(
subtract = (action == C_RUP);
cnt = 0;
trk = NULL;
- if (add && (selectMode == 0)) SetAllTrackSelect( FALSE ); //Remove all tracks first
+ if (add && (selectMode == 0)) { SetAllTrackSelect( FALSE ); } //Remove all tracks first
while ( TrackIterate( &trk ) ) {
GetBoundingBox( trk, &hi, &lo );
if (GetLayerVisible( GetTrkLayer( trk ) ) &&
- lo.x >= base.x && hi.x <= base.x+size.x &&
- lo.y >= base.y && hi.y <= base.y+size.y) {
- if ( (GetTrkSelected( trk )==0) == (action==C_UP) )
- cnt++;
+ lo.x >= base.x && hi.x <= base.x+size.x &&
+ lo.y >= base.y && hi.y <= base.y+size.y) {
+ if ( (GetTrkSelected( trk )==0) == (action==C_UP) ) {
+ cnt++;
+ }
}
}
trk = NULL;
while ( TrackIterate( &trk ) ) {
GetBoundingBox( trk, &hi, &lo );
if (GetLayerVisible( GetTrkLayer( trk ) ) &&
- lo.x >= base.x && hi.x <= base.x+size.x &&
- lo.y >= base.y && hi.y <= base.y+size.y) {
+ lo.x >= base.x && hi.x <= base.x+size.x &&
+ lo.y >= base.y && hi.y <= base.y+size.y) {
if ( (GetTrkSelected( trk )==0) == (action==C_UP) ) {
if (GetLayerFrozen(GetTrkLayer(trk))) {
continue;
} else if (GetLayerModule(GetTrkLayer(trk))) {
- if (add)
+ if (add) {
DoModuleTracks(GetTrkLayer(trk),SelectOneTrack,TRUE);
- else
+ } else {
DoModuleTracks(GetTrkLayer(trk),SelectOneTrack,FALSE);
+ }
} else if (cnt > incrementalDrawLimit) {
selectedTrackCount += (action==C_UP?1:-1);
- if (add)
+ if (add) {
SetTrkBits( trk, TB_SELECTED );
- else
+ } else {
ClrTrkBits( trk, TB_SELECTED );
+ }
} else {
SelectOneTrack( trk, add );
}
@@ -2992,33 +2949,38 @@ static BOOL_T SelectArea(
break;
case C_REDRAW:
- if (state == 0)
+ if (state == 0) {
break;
+ }
//Draw to-be selected tracks versus not.
trk = NULL;
- if (selectMode == 1 && add) HighlightSelectedTracks(NULL, TRUE, TRUE);
+ if (selectMode == 1 && add) { HighlightSelectedTracks(NULL, TRUE, TRUE); }
while ( TrackIterate( &trk ) ) {
GetBoundingBox( trk, &hi, &lo );
if (GetLayerVisible( GetTrkLayer( trk ) ) &&
- lo.x >= base.x && hi.x <= base.x+size.x &&
- lo.y >= base.y && hi.y <= base.y+size.y) {
- if (GetLayerFrozen(GetTrkLayer(trk)))
+ lo.x >= base.x && hi.x <= base.x+size.x &&
+ lo.y >= base.y && hi.y <= base.y+size.y) {
+ if (GetLayerFrozen(GetTrkLayer(trk))) {
continue;
+ }
if (GetLayerModule(GetTrkLayer(trk))) {
- if (add)
+ if (add) {
DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,TRUE);
- else if (subtract)
+ } else if (subtract) {
DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,FALSE);
+ }
} else {
if (add) {
- if (selectMode == 0 && add)
+ if (selectMode == 0 && add) {
DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
- if (!GetTrkSelected(trk))
+ }
+ if (!GetTrkSelected(trk)) {
DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
- }
- else if (subtract) {
- if (GetTrkSelected(trk))
+ }
+ } else if (subtract) {
+ if (GetTrkSelected(trk)) {
DrawTrack(trk,&tempD,wDrawColorPreviewUnselected);
+ }
}
}
}
@@ -3033,23 +2995,19 @@ static BOOL_T SelectArea(
return FALSE;
}
-extern BOOL_T inDescribeCmd;
-extern wIndex_t modifyCmdInx;
-extern wIndex_t describeCmdInx;
-extern wIndex_t panCmdInx;
-extern wIndex_t trainCmdInx;
-static STATUS_T SelectTrack(
- coOrd pos )
+static STATUS_T SelectTrack(
+ coOrd pos )
{
track_p trk;
char msg[STR_SIZE];
- if (((trk = OnTrack( &pos, FALSE, FALSE )) == NULL) && selectZero) { //If option set and !ctrl or unset and ctrl
+ if (((trk = OnTrack( &pos, FALSE, FALSE )) == NULL)
+ && selectZero) { //If option set and !ctrl or unset and ctrl
SetAllTrackSelect( FALSE ); //Unselect all
return C_CONTINUE;
}
- if (trk == NULL) return C_CONTINUE;
+ if (trk == NULL) { return C_CONTINUE; }
if (!CheckTrackLayerSilent( trk ) ) {
if (GetLayerFrozen(GetTrkLayer(trk)) ) {
trk = NULL;
@@ -3061,10 +3019,12 @@ static STATUS_T SelectTrack(
DescribeTrack( trk, msg, sizeof msg );
InfoMessage( msg );
if (GetLayerModule(GetTrkLayer(trk))) {
- if (((MyGetKeyState() & WKEY_CTRL) && (selectMode==0)) || (!(MyGetKeyState() & WKEY_CTRL) && (selectMode==1)) ) {
+ if (((MyGetKeyState() & WKEY_CTRL) && (selectMode==0))
+ || (!(MyGetKeyState() & WKEY_CTRL) && (selectMode==1)) ) {
DoModuleTracks(GetTrkLayer(trk),SelectOneTrack,!GetTrkSelected(trk));
} else {
- SetAllTrackSelect( FALSE ); //Just this Track if selectMode = 0 and !CTRL or selectMode = 1 and CTRL
+ SetAllTrackSelect(
+ FALSE ); //Just this Track if selectMode = 0 and !CTRL or selectMode = 1 and CTRL
DoModuleTracks(GetTrkLayer(trk),SelectOneTrack,TRUE);
}
RedrawSelectedTracksBoundary();
@@ -3085,57 +3045,62 @@ static STATUS_T SelectTrack(
return C_CONTINUE;
}
-static STATUS_T Activate( coOrd pos) {
+static STATUS_T Activate( coOrd pos)
+{
track_p trk;
if ((trk = OnTrack( &pos, TRUE, FALSE )) == NULL) {
- return C_CONTINUE;
+ return C_CONTINUE;
}
if (GetLayerModule(GetTrkLayer(trk))) {
return C_CONTINUE;
}
- if (QueryTrack(trk,Q_IS_ACTIVATEABLE)) ActivateTrack(trk);
+ if (QueryTrack(trk,Q_IS_ACTIVATEABLE)) { ActivateTrack(trk); }
return C_CONTINUE;
}
-track_p IsInsideABox(coOrd pos) {
+track_p IsInsideABox(coOrd pos)
+{
track_p ts = NULL;
while ( TrackIterate( &ts ) ) {
- if (!GetLayerVisible( GetTrkLayer( ts))) continue;
- if (!GetTrkSelected(ts)) continue;
+ if (!GetLayerVisible( GetTrkLayer( ts))) { continue; }
+ if (!GetTrkSelected(ts)) { continue; }
coOrd hi,lo;
GetBoundingBox(ts, &hi, &lo);
double boundary = mainD.scale*5/mainD.dpi;
- if ((pos.x>=lo.x-boundary && pos.x<=hi.x+boundary) && (pos.y>=lo.y-boundary && pos.y<=hi.y+boundary)) {
+ if ((pos.x>=lo.x-boundary && pos.x<=hi.x+boundary) && (pos.y>=lo.y-boundary
+ && pos.y<=hi.y+boundary)) {
return ts;
}
}
return NULL;
}
-void DrawHighlightBoxes(BOOL_T highlight_selected, BOOL_T select, track_p not_this) {
+void DrawHighlightBoxes(BOOL_T highlight_selected, BOOL_T select,
+ track_p not_this)
+{
track_p ts = NULL;
coOrd origin,max;
BOOL_T first = TRUE;
while ( TrackIterate( &ts ) ) {
- if ( !GetLayerVisible( GetTrkLayer( ts))) continue;
- if (!GetTrkSelected(ts)) continue;
+ if ( !GetLayerVisible( GetTrkLayer( ts))) { continue; }
+ if (!GetTrkSelected(ts)) { continue; }
if (GetLayerModule(GetTrkLayer(ts))) {
DrawHighlightLayer(GetTrkLayer(ts));
}
coOrd hi,lo;
- if (highlight_selected && (ts != not_this)) DrawTrack(ts,&tempD,select?wDrawColorPreviewSelected:wDrawColorPreviewUnselected );
+ if (highlight_selected && (ts != not_this)) { DrawTrack(ts,&tempD,select?wDrawColorPreviewSelected:wDrawColorPreviewUnselected ); }
GetBoundingBox(ts, &hi, &lo);
if (first) {
origin = lo;
max = hi;
first = FALSE;
} else {
- if (lo.x <origin.x) origin.x = lo.x;
- if (lo.y <origin.y) origin.y = lo.y;
- if (hi.x >max.x) max.x = hi.x;
- if (hi.y >max.y) max.y = hi.y;
+ if (lo.x <origin.x) { origin.x = lo.x; }
+ if (lo.y <origin.y) { origin.y = lo.y; }
+ if (hi.x >max.x) { max.x = hi.x; }
+ if (hi.y >max.y) { max.y = hi.y; }
}
}
if (!first) {
@@ -3152,19 +3117,23 @@ void DrawHighlightBoxes(BOOL_T highlight_selected, BOOL_T select, track_p not_th
}
static STATUS_T CallModify(wAction_t action,
- coOrd pos ) {
+ coOrd pos )
+{
int rc = CmdModify(action,pos);
- if (rc != C_CONTINUE)
+ if (rc != C_CONTINUE) {
doingDouble = FALSE;
+ }
return rc;
}
-static STATUS_T CallDescribe(wAction_t action, coOrd pos) {
+static STATUS_T CallDescribe(wAction_t action, coOrd pos)
+{
int rc = CmdDescribe(action, pos);
return rc;
}
-static void CallPushDescribe(void * unused) {
+static void CallPushDescribe(void * unused)
+{
if (moveDescTrk) {
CallDescribe(C_START, moveDescPos);
CallDescribe(C_DOWN, moveDescPos);
@@ -3175,7 +3144,8 @@ static void CallPushDescribe(void * unused) {
static STATUS_T CmdSelect(wAction_t,coOrd);
-static void CallPushModify(void * unused) {
+static void CallPushModify(void * unused)
+{
if (moveDescTrk) {
CmdSelect(C_LDOUBLE, moveDescPos);
}
@@ -3183,8 +3153,8 @@ static void CallPushModify(void * unused) {
}
static STATUS_T CmdSelect(
- wAction_t action,
- coOrd pos )
+ wAction_t action,
+ coOrd pos )
{
static BOOL_T doingMove;
@@ -3195,17 +3165,19 @@ static STATUS_T CmdSelect(
STATUS_T rc=C_CONTINUE;
static track_p trk = NULL;
typedef enum {NOSHOW,SHOWMOVE,SHOWROTATE,SHOWMODIFY,SHOWACTIVATE} showType;
- static showType showMode;
+// static showType showMode;
mode = AREA;
- if (doingAlign || doingRotate || doingMove )
+ if (doingAlign || doingRotate || doingMove ) {
mode = MOVE;
- else {
- if ( (action == C_DOWN) || (action == C_RDOWN) || ((action&0xFF) == wActionExtKey) ) {
+ } else {
+ if ( (action == C_DOWN) || (action == C_RDOWN)
+ || ((action&0xFF) == wActionExtKey) ) {
mode = AREA;
- if ( ((action&0xFF) == wActionExtKey) || ( //Moves don't need to be in a box
- ( MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT)) && IsInsideABox(pos)) ) //But cursors do
- {
+ if ( ((action&0xFF) == wActionExtKey)
+ || ( //Moves don't need to be in a box
+ ( MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL|WKEY_ALT))
+ && IsInsideABox(pos)) ) { //But cursors do
mode = MOVE;
}
}
@@ -3218,7 +3190,7 @@ static STATUS_T CmdSelect(
doingRotate = FALSE;
doingAlign = FALSE;
doingDouble = FALSE;
- showMode = NOSHOW;
+// showMode = NOSHOW;
SelectArea( action, pos );
wMenuPushEnable( rotateAlignMI, FALSE );
wSetCursor(mainD.d,defaultCursor);
@@ -3231,12 +3203,12 @@ static STATUS_T CmdSelect(
if (doingDouble) {
return CallModify(action,pos);
}
- showMode = NOSHOW;
+// showMode = NOSHOW;
DYNARR_RESET(trkSeg_t,anchors_da);
coOrd p = pos;
trk = OnTrack( &p, FALSE, FALSE );
track_p ht;
- if ((selectedTrackCount==0) && (trk == NULL)) return C_CONTINUE;
+ if ((selectedTrackCount==0) && (trk == NULL)) { return C_CONTINUE; }
if (trk && !CheckTrackLayerSilent( trk ) ) {
if (GetLayerFrozen(GetTrkLayer(trk)) ) {
trk = NULL;
@@ -3248,25 +3220,25 @@ static STATUS_T CmdSelect(
if ((ht = IsInsideABox(pos)) != NULL) {
if ((MyGetKeyState()&WKEY_SHIFT)) {
CreateMoveAnchor(pos);
- showMode = SHOWMOVE;
+// showMode = SHOWMOVE;
} else if ((MyGetKeyState()&WKEY_CTRL)) {
CreateRotateAnchor(pos);
- showMode = SHOWROTATE;
+// showMode = SHOWROTATE;
} else if (!GetLayerModule(GetTrkLayer(ht))) {
if (QueryTrack( ht, Q_CAN_MODIFY_CONTROL_POINTS ) ||
- QueryTrack( ht, Q_IS_CORNU ) ||
- (QueryTrack( ht, Q_IS_DRAW ) && !QueryTrack( ht, Q_IS_TEXT))) {
+ QueryTrack( ht, Q_IS_CORNU ) ||
+ (QueryTrack( ht, Q_IS_DRAW ) && !QueryTrack( ht, Q_IS_TEXT))) {
CreateModifyAnchor(pos);
- showMode = SHOWMODIFY;
+// showMode = SHOWMODIFY;
} else {
if (QueryTrack(ht,Q_IS_ACTIVATEABLE)) {
CreateActivateAnchor(pos);
- showMode = SHOWACTIVATE;
- } else wSetCursor(mainD.d,defaultCursor);
+// showMode = SHOWACTIVATE;
+ } else { wSetCursor(mainD.d,defaultCursor); }
}
- } else wSetCursor(mainD.d,defaultCursor);
- } else wSetCursor(mainD.d,defaultCursor);
- } else wSetCursor(mainD.d,defaultCursor);
+ } else { wSetCursor(mainD.d,defaultCursor); }
+ } else { wSetCursor(mainD.d,defaultCursor); }
+ } else { wSetCursor(mainD.d,defaultCursor); }
break;
case C_DOWN:
@@ -3306,13 +3278,15 @@ static STATUS_T CmdSelect(
SelectDelete();
break;
}
- /* No Break */
+ /* No Break */
case C_RMOVE:
case C_MOVE:
if (doingDouble) {
return CallModify(action,pos);
}
- if ((action&0xFF) == wActionExtKey && ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL)) == (WKEY_SHIFT|WKEY_CTRL))) { //Both + arrow
+ if ((action&0xFF) == wActionExtKey
+ && ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL)) ==
+ (WKEY_SHIFT|WKEY_CTRL))) { //Both + arrow
doingMove = TRUE;
mode = MOVE;
}
@@ -3321,7 +3295,7 @@ static STATUS_T CmdSelect(
case MOVE:
if (SelectedTracksAreFrozen() || (selectedTrackCount==0)) {
rc = C_TERMINATE;
- tlist_da.cnt = 0;
+ DYNARR_RESET( track_p, tlist_da );
doingMove = FALSE;
doingRotate = FALSE;
} else if (doingRotate == TRUE) {
@@ -3338,8 +3312,11 @@ static STATUS_T CmdSelect(
break;
default: ;
}
- if ((action&0xFF) == wActionExtKey && ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL)) == (WKEY_SHIFT|WKEY_CTRL))) //Both
+ if ((action&0xFF) == wActionExtKey
+ && ((MyGetKeyState() & (WKEY_SHIFT|WKEY_CTRL)) ==
+ (WKEY_SHIFT|WKEY_CTRL))) { //Both
doingMove = FALSE;
+ }
return rc;
break;
case C_RUP:
@@ -3392,24 +3369,26 @@ static STATUS_T CmdSelect(
//Once doing a move or a rotate, make an early exit
if (doingMove || doingRotate) {
- 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 );
return C_CONTINUE;
}
BOOL_T AreaSelect = FALSE;
// Draw the selected area, no-op if none selected
if (mode==AREA) {
- AreaSelect = SelectArea( action, pos );
- if (AreaSelect) return C_CONTINUE;
+ AreaSelect = SelectArea( action, pos );
+ if (AreaSelect) { return C_CONTINUE; }
}
// Highlight a whole Module's worth of tracks if we are hovering over one
if (trk && GetLayerModule(GetTrkLayer(trk))) {
- if ( (selectMode == 1) && ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) != WKEY_CTRL) )
- DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,!GetTrkSelected(trk)); //Toggle
- else
+ if ( (selectMode == 1)
+ && ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) != WKEY_CTRL) ) {
+ DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,
+ !GetTrkSelected(trk)); //Toggle
+ } else {
DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,TRUE);
+ }
DrawHighlightLayer(GetTrkLayer(trk));
}
@@ -3425,66 +3404,77 @@ static STATUS_T CmdSelect(
}
} else {
//Handle the SHIFT+ which means SelectAllConnected case
- if ((MyGetKeyState() & WKEY_SHIFT) )
- SelectConnectedTracks(trk, TRUE); //Highlight all connected
+ if ((MyGetKeyState() & WKEY_SHIFT) ) {
+ SelectConnectedTracks(trk, TRUE); //Highlight all connected
+ }
//Normal case - handle track we are hovering over
else {
//Select=Add
if (selectMode == 1) {
if ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) == WKEY_CTRL) {
//Only Highlight if adding otherwise show already selected
- if (!GetTrkSelected(trk))
+ if (!GetTrkSelected(trk)) {
DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
- else
+ } else {
DrawTrack(trk,&tempD,selectedColor);
+ }
} else {
- if (GetTrkSelected(trk))
- DrawTrack(trk,&tempD,wDrawColorPreviewUnselected); //Toggle
- else
+ if (GetTrkSelected(trk)) {
+ DrawTrack(trk,&tempD,wDrawColorPreviewUnselected); //Toggle
+ } else {
DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
+ }
}
- //Select=Only
+ //Select=Only
} else {
if ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) == WKEY_CTRL) {
- if (GetTrkSelected(trk))
- DrawTrack(trk,&tempD,wDrawColorPreviewUnselected); //Toggle
- else
+ if (GetTrkSelected(trk)) {
+ DrawTrack(trk,&tempD,wDrawColorPreviewUnselected); //Toggle
+ } else {
DrawTrack(trk,&tempD,wDrawColorPreviewSelected);
+ }
} else {
//Only Highlight if adding
- if (!GetTrkSelected(trk))
+ if (!GetTrkSelected(trk)) {
DrawTrack(trk,&tempD,wDrawColorPreviewSelected );
- else
+ } else {
DrawTrack(trk,&tempD,selectedColor);
+ }
}
}
}
// Now Highlight the rest of the tracks or Module
if (GetLayerModule(GetTrkLayer(trk))) {
- if (selectMode == 1 && ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) != WKEY_CTRL) )
- DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,!GetTrkSelected(trk)); //Toggle
- else
+ if (selectMode == 1
+ && ((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) != WKEY_CTRL) ) {
+ DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,
+ !GetTrkSelected(trk)); //Toggle
+ } else {
DoModuleTracks(GetTrkLayer(trk),DrawSingleTrack,TRUE);
+ }
DrawHighlightLayer(GetTrkLayer(trk));
}
//Select=Add
if (selectMode == 1) {
- if (((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) == WKEY_CTRL))
+ if (((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) == WKEY_CTRL)) {
HighlightSelectedTracks(trk, FALSE, TRUE);
- else
- HighlightSelectedTracks(trk, TRUE, FALSE); // Highlight all others selected
- //Select=Only
+ } else {
+ HighlightSelectedTracks(trk, TRUE,
+ FALSE); // Highlight all others selected
+ }
+ //Select=Only
} else {
- if (((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) != WKEY_CTRL))
+ if (((MyGetKeyState() & (WKEY_CTRL|WKEY_SHIFT)) != WKEY_CTRL)) {
HighlightSelectedTracks(trk, FALSE, TRUE);
- else
- HighlightSelectedTracks(trk, TRUE, FALSE); // Highlight all others selected
+ } else {
+ HighlightSelectedTracks(trk, TRUE,
+ FALSE); // Highlight all others selected
+ }
}
}
//Finally add the anchors for any actions or snaps
- 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 );
return rc;
@@ -3498,8 +3488,9 @@ static STATUS_T CmdSelect(
if (doingAlign) {
rc = CmdRotate (C_DOWN, pos);
rc = CmdRotate (C_UP, pos);
- } else
+ } else {
rc = SelectTrack( pos );
+ }
doingRotate = FALSE;
doingMove = FALSE;
return rc;
@@ -3512,23 +3503,23 @@ static STATUS_T CmdSelect(
return C_CONTINUE;
}
switch (mode) {
- case AREA:
- if ((ht = OnTrack(&pos,FALSE,FALSE))!=NULL) {
- if (QueryTrack( ht, Q_CAN_MODIFY_CONTROL_POINTS ) ||
- QueryTrack( ht, Q_IS_CORNU ) ||
- (QueryTrack( ht, Q_IS_DRAW ) && !QueryTrack( ht, Q_IS_TEXT ))) {
- doingDouble = TRUE;
- CallModify(C_START,pos);
- if (doingDouble == FALSE) return C_CONTINUE;
- CallModify(C_LDOUBLE,pos);
- } else if (QueryTrack( ht, Q_IS_ACTIVATEABLE)){
- return Activate(pos);
- }
+ case AREA:
+ if ((ht = OnTrack(&pos,FALSE,FALSE))!=NULL) {
+ if (QueryTrack( ht, Q_CAN_MODIFY_CONTROL_POINTS ) ||
+ QueryTrack( ht, Q_IS_CORNU ) ||
+ (QueryTrack( ht, Q_IS_DRAW ) && !QueryTrack( ht, Q_IS_TEXT ))) {
+ doingDouble = TRUE;
+ CallModify(C_START,pos);
+ if (doingDouble == FALSE) { return C_CONTINUE; }
+ CallModify(C_LDOUBLE,pos);
+ } else if (QueryTrack( ht, Q_IS_ACTIVATEABLE)) {
+ return Activate(pos);
}
- break;
- case MOVE:
- default:
- break;
+ }
+ break;
+ case MOVE:
+ default:
+ break;
}
break;
@@ -3540,7 +3531,7 @@ static STATUS_T CmdSelect(
if (selectedTrackCount <= 0) {
wMenuPopupShow( selectPopup1M );
} else {
- track_p trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
+ track_p trk = OnTrack(&pos, FALSE, FALSE); //Note pollutes pos if turntable
SetUpMenu2(pos,trk);
wMenuPopupShow( selectPopup2M );
}
@@ -3555,7 +3546,8 @@ static STATUS_T CmdSelect(
}
if ((action>>8) == 'c') {
panCenter = pos;
- LOG( log_pan, 2, ( "PanCenter:Sel-%d %0.3f %0.3f\n", __LINE__, panCenter.x, panCenter.y ) );
+ LOG( log_pan, 2, ( "PanCenter:Sel-%d %0.3f %0.3f\n", __LINE__, panCenter.x,
+ panCenter.y ) );
PanHere(I2VP(0));
}
if ((action>>8) == 'e') {
@@ -3565,120 +3557,149 @@ static STATUS_T CmdSelect(
PanMenuEnter(I2VP('o'));
}
if ((action>>8) == '?') {
- if((moveDescTrk = OnTrack(&pos,FALSE,FALSE)) != NULL)
+ if((moveDescTrk = OnTrack(&pos,FALSE,FALSE)) != NULL) {
moveDescPos = pos;
- CallPushDescribe(I2VP(0));
+ }
+ CallPushDescribe(I2VP(0));
wSetCursor(mainD.d,defaultCursor);
moveDescTrk = NULL;
}
break;
case C_CONFIRM:
- if (doingDouble)
+ if (doingDouble) {
return CallModify(action,pos);
+ }
return C_CONTINUE;
case C_FINISH:
if (doingDouble) {
CallModify(C_OK,pos);
CallModify(C_FINISH,pos);
}
- if (doingMove) UndoEnd();
+ if (doingMove) { UndoEnd(); }
doingDouble = FALSE;
wSetCursor(mainD.d,defaultCursor);
break;
default:
- if (doingDouble) return CallModify(action, pos);
+ if (doingDouble) { return CallModify(action, pos); }
}
return C_CONTINUE;
}
-#include "bitmaps/select.xpm"
-#include "bitmaps/delete.xpm"
-#include "bitmaps/tunnel.xpm"
-#include "bitmaps/bridge.xpm"
-#include "bitmaps/move.xpm"
-#include "bitmaps/rotate.xpm"
-#include "bitmaps/reflect.xpm"
-#include "bitmaps/description.xpm"
+#include "bitmaps/select.xpm3"
+#include "bitmaps/delete.xpm3"
+#include "bitmaps/tunnel.xpm3"
+#include "bitmaps/ties.xpm3"
+#include "bitmaps/bridge.xpm3"
+#include "bitmaps/roadbed.xpm3"
+#include "bitmaps/move.xpm3"
+#include "bitmaps/rotate.xpm3"
+#include "bitmaps/reflect.xpm3"
+#include "bitmaps/description.xpm3"
static void SetMoveMode( char * line )
{
long tmp = atol( line );
moveMode = tmp & 0x0F;
- if (moveMode < 0 || moveMode > MAXMOVEMODE)
+ if (moveMode < 0 || moveMode > MAXMOVEMODE) {
moveMode = MAXMOVEMODE;
+ }
enableMoveDraw = ((tmp&0x10) == 0);
}
-static void moveDescription( void * unused ) {
- if (!moveDescTrk) return;
+static void moveDescription( void * unused )
+{
+ if (!moveDescTrk) { return; }
int hidden = GetTrkBits( moveDescTrk) &TB_HIDEDESC ;
- if (hidden)
+ if (hidden) {
ClrTrkBits( moveDescTrk, TB_HIDEDESC );
- else
+ } else {
SetTrkBits( moveDescTrk, TB_HIDEDESC );
+ }
MainRedraw();
}
EXPORT void InitCmdSelect( wMenu_p menu )
{
- selectCmdInx = AddMenuButton( menu, CmdSelect, "cmdSelect", _("Select"), wIconCreatePixMap(select_xpm[iconSize]),
- LEVEL0, IC_CANCEL|IC_POPUP|IC_LCLICK|IC_CMDMENU|IC_WANT_MOVE|IC_WANT_MODKEYS, ACCL_SELECT, NULL );
+ selectCmdInx = AddMenuButton( menu, CmdSelect, "cmdSelect", _("Select"),
+ wIconCreatePixMap(select_xpm3[iconSize]),
+ LEVEL0, IC_CANCEL|IC_POPUP|IC_LCLICK|IC_CMDMENU|IC_WANT_MOVE|IC_WANT_MODKEYS,
+ ACCL_SELECT, NULL );
}
-extern wIndex_t trainCmdInx;
-EXPORT void InitCmdSelect2( wMenu_p menu ) {
+EXPORT void InitCmdSelect2( wMenu_p menu )
+{
- endpt_bm = wDrawBitMapCreate( mainD.d, bmendpt_width, bmendpt_width, 7, 7, bmendpt_bits );
- angle_bm[0] = wDrawBitMapCreate( mainD.d, bma90_width, bma90_width, 7, 7, bma90_bits );
- angle_bm[1] = wDrawBitMapCreate( mainD.d, bma135_width, bma135_width, 7, 7, bma135_bits );
- angle_bm[2] = wDrawBitMapCreate( mainD.d, bma0_width, bma0_width, 7, 7, bma0_bits );
- angle_bm[3] = wDrawBitMapCreate( mainD.d, bma45_width, bma45_width, 7, 7, bma45_bits );
+ endpt_bm = wDrawBitMapCreate( mainD.d, bmendpt_width, bmendpt_width, 7, 7,
+ bmendpt_bits );
+ angle_bm[0] = wDrawBitMapCreate( mainD.d, bma90_width, bma90_width, 7, 7,
+ bma90_bits );
+ angle_bm[1] = wDrawBitMapCreate( mainD.d, bma135_width, bma135_width, 7, 7,
+ bma135_bits );
+ angle_bm[2] = wDrawBitMapCreate( mainD.d, bma0_width, bma0_width, 7, 7,
+ bma0_bits );
+ angle_bm[3] = wDrawBitMapCreate( mainD.d, bma45_width, bma45_width, 7, 7,
+ bma45_bits );
AddPlaybackProc( SETMOVEMODE, (playbackProc_p)SetMoveMode, NULL );
wPrefGetInteger( "draw", "movemode", &moveMode, MAXMOVEMODE );
- if (moveMode > MAXMOVEMODE || moveMode < 0)
+ if (moveMode > MAXMOVEMODE || moveMode < 0) {
moveMode = MAXMOVEMODE;
+ }
selectPopup1M = MenuRegister( "Select Mode Menu" );
wMenuPushCreate(selectPopup1M, "", _("Undo"), 0, UndoUndo, NULL);
wMenuPushCreate(selectPopup1M, "", _("Redo"), 0, UndoRedo, NULL);
wMenuSeparatorCreate( selectPopup1M );
- wMenuPushCreate(selectPopup1M, "cmdDescribeMode", GetBalloonHelpStr("cmdModifyMode"), 0, DoCommandB, I2VP(modifyCmdInx));
- wMenuPushCreate(selectPopup1M, "cmdPanMode", GetBalloonHelpStr("cmdPanMode"), 0, DoCommandB, I2VP(panCmdInx));
- wMenuPushCreate(selectPopup1M, "cmdTrainMode", GetBalloonHelpStr("cmdTrainMode"), 0, DoCommandB, I2VP(trainCmdInx));
+ wMenuPushCreate(selectPopup1M, "cmdDescribeMode",
+ GetBalloonHelpStr("cmdModifyMode"), 0, DoCommandB, I2VP(modifyCmdInx));
+ wMenuPushCreate(selectPopup1M, "cmdPanMode", GetBalloonHelpStr("cmdPanMode"), 0,
+ DoCommandB, I2VP(panCmdInx));
+ wMenuPushCreate(selectPopup1M, "cmdTrainMode",
+ GetBalloonHelpStr("cmdTrainMode"), 0, DoCommandB, I2VP(trainCmdInx));
wMenuSeparatorCreate( selectPopup1M );
wMenuPushCreate(selectPopup1M, "", _("Zoom In"), 0, DoZoomUp, I2VP(1));
- wMenuPushCreate( selectPopup1M, "", _("Zoom to extents - 'e'"), 0, DoZoomExtents, I2VP(0) );
+ wMenuPushCreate( selectPopup1M, "", _("Zoom to extents - 'e'"), 0,
+ DoZoomExtents, I2VP(0) );
wMenu_p zoomPop1 = wMenuMenuCreate(selectPopup1M, "", _("&Zoom"));
InitCmdZoom(NULL, NULL, zoomPop1, NULL);
wMenuPushCreate(selectPopup1M, "", _("Zoom Out"), 0, DoZoomDown, I2VP(1));
- wMenuPushCreate(selectPopup1M, "", _("Pan to Origin - 'o'/'0'"), 0, PanMenuEnter, I2VP( 'o'));
- wMenuPushCreate(selectPopup1M, "", _("Pan Center Here - 'c'"), 0, PanHere, I2VP( 3));
+ wMenuPushCreate(selectPopup1M, "", _("Pan to Origin - 'o'/'0'"), 0,
+ PanMenuEnter, I2VP( 'o'));
+ wMenuPushCreate(selectPopup1M, "", _("Pan Center Here - 'c'"), 0, PanHere,
+ I2VP( 3));
wMenuSeparatorCreate( selectPopup1M );
- wMenuPushCreate(selectPopup1M, "", _("Select All"), 0,(wMenuCallBack_p) SetAllTrackSelect, I2VP( 1));
- wMenuPushCreate(selectPopup1M, "",_("Select Current Layer"), 0, SelectCurrentLayer, I2VP( 0));
+ wMenuPushCreate(selectPopup1M, "", _("Select All"), 0,
+ (wMenuCallBack_p) SetAllTrackSelect, I2VP( 1));
+ wMenuPushCreate(selectPopup1M, "",_("Select Current Layer"), 0,
+ SelectCurrentLayer, I2VP( 0));
AddIndexMenu( selectPopup1M, SelectByIndex);
wMenuSeparatorCreate( selectPopup1M );
selectPopup2M = MenuRegister( "Track Selected Menu " );
- wMenuPushCreate(selectPopup2M, "", _("Undo"), 0, UndoUndo , NULL);
- wMenuPushCreate(selectPopup2M, "", _("Redo"), 0, UndoRedo , NULL);
+ wMenuPushCreate(selectPopup2M, "", _("Undo"), 0, UndoUndo, NULL);
+ wMenuPushCreate(selectPopup2M, "", _("Redo"), 0, UndoRedo, NULL);
wMenuSeparatorCreate( selectPopup2M );
wMenuPushCreate(selectPopup2M, "", _("Zoom In"), 0, DoZoomUp, I2VP( 1));
wMenuPushCreate(selectPopup2M, "", _("Zoom Out"), 0, DoZoomDown, I2VP( 1));
- wMenuPushCreate( selectPopup2M, "", _("Zoom to extents - 'e'"), 0, DoZoomExtents, I2VP( 0));
- wMenuPushCreate( selectPopup2M, "", _("Zoom to selected - 's'"), 0, DoZoomExtents, I2VP( 1));
- wMenuPushCreate(selectPopup2M, "", _("Pan Center Here - 'c'"), 0, PanHere, I2VP( 3));
+ wMenuPushCreate( selectPopup2M, "", _("Zoom to extents - 'e'"), 0,
+ DoZoomExtents, I2VP( 0));
+ wMenuPushCreate( selectPopup2M, "", _("Zoom to selected - 's'"), 0,
+ DoZoomExtents, I2VP( 1));
+ wMenuPushCreate(selectPopup2M, "", _("Pan Center Here - 'c'"), 0, PanHere,
+ I2VP( 3));
wMenuSeparatorCreate( selectPopup2M );
AddIndexMenu( selectPopup2M, SelectByIndex);
- wMenuPushCreate(selectPopup2M, "", _("Deselect All"), 0, (wMenuCallBack_p) SetAllTrackSelect, I2VP( 0));
+ wMenuPushCreate(selectPopup2M, "", _("Deselect All"), 0,
+ (wMenuCallBack_p) SetAllTrackSelect, I2VP( 0));
wMenuSeparatorCreate( selectPopup2M );
- wMenuPushCreate(selectPopup2M, "", _("Properties -'?'"), 0, CallPushDescribe, I2VP(0));
- menuPushModify = wMenuPushCreate(selectPopup2M, "", _("Modify/Activate Track"), 0, CallPushModify, I2VP(0));
+ wMenuPushCreate(selectPopup2M, "", _("Properties -'?'"), 0, CallPushDescribe,
+ I2VP(0));
+ menuPushModify = wMenuPushCreate(selectPopup2M, "", _("Modify/Activate Track"),
+ 0, CallPushModify, I2VP(0));
wMenuSeparatorCreate( selectPopup2M );
wMenuPushCreate(selectPopup2M, "", _("Cut"), 0, EditCut, I2VP( 0));
wMenuPushCreate(selectPopup2M, "", _("Copy"), 0, EditCopy, I2VP( 0));
@@ -3687,23 +3708,40 @@ EXPORT void InitCmdSelect2( wMenu_p menu ) {
AddMoveMenu( selectPopup2M, QuickMove);
selectPopup2RM = wMenuMenuCreate(selectPopup2M, "", _("Rotate..."));
AddRotateMenu( selectPopup2RM, QuickRotate );
- rotateAlignMI = wMenuPushCreate( selectPopup2RM, "", _("Align"), 0, RotateAlign, I2VP(1) );
+ rotateAlignMI = wMenuPushCreate( selectPopup2RM, "", _("Align"), 0, RotateAlign,
+ I2VP(1) );
wMenuSeparatorCreate( selectPopup2M );
- descriptionMI = wMenuPushCreate(selectPopup2M, "cmdMoveLabel", _("Show/Hide Description"), 0, moveDescription, I2VP(0));
+ descriptionMI = wMenuPushCreate(selectPopup2M, "cmdMoveLabel",
+ _("Show/Hide Description"), 0, moveDescription, I2VP(0));
wMenuSeparatorCreate( selectPopup2M );
- hideMI = wMenuPushCreate(selectPopup2M, "", _("Hide/NoHide"), 0, SelectTunnel, I2VP( 0));
- bridgeMI = wMenuPushCreate(selectPopup2M, "", _("Bridge/NoBridge"), 0, SelectBridge, I2VP( 0));
- tiesMI = wMenuPushCreate(selectPopup2M, "", _("NoTies/Ties"), 0, SelectTies, I2VP( 0));
+ tiesMI = wMenuPushCreate(selectPopup2M, "", _("Ties/NoTies"), 0, SelectTies,
+ I2VP( 0));
+ hideMI = wMenuPushCreate(selectPopup2M, "", _("Hide/NoHide"), 0, SelectTunnel,
+ I2VP( 0));
+ bridgeMI = wMenuPushCreate(selectPopup2M, "", _("Bridge/NoBridge"), 0,
+ SelectBridge, I2VP( 0));
+ roadbedMI = wMenuPushCreate(selectPopup2M, "", _("Roadbed/NoRoadbed"), 0,
+ SelectRoadbed, I2VP( 0));
+ tiesMI = wMenuPushCreate(selectPopup2M, "", _("NoTies/Ties"), 0, SelectTies,
+ I2VP( 0));
selectPopup2TM = wMenuMenuCreate(selectPopup2M, "", _("Thickness..."));
- wMenuPushCreate( selectPopup2TM, "", _("Thin Tracks"), 0, SelectTrackWidth, I2VP(0 ));
- wMenuPushCreate( selectPopup2TM, "", _("Medium Tracks"), 0, SelectTrackWidth, I2VP(2 ));
- wMenuPushCreate( selectPopup2TM, "", _("Thick Tracks"), 0, SelectTrackWidth, I2VP(3 ));
+ wMenuPushCreate( selectPopup2TM, "", _("Thin Tracks"), 0, SelectTrackWidth,
+ I2VP(0 ));
+ wMenuPushCreate( selectPopup2TM, "", _("Medium Tracks"), 0, SelectTrackWidth,
+ I2VP(2 ));
+ wMenuPushCreate( selectPopup2TM, "", _("Thick Tracks"), 0, SelectTrackWidth,
+ I2VP(3 ));
selectPopup2TYM = wMenuMenuCreate( selectPopup2M, "", _("LineType...") );
- wMenuPushCreate( selectPopup2TYM, "", _("Solid Line"), 0, SelectLineType, I2VP(0 ));
- wMenuPushCreate( selectPopup2TYM, "", _("Dashed Line"), 0, SelectLineType, I2VP(1 ));
- wMenuPushCreate( selectPopup2TYM, "", _("Dotted Line"), 0, SelectLineType, I2VP(2 ));
- wMenuPushCreate( selectPopup2TYM, "", _("Dash-Dotted Line"), 0, SelectLineType, I2VP(3 ));
- wMenuPushCreate( selectPopup2TYM, "", _("Dash-Dot-Dotted Line"), 0, SelectLineType, I2VP(4 ));
+ wMenuPushCreate( selectPopup2TYM, "", _("Solid Line"), 0, SelectLineType,
+ I2VP(0 ));
+ wMenuPushCreate( selectPopup2TYM, "", _("Dashed Line"), 0, SelectLineType,
+ I2VP(1 ));
+ wMenuPushCreate( selectPopup2TYM, "", _("Dotted Line"), 0, SelectLineType,
+ I2VP(2 ));
+ wMenuPushCreate( selectPopup2TYM, "", _("Dash-Dotted Line"), 0, SelectLineType,
+ I2VP(3 ));
+ wMenuPushCreate( selectPopup2TYM, "", _("Dash-Dot-Dotted Line"), 0,
+ SelectLineType, I2VP(4 ));
wMenuSeparatorCreate( selectPopup2M );
wMenuPushCreate(selectPopup2M, "", _("Move To Front"), 0, SelectAbove,I2VP( 0));
wMenuPushCreate(selectPopup2M, "", _("Move To Back"), 0, SelectBelow, I2VP( 0));
@@ -3711,8 +3749,6 @@ EXPORT void InitCmdSelect2( wMenu_p menu ) {
wMenuPushCreate(selectPopup2M, "", _("Group"), 0, DoGroup, I2VP( 0));
wMenuPushCreate(selectPopup2M, "", _("UnGroup"), 0, DoUngroup, I2VP( 0));
wMenuSeparatorCreate( selectPopup2M );
-
- ParamRegister( &rescalePG );
}
@@ -3720,38 +3756,58 @@ EXPORT void InitCmdSelect2( wMenu_p menu ) {
EXPORT void InitCmdDelete( void )
{
wIcon_p icon;
- icon = wIconCreatePixMap( delete_xpm[iconSize] );
- AddToolbarButton( "cmdDelete", icon, IC_SELECTED, (wButtonCallBack_p)SelectDelete, 0 );
+ icon = wIconCreatePixMap( delete_xpm3[iconSize] );
+ AddToolbarButton( "cmdDelete", icon, IC_SELECTED,
+ (wButtonCallBack_p)SelectDelete, 0 );
+}
+
+EXPORT void InitCmdTies( void )
+{
+ wIcon_p icon;
+ icon = wIconCreatePixMap( ties_xpm3[iconSize] );
+ AddToolbarButton( "cmdTies", icon, IC_SELECTED|IC_POPUP, SelectTies, NULL );
}
EXPORT void InitCmdTunnel( void )
{
wIcon_p icon;
- icon = wIconCreatePixMap( tunnel_xpm[iconSize] );
+ icon = wIconCreatePixMap( tunnel_xpm3[iconSize] );
AddToolbarButton( "cmdTunnel", icon, IC_SELECTED|IC_POPUP, SelectTunnel, NULL );
}
EXPORT void InitCmdBridge( void)
{
wIcon_p icon;
- icon = wIconCreatePixMap( bridge_xpm[iconSize] );
+ icon = wIconCreatePixMap( bridge_xpm3[iconSize] );
AddToolbarButton( "cmdBridge", icon, IC_SELECTED|IC_POPUP, SelectBridge, NULL );
}
+EXPORT void InitCmdRoadbed( void)
+{
+ wIcon_p icon;
+ icon = wIconCreatePixMap( roadbed_xpm3[iconSize] );
+ AddToolbarButton( "cmdRoadbed", icon, IC_SELECTED|IC_POPUP, SelectRoadbed,
+ NULL );
+}
+
EXPORT void InitCmdMoveDescription( wMenu_p menu )
{
- AddMenuButton( menu, CmdMoveDescription, "cmdMoveLabel", _("Move Description"), wIconCreatePixMap(description_xpm[iconSize]),
- LEVEL0, IC_STICKY|IC_POPUP3|IC_CMDMENU|IC_WANT_MOVE, ACCL_MOVEDESC, I2VP( 0 ));
+ AddMenuButton( menu, CmdMoveDescription, "cmdMoveLabel", _("Move Description"),
+ wIconCreatePixMap(description_xpm3[iconSize]),
+ LEVEL0, IC_STICKY|IC_POPUP3|IC_CMDMENU|IC_WANT_MOVE, ACCL_MOVEDESC, I2VP( 0 ));
}
EXPORT void InitCmdMove( wMenu_p menu )
{
- moveCmdInx = AddMenuButton( menu, CmdMove, "cmdMove", _("Move"), wIconCreatePixMap(move_xpm[iconSize]),
- LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU|IC_WANT_MOVE, ACCL_MOVE, NULL );
- rotateCmdInx = AddMenuButton( menu, CmdRotate, "cmdRotate", _("Rotate"), wIconCreatePixMap(rotate_xpm[iconSize]),
- LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU|IC_WANT_MOVE, ACCL_ROTATE, NULL );
- flipCmdInx = AddMenuButton( menu, CmdFlip, "cmdFlip", _("Flip"), wIconCreatePixMap(reflect_xpm[iconSize]),
- LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU, ACCL_FLIP, NULL );
+ moveCmdInx = AddMenuButton( menu, CmdMove, "cmdMove", _("Move"),
+ wIconCreatePixMap(move_xpm3[iconSize]),
+ LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU|IC_WANT_MOVE, ACCL_MOVE, NULL );
+ rotateCmdInx = AddMenuButton( menu, CmdRotate, "cmdRotate", _("Rotate"),
+ wIconCreatePixMap(rotate_xpm3[iconSize]),
+ LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU|IC_WANT_MOVE, ACCL_ROTATE, NULL );
+ flipCmdInx = AddMenuButton( menu, CmdFlip, "cmdFlip", _("Flip"),
+ wIconCreatePixMap(reflect_xpm3[iconSize]),
+ LEVEL0, IC_STICKY|IC_SELECTED|IC_CMDMENU, ACCL_FLIP, NULL );
}