Home desktop system
Last updated at 8:12 pm UTC on 21 August 2020
https://github.com/hpi-swa-lab/home-desktop-system
The Home System is a desktop system build on top of Squeak/Smalltalk. It is based upon the idea of storing data in living objects and allowing its users to adapt it completely to their needs.
Metacello new
baseline: 'Home';
repository: 'github://hpi-swa-lab/home-desktop-system/repository';
load.
Status in Squeak 5.3
Loads fine in Squeak 5.3, but when using it a deprecation warning is issued:
Symbol>>#asMutator has been deprecated. Use #asSimpleSetter instead
Domain objects
DomainObject printHierarchy '
ProtoObject #()
Object #()
DomainObject #(''additionalState'' ''createdAt'' ''uuid'')
Agent #(''name'')
Collaboration #()
Course #(''courseName'' ''teams'')
CreativeWork #(''title'')
DiaryEntry #(''content'' ''date'')
DiaryHassle #()
GardenMap #(''pots'' ''pointInTime'')
GardenPlant #(''plantName'')
GardenPlanting #(''start'' ''end'' ''plant'')
GardenPot #(''number'' ''plantings'' ''material'' ''volume'')
Lending #(''itemDescription'' ''date'' ''borrower'')
ObjectEditorWrapperTestDomainObject #()
Person #(''fullName'' ''email'')
TeachingGroup #(''members'')
TeachingTopic #(''title'')
TestDomainObject #(''someField'')
ToDo #(''description'' ''done'' ''dueDate'' ''reminderDate'' ''scheduledFor'')'
Object editor for domain objects

Object rack app
The system uses a global object called 'TheRack' : https://github.com/hpi-swa/Rack.
It is accessed through the apps menu entry 'Object rack'.
The tool called by this menu entry is RRackTool.
Context menu operations on the domain objects
Context menu operations on the domain objects may be made available in the object rack app through a pragma (printed in bold below):
Example:
DomainObject subclass: #ToDo
instanceVariableNames: 'description done dueDate reminderDate scheduledFor'
classVariableNames: ''
poolDictionaries: ''
category: 'Home-ToDo'
The set done method of a ToDo object
setDone
<rackOperationLabel: 'set done' inContextMenus: true>
self isDone ifFalse: [
self done: true.
self changed]
Notes
The global object TheRack is an object of type RTheRack
TheRack class
RTheRack
Object subclass: #RTheRack
instanceVariableNames: 'hierarchy'
classVariableNames: ''
poolDictionaries: ''
category: 'Rack-Core'
That hierarchy instance variable holds a folder object (class RFolder) which holds entry objects (class REntry). The entries are accessed with the #entries selector and called 'boxes' in the instance variables.
Object subclass: #RFolder
instanceVariableNames: 'boxes'
classVariableNames: ''
poolDictionaries: ''
category: 'Rack-Core'
boxes are OrderedCollections
Object subclass: #REntry
instanceVariableNames: 'parent parents item label'
classVariableNames: ''
poolDictionaries: ''
category: 'Rack-Core'
An entry has a label and an item which may be any object including another RFolder object. Also it has a reference to its parent object.
There is also a parents (plural) instance variables which if not nil may point to several parents as the same entry object may appear in different folders.
From the window 'Your object rack' you may access and inspect any object and also access the code.
You may also access the contents of TheRack global in a workspace
TheRack / 'writings' / 'essays 2017' / 'on racks and boxes'
and add any object there also
TheRack / 'writings' add: 'First sketch of a new essay without a title'.
and
TheRack / 'writings' add: 'First sketch of a new essay' named: 'essay without a title yet'
There are also
remove: entryName
and
rename: entryName to: newEntryName
and just
TheRack entries
an OrderedCollection(ToDo To read)

There is also a class 'Rack' which has class methods for doing some configuration work.
The system also includes a category 'SVG-Morphic'.