123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- MODULE StdViewSizer;
- (* THIS IS TEXT COPY OF BlackBox 1.6-rc6 Std/Mod/ViewSizer.odc *)
- (* DO NOT EDIT *)
- IMPORT Services, Ports, Dialog, Views, Containers, Properties;
- CONST width = 1; height = 2;
- VAR
- size*: RECORD
- typeName-: Dialog.String;
- w*, h*: REAL;
- proportional*, fixedW, fixedH: BOOLEAN;
- unit, scaleW, scaleH, lastChanged: INTEGER;
- unitText: ARRAY 6 OF CHAR;
- view: Views.View;
- container: Containers.Controller
- END;
- PROCEDURE ConnectDialog (v: Views.View; c: Containers.Controller);
- VAR pref: Properties.ResizePref;
- BEGIN
- IF (v # NIL) & (v.context # NIL) THEN
- IF Dialog.metricSystem THEN size.unit := Ports.mm * 10; size.unitText := "cm"
- ELSE size.unit := Ports.inch; size.unitText := "inch"
- END;
- size.view := v; size.container := c;
- Services.GetTypeName(v, size.typeName);
- v.context.GetSize(size.scaleW, size.scaleH);
- size.w := size.scaleW / size.unit; size.h := size.scaleH / size.unit;
- pref.fixed := FALSE;
- pref.horFitToPage := FALSE; pref.verFitToPage := FALSE;
- pref.horFitToWin := FALSE; pref.verFitToWin := FALSE;
- Views.HandlePropMsg(v, pref);
- size.fixedW := pref.fixed;
- size.fixedH := pref.fixed;
- size.proportional := FALSE
- ELSE
- size.view := NIL; size.container := c; size.typeName := ""
- END;
- Dialog.Update(size)
- END ConnectDialog;
- PROCEDURE SetViewSize*;
- BEGIN
- IF size.view # NIL THEN
- size.view.context.SetSize(SHORT(ENTIER(size.w * size.unit + 0.5)),
- SHORT(ENTIER(size.h * size.unit + 0.5)));
- IF size.container # NIL THEN size.container.SetSingleton(size.view) END;
- ConnectDialog(size.view, size.container)
- ELSE Dialog.Beep
- END
- END SetViewSize;
- PROCEDURE InitDialog*;
- VAR v: Views.View; c: Containers.Controller;
- BEGIN
- c := Containers.Focus();
- IF c # NIL THEN v := c.Singleton() ELSE v := NIL END;
- IF (v # size.view) OR (c # size.container) THEN ConnectDialog(v, c) END
- END InitDialog;
- PROCEDURE ResetDialog*;
- VAR proportional: BOOLEAN; v: Views.View;
- BEGIN
- proportional := size.proportional; v := size.view;
- size.view := NIL; InitDialog;
- IF proportional & (v = size.view) THEN size.proportional := TRUE; Dialog.Update(size) END
- END ResetDialog;
- PROCEDURE WidthGuard* (VAR par: Dialog.Par);
- BEGIN
- InitDialog;
- par.disabled := size.view = NIL;
- par.readOnly := size.fixedW
- END WidthGuard;
- PROCEDURE HeightGuard* (VAR par: Dialog.Par);
- BEGIN
- InitDialog;
- par.disabled := size.view = NIL;
- par.readOnly := size.fixedH
- END HeightGuard;
- PROCEDURE ProportionGuard* (VAR par: Dialog.Par);
- BEGIN
- par.disabled := (size.view = NIL) OR size.fixedW OR size.fixedH OR (size.scaleW = 0) OR (size.scaleH = 0)
- END ProportionGuard;
- PROCEDURE UnitGuard* (VAR par: Dialog.Par);
- BEGIN
- IF size.view # NIL THEN par.label := size.unitText$ ELSE par.label := "" END
- END UnitGuard;
- PROCEDURE AdjustDialogToPref (fixedW, fixedH: BOOLEAN);
- VAR w, h: INTEGER; w0, h0: REAL; pref: Properties.SizePref;
- BEGIN
- w := SHORT(ENTIER(size.w * size.unit + 0.5)); h := SHORT(ENTIER(size.h * size.unit + 0.5));
- IF size.proportional & (w > 0) & (h > 0) & (size.scaleW > 0) & (size.scaleH > 0) THEN
- Properties.ProportionalConstraint(size.scaleW, size.scaleH, fixedW, fixedH, w, h)
- END;
- pref.w := w; pref.h := h; pref.fixedW := fixedW; pref.fixedH := fixedH;
- Views.HandlePropMsg(size.view, pref);
- IF ~fixedW THEN w0 := pref.w / size.unit ELSE w0 := size.w END;
- IF ~fixedH THEN h0 := pref.h / size.unit ELSE h0 := size.h END;
- IF (w0 # size.w) OR (h0 # size.h) THEN size.w := w0; size.h := h0; Dialog.Update(size) END
- END AdjustDialogToPref;
- PROCEDURE WNotifier* (op, from, to: INTEGER);
- BEGIN
- IF size.w > 0 THEN AdjustDialogToPref(TRUE, FALSE); size.lastChanged := width
- ELSIF size.w # 0 THEN Dialog.Beep
- END
- END WNotifier;
- PROCEDURE HNotifier* (op, from, to: INTEGER);
- BEGIN
- IF size.h > 0 THEN AdjustDialogToPref(FALSE, TRUE); size.lastChanged := height
- ELSIF size.h # 0 THEN Dialog.Beep
- END
- END HNotifier;
- PROCEDURE ProportionNotifier* (op, from, to: INTEGER);
- BEGIN
- IF (op = Dialog.changed) & size.proportional THEN
- IF size.lastChanged = width THEN AdjustDialogToPref(TRUE, FALSE)
- ELSIF size.lastChanged = height THEN AdjustDialogToPref(FALSE, TRUE)
- END
- END
- END ProportionNotifier;
- END StdViewSizer.
|