Class Canvaseditor

Class canvaseditor deals with objects dot, line, fill, group. Constructor takes canvas window as argument. Contextmenu only. Pointer coords are store on right mouse-key.

Common data: instances to calculate ID for XML processing.

Private data: settings, selection, undoStack, redoStack, undonePtr, destroyAction to be iinvoked by destructor, memory for different purposes.

Constructor parameters: canvas window and optional action to be done on destroy.


obj class canvaseditor -common "
  instances {}
  garbage [obj new group]
  "
obj constructor canvaseditor {canvas {destroyAction {}}} {
  ::destroy $canvas.x $canvas.y
  $canvas configure\
    -xscrollcommand "[scrollbar $canvas.x\
      -orient horizontal\
      -command "$canvas xview"] set"\
    -yscrollcommand "[scrollbar $canvas.y\
      -orient vertical\
      -command "$canvas yview"] set"
  variable level
  incr level($canvas)
  if {$self ni [our instances]} then {
    our instances [list {*}[our instances] $self]
  }
  my destroyAction $destroyAction
  my zoom [obj inscope dot set zoom]
  my canvas $canvas
  my defaultmessage Ready
  my memory {
    before {}
    after {}
    transformation {}
  }
  my settings [dict create filename ""\
    width [winfo reqwidth $canvas]\
    height [winfo reqheight $canvas]\
    background gray95\
    svgtool eog\
    pstool evince]
  my undoStack {}
  my redoStack {}
  my undonePtr 0
  my lastFillColor white
  my lastLineColor black
  my selection {}
  if {![winfo exists $canvas]} then {
    ::canvas $canvas
  }
  $canvas configure -highlightthickness 0\
    -background [$self setting background]\
    -width [$self setting width]\
    -height [$self setting height]\
    -scrollregion "0 0\
      [* [my zoom] [$self setting width]]\
      [* [my zoom] [$self setting height]]"
  $self buildMenu
  $self basicBindings
}
obj destructor canvaseditor {
  variable level
  incr level([my canvas]) -1
  set index [lsearch [our instances] $self]
  our instances [lreplace [our instances] $index $index]
  $self basicBindings off
  apply [list self [my destroyAction]] $self
}

© Wolf-Dieter Busch | Home | Sitemap | Urheber | A-Z