mirror of
https://gitlab.gnome.org/GNOME/gitg
synced 2024-10-31 04:58:58 +00:00
203 lines
4.9 KiB
Vala
203 lines
4.9 KiB
Vala
/* -*- Mode: vala; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */
|
|
/*
|
|
* Copyright (C) 2011 Alexander Larsson <alexl@redhat.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
using Gtk;
|
|
using Egg;
|
|
|
|
public void update_separator (ref Widget? separator,
|
|
Widget widget,
|
|
Widget? before)
|
|
{
|
|
if (before == null ||
|
|
(widget is Label && (widget as Label).get_text () == "blah3")) {
|
|
if (separator == null) {
|
|
var hbox = new Box(Orientation.HORIZONTAL, 0);
|
|
var l = new Label ("Separator");
|
|
hbox.add (l);
|
|
var b = new Button.with_label ("button");
|
|
hbox.add (b);
|
|
l.show ();
|
|
b.show ();
|
|
separator = hbox;
|
|
}
|
|
|
|
var hbox = separator as Box;
|
|
var id = widget.get_data<int>("sort_id");
|
|
var l = hbox.get_children ().data as Label;
|
|
l.set_text ("Separator %d".printf (id));
|
|
} else {
|
|
separator = null;
|
|
}
|
|
print ("update separator => %p\n", separator);
|
|
}
|
|
|
|
public static int
|
|
compare_label (Widget a, Widget b) {
|
|
var aa = a.get_data<int>("sort_id");
|
|
var bb = b.get_data<int>("sort_id");
|
|
return bb - aa;
|
|
}
|
|
|
|
public static int
|
|
compare_label_reverse (Widget a, Widget b) {
|
|
return - compare_label (a, b);
|
|
}
|
|
|
|
public static bool
|
|
filter (Widget widget) {
|
|
var text = (widget as Label).get_text ();
|
|
return strcmp (text, "blah3") != 0;
|
|
}
|
|
|
|
public static int
|
|
main (string[] args) {
|
|
|
|
Gtk.init (ref args);
|
|
|
|
var w = new Window ();
|
|
var hbox = new Box(Orientation.HORIZONTAL, 0);
|
|
w.add (hbox);
|
|
|
|
var list = new ListBox();
|
|
hbox.add (list);
|
|
|
|
list.child_activated.connect ( (child) => {
|
|
print ("activated %p\n", child);
|
|
});
|
|
|
|
list.child_selected.connect ( (child) => {
|
|
print ("selected %p\n", child);
|
|
});
|
|
|
|
var l = new Label ("blah4");
|
|
l.set_data ("sort_id", 4);
|
|
list.add (l);
|
|
var l3 = new Label ("blah3");
|
|
l3.set_data ("sort_id", 3);
|
|
list.add (l3);
|
|
l = new Label ("blah1");
|
|
l.set_data ("sort_id", 1);
|
|
list.add (l);
|
|
l = new Label ("blah2");
|
|
l.set_data ("sort_id", 2);
|
|
list.add (l);
|
|
|
|
var row_vbox = new Box (Orientation.VERTICAL, 0);
|
|
var row_hbox = new Box (Orientation.HORIZONTAL, 0);
|
|
row_vbox.set_data ("sort_id", 3);
|
|
l = new Label ("da box for da man");
|
|
row_hbox.add (l);
|
|
var check = new CheckButton ();
|
|
row_hbox.add (check);
|
|
var button = new Button.with_label ("ya!");
|
|
row_hbox.add (button);
|
|
row_vbox.add (row_hbox);
|
|
check = new CheckButton ();
|
|
row_vbox.add (check);
|
|
list.add (row_vbox);
|
|
|
|
button = new Button.with_label ("focusable row");
|
|
button.set_hexpand (false);
|
|
button.set_halign (Align.START);
|
|
list.add (button);
|
|
|
|
var vbox = new Box(Orientation.VERTICAL, 0);
|
|
hbox.add (vbox);
|
|
|
|
var b = new Button.with_label ("sort");
|
|
vbox.add (b);
|
|
b.clicked.connect ( () => {
|
|
list.set_sort_func (compare_label);
|
|
});
|
|
|
|
b = new Button.with_label ("reverse");
|
|
vbox.add (b);
|
|
b.clicked.connect ( () => {
|
|
list.set_sort_func (compare_label_reverse);
|
|
});
|
|
|
|
b = new Button.with_label ("change");
|
|
vbox.add (b);
|
|
b.clicked.connect ( () => {
|
|
if (l3.get_text () == "blah3") {
|
|
l3.set_text ("blah5");
|
|
l3.set_data ("sort_id", 5);
|
|
} else {
|
|
l3.set_text ("blah3");
|
|
l3.set_data ("sort_id", 3);
|
|
}
|
|
list.child_changed (l3);
|
|
});
|
|
|
|
b = new Button.with_label ("filter");
|
|
vbox.add (b);
|
|
b.clicked.connect ( () => {
|
|
list.set_filter_func (filter);
|
|
});
|
|
|
|
b = new Button.with_label ("unfilter");
|
|
vbox.add (b);
|
|
b.clicked.connect ( () => {
|
|
list.set_filter_func (null);
|
|
});
|
|
|
|
int new_button_nr = 1;
|
|
b = new Button.with_label ("add");
|
|
vbox.add (b);
|
|
b.clicked.connect ( () => {
|
|
var ll = new Label ("blah2 new %d".printf (new_button_nr));
|
|
l.set_data ("sort_id", new_button_nr);
|
|
new_button_nr++;
|
|
|
|
list.add (ll);
|
|
l.show ();
|
|
});
|
|
|
|
b = new Button.with_label ("separate");
|
|
vbox.add (b);
|
|
b.clicked.connect ( () => {
|
|
list.set_separator_funcs (update_separator);
|
|
});
|
|
|
|
b = new Button.with_label ("unseparate");
|
|
vbox.add (b);
|
|
b.clicked.connect ( () => {
|
|
list.set_separator_funcs (null);
|
|
});
|
|
|
|
|
|
w.show_all ();
|
|
|
|
var provider = new Gtk.CssProvider ();
|
|
provider.load_from_data (
|
|
"""
|
|
EggListBox:prelight {
|
|
background-color: green;
|
|
}
|
|
EggListBox:active {
|
|
background-color: red;
|
|
}
|
|
""", -1);
|
|
Gtk.StyleContext.add_provider_for_screen (Gdk.Screen.get_default (),
|
|
provider,
|
|
600);
|
|
|
|
Gtk.main ();
|
|
|
|
return 0;
|
|
}
|