Thanks! Is exactly that I wanted :)


On Tue, May 27, 2008 at 3:43 AM, muppet <[EMAIL PROTECTED]> wrote:

>
> On May 25, 2008, at 2:40 PM, anguila wrote:
>
>  How can I paste the clipboard (with Control + V) over a gtktreeview widget
>> (list) ?
>> Any idea?
>>
>
> So far as i know, you create a key binding (e.g. with a menu item), and
> then in the handler for that command, pull data from the clipboard and do
> the appropriate list insertions.
>
> Instead of spamming the message with lots of boilerplate code to set up the
> accelerators and all that, here's a bunch of GtkBuilder XML.  The
> interesting part is the on_paste() callback, near the end, which just grabs
> the clipboard contents as plain text, splits by whitespace, and inserts each
> item as its own line.  In a real app, you'd do more appropriate parsing and
> marshaling and whatnot.
>
>
> #!/usr/bin/env perl
>
> use strict;
> use warnings;
> use Glib ':constants';
> use Gtk2 -init;
> use Gtk2::SimpleList;
>
> #
> # Gtk2::Builder is cool.  Now we can express the shortcuts and menu items
> # and all that as data instead of as tedious code.
> #
> my $interface = '<interface>
>  <object class="GtkUIManager" id="uimanager">
>    <child>
>      <object class="GtkActionGroup" id="actions">
>        <child>
>          <object class="GtkAction" id="file-menu">
>            <property name="label">_File</property>
>          </object>
>        </child>
>        <child>
>          <object class="GtkAction" id="quit">
>            <property name="stock-id">gtk-quit</property>
>            <signal name="activate" handler="on_quit" />
>          </object>
>        </child>
>        <child>
>          <object class="GtkAction" id="paste">
>            <property name="stock-id">gtk-paste</property>
>            <signal name="activate" handler="on_paste" />
>          </object>
>        </child>
>        <child>
>          <object class="GtkAction" id="clear">
>            <property name="stock-id">gtk-delete</property>
>            <signal name="activate" handler="on_clear" />
>          </object>
>        </child>
>      </object>
>    </child>
>    <ui>
>      <menubar name="menubar">
>        <menu action="file-menu">
>          <menuitem action="paste"/>
>          <menuitem action="clear"/>
>          <menuitem action="quit"/>
>        </menu>
>      </menubar>
>    </ui>
>  </object>
>  <object class="GtkWindow" id="window">
>    <property name="default-width">250</property>
>    <property name="default-height">500</property>
>    <signal name="destroy" handler="on_window_destroy" />
>    <child>
>      <object class="GtkVBox" id="vbox">
>        <child>
>          <object class="GtkMenu" constructor="uimanager" id="menubar" />
>          <packing>
>            <property name="expand">false</property>
>          </packing>
>        </child>
>        <child>
>          <object class="GtkScrolledWindow" id="scroller">
>            <property name="hscrollbar-policy">automatic</property>
>            <property name="vscrollbar-policy">automatic</property>
>            <child>
>              <object class="GtkTreeView" id="treeview">
>                <property name="headers-visible">false</property>
>              </object>
>            </child>
>          </object>
>        </child>
>      </object>
>    </child>
>  </object>
> </interface>';
>
>
> my $builder = Gtk2::Builder->new ();
> $builder->add_from_string ($interface);
> $builder->connect_signals ();
>
> my $slist = Gtk2::SimpleList->new_from_treeview (
>        $builder->get_object ('treeview'),
>        Words => 'text',
> );
>
>
> $builder->get_object ('window')->show_all;
>
> Gtk2->main;
>
>
> sub on_window_destroy { Gtk2->main_quit }
> sub on_quit { $builder->get_object ('window')->destroy; }
>
> #
> # Here's the interesting part.
> #
> sub on_paste {
>    my $clipboard = Gtk2::Clipboard->get_for_display
>                ($builder->get_object ('window')->get_display (),
>                 Gtk2::Gdk->SELECTION_PRIMARY);
>
>    my $text = $clipboard->wait_for_text ();
>
>    foreach (split /\s+/, $text) {
>        push @{ $slist->{data} }, $_ if length;
>    }
> }
>
> sub on_clear {
>    @{ $slist->{data} } = ();
> }
>
> __END__
>
>
> --
> Zella, carrying a kite in a long plastic box:  It's like book!
> Yvonne, carrying the wooden kite string spool:  It's like a wood!
>
>
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to