# # $Id: staticspin.icn,v 1.3 2004/11/13 20:27:37 rparlett Exp $ # # This file is in the public domain. # # Author: Robert Parlett (parlett@dial.pipex.com) # package gui link graphics $include "guih.icn" class SpinLabel:Label() method handle_event(e) if \self.has_focus then { if e === Key_Up then parent.go_up(e) else if e === Key_Down then parent.go_down(e) } end end # # This class is the base class for non-editable spin components which use # a Label to display the current value. # class StaticSpin : Spin(lab) method resize() local bh, bw /self.h_spec := WAttrib(self.cwin, "fheight") + 2 * DEFAULT_TEXT_Y_SURROUND self.Component.compute_absolutes() bw := self.h - 2 * BORDER_WIDTH bh := bw / 2 # # Set buttons position and size # up.set_pos(self.w - BORDER_WIDTH - bw, BORDER_WIDTH) up.set_size(bw, bh) up.resize() down.set_pos(self.w - BORDER_WIDTH - bw, BORDER_WIDTH + bh) down.set_size(bw, bh) down.resize() # # Set Label position and size # lab.set_pos(BORDER_WIDTH + DEFAULT_TEXT_X_SURROUND, BORDER_WIDTH) lab.set_size(self.w - bw - 2 * BORDER_WIDTH - 2 * DEFAULT_TEXT_X_SURROUND, self.h - 2 * BORDER_WIDTH) lab.resize() end method display(buffer_flag) # # Draw text element # EraseRectangle(self.cbwin, self.x, self.y, self.w, self.h) DrawSunkenRectangle(self.cbwin, self.x, self.y, self.w, self.h) # # Draw button and list # self.up.display(1) self.down.display(1) self.lab.display(1) self.do_shading(self.cbwin) if /buffer_flag then CopyArea(self.cbwin, self.cwin, self.x, self.y, self.w, self.h, self.x, self.y) end # # Manage our own focus/accelerator handling so that the textfield always gets the focus. # method find_focus() if self.is_unshaded() & self.in_region() & self.is_unhidden() then return lab end method find_accel(e) if self.Component.find_accel(e) then return lab end initially() self.Spin.initially() self.lab := SpinLabel() self.lab.set_accepts_focus() self.lab.set_label("") self.add(lab) end