Model Type
Record fields
| Record Field | Description |
Full Usage:
ArrayCopiesTyped
Field type: (string * string) option
|
What the array component Properties pane's Copies box is showing, while somebody is typing in it, paired with the sheet they are typing it on. Held here rather than left in the DOM because the box must NOT apply as it is typed: how many copies an array component has decides how many ports it has, so every keystroke would make every instance of it out of date - typing 12 over 4 would pass through 1 on the way, briefly making it an array of one copy and telling every instance so. It applies when the box is left, or on Enter. The sheet's name goes with the text so that a half-typed number cannot be shown on some other sheet's box: leaving a sheet is not something the box gets told about.
|
Full Usage:
BuildVisible
Field type: bool
|
|
Full Usage:
CatalogueSearch
Field type: string
|
|
|
|
|
|
|
|
|
|
Full Usage:
ConnsOfSelectedWavesAreHighlighted
Field type: bool
|
|
|
|
|
|
|
|
|
|
|
The data viewport as the checks last derived it, with when it last CHANGED. The pair exists for one question the derivation alone cannot answer - how long has THIS viewport been waiting to be served - which is what the stale banner is about: it shows when the viewport is still unserved (differs from FetchedData; an error reply never updates that, so an errored fetch counts as still outstanding) for longer than any healthy fetch takes, measured from this stamp. A viewport change - a scroll, a hover - resets the clock, so starting a fetch can never look stale for the frames it is in flight.
|
|
|
|
|
|
|
|
The data viewport the last COMPLETED fetch was for - None until one completes under the current session. The fetch decision is `dataViewportOf model <> FetchedData`; nothing clears this on rebuild because the epoch inside the viewport makes a rebuild an inequality (EndSimulation clears it as hygiene only).
|
|
|
|
|
Full Usage:
IsLoading
Field type: bool
|
|
|
Which pane last received a mouse-down, and so where unmodified keys go. Set on mouse-down only - never on mouse-move - so it cannot change under the user's hand while they are typing. It replaces a flag set from the pointer's position on every mouse move, which was stale whenever the pointer had not moved and measured against the wave simulator's divider whichever tab was actually showing.
|
Full Usage:
LastChangeCheckTime
Field type: float
|
|
|
|
|
|
Full Usage:
LastSelectedIds
Field type: string list * string list
|
|
|
|
Full Usage:
LastUsedDialogWidth
Field type: int
|
|
|
|
|
|
|
The library sheets the user has asked to look inside, by name. A library component is an abstraction and its sheet is not normally reachable at all, but understanding how one works is a fair thing to want, so an instance's right-click menu can open its sheet read-only. Held here rather than on the sheet's CCForm because Form is written to the .dgm on every save: this state is meant to last only as long as the project is open, and storing it in the file would both outlive that and let the Sheets menu's Unlock turn a library sheet into an ordinary editable one.
|
|
|
|
|
|
|
|
|
|
The value the schematic probe last read, and what was asked for to get it. In the model rather than beside it because the probe is drawn from the model, and an answer arriving anywhere else would not redraw the label it belongs to. Keyed by the wave and the cycle, so a label is drawn only where the value on screen is the value that was asked for - which is what stops the previous wire's value appearing under the pointer on this one.
|
|
|
|
What the open sheet's draw block is pinned to, when it is one of the above and has finished loading. None for every ordinary sheet, and while a read-only one is still loading - loading legitimately changes the canvas, recomputing symbol sizes, rerouting wires whose ports moved and centring the circuit, so the pin cannot be armed until that has settled. See ModelHelpers.pinDrawBlock.
|
|
|
|
|
Full Usage:
SavedSheetIsOutOfDate
Field type: bool
|
|
|
|
|
|
Full Usage:
SheetMenuPinned
Field type: bool
|
The Sheet menu is normally dismissed by clicking anywhere outside it - a sheet in it, or the schematic. Pinned, it stays open until the pin is clicked again, so that a design can be navigated with the hierarchy in view. Sheets fitted while it is pinned are sized to the canvas beside it rather than to the whole canvas - see Sheet.getWindowParasToFitBox.
|
Full Usage:
ShowLibrarySheets
Field type: bool
|
|
Full Usage:
SidecarBuildEndedMs
Field type: float
|
When the .NET simulator's last build reply landed, ms on the performance clock. With SidecarRunEndedMs, what the stale-waveform warning times itself from: the warning must not count time spent building or simulating - both have their own feedback - so its clock starts at whichever came last of the view changing and these two ending. Zero when no such thing has happened, which max then ignores.
|
|
Every asynchronous operation asked of the .NET simulator and not yet answered, by the number it was asked under. **This is what makes synchronous interrogation safe.** A synchronous operation may go out only when this is empty, and two synchronous operations cannot overlap, because one runs to completion on the renderer's single thread before anything else runs. Those two facts together are why nothing here needs a priority queue, a dispatch lock, or preemption: a synchronous operation never waits behind an asynchronous one, because it is never issued while one exists. |
Full Usage:
SidecarRunEndedMs
Field type: float
|
|
|
|
|
|
Full Usage:
SimulateInRenderer
Field type: bool
|
Whether the sheets of placed library components appear in the Sheets menu. False at startup and not settable from the ordinary UI: a library component is meant to be one thing, and seeing its innards listed beside the user's own sheets is confusing rather than informative. It is worth having for anyone writing a library, who does need to see what a component brought with it. The waveform simulator ignores this: library sheets are never offered there. Run simulation in the renderer instead of the .NET sidecar. DEPRECATED, and false by default: the sidecar is the simulator. It builds a simulation against the machine's memory rather than a browser heap, so it reaches cycle counts the renderer cannot, and it simulates roughly twice as fast on the designs that take long enough to care (docs/dev/sidecarSimulation.md has the measurements). The renderer's own simulator is kept for development - it is what the sidecar's results are checked against, and the only one the algebraic (FData) path and truth tables have - and is expected to be removed once the sidecar has been trusted for a while. Switchable only from Development > Simulation, and only while nothing is simulating: changing it throws away every simulation in flight, since the two backends do not share so much as a step array.
|
|
|
|
The cycle a step-simulation run is heading for, when one is - with where it started, for the progress bar. Model state, not a loop: after every message the update pipeline sees this set, the wire free and the clock short of the target, and issues ONE chunk. Cleared when the clock arrives, when the progress popup is closed (which is what Cancel is), and when the simulation ends.
|
Full Usage:
StimulusGeneration
Field type: int
|
|
Full Usage:
SuppressErrorPopups
Field type: bool
|
|
|
|
|
|
|
|
Full Usage:
UISheetTrail
Field type: string list
|
|
|
|
|
|
Full Usage:
ViewportChangedAtMs
Field type: float
|
|
Full Usage:
WaveScrollSerial
Field type: int
|
|
Full Usage:
WaveScrollSettling
Field type: bool
|
True from a horizontal scroll of the waveform viewer until it has been still for Constants.runBannerAfterScrollMs, carrying the serial number of the scroll that set it. The run banner shows nothing while it holds - scrolling into cycles that have not been simulated starts a run every time, and a banner that flashes on each step of a drag is noise. The serial is what makes the wait restartable: the WaveScrollSettled message carries the serial it was armed for, so the timer from an earlier step of a drag cannot put the banner back up under a later one.
|
|
|
Full Usage:
WaveSimSheet
Field type: string option
|
|
Full Usage:
WaveSimViewerWidth
Field type: int
|
|
Full Usage:
WindowWidth
Field type: float
|
The width of the app window in CSS pixels, as the browser last reported it. An external input, like a key or the pointer's position: it arrives on the window's resize event - which a change of web zoom also fires - and nothing else writes it. It is in the model rather than measured where it is wanted because a render happens only when the model changes, so a view that reads the window directly stands still until something unrelated happens to it.
|
Instance members
| Instance member | Description |
Full Usage:
this.WaveSimOrCurrentSheet
Returns: string
|
|