NoteBookView.st
changeset 5217 034b6149d8bc
parent 5211 d4a5b7bf3021
child 5218 4999a9f57b7d
--- a/NoteBookView.st	Sat Aug 13 12:41:38 2016 +0200
+++ b/NoteBookView.st	Sat Aug 13 16:11:42 2016 +0200
@@ -28,7 +28,8 @@
 		removeTabEnteredIcon removeTabDisabledIcon
 		showingEnteredRemoveTabButton lastUserSelection minimumTabWidth
 		addTabAction addTabIcon addTabEnteredIcon addTabDisabledIcon
-		showingEnteredAddTabButton canvasLevel'
+		showingEnteredAddTabButton canvasLevel
+		showDestroyTabButtonOnSingleTab'
 	classVariableNames:'DefaultForegroundColor DefaultBackgroundColor
 		DefaultActiveForegroundColor DefaultActiveBackgroundColor
 		DefaultShadowColor DefaultHalfShadowColor DefaultLightColor
@@ -374,7 +375,12 @@
 !
 
 list:newTabItemListOrNil
-    "set the tab-list"
+    "set the tab-list.
+     warning: transforms the given list to a list of tabItems,
+     where each holds on to a corresponding list element.
+     When a new list comes in, the list elements are compared for identity.
+     This may make problems, when strings come in.
+     Q: should we compare for equality here?"
 
     |selectionName newList newTabItemList oldSelectedTab|
 
@@ -894,7 +900,7 @@
     ].
     tabExtent := tabExtent + tabLabelInset.
 
-    (showDestroyTabButton and:[destroyTabAction notNil]) ifTrue:[
+    (self showingDestroyButton) ifTrue:[
         tabExtent := tabExtent + ((self destroyButtonUsedWidth) @ 0).
     ].
     ^ tabExtent.
@@ -1073,16 +1079,39 @@
 !
 
 showDestroyTabButton
+    "if true, a close-tab icon is shown"
+
     ^ showDestroyTabButton
 !
 
 showDestroyTabButton:aBoolean
+    "if true, a close-tab icon is shown"
+
     showDestroyTabButton == aBoolean ifTrue:[^ self].
     showDestroyTabButton := aBoolean.
 
     self styleChanged.
 !
 
+showDestroyTabButtonOnSingleTab
+    "if true, AND showDestroyTabButton is true,
+     a close-tab icon is shown even for a single tab.
+     Otherwise, it is hidden if there is only one tab-item left"
+
+    ^ showDestroyTabButtonOnSingleTab
+!
+
+showDestroyTabButtonOnSingleTab:aBoolean
+    "if true, AND showDestroyTabButton is true,
+     a close-tab icon is shown even for a single tab.
+     Otherwise, it is hidden if there is only one tab-item left"
+
+    showDestroyTabButtonOnSingleTab == aBoolean ifTrue:[^ self].
+    showDestroyTabButtonOnSingleTab := aBoolean.
+
+    self styleChanged.
+!
+
 tabBottomMargin
     "returns the margin between the tabs and the canvas
     "
@@ -1843,7 +1872,7 @@
     "/ if we have to show a different icon while over the tab...
     tab := self tabContainingPointX:x y:y.
     (tab notNil and:[tab == self selectedTab]) ifTrue:[
-        (showDestroyTabButton and:[destroyTabAction notNil]) ifTrue:[
+        (self showingDestroyButton) ifTrue:[
             mustShowEntered := (self destroyButtonFrameForTab:tab) containsPoint:(x@y).
             mustShowEntered ~~ showingEnteredRemoveTabButton ifTrue:[
                 showingEnteredRemoveTabButton := mustShowEntered.
@@ -2293,7 +2322,7 @@
     tab := self tabContainingPointX:x y:y.
 
     tab notNil ifTrue:[
-        (showDestroyTabButton and:[destroyTabAction notNil]) ifTrue:[
+        (self showingDestroyButton) ifTrue:[
             (tab == self selectedTab
             or:[ self disableDestroyButtonOfInactiveTabs not ]) ifTrue:[
                 ((self destroyButtonFrameForTab:tab) containsPointX:x y:y) ifTrue:[
@@ -3346,7 +3375,7 @@
 
     aTab destroyTabButtonShown ifTrue:[^ true].
 
-    (showDestroyTabButton and:[destroyTabAction notNil]) ifFalse:[
+    (self showingDestroyButton) ifFalse:[
         ^ false
     ].
     self showDestroyButtonOfInactiveTabs ifTrue:[^ true].
@@ -3375,6 +3404,12 @@
     nextTab := list at:(index + 1) ifAbsent:nil.
 
   ^ nextTab isNil or:[nextTab lineNr ~~ aTab lineNr]
+!
+
+showingDestroyButton
+     ^ showDestroyTabButton 
+     and:[destroyTabAction notNil
+     and:[(showDestroyTabButtonOnSingleTab ~~ true) or:[list size > 1]]]
 ! !
 
 !NoteBookView methodsFor:'selection'!