common/SCMAbstractDialog.st
author Claus Gittinger <cg@exept.de>
Sat, 28 Jul 2018 10:08:05 +0200
branchcvs_MAIN
changeset 849 aa8ba960d939
parent 754 e1b862463fd1
child 887 74ab5a5ce86d
permissions -rw-r--r--
#OTHER by cg icon references cleaned up (use ToolbarIconLibrary - not GenericToolbarIconLibrary)

"{ Encoding: utf8 }"

"
stx:libscm - a new source code management library for Smalltalk/X
Copyright (C) 2012-2015 Jan Vrany

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License. 

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
"
"{ Package: 'stx:libscm/common' }"

"{ NameSpace: Smalltalk }"

SimpleDialog subclass:#SCMAbstractDialog
	instanceVariableNames:'onCancelBlock onAcceptBlock titleHolder subtitleHolder infoPanel'
	classVariableNames:'CatchExceptions'
	poolDictionaries:''
	category:'SCM-Common-StX-Interface'
!

!SCMAbstractDialog class methodsFor:'documentation'!

copyright
"
stx:libscm - a new source code management library for Smalltalk/X
Copyright (C) 2012-2015 Jan Vrany

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License. 

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
"
! !

!SCMAbstractDialog class methodsFor:'instance creation'!

on: model

    ^self new 
        model: model;
        yourself

    "Created: / 14-04-2008 / 11:09:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SCMAbstractDialog class methodsFor:'accessing'!

catchExceptions

    ^CatchExceptions isNil or:[CatchExceptions]

    "Created: / 09-12-2009 / 16:22:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

catchExceptions: aBoolean

    CatchExceptions := aBoolean

    "Created: / 09-12-2009 / 16:22:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!SCMAbstractDialog class methodsFor:'image specs'!

dialogIcon
    "raise an error: must be redefined in concrete subclass(es)"

    ^ self subclassResponsibility
!

downArrow
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     self downArrow inspect
     ImageEditor openOnClass:self andSelector:#downArrow
     Icon flushCachedIcons
    "

    <resource: #image>

    ^Icon
        constantNamed:'SVN::Dialog class downArrow'
        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@C?@O<@_ @<@A @@@@@@@@@@@@@@b') ; yourself); yourself]
!

errorIcon
    <resource: #programImage>

    ^ ToolbarIconLibrary error32x32Icon

    "Created: / 09-12-2009 / 16:38:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 28-07-2018 / 09:53:18 / Claus Gittinger"
! !

!SCMAbstractDialog class methodsFor:'interface opening'!

openOn: model


    ^(self on: model) open

    "Created: / 14-04-2008 / 11:09:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 19-04-2008 / 13:17:11 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SCMAbstractDialog class methodsFor:'interface specs'!

buttonsSpec
    "This resource specification was automatically generated
     by the UIPainter of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the UIPainter may not be able to read the specification."

    "
     UIPainter new openOnClass:SVN::Dialog andSelector:#buttonsSpec
     SVN::Dialog new openInterface:#buttonsSpec
    "

    <resource: #canvas>

    ^ 
     #(FullSpec
        name: buttonsSpec
        window: 
       (WindowSpec
          label: 'Buttons'
          name: 'Buttons'
          min: (Point 10 10)
          bounds: (Rectangle 0 0 400 30)
        )
        component: 
       (SpecCollection
          collection: (
           (HorizontalPanelViewSpec
              name: 'ButtonPanel'
              layout: (LayoutFrame 0 0 0 0 0 1 0 1)
              horizontalLayout: rightSpace
              verticalLayout: center
              horizontalSpace: 3
              verticalSpace: 3
              component: 
             (SpecCollection
                collection: (
                 (ActionButtonSpec
                    label: 'OK'
                    name: 'AcceptButton'
                    translateLabel: true
                    labelChannel: acceptButtonTitleAspect
                    model: doAccept
                    enableChannel: acceptEnabledHolder
                    extent: (Point 125 22)
                  )
                 (ActionButtonSpec
                    label: 'Cancel'
                    name: 'CancelButton'
                    translateLabel: true
                    model: doCancel
                    extent: (Point 125 22)
                  )
                 )
               
              )
            )
           )
         
        )
      )
!

contentSpec
    "This resource specification was automatically generated
     by the UIPainter of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the UIPainter may not be able to read the specification."

    "
     UIPainter new openOnClass:SVN::Dialog andSelector:#contentSpec
     SVN::Dialog new openInterface:#contentSpec
    "

    <resource: #canvas>

    ^ 
     #(FullSpec
        name: contentSpec
        window: 
       (WindowSpec
          label: 'Dialog'
          name: 'Dialog'
          min: (Point 10 10)
          bounds: (Rectangle 0 0 300 300)
        )
        component: 
       (SpecCollection
          collection: (
           (LabelSpec
              label: 'You should override #contentSpec'
              name: 'Message'
              layout: (LayoutFrame 0 0 0 0 0 1 0 1)
              translateLabel: true
            )
           )
         
        )
      )
!

errorSpec
    "This resource specification was automatically generated
     by the UIPainter of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the UIPainter may not be able to read the specification."

    "
     UIPainter new openOnClass:SVN::Dialog andSelector:#errorSpec
     SVN::Dialog new openInterface:#errorSpec
    "

    <resource: #canvas>

    ^ 
     #(FullSpec
        name: errorSpec
        window: 
       (WindowSpec
          label: 'Error'
          name: 'Error'
          min: (Point 10 10)
          bounds: (Rectangle 0 0 300 300)
        )
        component: 
       (SpecCollection
          collection: (
           (LabelSpec
              label: 'errorIcon'
              name: 'ErrorIcon'
              layout: (LayoutFrame 0 0 0 0 35 0 35 0)
              hasCharacterOrientedLabel: false
              translateLabel: true
            )
           (LabelSpec
              name: 'ErrorMessage'
              layout: (LayoutFrame 35 0 0 0 0 1 0 1)
              translateLabel: true
              labelChannel: infoHolder
            )
           )
         
        )
      )
!

messageSpec
    "This resource specification was automatically generated
     by the UIPainter of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the UIPainter may not be able to read the specification."

    "
     UIPainter new openOnClass:SVN::Dialog andSelector:#messageSpec
     SVN::Dialog new openInterface:#messageSpec
    "

    <resource: #canvas>

    ^ 
     #(FullSpec
        name: messageSpec
        window: 
       (WindowSpec
          label: 'Message'
          name: 'Message'
          min: (Point 10 10)
          bounds: (Rectangle 0 0 300 300)
        )
        component: 
       (SpecCollection
          collection: (
           (HTMLViewSpec
              name: 'HTMLBrowser'
              layout: (LayoutFrame 20 0 20 0 -20 1 -20 1)
              level: 0
              hasHorizontalScrollBar: true
              hasVerticalScrollBar: true
              htmlText: infoHolder
            )
           )
         
        )
      )
!

windowSpec
    "This resource specification was automatically generated
     by the UIPainter of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the UIPainter may not be able to read the specification."

    "
     UIPainter new openOnClass:SVN::Dialog andSelector:#windowSpec
     SVN::Dialog new openInterface:#windowSpec
     SVN::Dialog open
    "

    <resource: #canvas>

    ^ 
     #(FullSpec
        name: windowSpec
        window: 
       (WindowSpec
          label: 'SubVersion: Dialog '
          name: 'SubVersion: Dialog '
          labelChannel: titleHolder
          min: (Point 10 10)
          bounds: (Rectangle 0 0 648 451)
        )
        component: 
       (SpecCollection
          collection: (
           (ViewSpec
              name: 'TitleBox'
              layout: (LayoutFrame 0 0 0 0 0 1 66 0)
              backgroundColor: (Color 100.0 100.0 100.0)
              component: 
             (SpecCollection
                collection: (
                 (LabelSpec
                    label: 'DialogTitle'
                    name: 'DialogTitle'
                    layout: (LayoutFrame 10 0 0 0 -75 1 40 0)
                    style: (FontDescription helvetica medium roman 18 #'iso10646-1')
                    backgroundColor: (Color 100.0 100.0 100.0)
                    translateLabel: true
                    labelChannel: titleHolder
                    adjust: left
                  )
                 (LabelSpec
                    label: 'DialogSubtitle'
                    name: 'DialogSubtitle'
                    layout: (LayoutFrame 30 0 40 0 -75 1 66 0)
                    backgroundColor: (Color 100.0 100.0 100.0)
                    translateLabel: true
                    labelChannel: subtitleHolder
                    resizeForLabel: false
                    adjust: left
                  )
                 (LabelSpec
                    label: 'Icon'
                    name: 'DialogIcon'
                    layout: (LayoutFrame -157 1 0 0 0 1 66 0)
                    hasCharacterOrientedLabel: false
                    backgroundColor: (Color 100.0 100.0 100.0)
                    translateLabel: true
                    labelChannel: dialogIconAspect
                  )
                 )
               
              )
            )
           (ViewSpec
              name: 'ContentBox'
              layout: (LayoutFrame 5 0 70 0 -5 1 -50 1)
              component: 
             (SpecCollection
                collection: (
                (SubCanvasSpec
              name: 'InfoPanel'
              layout: (LayoutFrame 0 0 0 0 0 1 40 0)
              level: 0
              initiallyInvisible: true
              hasHorizontalScrollBar: false
              hasVerticalScrollBar: false
              clientKey: infoPanel
              createNewBuilder: false
            )
                 (SubCanvasSpec
                    name: 'Content'
                    layout: (LayoutFrame 0 0 0 0 0 1 0 1)
                    hasHorizontalScrollBar: false
                    hasVerticalScrollBar: false
                    specHolder: contentSpecHolder
                    createNewBuilder: false
                  )
                 )
               
              )
            )
           (DividerSpec
              name: 'Separator'
              layout: (LayoutFrame 5 0 -50 1 -5 1 -30 1)
            )
           (UISubSpecification
              name: 'Buttons'
              layout: (LayoutFrame 130 0 -30 1 0 1 0 1)
              minorKey: buttonsSpec
            )
           (LinkButtonSpec
              label: 'Help'
              name: 'Help'
              layout: (LayoutFrame 30 0 -30 1 130 0 0 1)
              style: (FontDescription helvetica medium roman 12 #'iso10646-1')
              initiallyInvisible: true
              foregroundColor: (Color 0.0 0.0 86.9993133440147)
              translateLabel: true
              model: doHelp
            )
           (MenuPanelSpec
              name: 'More'
              layout: (LayoutFrame 0 0 -30 1 30 0 -50 1)
              level: 0
              model: doInspect
              menu: actionsMenu
            )
           )
         
        )
      )

    "Modified: / 07-10-2012 / 09:57:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!SCMAbstractDialog class methodsFor:'menu specs'!

actionsMenu
    "This resource specification was automatically generated
     by the MenuEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the MenuEditor may not be able to read the specification."

    "
     MenuEditor new openOnClass:SVN::Dialog andSelector:#actionsMenu
     (Menu new fromLiteralArrayEncoding:(SVN::Dialog actionsMenu)) startUp
    "

    <resource: #menu>

    ^ 
     #(Menu
        (
         (MenuItem
            label: 'ActionsMenu'
            translateLabel: true
            submenu: 
           (Menu
              (
               (MenuItem
                  label: 'Catch exceptions'
                  translateLabel: true
                  indication: catchExceptionsAspect
                )
               (MenuItem
                  label: 'Inspect model'
                  itemValue: doInspect
                  translateLabel: true
                )
               (MenuItem
                  label: 'Inspect dialog'
                  itemValue: doInspectDialog
                  translateLabel: true
                )
               )
              nil
              nil
            )
            labelImage: (ResourceRetriever #'SVN::Dialog' downArrow)
          )
         )
        nil
        nil
      )
! !

!SCMAbstractDialog methodsFor:'accessing'!

acceptButtonLabel
    ^ 'OK'

    "Created: / 13-04-2008 / 11:06:41 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

acceptEnabled
    ^ self acceptEnabledHolder value

    "Created: / 16-08-2009 / 17:18:13 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

acceptEnabled:aBoolean 
    self acceptEnabledHolder value:aBoolean

    "Created: / 03-10-2008 / 14:29:11 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

contentSpec

    ^self contentSpecHolder value

    "Created: / 21-10-2008 / 12:39:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

contentSpec: aSymbol

    self contentSpecHolder value: aSymbol

    "Created: / 21-10-2008 / 12:38:56 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

infoPanel
    infoPanel isNil ifTrue:[
        infoPanel := Tools::InlineMessageDialog new
    ].
    ^ infoPanel

    "Created: / 09-02-2012 / 19:23:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

subtitle
    "return the value in 'dialogSubtitleHolder'"
    
    ^ self subtitleHolder value

    "Created: / 22-10-2008 / 12:40:02 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 09-04-2009 / 07:53:25 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

subtitle:newValue 
    "set the value in 'dialogSubtitleHolder'"
    
    self subtitleHolder value:'     ' , newValue

    "Created: / 22-10-2008 / 12:40:14 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 09-04-2009 / 07:53:18 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

title

    ^self dialogTitleAspect value

    "Created: / 22-10-2008 / 12:40:41 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

title: aString

    ^self titleHolder value: aString

    "Created: / 22-10-2008 / 12:40:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 09-04-2009 / 14:12:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SCMAbstractDialog methodsFor:'accessing-defaults'!

defaultContentSpec

    ^#contentSpec

    "Created: / 21-10-2008 / 12:35:11 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

defaultModel
    ^ nil

    "Created: / 03-10-2008 / 14:57:35 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

defaultSubtitle

    ^''

    "Created: / 03-10-2008 / 13:54:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

defaultTitle
    ^ 'Commit'

    "Created: / 03-10-2008 / 13:58:40 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 08-02-2012 / 18:25:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!SCMAbstractDialog methodsFor:'actions'!

doAccept
    self acceptEnabled ifTrue:[
        super doAccept
    ]

    "Created: / 16-08-2009 / 17:18:47 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

doCancel
    self infoPanel doAbortIfWorking.
    super doCancel

    "Created: / 28-10-2008 / 14:47:44 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 04-10-2012 / 19:21:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

doHelp
    <resource: #uiCallback>

    Transcript showCR:self class name, ': action for doHelp ...'.
!

doInspect
    "subclasses may redefine this"

    ^ self.

    "Modified: / 31-03-2017 / 17:56:45 / stefan"
!

doInspectDialog

    self inspect

    "Created: / 10-03-2010 / 15:30:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!SCMAbstractDialog methodsFor:'aspects'!

acceptButtonTitleAspect
    ^ self acceptButtonLabel

    "Modified: / 31-03-2008 / 18:53:56 / janfrog"
    "Created: / 13-04-2008 / 11:08:43 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

acceptEnabledHolder
    |holder|

    (holder := builder bindingAt:#acceptEnabledHolder) isNil ifTrue:[
        holder := false asValue.
        builder aspectAt:#acceptEnabledHolder put:holder.
    ].
    ^ holder.

    "Created: / 14-04-2008 / 11:17:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 14-04-2008 / 12:56:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

catchExceptionsAspect

    ^(AspectAdaptor forAspect:#catchExceptions)
        subject: self class

    "Created: / 09-12-2009 / 16:23:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

contentSpecHolder
    <resource: #uiAspect>

    |holder|

    (holder := builder bindingAt:#contentSpecHolder) isNil ifTrue:[
        holder := self defaultContentSpec asValue.
        holder onChangeSend:#contentSpecChanged to: self.
        builder aspectAt:#contentSpecHolder put:holder.
    ].
    ^ holder.

    "Created: / 21-10-2008 / 12:34:59 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 22-10-2008 / 11:22:16 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

dialogIconAspect
    ^ self class dialogIcon

    "Created: / 13-04-2008 / 11:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

subtitleHolder
    "return/create the valueHolder 'dialogSubtitleHolder'"
    
    subtitleHolder isNil ifTrue:[
        subtitleHolder := self defaultSubtitle asValue
    ].
    ^ subtitleHolder

    "Created: / 03-10-2008 / 13:53:16 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 09-04-2009 / 07:53:51 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

titleHolder
    titleHolder isNil ifTrue:[
        titleHolder := self defaultTitle asValue.
    ].
    ^titleHolder

    "Modified: / 31-03-2008 / 18:53:56 / janfrog"
    "Created: / 13-04-2008 / 11:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 09-04-2009 / 07:52:33 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SCMAbstractDialog methodsFor:'change & update'!

contentSpecChanged

    self contentSpecChanged: self contentSpec

    "Created: / 22-10-2008 / 11:22:35 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 06-11-2008 / 18:31:33 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

contentSpecChanged: specSymbol

    "nothing to do here"

    "Created: / 06-11-2008 / 18:31:19 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SCMAbstractDialog methodsFor:'events'!

closeAccept

    [onAcceptBlock ifNotNil:[onAcceptBlock value: self]]
        ensure:[super closeAccept]
!

closeCancel

    [onCancelBlock ifNotNil:[onCancelBlock value: self]]
        ensure:[super closeCancel]
!

closeWindow
    super closeWindow.
    self infoPanel doAbortIfWorking.

    "Created: / 01-11-2009 / 16:33:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 15-11-2012 / 17:19:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!SCMAbstractDialog methodsFor:'hooks'!

onAccept: aBlock

    onAcceptBlock := aBlock
!

onCancel: aBlock

    onCancelBlock := aBlock
! !

!SCMAbstractDialog methodsFor:'initialization'!

initialize

    super initialize.
    self createBuilder

    "Created: / 22-10-2008 / 12:37:01 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SCMAbstractDialog methodsFor:'private'!

handleError: ex

    self breakPoint: #jv.

    self class catchExceptions ifFalse:[ex pass].    
    self showError: ex description.

    "Created: / 09-12-2009 / 16:32:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

handleUserConfirmation: ex

    ^ex proceedWith: ex defaultAction

    "Created: / 09-12-2009 / 16:31:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

showContent

    self 
        contentSpec: #contentSpec.

    "Created: / 09-04-2009 / 08:14:36 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

showErorr: aString
    self infoPanel beWarning; showMessage: aString

    "Created: / 04-10-2012 / 19:24:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

showError: aString

    self 
        info: aString;
        contentSpec: #errorSpec

    "Created: / 09-12-2009 / 16:40:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

showMessage: aString
    self infoPanel beInformation; showMessage: aString

    "Created: / 09-04-2009 / 08:14:51 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 04-10-2012 / 19:24:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

showProgressWhile:aBlock 

    self infoPanel progress: 'Working copy...' while: aBlock.

    "Created: / 21-10-2008 / 12:07:06 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 09-04-2009 / 08:28:26 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Created: / 11-02-2012 / 23:03:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!SCMAbstractDialog class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
!

version_GIT
    "Never, ever change this method. Ask JV or CG why"
    ^thisContext method mclass theNonMetaclass instVarNamed: #revision
!

version_HG

    ^ '$Changeset: <not expanded> $'
!

version_SVN
    ^ '$Id$'
! !