moving
authorClaus Gittinger <cg@exept.de>
Fri, 28 Mar 1997 15:20:59 +0100
changeset 328 d68048199989
parent 327 25ced24b63ea
child 329 098318898b01
moving
TabSpecRuler.st
--- a/TabSpecRuler.st	Fri Mar 28 15:20:35 1997 +0100
+++ b/TabSpecRuler.st	Fri Mar 28 15:20:59 1997 +0100
@@ -12,7 +12,8 @@
 
 SimpleView subclass:#TabSpecRuler
 	instanceVariableNames:'tabSpec titleEntry handleStyle handleCursor movedTabIndex
-		movedTabX synchronousOperation handleWidth'
+		movedTabX synchronousOperation handleWidth fixedTabs
+		tabsAreVariable'
 	classVariableNames:'DefaultHandleStyle'
 	poolDictionaries:''
 	category:'Views-Misc'
@@ -83,6 +84,64 @@
 
 !TabSpecRuler methodsFor:'accessing'!
 
+fixedTabs
+    "return the collection of tabIndices which are fixed;
+     or nil, if all are variable"
+
+    ^ fixedTabs
+
+    "Created: 28.3.1997 / 15:02:29 / cg"
+    "Modified: 28.3.1997 / 15:03:05 / cg"
+!
+
+fixedTabs:something
+    "set the collection of tabIndices which are fixed;
+     nil, if all are to be variable"
+
+    fixedTabs := something.
+
+    "Created: 28.3.1997 / 15:02:29 / cg"
+    "Modified: 28.3.1997 / 15:03:18 / cg"
+!
+
+synchronousOperation
+    "return the synchronousOperation mode settings value"
+
+    ^ synchronousOperation
+
+    "Created: 28.3.1997 / 15:01:17 / cg"
+    "Modified: 28.3.1997 / 15:02:20 / cg"
+!
+
+synchronousOperation:something
+    "set/clear synchronousOperation mode;
+     if on, a move is immediately forwarded to dependents;
+     of off, its forwarded when the mouse button is released."
+
+    synchronousOperation := something.
+
+    "Modified: 28.3.1997 / 15:02:07 / cg"
+!
+
+tabsAreVariable
+    "return the value of the instance variable 'tabsAreVariable' (automatically generated)"
+
+    ^ tabsAreVariable
+
+    "Created: 28.3.1997 / 15:05:27 / cg"
+!
+
+tabsAreVariable:something
+    "set/clear movability of tabs. If false, tab positions are only
+     displayed - but cannot be moved by the user.
+     The default is true."
+
+    tabsAreVariable := something.
+
+    "Created: 28.3.1997 / 15:05:27 / cg"
+    "Modified: 28.3.1997 / 15:06:19 / cg"
+!
+
 tabulatorSpecification:aTabSpec
     "set my tabulator specification"
 
@@ -100,8 +159,9 @@
 
     |left right limit1 limit2 minSpacing newX|
 
-    minSpacing := 5.
     movedTabIndex notNil ifTrue:[
+        minSpacing := 5.
+
         left := limit1 := 0.
         movedTabIndex > 1 ifTrue:[
             left := self positionOfTabAtIndex:(movedTabIndex-1).
@@ -128,28 +188,27 @@
             ]
         ]
     ] ifFalse:[
-        (self indexOfTabAtX:x y:y) ~~ 0 ifTrue:[
+        (self canMoveTabAtX:x) ifTrue:[
             self cursor:handleCursor
         ] ifFalse:[
             self cursor:(Cursor normal)
         ]
     ]
 
-    "Modified: 28.3.1997 / 14:43:23 / cg"
+    "Modified: 28.3.1997 / 15:17:14 / cg"
 !
 
 buttonPress:button x:x y:y
     "mouse-button was pressed;
      start moving the tab"
 
-    (movedTabIndex := self indexOfTabAtX:x y:y) ~~ 0 ifTrue:[
+    movedTabIndex := nil.
+    (self canMoveTabAtX:x) ifTrue:[
+        movedTabIndex := self indexOfTabAtX:x.
         self cursor:handleCursor.
-    ] ifFalse:[
-        movedTabIndex := nil
     ]
 
-    "Created: 28.3.1997 / 13:56:14 / cg"
-    "Modified: 28.3.1997 / 13:56:54 / cg"
+    "Modified: 28.3.1997 / 15:13:15 / cg"
 !
 
 buttonRelease:button x:x y:y
@@ -160,11 +219,13 @@
 
     idx := movedTabIndex.
     movedTabIndex := nil.
-    synchronousOperation == true ifFalse:[
-        self moveTabAtIndex:idx toX:movedTabX
+    idx notNil ifTrue:[
+        synchronousOperation == true ifFalse:[
+            self moveTabAtIndex:idx toX:movedTabX
+        ]
     ]
 
-    "Modified: 28.3.1997 / 14:43:30 / cg"
+    "Modified: 28.3.1997 / 15:10:23 / cg"
 !
 
 pointerLeave:state
@@ -194,6 +255,8 @@
 initialize
     super initialize.
 
+    tabsAreVariable := true.
+
     self enableMotionEvents.
     self enableEnterLeaveEvents.
 
@@ -203,12 +266,28 @@
      TabSpecRuler new open
     "
 
-    "Modified: 28.3.1997 / 13:44:55 / cg"
+    "Modified: 28.3.1997 / 15:06:29 / cg"
 ! !
 
 !TabSpecRuler methodsFor:'private'!
 
-indexOfTabAtX:x y:y
+canMoveTabAtX:x
+    |idx|
+
+    tabsAreVariable ifTrue:[
+        (idx := self indexOfTabAtX:x) ~~ 0 ifTrue:[
+            (fixedTabs notNil and:[fixedTabs includes:idx]) ifFalse:[
+                ^ true
+            ]
+        ]
+    ].
+    ^ false
+
+    "Created: 28.3.1997 / 15:12:05 / cg"
+    "Modified: 28.3.1997 / 15:19:01 / cg"
+!
+
+indexOfTabAtX:x
     |xTab minDelta bestIndex|
 
     tabSpec isNil ifTrue:[^ 0].
@@ -227,11 +306,16 @@
     ^ bestIndex
 
     "Modified: 28.3.1997 / 13:43:47 / cg"
+    "Created: 28.3.1997 / 15:12:09 / cg"
 !
 
 moveTabAtIndex:idx toX:movedTabX
+    |unitPosition|
 
-    "Created: 28.3.1997 / 14:43:03 / cg"
+    unitPosition := (tabSpec unitsPerPixelOn:self) * movedTabX.
+    tabSpec moveTabAtIndex:idx to:unitPosition.
+
+    "Modified: 28.3.1997 / 14:54:58 / cg"
 ! !
 
 !TabSpecRuler methodsFor:'redrawing'!
@@ -250,10 +334,10 @@
 !
 
 positionOfTabAtIndex:idx
-    ^ ( tabSpec positionOfTab:idx on:self ) rounded + 1.
+    ^ ( tabSpec positionOfTab:idx on:self ) rounded.
 
     "Created: 28.3.1997 / 14:26:28 / cg"
-    "Modified: 28.3.1997 / 14:36:44 / cg"
+    "Modified: 28.3.1997 / 15:14:03 / cg"
 !
 
 redraw
@@ -289,5 +373,5 @@
 !TabSpecRuler class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/TabSpecRuler.st,v 1.8 1997-03-28 13:48:38 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/TabSpecRuler.st,v 1.9 1997-03-28 14:20:59 cg Exp $'
 ! !