new color management design starts to take shape (canvas color only for now)
[ardour.git] / gtk2_ardour / ardour_ui.cc
index 67323ac07b55ea7abce2170e720fed1611658a85..b66d481682b3edb7bebfd8d0011da441a5e27ab5 100644 (file)
@@ -72,6 +72,7 @@
 #include "utils.h"
 #include "gui_thread.h"
 #include "meter_xpms.h"
+#include "color_manager.h"
 
 #include "i18n.h"
 
@@ -87,19 +88,6 @@ sigc::signal<void>      ARDOUR_UI::RapidScreenUpdate;
 sigc::signal<void>      ARDOUR_UI::SuperRapidScreenUpdate;
 sigc::signal<void,jack_nframes_t> ARDOUR_UI::Clock;
 
-static const char* channel_setup_names[] = {
-       "mono",
-       "stereo",
-       "3 channels",
-       "4 channels",
-       "5 channels",
-       "8 channels",
-       "manual setup",
-       0
-};
-
-vector<string> channel_combo_strings;
-
 ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
 
        : Gtkmm2ext::UI ("ardour", argcp, argvp, rcfile),
@@ -154,7 +142,17 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
        }
 
        ActionManager::init ();
-       
+
+       /* load colors */
+
+       color_manager = new ColorManager();
+
+       std::string color_file = Glib::getenv(X_("ARDOUR_COLORS"));
+       if(!Glib::file_test(color_file, Glib::FILE_TEST_EXISTS)) {
+               color_file = ARDOUR::find_config_file("ardour.colors");
+       }
+       color_manager->load (color_file);
+
        m_new_session_dialog = 0;
        m_new_session_dialog_ref = NewSessionDialogFactory::create();
        m_new_session_dialog_ref->get_widget_derived (NewSessionDialogFactory::top_level_widget_name(), m_new_session_dialog);
@@ -203,8 +201,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
 
        ARDOUR::Session::AskAboutPendingState.connect (mem_fun(*this, &ARDOUR_UI::pending_state_dialog));
 
-       channel_combo_strings = internationalize (channel_setup_names);
-       
        /* have to wait for AudioEngine and Configuration before proceeding */
 }
 
@@ -652,190 +648,6 @@ ARDOUR_UI::update_wall_clock ()
 
        return TRUE;
 }
-
-void
-ARDOUR_UI::toggle_recording_plugins ()
-{
-       /* XXX use toggle_some_session_state */
-
-       if (session == 0) {
-               return;
-       }
-
-       session->set_recording_plugins (!session->get_recording_plugins());
-}
-       
-void
-ARDOUR_UI::toggle_auto_play ()
-
-{
-       toggle_some_session_state (auto_play_button,
-                                  &Session::get_auto_play,
-                                  &Session::set_auto_play);
-}
-
-void
-ARDOUR_UI::toggle_auto_return ()
-
-{
-       toggle_some_session_state (auto_return_button,
-                                  &Session::get_auto_return,
-                                  &Session::set_auto_return);
-}
-
-void
-ARDOUR_UI::toggle_click ()
-{
-       toggle_some_session_state (click_button,
-                                  &Session::get_clicking,
-                                  &Session::set_clicking);
-}
-
-void
-ARDOUR_UI::toggle_session_auto_loop ()
-{
-       if (session) {
-               if (session->get_auto_loop()) {
-                       if (session->transport_rolling()) {
-                               transport_roll();
-                       }
-                       else {
-                               session->request_auto_loop (false);
-                       }
-               }
-               else {
-                       session->request_auto_loop (true);
-               }
-       }
-}
-
-void
-ARDOUR_UI::toggle_session_punch_in ()
-{
-       if (session) {
-               session->set_punch_in (!session->get_punch_in());
-       }
-}
-
-void
-ARDOUR_UI::toggle_punch_out ()
-{
-       toggle_some_session_state (punch_out_button,
-                                  &Session::get_punch_out,
-                                  &Session::set_punch_out);
-}
-
-void
-ARDOUR_UI::toggle_punch_in ()
-{
-       toggle_some_session_state (punch_in_button,
-                                  &Session::get_punch_in,
-                                  &Session::set_punch_in);
-}
-
-void
-ARDOUR_UI::map_button_state ()
-
-{
-       map_some_session_state (auto_return_button,
-                               &Session::get_auto_return);
-       map_some_session_state (auto_play_button,
-                               &Session::get_auto_play);
-       map_some_session_state (auto_input_button,
-                               &Session::get_auto_input);
-       map_some_session_state (punch_in_button,
-                               &Session::get_punch_in);
-       map_some_session_state (punch_out_button,
-                               &Session::get_punch_out);
-       map_some_session_state (click_button,
-                               &Session::get_clicking);
-}
-
-void
-ARDOUR_UI::queue_map_control_change (Session::ControlType t)
-{
-       ENSURE_GUI_THREAD (bind (mem_fun(*this, &ARDOUR_UI::map_control_change), t));
-}
-
-void
-ARDOUR_UI::map_control_change (Session::ControlType t)
-{
-       switch (t) {
-       case Session::AutoPlay:
-               map_some_session_state (auto_play_button, &Session::get_auto_play);
-               break;
-
-       case Session::AutoLoop:
-               break;
-
-       case Session::AutoReturn:
-               map_some_session_state (auto_return_button, &Session::get_auto_return);
-               break;
-
-       case Session::AutoInput:
-               map_some_session_state (auto_input_button, &Session::get_auto_input);
-               break;
-
-       case Session::PunchOut:
-               map_some_session_state (punch_in_button, &Session::get_punch_out);
-               break;
-
-       case Session::PunchIn:
-               map_some_session_state (punch_in_button, &Session::get_punch_in);
-               break;
-
-       case Session::Clicking:
-               map_some_session_state (click_button, &Session::get_clicking);
-               break;
-
-       case Session::SlaveType:
-//             map_some_session_state (mtc_slave_button, &Session::get_mtc_slave);
-               break;
-
-       case Session::SendMTC:
-//             map_some_session_state (send_mtc_button, &Session::get_send_mtc);
-               break;
-
-       case Session::SendMMC:
-//             map_some_session_state (send_mmc_button, &Session::get_send_mmc);
-               break;
-
-       case Session::MMCControl:       
-//             map_some_session_state (mmc_control_button, &Session::get_mmc_control);
-               break;
-
-       case Session::MidiFeedback:       
-//             map_some_session_state (mmc_control_button, &Session::get_mmc_control);
-               break;
-       case Session::MidiControl:       
-//             map_some_session_state (mmc_control_button, &Session::get_mmc_control);
-               break;
-               
-       case Session::Live:
-               break;
-
-       case Session::RecordingPlugins:
-               break;
-
-       case Session::CrossFadesActive:
-               break;
-               
-       case Session::EditingMode:
-               break;
-
-       case Session::PlayRange:
-               break;
-
-       case Session::AlignChoice:
-               /* don't care, this is handled by the options editor */
-               break;
-       case Session::SeamlessLoop:
-               /* don't care, this is handled by the options editor */
-               break;
-              
-       }
-}
-
 void
 ARDOUR_UI::control_methods_adjusted ()
 
@@ -871,54 +683,6 @@ ARDOUR_UI::mmc_device_id_adjusted ()
 #endif
 }
 
-void
-ARDOUR_UI::map_some_session_state (ToggleButton& button,
-                                  bool (Session::*get)() const)
-       
-{
-       bool x;
-
-       if (session == 0) {
-               return;
-       }
-       
-       if (button.get_active() != (x = (session->*get)())) {
-               button.set_active (x);
-       }
-}
-
-void
-ARDOUR_UI::toggle_some_session_state (ToggleButton& button,
-                                     bool (Session::*get)() const,
-                                     void (Session::*set)(bool))
-
-{
-       bool button_state;
-       bool session_state;
-
-       if (session == 0) {
-               return;
-       }
-
-       button_state = button.get_active ();
-       session_state = (session->*get)();
-
-       if (button_state != session_state) {
-               (session->*set) (button_state);
-#if 0
-       
-               /* check that it worked, and reverse
-                  the button state if it didn't
-               */
-
-               if ((session->*get)() != button_state) {
-                       button->set_active (!button_state);
-               }
-#endif
-
-       }
-}      
-
 gint
 ARDOUR_UI::session_menu (GdkEventButton *ev)
 {
@@ -1135,7 +899,7 @@ ARDOUR_UI::session_add_midi_track ()
 }
 
 void
-ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels)
+ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode)
 {
        Route* route;
 
@@ -1146,7 +910,7 @@ ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t o
 
        try { 
                if (disk) {
-                       if ((route = session->new_audio_track (input_channels, output_channels)) == 0) {
+                       if ((route = session->new_audio_track (input_channels, output_channels, mode)) == 0) {
                                error << _("could not create new audio track") << endmsg;
                        }
                } else {
@@ -1284,7 +1048,7 @@ ARDOUR_UI::transport_record ()
                        break;
                case Session::Recording:
                case Session::Enabled:
-                       session->disable_record ();
+                       session->disable_record (true);
                }
        }
 }
@@ -2318,7 +2082,7 @@ ARDOUR_UI::add_route ()
 
        while (count) {
                if (track) {
-                       session_add_audio_track (input_chan, output_chan);
+                       session_add_audio_track (input_chan, output_chan, add_route_dialog->mode());
                } else {
                        session_add_audio_bus (input_chan, output_chan);
                }