editLine

$canvaseditor editLine obj
edits selected line object

obj method canvaseditor editLine line {
  $self memory before "
    [$line restoreCode]
    $line draw
    $self select
    $self select $line
    "
  $self select
  $self select $line
  $line blink off
  $self basicBindings off
  $self statusLine Editing line $line
  $self buildInfoWindow
  $line dots show
  set canvas [my canvas]
  #
  set menu $canvas.context.dot
  destroy $menu
  menu $menu -tearoff no
  #
  $self canvas bind dot <3> [list apply {
      {self menu x y} {
        tk_popup $menu $x $y
        foreach tag [$self canvas gettags current] {
          if {[string match dot::* $tag]} then {
            set dot [string range $tag 3 end]
            proc lastDot args "$dot {*}\$args"
            break
          }
        }
      }
    } $self $menu %X %Y]
  #
  $menu add cascade -label Move -menu [menu $menu.move -tearoff no]
  $menu.move add command -label Free\
    -command [list apply [list {self canvas line} {
        $self pointerToDot [lastDot]
        $line dots show no
        bind $canvas <Motion> [subst -nocommand {
            lastDot configure\
              -x [$self canvasx %x]\
              -y [$self canvasy %y]
            lastDot lines draw
          }]
        bind $canvas <<Click>> "
          bind $canvas <Motion> {}
          $line dots show
          "
        bind $canvas <<ControlClick>>\
          [list apply [list {self canvas x y} {
              proc pointerXY {} "list $x $y"
              $self pointerToDot [$self nearestDot -unselected]
              event generate $canvas <<Motion>>
              event generate $canvas <<Click>>
              lastDot configure\
                -x [$self nearestDot -unselected cget -x]\
                -y [$self nearestDot -unselected cget -y]
            } [namespace current]] $self $canvas %x %y]
      } [namespace current]] $self $canvas $line]
  $menu.move add command -label Horizontal\
    -command [list apply [list {self canvas line} {
        $self pointerToDot [lastDot]
        $line dots show no
        bind $canvas <Motion> [subst -nocommand {
            lastDot configure -x [$self canvasx %x]
            lastDot lines draw
          }]
        bind $canvas <<Click>> "
          bind $canvas <Motion> {}
          $line dots show
          "
        bind $canvas <<ControlClick>>\
          [list apply [list {self canvas x y} {
              proc pointerXY {} "list $x $y"
              $self pointerToDot [$self nearestDot -unselected]
              event generate $canvas <<Motion>>
              event generate $canvas <<Click>>
              lastDot configure\
                -x [$self nearestDot -unselected cget -x]
            } [namespace current]] $self $canvas %x %y]
      } [namespace current]] $self $canvas $line]
  $menu.move add command -label Vertical\
    -command [list apply [list {self canvas line} {
        $self pointerToDot [lastDot]
        $line dots show no
        bind $canvas <Motion> [subst -nocommand {
            lastDot configure -y [$self canvasy %y]
            lastDot lines draw
          }]
        bind $canvas <<Click>> "
          bind $canvas <Motion> {}
          $line dots show
          "
        bind $canvas <<ControlClick>>\
          [list apply [list {self canvas x y} {
              proc pointerXY {} "list $x $y"
              $self pointerToDot [$self nearestDot -unselected]
              event generate $canvas <<Motion>>
              event generate $canvas <<Click>>
              lastDot configure\
                -y [$self nearestDot -unselected cget -y]
            } [namespace current]] $self $canvas %x %y]
      } [namespace current]] $self $canvas $line]
  $menu add command -label Smooth -command [list apply {
      line {
        $line dots show no
        if {[$line cget -smooth]} then {
          $line configure -smooth no
        } else {
          $line configure -smooth yes
        }
        $line draw
        $line dots show
      }
    } $line]
  $menu add separator
  $menu add command -label Done -accelerator Esc -command [list apply {
      {self line} {
        $line dots show no
        $self basicBindings on
        $self canvas bind dot <3> {}
        set after "
          [$line restoreCode]
          $line draw
          $self select
          $self select $line
          "
        $self memory after $after
        $self initUndoRedo [$self memory before] [$self memory after]
        $self select
        $self select $line
      }
    } $self $line]
  bind $canvas <<DoubleClick>> "$menu invoke Done"
  #
  set done $canvas.context.done
  destroy $done
  $canvas.context add cascade -menu [menu $done -tearoff no]
  $done add command -label Smooth -command "$menu invoke Smooth"
  $done add separator
  $done add command -label Done -accelerator Esc -command "$menu invoke Done"
  bind $canvas <3> [subst -nocommand {
      if {[$self canvas find withtag current] eq ""} then {
        tk_popup $done %X %Y
      }
    }]
  bind $canvas <Escape> "$done invoke Done"
}

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