… | |
… | |
266 | |
266 | |
267 | $widget->show_all; |
267 | $widget->show_all; |
268 | |
268 | |
269 | my $anchor = $self->{buffer}->create_child_anchor ($self->riter); |
269 | my $anchor = $self->{buffer}->create_child_anchor ($self->riter); |
270 | $self->{parent}{view}->add_child_at_anchor ($widget, $anchor); |
270 | $self->{parent}{view}->add_child_at_anchor ($widget, $anchor); |
|
|
271 | |
|
|
272 | $widget; |
271 | } |
273 | } |
272 | |
274 | |
273 | sub append_optionmenu { |
275 | sub append_optionmenu { |
274 | my ($self, $ref, @entry) = @_; |
276 | my ($self, $ref, @entry) = @_; |
275 | |
277 | |
276 | my @vals; |
278 | $self->append_widget (gtk::optionmenu $ref, @entry); |
277 | |
|
|
278 | my $widget = new Gtk2::OptionMenu; |
|
|
279 | $widget->set (menu => my $menu = new Gtk2::Menu); |
|
|
280 | |
|
|
281 | my $idx = 0; |
|
|
282 | |
|
|
283 | while (@entry >= 2) { |
|
|
284 | my $value = shift @entry; |
|
|
285 | my $label = shift @entry; |
|
|
286 | |
|
|
287 | $menu->append (new Gtk2::MenuItem $label); |
|
|
288 | push @vals, $value; |
|
|
289 | |
|
|
290 | if ($value eq $$ref && $idx >= 0) { |
|
|
291 | $widget->set_history ($idx); |
|
|
292 | $idx = -1e6; |
|
|
293 | } |
|
|
294 | $idx++; |
|
|
295 | } |
|
|
296 | |
|
|
297 | my $cb = shift @entry; |
|
|
298 | |
|
|
299 | $widget->signal_connect (changed => sub { |
|
|
300 | my $new = $vals[$_[0]->get_history]; |
|
|
301 | |
|
|
302 | if ($new ne $$ref) { |
|
|
303 | $$ref = $new; |
|
|
304 | $cb->($new) if $cb; |
|
|
305 | } |
|
|
306 | }); |
|
|
307 | |
|
|
308 | $self->append_widget ($widget); |
|
|
309 | |
|
|
310 | $widget; |
|
|
311 | } |
|
|
312 | |
|
|
313 | sub append_entry { |
|
|
314 | my ($self, $ref, $width, $cb) = @_; |
|
|
315 | |
|
|
316 | my $widget = new Gtk2::Entry; |
|
|
317 | $widget->set (text => $$ref, width_chars => $width); |
|
|
318 | eval { $widget->set (xalign => 1) }; # workaround für 2.2 |
|
|
319 | $widget->signal_connect (changed => sub { |
|
|
320 | $$ref = $_[0]->get_text; |
|
|
321 | $cb->($$ref) if $cb; |
|
|
322 | }); |
|
|
323 | |
|
|
324 | $self->append_widget ($widget); |
|
|
325 | $widget; |
|
|
326 | } |
279 | } |
327 | |
280 | |
328 | sub append_button { |
281 | sub append_button { |
329 | my ($self, $label, $cb) = @_; |
282 | my ($self, $label, $cb) = @_; |
330 | |
283 | |
331 | my $widget = new_with_label Gtk2::Button $label; |
284 | $self->append_widget (gtk::button $label, $cb); |
332 | $widget->signal_connect (clicked => sub { $cb->() if $cb }); |
|
|
333 | |
|
|
334 | $self->append_widget ($widget); |
|
|
335 | $widget; |
|
|
336 | } |
285 | } |
337 | |
286 | |
338 | sub visible { $_[0]{visible} } |
287 | sub visible { $_[0]{visible} } |
339 | |
288 | |
340 | sub set_visible { |
289 | sub set_visible { |