summaryrefslogtreecommitdiff
path: root/app/bin/cblock.c
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2024-11-14 19:35:45 +0100
committerJörg Frings-Fürst <debian@jff-webhosting.net>2024-11-14 19:35:45 +0100
commitdf5520aa2dae5b3ce7abf8733dcdd152898af163 (patch)
tree00d3047bfb14f682bfb5a21010c731ed649bfed7 /app/bin/cblock.c
parentdf247efec654e512242e4f4f1b0212034f9e01fe (diff)
parentec3c0f6f6e7153fa797dc57a0e95779cbc63a23b (diff)
Merge branch 'release/debian/1_5.3.0GA-1'debian/1_5.3.0GA-1
Diffstat (limited to 'app/bin/cblock.c')
-rw-r--r--app/bin/cblock.c683
1 files changed, 356 insertions, 327 deletions
diff --git a/app/bin/cblock.c b/app/bin/cblock.c
index b395306..bc23e14 100644
--- a/app/bin/cblock.c
+++ b/app/bin/cblock.c
@@ -40,57 +40,55 @@
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* T_BLOCK
* $Header: /home/dmarkle/xtrkcad-fork-cvs/xtrkcad/app/bin/cblock.c,v 1.5 2009-11-23 19:46:16 rheller Exp $
*/
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
+#include "common.h"
#include "compound.h"
#include "cundo.h"
#include "custom.h"
#include "fileio.h"
-#include "i18n.h"
-#include "messages.h"
#include "param.h"
#include "track.h"
-#include "trackx.h"
-#include "utility.h"
+#include "trkendpt.h"
+#include "common-ui.h"
-#ifdef WINDOWS
+#ifdef UTFCONVERT
#include "include/utf8convert.h"
-#endif // WINDOWS
+#endif // UTFCONVERT
EXPORT TRKTYP_T T_BLOCK = -1;
static int log_block = 0;
static void NoDrawLine(drawCmd_p d, coOrd p0, coOrd p1, wDrawWidth width,
- wDrawColor color ) {}
+ wDrawColor color ) {}
static void NoDrawArc(drawCmd_p d, coOrd p, DIST_T r, ANGLE_T angle0,
- ANGLE_T angle1, BOOL_T drawCenter, wDrawWidth width,
- wDrawColor color ) {}
+ ANGLE_T angle1, BOOL_T drawCenter, wDrawWidth width,
+ wDrawColor color ) {}
static void NoDrawString( drawCmd_p d, coOrd p, ANGLE_T a, char * s,
- wFont_p fp, FONTSIZE_T fontSize, wDrawColor color ) {}
+ wFont_p fp, FONTSIZE_T fontSize, wDrawColor color ) {}
static void NoDrawBitMap( drawCmd_p d, coOrd p, wDrawBitMap_p bm,
- wDrawColor color) {}
-static void NoDrawFillPoly( drawCmd_p d, int cnt, coOrd * pts, int * types,
- wDrawColor color, wDrawWidth width, int fill, int open) {}
+ wDrawColor color) {}
+static void NoDrawPoly( drawCmd_p d, int cnt, coOrd * pts, int * types,
+ wDrawColor color, wDrawWidth width, drawFill_e eFillOpt ) {}
static void NoDrawFillCircle( drawCmd_p d, coOrd p, DIST_T r,
- wDrawColor color ) {}
+ wDrawColor color ) {}
+static void NoDrawRectangle( drawCmd_p d, coOrd orig, coOrd size,
+ wDrawColor color, drawFill_e eFill ) {}
static drawFuncs_t noDrawFuncs = {
- 0,
NoDrawLine,
NoDrawArc,
NoDrawString,
NoDrawBitMap,
- NoDrawFillPoly,
- NoDrawFillCircle };
+ NoDrawPoly,
+ NoDrawFillCircle,
+ NoDrawRectangle
+};
static drawCmd_t blockD = {
NULL,
@@ -99,7 +97,8 @@ static drawCmd_t blockD = {
1.0,
0.0,
{0.0,0.0}, {0.0,0.0},
- Pix2CoOrd, CoOrd2Pix };
+ Pix2CoOrd, CoOrd2Pix
+};
static char blockName[STR_SHORT_SIZE];
static char blockScript[STR_LONG_SIZE];
@@ -108,10 +107,10 @@ static track_p first_block;
static track_p last_block;
static paramData_t blockPLs[] = {
-/*0*/ { PD_STRING, blockName, "name", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)200, N_("Name"), 0, 0, sizeof( blockName )},
-/*1*/ { PD_STRING, blockScript, "script", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Script"), 0, 0, sizeof( blockScript)}
+ /*0*/ { PD_STRING, blockName, "name", PDO_NOPREF | PDO_NOTBLANK, I2VP(200), N_("Name"), 0, 0, sizeof( blockName )},
+ /*1*/ { PD_STRING, blockScript, "script", PDO_NOPREF, I2VP(350), N_("Script"), 0, 0, sizeof( blockScript)}
};
-static paramGroup_t blockPG = { "block", 0, blockPLs, sizeof blockPLs/sizeof blockPLs[0] };
+static paramGroup_t blockPG = { "block", 0, blockPLs, COUNT( blockPLs ) };
static wWin_p blockW;
static char blockEditName[STR_SHORT_SIZE];
@@ -120,36 +119,38 @@ static char blockEditSegs[STR_LONG_SIZE];
static track_p blockEditTrack;
static paramData_t blockEditPLs[] = {
-/*0*/ { PD_STRING, blockEditName, "name", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)200, N_("Name"), 0, 0, sizeof(blockEditName)},
-/*1*/ { PD_STRING, blockEditScript, "script", PDO_NOPREF | PDO_STRINGLIMITLENGTH, (void*)350, N_("Script"), 0, 0, sizeof(blockEditScript)},
-/*2*/ { PD_STRING, blockEditSegs, "segments", PDO_NOPREF, (void*)350, N_("Segments"), BO_READONLY },
+ /*0*/ { PD_STRING, blockEditName, "name", PDO_NOPREF | PDO_NOTBLANK, I2VP(200), N_("Name"), 0, 0, sizeof(blockEditName)},
+ /*1*/ { PD_STRING, blockEditScript, "script", PDO_NOPREF, I2VP(350), N_("Script"), 0, 0, sizeof(blockEditScript)},
+ /*2*/ { PD_STRING, blockEditSegs, "segments", PDO_NOPREF, I2VP(350), N_("Segments"), BO_READONLY, 0, sizeof(blockEditSegs) },
};
-static paramGroup_t blockEditPG = { "block", 0, blockEditPLs, sizeof blockEditPLs/sizeof blockEditPLs[0] };
+static paramGroup_t blockEditPG = { "block", 0, blockEditPLs, COUNT( blockEditPLs ) };
static wWin_p blockEditW;
typedef struct btrackinfo_t {
- track_p t;
- TRKINX_T i;
+ track_p t;
+ TRKINX_T i;
} btrackinfo_t, *btrackinfo_p;
static dynArr_t blockTrk_da;
+
#define blockTrk(N) DYNARR_N( btrackinfo_t , blockTrk_da, N )
#define tracklist(N) (&(xx->trackList))[N]
typedef struct blockData_t {
- char * name;
- char * script;
- BOOL_T IsHilite;
- track_p next_block;
- wIndex_t numTracks;
- btrackinfo_t trackList;
+ extraDataBase_t base;
+ char * name;
+ char * script;
+ BOOL_T IsHilite;
+ track_p next_block;
+ wIndex_t numTracks;
+ btrackinfo_t trackList;
} blockData_t, *blockData_p;
static blockData_p GetblockData ( track_p trk )
{
- return (blockData_p) GetTrkExtraData(trk);
+ return GET_EXTRA_DATA( trk, T_BLOCK, blockData_t );
}
static void DrawBlock (track_p t, drawCmd_p d, wDrawColor color )
@@ -165,14 +166,16 @@ static struct {
typedef enum { NM, SC, LN, E0, E1 } blockDesc_e;
static descData_t blockDesc[] = {
-/*NM*/ { DESC_STRING, N_("Name"), &blockData.name, sizeof(blockData.name) },
-/*SC*/ { DESC_STRING, N_("Script"), &blockData.script, sizeof(blockData.script) },
-/*LN*/ { DESC_DIM, N_("Length"), &blockData.length },
-/*E0*/ { DESC_POS, N_("End Pt 1: X,Y"), &blockData.endPt[0] },
-/*E1*/ { DESC_POS, N_("End Pt 2: X,Y"), &blockData.endPt[1] },
- { DESC_NULL } };
-
-static void UpdateBlock (track_p trk, int inx, descData_p descUpd, BOOL_T needUndoStart )
+ /*NM*/ { DESC_STRING, N_("Name"), &blockData.name, sizeof(blockData.name) },
+ /*SC*/ { DESC_STRING, N_("Script"), &blockData.script, sizeof(blockData.script) },
+ /*LN*/ { DESC_DIM, N_("Length"), &blockData.length },
+ /*E0*/ { DESC_POS, N_("End Pt 1: X,Y"), &blockData.endPt[0] },
+ /*E1*/ { DESC_POS, N_("End Pt 2: X,Y"), &blockData.endPt[1] },
+ { DESC_NULL }
+};
+
+static void UpdateBlock (track_p trk, int inx, descData_p descUpd,
+ BOOL_T needUndoStart )
{
blockData_p xx = GetblockData(trk);
const char * thename, *thescript;
@@ -193,7 +196,7 @@ static void UpdateBlock (track_p trk, int inx, descData_p descUpd, BOOL_T needUn
strncpy(newName, thename, max_str - 1);
newName[max_str-1] = '\0';
NoticeMessage2(0, MSG_ENTERED_STRING_TRUNCATED, _("Ok"), NULL, max_str-1);
- } else newName = MyStrdup(thename);
+ } else { newName = MyStrdup(thename); }
}
thescript = wStringGetValue( (wString_p)blockDesc[SC].control0 );
@@ -205,18 +208,19 @@ static void UpdateBlock (track_p trk, int inx, descData_p descUpd, BOOL_T needUn
strncpy(newScript, thescript, max_str - 1);
newScript[max_str-1] = '\0';
NoticeMessage2(0, MSG_ENTERED_STRING_TRUNCATED, _("Ok"), NULL, max_str-1);
- } else newScript = MyStrdup(thescript);
+ } else { newScript = MyStrdup(thescript); }
}
- if ( ! changed ) return;
- if ( needUndoStart )
+ if ( ! changed ) { return; }
+ if ( needUndoStart ) {
UndoStart( _("Change block"), "Change block" );
+ }
UndoModify( trk );
if (nChanged) {
- if (xx->name) MyFree(xx->name);
+ if (xx->name) { MyFree(xx->name); }
xx->name = newName;
}
if (sChanged) {
- if (xx->script) MyFree(xx->script);
+ if (xx->script) { MyFree(xx->script); }
xx->script = newScript;
}
return;
@@ -233,7 +237,7 @@ static DIST_T DistanceBlock (track_p t, coOrd * p )
coOrd best_pos = pos;
for (iTrk = 0; iTrk < xx->numTracks; iTrk++) {
pos = *p;
- if ((&(xx->trackList))[iTrk].t == NULL) continue;
+ if ((&(xx->trackList))[iTrk].t == NULL) { continue; }
current = GetTrkDistance ((&(xx->trackList))[iTrk].t, &pos);
if (current < closest) {
closest = current;
@@ -248,13 +252,14 @@ static void DescribeBlock (track_p trk, char * str, CSIZE_T len )
{
blockData_p xx = GetblockData(trk);
wIndex_t tcount = 0;
- track_p lastTrk = NULL;
+// track_p lastTrk = NULL;
long listLabelsOption = listLabels;
LOG( log_block, 1, ("*** DescribeBlock(): trk is T%d\n",GetTrkIndex(trk)))
FormatCompoundTitle( listLabelsOption, xx->name );
- if (message[0] == '\0')
+ if (message[0] == '\0') {
FormatCompoundTitle( listLabelsOption|LABEL_DESCR, xx->name );
+ }
strcpy( str, _(GetTrkTypeName( trk )) );
str++;
while (*str) {
@@ -262,7 +267,7 @@ static void DescribeBlock (track_p trk, char * str, CSIZE_T len )
str++;
}
sprintf( str, _("(%d): Layer=%u %s"),
- GetTrkIndex(trk), GetTrkLayer(trk)+1, message );
+ GetTrkIndex(trk), GetTrkLayer(trk)+1, message );
blockData.name[0] = '\0';
strncat(blockData.name,xx->name,STR_SHORT_SIZE-1);
blockData.script[0] = '\0';
@@ -270,21 +275,21 @@ static void DescribeBlock (track_p trk, char * str, CSIZE_T len )
blockData.length = 0;
BOOL_T first = TRUE;
for (tcount = 0; tcount < xx->numTracks; tcount++) {
- if ((&(xx->trackList))[tcount].t == NULL) continue;
- if (first) {
- blockData.endPt[0] = GetTrkEndPos((&(xx->trackList))[tcount].t,0);
- first = FALSE;
- }
- blockData.endPt[1] = GetTrkEndPos((&(xx->trackList))[tcount].t,1);
- blockData.length += GetTrkLength((&(xx->trackList))[tcount].t,0,1);
- tcount++;
- break;
+ if ((&(xx->trackList))[tcount].t == NULL) { continue; }
+ if (first) {
+ blockData.endPt[0] = GetTrkEndPos((&(xx->trackList))[tcount].t,0);
+ first = FALSE;
+ }
+ blockData.endPt[1] = GetTrkEndPos((&(xx->trackList))[tcount].t,1);
+ blockData.length += GetTrkLength((&(xx->trackList))[tcount].t,0,1);
+ tcount++;
+ break;
}
blockDesc[E0].mode =
- blockDesc[E1].mode =
- blockDesc[LN].mode = DESC_RO;
+ blockDesc[E1].mode =
+ blockDesc[LN].mode = DESC_RO;
blockDesc[NM].mode =
- blockDesc[SC].mode = DESC_NOREDRAW;
+ blockDesc[SC].mode = DESC_NOREDRAW;
DoDescribe(_("Block"), trk, blockDesc, UpdateBlock );
}
@@ -299,25 +304,26 @@ static int blockDebug (track_p trk)
LOG( log_block, 1, ("*** blockDebug(): script = \"%s\"\n",xx->script))
LOG( log_block, 1, ("*** blockDebug(): numTracks = %d\n",xx->numTracks))
for (iTrack = 0; iTrack < xx->numTracks; iTrack++) {
- if ((&(xx->trackList))[iTrack].t == NULL) continue;
- LOG( log_block, 1, ("*** blockDebug(): trackList[%d] = T%d, ",iTrack,GetTrkIndex((&(xx->trackList))[iTrack].t)))
+ if ((&(xx->trackList))[iTrack].t == NULL) { continue; }
+ LOG( log_block, 1, ("*** blockDebug(): trackList[%d] = T%d, ",iTrack,
+ GetTrkIndex((&(xx->trackList))[iTrack].t)))
LOG( log_block, 1, ("%s\n",GetTrkTypeName((&(xx->trackList))[iTrack].t)))
}
return(0);
}
-static BOOL_T blockCheckContigiousPath()
+static BOOL_T blockCheckContiguousPath()
{
EPINX_T ep, epCnt, epN;
int inx;
track_p trk, trk1;
DIST_T dist;
ANGLE_T angle;
- /*int pathElemStart = 0;*/
+ /*int pathElemStart = 0;*/
coOrd endPtOrig = zero;
BOOL_T IsConnectedP;
trkEndPt_p endPtP;
- DYNARR_RESET( trkEndPt_t, tempEndPts_da );
+ TempEndPtsReset();
for ( inx=0; inx<blockTrk_da.cnt; inx++ ) {
trk = blockTrk(inx).t;
@@ -327,51 +333,54 @@ static BOOL_T blockCheckContigiousPath()
trk1 = GetTrkEndTrk(trk,ep);
if ( trk1 == NULL || !GetTrkSelected(trk1) ) {
/* boundary EP */
- for ( epN=0; epN<tempEndPts_da.cnt; epN++ ) {
- dist = FindDistance( GetTrkEndPos(trk,ep), tempEndPts(epN).pos );
- angle = NormalizeAngle( GetTrkEndAngle(trk,ep) - tempEndPts(epN).angle + connectAngle/2.0 );
- if ( dist < connectDistance && angle < connectAngle )
+ for ( epN=0; epN<TempEndPtsCount(); epN++ ) {
+ endPtP = TempEndPt(epN);
+ dist = FindDistance( GetTrkEndPos(trk,ep), GetEndPtPos(endPtP) );
+ angle = NormalizeAngle( GetTrkEndAngle(trk,
+ ep) - GetEndPtAngle(endPtP) + connectAngle/2.0 );
+ if ( dist < connectDistance && angle < connectAngle ) {
break;
+ }
}
- if ( epN>=tempEndPts_da.cnt ) {
- DYNARR_APPEND( trkEndPt_t, tempEndPts_da, 10 );
- endPtP = &tempEndPts(tempEndPts_da.cnt-1);
- memset( endPtP, 0, sizeof *endPtP );
- endPtP->pos = GetTrkEndPos(trk,ep);
- endPtP->angle = GetTrkEndAngle(trk,ep);
+ if ( epN>=TempEndPtsCount() ) {
+ endPtP = TempEndPtsAppend();
+ SetEndPt( endPtP, GetTrkEndPos(trk,ep), GetTrkEndAngle(trk,ep) );
/*endPtP->track = trk1;*/
/* These End Points are dummies --
we don't want DeleteTrack to look at
them. */
- endPtP->track = NULL;
- endPtP->index = (trk1?GetEndPtConnectedToMe(trk1,trk):-1);
- endPtOrig.x += endPtP->pos.x;
- endPtOrig.y += endPtP->pos.y;
+ SetEndPtTrack( endPtP, NULL );
+ // TODO-EPP What is this for?
+ SetEndPtEndPt( endPtP, (trk1?GetEndPtConnectedToMe(trk1,trk):-1) );
+ endPtOrig.x += GetEndPtPos(endPtP).x;
+ endPtOrig.y += GetEndPtPos(endPtP).y;
}
} else {
IsConnectedP = TRUE;
}
}
- if (!IsConnectedP && blockTrk_da.cnt > 1) return FALSE;
+ if (!IsConnectedP && blockTrk_da.cnt > 1) { return FALSE; }
}
return TRUE;
}
static void DeleteBlock ( track_p t )
{
- track_p trk1;
- blockData_p xx1;
+ track_p trk1;
+ blockData_p xx1;
LOG( log_block, 1, ("*** DeleteBlock(%p)\n",t))
blockData_p xx = GetblockData(t);
LOG( log_block, 1, ("*** DeleteBlock(): index is %d\n",GetTrkIndex(t)))
- LOG( log_block, 1, ("*** DeleteBlock(): xx = %p, xx->name = %p, xx->script = %p\n",
- xx,xx->name,xx->script))
+ LOG( log_block, 1,
+ ("*** DeleteBlock(): xx = %p, xx->name = %p, xx->script = %p\n",
+ xx,xx->name,xx->script))
MyFree(xx->name); xx->name = NULL;
MyFree(xx->script); xx->script = NULL;
- if (first_block == t)
- first_block = xx->next_block;
+ if (first_block == t) {
+ first_block = xx->next_block;
+ }
trk1 = first_block;
while(trk1) {
xx1 = GetblockData (trk1);
@@ -381,8 +390,9 @@ static void DeleteBlock ( track_p t )
}
trk1 = xx1->next_block;
}
- if (t == last_block)
+ if (t == last_block) {
last_block = trk1;
+ }
}
@@ -393,16 +403,16 @@ static BOOL_T WriteBlock ( track_p t, FILE * f )
blockData_p xx = GetblockData(t);
char *blockName = MyStrdup(xx->name);
-#ifdef WINDOWS
+#ifdef UTFCONVERT
blockName = Convert2UTF8(blockName);
-#endif // WINDOWS
+#endif // UTFCONVERT
rc &= fprintf(f, "BLOCK %d \"%s\" \"%s\"\n",
- GetTrkIndex(t), blockName, xx->script)>0;
+ GetTrkIndex(t), blockName, xx->script)>0;
for (iTrack = 0; iTrack < xx->numTracks && rc; iTrack++) {
- if ((&(xx->trackList))[iTrack].t == NULL) continue;
+ if ((&(xx->trackList))[iTrack].t == NULL) { continue; }
rc &= fprintf(f, "\tTRK %d\n",
- GetTrkIndex((&(xx->trackList))[iTrack].t))>0;
+ GetTrkIndex((&(xx->trackList))[iTrack].t))>0;
}
rc &= fprintf( f, "\t%s\n", END_BLOCK )>0;
MyFree(blockName);
@@ -426,41 +436,44 @@ static BOOL_T ReadBlock ( char * line )
return FALSE;
}
-#ifdef WINDOWS
+#ifdef UTFCONVERT
ConvertUTF8ToSystem(name);
-#endif // WINDOWS
+#endif // UTFCONVERT
- DYNARR_RESET( btrackinfo_p , blockTrk_da );
+
+ DYNARR_RESET( btrackinfo_t, blockTrk_da );
while ( (cp = GetNextLine()) != NULL ) {
if ( IsEND( END_BLOCK ) ) {
break;
}
- while (isspace((unsigned char)*cp)) cp++;
+ while (isspace((unsigned char)*cp)) { cp++; }
if ( *cp == '\n' || *cp == '#' ) {
continue;
}
if ( strncmp( cp, "TRK", 3 ) == 0 ) {
- if (!GetArgs(cp+4,"d",&trkindex)) return FALSE;
+ if (!GetArgs(cp+4,"d",&trkindex)) { return FALSE; }
/*trk = FindTrack(trkindex);*/
- DYNARR_APPEND( btrackinfo_p *, blockTrk_da, 10 );
- blockTrk(blockTrk_da.cnt-1).i = trkindex;
+ DYNARR_APPEND( btrackinfo_t, blockTrk_da, 10 );
+ DYNARR_LAST( btrackinfo_t, blockTrk_da ).i = trkindex;
}
}
/*blockCheckContigiousPath(); save for ResolveBlockTracks */
- trk = NewTrack(index, T_BLOCK, tempEndPts_da.cnt, sizeof(blockData_t)+(sizeof(btrackinfo_t)*(blockTrk_da.cnt-1))+1);
- for ( ep=0; ep<tempEndPts_da.cnt; ep++) {
- endPtP = &tempEndPts(ep);
- SetTrkEndPoint( trk, ep, endPtP->pos, endPtP->angle );
+ trk = NewTrack(index, T_BLOCK, TempEndPtsCount(),
+ sizeof(blockData_t)+(sizeof(btrackinfo_t)*(blockTrk_da.cnt))+1);
+ for ( ep=0; ep<TempEndPtsCount(); ep++) {
+ endPtP = TempEndPt(ep);
+ SetTrkEndPoint( trk, ep, GetEndPtPos(endPtP), GetEndPtAngle(endPtP) );
}
xx = GetblockData( trk );
- LOG( log_block, 1, ("*** ReadBlock(): trk = %p (%d), xx = %p\n",trk,GetTrkIndex(trk),xx))
+ LOG( log_block, 1, ("*** ReadBlock(): trk = %p (%d), xx = %p\n",trk,
+ GetTrkIndex(trk),xx))
LOG( log_block, 1, ("*** ReadBlock(): name = %p, script = %p\n",name,script))
xx->name = name;
xx->script = script;
xx->IsHilite = FALSE;
xx->numTracks = blockTrk_da.cnt;
trk1 = last_block;
- if (!trk1) first_block = trk;
+ if (!trk1) { first_block = trk; }
else {
xx1 = GetblockData(trk1);
xx1->next_block = trk;
@@ -478,21 +491,23 @@ static BOOL_T ReadBlock ( char * line )
EXPORT void ResolveBlockTrack ( track_p trk )
{
- LOG( log_block, 1, ("*** ResolveBlockTrack(%p)\n",trk))
- blockData_p xx;
- track_p t_trk;
- wIndex_t iTrack;
- if (GetTrkType(trk) != T_BLOCK) return;
- LOG( log_block, 1, ("*** ResolveBlockTrack(%d)\n",GetTrkIndex(trk)))
- xx = GetblockData(trk);
- for (iTrack = 0; iTrack < xx->numTracks; iTrack++) {
- t_trk = FindTrack(tracklist(iTrack).i);
- if (t_trk == NULL) {
- NoticeMessage( _("resolveBlockTrack: T%d[%d]: T%d doesn't exist"), _("Continue"), NULL, GetTrkIndex(trk), iTrack, tracklist(iTrack).i,t_trk );
- }
- tracklist(iTrack).t = t_trk;
- LOG( log_block, 1, ("*** ResolveBlockTrack(): %d (%d): %p\n",iTrack,tracklist(iTrack).i,t_trk))
- }
+ LOG( log_block, 1, ("*** ResolveBlockTrack(%p)\n",trk))
+ blockData_p xx;
+ track_p t_trk;
+ wIndex_t iTrack;
+ if (GetTrkType(trk) != T_BLOCK) { return; }
+ LOG( log_block, 1, ("*** ResolveBlockTrack(%d)\n",GetTrkIndex(trk)))
+ xx = GetblockData(trk);
+ for (iTrack = 0; iTrack < xx->numTracks; iTrack++) {
+ t_trk = FindTrack(tracklist(iTrack).i);
+ if (t_trk == NULL) {
+ NoticeMessage( _("resolveBlockTrack: T%d[%d]: T%d doesn't exist"),
+ _("Continue"), NULL, GetTrkIndex(trk), iTrack, tracklist(iTrack).i,t_trk );
+ }
+ tracklist(iTrack).t = t_trk;
+ LOG( log_block, 1, ("*** ResolveBlockTrack(): %d (%d): %p\n",iTrack,
+ tracklist(iTrack).i,t_trk))
+ }
}
static void MoveBlock (track_p trk, coOrd orig ) {}
@@ -534,24 +549,26 @@ static trackCmd_t blockCmds = {
-static BOOL_T TrackInBlock (track_p trk, track_p blk) {
+static BOOL_T TrackInBlock (track_p trk, track_p blk)
+{
wIndex_t iTrack;
blockData_p xx = GetblockData(blk);
for (iTrack = 0; iTrack < xx->numTracks; iTrack++) {
- if (trk == (&(xx->trackList))[iTrack].t) return TRUE;
+ if (trk == (&(xx->trackList))[iTrack].t) { return TRUE; }
}
return FALSE;
}
-static track_p FindBlock (track_p trk) {
+static track_p FindBlock (track_p trk)
+{
track_p a_trk;
blockData_p xx;
- if (!first_block) return NULL;
+ if (!first_block) { return NULL; }
a_trk = first_block;
while (a_trk) {
if (!IsTrackDeleted(a_trk)) {
if (GetTrkType(a_trk) == T_BLOCK &&
- TrackInBlock(trk,a_trk)) return a_trk;
+ TrackInBlock(trk,a_trk)) { return a_trk; }
}
xx = GetblockData(a_trk);
a_trk = xx->next_block;
@@ -600,8 +617,8 @@ static void BlockOk ( void * junk )
}
/* Need to check that all block elements are connected to each
other... */
- if (!blockCheckContigiousPath()) {
- NoticeMessage( _("Block is discontigious!"), _("Ok"), NULL );
+ if (!blockCheckContiguousPath()) {
+ NoticeMessage( _("Block is discontiguous!"), _("Ok"), NULL );
wDrawDelayUpdate( mainD.d, FALSE );
wHide( blockW );
return;
@@ -609,23 +626,24 @@ static void BlockOk ( void * junk )
UndoStart( _("Create block"), "Create block" );
/* Create a block object */
LOG( log_block, 1, ("*** BlockOk(): %d tracks in block\n",blockTrk_da.cnt))
- trk = NewTrack(0, T_BLOCK, tempEndPts_da.cnt, sizeof(blockData_t)+(sizeof(btrackinfo_t)*(blockTrk_da.cnt-1))+1);
- for ( ep=0; ep<tempEndPts_da.cnt; ep++) {
- endPtP = &tempEndPts(ep);
- SetTrkEndPoint( trk, ep, endPtP->pos, endPtP->angle );
+ trk = NewTrack(0, T_BLOCK, TempEndPtsCount(),
+ sizeof(blockData_t)+(sizeof(btrackinfo_t)*(blockTrk_da.cnt-1))+1);
+ for ( ep=0; ep<TempEndPtsCount(); ep++) {
+ endPtP = TempEndPt(ep);
+ SetTrkEndPoint( trk, ep, GetEndPtPos(endPtP), GetEndPtAngle(endPtP) );
}
xx = GetblockData( trk );
- LOG(log_block, 1, ("*** BlockOk(): trk = %p (%d), xx = %p\n", trk, GetTrkIndex(trk), xx))
+ LOG(log_block, 1, ("*** BlockOk(): trk = %p (%d), xx = %p\n", trk,
+ GetTrkIndex(trk), xx))
xx->name = MyStrdup(blockName);
xx->script = MyStrdup(blockScript);
- xx->IsHilite = FALSE;
+ xx->IsHilite = FALSE;
xx->numTracks = blockTrk_da.cnt;
trk1 = last_block;
if (!trk1) {
first_block = trk;
- }
- else {
+ } else {
xx1 = GetblockData(trk1);
xx1->next_block = trk;
}
@@ -668,10 +686,11 @@ static void NewBlockDialog()
ErrorMessage( MSG_NO_SELECTED_TRK );
return;
}
- if ( log_block < 0 ) log_block = LogFindIndex( "block" );
+ if ( log_block < 0 ) { log_block = LogFindIndex( "block" ); }
if ( !blockW ) {
ParamRegister( &blockPG );
- blockW = ParamCreateDialog (&blockPG, MakeWindowTitle(_("Create Block")), _("Ok"), BlockOk, wHide, TRUE, NULL, F_BLOCK, NULL );
+ blockW = ParamCreateDialog (&blockPG, MakeWindowTitle(_("Create Block")),
+ _("Ok"), BlockOk, wHide, TRUE, NULL, F_BLOCK, NULL );
blockD.dpi = mainD.dpi;
}
ParamLoadControls( &blockPG );
@@ -683,7 +702,7 @@ static STATUS_T CmdBlockCreate( wAction_t action, coOrd pos )
LOG( log_block, 1, ("*** CmdBlockAction(%08x,{%f,%f})\n",action,pos.x,pos.y))
switch (action & 0xFF) {
case C_START:
- LOG( log_block, 1,("*** CmdBlockCreate(): C_START\n"))
+ LOG( log_block, 1,("*** CmdBlockCreate(): C_START\n"))
NewBlockDialog();
return C_TERMINATE;
default:
@@ -692,7 +711,6 @@ static STATUS_T CmdBlockCreate( wAction_t action, coOrd pos )
}
#if 0
-extern BOOL_T inDescribeCmd;
static STATUS_T CmdBlockEdit( wAction_t action, coOrd pos )
{
@@ -746,7 +764,8 @@ static STATUS_T CmdBlockDelete( wAction_t action, coOrd pos )
}
/* Confirm Delete Block */
xx = GetblockData(btrk);
- if ( NoticeMessage( _("Really delete block %s?"), _("Yes"), _("No"), xx->name) ) {
+ if ( NoticeMessage( _("Really delete block %s?"), _("Yes"), _("No"),
+ xx->name) ) {
UndoStart( _("Delete Block"), "delete" );
DeleteTrack (btrk, FALSE);
UndoEnd();
@@ -771,7 +790,7 @@ static STATUS_T CmdBlock (wAction_t action, coOrd pos )
{
LOG( log_block, 1, ("*** CmdBlock(%08x,{%f,%f})\n",action,pos.x,pos.y))
- switch ((long)commandContext) {
+ switch (VP2L(commandContext)) {
case BLOCK_CREATE: return CmdBlockCreate(action,pos);
case BLOCK_EDIT: return CmdBlockEdit(action,pos);
case BLOCK_DELETE: return CmdBlockDelete(action,pos);
@@ -782,74 +801,74 @@ static STATUS_T CmdBlock (wAction_t action, coOrd pos )
void CheckDeleteBlock(track_p t)
{
- track_p blk;
- blockData_p xx;
- if (!IsTrack(t)) {
- return;
- }
- blk = FindBlock(t);
- if (blk == NULL) {
- return;
- }
- xx = GetblockData(blk);
- NoticeMessage(_("Deleting block %s"),_("Ok"),NULL,xx->name);
- DeleteTrack(blk,FALSE);
+ track_p blk;
+ blockData_p xx;
+ if (!IsTrack(t)) {
+ return;
+ }
+ blk = FindBlock(t);
+ if (blk == NULL) {
+ return;
+ }
+ xx = GetblockData(blk);
+ NoticeMessage(_("Deleting block %s"),_("Ok"),NULL,xx->name);
+ DeleteTrack(blk,FALSE);
}
static void BlockEditOk ( void * junk )
{
- blockData_p xx;
- track_p trk;
-
- LOG( log_block, 1, ("*** BlockEditOk()\n"))
- ParamUpdate (&blockEditPG );
- if ( blockEditName[0]==0 ) {
- NoticeMessage( _("Block must have a name!"), _("Ok"), NULL);
- return;
- }
- wDrawDelayUpdate( mainD.d, TRUE );
- UndoStart( _("Modify Block"), "Modify Block" );
- trk = blockEditTrack;
- xx = GetblockData( trk );
- xx->name = MyStrdup(blockEditName);
- xx->script = MyStrdup(blockEditScript);
- blockDebug(trk);
- UndoEnd();
- wHide( blockEditW );
+ blockData_p xx;
+ track_p trk;
+
+ LOG( log_block, 1, ("*** BlockEditOk()\n"))
+ ParamUpdate (&blockEditPG );
+ if ( blockEditName[0]==0 ) {
+ NoticeMessage( _("Block must have a name!"), _("Ok"), NULL);
+ return;
+ }
+ wDrawDelayUpdate( mainD.d, TRUE );
+ UndoStart( _("Modify Block"), "Modify Block" );
+ trk = blockEditTrack;
+ xx = GetblockData( trk );
+ xx->name = MyStrdup(blockEditName);
+ xx->script = MyStrdup(blockEditScript);
+ blockDebug(trk);
+ UndoEnd();
+ wHide( blockEditW );
}
static void EditBlock (track_p trk)
{
- blockData_p xx = GetblockData(trk);
- wIndex_t iTrack;
- BOOL_T needComma = FALSE;
- char temp[32];
+ blockData_p xx = GetblockData(trk);
+ wIndex_t iTrack;
+ BOOL_T needComma = FALSE;
+ char temp[32];
strncpy(blockEditName, xx->name, STR_SHORT_SIZE - 1);
blockEditName[STR_SHORT_SIZE-1] = '\0';
strncpy(blockEditScript, xx->script, STR_LONG_SIZE - 1);
blockEditScript[STR_LONG_SIZE-1] = '\0';
- blockEditSegs[0] = '\0';
- for (iTrack = 0; iTrack < xx->numTracks ; iTrack++) {
- if ((&(xx->trackList))[iTrack].t == NULL) continue;
- sprintf(temp,"%d",GetTrkIndex((&(xx->trackList))[iTrack].t));
- if (needComma) strcat(blockEditSegs,", ");
- strcat(blockEditSegs,temp);
- needComma = TRUE;
- }
- blockEditTrack = trk;
- if ( !blockEditW ) {
- ParamRegister( &blockEditPG );
- blockEditW = ParamCreateDialog (&blockEditPG,
- MakeWindowTitle(_("Edit block")),
- _("Ok"), BlockEditOk,
- wHide, TRUE, NULL, F_BLOCK,
- NULL );
- }
- ParamLoadControls( &blockEditPG );
- sprintf( message, _("Edit block %d"), GetTrkIndex(trk) );
- wWinSetTitle( blockEditW, message );
- wShow (blockEditW);
+ blockEditSegs[0] = '\0';
+ for (iTrack = 0; iTrack < xx->numTracks ; iTrack++) {
+ if ((&(xx->trackList))[iTrack].t == NULL) { continue; }
+ sprintf(temp,"%d",GetTrkIndex((&(xx->trackList))[iTrack].t));
+ if (needComma) { strcat(blockEditSegs,", "); }
+ strcat(blockEditSegs,temp);
+ needComma = TRUE;
+ }
+ blockEditTrack = trk;
+ if ( !blockEditW ) {
+ ParamRegister( &blockEditPG );
+ blockEditW = ParamCreateDialog (&blockEditPG,
+ MakeWindowTitle(_("Edit block")),
+ _("Ok"), BlockEditOk,
+ wHide, TRUE, NULL, F_BLOCK,
+ NULL );
+ }
+ ParamLoadControls( &blockEditPG );
+ sprintf( message, _("Edit block %d"), GetTrkIndex(trk) );
+ wWinSetTitle( blockEditW, message );
+ wShow (blockEditW);
}
static coOrd blkhiliteOrig, blkhiliteSize;
@@ -857,149 +876,157 @@ static POS_T blkhiliteBorder;
static wDrawColor blkhiliteColor = 0;
static void DrawBlockTrackHilite( void )
{
- wPos_t x, y, w, h;
- if (blkhiliteColor==0)
+ if (blkhiliteColor==0) {
blkhiliteColor = wDrawColorGray(87);
- w = (wPos_t)((blkhiliteSize.x/mainD.scale)*mainD.dpi+0.5);
- h = (wPos_t)((blkhiliteSize.y/mainD.scale)*mainD.dpi+0.5);
- mainD.CoOrd2Pix(&mainD,blkhiliteOrig,&x,&y);
- wDrawFilledRectangle( mainD.d, x, y, w, h, blkhiliteColor, wDrawOptTemp|wDrawOptTransparent );
+ }
+ // This is incomplete. We should be in temp drawing mode and clearing temp draw on UN_HILIGHT
+ DrawRectangle( &tempD, blkhiliteOrig, blkhiliteSize, blkhiliteColor,
+ DRAW_TRANSPARENT );
}
static int BlockMgmProc ( int cmd, void * data )
{
- track_p trk = (track_p) data;
- blockData_p xx = GetblockData(trk);
- wIndex_t iTrack;
- BOOL_T needComma = FALSE;
- char temp[32];
- /*char msg[STR_SIZE];*/
- coOrd tempOrig, tempSize;
- BOOL_T first = TRUE;
-
- switch ( cmd ) {
- case CONTMGM_CAN_EDIT:
- return TRUE;
- break;
- case CONTMGM_DO_EDIT:
- EditBlock (trk);
- /*inDescribeCmd = TRUE;*/
- /*DescribeTrack (trk, msg, sizeof msg );*/
- /*InfoMessage( msg );*/
- return TRUE;
- break;
- case CONTMGM_CAN_DELETE:
- return TRUE;
- break;
- case CONTMGM_DO_DELETE:
- DeleteTrack (trk, FALSE);
- return TRUE;
- break;
- case CONTMGM_DO_HILIGHT:
- if (!xx->IsHilite) {
- blkhiliteBorder = mainD.scale*0.1;
- if ( blkhiliteBorder < trackGauge ) blkhiliteBorder = trackGauge;
- first = TRUE;
- for (iTrack = 0; iTrack < xx->numTracks ; iTrack++) {
- if ((&(xx->trackList))[iTrack].t == NULL) continue;
- GetBoundingBox( (&(xx->trackList))[iTrack].t, &tempSize, &tempOrig );
- if (first) {
- blkhiliteOrig = tempOrig;
- blkhiliteSize = tempSize;
- first = FALSE;
- } else {
- if (tempSize.x > blkhiliteSize.x)
- blkhiliteSize.x = tempSize.x;
- if (tempSize.y > blkhiliteSize.y)
- blkhiliteSize.y = tempSize.y;
- if (tempOrig.x < blkhiliteOrig.x)
- blkhiliteOrig.x = tempOrig.x;
- if (tempOrig.y < blkhiliteOrig.y)
- blkhiliteOrig.y = tempOrig.y;
- }
- }
- blkhiliteOrig.x -= blkhiliteBorder;
- blkhiliteOrig.y -= blkhiliteBorder;
- blkhiliteSize.x -= blkhiliteOrig.x-blkhiliteBorder;
- blkhiliteSize.y -= blkhiliteOrig.y-blkhiliteBorder;
- DrawBlockTrackHilite();
- xx->IsHilite = TRUE;
- }
- break;
- case CONTMGM_UN_HILIGHT:
- if (xx->IsHilite) {
- blkhiliteBorder = mainD.scale*0.1;
- if ( blkhiliteBorder < trackGauge ) blkhiliteBorder = trackGauge;
- first = TRUE;
- for (iTrack = 0; iTrack < xx->numTracks ; iTrack++) {
- if ((&(xx->trackList))[iTrack].t == NULL) continue;
- GetBoundingBox( (&(xx->trackList))[iTrack].t, &tempSize, &tempOrig );
- if (first) {
- blkhiliteOrig = tempOrig;
- blkhiliteSize = tempSize;
- first = FALSE;
- } else {
- if (tempSize.x > blkhiliteSize.x)
- blkhiliteSize.x = tempSize.x;
- if (tempSize.y > blkhiliteSize.y)
- blkhiliteSize.y = tempSize.y;
- if (tempOrig.x < blkhiliteOrig.x)
- blkhiliteOrig.x = tempOrig.x;
- if (tempOrig.y < blkhiliteOrig.y)
- blkhiliteOrig.y = tempOrig.y;
- }
- }
- blkhiliteOrig.x -= blkhiliteBorder;
- blkhiliteOrig.y -= blkhiliteBorder;
- blkhiliteSize.x -= blkhiliteOrig.x-blkhiliteBorder;
- blkhiliteSize.y -= blkhiliteOrig.y-blkhiliteBorder;
- DrawBlockTrackHilite();
- xx->IsHilite = FALSE;
- }
- break;
- case CONTMGM_GET_TITLE:
- sprintf( message, "\t%s\t", xx->name);
- for (iTrack = 0; iTrack < xx->numTracks ; iTrack++) {
- if ((&(xx->trackList))[iTrack].t == NULL) continue;
- sprintf(temp,"%d",GetTrkIndex((&(xx->trackList))[iTrack].t));
- if (needComma) strcat(message,", ");
- strcat(message,temp);
- needComma = TRUE;
- }
- break;
- }
- return FALSE;
+ track_p trk = (track_p) data;
+ blockData_p xx = GetblockData(trk);
+ wIndex_t iTrack;
+ BOOL_T needComma = FALSE;
+ char temp[32];
+ /*char msg[STR_SIZE];*/
+ coOrd tempOrig, tempSize;
+ BOOL_T first = TRUE;
+
+ switch ( cmd ) {
+ case CONTMGM_CAN_EDIT:
+ return TRUE;
+ break;
+ case CONTMGM_DO_EDIT:
+ EditBlock (trk);
+ /*inDescribeCmd = TRUE;*/
+ /*DescribeTrack (trk, msg, sizeof msg );*/
+ /*InfoMessage( msg );*/
+ return TRUE;
+ break;
+ case CONTMGM_CAN_DELETE:
+ return TRUE;
+ break;
+ case CONTMGM_DO_DELETE:
+ DeleteTrack (trk, FALSE);
+ return TRUE;
+ break;
+ case CONTMGM_DO_HILIGHT:
+ if (!xx->IsHilite) {
+ blkhiliteBorder = mainD.scale*0.1;
+ if ( blkhiliteBorder < trackGauge ) { blkhiliteBorder = trackGauge; }
+ first = TRUE;
+ for (iTrack = 0; iTrack < xx->numTracks ; iTrack++) {
+ if ((&(xx->trackList))[iTrack].t == NULL) { continue; }
+ GetBoundingBox( (&(xx->trackList))[iTrack].t, &tempSize, &tempOrig );
+ if (first) {
+ blkhiliteOrig = tempOrig;
+ blkhiliteSize = tempSize;
+ first = FALSE;
+ } else {
+ if (tempSize.x > blkhiliteSize.x) {
+ blkhiliteSize.x = tempSize.x;
+ }
+ if (tempSize.y > blkhiliteSize.y) {
+ blkhiliteSize.y = tempSize.y;
+ }
+ if (tempOrig.x < blkhiliteOrig.x) {
+ blkhiliteOrig.x = tempOrig.x;
+ }
+ if (tempOrig.y < blkhiliteOrig.y) {
+ blkhiliteOrig.y = tempOrig.y;
+ }
+ }
+ }
+ blkhiliteOrig.x -= blkhiliteBorder;
+ blkhiliteOrig.y -= blkhiliteBorder;
+ blkhiliteSize.x -= blkhiliteOrig.x-blkhiliteBorder;
+ blkhiliteSize.y -= blkhiliteOrig.y-blkhiliteBorder;
+ DrawBlockTrackHilite();
+ xx->IsHilite = TRUE;
+ }
+ break;
+ case CONTMGM_UN_HILIGHT:
+ if (xx->IsHilite) {
+ blkhiliteBorder = mainD.scale*0.1;
+ if ( blkhiliteBorder < trackGauge ) { blkhiliteBorder = trackGauge; }
+ first = TRUE;
+ for (iTrack = 0; iTrack < xx->numTracks ; iTrack++) {
+ if ((&(xx->trackList))[iTrack].t == NULL) { continue; }
+ GetBoundingBox( (&(xx->trackList))[iTrack].t, &tempSize, &tempOrig );
+ if (first) {
+ blkhiliteOrig = tempOrig;
+ blkhiliteSize = tempSize;
+ first = FALSE;
+ } else {
+ if (tempSize.x > blkhiliteSize.x) {
+ blkhiliteSize.x = tempSize.x;
+ }
+ if (tempSize.y > blkhiliteSize.y) {
+ blkhiliteSize.y = tempSize.y;
+ }
+ if (tempOrig.x < blkhiliteOrig.x) {
+ blkhiliteOrig.x = tempOrig.x;
+ }
+ if (tempOrig.y < blkhiliteOrig.y) {
+ blkhiliteOrig.y = tempOrig.y;
+ }
+ }
+ }
+ blkhiliteOrig.x -= blkhiliteBorder;
+ blkhiliteOrig.y -= blkhiliteBorder;
+ blkhiliteSize.x -= blkhiliteOrig.x-blkhiliteBorder;
+ blkhiliteSize.y -= blkhiliteOrig.y-blkhiliteBorder;
+ DrawBlockTrackHilite();
+ xx->IsHilite = FALSE;
+ }
+ break;
+ case CONTMGM_GET_TITLE:
+ sprintf( message, "\t%s\t", xx->name);
+ for (iTrack = 0; iTrack < xx->numTracks ; iTrack++) {
+ if ((&(xx->trackList))[iTrack].t == NULL) { continue; }
+ sprintf(temp,"%d",GetTrkIndex((&(xx->trackList))[iTrack].t));
+ if (needComma) { strcat(message,", "); }
+ strcat(message,temp);
+ needComma = TRUE;
+ }
+ break;
+ }
+ return FALSE;
}
//#include "bitmaps/blocknew.xpm"
//#include "bitmaps/blockedit.xpm"
//#include "bitmaps/blockdel.xpm"
-#include "bitmaps/block.xpm"
+#include "bitmaps/block.xpm3"
EXPORT void BlockMgmLoad( void )
{
- track_p trk;
- static wIcon_p blockI = NULL;
-
- if ( blockI == NULL)
- blockI = wIconCreatePixMap( block_xpm );
-
- TRK_ITERATE(trk) {
- if (GetTrkType(trk) != T_BLOCK) continue;
- ContMgmLoad( blockI, BlockMgmProc, (void *)trk );
- }
-
+ track_p trk;
+ static wIcon_p blockI = NULL;
+
+ if ( blockI == NULL) {
+ blockI = wIconCreatePixMap( block_xpm3[iconSize] );
+ }
+
+ TRK_ITERATE(trk) {
+ if (GetTrkType(trk) != T_BLOCK) { continue; }
+ ContMgmLoad( blockI, BlockMgmProc, trk );
+ }
+
}
EXPORT void InitCmdBlock( wMenu_p menu )
{
blockName[0] = '\0';
blockScript[0] = '\0';
- AddMenuButton( menu, CmdBlockCreate, "cmdBlockCreate", _("Block"),
- wIconCreatePixMap( block_xpm ), LEVEL0_50,
- IC_STICKY|IC_POPUP2, ACCL_BLOCK1, NULL );
+ AddMenuButton( menu, CmdBlockCreate, "cmdBlockCreate", _("Block"),
+ wIconCreatePixMap( block_xpm3[iconSize] ), LEVEL0_50,
+ IC_STICKY|IC_POPUP2, ACCL_BLOCK1, NULL );
ParamRegister( &blockPG );
}
@@ -1008,6 +1035,8 @@ EXPORT void InitTrkBlock( void )
{
T_BLOCK = InitObject ( &blockCmds );
log_block = LogFindIndex ( "block" );
+ DYNARR_INIT( btrackinfo_t, blockTrk_da );
+ last_block = NULL;
}