Releases: MorquinDevlar/mdw
Releases · MorquinDevlar/mdw
Release list
v0.9.6
Fixed
mdw.swapPackageno longer reports success for a swap Mudlet refused: while a
profile save blocks the uninstall it retries for up to 15 seconds, and it
returns"retrying"or"queued"as a second value while the swap is still
pending.
v0.9.5
Changed
mdw.setWidgetRowsandmdw.setPromptGaugeValueno longer reach Qt for a
value, label or row position that has not changed, so repainting on every
GMCP push costs nothing between changes.
v0.9.4
Added
- Floats snap to each other and travel together; an edge-attached float leads.
- Resizing a float snaps its dragged border to nearby floats and the area edges.
Changed
- A joined float snaps only against the float it is joined to.
- An attached float lights only the border on the side it is attached to.
mdw.config.floatSnapGapis 7 (was 2), matching the edge clearance.
v0.9.3
Added
mdw.addHeaderMenu(spec)/mdw.removeHeaderMenu(id)/mdw.headerMenus():
a game package can hang a dropdown of its own in the header bar, beside Font
Size and Theme, for choices that are a set rather than a single gear row.
Rows take the context menu's shape (label,onClick,separator,
checked,keepOpen),itemsmay be a function re-evaluated on every open,
and menus are owner-stamped and reaped with the package like widgets and gear
rows. Game menus follow MDW's own buttons, so none of them move.- Header menus (
mdw.addHeaderMenu) accept atype = "slider"row: dragged
rather than clicked, taking the same fields as a widget slider row and
going through the same gesture code, so a menu can carry a volume or
brightness control. The menu stays open while the pointer is down. - A header-menu row can be built from SEGMENTS laid left to right -
parts,
each a label, a slider or a checkbox with its own click target, one of them
flexto take the width the others leave. "Volume [====] [ ] Mute" is one
row rather than three. - A header-menu row can carry TWO actions:
onCheckruns when the checkbox
itself is clicked,onClickwhen the rest of the row is. That makes a list
row whose box and whose text mean different things - a playlist tick beside
a title that plays - without listing the same items twice. - A header-menu row that declares neither
onClicknoronCheckis inert:
no pointer cursor, no hover highlight. A caption or a hint that lit up under
the pointer read as a button that did nothing.
Changed
- Two floats dragged against each other now snap
mdw.config.floatSnapGap(2)
pixels apart instead of edge to edge, so both panels keep a visible border
instead of sharing one thick smeared line. Lining floats up (left-to-left,
right-to-right) is unchanged.
Fixed
- Clicking a checkbox or a keepOpen row in a header menu no longer throws a
Lua error. Flipping one box rebuilt the whole card, which deletes the very
label Mudlet is dispatching the click on; such a row now just re-reads its
own getters and re-echoes itself, creating and destroying nothing. The same
in-place refresh carries a re-declaration while the menu is open, so a
checkbox the game confirms a moment later still catches up on its own. - Gauge and slider rows no longer error on their first paint. A fresh Geyser
label carries no stylesheet,getLabelStyleSheetanswers nil for one, and
getLabelFormatindexes that - so the first thing to echo into a gauge's
text label (setFgColoris an echo) threw a Lua error per repaint. Both the
widget rows and the new menu sliders now style that label directly before
anything writes to it, rather than throughGeyser.Gauge:setStyleSheet,
which would need a front and a back stylesheet it has no reason to set. - An open header menu now repaints when its owner re-declares it.
itemswas
read on open only, so a menu whose rows track live game state - a checkbox
the server confirms a moment after the click - sat stale in front of the
player until they closed and reopened it, making a tick look like it landed
on the wrong row.
v0.9.2
Added
- A float left sitting on an edge of the main console area is ATTACHED to it:
it wears a lighter resize border, and it travels with that edge when the
chrome moves - a sidebar dragged wider, a sidebar or the prompt bar toggled,
a chrome bar appearing, the window resized. Each axis attaches on its own.
Attachment is read off the float's position, so one restored from the layout
on an edge is attached like a just-dragged one, and dragging it clear
detaches it.
Changed
- Snapping a float to the main console area's own edges leaves
mdw.config.floatSnapInset(5) of clearance instead of landing flush, so a
snapped panel sits a few pixels off the top bar and off the console's
scrollbar rather than against them - the clearance the left edge already got
from the dock gap. Snapping to another float is unchanged (still flush).
Fixed
- Closing a floating panel with its tab x and opening it again brings it back
where it was, instead of centring it. A sole member's x now closes its
GROUP, the way the Widgets menu already did, so nothing destroys the record
of where the panel was; a group closed as a whole also stays closed across a
profile load, which it previously did not.
v0.9.1
Added
mdw.createBartakes areflow = function(bar)callback and calls it on
every layout pass - window resize, sidebar toggle, splitter drag,
font-family change - and once as the bar is created. A bar's text now
follows a drag live, the way widget content does, instead of waiting for
the package's own ticker to repaint it. Bars without arefloware
unchanged.
Fixed
- A font-family change re-wraps and re-centers chrome bars instead of leaving
them laid out for the previous font's glyph width.
v0.9.0
Added
- Floating groups snap while they are dragged: flush to the main console
area's edges, and to the other floats' edges both ways round - lined up in a
column, or sitting side by side and stacked. The right-hand edge stops short
of the console's scrollbar, so a snapped float never covers it. The distance
ismdw.config.floatSnapDistance(8); 0 restores pixel dragging. Each axis
snaps on its own, so a float can catch the top edge and stay free sideways. mdw.mainArea()returns the main console area asx, y, width, height- the
rectanglemdw.floatPosand the snapping both measure against.mdw.restoreMainFont()hands the main console back to the family MDW
captured before it applied the game's own, falling back to Mudlet's bundled
monospace if that family has gone too. A package that BUNDLES the font MDW
renders in should call it from itssysUninstallPackagehandler: Mudlet
unloads a package's fonts while uninstalling it and then warns the player
that the profile's font is missing, and that check runs after the handler.
MDW's own full uninstall now uses the same function.
Fixed
- A floating group came back at the default corner after a package update
instead of where the player left it.saveLayouthas always recorded a
float'sx/y, butrebuildStacksFromLayoutrestored a group's dock, row,
size and active tab and never those - and for a float the position IS the
whole placement.
v0.8.2
Fixed
mdw.floatPosmeasured the main console area from a sidebar's bare width,
whereapplyBordersreserves that width plusdockGap, and took no dock gap
off the bottom either. An anchored float sat a dock gap short on those edges -
visibly so at a corner, where the top gap was right and the side gap was not.
Both now use the same arithmetic; a centred float moves by at most half a
dock gap, onto the true centre.
v0.8.1
Fixed
- A float anchored
toprightorbottomrightlanded underneath the main
console's scrollbar, which Mudlet draws inside the console's own right edge.
Right-hand anchors now keepmdw.config.mainScrollBarWidth(15) clear on top
of the margin; set it lower on a profile whose scrollbar is narrower or
hidden. Left anchors and centred floats are unchanged.
v0.8.0
Added
mdw.floatWidget(name, opts)takesopts.anchor-topleft,topright,
bottomleft,bottomrightorcenter- and an optionalopts.margin, so a
package can put a floating panel in a corner instead of the centre. The
corner is a corner of the main console area, so it follows a sidebar being
toggled or a chrome bar being added;mdw.floatPosexposes the positions on
their own. Anchored placement is exact, where a centred float still cascades
past any float already there. An anchor also repositions a group that is
already floating, which a barefloatWidgetreports asalready.