summaryrefslogtreecommitdiff
path: root/app/bin/cstraigh.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/bin/cstraigh.c')
-rw-r--r--app/bin/cstraigh.c123
1 files changed, 69 insertions, 54 deletions
diff --git a/app/bin/cstraigh.c b/app/bin/cstraigh.c
index 464f16e..b61d9b8 100644
--- a/app/bin/cstraigh.c
+++ b/app/bin/cstraigh.c
@@ -17,34 +17,33 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <math.h>
#include "cstraigh.h"
+#include "cselect.h"
#include "cundo.h"
#include "fileio.h"
-#include "i18n.h"
-#include "messages.h"
#include "param.h"
#include "track.h"
-#include "utility.h"
#include "layout.h"
+#include "common-ui.h"
/*
* STATE INFO
*/
static struct {
- coOrd pos0, pos1;
- track_p trk;
- EPINX_T ep;
- BOOL_T down;
- } Dl;
+ coOrd pos0, pos1;
+ track_p trk;
+ EPINX_T ep;
+ BOOL_T down;
+} Dl;
static dynArr_t anchors_da;
#define anchors(N) DYNARR_N(trkSeg_t,anchors_da,N)
-static void CreateEndAnchor(coOrd p, wBool_t lock) {
+static void CreateEndAnchor(coOrd p, wBool_t lock)
+{
DIST_T d = tempD.scale*0.15;
DYNARR_APPEND(trkSeg_t,anchors_da,1);
@@ -55,7 +54,7 @@ static void CreateEndAnchor(coOrd p, wBool_t lock) {
anchors(i).u.c.radius = d/2;
anchors(i).u.c.a0 = 0.0;
anchors(i).u.c.a1 = 360.0;
- anchors(i).width = 0;
+ anchors(i).lineWidth = 0;
}
@@ -74,7 +73,9 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
Dl.trk = NULL;
Dl.ep=-1;
Dl.down = FALSE;
- InfoMessage( _("Place 1st endpoint of straight track, snap to unconnected endpoint") );
+ InfoMessage(
+ _("Place 1st endpoint of straight track, snap to unconnected endpoint") );
+ SetAllTrackSelect( FALSE );
return C_CONTINUE;
case C_DOWN:
@@ -84,80 +85,90 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
Dl.trk = NULL;
if (((MyGetKeyState() & WKEY_ALT) == 0) == magneticSnap) {
if ((t = OnTrack(&p, FALSE, TRUE)) != NULL) {
- EPINX_T ep = PickUnconnectedEndPointSilent(p, t);
- if (ep != -1) {
- if (GetTrkGauge(t) != GetScaleTrackGauge(GetLayoutCurScale())) {
- wBeep();
- InfoMessage(_("Track is different gauge"));
- return C_CONTINUE;
- }
- Dl.trk = t;
- Dl.ep = ep;
- pos = GetTrkEndPos(t, ep);
- found = TRUE;
- }
+ EPINX_T ep = PickUnconnectedEndPointSilent(p, t);
+ if (ep != -1) {
+ if (GetTrkGauge(t) != GetScaleTrackGauge(GetLayoutCurScale())) {
+ wBeep();
+ InfoMessage(_("Track is different gauge"));
+ return C_CONTINUE;
+ }
+ Dl.trk = t;
+ Dl.ep = ep;
+ pos = GetTrkEndPos(t, ep);
+ found = TRUE;
+ }
}
}
- Dl.down = TRUE;
- if (!found) SnapPos( &pos );
+ Dl.down = TRUE;
+ if (!found) { SnapPos( &pos ); }
Dl.pos0 = pos;
InfoMessage( _("Drag to place 2nd end point") );
DYNARR_SET( trkSeg_t, tempSegs_da, 1 );
tempSegs(0).color = wDrawColorBlack;
- tempSegs(0).width = 0;
- tempSegs_da.cnt = 0;
+ tempSegs(0).lineWidth = 0;
tempSegs(0).type = SEG_STRTRK;
tempSegs(0).u.l.pos[0] = pos;
+ DYNARR_RESET( trkSeg_t, tempSegs_da );
return C_CONTINUE;
case C_MOVE:
case wActionMove:
DYNARR_RESET(trkSeg_t,anchors_da);
+ found = FALSE;
if (!Dl.down) {
if (((MyGetKeyState() & WKEY_ALT) == 0) == magneticSnap) {
p = pos;
if ((t = OnTrack(&p, FALSE, TRUE)) != NULL) {
if (GetTrkGauge(t) == GetScaleTrackGauge(GetLayoutCurScale())) {
- EPINX_T ep = PickUnconnectedEndPointSilent(pos, t);
- if (ep != -1) {
- if (GetTrkGauge(t) == GetScaleTrackGauge(GetLayoutCurScale()))
- CreateEndAnchor(GetTrkEndPos(t,ep),FALSE);
- }
+ EPINX_T ep = PickUnconnectedEndPointSilent(pos, t);
+ if (ep != -1) {
+ if (GetTrkGauge(t) == GetScaleTrackGauge(GetLayoutCurScale())) {
+ CreateEndAnchor(GetTrkEndPos(t,ep),FALSE);
+ found = TRUE;
+ }
+ }
}
}
}
+ if (!found && SnapPos( &pos )) {
+ CreateEndAnchor(pos,FALSE);
+ found = TRUE;
+ }
return C_CONTINUE;
}
ANGLE_T angle, angle2;
if (Dl.trk && !(MyGetKeyState() & WKEY_SHIFT)) {
angle = NormalizeAngle(GetTrkEndAngle( Dl.trk, Dl.ep));
angle2 = NormalizeAngle(FindAngle(pos, Dl.pos0)-angle);
- if (angle2 > 90.0 && angle2 < 270.0)
+ if (angle2 > 90.0 && angle2 < 270.0) {
Translate( &pos, Dl.pos0, angle, FindDistance( Dl.pos0, pos ) );
- else pos = Dl.pos0;
- } else SnapPos( &pos );
-
+ } else { pos = Dl.pos0; }
+ } else if (SnapPos( &pos )) {
+ CreateEndAnchor(pos,FALSE);
+ found = TRUE;
+ }
+
InfoMessage( _("Straight Track Length=%s Angle=%0.3f"),
- FormatDistance(FindDistance( Dl.pos0, pos )),
- PutAngle(FindAngle( Dl.pos0, pos )) );
+ FormatDistance(FindDistance( Dl.pos0, pos )),
+ PutAngle(FindAngle( Dl.pos0, pos )) );
+ DYNARR_SET( trkSeg_t, tempSegs_da, 1 );
tempSegs(0).u.l.pos[1] = pos;
- tempSegs_da.cnt = 1;
return C_CONTINUE;
case C_UP:
DYNARR_RESET(trkSeg_t,anchors_da);
- if (!Dl.down) return C_CONTINUE;
- tempSegs_da.cnt = 0;
+ if (!Dl.down) { return C_CONTINUE; }
+ DYNARR_RESET( trkSeg_t, tempSegs_da );
if (Dl.trk && !(MyGetKeyState() & WKEY_SHIFT)) {
angle = NormalizeAngle(GetTrkEndAngle( Dl.trk, Dl.ep));
angle2 = NormalizeAngle(FindAngle(pos, Dl.pos0)-angle);
- if (angle2 > 90.0 && angle2 < 270.0)
+ if (angle2 > 90.0 && angle2 < 270.0) {
Translate( &pos, Dl.pos0, angle, FindDistance( Dl.pos0, pos ));
- else pos = Dl.pos0;
- } else SnapPos( &pos );
+ } else { pos = Dl.pos0; }
+ } else { SnapPos( &pos ); }
if ((dist=FindDistance( Dl.pos0, pos )) <= minLength) {
- ErrorMessage( MSG_TRK_TOO_SHORT, "Straight ", PutDim(fabs(minLength-dist)) );
- return C_TERMINATE;
+ ErrorMessage( MSG_TRK_TOO_SHORT, "Straight ", PutDim(fabs(minLength-dist)) );
+ return C_TERMINATE;
}
UndoStart( _("Create Straight Track"), "newStraight" );
t = NewStraightTrack( Dl.pos0, pos );
@@ -169,10 +180,12 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
return C_TERMINATE;
case C_REDRAW:
- if (anchors_da.cnt)
- DrawSegs( &tempD, zero, 0.0, &anchors(0), anchors_da.cnt, trackGauge, wDrawColorBlack );
- if (Dl.down)
- DrawSegs( &tempD, zero, 0.0, &tempSegs(0), tempSegs_da.cnt, trackGauge, wDrawColorBlack );
+ DrawSegsDA( &tempD, NULL, zero, 0.0, &anchors_da, trackGauge, wDrawColorBlack,
+ 0 );
+ if (Dl.down) {
+ DrawSegsDA( &tempD, NULL, zero, 0.0, &tempSegs_da, trackGauge, wDrawColorBlack,
+ 0 );
+ }
return C_CONTINUE;
case C_CANCEL:
Dl.down = FALSE;
@@ -184,9 +197,11 @@ static STATUS_T CmdStraight( wAction_t action, coOrd pos )
}
-#include "bitmaps/straight.xpm"
+#include "bitmaps/straight.xpm3"
void InitCmdStraight( wMenu_p menu )
{
- AddMenuButton( menu, CmdStraight, "cmdStraight", _("Straight Track"), wIconCreatePixMap(straight_xpm), LEVEL0_50, IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ACCL_STRAIGHT, NULL );
+ AddMenuButton( menu, CmdStraight, "cmdStraight", _("Straight Track"),
+ wIconCreatePixMap(straight_xpm3[iconSize]), LEVEL0_50,
+ IC_STICKY|IC_POPUP2|IC_WANT_MOVE, ACCL_STRAIGHT, NULL );
}