Logo Search packages:      
Sourcecode: ardour version File versions

add_route_dialog.cc

/*
    Copyright (C) 2003 Paul 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.

*/

#include <cstdio>
#include <cmath>

#include <sigc++/bind.h>
#include <gtkmm/stock.h>
#include <pbd/error.h>
#include <pbd/convert.h>
#include <gtkmm2ext/utils.h>
#include <ardour/profile.h>

#include "utils.h"
#include "add_route_dialog.h"
#include "i18n.h"

using namespace Gtk;
using namespace Gtkmm2ext;
using namespace sigc;
using namespace std;
using namespace PBD;

static const char* channel_setup_names[] = {
      N_("Mono"),
      N_("Stereo"),
      N_("3 Channels"),
      N_("4 Channels"),
      N_("6 Channels"),
      N_("8 Channels"),
      N_("Manual Setup"),
      0
};

static const char* track_mode_names[] = {
      N_("Normal"),
      N_("Tape"),
      0
};

static vector<string> channel_combo_strings;
static vector<string> track_mode_strings;


AddRouteDialog::AddRouteDialog ()
      : Dialog (_("ardour: add track/bus")),
        track_button (_("Tracks")),
        bus_button (_("Busses")),
        routes_adjustment (1, 1, 128, 1, 4),
        routes_spinner (routes_adjustment)
{
      if (channel_combo_strings.empty()) {
            channel_combo_strings = I18N (channel_setup_names);

            if (ARDOUR::Profile->get_sae()) {
                  /* remove all but the first two (Mono & Stereo) */

                  while (track_mode_strings.size() > 2) {
                        track_mode_strings.pop_back();
                  }
            }

      }

      if (track_mode_strings.empty()) {
            track_mode_strings = I18N (track_mode_names);

            if (ARDOUR::Profile->get_sae()) {
                  /* remove all but the first track mode (Normal) */

                  while (track_mode_strings.size() > 1) {
                        track_mode_strings.pop_back();
                  }
            }
      }

      set_name ("AddRouteDialog");
      set_wmclass (X_("ardour_add_track_bus"), "Ardour");
      set_position (Gtk::WIN_POS_MOUSE);
      set_resizable (false);

      name_template_entry.set_name ("AddRouteDialogNameTemplateEntry");
      track_button.set_name ("AddRouteDialogRadioButton");
      bus_button.set_name ("AddRouteDialogRadioButton");
      routes_spinner.set_name ("AddRouteDialogSpinner");
      
      RadioButton::Group g = track_button.get_group();
      bus_button.set_group (g);
      track_button.set_active (true);

      HBox *hbrb = manage (new HBox);

      hbrb->set_spacing (6);
      hbrb->pack_start (routes_spinner, true, false, 5);
      hbrb->pack_start (track_button, true, false, 5);
      hbrb->pack_start (bus_button, true, false, 5);

      aframe.set_label (_("Add"));
      aframe.set_shadow_type (SHADOW_IN);
      aframe.add (*hbrb);

      set_popdown_strings (channel_combo, channel_combo_strings);
      set_popdown_strings (track_mode_combo, track_mode_strings);
      channel_combo.set_active_text (channel_combo_strings.front());
      channel_combo.set_name (X_("ChannelCountSelector"));

      track_button.signal_clicked().connect (mem_fun (*this, &AddRouteDialog::track_type_chosen));
      bus_button.signal_clicked().connect (mem_fun (*this, &AddRouteDialog::track_type_chosen));

      track_mode_combo.set_active_text (track_mode_strings.front());
      track_mode_combo.set_name (X_("ChannelCountSelector"));
      
#if NOT_USEFUL_YET
      HBox *hbnt = manage (new HBox);

      hbnt->pack_start (*(manage (new Label (_("Name (template)")))), false, false);
      hbnt->pack_start (name_template_entry, true, true);
#endif
      VBox *dvbox = manage (new VBox);
      HBox *dhbox = manage (new HBox);

      ccframe.set_label (_("Channel Configuration"));
      ccframe.set_shadow_type (SHADOW_IN);

      dvbox->pack_start (channel_combo, true, false, 5);
      if (!ARDOUR::Profile->get_sae()) {
            dvbox->pack_start (track_mode_combo, true, false, 5);
      }
      dhbox->pack_start (*dvbox, true, false, 5);

      ccframe.add (*dhbox);

      get_vbox()->pack_start (aframe, true, false, 10);
      get_vbox()->pack_start (ccframe, true, false);
#if NOT_USEFUL_YET
      get_vbox()->pack_start (*hbnt, false, false);
#endif

      get_vbox()->show_all ();

      add_button (Stock::CANCEL, RESPONSE_CANCEL);
      add_button (Stock::ADD, RESPONSE_ACCEPT);
}

AddRouteDialog::~AddRouteDialog ()
{
}

void
AddRouteDialog::track_type_chosen ()
{
      if (track_button.get_active()) {
            track_mode_combo.set_sensitive (true);
      } else {
            track_mode_combo.set_sensitive (false);
      }
}

bool
AddRouteDialog::track ()
{
      return track_button.get_active ();
}

string
AddRouteDialog::name_template ()
{
      return name_template_entry.get_text ();
}

int
AddRouteDialog::count ()
{
      return (int) floor (routes_adjustment.get_value ());
}

ARDOUR::TrackMode
AddRouteDialog::mode ()
{
      if (ARDOUR::Profile->get_sae()) {
            return ARDOUR::Normal;
      }

      Glib::ustring str = track_mode_combo.get_active_text();
      if (str == _("Normal")) {
            return ARDOUR::Normal;
      } else if (str == _("Tape")) {
            return ARDOUR::Destructive;
      } else {
            fatal << string_compose (X_("programming error: unknown track mode in add route dialog combo = %1"), str)
                  << endmsg;
            /*NOTREACHED*/
      }
      /* keep gcc happy */
      return ARDOUR::Normal;
}

int
AddRouteDialog::channels ()
{
      string str = channel_combo.get_active_text();
      int chns;

      if (str == _("Mono")) {
            return 1;
      } else if (str == _("Stereo")) {
            return 2;
      } else if ((chns = PBD::atoi (str)) != 0) {
            return chns;
      } 

      return 0;
}


Generated by  Doxygen 1.6.0   Back to index