83 lines
2.4 KiB
Racket
83 lines
2.4 KiB
Racket
#lang scribble/manual
|
|
|
|
@(require racket/base
|
|
racket/class
|
|
scribble/core
|
|
(for-label racket/base
|
|
racket/class
|
|
"../private/wv-window.rkt"))
|
|
|
|
@title{wv-dialog}
|
|
@author[@author+email["Hans Dijkema" "hans@dijkewijk.nl"]]
|
|
|
|
@defmodule[wv-dialog]
|
|
|
|
Dialog-window wrapper built on top of @racket[wv-window%].
|
|
|
|
This module exports the @racket[wv-dialog%] class. It is a specialized window
|
|
class whose initial size and position are derived from its parent window.
|
|
|
|
@section{Overview}
|
|
|
|
A @racket[wv-dialog%] object is a @racket[wv-window%] that initializes itself as
|
|
a dialog relative to its parent window.
|
|
|
|
The class inherits the window lifecycle, event handling, navigation, and dialog
|
|
support from @racket[wv-window%]. Its only specialization in the current source
|
|
is the implementation of @racket[init-size].
|
|
|
|
@section{Class: wv-dialog%}
|
|
|
|
@defclass[wv-dialog% wv-window% ()]{
|
|
|
|
Represents a dialog window centered relative to its parent window.
|
|
|
|
The class inherits the fields @racket[parent], @racket[settings],
|
|
@racket[wv-context], @racket[html-path], @racket[x], @racket[y],
|
|
@racket[width], and @racket[height] from @racket[wv-window%].
|
|
|
|
@defconstructor[()]{
|
|
|
|
Creates a dialog window.
|
|
|
|
The constructor does not define additional initialization arguments of its own.
|
|
Construction is delegated to @racket[wv-window%] through @racket[super-new].
|
|
}
|
|
|
|
@defmethod[(init-size) any/c]{
|
|
|
|
Initializes the dialog size and position relative to its parent window.
|
|
|
|
The method reads the parent window geometry from the inherited @racket[parent]
|
|
field:
|
|
|
|
@itemlist[#:style 'compact
|
|
@item{@racket[x] and @racket[y] of the parent window}
|
|
@item{@racket[width] and @racket[height] of the parent window}]
|
|
|
|
It then determines the dialog width and height from @racket[settings], using the
|
|
keys @racket['width] and @racket['height]. If a stored value is absent, the
|
|
constructor fields @racket[width] and @racket[height] are used if present.
|
|
Otherwise both dimensions default to @racket[400].
|
|
|
|
The dialog position is then computed so that the dialog is centered within the
|
|
parent window:
|
|
|
|
@racketblock[
|
|
(let ((xx (/ (- pw dw) 2))
|
|
(yy (/ (- ph dh) 2)))
|
|
...)
|
|
]
|
|
|
|
The resulting coordinates are rounded, converted to exact integers, and applied
|
|
using:
|
|
|
|
@racketblock[
|
|
(send this move x y)
|
|
(send this resize dw dh)
|
|
]
|
|
|
|
This method overrides the inherited @racket[init-size] implementation from
|
|
@racket[wv-window%].
|
|
}
|
|
} |