Files
magic/dbwind/dbwind.h
T
R. Timothy Edwards 27c423c2ed Substantially revised the "macro" command callback functions and
the "tool" implementation.  Previously, the "tool" implementation
would overwrite the button bindings for the mouse.  The problem
with that is that if the user customizes one or more of the
bindings, such as using the mouse wheel for zooming instead of
panning, then the custom macro gets obliterated when the tool
changes.  The reimplementation creates multiple macro sets which
are unique to each tool.  The "enable_tools" function sets up
the initial unique default bindings for each tool.  The user
can then customize the bindings for any tool, and the
implementation no longer requires the constant changing of key
bindings.  Note that the new implementation is slightly less
efficient because the macro tables are found by string hash
based on the name of the tool or client type, not the integer
client ID.  The reduction in efficiency is balanced by the
increased flexibility of the macros.
2025-10-09 15:43:54 -04:00

266 lines
8.5 KiB
C

/*
* dbwind.h --
*
* Interface definitions for the 'glue' between the window
* manager and the database.
*
* *********************************************************************
* * Copyright (C) 1985, 1990 Regents of the University of California. *
* * Permission to use, copy, modify, and distribute this *
* * software and its documentation for any purpose and without *
* * fee is hereby granted, provided that the above copyright *
* * notice appear in all copies. The University of California *
* * makes no representations about the suitability of this *
* * software for any purpose. It is provided "as is" without *
* * express or implied warranty. Export of this software outside *
* * of the United States of America may require an export license. *
* *********************************************************************
*
*
* rcsid $Header: /usr/cvsroot/magic-8.0/dbwind/dbwind.h,v 1.1.1.1 2008/02/03 20:43:50 tim Exp $
*/
#ifndef _MAGIC__DBWIND__DBWIND_H
#define _MAGIC__DBWIND__DBWIND_H
#include "database/database.h"
#include "windows/windows.h"
#include "textio/txcommands.h" /* TxCommand */
/*--------------------------- Window Client Data ----------------------------
* The dbwind package keeps special client data that it uses to
* manage windows on the database.
*/
typedef struct DBW1 {
int dbw_bitmask; /* A single bit in a word, unique between all
* layout windows. Any cell that is expanded
* in this window has this bit set in its
* expand mask.
*/
int dbw_flags; /* Various flags, see below. */
int dbw_watchPlane; /* The plane number of a plane to watch
* (show tile structure)
*/
CellDef *dbw_watchDef; /* The name of a celldef to watch */
Transform dbw_watchTrans; /* A transform to root coordinates that
* uniquely identifies the -position- of
* the cell use being watched, in the root
* cell of the window.
*/
Rect dbw_expandAmounts; /* The sides of this rectangle are expanded
* out from the origin by the same amount
* that a redisplayed area should be expanded
* in order to catch all labels. This
* reflects the size of the largest label
* displayed anywhere in the window.
*/
TileTypeBitMask dbw_visibleLayers;
/* This bit mask tells which mask layers
* should be displayed on the screen.
*/
Plane *dbw_hlErase; /* ERROR_P tiles on this plane record highlight
* areas that must be erased in this window,
* in screen coordinates.
*/
Plane *dbw_hlRedraw; /* ERROR_P tiles on this plane record highlight
* areas that must be redrawn in this window, in
* root database coordinates.
*/
Rect dbw_gridRect; /* Defines grid in world coordinates: grid
* lines run along sides of rect, rect size
* determines spacing.
*/
int dbw_labelSize; /* What size to use for text when drawing
* labels in this window (e.g. GR_TEXT_SMALL).
* This is recomputed each time the window
* is completely redrawn. -1 means don't
* draw labels at all.
*/
Rect dbw_surfaceArea; /* This field and the next two that follow
* are just copies of the corresponding
* fields from window records. They're used
* to detect when a window has resized or
* rescaled.
*/
Point dbw_origin;
int dbw_scale;
} DBWclientRec;
/* Flag values for dbw_flags:
*
* DBW_GRID: Means grid is to be displayed in window.
* DBW_WATCHDEMO: Use `demo' style of watching (arrows, not addresses)
* DBW_ALLSAME: Means don't use different display styles for
* edit and other cells.
* DBW_SEELABELS: 0 means don't display labels ever.
* DBW_SEECELLS 0 means don't display cell names and bounding boxes
* DBW_SEETYPES display tiletype instead of tile address
*/
#define DBW_GRID 1
#define DBW_WATCHDEMO 2
#define DBW_ALLSAME 4
#define DBW_SEELABELS 010
#define DBW_SEECELLS 020
#define DBW_SEETYPES 040
/*
* exported variables
*
*/
extern WindClient DBWclientID;
extern int DBWSnapToGrid;
extern int DBWMaxTechStyles;
extern int DBWMaxTileStyles;
extern int DBWNumStyles;
extern int RtrPolyWidth, RtrMetalWidth, RtrContactWidth;
/*
* Exported procedure headers for redisplay
*/
extern int DBWWatchTiles();
extern void DBWAreaChanged();
extern void DBWLabelChanged();
extern void DBWDrawLabel();
/*
* Exported procedures and variables related to the technology file
*/
extern void DBWTechInitStyles();
extern bool DBWTechAddStyle();
extern char *DBWStyleType;
/*
* exported button procedures and variables
*/
extern void (*DBWButtonCurrentProc)();
typedef void (*cb_database_buttonhandler_t)(MagWindow *w, TxCommand *cmd);
extern void DBWAddButtonHandler(const char *name, const cb_database_buttonhandler_t proc,
int cursor, const char *doc);
extern char *DBWGetButtonHandler();
extern char *DBWChangeButtonHandler();
extern void DBWPrintButtonDoc();
extern void DBWBoxHandler();
/* The following values are flags passed to DBWloadWindow() */
#define DBW_LOAD_IGNORE_TECH 1 /* Force load even if tech line does not match */
#define DBW_LOAD_EXPAND 2 /* Expand cell after loading */
#define DBW_LOAD_DEREFERENCE 4 /* Dereference instance file paths when loading */
#define DBW_LOAD_FAIL 8 /* Do not create new cell if file is not loadable */
#define DBW_LOAD_QUIET 16 /* Suppress error messages during load */
/* The following defines are used to indicate corner positions
* of the box:
*/
#define TOOL_BL 0
#define TOOL_BR 1
#define TOOL_TR 2
#define TOOL_TL 3
#define TOOL_ILG -1
/* The following defines are used to indicate which coordinate system
* the cursor box snaps to when moved with mouse clicks (values for
* DBWSnapToGrid).
*/
#define DBW_SNAP_INTERNAL 0 /* internal units (fine grid) */
#define DBW_SNAP_LAMBDA 1 /* lambda units (coarse grid) */
#define DBW_SNAP_USER 2 /* user grid units (user grid) */
#define DBW_SNAP_MICRONS 3 /* micron units */
/* The following window mask can be used to select all database windows
* for things like the mask parameter to DBWAreaChanged.
*/
#define DBW_ALLWINDOWS -1
extern MagWindow *ToolGetPoint();
extern MagWindow *ToolGetBoxWindow();
extern bool ToolGetBox();
extern void ToolSnapToGrid();
extern bool ToolGetEditBox(Rect *);
extern void ToolMoveBox(), ToolMoveCorner();
extern int ToolGetCorner();
extern void DBWloadWindow(), DBWxloadWindow();
extern void DBWSetBox();
extern void DBWResetBox();
extern void DBWUndoOldEdit();
extern void DBWUndoNewEdit();
/* Exported procedures for managing highlights: */
extern void DBWHLAddClient();
extern void DBWHLRemoveClient();
extern void DBWHLRedraw();
extern int DBWHLRedrawWind();
extern void DBWDrawBox();
extern void DBWDrawCrosshair();
/* Exported procedures and variables relating to feedback: */
extern int DBWFeedbackCount;
extern void DBWFeedbackClear();
extern void DBWFeedbackAdd();
extern char *DBWFeedbackNth();
/* Exported procedures and variables relating to elements: */
/* flag fields for all elements (8 bits maximum) */
#define DBW_ELEMENT_PERSISTENT 0x01
#define DBW_ELEMENT_TEXT_SIZE 0x0e /* 3 bits (5 text sizes) */
#define DBW_ELEMENT_TEXT_POS 0xf0 /* 4 bits (9 positions) */
#define DBW_ELEMENT_LINE_HALFX 0x02 /* Add 1/2 to X position */
#define DBW_ELEMENT_LINE_HALFY 0x04 /* Add 1/2 to Y position */
#define DBW_ELEMENT_LINE_ARROWL 0x08 /* Add arrowhead left/bottom */
#define DBW_ELEMENT_LINE_ARROWR 0x10 /* Add arrowhead top/right */
extern void DBWElementAddRect();
extern void DBWElementAddLine();
extern void DBWElementAddText();
extern void DBWElementDelete();
extern void DBWElementNames();
extern void DBWElementInbox();
extern void DBWElementClearDef();
extern void DBWElementParseFlags();
extern char *DBWPrintElements();
extern void DBWScaleElements();
extern void DBWScaleCrosshair();
/* C99 compat */
extern void DBWreload();
extern void DBWInitCommands();
extern void dbwUndoInit();
extern void dbwFeedbackInit();
extern void DBWElementPos();
extern bool DBCellDeleteUse();
extern void DBWHLRedrawPrepWindow();
extern void CmdInit();
extern void DBWinit();
extern int DBWTechParseStyle();
extern void dbwButtonSetCursor();
/* Random procedures used internally to this module. None of these
* should ever need to be called by the outside world.
*/
extern void DBWCheckBoxDisplay();
extern void DBWUndoBox();
extern void DBWHLUpdate();
extern void DBWFeedbackShow();
extern void dbwElementInit();
extern void dbwCrosshairInit();
#endif /* _MAGIC__DBWIND__DBWIND_H */