summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/widgets/auto_spin.cc298
-rw-r--r--libs/widgets/click_box.cc188
-rw-r--r--libs/widgets/widgets/auto_spin.h76
-rw-r--r--libs/widgets/widgets/click_box.h82
-rw-r--r--libs/widgets/wscript2
5 files changed, 0 insertions, 646 deletions
diff --git a/libs/widgets/auto_spin.cc b/libs/widgets/auto_spin.cc
deleted file mode 100644
index 9d86eb50ac..0000000000
--- a/libs/widgets/auto_spin.cc
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- Copyright (C) 1999 Paul Barton-Davis
-
- 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.
-
- $Id$
-*/
-
-#include <cmath>
-#include "gtkmm2ext/keyboard.h"
-#include "widgets/auto_spin.h"
-
-using namespace Gtkmm2ext;
-using namespace ArdourWidgets;
-using namespace std;
-
-#define upper adjustment.get_upper()
-#define lower adjustment.get_lower()
-#define step_increment adjustment.get_step_increment()
-#define page_increment adjustment.get_page_increment()
-
-const unsigned int AutoSpin::initial_timer_interval = 500; /* msecs */
-const unsigned int AutoSpin::timer_interval = 20; /* msecs */
-const unsigned int AutoSpin::climb_timer_calls = 5; /* between climbing */
-
-AutoSpin::AutoSpin (Gtk::Adjustment &adjr, gfloat cr, bool round_to_steps_yn)
- : adjustment (adjr),
- climb_rate (cr)
-
-{
- initial = adjustment.get_value ();
- left_is_decrement = true;
- wrap = false;
- have_timer = false;
- need_timer = false;
- timer_calls = 0;
- round_to_steps = round_to_steps_yn;
-}
-
-void
-AutoSpin::stop_timer ()
-{
- if (have_timer) {
- g_source_remove (timeout_tag);
- have_timer = false;
- }
-}
-
-gint
-AutoSpin::stop_spinning (GdkEventButton */*ev*/)
-{
- need_timer = false;
- stop_timer ();
- return FALSE;
-}
-
-gint
-AutoSpin::button_press (GdkEventButton *ev)
-{
- bool shifted = false;
- bool control = false;
- bool with_decrement = false;
-
- stop_spinning (0);
-
- if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS ) {
- return true;
- }
-
- if (ev->state & Keyboard::TertiaryModifier) {
- /* use page shift */
-
- shifted = true;
- }
-
- if (ev->state & Keyboard::PrimaryModifier) {
- /* go to upper/lower bound on button1/button2 */
-
- control = true;
- }
-
- /* XXX should figure out which button is left/right */
-
- switch (ev->button) {
- case 1:
- if (control) {
- set_value (left_is_decrement ? lower : upper);
- return TRUE;
- } else {
- if (left_is_decrement) {
- with_decrement = true;
- } else {
- with_decrement = false;
- }
- }
- break;
-
- case 2:
- if (!control) {
- set_value (initial);
- }
- return TRUE;
- break;
-
- case 3:
- if (control) {
- set_value (left_is_decrement ? upper : lower);
- return TRUE;
- }
- break;
-
- case 4:
- if (!control) {
- adjust_value (shifted ? page_increment : step_increment);
- } else {
- set_value (upper);
- }
- return TRUE;
- break;
-
- case 5:
- if (!control) {
- adjust_value (shifted ? -page_increment : -step_increment);
- } else {
- set_value (lower);
- }
- return TRUE;
- break;
- }
-
- start_spinning (with_decrement, shifted);
- return TRUE;
-}
-
-gint
-AutoSpin::scroll_event (GdkEventScroll *ev)
-{
- stop_spinning (0);
-
- gfloat increment = step_increment;
-
- if (ev->state & Keyboard::TertiaryModifier) {
- increment = page_increment;
- }
-
- switch (ev->direction) {
- case GDK_SCROLL_DOWN:
- case GDK_SCROLL_LEFT:
- adjust_value (-increment);
- break;
- case GDK_SCROLL_RIGHT:
- case GDK_SCROLL_UP:
- adjust_value (increment);
- break;
- }
- return TRUE;
-}
-
-void
-AutoSpin::start_spinning (bool decrement, bool page)
-{
- timer_increment = page ? page_increment : step_increment;
-
- if (decrement) {
- timer_increment = -timer_increment;
- }
-
- adjust_value (timer_increment);
-
- have_timer = true;
- timer_calls = 0;
- timeout_tag = g_timeout_add (initial_timer_interval,
- AutoSpin::_timer,
- this);
-}
-
-gint
-AutoSpin::_timer (void *arg)
-{
- return ((AutoSpin *) arg)->timer ();
-}
-
-void
-AutoSpin::set_value (gfloat value)
-{
- if (round_to_steps)
- adjustment.set_value (floor((value / step_increment) + 0.5f) * step_increment);
- else
- adjustment.set_value (value);
-}
-
-bool
-AutoSpin::adjust_value (gfloat increment)
-{
- gfloat val;
- bool done = false;
-
- val = adjustment.get_value ();
-
- val += increment;
-
- if (val > upper) {
- if (wrap) {
- val = lower;
- } else {
- val = upper;
- done = true;
- }
- } else if (val < lower) {
- if (wrap) {
- val = upper;
- } else {
- val = lower;
- done = true;
- }
- }
-
- set_value (val);
- return done;
-}
-
-gint
-AutoSpin::timer ()
-{
- bool done;
- int retval = FALSE;
-
- done = adjust_value (timer_increment);
-
- if (need_timer) {
-
- /* we're in the initial call, which happened
- after initial_timer_interval msecs. Now
- request a much more frequent update.
- */
-
- timeout_tag = g_timeout_add (timer_interval,
- _timer,
- this);
- have_timer = true;
- need_timer = false;
-
- /* cancel this initial timeout */
-
- retval = FALSE;
-
- } else {
- /* this is the regular "fast" call after each
- timer_interval msecs.
- */
-
- if (timer_calls < climb_timer_calls) {
- timer_calls++;
- } else {
- if (climb_rate > 0.0) {
- if (timer_increment > 0) {
- timer_increment += climb_rate;
- } else {
- timer_increment -= climb_rate;
- }
- }
- timer_calls = 0;
- }
-
- if (!done) {
- retval = TRUE;
- }
- }
-
- return retval;
-}
-
-void
-AutoSpin::set_bounds (gfloat init, gfloat up, gfloat down, bool with_reset)
-{
- adjustment.set_upper (up);
- adjustment.set_lower (down);
-
- initial = init;
-
- adjustment.changed ();
-
- if (with_reset) {
- adjustment.set_value (init);
- }
-}
diff --git a/libs/widgets/click_box.cc b/libs/widgets/click_box.cc
deleted file mode 100644
index b3271a0cc4..0000000000
--- a/libs/widgets/click_box.cc
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- Copyright (C) 1999 Paul Barton-Davis
-
- 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.
-
- $Id$
-*/
-
-#include <iostream>
-#include <cstdio> /* for sprintf, sigh ... */
-
-#include "pbd/controllable.h"
-#include "gtkmm2ext/utils.h"
-#include "widgets/click_box.h"
-
-using namespace std;
-using namespace Gtk;
-using namespace ArdourWidgets;
-using namespace sigc;
-
-ClickBox::ClickBox (Gtk::Adjustment *adjp, const string &name, bool round_to_steps)
- : AutoSpin (*adjp,0,round_to_steps)
-{
- layout = create_pango_layout ("");
- twidth = 0;
- theight = 0;
-
-
- add_events (Gdk::BUTTON_RELEASE_MASK|
- Gdk::BUTTON_PRESS_MASK|
- Gdk::ENTER_NOTIFY_MASK|
- Gdk::LEAVE_NOTIFY_MASK);
-
- get_adjustment().signal_value_changed().connect (mem_fun (*this, &ClickBox::set_label));
- signal_style_changed().connect (mem_fun (*this, &ClickBox::style_changed));
- signal_button_press_event().connect (mem_fun (*this, &ClickBox::button_press_handler));
- signal_button_release_event().connect (mem_fun (*this, &ClickBox::button_release_handler));
- set_name (name);
- set_label ();
-}
-
-ClickBox::~ClickBox ()
-{
-}
-
-bool
-ClickBox::button_press_handler (GdkEventButton* ev)
-{
- if (_binding_proxy.button_press_handler (ev)) {
- return true;
- }
- add_modal_grab();
- AutoSpin::button_press (ev);
- return true;
-}
-
-bool
-ClickBox::on_scroll_event (GdkEventScroll* ev)
-{
- AutoSpin::scroll_event (ev);
- return true;
-}
-
-bool
-ClickBox::button_release_handler (GdkEventButton* ev)
-{
- switch (ev->button) {
- case 1:
- case 2:
- case 3:
- stop_spinning (0);
- default:
- remove_modal_grab();
- break;
- }
- return true;
-}
-
-void
-ClickBox::set_label ()
-{
- char buf[32];
- int width, height;
-
- bool const h = _printer (buf, get_adjustment());
- if (!h) {
- /* the printer didn't handle it, so use a default */
- sprintf (buf, "%.2f", get_adjustment().get_value ());
- }
-
- layout->set_text (buf);
- layout->get_pixel_size (width, height);
-
- if (twidth < width && (width > 50)) {
- /* override GenericPluginUI::build_control_ui()
- * Gtkmm2ext::set_size_request_to_display_given_text ("g9999999")
- * see http://tracker.ardour.org/view.php?id=6499
- */
- set_size_request (std::min (300, width + 6), height + 4);
- }
-
- twidth = width; theight = height;
-
- queue_draw ();
-}
-
-void
-ClickBox::style_changed (const Glib::RefPtr<Gtk::Style>&)
-{
- layout->context_changed ();
- layout->get_pixel_size (twidth, theight);
-}
-
-bool
-ClickBox::on_expose_event (GdkEventExpose *ev)
-{
- /* Why do we do things like this rather than use a Gtk::Label?
- Because whenever Gtk::Label::set_label() is called, it
- triggers a recomputation of its own size, along with that
- of its container and on up the tree. That's intended
- to be unnecessary here.
- */
-
- Gtk::DrawingArea::on_expose_event (ev);
-
- Glib::RefPtr<Gtk::Style> style (get_style());
- Glib::RefPtr<Gdk::GC> fg_gc (style->get_fg_gc (Gtk::STATE_NORMAL));
- Glib::RefPtr<Gdk::GC> bg_gc (style->get_bg_gc (Gtk::STATE_NORMAL));
- Glib::RefPtr<Gdk::Window> win (get_window());
-
- GdkRectangle base_rect;
- GdkRectangle draw_rect;
- gint x, y, width, height, depth;
-
- win->get_geometry (x, y, width, height, depth);
-
- base_rect.width = width;
- base_rect.height = height;
- base_rect.x = 0;
- base_rect.y = 0;
-
- gdk_rectangle_intersect (&ev->area, &base_rect, &draw_rect);
- win->draw_rectangle (bg_gc, true, draw_rect.x, draw_rect.y, draw_rect.width, draw_rect.height);
-
- if (twidth && theight) {
- win->draw_layout (fg_gc, (width - twidth) / 2, (height - theight) / 2, layout);
- }
-
- return true;
-}
-
-void
-ClickBox::set_printer (sigc::slot<bool, char *, Gtk::Adjustment &> p)
-{
- _printer = p;
- set_label ();
-}
-
-bool
-ClickBox::on_enter_notify_event (GdkEventCrossing* ev)
-{
- boost::shared_ptr<PBD::Controllable> c (_binding_proxy.get_controllable ());
- if (c) {
- PBD::Controllable::GUIFocusChanged (boost::weak_ptr<PBD::Controllable> (c));
- }
- return false;
-}
-
-bool
-ClickBox::on_leave_notify_event (GdkEventCrossing* ev)
-{
- if (_binding_proxy.get_controllable()) {
- PBD::Controllable::GUIFocusChanged (boost::weak_ptr<PBD::Controllable> ());
- }
- return false;
-}
diff --git a/libs/widgets/widgets/auto_spin.h b/libs/widgets/widgets/auto_spin.h
deleted file mode 100644
index 099976f4db..0000000000
--- a/libs/widgets/widgets/auto_spin.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- Copyright (C) 2000 Paul Barton-Davis
-
- 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.
-
-*/
-
-#ifndef _WIDGETS_AUTO_SPIN_H_
-#define _WIDGETS_AUTO_SPIN_H_
-
-#ifdef interface
-#undef interface
-#endif
-
-#include <gtkmm/adjustment.h>
-
-#include "widgets/visibility.h"
-
-namespace ArdourWidgets {
-
-class LIBWIDGETS_API AutoSpin
-{
-public:
- AutoSpin (Gtk::Adjustment &adj, gfloat cr = 0, bool round_to_steps_yn = false);
-
- Gtk::Adjustment &get_adjustment() { return adjustment; }
-
- void use_left_as_decrement (bool yn) { left_is_decrement = yn; }
- void set_wrap (bool yn) { wrap = yn; }
- void set_climb_rate (gfloat cr) { climb_rate = cr; }
- void set_bounds (gfloat initial, gfloat low, gfloat high, bool with_reset = true);
-
- gint button_press (GdkEventButton *);
- gint stop_spinning (GdkEventButton *ignored_but_here_for_clicked);
- void start_spinning (bool decrementing, bool use_page);
- gint scroll_event (GdkEventScroll *);
-
-private:
- Gtk::Adjustment &adjustment;
- gfloat climb_rate;
- gfloat timer_increment;
- gfloat initial;
- unsigned int timer_calls;
- bool have_timer;
- bool need_timer;
- bool wrap;
- gint timeout_tag;
- bool left_is_decrement;
- bool round_to_steps;
-
- static const unsigned int initial_timer_interval;
- static const unsigned int timer_interval;
- static const unsigned int climb_timer_calls;
-
- void stop_timer ();
- static gint _timer (void *arg);
- gint timer ();
- bool adjust_value (gfloat increment);
- void set_value (gfloat value);
-};
-
-} /* namespace */
-
-#endif
diff --git a/libs/widgets/widgets/click_box.h b/libs/widgets/widgets/click_box.h
deleted file mode 100644
index ae4ee8961a..0000000000
--- a/libs/widgets/widgets/click_box.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- Copyright (C) 1999 Paul Barton-Davis
-
- 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.
-
-*/
-
-#ifndef _WIDGETS_CLICK_BOX_H_
-#define _WIDGETS_CLICK_BOX_H_
-
-#ifdef interface
-#undef interface
-#endif
-
-#include <string>
-
-#include <gtkmm/adjustment.h>
-#include <gtkmm/drawingarea.h>
-
-#include "widgets/auto_spin.h"
-#include "widgets/binding_proxy.h"
-#include "widgets/visibility.h"
-
-namespace PBD {
- class Controllable;
-}
-
-namespace ArdourWidgets {
-
-class LIBWIDGETS_API ClickBox : public Gtk::DrawingArea, public AutoSpin
-{
- public:
- ClickBox (Gtk::Adjustment *adj, const std::string &name, bool round_to_steps = false);
- ~ClickBox ();
-
- /** Set a slot to `print' the value to put in the box.
- * The slot should write the value of the Gtk::Adjustment
- * into the char array, and should return true if it has done the printing,
- * or false to use the ClickBox's default printing method.
- */
- void set_printer (sigc::slot<bool, char *, Gtk::Adjustment &>);
-
- void set_controllable (boost::shared_ptr<PBD::Controllable> c) {
- _binding_proxy.set_controllable (c);
- }
-
- protected:
- bool on_expose_event (GdkEventExpose*);
- bool on_enter_notify_event (GdkEventCrossing* ev);
- bool on_leave_notify_event (GdkEventCrossing* ev);
-
- BindingProxy _binding_proxy;
-
- private:
- Glib::RefPtr<Pango::Layout> layout;
- int twidth;
- int theight;
-
- void set_label ();
- void style_changed (const Glib::RefPtr<Gtk::Style> &);
- bool button_press_handler (GdkEventButton *);
- bool button_release_handler (GdkEventButton *);
- bool on_scroll_event (GdkEventScroll*);
-
- sigc::slot<bool, char *, Gtk::Adjustment &> _printer;
-};
-
-} /* namespace */
-
-#endif
diff --git a/libs/widgets/wscript b/libs/widgets/wscript
index 0559abe4dc..4a31086c10 100644
--- a/libs/widgets/wscript
+++ b/libs/widgets/wscript
@@ -34,12 +34,10 @@ widgets_sources = [
'ardour_knob.cc',
'ardour_spacer.cc',
'ardour_spinner.cc',
- 'auto_spin.cc',
'barcontroller.cc',
'binding_proxy.cc',
'eventboxext.cc',
'choice.cc',
- 'click_box.cc',
'fastmeter.cc',
'focus_entry.cc',
'pane.cc',