Cairo__AbstractViewer.st
changeset 52 5a800f51a584
parent 50 239120c68187
child 57 2c9a342e1f2a
equal deleted inserted replaced
51:5293f2b851ab 52:5a800f51a584
     1 "{ Package: 'stx:goodies/libcairo' }"
     1 "{ Package: 'stx:goodies/libcairo' }"
     2 
     2 
     3 "{ NameSpace: Cairo }"
     3 "{ NameSpace: Cairo }"
     4 
     4 
     5 ApplicationModel subclass:#AbstractViewer
     5 ApplicationModel subclass:#AbstractViewer
     6 	instanceVariableNames:'workspace exampleCodeHolder exampleMethodHolder'
     6 	instanceVariableNames:'workspace exampleCodeHolder exampleMethodHolder zoomHolder'
     7 	classVariableNames:''
     7 	classVariableNames:''
     8 	poolDictionaries:''
     8 	poolDictionaries:''
     9 	category:'Cairo-Examples'
     9 	category:'Cairo-Examples'
    10 !
    10 !
    11 
    11 
   120     "Do not manually edit this!! If it is corrupted,
   120     "Do not manually edit this!! If it is corrupted,
   121      the MenuEditor may not be able to read the specification."
   121      the MenuEditor may not be able to read the specification."
   122 
   122 
   123 
   123 
   124     "
   124     "
   125      MenuEditor new openOnClass:Cairo::Examples andSelector:#windowMenu
   125      MenuEditor new openOnClass:Cairo::AbstractViewer andSelector:#windowMenu
   126      (Menu new fromLiteralArrayEncoding:(Cairo::Examples windowMenu)) startUp
   126      (Menu new fromLiteralArrayEncoding:(Cairo::AbstractViewer windowMenu)) startUp
   127     "
   127     "
   128 
   128 
   129     <resource: #menu>
   129     <resource: #menu>
   130 
   130 
   131     ^ 
   131     ^ 
   151            (Menu
   151            (Menu
   152               (
   152               (
   153                (MenuItem
   153                (MenuItem
   154                   label: 'Cut'
   154                   label: 'Cut'
   155                   itemValue: cutSelection
   155                   itemValue: cutSelection
       
   156                   nameKey: Cut
       
   157                   shortcutKey: Cut
   156                 )
   158                 )
   157                (MenuItem
   159                (MenuItem
   158                   label: 'Copy'
   160                   label: 'Copy'
   159                   itemValue: copySelection
   161                   itemValue: copySelection
       
   162                   nameKey: Copy
       
   163                   shortcutKey: Copy
   160                 )
   164                 )
   161                (MenuItem
   165                (MenuItem
   162                   label: 'Paste'
   166                   label: 'Paste'
   163                   itemValue: paste
   167                   itemValue: paste
       
   168                   nameKey: Paste
       
   169                   shortcutKey: Paste
       
   170                 )
       
   171                (MenuItem
       
   172                   label: '-'
       
   173                 )
       
   174                (MenuItem
       
   175                   label: 'Accept'
       
   176                   nameKey: Accept
       
   177                   shortcutKey: Accept
       
   178                 )
       
   179                )
       
   180               nil
       
   181               nil
       
   182             )
       
   183           )
       
   184          (MenuItem
       
   185             label: 'View'
       
   186             submenu: 
       
   187            (Menu
       
   188               (
       
   189                (MenuItem
       
   190                   label: 'Refresh'
       
   191                   itemValue: menuViewRefresh
   164                 )
   192                 )
   165                )
   193                )
   166               nil
   194               nil
   167               nil
   195               nil
   168             )
   196             )
   169           )
   197           )
   170          (MenuItem
   198          (MenuItem
   171             label: 'Examples'
   199             label: 'Examples'
   172             submenuChannel: menuExamples
   200             submenuChannel: menuExamples
       
   201           )
       
   202          (MenuItem
       
   203             label: 'Zoom'
       
   204             submenu: 
       
   205            (Menu
       
   206               (
       
   207                (MenuItem
       
   208                   label: 'Larger'
       
   209                   itemValue: menuZoomLarger
       
   210                   shortcutKey: #'Ctrl='
       
   211                 )
       
   212                (MenuItem
       
   213                   label: 'Smaller'
       
   214                   itemValue: menuZoomSmaller
       
   215                   shortcutKey: #'Ctrl-'
       
   216                 )
       
   217                (MenuItem
       
   218                   label: '-'
       
   219                 )
       
   220                (MenuItem
       
   221                   label: '100%'
       
   222                   itemValue: menuZoomSet:
       
   223                   argument: 100
       
   224                 )
       
   225                (MenuItem
       
   226                   label: '200%'
       
   227                   itemValue: menuZoomSet:
       
   228                   argument: 200
       
   229                 )
       
   230                (MenuItem
       
   231                   label: '400%'
       
   232                   itemValue: menuZoomSet:
       
   233                   argument: 400
       
   234                 )
       
   235                )
       
   236               nil
       
   237               nil
       
   238             )
   173           )
   239           )
   174          )
   240          )
   175         nil
   241         nil
   176         nil
   242         nil
   177       )
   243       )
   178 
   244 
   179     "Modified: / 26-02-2016 / 22:39:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   245     "Modified: / 28-02-2016 / 16:22:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   180 ! !
   246 ! !
   181 
   247 
   182 !AbstractViewer methodsFor:'aspects'!
   248 !AbstractViewer methodsFor:'aspects'!
   183 
   249 
   184 exampleCodeHolder
   250 exampleCodeHolder
   235     ].
   301     ].
   236     newValue := exampleMethodHolder value.
   302     newValue := exampleMethodHolder value.
   237     oldValue ~~ newValue ifTrue:[
   303     oldValue ~~ newValue ifTrue:[
   238         self update:#value with:newValue from:exampleMethodHolder.
   304         self update:#value with:newValue from:exampleMethodHolder.
   239     ].
   305     ].
       
   306 !
       
   307 
       
   308 zoomHolder
       
   309     "return/create the 'zoomHolder' value holder (automatically generated)"
       
   310 
       
   311     zoomHolder isNil ifTrue:[
       
   312         zoomHolder := ValueHolder with: 100.
       
   313         zoomHolder addDependent:self.
       
   314     ].
       
   315     ^ zoomHolder
       
   316 
       
   317     "Modified: / 28-02-2016 / 16:12:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   318 !
       
   319 
       
   320 zoomHolder:something
       
   321     "set the 'zoomHolder' value holder (automatically generated)"
       
   322 
       
   323     |oldValue newValue|
       
   324 
       
   325     zoomHolder notNil ifTrue:[
       
   326         oldValue := zoomHolder value.
       
   327         zoomHolder removeDependent:self.
       
   328     ].
       
   329     zoomHolder := something.
       
   330     zoomHolder notNil ifTrue:[
       
   331         zoomHolder addDependent:self.
       
   332     ].
       
   333     newValue := zoomHolder value.
       
   334     oldValue ~~ newValue ifTrue:[
       
   335         self update:#value with:newValue from:zoomHolder.
       
   336     ].
   240 ! !
   337 ! !
   241 
   338 
   242 !AbstractViewer methodsFor:'change & update'!
   339 !AbstractViewer methodsFor:'change & update'!
   243 
   340 
   244 update:something with:aParameter from:changedObject
   341 update:something with:aParameter from:changedObject
   252     ].
   349     ].
   253     changedObject == exampleMethodHolder ifTrue:[
   350     changedObject == exampleMethodHolder ifTrue:[
   254          self updateAfterExampleMethodChanged.
   351          self updateAfterExampleMethodChanged.
   255          ^ self.
   352          ^ self.
   256     ].
   353     ].
       
   354     changedObject == zoomHolder ifTrue:[
       
   355          self updateAfterZoomChanged.
       
   356          ^ self.
       
   357     ].
       
   358 
   257     super update:something with:aParameter from:changedObject
   359     super update:something with:aParameter from:changedObject
   258 
   360 
   259     "Modified: / 26-02-2016 / 21:32:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   361     "Modified: / 28-02-2016 / 16:12:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   260 !
   362 !
   261 
   363 
   262 updateAfterExampleCodeChanged
   364 updateAfterExampleCodeChanged
   263     | code method |
   365     | code method |
   264 
   366 
   277 
   379 
   278 updateAfterExampleMethodChanged
   380 updateAfterExampleMethodChanged
   279     self subclassResponsibility
   381     self subclassResponsibility
   280 
   382 
   281     "Created: / 26-02-2016 / 21:32:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   383     "Created: / 26-02-2016 / 21:32:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   384 !
       
   385 
       
   386 updateAfterZoomChanged
       
   387     self redraw
       
   388 
       
   389     "Created: / 28-02-2016 / 16:12:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   282 ! !
   390 ! !
   283 
   391 
   284 !AbstractViewer methodsFor:'hooks'!
   392 !AbstractViewer methodsFor:'hooks'!
   285 
   393 
   286 postBuildWorkspace:aCodeView2
   394 postBuildWorkspace:aCodeView2
   350     source := source copyFrom: 2.
   458     source := source copyFrom: 2.
   351     source := source asString.
   459     source := source asString.
   352     self menuExampleShow: source.
   460     self menuExampleShow: source.
   353 
   461 
   354     "Created: / 26-02-2016 / 22:28:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   462     "Created: / 26-02-2016 / 22:28:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   463 !
       
   464 
       
   465 menuViewRefresh
       
   466     self redraw.
       
   467 
       
   468     "Created: / 28-02-2016 / 16:10:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   469 !
       
   470 
       
   471 menuZoomLarger
       
   472     self zoomHolder value: self zoomHolder value + 10.
       
   473 
       
   474     "Created: / 28-02-2016 / 16:13:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   475 !
       
   476 
       
   477 menuZoomSet: aNumber
       
   478     self zoomHolder value: aNumber
       
   479 
       
   480     "Created: / 28-02-2016 / 16:13:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   481 !
       
   482 
       
   483 menuZoomSmaller
       
   484     self zoomHolder value: self zoomHolder value - 10.
       
   485 
       
   486     "Created: / 28-02-2016 / 16:13:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   355 ! !
   487 ! !
   356 
   488 
   357 !AbstractViewer methodsFor:'private'!
   489 !AbstractViewer methodsFor:'private'!
       
   490 
       
   491 redraw
       
   492     self subclassResponsibility
       
   493 
       
   494     "Created: / 28-02-2016 / 16:21:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   495 !
   358 
   496 
   359 redraw:view using: method
   497 redraw:view using: method
   360     self subclassResponsibility
   498     self subclassResponsibility
   361 
   499 
   362     "Created: / 26-02-2016 / 21:40:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   500     "Created: / 26-02-2016 / 21:40:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   366     method notNil ifTrue:[    
   504     method notNil ifTrue:[    
   367         method valueWithReceiver:nil arguments:(Array with: gc).    
   505         method valueWithReceiver:nil arguments:(Array with: gc).    
   368     ]
   506     ]
   369 
   507 
   370     "Created: / 26-02-2016 / 21:47:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   508     "Created: / 26-02-2016 / 21:47:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   371 !
       
   372 
       
   373 redraw:arg1 usingMethod:arg2
       
   374     "raise an error: must be redefined in concrete subclass(es)"
       
   375 
       
   376     ^ self subclassResponsibility
       
   377 !
       
   378 
       
   379 redrawUsingCode:aString
       
   380     ^ self subclassResponsibility
       
   381 
       
   382     "Modified (comment): / 26-02-2016 / 21:23:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   383 !
       
   384 
       
   385 redrawUsingMethod:aString
       
   386     ^ self subclassResponsibility
       
   387 
       
   388     "Created: / 26-02-2016 / 21:23:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   389 ! !
   509 ! !
   390 
   510 
   391 !AbstractViewer methodsFor:'private - templates'!
   511 !AbstractViewer methodsFor:'private - templates'!
   392 
   512 
   393 exampleMethodParameterName
   513 exampleMethodParameterName