From 77022b3bcbbe8c2126023dffc2bc708636595a50 Mon Sep 17 00:00:00 2001 From: Joel Holdsworth Date: Tue, 10 Mar 2009 18:38:53 +0000 Subject: [PATCH] Added initial ButtonBar implementation --- src/gui/Makefile.am | 2 + src/gui/widgets/button-bar.cpp | 55 ++++++++++++++++ src/gui/widgets/button-bar.hpp | 73 +++++++++++++++++++++ src/gui/widgets/timeline/timeline-track.hpp | 3 +- 4 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 src/gui/widgets/button-bar.cpp create mode 100644 src/gui/widgets/button-bar.hpp diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index 78808bf80..ef8ca979b 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -78,6 +78,8 @@ gtk_gui_la_SOURCES = \ $(lumigui_srcdir)/panels/viewer-panel.hpp \ $(lumigui_srcdir)/panels/resources-panel.cpp \ $(lumigui_srcdir)/panels/resources-panel.hpp \ + $(lumigui_srcdir)/widgets/button-bar.cpp \ + $(lumigui_srcdir)/widgets/button-bar.hpp \ $(lumigui_srcdir)/widgets/menu-button.cpp \ $(lumigui_srcdir)/widgets/menu-button.hpp \ $(lumigui_srcdir)/widgets/video-display-widget.cpp \ diff --git a/src/gui/widgets/button-bar.cpp b/src/gui/widgets/button-bar.cpp new file mode 100644 index 000000000..a97bbe041 --- /dev/null +++ b/src/gui/widgets/button-bar.cpp @@ -0,0 +1,55 @@ +/* + button-bar.cpp - Implementation of the button bar widget + + Copyright (C) Lumiera.org + 2009, Joel Holdsworth + + 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +* *****************************************************/ + +#include "button-bar.hpp" + +#include + +using namespace Gtk; +using namespace sigc; + +namespace gui { +namespace widgets { + +ButtonBar::ButtonBar() : + exposeEvent(NULL) +{ +} + +bool +ButtonBar::on_expose_event(GdkEventExpose* event) +{ + exposeEvent = event; + foreach(sigc::mem_fun(this, &ButtonBar::expose_each)); + exposeEvent = NULL; + return false; +} + +void +ButtonBar::expose_each(Gtk::Widget& widget) +{ + REQUIRE(exposeEvent); + propagate_expose(widget, exposeEvent); +} + +} // widgets +} // gui diff --git a/src/gui/widgets/button-bar.hpp b/src/gui/widgets/button-bar.hpp new file mode 100644 index 000000000..7f7560329 --- /dev/null +++ b/src/gui/widgets/button-bar.hpp @@ -0,0 +1,73 @@ +/* + button-bar.hpp - Declaration of the button bar widget + + Copyright (C) Lumiera.org + 2009, Joel Holdsworth + + 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ +/** @file button-bar.hpp + ** This file contains the definition of the button bar widget + */ + +#ifndef BUTTON_BAR_HPP +#define BUTTON_BAR_HPP + +#include + +namespace gui { +namespace widgets { + +/** + * A modified toolbar widget for use in dialogs. + **/ +class ButtonBar : public Gtk::Toolbar +{ +public: + /** + * Constructor + **/ + ButtonBar(); + +private: + /** + * The expose event handler. + * @remarks This event handler bypasses the Toolbar expose handler + * so that the toolbar background is not drawn. + **/ + bool on_expose_event(GdkEventExpose* event); + + /** + * A helper function that calles Container::propagate_expose on a + * widget. + * @param widget The widget to call propagate_expose on. + * @remarks This function should be used with Container::foreach. + **/ + void expose_each(Gtk::Widget& widget); + + /** + * A pointer to the expose event received in on_expose_event. + * @remarks This value is used by expose_each, and is only value + * during on_expose_event's foreach call. + **/ + GdkEventExpose* exposeEvent; +}; + +} // gui +} // widgets + +#endif // BUTTON_BAR_HPP + diff --git a/src/gui/widgets/timeline/timeline-track.hpp b/src/gui/widgets/timeline/timeline-track.hpp index 43f9db39f..5d6feb9aa 100644 --- a/src/gui/widgets/timeline/timeline-track.hpp +++ b/src/gui/widgets/timeline/timeline-track.hpp @@ -26,6 +26,7 @@ #include "../../gtk-lumiera.hpp" #include "../../model/track.hpp" #include "../menu-button.hpp" +#include "../button-bar.hpp" #include "timeline-header-container.hpp" #include "timeline-header-widget.hpp" @@ -192,7 +193,7 @@ private: Gtk::ToolButton lockButton; Gtk::Entry titleBox; - Gtk::Toolbar buttonBar; + ButtonBar buttonBar; Gtk::Menu contextMenu;