API: add basic API to show (and hide) message in place of list contents
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sat, 08 Jun 2019 16:34:54 +0100
changeset 161 103644ba5941
parent 160 fea681d31a3c
child 162 1c78b5a2747d
API: add basic API to show (and hide) message in place of list contents This can be used to display error or "Updating..." message or alike.
VDBAbstractListApplication.st
VDBBreakpointListApplication.st
--- a/VDBAbstractListApplication.st	Fri Jun 07 19:53:28 2019 +0100
+++ b/VDBAbstractListApplication.st	Sat Jun 08 16:34:54 2019 +0100
@@ -11,7 +11,8 @@
 "{ NameSpace: Smalltalk }"
 
 VDBAbstractContentsApplication subclass:#VDBAbstractListApplication
-	instanceVariableNames:'internalListHolder internalListView internalSelectionHolder'
+	instanceVariableNames:'internalListHolder internalListView internalSelectionHolder
+		internalMessageView'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'VDB-UI-Abstract'
@@ -494,6 +495,30 @@
     "Modified: / 20-08-2018 / 10:17:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBAbstractListApplication methodsFor:'initialization'!
+
+initializeMessageView
+    | internalListViewParent internalListViewLayout |
+
+    self assert: internalListView notNil.
+
+    internalListViewLayout := internalListView layout copy.
+    internalListViewParent := internalListView superView.
+    internalListViewParent isScrollWrapper ifTrue:[ 
+        internalListViewLayout := internalListViewParent layout copy.
+        internalListViewParent := internalListView superView.
+    ].
+    internalMessageView := Label in: internalListViewParent.
+    internalMessageView hiddenOnRealize: true.
+    internalMessageView layout: internalListViewLayout.
+    internalMessageView sizeFixed:true.   
+    internalMessageView viewBackground: internalListView background.
+    internalMessageView font: internalListView font.
+    internalMessageView layout: internalListViewLayout.
+
+    "Created: / 08-06-2019 / 09:53:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !VDBAbstractListApplication methodsFor:'menu'!
 
 contextMenu
@@ -680,6 +705,33 @@
     "Created: / 07-08-2018 / 13:35:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBAbstractListApplication methodsFor:'utilities'!
+
+hideMessage
+    "Hide any message previously shown by #showMessage:"
+
+    internalMessageView notNil ifTrue:[
+        internalMessageView label: ''.
+        internalMessageView beInvisible.
+    ]
+
+    "Created: / 08-06-2019 / 10:09:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+showMessage: text
+    "Show given message `text` instead of list contents. 
+     Message `text` is not localized, the caller is responsible
+     for localization."
+
+    internalMessageView isNil ifTrue:[
+        self initializeMessageView.
+    ].
+    internalMessageView label: text.
+    internalMessageView beVisible.
+
+    "Created: / 08-06-2019 / 10:07:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !VDBAbstractListApplication class methodsFor:'documentation'!
 
 version_HG
--- a/VDBBreakpointListApplication.st	Fri Jun 07 19:53:28 2019 +0100
+++ b/VDBBreakpointListApplication.st	Sat Jun 08 16:34:54 2019 +0100
@@ -59,7 +59,7 @@
     ^ 
     #(FullSpec
        name: windowSpec
-       uuid: '8774fbe0-4fb0-11e9-b432-606720e43e2c'
+       uuid: 'bd3ef320-8c37-11e9-a7d4-606720e43e2c'
        window: 
       (WindowSpec
          label: 'VDBAbstractListApplication'
@@ -81,21 +81,32 @@
              component: 
             (SpecCollection
                collection: (
-                (HierarchicalListViewSpec
-                   name: 'Breakpoints'
-                   uuid: '475530e3-4fae-11e9-b432-606720e43e2c'
-                   model: internalSelectionHolder
-                   menu: contextMenu
-                   hasHorizontalScrollBar: true
-                   hasVerticalScrollBar: true
-                   listModel: internalListHolder
-                   useIndex: false
-                   highlightMode: line
-                   doubleClickSelector: doDoubleClick
-                   showLines: false
-                   useDefaultIcons: false
-                   showRoot: false
-                   postBuildCallback: postBuildInternalListView:
+                (TransparentBoxSpec
+                   name: 'ListBox'
+                   uuid: 'bd3ef321-8c37-11e9-a7d4-606720e43e2c'
+                   component: 
+                  (SpecCollection
+                     collection: (
+                      (HierarchicalListViewSpec
+                         name: 'Breakpoints'
+                         layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+                         uuid: '475530e3-4fae-11e9-b432-606720e43e2c'
+                         model: internalSelectionHolder
+                         menu: contextMenu
+                         hasHorizontalScrollBar: true
+                         hasVerticalScrollBar: true
+                         listModel: internalListHolder
+                         useIndex: false
+                         highlightMode: line
+                         doubleClickSelector: doDoubleClick
+                         showLines: false
+                         useDefaultIcons: false
+                         showRoot: false
+                         postBuildCallback: postBuildInternalListView:
+                       )
+                      )
+                    
+                   )
                  )
                 (SubCanvasSpec
                    name: 'BreakpointCanvas'