StrokeView.st
author Claus Gittinger <cg@exept.de>
Fri, 27 Feb 2004 18:24:31 +0100
changeset 2666 7f3c3d9ffe4b
parent 2664 a24537ab8f0b
child 2668 fa1ac72a7a8f
permissions -rw-r--r--
checkin from browser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2664
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libwidg2' }"
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
View subclass:#StrokeView
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'strokes currentStroke lastPoint clearButton clearLastButton'
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Views-Special'
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!StrokeView class methodsFor:'documentation'!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
documentation
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
    a simple view, which collects strokes.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
    will eventually become a character-input method
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    for non-latin languages.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
"
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
examples
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
"
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
        |v|
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
        v := StrokeView open.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
        v inspect.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
        |v|
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
2666
7f3c3d9ffe4b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2664
diff changeset
    31
        v := StrokeView openOnXScreenNamed:'bitsy:0'.    ' my pda !!!! '.
2664
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
        v inspect.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
"
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
! !
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
!StrokeView methodsFor:'button actions'!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
newStrokeSequence
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    strokes removeAll.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    currentStroke := lastPoint := nil.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    self updateButtonStates.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    self redraw
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
removeLastStroke
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    strokes size > 0 ifTrue:[
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
        strokes removeLast.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    ].
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    currentStroke := lastPoint := nil.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    self updateButtonStates.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    self redraw
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
updateButtonStates
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    strokes isEmpty ifTrue:[
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
        clearButton disable.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
        clearLastButton disable.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    ] ifFalse:[
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
        clearButton enable.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
        clearLastButton enable.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    ]
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
! !
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
!StrokeView methodsFor:'event handling'!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
buttonMotion:state x:x y:y
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    |thisPoint|
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    state == 0 ifTrue:[^ self].
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    thisPoint := x@y.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    currentStroke add:(LineSegment from:lastPoint to:thisPoint).
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    self displayLineFrom:lastPoint to:thisPoint.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    lastPoint := thisPoint.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
buttonPress:state x:x y:y
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    currentStroke isNil ifTrue:[
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
        currentStroke := OrderedCollection new.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    ].
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    lastPoint := x@y.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
buttonRelease:state x:x y:y
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    currentStroke notNil ifTrue:[
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
        strokes add:currentStroke.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
        currentStroke := nil.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
        self updateButtonStates.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    ].
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
! !
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
!StrokeView methodsFor:'initialization'!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
drawStroke:aStroke
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    aStroke do:[:eachSegment |
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
        self displayLineFrom:(eachSegment start) to:(eachSegment end).
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
    ].
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
initialize
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    super initialize.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    strokes := OrderedCollection new.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    clearButton := self newButton2D.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    clearButton label:'Clear'.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    clearButton layout:(LayoutFrame
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
                            leftFraction:0 offset:0 
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
                            rightFraction:0.5 offset:0
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
                            topFraction:1 offset:-20
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
                            bottomFraction:1 offset:0).
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    clearButton action:[ self newStrokeSequence ].
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    clearButton disable.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    clearLastButton := self newButton2D.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    clearLastButton label:'Undo'.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    clearLastButton layout:(LayoutFrame
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
                            leftFraction:0.5 offset:0 
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
                            rightFraction:1 offset:0
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
                            topFraction:1 offset:-20
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
                            bottomFraction:1 offset:0).
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    clearLastButton action:[ self removeLastStroke ].
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    clearLastButton disable.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
newButton2D
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    |button|
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    "
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
     Times Are a'Changing -
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
        now it takes more effort to setup a 2D button,
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
        than to set up a 3D one ;-)"
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
    button := Button in:self.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    button passiveLevel:0.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    button activeLevel:0.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    button borderWidth:1.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    button borderColor:(Color black).
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
    button foregroundColor:(Color black).
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    button backgroundColor:(Color white).
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    ^ button
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
redraw
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
    self clear.
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
    strokes do:[:eachStroke |
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
        self drawStroke:eachStroke
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
    ].
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    currentStroke notNil ifTrue:[
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
        self drawStroke:currentStroke
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
    ].
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
! !
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
!StrokeView class methodsFor:'documentation'!
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
version
2666
7f3c3d9ffe4b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2664
diff changeset
   162
    ^ '$Header: /cvs/stx/stx/libwidg2/StrokeView.st,v 1.2 2004-02-27 17:24:31 cg Exp $'
2664
a24537ab8f0b initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
! !