App-Chart

 view release on metacpan or  search on metacpan

lib/App/Chart/Gtk2/AnnDrag.pm  view on Meta::CPAN

}

sub draw {
  my ($want, $region) = @_;
  if (DEBUG >= 2) { print "  draw drawn=$drawn want=$want\n"; }
  if ($drawn != $want) {
    $edit_elem->draw ($graph, $region);
    $drawn = $want;
  }
}

sub move {
  my ($x, $y) = @_;
  if (! $active) { return; }
  if (DEBUG) { print "AnnDrag move $x, $y\n"; }

  my $t = $graph->x_to_date ($x);
  my $price = $graph->y_to_value ($y);
  my $scale_y = $graph->scale_y_proc;

  if (DEBUG) {
    print "  $t, $price  was ",$edit_elem->t,",",$edit_elem->price," (",
      $graph->scale_y ($edit_elem->price),")\n";
  }

  # redraw only if changed
  if ($edit_elem->t != $t
      || $scale_y->($edit_elem->price) != $scale_y->($price)) {
    if (DEBUG >= 2) { print "  redraw\n"; }
    draw (0);
    $edit_elem->t ($t);
    $edit_elem->price ($price);
    draw (1);
  } else {
    if (DEBUG >= 2) { print "  no pixel position change\n"; }
    # but store floating point price always
    $edit_elem->price ($price);
  }
}

sub _do_key_snooper {
  my ($widget, $event) = @_;

  # ignore key releases
  $event->type eq 'key-press' or return Gtk2::EVENT_PROPAGATE;

  # needing an actual self Gtk2::Object
  #   require Gtk2::Ex::BindingBits;
  #   Gtk2::Ex::BindingBits::activate_event
  #   if (App::Chart::Gtk2::GUI::bindings_activate_event ('App__Chart__Gtk2__AnnDrag_keys',
  #                                                $event, $self)) {
  #     return Gtk2::EVENT_STOP; # since handled
  #   }

  my $keyval = $event->keyval;
  my $modifiers = $event->state;
  $modifiers = $modifiers & Gtk2::Accelerator->get_default_mod_mask;
  my $key = lc (Gtk2::Gdk->keyval_name ($keyval));
  if (DEBUG) { print "keypress $key\n"; }

  if ($key eq 'escape') {
    abort ();

  } elsif ($key eq 'a') {
    toggle_alert ();

  } elsif ($key eq 'space') {
    swap_ends ();

  } elsif ($key eq 'd') {
    delete_elem ();

  } elsif ($key eq 'h') {
    toggle_horizontal ();

  } else {
    # some key not for us
    return Gtk2::EVENT_PROPAGATE;
  }

  # any of the handled keys
  return Gtk2::EVENT_STOP;
}

sub toggle_alert {
  goto &_do_toggle_alert;
}
sub _do_toggle_alert {
  my ($self) = @_;
  if ($edit_elem->isa('App::Chart::Annotation::Line')) {
    if ($edit_elem->{'id'}) {
      $graph->error_bell;
      return;
    }
    draw (0);
    $edit_elem = App::Chart::Annotation::Alert->new
      (symbol => $edit_elem->{'symbol'},
       price  => $edit_elem->{'price1'},
       above  => 1);

  } else {
    draw (0);
    $edit_elem->{'above'} = ($edit_elem->{'above'} ? 0 : 1);
  }
  draw (1);
}

sub toggle_horizontal {
  goto &_do_toggle_horizontal;
}
sub _do_toggle_horizontal {
  my ($self) = @_;
  draw (0);
  $edit_elem->{'horizontal'} = ($edit_elem->{'horizontal'} ? 0 : 1);
  draw (1);
}

sub swap_ends {
  goto &_do_swap_ends;
}
sub _do_swap_ends {



( run in 1.211 second using v1.01-cache-2.11-cpan-39bf76dae61 )