Squeak/Smalltalk: Creating new SystemWindow
It’s very easy to get started with Squeak/Smalltalk. You can use Workspace
and Transcript
for basic programming tasks. But soon you need your own user interface, and it’s good to get started with the SystemWindow
object in this case.
Here is some Smalltalk code that can help you create and display a SystemWindow
.
Code
window := SystemWindow new.
window setLabel:'New Window'.
pasteUpMorph := PasteUpMorph new.
pasteUpMorph extent: 640@480.
window addMorph: pasteUpMorph frame: (0@0 corner: 1@1).
window openInWorld.
Screenshot
Here is another code example with scrollPane.
window := SystemWindow new.
scrollPane := ScrollPane new.
pasteUpMorph := PasteUpMorph new.
pasteUpMorph extent: 1000@1000.
scrollPane scroller addMorph: pasteUpMorph.
window addMorph: scrollPane frame: (0@0 corner: 1@1).
window openInWorld.
Screenshot
Definations
ScrollPane
The scroller
(a transform) of a scrollPane
is driven by the scrollBar
. The scroll values vary from 0.0, meaning zero offset to 1.0 meaning sufficient offset such that the bottom of the scrollable material appears 3/4 of the way down the pane. The total distance to achieve this range is called the totalScrollRange
.
PasteUpMorph
A morph whose submorphs comprise a paste-up of rectangular subparts which “show through”. Anything called a ‘Playfield’ is a PasteUpMorph
.
Facilities commonly needed on pages of graphical presentations and on simulation playfields, such as the painting of new objects, turtle trails, gradient fills, background paintings, parts-bin behavior, collision-detection, etc., are (or will be) provided.
A World, the entire Smalltalk screen, is a PasteUpMorph
. A World responds true
to isWorld
. Morph
subclasses that have specialized menus (BookMorph
) build them in the message addBookMenuItemsTo:hand:
. A PasteUpMorph
that is a world, builds its menu in HandMorph buildWorldMenu
.
SystemWindow
SystemWindow
is the Morphic equivalent of StandardSystemView
— a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing.
The attribute onlyActiveOnTop
, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.
Conclusion
I hope this is helpful. This window object opens many opportunities for creating UI elements and drawing. I look forward to follow this up with more articles that show how to draw on a window.
Looking forward to your feedback and questions.