Modified the "label" and "setlabel" commands, giving "setlabel" an
extra option "-default" that allows defaults to be set for any label property other than text or port-related properties. Subsequently, the command "label <text>" will apply the given defaults to the label. This allows a simpler way to create rendered labels from the command line without remembering all of the arguments to the extended "label" command.
This commit is contained in:
parent
f790ea7589
commit
7757384355
|
|
@ -50,6 +50,9 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
|
|||
|
||||
void CmdPaintEraseButton();
|
||||
|
||||
/* See the SetLabel command */
|
||||
|
||||
extern Label *DefaultLabel;
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------------
|
||||
|
|
@ -169,8 +172,8 @@ CmdLabel(w, cmd)
|
|||
MagWindow *w;
|
||||
TxCommand *cmd;
|
||||
{
|
||||
TileType type;
|
||||
int pos, font = -1, size = 0, rotate = 0, offx = 0, offy = 0;
|
||||
TileType type = (TileType)(-1);
|
||||
int pos = -1, font = -1, size = 0, rotate = 0, offx = 0, offy = 0;
|
||||
bool sticky = FALSE;
|
||||
int option;
|
||||
char *p;
|
||||
|
|
@ -185,6 +188,22 @@ CmdLabel(w, cmd)
|
|||
|
||||
p = cmd->tx_argv[1];
|
||||
|
||||
/*
|
||||
* If the "setlabel" command has been used to set defaults, pick up
|
||||
* the default values from DefaultLabel.
|
||||
*/
|
||||
if (DefaultLabel != NULL)
|
||||
{
|
||||
pos = DefaultLabel->lab_just;
|
||||
font = DefaultLabel->lab_font;
|
||||
size = DefaultLabel->lab_size;
|
||||
rotate = DefaultLabel->lab_rotate;
|
||||
offx = DefaultLabel->lab_offset.p_x;
|
||||
offy = DefaultLabel->lab_offset.p_y;
|
||||
sticky = (DefaultLabel->lab_flags & LABEL_STICKY) ? 1 : 0;
|
||||
type = DefaultLabel->lab_type;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find and check validity of position.
|
||||
*/
|
||||
|
|
@ -220,13 +239,14 @@ CmdLabel(w, cmd)
|
|||
else
|
||||
pos = GeoTransPos(&RootToEditTransform, pos);
|
||||
}
|
||||
else pos = -1;
|
||||
|
||||
if (font >= 0)
|
||||
{
|
||||
char *yp = NULL;
|
||||
|
||||
size = DBLambda[1];
|
||||
if (DefaultLabel == NULL)
|
||||
size = DBLambda[1];
|
||||
|
||||
if (cmd->tx_argc > 3)
|
||||
if (StrIsNumeric(cmd->tx_argv[3]))
|
||||
size = cmdScaleCoord(w, cmd->tx_argv[3], TRUE, TRUE, 8);
|
||||
|
|
@ -304,7 +324,7 @@ CmdLabel(w, cmd)
|
|||
TxError("Unknown layer: %s\n", cmd->tx_argv[cmd->tx_argc - 1]);
|
||||
return;
|
||||
}
|
||||
} else type = -1;
|
||||
}
|
||||
|
||||
CmdLabelProc(p, font, size, rotate, offx, offy, pos, sticky, type);
|
||||
}
|
||||
|
|
|
|||
268
commands/CmdRS.c
268
commands/CmdRS.c
|
|
@ -54,6 +54,9 @@ static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/
|
|||
|
||||
extern void DisplayWindow();
|
||||
|
||||
/* Used by CmdSetLabel() */
|
||||
Label *DefaultLabel;
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
|
|
@ -1892,8 +1895,7 @@ cmdLabelFontFunc(label, cellUse, transform, font)
|
|||
* Query or change properties of a (selected) label in the edit cell
|
||||
*
|
||||
* Usage:
|
||||
* setlabel option [name]
|
||||
*
|
||||
* setlabel [-default] option [name]
|
||||
*
|
||||
* Option may be one of:
|
||||
* text
|
||||
|
|
@ -1913,6 +1915,11 @@ cmdLabelFontFunc(label, cellUse, transform, font)
|
|||
* "setlabel font <name>" can be used without any select to load fonts
|
||||
* from a startup script.
|
||||
*
|
||||
* Use with "-default" causes the DefaultLabel structure to be created
|
||||
* (if not existing already) and set with the given value. Subsequent
|
||||
* use of the "label" command will start with the given defaults, then
|
||||
* apply whatever non-default values are specified in the command.
|
||||
*
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
|
@ -1933,10 +1940,12 @@ CmdSetLabel(w, cmd)
|
|||
TxCommand *cmd;
|
||||
{
|
||||
int pos = -1, font = -1, size = 0, rotate = 0, flags = 0;
|
||||
int locargc, argstart = 1;
|
||||
char **msg;
|
||||
Point offset;
|
||||
TileType ttype;
|
||||
int option;
|
||||
bool doDefault = FALSE;
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_Obj *lobj;
|
||||
#endif
|
||||
|
|
@ -1959,10 +1968,34 @@ CmdSetLabel(w, cmd)
|
|||
NULL
|
||||
};
|
||||
|
||||
if (cmd->tx_argc < 2 || cmd->tx_argc > 4)
|
||||
locargc = cmd->tx_argc;
|
||||
if (locargc > 2)
|
||||
{
|
||||
if (!strncmp(cmd->tx_argv[1], "-def", 4))
|
||||
{
|
||||
if (DefaultLabel == NULL)
|
||||
{
|
||||
DefaultLabel = (Label *)mallocMagic(sizeof(Label));
|
||||
/* Set default defaults (lab_text is ignored) */
|
||||
DefaultLabel->lab_just = -1;
|
||||
DefaultLabel->lab_size = 0;
|
||||
DefaultLabel->lab_font = -1;
|
||||
DefaultLabel->lab_rotate = 0;
|
||||
DefaultLabel->lab_flags = 0;
|
||||
DefaultLabel->lab_offset.p_x = 0;
|
||||
DefaultLabel->lab_offset.p_y = 0;
|
||||
DefaultLabel->lab_type = (TileType)(-1);
|
||||
}
|
||||
doDefault = TRUE;
|
||||
locargc--;
|
||||
argstart++;
|
||||
}
|
||||
}
|
||||
|
||||
if (locargc < 2 || locargc > 4)
|
||||
option = SETLABEL_HELP;
|
||||
else
|
||||
option = Lookup(cmd->tx_argv[1], cmdLabelSetOption);
|
||||
option = Lookup(cmd->tx_argv[argstart], cmdLabelSetOption);
|
||||
|
||||
switch (option)
|
||||
{
|
||||
|
|
@ -1981,20 +2014,27 @@ CmdSetLabel(w, cmd)
|
|||
break;
|
||||
|
||||
case SETLABEL_TEXT:
|
||||
if (EditCellUse)
|
||||
if (doDefault)
|
||||
{
|
||||
TxError("Cannot set a default label text.\n");
|
||||
}
|
||||
else if (EditCellUse)
|
||||
{
|
||||
SelEnumLabels(&DBAllTypeBits, TRUE, (bool *)NULL,
|
||||
cmdLabelTextFunc, (cmd->tx_argc == 3) ?
|
||||
(ClientData)cmd->tx_argv[2] : (ClientData)NULL);
|
||||
cmdLabelTextFunc, (locargc == 3) ?
|
||||
(ClientData)cmd->tx_argv[argstart + 1] : (ClientData)NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case SETLABEL_FONT:
|
||||
if (cmd->tx_argc >= 2 && cmd->tx_argc <= 4)
|
||||
if (locargc >= 2 && locargc <= 4)
|
||||
{
|
||||
if ((cmd->tx_argc == 3) && StrIsInt(cmd->tx_argv[2]))
|
||||
/* This option is used to see the font name corresponding
|
||||
* to a font number.
|
||||
*/
|
||||
if ((locargc == 3) && StrIsInt(cmd->tx_argv[argstart + 1]))
|
||||
{
|
||||
int font = atoi(cmd->tx_argv[2]);
|
||||
int font = atoi(cmd->tx_argv[argstart + 1]);
|
||||
if (font < -1 || font >= DBNumFonts)
|
||||
{
|
||||
if (DBNumFonts == 0)
|
||||
|
|
@ -2008,67 +2048,118 @@ CmdSetLabel(w, cmd)
|
|||
else
|
||||
TxPrintf("%s\n", DBFontList[font]->mf_name);
|
||||
}
|
||||
else if ((cmd->tx_argc == 3 || cmd->tx_argc == 4) &&
|
||||
!StrIsInt(cmd->tx_argv[2]))
|
||||
else if ((locargc == 3 || locargc == 4) &&
|
||||
!StrIsInt(cmd->tx_argv[argstart + 1]))
|
||||
{
|
||||
font = DBNameToFont(cmd->tx_argv[2]);
|
||||
font = DBNameToFont(cmd->tx_argv[argstart + 1]);
|
||||
if (font < -1)
|
||||
{
|
||||
float scale = 1.0;
|
||||
if ((cmd->tx_argc == 4) && StrIsNumeric(cmd->tx_argv[3]))
|
||||
scale = (float)atof(cmd->tx_argv[3]);
|
||||
if (DBLoadFont(cmd->tx_argv[2], scale) != 0)
|
||||
TxError("Error loading font \"%s\"\n", cmd->tx_argv[2]);
|
||||
font = DBNameToFont(cmd->tx_argv[2]);
|
||||
if ((locargc == 4) && StrIsNumeric(cmd->tx_argv[argstart + 2]))
|
||||
scale = (float)atof(cmd->tx_argv[argstart + 2]);
|
||||
if (DBLoadFont(cmd->tx_argv[argstart + 1], scale) != 0)
|
||||
TxError("Error loading font \"%s\"\n", cmd->tx_argv[argstart + 1]);
|
||||
font = DBNameToFont(cmd->tx_argv[argstart + 1]);
|
||||
if (font < -1) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (EditCellUse)
|
||||
if (doDefault)
|
||||
{
|
||||
if (locargc == 2)
|
||||
{
|
||||
font = DefaultLabel->lab_font;
|
||||
if (font == -1)
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_SetResult(magicinterp, "default", TCL_VOLATILE);
|
||||
#else
|
||||
TxPrintf("default\n");
|
||||
#endif
|
||||
else
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_SetObjResult(magicinterp,
|
||||
Tcl_NewStringObj(DBFontList[font]->mf_name, -1));
|
||||
#else
|
||||
TxPrintf("%s\n", DBFontList[font]->mf_name);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
DefaultLabel->lab_font = font;
|
||||
}
|
||||
else if (EditCellUse)
|
||||
{
|
||||
SelEnumLabels(&DBAllTypeBits, TRUE, (bool *)NULL,
|
||||
cmdLabelFontFunc, (cmd->tx_argc == 3) ?
|
||||
cmdLabelFontFunc, (locargc == 3) ?
|
||||
(ClientData)&font : (ClientData)NULL);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SETLABEL_JUSTIFY:
|
||||
if (cmd->tx_argc == 3)
|
||||
if (locargc == 3)
|
||||
{
|
||||
pos = GeoNameToPos(cmd->tx_argv[2], FALSE, TRUE);
|
||||
pos = GeoNameToPos(cmd->tx_argv[argstart + 1], FALSE, TRUE);
|
||||
if (pos < 0) break;
|
||||
}
|
||||
if (EditCellUse)
|
||||
if (doDefault)
|
||||
{
|
||||
if (locargc == 2)
|
||||
{
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_SetObjResult(magicinterp,
|
||||
Tcl_NewStringObj(GeoPosToName(DefaultLabel->lab_just),
|
||||
-1));
|
||||
#else
|
||||
TxPrintf("%s\n", GeoPosToName(DefaultLabel->lab_just));
|
||||
#endif
|
||||
}
|
||||
else
|
||||
DefaultLabel->lab_just = pos;
|
||||
}
|
||||
else if (EditCellUse)
|
||||
{
|
||||
SelEnumLabels(&DBAllTypeBits, TRUE, (bool *)NULL,
|
||||
cmdLabelJustFunc, (cmd->tx_argc == 3) ?
|
||||
cmdLabelJustFunc, (locargc == 3) ?
|
||||
(ClientData)&pos : (ClientData)NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case SETLABEL_SIZE:
|
||||
if (cmd->tx_argc == 3)
|
||||
if (locargc == 3)
|
||||
{
|
||||
if (StrIsNumeric(cmd->tx_argv[2]))
|
||||
size = cmdScaleCoord(w, cmd->tx_argv[2], TRUE, TRUE, 8);
|
||||
if (StrIsNumeric(cmd->tx_argv[argstart + 1]))
|
||||
size = cmdScaleCoord(w, cmd->tx_argv[argstart + 1], TRUE, TRUE, 8);
|
||||
if (size <= 0) break;
|
||||
}
|
||||
if (EditCellUse)
|
||||
if (doDefault)
|
||||
{
|
||||
if (locargc == 2)
|
||||
{
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_SetObjResult(magicinterp,
|
||||
Tcl_NewIntObj(DefaultLabel->lab_size));
|
||||
#else
|
||||
TxPrintf("%d\n", DefaultLabel->lab_size);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
DefaultLabel->lab_size = size;
|
||||
}
|
||||
else if (EditCellUse)
|
||||
{
|
||||
SelEnumLabels(&DBAllTypeBits, TRUE, (bool *)NULL,
|
||||
cmdLabelSizeFunc, (cmd->tx_argc == 3) ?
|
||||
cmdLabelSizeFunc, (locargc == 3) ?
|
||||
(ClientData)&size : (ClientData)NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case SETLABEL_OFFSET:
|
||||
if (cmd->tx_argc == 3)
|
||||
if (locargc == 3)
|
||||
{
|
||||
char *yp;
|
||||
if ((yp = strchr(cmd->tx_argv[2], ' ')) != NULL)
|
||||
if ((yp = strchr(cmd->tx_argv[argstart + 1], ' ')) != NULL)
|
||||
{
|
||||
offset.p_x = cmdScaleCoord(w, cmd->tx_argv[2], TRUE, TRUE, 8);
|
||||
offset.p_x = cmdScaleCoord(w, cmd->tx_argv[argstart + 1], TRUE, TRUE, 8);
|
||||
offset.p_y = cmdScaleCoord(w, yp, TRUE, FALSE, 8);
|
||||
}
|
||||
else
|
||||
|
|
@ -2077,67 +2168,138 @@ CmdSetLabel(w, cmd)
|
|||
return;
|
||||
}
|
||||
}
|
||||
else if (cmd->tx_argc == 4)
|
||||
else if (locargc == 4)
|
||||
{
|
||||
offset.p_x = cmdScaleCoord(w, cmd->tx_argv[2], TRUE, TRUE, 8);
|
||||
offset.p_y = cmdScaleCoord(w, cmd->tx_argv[3], TRUE, FALSE, 8);
|
||||
offset.p_x = cmdScaleCoord(w, cmd->tx_argv[argstart + 1], TRUE, TRUE, 8);
|
||||
offset.p_y = cmdScaleCoord(w, cmd->tx_argv[argstart + 2], TRUE, FALSE, 8);
|
||||
}
|
||||
if (EditCellUse)
|
||||
if (doDefault)
|
||||
{
|
||||
if (locargc == 2)
|
||||
{
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_Obj *lobj;
|
||||
Tcl_NewListObj(0, NULL);
|
||||
Tcl_ListObjAppendElement(magicinterp, lobj,
|
||||
Tcl_NewIntObj(DefaultLabel->lab_offset.p_x));
|
||||
Tcl_ListObjAppendElement(magicinterp, lobj,
|
||||
Tcl_NewIntObj(DefaultLabel->lab_offset.p_y));
|
||||
Tcl_SetObjResult(magicinterp, lobj);
|
||||
#else
|
||||
TxPrintf("%d %d\n", DefaultLabel->lab_offset.p_x,
|
||||
DefaultLabel->lab_offset.p_y);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
DefaultLabel->lab_offset = offset;
|
||||
}
|
||||
else if (EditCellUse)
|
||||
{
|
||||
SelEnumLabels(&DBAllTypeBits, TRUE, (bool *)NULL,
|
||||
cmdLabelOffsetFunc, (cmd->tx_argc != 2) ?
|
||||
cmdLabelOffsetFunc, (locargc != 2) ?
|
||||
(ClientData)&offset : (ClientData)NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case SETLABEL_ROTATE:
|
||||
if (cmd->tx_argc == 3)
|
||||
if (locargc == 3)
|
||||
{
|
||||
if (StrIsInt(cmd->tx_argv[2]))
|
||||
rotate = atoi(cmd->tx_argv[2]);
|
||||
if (StrIsInt(cmd->tx_argv[argstart + 1]))
|
||||
rotate = atoi(cmd->tx_argv[argstart + 1]);
|
||||
}
|
||||
if (EditCellUse)
|
||||
if (doDefault)
|
||||
{
|
||||
if (locargc == 2)
|
||||
{
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_SetObjResult(magicinterp,
|
||||
Tcl_NewIntObj(DefaultLabel->lab_rotate));
|
||||
#else
|
||||
TxPrintf("%d\n", DefaultLabel->lab_rotate);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
DefaultLabel->lab_rotate = rotate;
|
||||
}
|
||||
else if (EditCellUse)
|
||||
{
|
||||
SelEnumLabels(&DBAllTypeBits, TRUE, (bool *)NULL,
|
||||
cmdLabelRotateFunc, (cmd->tx_argc == 3) ?
|
||||
cmdLabelRotateFunc, (locargc == 3) ?
|
||||
(ClientData)&rotate : (ClientData)NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case SETLABEL_STICKY:
|
||||
if (cmd->tx_argc == 3)
|
||||
if (locargc == 3)
|
||||
{
|
||||
option = Lookup(cmd->tx_argv[2], cmdLabelYesNo);
|
||||
option = Lookup(cmd->tx_argv[argstart + 1], cmdLabelYesNo);
|
||||
if (option < 0)
|
||||
{
|
||||
TxError("Unknown sticky option \"%s\"\n", cmd->tx_argv[2]);
|
||||
TxError("Unknown sticky option \"%s\"\n", cmd->tx_argv[argstart + 1]);
|
||||
break;
|
||||
}
|
||||
flags = (option <= 3) ? 0 : LABEL_STICKY;
|
||||
}
|
||||
if (EditCellUse)
|
||||
if (doDefault)
|
||||
{
|
||||
if (locargc == 2)
|
||||
{
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_SetObjResult(magicinterp,
|
||||
Tcl_NewBooleanObj((DefaultLabel->lab_flags &
|
||||
LABEL_STICKY) ? TRUE : FALSE));
|
||||
#else
|
||||
TxPrintf("%d\n", (DefaultLabel->lab_flags & LABEL_STICKY) ? 1 : 0);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
DefaultLabel->lab_flags = flags;
|
||||
}
|
||||
else if (EditCellUse)
|
||||
{
|
||||
SelEnumLabels(&DBAllTypeBits, TRUE, (bool *)NULL,
|
||||
cmdLabelStickyFunc, (cmd->tx_argc == 3) ?
|
||||
cmdLabelStickyFunc, (locargc == 3) ?
|
||||
(ClientData)&flags : (ClientData)NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case SETLABEL_LAYER:
|
||||
if (cmd->tx_argc == 3)
|
||||
if (locargc == 3)
|
||||
{
|
||||
if (!strcasecmp(cmd->tx_argv[2], "default"))
|
||||
if (!strcasecmp(cmd->tx_argv[argstart + 1], "default"))
|
||||
ttype = -1;
|
||||
else
|
||||
{
|
||||
ttype = DBTechNoisyNameType(cmd->tx_argv[2]);
|
||||
ttype = DBTechNoisyNameType(cmd->tx_argv[argstart + 1]);
|
||||
if (ttype < 0) break;
|
||||
}
|
||||
}
|
||||
if (EditCellUse)
|
||||
if (doDefault)
|
||||
{
|
||||
if (locargc == 2)
|
||||
{
|
||||
if (DefaultLabel->lab_type == (TileType)(-1))
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_SetResult(magicinterp, "default", TCL_VOLATILE);
|
||||
#else
|
||||
TxPrintf("default\n");
|
||||
#endif
|
||||
else
|
||||
#ifdef MAGIC_WRAPPER
|
||||
Tcl_SetResult(magicinterp,
|
||||
DBTypeLongNameTbl[DefaultLabel->lab_type],
|
||||
TCL_VOLATILE);
|
||||
#else
|
||||
TxPrintf("%s\n", DBTypeLongNameTbl[DefaultLabel->lab_type]);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
DefaultLabel->lab_type = ttype;
|
||||
}
|
||||
else if (EditCellUse)
|
||||
{
|
||||
SelEnumLabels(&DBAllTypeBits, TRUE, (bool *)NULL,
|
||||
cmdLabelLayerFunc, (cmd->tx_argc == 3) ?
|
||||
cmdLabelLayerFunc, (locargc == 3) ?
|
||||
(ClientData)&ttype : (ClientData)NULL);
|
||||
}
|
||||
break;
|
||||
|
|
@ -2151,7 +2313,7 @@ CmdSetLabel(w, cmd)
|
|||
break;
|
||||
|
||||
default:
|
||||
TxError("Unknown setlabel option \"%s\"\n", cmd->tx_argv[1]);
|
||||
TxError("Unknown setlabel option \"%s\"\n", cmd->tx_argv[argstart]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue