Presenty

esug 4,764 views 31 slides Sep 03, 2012
Slide 1
Slide 1 of 31
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31

About This Presentation

ESUG 2012, Ghent


Slide Content

Presenty
User Interface Application Framework
http://www.squeaksource.com/Presenty MIT license

Presenty
Separation business logic of user interface application
from presentation level

Business logic of user interface application
●Select savings account
●Select pay service
●Input pay service requisities
●Input payment amount
●Wait payment processed
●Take cheque
Sequence of domain user requests:

Business logic of user interface application
Sequence of primitive user requests:
●Select item from list
●Edit item
●Wait something
●Look at item

Presentation level
●Combo box
●Check box
●Radio button
●Context menu
●Button
●Shortcuts
●Table
●List
●Tree
Widgets:

Presentation level
●Combo box
●Check box
●Radio button
●Context menu
●Button
●Shortcut
●Table
●List
●Tree
It's all designer terminology

Classic package browser

Alt Browser

Classic browser, Alt-browser, Whisker browser, Newspeak browser
●Select package
●Select class from selected package
●Select protocol from selected class
●Select method from selected protocol
Same business logic

Classic browser, Alt-browser, Whisker browser, Newspeak browser
●Select package
●Select class from selected package
●Select protocol from selected class
●Select method from selected protocol
Same business logic
Can be presented by million ways,
by million widgets

at application programming level
●Combo box
●Check box
●Radio button
●Context menu
●Button
●Shortcut
●Table
●List
●Tree
No widgets!

Simple package browser with Presenty
PtyBrowsePackagesTask>>body
| package class method protocol |
package := user select: 'Package' from: PackageOrganizer default packages.
class := user select: 'Class' from: package classes.
protocol := user select: 'Protocol' from: class protocols.
method := user select: 'Method' from: (class methodsInProtocol: protocol).
user lookAt: method sourceCodePreviewPresenter

Browser with simple navigation

Browser with simple navigation and filtered lists
List filters

Browser with table

Browser with table and filters
List filters

Modal browser with filters and items paging
Kernel selected
Float selected
Arithmetic selected

Browser with tree
Not yet implemented

How all this work
●PtyGuide is central object which drive all application
●PtyUser presents domain user of application. It implements
domain specific requests
●user payForService
●user selectSavingsAccount
●…
●User interacts with guide to call new tasks
●Task describes business logic as sequence of user requests
●Task can call other tasks
●Task can add UI items (presenters) to view area
●UI items are presenters which connect model to view
●Task can inherit UI items from other tasks

How all this work
PtyViewAreaPresenter
●context
●items
PtyTask
●user
●guide
●activationStrategy (default)
●parentContext
●prototype
PtyTaskActivationStrategy
●context
●parentViewArea
●shouldRememberTask
●shouldForgetCompleteTask
●shouldRestoreParentArea
PtyTaskContext
●task
●continuation
●activation
parentContext
task
activation context
parentViewArea
context

How all this work
PtyTaskActivationStrategy
SeparatedAreaActivationStrategy InheritedActivationStrategy
PtyViewAreaActivator
PtyInlinedAreaActivator
PtyPopUpAreaActivator
PtyEmbeddedAreaActivator
PtyNewAreaActivator
PtyNewWindowActivator
PtyModalAreaActivator
areaActivator
show view area to user

Tree UI element
package := user select: 'Package' from: PackageOrganizer default packages.
class := user select: 'Class' from: package classes.
●Class selection task configured to be activated on separated
view area near selected package item
●With same way any task which executed by button can show
its items near this button
●Not implemented yet

Combo box UI element
guide addTask: [model value: (user select: 'Item' from: possibleItems)].
user lookAt: model preferredPreviewPresenter
●#lookAt: shows user current value of model
●#addTask: adds extra task to view area
●#addTask: can be configured as button which executes
extra task
●Extra task with items selection can be configured to show
popup view area with items list

PtyForkTask
●PtyForkTask is one way to add extra task to view area
●PtyForkTask just executed target task and when user request
happen parent task continue execution
●There are many ways to share «fork task items» with parent
task
●Add all items to parent view area
●Put all items on separated panel
●Put first request items on one panel but next on other
●...

What about buttons?
●Presenty has no ButtonPresenter or ButtonView (Morph)
●Button is just specific way to execute some action. It's same
as:
●Shortcuts
●Voice command
●Gesture
●Million other ways

User actions
PtyPresenter
PtyUserActionConnector
PtyButtonUserActionActivator
PtyMouseClickUserActionActivator
PtyShortcutActionActivator
Implements #hookupPresenter
PtyUserAction
connector
PtyUserActionActivator
*
userActions
action
activators
presenter
*

User actions
Any list item has user action which
executes
PtyReturnValueFromPresenterTask
User action PtyReturnToPreviousTask

How all this configured
●Presenter views can be different for different contexs
●Requested tasks can be different for different contexts
●Action activators can be different for different contexts
Extendible UI contexts
●Task context
●Presenter context
●Presenter style context
●List items name context
●Any domain specific contexts
●Big payment context
●Little account balance context

UISettings and PtyPrototypesManager
●Each configured object has prototype
●Prototype can create new instances by copy its sample
●PtyPrototypesManager contains collections of prototypes
●Manager know how to find appropriate prototype
●manager prototypeFor: someContextObject
●special lookup logic which can be extended by domain specific contexts
●Separated managers for presenters, tasks and user actions
●UISettings contains all managers
●UISettings know how to prepare new instances created from
prototype
●PrototypesManager is separated package. It is not depends
on Presenty. It is MIT

Future work
●Extendible object editor
●user edit: object
●Extendible object explorer
●user lookAt: object
●User actions with parameters. Drag and drop activators
●Text editor based on presenter and user actions
●More forking task strategies
●More view area activators
●Improvements for basic stuff like tables
●Docs
●...

The end