commit 668c8a7c3c5d1591159fdf7932b608a0c613be36
parent 02893f9a42339b48daea040715c2882b84ae295c
Author: Alexander Kojevnikov <alexander@kojevnikov.com>
Date: Tue, 21 Aug 2012 01:00:51 -0700
Custom info bar
Diffstat:
3 files changed, 41 insertions(+), 34 deletions(-)
diff --git a/src/spek-window.cc b/src/spek-window.cc
@@ -100,7 +100,32 @@ SpekWindow::SpekWindow(const wxString& path) :
);
toolbar->Realize();
+ wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+
+ // wxInfoBar is too limited, construct a custom one.
+ wxPanel *info_bar = new wxPanel(this);
+ info_bar->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOTEXT));
+ info_bar->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOBK));
+ wxSizer *info_sizer = new wxBoxSizer(wxHORIZONTAL);
+ wxStaticText *label = new wxStaticText(
+ info_bar, -1, _("A new version of Spek is available, click to download."));
+ label->SetCursor(*new wxCursor(wxCURSOR_HAND));
+ label->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(SpekWindow::on_visit));
+ // This second Connect() handles clicks on the border
+ info_bar->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(SpekWindow::on_visit));
+ info_sizer->Add(label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 6);
+ // TODO: gtk-close won't work on win/osx
+ wxBitmapButton *button = new wxBitmapButton(
+ info_bar, -1, wxArtProvider::GetBitmap(wxT("gtk-close")),
+ wxDefaultPosition, wxDefaultSize, wxNO_BORDER);
+ button->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SpekWindow::on_close));
+ info_sizer->Add(button, 0, 0);
+ info_bar->SetSizer(info_sizer);
+ sizer->Add(info_bar, 0, wxEXPAND);
+
this->spectrogram = new SpekSpectrogram(this);
+ sizer->Add(this->spectrogram, 1, wxEXPAND);
+
this->cur_dir = wxGetHomeDir();
if (!path.IsEmpty()) {
@@ -108,6 +133,8 @@ SpekWindow::SpekWindow(const wxString& path) :
}
SetDropTarget(new SpekDropTarget(this));
+
+ SetSizer(sizer);
}
void SpekWindow::open(const wxString& path)
@@ -266,3 +293,15 @@ void SpekWindow::on_about(wxCommandEvent& event)
#endif
wxAboutBox(info);
}
+
+void SpekWindow::on_visit(wxCommandEvent& event)
+{
+ wxLaunchDefaultBrowser(wxT("http://spek-project.org"));
+}
+
+void SpekWindow::on_close(wxCommandEvent& event)
+{
+ wxWindow *self = ((wxWindow *)event.GetEventObject())->GetGrandParent();
+ self->GetSizer()->Hide((size_t)0);
+ self->Layout();
+}
diff --git a/src/spek-window.hh b/src/spek-window.hh
@@ -35,6 +35,8 @@ private:
void on_exit(wxCommandEvent& event);
void on_preferences(wxCommandEvent& event);
void on_about(wxCommandEvent& event);
+ void on_visit(wxCommandEvent& event);
+ void on_close(wxCommandEvent& event);
SpekSpectrogram *spectrogram;
wxString path;
diff --git a/src/spek-window.vala b/src/spek-window.vala
@@ -22,41 +22,7 @@ using Gtk;
namespace Spek {
public class Window : Gtk.Window {
- private UIManager ui;
- private InfoBar info_bar;
- private Spectrogram spectrogram;
- private string description;
- private string cur_dir;
- private FileFilter filter_all;
- private FileFilter filter_audio;
- private FileFilter filter_png;
-
-
- private const Gtk.TargetEntry[] DEST_TARGET_ENTRIES = {
- { "text/uri-list", 0, 0 }
- };
-
public Window (string? file_name) {
- 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());
-
- var vbox = new VBox (false, 0);
- vbox.pack_start (info_bar, false, true, 0);
- add (vbox);
- vbox.show ();
-
- show ();
-
try {
Thread.create<void*> (check_version, false);
} catch (ThreadError e) {