mirror of
				https://github.com/ElvishArtisan/rivendell.git
				synced 2025-11-03 23:53:59 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			505 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			505 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// rdaudiosettings_dialog.cpp
 | 
						|
//
 | 
						|
// Edit an RDAudioSettings object.
 | 
						|
//
 | 
						|
//   (C) Copyright 2002-2003,2016 Fred Gleason <fredg@paravelsystems.com>
 | 
						|
//
 | 
						|
//   This program is free software; you can redistribute it and/or modify
 | 
						|
//   it under the terms of the GNU Library General Public License 
 | 
						|
//   version 2 as published by the Free Software Foundation.
 | 
						|
//
 | 
						|
//   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 <qdialog.h>
 | 
						|
#include <qstring.h>
 | 
						|
#include <qpushbutton.h>
 | 
						|
#include <q3listbox.h>
 | 
						|
#include <q3textedit.h>
 | 
						|
#include <qlabel.h>
 | 
						|
#include <qevent.h>
 | 
						|
#include <qmessagebox.h>
 | 
						|
#include <qcheckbox.h>
 | 
						|
#include <q3buttongroup.h>
 | 
						|
#include <rdconf.h>
 | 
						|
#include <math.h>
 | 
						|
 | 
						|
#include <rdaudiosettings_dialog.h>
 | 
						|
 | 
						|
 | 
						|
RDAudioSettingsDialog::RDAudioSettingsDialog(RDAudioSettings *settings,
 | 
						|
					     bool mpeg,QWidget *parent)
 | 
						|
  : QDialog(parent,"",true)
 | 
						|
{
 | 
						|
  lib_lib=settings;
 | 
						|
 | 
						|
  //
 | 
						|
  // Dialog Name
 | 
						|
  //
 | 
						|
  setCaption(tr("Edit Settings"));
 | 
						|
 | 
						|
  //
 | 
						|
  // Fix the Window Size
 | 
						|
  //
 | 
						|
  setMinimumWidth(sizeHint().width());
 | 
						|
  setMaximumWidth(sizeHint().width());
 | 
						|
  setMinimumHeight(sizeHint().height());
 | 
						|
  setMaximumHeight(sizeHint().height());
 | 
						|
 | 
						|
  //
 | 
						|
  // Generate Fonts
 | 
						|
  //
 | 
						|
  QFont font=QFont("Helvetica",12,QFont::Normal);
 | 
						|
  font.setPixelSize(12);
 | 
						|
  QFont button_font=QFont("Helvetica",12,QFont::Bold);
 | 
						|
  font.setPixelSize(12);
 | 
						|
 | 
						|
  //
 | 
						|
  // Default Format
 | 
						|
  //
 | 
						|
  lib_format_box=new QComboBox(this,"lib_name_edit");
 | 
						|
  lib_format_box->setGeometry(150,10,150,20);
 | 
						|
  lib_format_box->setFont(font);
 | 
						|
  connect(lib_format_box,SIGNAL(activated(int)),this,SLOT(formatData(int)));
 | 
						|
  QLabel *lib_format_label=new QLabel(lib_format_box,tr("Default &Format:"),
 | 
						|
				      this,"lib_format_label");
 | 
						|
  lib_format_label->setGeometry(25,10,120,20);
 | 
						|
  lib_format_label->setFont(font);
 | 
						|
  lib_format_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter|Qt::TextShowMnemonic);
 | 
						|
 | 
						|
  //
 | 
						|
  // Default Channels
 | 
						|
  //
 | 
						|
  lib_channels_box=new QComboBox(this,"lib_name_edit");
 | 
						|
  lib_channels_box->setGeometry(150,32,60,20);
 | 
						|
  lib_channels_box->setFont(font);
 | 
						|
  QLabel *lib_channels_label=new QLabel(lib_channels_box,
 | 
						|
					tr("Default &Channels:"),
 | 
						|
					this,"lib_channels_label");
 | 
						|
  lib_channels_label->setGeometry(25,32,120,20);
 | 
						|
  lib_channels_label->setFont(font);
 | 
						|
  lib_channels_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter|Qt::TextShowMnemonic);
 | 
						|
 | 
						|
  //
 | 
						|
  // Default Sample Rate
 | 
						|
  //
 | 
						|
  lib_samprate_box=new QComboBox(this,"lib_name_edit");
 | 
						|
  lib_samprate_box->setGeometry(150,54,100,20);
 | 
						|
  lib_samprate_box->setFont(font);
 | 
						|
  QLabel *lib_samprate_label=
 | 
						|
    new QLabel(lib_samprate_box,tr("Default &Sample Rate:"),this,
 | 
						|
	       "lib_samprate_label");
 | 
						|
  lib_samprate_label->setGeometry(20,54,125,20);
 | 
						|
  lib_samprate_label->setFont(font);
 | 
						|
  lib_samprate_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter|Qt::TextShowMnemonic);
 | 
						|
 | 
						|
  //
 | 
						|
  // Default Bitrate
 | 
						|
  //
 | 
						|
  lib_bitrate_box=new QComboBox(this,"lib_name_edit");
 | 
						|
  lib_bitrate_box->setGeometry(150,76,100,20);
 | 
						|
  lib_bitrate_box->setFont(font);
 | 
						|
  QLabel *lib_bitrate_label=
 | 
						|
    new QLabel(lib_bitrate_box,tr("Default &Bitrate:"),this,
 | 
						|
	       "lib_bitrate_label");
 | 
						|
  lib_bitrate_label->setGeometry(25,76,120,20);
 | 
						|
  lib_bitrate_label->setFont(font);
 | 
						|
  lib_bitrate_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter|Qt::TextShowMnemonic);
 | 
						|
 | 
						|
  //
 | 
						|
  //  Ok Button
 | 
						|
  //
 | 
						|
  QPushButton *ok_button=new QPushButton(this,"ok_button");
 | 
						|
  ok_button->setGeometry(145,108,80,50);
 | 
						|
  ok_button->setDefault(true);
 | 
						|
  ok_button->setFont(button_font);
 | 
						|
  ok_button->setText(tr("&OK"));
 | 
						|
  connect(ok_button,SIGNAL(clicked()),this,SLOT(okData()));
 | 
						|
 | 
						|
  //
 | 
						|
  //  Cancel Button
 | 
						|
  //
 | 
						|
  QPushButton *cancel_button=new QPushButton(this,"cancel_button");
 | 
						|
  cancel_button->setGeometry(235,108,80,50);
 | 
						|
  cancel_button->setFont(button_font);
 | 
						|
  cancel_button->setText(tr("&Cancel"));
 | 
						|
  connect(cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));
 | 
						|
 | 
						|
  //
 | 
						|
  // Populate Fields
 | 
						|
  //
 | 
						|
  lib_format_box->insertItem(tr("PCM16"));
 | 
						|
#ifdef HAVE_VORBIS
 | 
						|
  lib_format_box->insertItem(tr("OggVorbis"));
 | 
						|
#endif  // HAVE_VORBIS
 | 
						|
  if(mpeg) {
 | 
						|
    lib_format_box->insertItem(tr("MPEG Layer 2"));
 | 
						|
    lib_format_box->insertItem(tr("MPEG Layer 3"));
 | 
						|
  }
 | 
						|
  QString str;
 | 
						|
  switch(lib_lib->format()) {
 | 
						|
      case RDAudioSettings::Pcm16:
 | 
						|
	str="PCM16";
 | 
						|
	break;
 | 
						|
 | 
						|
      case RDAudioSettings::OggVorbis:
 | 
						|
	str="OggVorbis";
 | 
						|
	break;
 | 
						|
 | 
						|
      case RDAudioSettings::Layer1:
 | 
						|
	str="MPEG Layer 1";
 | 
						|
	break;
 | 
						|
 | 
						|
      case RDAudioSettings::Layer2:
 | 
						|
	str="MPEG Layer 2";
 | 
						|
	break;
 | 
						|
 | 
						|
      case RDAudioSettings::Layer3:
 | 
						|
	str="MPEG Layer 3";
 | 
						|
	break;
 | 
						|
  }
 | 
						|
  for(int i=0;i<lib_format_box->count();i++) {
 | 
						|
    if(lib_format_box->text(i)==str) {
 | 
						|
      lib_format_box->setCurrentItem(i);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  lib_channels_box->insertItem("1");
 | 
						|
  lib_channels_box->insertItem("2");
 | 
						|
  lib_channels_box->setCurrentItem(lib_lib->channels()-1);
 | 
						|
  lib_samprate_box->insertItem("32000");
 | 
						|
  lib_samprate_box->insertItem("44100");
 | 
						|
  lib_samprate_box->insertItem("48000");
 | 
						|
  switch(lib_lib->sampleRate()) {
 | 
						|
      case 32000:
 | 
						|
	lib_samprate_box->setCurrentItem(0);
 | 
						|
	break;
 | 
						|
 | 
						|
      case 44100:
 | 
						|
	lib_samprate_box->setCurrentItem(1);
 | 
						|
	break;
 | 
						|
 | 
						|
      case 48000:
 | 
						|
	lib_samprate_box->setCurrentItem(2);
 | 
						|
	break;
 | 
						|
  }
 | 
						|
  ShowBitRates(lib_lib->format(),lib_lib->bitRate());
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
RDAudioSettingsDialog::~RDAudioSettingsDialog()
 | 
						|
{
 | 
						|
  delete lib_channels_box;
 | 
						|
  delete lib_samprate_box;
 | 
						|
  delete lib_bitrate_box;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
QSize RDAudioSettingsDialog::sizeHint() const
 | 
						|
{
 | 
						|
  return QSize(325,168);
 | 
						|
} 
 | 
						|
 | 
						|
 | 
						|
QSizePolicy RDAudioSettingsDialog::sizePolicy() const
 | 
						|
{
 | 
						|
  return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void RDAudioSettingsDialog::formatData(int index)
 | 
						|
{
 | 
						|
  ShowBitRates(ReadFormat(),lib_lib->bitRate());
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void RDAudioSettingsDialog::okData()
 | 
						|
{
 | 
						|
  unsigned rate=0;
 | 
						|
  lib_lib->setFormat(ReadFormat());
 | 
						|
  lib_lib->setChannels(lib_channels_box->currentItem()+1);
 | 
						|
  sscanf(lib_samprate_box->currentText(),"%d",&rate);
 | 
						|
  lib_lib->setSampleRate(rate);
 | 
						|
  rate=0;
 | 
						|
  switch(lib_lib->format()) {
 | 
						|
      case RDAudioSettings::Layer1:
 | 
						|
      case RDAudioSettings::Layer2:
 | 
						|
      case RDAudioSettings::Layer3:
 | 
						|
	sscanf(lib_bitrate_box->currentText(),"%d",&rate);
 | 
						|
	break;
 | 
						|
 | 
						|
      default:
 | 
						|
	break;
 | 
						|
  }
 | 
						|
  lib_lib->setBitRate(rate*1000);
 | 
						|
  done(0);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void RDAudioSettingsDialog::cancelData()
 | 
						|
{
 | 
						|
  done(1);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void RDAudioSettingsDialog::ShowBitRates(RDAudioSettings::Format fmt,int rate)
 | 
						|
{
 | 
						|
  lib_bitrate_box->clear();
 | 
						|
  switch(fmt) {
 | 
						|
      case RDAudioSettings::Pcm16:
 | 
						|
      case RDAudioSettings::OggVorbis:
 | 
						|
	lib_bitrate_box->setDisabled(true);
 | 
						|
	break;
 | 
						|
 | 
						|
      case RDAudioSettings::Layer1:
 | 
						|
	lib_bitrate_box->setEnabled(true);
 | 
						|
	lib_bitrate_box->insertItem("32 kbps");
 | 
						|
	lib_bitrate_box->insertItem("64 kbps");
 | 
						|
	lib_bitrate_box->insertItem("96 kbps");
 | 
						|
	lib_bitrate_box->insertItem("128 kbps");
 | 
						|
	lib_bitrate_box->insertItem("160 kbps");
 | 
						|
	lib_bitrate_box->insertItem("192 kbps");
 | 
						|
	lib_bitrate_box->insertItem("224 kbps");
 | 
						|
	lib_bitrate_box->insertItem("256 kbps");
 | 
						|
	lib_bitrate_box->insertItem("288 kbps");
 | 
						|
	lib_bitrate_box->insertItem("320 kbps");
 | 
						|
	lib_bitrate_box->insertItem("352 kbps");
 | 
						|
	lib_bitrate_box->insertItem("384 kbps");
 | 
						|
	lib_bitrate_box->insertItem("416 kbps");
 | 
						|
	lib_bitrate_box->insertItem("448 kbps");
 | 
						|
	switch(lib_lib->bitRate()) {
 | 
						|
	    case 32000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(0);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 64000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(1);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 96000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(2);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 128000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(3);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 160000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(4);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 192000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(5);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 224000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(6);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 256000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(7);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 288000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(8);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 320000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(9);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 352000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(10);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 384000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(11);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 416000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(12);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 448000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(13);
 | 
						|
	      break;
 | 
						|
	}
 | 
						|
	break;
 | 
						|
 | 
						|
      case RDAudioSettings::Layer2:
 | 
						|
	lib_bitrate_box->setEnabled(true);
 | 
						|
	lib_bitrate_box->insertItem("32 kbps");
 | 
						|
	lib_bitrate_box->insertItem("48 kbps");
 | 
						|
	lib_bitrate_box->insertItem("56 kbps");
 | 
						|
	lib_bitrate_box->insertItem("64 kbps");
 | 
						|
	lib_bitrate_box->insertItem("80 kbps");
 | 
						|
	lib_bitrate_box->insertItem("96 kbps");
 | 
						|
	lib_bitrate_box->insertItem("112 kbps");
 | 
						|
	lib_bitrate_box->insertItem("128 kbps");
 | 
						|
	lib_bitrate_box->insertItem("160 kbps");
 | 
						|
	lib_bitrate_box->insertItem("192 kbps");
 | 
						|
	lib_bitrate_box->insertItem("224 kbps");
 | 
						|
	lib_bitrate_box->insertItem("256 kbps");
 | 
						|
	lib_bitrate_box->insertItem("320 kbps");
 | 
						|
	lib_bitrate_box->insertItem("384 kbps");
 | 
						|
	switch(lib_lib->bitRate()) {
 | 
						|
	    case 32000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(0);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 48000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(1);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 56000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(2);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 64000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(3);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 80000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(4);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 96000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(5);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 112000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(6);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 128000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(7);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 160000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(8);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 192000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(9);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 224000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(10);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 256000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(11);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 320000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(12);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 384000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(13);
 | 
						|
	      break;
 | 
						|
	}
 | 
						|
	break;
 | 
						|
 | 
						|
      case RDAudioSettings::Layer3:
 | 
						|
	lib_bitrate_box->setEnabled(true);
 | 
						|
	lib_bitrate_box->insertItem("32 kbps");
 | 
						|
	lib_bitrate_box->insertItem("40 kbps");
 | 
						|
	lib_bitrate_box->insertItem("48 kbps");
 | 
						|
	lib_bitrate_box->insertItem("56 kbps");
 | 
						|
	lib_bitrate_box->insertItem("64 kbps");
 | 
						|
	lib_bitrate_box->insertItem("80 kbps");
 | 
						|
	lib_bitrate_box->insertItem("96 kbps");
 | 
						|
	lib_bitrate_box->insertItem("112 kbps");
 | 
						|
	lib_bitrate_box->insertItem("128 kbps");
 | 
						|
	lib_bitrate_box->insertItem("160 kbps");
 | 
						|
	lib_bitrate_box->insertItem("192 kbps");
 | 
						|
	lib_bitrate_box->insertItem("224 kbps");
 | 
						|
	lib_bitrate_box->insertItem("256 kbps");
 | 
						|
	lib_bitrate_box->insertItem("320 kbps");
 | 
						|
	switch(lib_lib->bitRate()) {
 | 
						|
	    case 32000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(0);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 40000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(1);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 48000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(2);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 56000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(3);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 64000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(4);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 80000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(5);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 96000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(6);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 112000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(7);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 128000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(8);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 160000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(9);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 192000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(10);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 224000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(11);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 256000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(12);
 | 
						|
	      break;
 | 
						|
 | 
						|
	    case 320000:
 | 
						|
	      lib_bitrate_box->setCurrentItem(13);
 | 
						|
	      break;
 | 
						|
	}
 | 
						|
	break;
 | 
						|
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
RDAudioSettings::Format RDAudioSettingsDialog::ReadFormat()
 | 
						|
{
 | 
						|
  if(lib_format_box->currentText()==tr("PCM16")) {
 | 
						|
    return RDAudioSettings::Pcm16;
 | 
						|
  }
 | 
						|
  if(lib_format_box->currentText()==tr("OggVorbis")) {
 | 
						|
    return RDAudioSettings::OggVorbis;
 | 
						|
  }
 | 
						|
  if(lib_format_box->currentText()==tr("MPEG Layer 2")) {
 | 
						|
    return RDAudioSettings::Layer2;
 | 
						|
  }
 | 
						|
  if(lib_format_box->currentText()==tr("MPEG Layer 3")) {
 | 
						|
    return RDAudioSettings::Layer3;
 | 
						|
  }
 | 
						|
  return RDAudioSettings::Pcm16;
 | 
						|
}
 |