diff options
Diffstat (limited to 'module/prefab.m')
| -rw-r--r-- | module/prefab.m | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/module/prefab.m b/module/prefab.m new file mode 100644 index 00000000..95d0f62e --- /dev/null +++ b/module/prefab.m @@ -0,0 +1,113 @@ +Prefab: module +{ + PATH: con "$Prefab"; + + # types of Elements + EIcon: con 0; + EText: con 1; + ETitle: con 2; + EHorizontal: con 3; + EVertical: con 4; + ESeparator: con 5; + + # first arg to Element.adjust: size of elements + Adjpack: con 10; # leave alone, pack tightly + Adjequal: con 11; # make equal + Adjfill: con 12; # make equal, filling available space + + # second arg: position of element within space + Adjleft: con 20; + Adjup: con 20; + Adjcenter: con 21; + Adjright: con 22; + Adjdown: con 22; + + # default fonts and colors for objects + Style: adt + { + titlefont: ref Draw->Font; + textfont: ref Draw->Font; + elemcolor: ref Draw->Image; + edgecolor: ref Draw->Image; + titlecolor: ref Draw->Image; + textcolor: ref Draw->Image; + highlightcolor: ref Draw->Image; + }; + + # drawing environment for objects + Environ: adt + { + screen: ref Draw->Screen; + style: ref Style; + }; + + # operand for layout operators; set either (font, color, text) or (icon, mask) + Layout: adt + { + font: ref Draw->Font; + color: ref Draw->Image; + text: string; + icon: ref Draw->Image; + mask: ref Draw->Image; + tag: string; + }; + + # graphical objects in the interface, recursively defined for making lists + Element: adt + { + # part of Ell elements + kind: int; # type: EIcon, EText, etc. + r: Draw->Rect; # rectangle on screen + environ: ref Environ; # graphics screen, style + tag: string; # identifier for selection + + # different fields defined for different kinds of Elements + kids: list of ref Element; # children of EHorizontal, EVertical + str: string; # text in an EText element + mask: ref Draw->Image; # part of Eicon, ESeparator + image: ref Draw->Image; # part of Eicon, ESeparator, EText, Etitle + font: ref Draw->Font; # part of EText, Etitle + + # constructors + icon: fn(env: ref Environ, r: Draw->Rect, icon, mask: ref Draw->Image): ref Element; + text: fn(env: ref Environ, text: string, r: Draw->Rect, kind: int): ref Element; + layout: fn(env: ref Environ, lay: list of Layout, r: Draw->Rect, kind: int): ref Element; + elist: fn(env: ref Environ, elem: ref Element, kind: int): ref Element; + separator: fn(env: ref Environ, r: Draw->Rect, icon, mask: ref Draw->Image): ref Element; + + # editing and geometry + append: fn(elist: self ref Element, elem: ref Element): int; + adjust: fn(elem: self ref Element, equal: int, dir: int); + clip: fn(elem: self ref Element, r: Draw->Rect); + scroll: fn(elem: self ref Element, d: Draw->Point); + translate: fn(elem: self ref Element, d: Draw->Point); + show: fn(elist: self ref Element, elem: ref Element): int; + }; + + # connects an element to a window for display + Compound: adt + { + image: ref Draw->Image; # window on which contents are drawn + environ: ref Environ; # graphics screen, style + r: Draw->Rect; # rectangle on screen + title: ref Element; # above the line (may be nil) + contents: ref Element; # below the line + + # constructors + iconbox: fn(env: ref Environ, p: Draw->Point, title: string, icon, mask: ref Draw->Image): ref Compound; + textbox: fn(env: ref Environ, r: Draw->Rect, title, text: string): ref Compound; + layoutbox:fn(env: ref Environ, r: Draw->Rect, title: string, lay: list of Layout): ref Compound; + box: fn(env: ref Environ, p: Draw->Point, title, elist: ref Element): ref Compound; + + # display + draw: fn(comp: self ref Compound); + redraw: fn(comp: self ref Compound, r: Draw->Rect); + scroll: fn(comp: self ref Compound, elem: ref Element, d: Draw->Point); + show: fn(comp: self ref Compound, elem: ref Element): int; + + # support for using EHorizontal and EVertical as menus + select: fn(comp: self ref Compound, elem: ref Element, i: int, c: chan of int): (int, int, ref Element); + tagselect: fn(comp: self ref Compound, elem: ref Element, i: int, c: chan of int): (int, int, ref Element); + highlight: fn(comp: self ref Compound, elem: ref Element, on: int); + }; +}; |
