HTMLBrowser.st
changeset 639 e4aa6372b13b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HTMLBrowser.st	Sun Feb 15 20:55:41 1998 +0100
@@ -0,0 +1,444 @@
+ToolApplicationModel subclass:#HTMLBrowser
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Browsers'
+!
+
+HTMLBrowser class instanceVariableNames:'lastFileName'
+
+"
+ The following class instance variables are inherited by this class:
+
+	ToolApplicationModel - history clipboard showHelp
+	ApplicationModel - ClassResources
+	Model - 
+	Object - 
+"
+!
+
+!HTMLBrowser class methodsFor:'documentation'!
+
+documentation
+"
+    The future HTML Browser.
+
+    [author:]
+         Thomas Zwick, eXept Software AG
+"
+! !
+
+!HTMLBrowser class methodsFor:'accessing'!
+
+lastFileName
+
+    ^lastFileName
+!
+
+lastFileName: aFileName
+
+    ^lastFileName := aFileName
+! !
+
+!HTMLBrowser class methodsFor:'history'!
+
+historyMaxSize
+
+    ^25
+
+! !
+
+!HTMLBrowser class methodsFor:'interface specs'!
+
+windowSpec
+    "this window spec was automatically generated by the ST/X UIPainter"
+
+    "do not manually edit this - the painter/builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     UIPainter new openOnClass:HTMLBrowser andSelector:#windowSpec
+     HTMLBrowser new openInterface:#windowSpec
+    "
+    "HTMLBrowser open"
+
+    <resource: #canvas>
+
+    ^
+     
+       #(#FullSpec
+          #'window:' 
+           #(#WindowSpec
+              #'name:' 'HTML Browser'
+              #'layout:' #(#LayoutFrame 385 0 376 0 684 0 675 0)
+              #'label:' 'HTML Browser'
+              #'min:' #(#Point 10 10)
+              #'max:' #(#Point 1152 864)
+              #'bounds:' #(#Rectangle 385 376 685 676)
+              #'menu:' #menu
+              #'usePreferredExtent:' false
+          )
+          #'component:' 
+           #(#SpecCollection
+              #'collection:' 
+               #(
+                 #(#MenuPanelSpec
+                    #'name:' 'menuToolbarView'
+                    #'layout:' #(#LayoutFrame 0 0.0 0 0 0 1.0 32 0)
+                    #'menu:' #menuToolbar
+                    #'showSeparatingLines:' true
+                )
+                 #(#HTMLViewSpec
+                    #'name:' 'htmlView'
+                    #'layout:' #(#LayoutFrame 0 0.0 34 0.0 0 1.0 -26 1.0)
+                    #'model:' #valueOfHTMLDocument
+                    #'hasHorizontalScrollBar:' true
+                    #'hasVerticalScrollBar:' true
+                )
+                 #(#UISubSpecification
+                    #'name:' 'uISubSpecification1'
+                    #'layout:' #(#LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0)
+                    #'majorKey:' #ToolApplicationModel
+                    #'minorKey:' #windowSpecForInfoBarWithClock
+                )
+              )
+          )
+      )
+! !
+
+!HTMLBrowser class methodsFor:'menu specs'!
+
+menu
+    "this window spec was automatically generated by the ST/X MenuEditor"
+
+    "do not manually edit this - the builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     MenuEditor new openOnClass:HTMLBrowser andSelector:#menu
+     (Menu new fromLiteralArrayEncoding:(HTMLBrowser menu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^
+     
+       #(#Menu
+          
+           #(
+             #(#MenuItem
+                #'label:' 'About'
+                #'activeHelpKey:' #about
+                #'accessCharacterPosition:' 1
+                #'labelImage:' #(#ResourceRetriever nil #menuIcon)
+                #'submenuChannel:' #menuAbout
+            )
+             #(#MenuItem
+                #'label:' 'File'
+                #'translateLabel:' true
+                #'activeHelpKey:' #file
+                #'submenu:' 
+                 #(#Menu
+                    
+                     #(
+                       #(#MenuItem
+                          #'label:' 'Load...'
+                          #'translateLabel:' true
+                          #'value:' #doLoad
+                          #'activeHelpKey:' #fileLoad
+                          #'enabled:' #isStandAlone
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'Print'
+                          #'value:' #'doPerform:'
+                          #'argument:' #'menu_print'
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'Exit'
+                          #'translateLabel:' true
+                          #'value:' #closeRequest
+                          #'activeHelpKey:' #fileExit
+                      )
+                    ) nil
+                    nil
+                )
+            )
+             #(#MenuItem
+                #'label:' 'Navigate'
+                #'submenuChannel:' #menuNavigate
+            )
+             #(#MenuItem
+                #'label:' 'Misc'
+                #'submenu:' 
+                 #(#Menu
+                    
+                     #(
+                       #(#MenuItem
+                          #'label:' 'Source...'
+                          #'value:' #'doPerform:'
+                          #'argument:' #'menu_source'
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'Settings...'
+                          #'value:' #'doPerform:'
+                          #'argument:' #'menu_settings'
+                      )
+                    ) nil
+                    nil
+                )
+            )
+             #(#MenuItem
+                #'label:' 'History'
+                #'activeHelpKey:' #history
+                #'submenuChannel:' #menuHistory
+            )
+             #(#MenuItem
+                #'label:' 'Help'
+                #'startGroup:' #right
+                #'activeHelpKey:' #help
+                #'submenuChannel:' #menuHelp
+            )
+          ) nil
+          nil
+      )
+!
+
+menuNavigate
+    "this window spec was automatically generated by the ST/X MenuEditor"
+
+    "do not manually edit this - the builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     MenuEditor new openOnClass:HTMLBrowser andSelector:#menuNavigate
+     (Menu new fromLiteralArrayEncoding:(HTMLBrowser menuNavigate)) startUp
+    "
+
+    <resource: #menu>
+
+    ^
+     
+       #(#Menu
+          
+           #(
+             #(#MenuItem
+                #'label:' 'Next'
+                #'value:' #'doPerform:'
+                #'enabled:' #valueOfCanNavigateToNext
+                #'argument:' '1'
+                #'labelImage:' #(#ResourceRetriever nil #rightIcon 'Next')
+            )
+             #(#MenuItem
+                #'label:' 'Previous'
+                #'value:' #'doPerform:'
+                #'enabled:' #valueOfCanNavigateToPrevious
+                #'argument:' '-1'
+                #'labelImage:' #(#ResourceRetriever nil #leftIcon 'Previous')
+            )
+             #(#MenuItem
+                #'label:' '-'
+            )
+             #(#MenuItem
+                #'label:' 'Home'
+                #'value:' #'doPerform:'
+                #'argument:' #'menu_home'
+            )
+             #(#MenuItem
+                #'label:' 'Back'
+                #'value:' #'doPerform:'
+                #'argument:' #'menu_back'
+            )
+             #(#MenuItem
+                #'label:' 'Reload'
+                #'value:' #'doPerform:'
+                #'argument:' #'menu_reload'
+            )
+          ) nil
+          nil
+      )
+!
+
+menuToolbar
+    "this window spec was automatically generated by the ST/X MenuEditor"
+
+    "do not manually edit this - the builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     MenuEditor new openOnClass:HTMLBrowser andSelector:#menuToolbar
+     (Menu new fromLiteralArrayEncoding:(HTMLBrowser menuToolbar)) startUp
+    "
+
+    <resource: #menu>
+
+    ^
+     
+       #(#Menu
+          
+           #(
+             #(#MenuItem
+                #'label:' 'Load'
+                #'isButton:' true
+                #'value:' #doLoad
+                #'labelImage:' #(#ResourceRetriever nil #loadIcon)
+            )
+             #(#MenuItem
+                #'label:' ''
+            )
+             #(#MenuItem
+                #'label:' 'Next'
+                #'isButton:' true
+                #'value:' #'doPerform:'
+                #'enabled:' #valueOfCanNavigateToNext
+                #'argument:' '1'
+                #'labelImage:' #(#ResourceRetriever nil #rightIcon)
+            )
+             #(#MenuItem
+                #'label:' 'Previous'
+                #'isButton:' true
+                #'value:' #'doPerform:'
+                #'enabled:' #valueOfCanNavigateToPrevious
+                #'argument:' '-1'
+                #'labelImage:' #(#ResourceRetriever nil #leftIcon)
+            )
+          ) nil
+          nil
+      )
+! !
+
+!HTMLBrowser methodsFor:'accessing - views'!
+
+htmlViewDoc
+
+    ^(builder componentAt: #htmlView) scrolledView
+! !
+
+!HTMLBrowser methodsFor:'aspects'!
+
+valueOfCanNavigateToNext
+
+    |holder|
+
+    (holder := builder bindingAt:#valueOfCanNavigateToNext) isNil ifTrue:[
+        builder aspectAt:#valueOfCanNavigateToNext put:(holder :=  false asValue).
+    ].
+    ^ holder
+!
+
+valueOfCanNavigateToPrevious
+
+    |holder|
+
+    (holder := builder bindingAt:#valueOfCanNavigateToPrevious) isNil ifTrue:[
+        builder aspectAt:#valueOfCanNavigateToPrevious put:(holder :=  false asValue).
+    ].
+    ^ holder
+!
+
+valueOfHTMLDocument
+
+    |holder|
+
+    (holder := builder bindingAt:#valueOfHTMLDocument) isNil ifTrue:[
+        builder aspectAt:#valueOfHTMLDocument put:(holder :=  ValueHolder new).
+    ].
+    ^ holder
+! !
+
+!HTMLBrowser methodsFor:'help'!
+
+openTutorial
+
+    self doPerform: #menu_help
+
+! !
+
+!HTMLBrowser methodsFor:'startup / release'!
+
+postOpenWith:aBuilder
+
+    self loadFromFile: self class lastFileName.
+    self htmlViewDoc history addAll: self historyEntries.
+    self updateChannels.
+    super postOpenWith:aBuilder.
+
+! !
+
+!HTMLBrowser methodsFor:'user actions'!
+
+doLoad
+
+    self loadFromFile: 
+        (FileSelectionBrowser request: 'Load a HTML File' fileFilters: #('.htm' '*.html'))
+
+
+
+
+
+!
+
+doPerform: what
+
+    (self htmlViewDoc respondsTo: what)     
+    ifTrue:
+    [
+        self htmlViewDoc perform: what.
+        self valueOfHTMLDocument value: self htmlViewDoc currentURL.
+        self class lastFileName: self htmlViewDoc currentURL
+    ]
+    ifFalse:
+    [
+        self valueOfHTMLDocument value: 
+            (self class lastFileName: (self htmlViewDoc history at: 
+                (self htmlViewDoc history indexOf: self valueOfHTMLDocument value) + what asInteger ifAbsent: [self class lastFileName])).
+    ].
+
+    self updateChannels
+!
+
+loadFromFile: aFileName
+
+    self valueOfHTMLDocument value: aFileName.
+    aFileName notNil 
+    ifTrue: 
+    [
+        self class lastFileName: aFileName
+    ].
+
+    self updateChannels
+!
+
+updateChannels
+
+    |htmlViewDoc|
+    htmlViewDoc := self htmlViewDoc.
+    (htmlViewDoc history at: 
+    (htmlViewDoc history indexOf: self valueOfHTMLDocument value) + 1 
+    ifAbsent: nil) isNil
+        ifTrue: [self valueOfCanNavigateToNext value: false]
+        ifFalse: [self valueOfCanNavigateToNext value: true].
+
+    (htmlViewDoc history at: 
+    (htmlViewDoc history indexOf: self valueOfHTMLDocument value) - 1 
+    ifAbsent: nil) isNil
+        ifTrue: [self valueOfCanNavigateToPrevious value: false]
+        ifFalse: [self valueOfCanNavigateToPrevious value: true].
+
+    "self emptyHistory."
+    htmlViewDoc history do: [:url| self addToHistory: url -> #loadFromFile:].
+! !
+
+!HTMLBrowser class methodsFor:'documentation'!
+
+version
+    ^ '$Header$'
+! !