1 
2 #include "codecoptimizations.h"
3 
4 #include <KLocale>
5 #include <KIcon>
6 #include <QLayout>
7 #include <QLabel>
8 #include <QScrollArea>
9 #include <QButtonGroup>
10 #include <QRadioButton>
11 
12 
CodecOptimizations(const QList<Optimization> & _optimizationList,QWidget * parent,Qt::WFlags f)13 CodecOptimizations::CodecOptimizations( const QList<Optimization>& _optimizationList, QWidget* parent, Qt::WFlags f )
14     : KDialog( parent, f ),
15     optimizationList( _optimizationList )
16 {
17     setCaption( i18n("Solutions for backend problems") );
18     setWindowIcon( KIcon("help-about") );
19     setButtons( KDialog::Ok | KDialog::Cancel );
20     setButtonFocus( KDialog::Cancel );
21     connect( this, SIGNAL(okClicked()), this, SLOT(okClicked()) );
22 
23     QWidget *widget = new QWidget( this );
24     setMainWidget( widget );
25     QVBoxLayout *box = new QVBoxLayout( widget );
26 
27     QLabel *messageLabel = new QLabel( i18n("You have installed or removed backends and your soundKonverter settings can be optimized."), this );
28     box->addWidget( messageLabel );
29 
30     QFrame *frame = new QFrame( widget );
31     frame->setFrameShape( QFrame::StyledPanel );
32     frame->setFrameShadow( QFrame::Sunken );
33     box->addWidget( frame );
34 
35     QGridLayout *grid = new QGridLayout( frame );
36     grid->setColumnStretch( 1, 0 );
37     grid->setColumnStretch( 2, 0 );
38 
39     for( int i=0; i<optimizationList.count(); i++ )
40     {
41         const QString codecName = optimizationList.at(i).codecName;
42         const Optimization::Mode mode = optimizationList.at(i).mode;
43         const QString currentBackend = optimizationList.at(i).currentBackend;
44         const QString betterBackend = optimizationList.at(i).betterBackend;
45         const Optimization::Solution solution = optimizationList.at(i).solution;
46 
47         QLabel *solutionLabel = new QLabel( frame );
48         grid->addWidget( solutionLabel, i, 0 );
49         if( mode == Optimization::Encode )
50         {
51             solutionLabel->setText( i18n( "For encoding %1 files the backend '%2' can be replaced with '%3'.", codecName, currentBackend, betterBackend ) );
52         }
53         else if( mode == Optimization::Decode && codecName == "audio cd" )
54         {
55             solutionLabel->setText( i18n( "For ripping audio CDs the backend '%1' can be replaced with '%2'.", currentBackend, betterBackend ) );
56         }
57         else if( mode == Optimization::Decode )
58         {
59             solutionLabel->setText( i18n( "For decoding %1 files the backend '%2' can be replaced with '%3'.", codecName, currentBackend, betterBackend ) );
60         }
61         else if( mode == Optimization::ReplayGain )
62         {
63             solutionLabel->setText( i18n( "For applying Replay Gain to %1 files the backend '%2' can be replaced with '%3'.", codecName, currentBackend, betterBackend ) );
64         }
65 
66         QRadioButton *solutionIgnore = new QRadioButton( i18n("Ignore"), frame );
67         if( solution == Optimization::Ignore )
68             solutionIgnore->setChecked( true );
69         grid->addWidget( solutionIgnore, i, 1 );
70 
71         QRadioButton *solutionFix = new QRadioButton( i18n("Fix"), frame );
72         solutionFixButtons.append( solutionFix );
73         if( solution != Optimization::Ignore )
74             solutionFix->setChecked( true );
75         grid->addWidget( solutionFix, i, 2 );
76 
77         QButtonGroup *solutionButtonGroup = new QButtonGroup( frame );
78         solutionButtonGroup->addButton( solutionIgnore );
79         solutionButtonGroup->addButton( solutionFix );
80     }
81 }
82 
~CodecOptimizations()83 CodecOptimizations::~CodecOptimizations()
84 {}
85 
okClicked()86 void CodecOptimizations::okClicked()
87 {
88     for( int i=0; i<optimizationList.count(); i++ )
89     {
90         if( solutionFixButtons.at(i) && solutionFixButtons.at(i)->isChecked() )
91             optimizationList[i].solution = Optimization::Fix;
92         else
93             optimizationList[i].solution = Optimization::Ignore;
94     }
95 
96     emit solutions( optimizationList );
97 }
98 
99