Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #50 from azawawi/master
Add LinkButton widget
  • Loading branch information
azawawi committed Jun 8, 2016
2 parents cbab244 + 5dd0726 commit da08826
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 0 deletions.
1 change: 1 addition & 0 deletions META6.json
Expand Up @@ -24,6 +24,7 @@
"GTK::Simple::Grid" : "lib/GTK/Simple/Grid.pm6",
"GTK::Simple::HBox" : "lib/GTK/Simple/HBox.pm6",
"GTK::Simple::Label" : "lib/GTK/Simple/Label.pm6",
"GTK::Simple::LinkButton" : "lib/GTK/Simple/LinkButton.pm6",
"GTK::Simple::MarkUpLabel" : "lib/GTK/Simple/MarkUpLabel.pm6",
"GTK::Simple::Menu" : "lib/GTK/Simple/Menu.pm6",
"GTK::Simple::MenuBar" : "lib/GTK/Simple/MenuBar.pm6",
Expand Down
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -14,6 +14,7 @@ FileChooserButton | A button that opens a file chooser dialog
Frame | A bin with a decorative frame and optional label
Grid | A table-like container for widgets for window design
Label | Adds a line of text
LinkButton | Create buttons bound to a URL
MarkUpLabel | Adds text with GTK mark up (e.g. color and font manipulation)
Menu | A simple menu with a menu item label
MenuBar | A simple menu bar that contain one or more menus
Expand Down
37 changes: 37 additions & 0 deletions examples/15-link-button.pl6
@@ -0,0 +1,37 @@
#!/usr/bin/env perl6

use v6;
use lib 'lib';
use GTK::Simple::App;
use GTK::Simple::LinkButton;
use GTK::Simple::TextView;
use GTK::Simple::VBox;

my $app = GTK::Simple::App.new(title => 'Link Button Demo');

my $link1-button = GTK::Simple::LinkButton.new(:label("Perl 6"),
:uri("http://perl6.org"));
my $link2-button = GTK::Simple::LinkButton.new(:label("Perl 6 Docs"),
:uri("http://doc.perl6.org"));
my $text-view = GTK::Simple::TextView.new;

$link1-button.activate-link.tap: {
$text-view.text ~= sprintf("activate-link %s triggerred, visited=%s\n",
$link1-button.uri, $link1-button.visited);
}

$link2-button.activate-link.tap: {
$text-view.text ~= sprintf("activate-link %s triggerred, visited=%s\n",
$link2-button.uri, $link2-button.visited);
}

$app.set-content(
GTK::Simple::VBox.new([
{ :widget($link1-button), :expand(False) },
{ :widget($link2-button), :expand(False) },
$text-view,
])
);

$app.border-width = 20;
$app.run;
1 change: 1 addition & 0 deletions lib/GTK/Simple.pm6
Expand Up @@ -36,3 +36,4 @@ require GTK::Simple::MenuItem;
require GTK::Simple::FileChooserButton;
require GTK::Simple::PlacesSidebar;
require GTK::Simple::RadioButton;
require GTK::Simple::LinkButton;
38 changes: 38 additions & 0 deletions lib/GTK/Simple/LinkButton.pm6
@@ -0,0 +1,38 @@

use v6;

use NativeCall;
use GTK::Simple::Raw :link-button, :DEFAULT;
use GTK::Simple::Common;
use GTK::Simple::Button;

unit class GTK::Simple::LinkButton is GTK::Simple::Button;

has $!activate-link-supply;

submethod BUILD(:$label!, :$uri!) {
self.WIDGET( gtk_link_button_new_with_label($uri, $label) );
}

method uri()
returns Str
is gtk-property(&gtk_link_button_get_uri, &gtk_link_button_set_uri)
{ * }

method visited()
returns Str
is gtk-property(&gtk_link_button_get_visited, &gtk_link_button_set_visited)
{ * }

method activate-link() {
$!activate-link-supply //= do {
my $s = Supplier.new;
g_signal_connect_wd(self.WIDGET, "activate-link",
-> $, $ {
$s.emit(self);
CATCH { default { note $_; } }
},
OpaquePointer, 0);
$s.Supply;
}
}
32 changes: 32 additions & 0 deletions lib/GTK/Simple/Raw.pm6
Expand Up @@ -885,3 +885,35 @@ sub gtk_radio_button_join_group(GtkWidget $radio-button, GtkWidget $group-source
is native(&gtk-lib)
is export(:radio-button)
{ * }


#
# LinkButton
#
sub gtk_link_button_new_with_label( Str $uri, Str $label )
returns GtkWidget
is native(&gtk-lib)
is export(:link-button)
{ * }

sub gtk_link_button_get_uri(GtkWidget $link-button)
returns Str
is native(&gtk-lib)
is export(:link-button)
{ * }

sub gtk_link_button_set_uri(GtkWidget $link-button, Str $uri)
is native(&gtk-lib)
is export(:link-button)
{ * }

sub gtk_link_button_get_visited(GtkWidget $link-button)
returns Bool
is native(&gtk-lib)
is export(:link-button)
{ * }

sub gtk_link_button_set_visited(GtkWidget $link-button, Bool $visited)
is native(&gtk-lib)
is export(:link-button)
{ * }

0 comments on commit da08826

Please sign in to comment.