File indexing completed on 2024-04-21 04:50:13

0001 /*
0002     SPDX-FileCopyrightText: 2005-2009 Sebastian Trueg <trueg@k3b.org>
0003     SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "k3bmediaselectiondialog.h"
0009 #include "k3bmediaselectioncombobox.h"
0010 #include "k3bmediacache.h"
0011 #include "k3bapplication.h"
0012 
0013 #include <KLocalizedString>
0014 
0015 #include <QDialogButtonBox>
0016 #include <QLabel>
0017 #include <QVBoxLayout>
0018 #include <QPushButton>
0019 
0020 
0021 K3b::MediaSelectionDialog::MediaSelectionDialog( QWidget* parent,
0022                                                  const QString& title,
0023                                                  const QString& text,
0024                                                  bool modal )
0025     : QDialog( parent)
0026 {
0027     setWindowTitle(title.isEmpty() ? i18n("Medium Selection") : title);
0028     setModal(modal);
0029 
0030     QLabel* label = new QLabel( text.isEmpty() ? i18n("Please select a medium:") : text, this );
0031     m_combo = new K3b::MediaSelectionComboBox( this );
0032 
0033     QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this );
0034     m_okButton = buttonBox->button( QDialogButtonBox::Ok );
0035     connect( buttonBox, SIGNAL(accepted()), SLOT(accept()) );
0036     connect( buttonBox, SIGNAL(rejected()), SLOT(reject()) );
0037 
0038     QVBoxLayout* lay = new QVBoxLayout( this );
0039     lay->addWidget( label );
0040     lay->addWidget( m_combo );
0041     lay->addWidget( buttonBox );
0042 
0043     connect( m_combo, SIGNAL(selectionChanged(K3b::Device::Device*)),
0044              this, SLOT(slotSelectionChanged(K3b::Device::Device*)) );
0045 
0046     slotSelectionChanged( m_combo->selectedDevice() );
0047 }
0048 
0049 
0050 K3b::MediaSelectionDialog::~MediaSelectionDialog()
0051 {
0052 }
0053 
0054 
0055 void K3b::MediaSelectionDialog::setWantedMediumType( Device::MediaTypes type )
0056 {
0057     m_combo->setWantedMediumType( type );
0058 }
0059 
0060 
0061 void K3b::MediaSelectionDialog::setWantedMediumState( Device::MediaStates state )
0062 {
0063     m_combo->setWantedMediumState( state );
0064 }
0065 
0066 
0067 void K3b::MediaSelectionDialog::setWantedMediumContent( Medium::MediumContents content )
0068 {
0069     m_combo->setWantedMediumContent( content );
0070 }
0071 
0072 
0073 K3b::Device::Device* K3b::MediaSelectionDialog::selectedDevice() const
0074 {
0075     return m_combo->selectedDevice();
0076 }
0077 
0078 
0079 void K3b::MediaSelectionDialog::slotSelectionChanged( K3b::Device::Device* dev )
0080 {
0081     m_okButton->setEnabled( dev != 0 );
0082 }
0083 
0084 
0085 K3b::Device::Device* K3b::MediaSelectionDialog::selectMedium( Device::MediaTypes type,
0086                                                               Device::MediaStates state,
0087                                                               Medium::MediumContents content,
0088                                                               QWidget* parent,
0089                                                               const QString& title, const QString& text,
0090                                                               bool* canceled )
0091 {
0092     K3b::MediaSelectionDialog dlg( parent, title, text );
0093     dlg.setWantedMediumType( type );
0094     dlg.setWantedMediumState( state );
0095     dlg.setWantedMediumContent( content );
0096 
0097     // even if no usable medium is inserted the combobox shows the "insert one" message
0098     // so it's not sufficient to check for just one entry to check if there only is a
0099     // single usable medium
0100     if( ( dlg.selectedDevice() && dlg.m_combo->count() == 1 )
0101         || dlg.exec() == Accepted ) {
0102         if( canceled )
0103             *canceled = false;
0104         return dlg.selectedDevice();
0105     }
0106     else {
0107         if( canceled )
0108             *canceled = true;
0109         return 0;
0110     }
0111 }
0112 
0113 #include "moc_k3bmediaselectiondialog.cpp"