Use GtkInfoBar

This commit is contained in:
Alexander Kojevnikov 2012-08-05 14:40:57 -07:00
parent 2c76ad3d8e
commit ed15610270
5 changed files with 17 additions and 94 deletions

View File

@ -13,14 +13,10 @@ Upstream Author:
Copyright:
For everything not noted below:
Copyright (C) 2010-2011 Alexander Kojevnikov
For src/spek-message-bar.*:
Copyright (C) 2010 Alexander Kojevnikov
Copyright (C) 2008 Novell, Inc
Copyright (C) 2010-2012 Alexander Kojevnikov
For src/spek-pipeline.*:
Copyright (C) 2010-2011 Alexander Kojevnikov
Copyright (C) 2010-2012 Alexander Kojevnikov
Copyright (C) 2007-2009 Sebastian Dröge
Copyright (C) 2006 Stefan Kost
Copyright (C) 1999 Erik Walthinsen

View File

@ -1,7 +1,6 @@
[encoding: UTF-8]
data/spek.desktop.in.in
src/spek-audio.c
src/spek-message-bar.vala
src/spek-pipeline.vala
src/spek-preferences-dialog.vala
src/spek-preferences.vala

View File

@ -4,7 +4,6 @@ spek_SOURCES = \
spek.vala \
spek-audio.c \
spek-fft.c \
spek-message-bar.vala \
spek-pipeline.vala \
spek-platform.c \
spek-preferences.vala \

View File

@ -1,82 +0,0 @@
/* spek-message-bar.vala
*
* Copyright (C) 2010 Alexander Kojevnikov <alexander@kojevnikov.com>
*
* Spek 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 3 of the License, or
* (at your option) any later version.
*
* Spek 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 Spek. If not, see <http://www.gnu.org/licenses/>.
*
* This class is heavily influenced by its namesake from Banshee.
* The original code by Aaron Bockover is (c) 2008 Novell, Inc.
*/
using Gtk;
namespace Spek {
public class MessageBar : HBox {
private Label label;
private Gtk.Window win;
public MessageBar (string message) {
homogeneous = false;
spacing = 0;
border_width = 6;
win = new Gtk.Window (WindowType.POPUP);
win.name = "gtk-tooltips";
win.ensure_style ();
win.style_set.connect (() => style = win.style);
label = new Label (null);
label.use_markup = true;
label.set_markup (message);
label.ellipsize = Pango.EllipsizeMode.END;
label.xalign = 0f;
label.activate_link.connect (uri => { Platform.show_uri (uri); return true; });
var button_box = new HBox (false, 0);
button_box.spacing = 3;
var close_button = new Button ();
close_button.image = new Gtk.Image.from_stock (Stock.CLOSE, IconSize.MENU);
close_button.relief = ReliefStyle.NONE;
close_button.clicked.connect (() => hide ());
pack_start (label, true, true, 0);
pack_start (button_box, false, false, 0);
pack_start (close_button, false, false, 0);
}
private bool changing_style = false;
protected override void style_set (Style? previous_style) {
if (changing_style) {
return;
}
changing_style = true;
style = win.style;
label.style = style;
changing_style = false;
}
protected override bool expose_event (Gdk.EventExpose event) {
if (!is_drawable ()) {
return false;
}
var cr = Gdk.cairo_create (event.window);
var color = style.bg[StateType.NORMAL];
cr.set_source_rgb (color.red / 65535.0, color.green / 65535.0, color.blue / 65535.0);
cr.rectangle (allocation.x, allocation.y, allocation.width, allocation.height);
cr.fill ();
return base.expose_event (event);
}
}
}

View File

@ -23,7 +23,7 @@ namespace Spek {
public class Window : Gtk.Window {
private UIManager ui;
private MessageBar message_bar;
private InfoBar info_bar;
private Spectrogram spectrogram;
private string description;
private string cur_dir;
@ -97,7 +97,18 @@ namespace Spek {
((ToolItem) ui.get_widget ("/ToolBar/FileSave")).is_important = true;
((ToolItem) ui.get_widget ("/ToolBar/HelpAbout")).is_important = true;
message_bar = new MessageBar (_("A new version of Spek is available on <a href=\"http://www.spek-project.org\">www.spek-project.org</a>"));
info_bar = new InfoBar.with_buttons (Stock.OK, ResponseType.OK);
var label = new Label (null);
label.use_markup = true;
label.set_markup (_("A new version of Spek is available on <a href=\"http://www.spek-project.org\">www.spek-project.org</a>"));
label.ellipsize = Pango.EllipsizeMode.END;
label.xalign = 0f;
label.activate_link.connect (uri => { Platform.show_uri (uri); return true; });
label.show();
var content_area = (Container) info_bar.get_content_area();
content_area.add(label);
info_bar.message_type = MessageType.INFO;
info_bar.response.connect(() => info_bar.hide());
spectrogram = new Spectrogram ();
cur_dir = Environment.get_home_dir ();
@ -117,7 +128,7 @@ namespace Spek {
var vbox = new VBox (false, 0);
vbox.pack_start (menubar, false, true, 0);
vbox.pack_start (toolbar, false, true, 0);
vbox.pack_start (message_bar, false, true, 0);
vbox.pack_start (info_bar, false, true, 0);
vbox.pack_start (spectrogram, true, true, 0);
add (vbox);
menubar.show_all ();
@ -330,7 +341,7 @@ namespace Spek {
}
if (version != null && version > Config.PACKAGE_VERSION) {
Idle.add (() => { message_bar.show_all (); return false; });
Idle.add (() => { info_bar.show_all (); return false; });
}
// Update the preferences.