search for i18n files in more places and rationalize how that's done
[ardour.git] / gtk2_ardour / editor_canvas.cc
index 7da8d08f529a7dbaae409ee96f1458bb7d0f4777..1066023e0d9d2bbca92c813fc5b0578d7109e750 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "ardour_ui.h"
 #include "editor.h"
+#include "global_signals.h"
 #include "waveview.h"
 #include "simplerect.h"
 #include "simpleline.h"
@@ -51,6 +52,9 @@
 #include "editor_routes.h"
 #include "editor_summary.h"
 #include "keyboard.h"
+#include "editor_cursors.h"
+#include "mouse_cursors.h"
+#include "verbose_cursor.h"
 
 #include "i18n.h"
 
@@ -113,17 +117,7 @@ Editor::initialize_canvas ()
         gint phys_width = physical_screen_width (Glib::RefPtr<Gdk::Window>());
         gint phys_height = physical_screen_height (Glib::RefPtr<Gdk::Window>());
 
-       /* stuff for the verbose canvas cursor */
-
-       Pango::FontDescription* font = get_font_for_style (N_("VerboseCanvasCursor"));
-
-       verbose_canvas_cursor = new ArdourCanvas::NoEventText (*track_canvas->root());
-       verbose_canvas_cursor->property_font_desc() = *font;
-       verbose_canvas_cursor->property_anchor() = ANCHOR_NW;
-
-       delete font;
-
-       verbose_cursor_visible = false;
+       _verbose_cursor = new VerboseCursor (this);
 
        /* on the bottom, an image */
 
@@ -160,64 +154,34 @@ Editor::initialize_canvas ()
        _region_motion_group = new ArdourCanvas::Group (*_trackview_group);
 
        meter_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
-       if (Profile->get_sae()) {
-               meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, phys_width, timebar_height - 1);
-               meter_bar->property_outline_pixels() = 1;
-       } else {
-               meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, phys_width, timebar_height);
-               meter_bar->property_outline_pixels() = 0;
-       }
-       meter_bar->property_outline_what() = (0x1 | 0x8);
+       meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, phys_width, timebar_height - 1);
+       meter_bar->property_outline_pixels() = 1;
+       meter_bar->property_outline_what() = 0x8;
 
        tempo_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
-       if (Profile->get_sae()) {
-               tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, phys_width, (timebar_height - 1));
-               tempo_bar->property_outline_pixels() = 1;
-       } else {
-               tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, phys_width, (timebar_height));
-               tempo_bar->property_outline_pixels() = 0;
-       }
-       tempo_bar->property_outline_what() = (0x1 | 0x8);
+       tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, phys_width, (timebar_height - 1));
+       tempo_bar->property_outline_pixels() = 1;
+       tempo_bar->property_outline_what() = 0x8;
 
        range_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
-       if (Profile->get_sae()) {
-               range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, phys_width, (timebar_height - 1));
-               range_marker_bar->property_outline_pixels() = 1;
-       } else {
-               range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, phys_width, (timebar_height));
-               range_marker_bar->property_outline_pixels() = 0;
-       }
-       range_marker_bar->property_outline_what() = (0x1 | 0x8);
+       range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, phys_width, (timebar_height - 1));
+       range_marker_bar->property_outline_pixels() = 1;
+       range_marker_bar->property_outline_what() = 0x8;
 
        transport_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
-       if (Profile->get_sae()) {
-               transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0,  phys_width, (timebar_height - 1));
-               transport_marker_bar->property_outline_pixels() = 1;
-       } else {
-               transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0,  phys_width, (timebar_height));
-               transport_marker_bar->property_outline_pixels() = 0;
-       }
-       transport_marker_bar->property_outline_what() = (0x1 | 0x8);
+       transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0,  phys_width, (timebar_height - 1));
+       transport_marker_bar->property_outline_pixels() = 1;
+       transport_marker_bar->property_outline_what() = 0x8;
 
        marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
-       if (Profile->get_sae()) {
-               marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, phys_width, (timebar_height - 1));
-               marker_bar->property_outline_pixels() = 1;
-       } else {
-               marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, phys_width, (timebar_height));
-               marker_bar->property_outline_pixels() = 0;
-       }
-       marker_bar->property_outline_what() = (0x1 | 0x8);
+       marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, phys_width, (timebar_height - 1));
+       marker_bar->property_outline_pixels() = 1;
+       marker_bar->property_outline_what() = 0x8;
 
        cd_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
-       if (Profile->get_sae()) {
-               cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, phys_width, (timebar_height - 1));
-               cd_marker_bar->property_outline_pixels() = 1;
-       } else {
-               cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, phys_width, (timebar_height));
-               cd_marker_bar->property_outline_pixels() = 0;
-       }
-       cd_marker_bar->property_outline_what() = (0x1 | 0x8);
+       cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, phys_width, (timebar_height - 1));
+       cd_marker_bar->property_outline_pixels() = 1;
+       cd_marker_bar->property_outline_what() = 0x8;
 
        timebar_group =  new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
        cursor_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
@@ -364,66 +328,35 @@ Editor::track_canvas_size_allocated ()
        redisplay_tempo (false);
        _summary->set_overlays_dirty ();
 
-       Resized (); /* EMIT_SIGNAL */
-
        return false;
 }
 
 void
-Editor::controls_layout_size_request (Requisition* req)
+Editor::reset_controls_layout_width ()
 {
-       double pos = 0;
-       for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
-               pos += (*i)->effective_height ();
-       }
+        gint w = edit_controls_vbox.get_width();
 
-       gint height = min ((gint) pos, (gint) (physical_screen_height(get_window()) - 600));
-
-       bool changed = false;
-
-       gint w = edit_controls_vbox.get_width();
-       if (_group_tabs->is_mapped()) {
-               w += _group_tabs->get_width ();
-       }
-
-       gint width = max (w, controls_layout.get_width());
-
-       /* don't get too big. the fudge factors here are just guesses */
-
-       width =  min (width, (gint) (physical_screen_width(get_window()) - 300));
-
-       if ((req->width != width) || (req->height != height)) {
-               changed = true;
-               controls_layout_size_request_connection.disconnect ();
-       }
+        if (_group_tabs->is_mapped()) {
+                w += _group_tabs->get_width();
+        }
 
-       if (req->width != width) {
-               gint vbox_width = edit_controls_vbox.get_width();
-               if (_group_tabs->is_mapped()) {
-                       vbox_width += _group_tabs->get_width();
-               }
-               req->width = width;
+        /* the controls layout has no horizontal scrolling, its visible
+           width is always equal to the total width of its contents.
+        */
 
-               /* this one is important: it determines how big the layout thinks it really is, as
-                  opposed to what it displays on the screen
-               */
-               controls_layout.property_width () = vbox_width;
-               controls_layout.property_width_request () = vbox_width;
+        controls_layout.property_width() = w;
+        controls_layout.property_width_request() = w;
+}
 
-               // time_button_event_box.property_width_request () = vbox_width;
-               // zoom_box.property_width_request () = vbox_width;
-       }
+void
+Editor::reset_controls_layout_height (int32_t h)
+{
+        /* set the height of the scrollable area (i.e. the sum of all contained widgets)
+         */
 
-       if (req->height != height) {
-               req->height = height;
-               controls_layout.property_height () = (guint) floor (pos);
-               controls_layout.property_height_request () = height;
-       }
+        controls_layout.property_height() = h;
 
-       if (changed) {
-               controls_layout_size_request_connection = controls_layout.signal_size_request().connect (sigc::mem_fun (*this, &Editor::controls_layout_size_request));
-       }
-       //cerr << "sizes = " << req->width << " " << edit_controls_vbox.get_width() << " " << controls_layout.get_width() << " " << zoom_box.get_width() << " " << time_button_frame.get_width() << endl;//DEBUG
+        /* size request is set elsewhere, see ::track_canvas_allocate() */
 }
 
 bool
@@ -745,7 +678,7 @@ Editor::stop_canvas_autoscroll ()
 bool
 Editor::left_track_canvas (GdkEventCrossing */*ev*/)
 {
-        DropDownKeys ();
+       DropDownKeys ();
        set_entered_track (0);
        set_entered_regionview (0);
        reset_canvas_action_sensitivity (false);
@@ -832,7 +765,7 @@ void
 Editor::color_handler()
 {
        playhead_cursor->canvas_item.property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_PlayHead.get();
-       verbose_canvas_cursor->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_VerboseCanvasCursor.get();
+       _verbose_cursor->set_color (ARDOUR_UI::config()->canvasvar_VerboseCanvasCursor.get());
 
        meter_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MeterBar.get();
        meter_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
@@ -926,9 +859,9 @@ Editor::horizontal_position () const
 void
 Editor::set_canvas_cursor (Gdk::Cursor* cursor, bool save)
 {
-        if (save) {
-                current_canvas_cursor = cursor;
-        }
+       if (save) {
+               current_canvas_cursor = cursor;
+       }
 
        if (is_drawable()) {
                track_canvas->get_window()->set_cursor (*cursor);
@@ -940,7 +873,7 @@ Editor::track_canvas_key_press (GdkEventKey* event)
 {
        /* XXX: event does not report the modifier key pressed down, AFAICS, so use the Keyboard object instead */
        if (mouse_mode == Editing::MouseZoom && Keyboard::the_keyboard().key_is_down (GDK_Control_L)) {
-               set_canvas_cursor (zoom_out_cursor);
+               set_canvas_cursor (_cursors->zoom_out, true);
        }
 
        return false;
@@ -950,7 +883,7 @@ bool
 Editor::track_canvas_key_release (GdkEventKey* event)
 {
        if (mouse_mode == Editing::MouseZoom && !Keyboard::the_keyboard().key_is_down (GDK_Control_L)) {
-               set_canvas_cursor (zoom_in_cursor);
+               set_canvas_cursor (_cursors->zoom_in, true);
        }
 
        return false;