File indexing completed on 2024-10-13 04:22:11
0001 /* 0002 SPDX-FileCopyrightText: 1998-2008 Sebastian Trueg <trueg@k3b.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "k3bmediacontentsview.h" 0008 0009 #include "k3bmediacache.h" 0010 #include "k3bapplication.h" 0011 0012 #include <QLabel> 0013 #include <QLayout> 0014 0015 0016 class K3b::MediaContentsView::Private 0017 { 0018 public: 0019 K3b::Medium medium; 0020 int supportedMediumContent; 0021 int supportedMediumTypes; 0022 int supportedMediumStates; 0023 0024 bool autoReload; 0025 }; 0026 0027 0028 K3b::MediaContentsView::MediaContentsView( bool withHeader, 0029 int mediumContent, 0030 int mediumTypes, 0031 int mediumState, 0032 QWidget* parent ) 0033 : K3b::ContentsView( withHeader, parent ) 0034 { 0035 d = new Private; 0036 d->supportedMediumContent = mediumContent; 0037 d->supportedMediumTypes = mediumTypes; 0038 d->supportedMediumStates = mediumState; 0039 d->autoReload = true; 0040 0041 connect( k3bappcore->mediaCache(), SIGNAL(mediumChanged(K3b::Device::Device*)), 0042 this, SLOT(slotMediumChanged(K3b::Device::Device*)) ); 0043 } 0044 0045 0046 K3b::MediaContentsView::~MediaContentsView() 0047 { 0048 delete d; 0049 } 0050 0051 0052 void K3b::MediaContentsView::setAutoReload( bool b ) 0053 { 0054 d->autoReload = b; 0055 } 0056 0057 0058 int K3b::MediaContentsView::supportedMediumContent() const 0059 { 0060 return d->supportedMediumContent; 0061 } 0062 0063 0064 int K3b::MediaContentsView::supportedMediumTypes() const 0065 { 0066 return d->supportedMediumTypes; 0067 } 0068 0069 0070 int K3b::MediaContentsView::supportedMediumStates() const 0071 { 0072 return d->supportedMediumStates; 0073 } 0074 0075 0076 K3b::Medium K3b::MediaContentsView::medium() const 0077 { 0078 return d->medium; 0079 } 0080 0081 0082 K3b::Device::Device* K3b::MediaContentsView::device() const 0083 { 0084 return medium().device(); 0085 } 0086 0087 0088 void K3b::MediaContentsView::setMedium( const K3b::Medium& m ) 0089 { 0090 d->medium = m; 0091 } 0092 0093 0094 void K3b::MediaContentsView::reload( K3b::Device::Device* dev ) 0095 { 0096 reload( k3bappcore->mediaCache()->medium( dev ) ); 0097 } 0098 0099 0100 void K3b::MediaContentsView::reload( const K3b::Medium& m ) 0101 { 0102 setMedium( m ); 0103 reload(); 0104 } 0105 0106 0107 void K3b::MediaContentsView::reload() 0108 { 0109 enableInteraction( true ); 0110 reloadMedium(); 0111 } 0112 0113 0114 void K3b::MediaContentsView::enableInteraction( bool enable ) 0115 { 0116 mainWidget()->setEnabled( enable ); 0117 } 0118 0119 0120 void K3b::MediaContentsView::slotMediumChanged( K3b::Device::Device* dev ) 0121 { 0122 if( !d->autoReload || !isActive() ) 0123 return; 0124 0125 if( dev == device() ) { 0126 K3b::Medium m = k3bappcore->mediaCache()->medium( dev ); 0127 0128 // no need to reload if the medium did not change (this is even 0129 // important since K3b blocks the devices in action and after 0130 // the release they are signalled as changed) 0131 if( m == medium() ) { 0132 qDebug() << " medium did not change"; 0133 enableInteraction( true ); 0134 } 0135 else if( ( m.diskInfo().mediaType() == Device::MEDIA_NONE || 0136 m.content() & supportedMediumContent() ) && 0137 m.diskInfo().mediaType() & supportedMediumTypes() && 0138 m.diskInfo().diskState() & supportedMediumStates() ) { 0139 qDebug() << " new supported medium found"; 0140 reload( m ); 0141 } 0142 else { 0143 qDebug() << " unsupported medium found"; 0144 enableInteraction( false ); 0145 } 0146 } 0147 } 0148 0149 #include "moc_k3bmediacontentsview.cpp"