File indexing completed on 2024-05-05 04:51:47
0001 /* 0002 SPDX-FileCopyrightText: 2003-2007 Sebastian Trueg <trueg@k3b.org> 0003 SPDX-FileCopyrightText: 2009 Arthur Renato Mello <arthur@mandriva.com> 0004 SPDX-FileCopyrightText: 2009 Gustavo Pichorim Boiko <gustavo.boiko@kdemail.net> 0005 SPDX-FileCopyrightText: 2009-2010 Michal Malek <michalm@jabster.pl> 0006 SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 0012 #include "k3bmovixview.h" 0013 #include "k3bmovixprojectmodel.h" 0014 #include "k3bmovixdoc.h" 0015 #include "k3bmovixburndialog.h" 0016 #include "k3bmovixfileitem.h" 0017 0018 #include "k3bdatapropertiesdialog.h" 0019 #include "k3baction.h" 0020 #include "k3bvolumenamewidget.h" 0021 0022 #include <KLocalizedString> 0023 #include <KMessageBox> 0024 #include <KToolBar> 0025 0026 #include <QDebug> 0027 #include <QItemSelectionModel> 0028 #include <QList> 0029 #include <QUrl> 0030 #include <QAction> 0031 #include <QFileDialog> 0032 #include <QHeaderView> 0033 #include <QTreeView> 0034 0035 K3b::MovixView::MovixView( K3b::MovixDoc* doc, QWidget* parent ) 0036 : 0037 View( doc, parent ), 0038 m_doc( doc ), 0039 m_model( new MovixProjectModel( m_doc, this ) ), 0040 m_view( new QTreeView( this ) ) 0041 { 0042 m_view->setModel( m_model ); 0043 m_view->setAcceptDrops( true ); 0044 m_view->setDragEnabled( true ); 0045 m_view->setDragDropMode( QTreeView::DragDrop ); 0046 m_view->setItemsExpandable( false ); 0047 m_view->setRootIsDecorated( false ); 0048 m_view->setSelectionMode( QTreeView::ExtendedSelection ); 0049 m_view->setVerticalScrollMode( QAbstractItemView::ScrollPerPixel ); 0050 m_view->setContextMenuPolicy( Qt::ActionsContextMenu ); 0051 // FIXME: make QHeaderView::Interactive the default but connect to model changes and call header()->resizeSections( QHeaderView::ResizeToContents ); 0052 m_view->header()->setSectionResizeMode( QHeaderView::ResizeToContents ); 0053 m_view->setEditTriggers( QAbstractItemView::NoEditTriggers ); 0054 setMainWidget( m_view ); 0055 0056 // setup actions 0057 m_actionProperties = K3b::createAction( this, i18n("Properties"), "document-properties", 0058 0, this, SLOT(showPropertiesDialog()), 0059 actionCollection(), "movix_show_props" ); 0060 m_actionRemove = K3b::createAction( this, i18n( "Remove" ), "edit-delete", 0061 Qt::Key_Delete, this, SLOT(slotRemove()), 0062 actionCollection(), "movix_remove_item" ); 0063 m_actionRemoveSubTitle = K3b::createAction( this, i18n( "Remove Subtitle File" ), "edit-delete", 0064 0, this, SLOT(slotRemoveSubTitleItems()), 0065 actionCollection(), "movix_remove_subtitle_item" ); 0066 m_actionAddSubTitle = K3b::createAction( this, i18n("Add Subtitle File..."), 0, 0067 0, this, SLOT(slotAddSubTitleFile()), 0068 actionCollection(), "movix_add_subtitle" ); 0069 0070 connect( m_view->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), 0071 this, SLOT(slotSelectionChanged()) ); 0072 0073 QAction* separator = new QAction( this ); 0074 separator->setSeparator( true ); 0075 m_view->addAction( m_actionRemove ); 0076 m_view->addAction( m_actionRemoveSubTitle ); 0077 m_view->addAction( m_actionAddSubTitle ); 0078 m_view->addAction( separator ); 0079 m_view->addAction( m_actionProperties ); 0080 m_view->addAction( separator ); 0081 m_view->addAction( actionCollection()->action("project_burn") ); 0082 0083 // Setup toolbar 0084 toolBox()->addActions( createPluginsActions( m_doc->type() ) ); 0085 toolBox()->addWidget( new VolumeNameWidget( doc, toolBox() ) ); 0086 } 0087 0088 0089 K3b::MovixView::~MovixView() 0090 { 0091 } 0092 0093 0094 void K3b::MovixView::showPropertiesDialog() 0095 { 0096 const QModelIndexList selection = m_view->selectionModel()->selectedRows(); 0097 0098 if( selection.isEmpty() ) { 0099 // show project properties 0100 slotProperties(); 0101 } 0102 else { 0103 QList<K3b::DataItem*> items; 0104 0105 foreach(const QModelIndex &index, selection) 0106 items.append(m_model->itemForIndex(index)); 0107 0108 K3b::DataPropertiesDialog dlg( items, this ); 0109 dlg.exec(); 0110 } 0111 } 0112 0113 0114 void K3b::MovixView::slotRemoveSubTitleItems() 0115 { 0116 const QModelIndexList selection = m_view->selectionModel()->selectedRows(); 0117 if ( !selection.count() ) 0118 return; 0119 0120 K3b::MovixFileItem *item = 0; 0121 Q_FOREACH( const QModelIndex& index, selection ) { 0122 item = m_model->itemForIndex(index); 0123 if (item) 0124 m_doc->removeSubTitleItem( item ); 0125 } 0126 } 0127 0128 0129 void K3b::MovixView::slotAddSubTitleFile() 0130 { 0131 const QModelIndexList selection = m_view->selectionModel()->selectedRows(); 0132 if( !selection.count() ) 0133 return; 0134 0135 MovixFileItem *item = 0; 0136 foreach( const QModelIndex& index, selection ) 0137 { 0138 item = m_model->itemForIndex(index); 0139 if( item ) 0140 break; 0141 } 0142 0143 if( item ) { 0144 QUrl url = QFileDialog::getOpenFileUrl( this ); 0145 if( url.isValid() ) { 0146 if( url.isLocalFile() ) 0147 m_doc->addSubTitleItem( item, url ); 0148 else 0149 KMessageBox::error( 0, i18n("K3b currently only supports local files.") ); 0150 } 0151 } 0152 } 0153 0154 0155 void K3b::MovixView::slotSelectionChanged() 0156 { 0157 const QModelIndexList selection = m_view->selectionModel()->selectedRows(); 0158 if( selection.count() >= 1 ) { 0159 m_actionRemove->setEnabled(true); 0160 0161 bool subtitle = false; 0162 // check if any of the items have a subtitle 0163 Q_FOREACH( const QModelIndex& index, selection ) { 0164 K3b::MovixFileItem *item = m_model->itemForIndex(index); 0165 if (item && item->subTitleItem()) { 0166 subtitle = true; 0167 break; 0168 } 0169 } 0170 m_actionRemoveSubTitle->setEnabled( subtitle ); 0171 // only enable the subtitle adding if there is just one item selected 0172 m_actionAddSubTitle->setEnabled( selection.count() == 1 ); 0173 } 0174 else { 0175 m_actionRemove->setEnabled(false); 0176 m_actionRemoveSubTitle->setEnabled( false ); 0177 m_actionAddSubTitle->setEnabled( false ); 0178 } 0179 } 0180 0181 0182 void K3b::MovixView::slotRemove() 0183 { 0184 const QModelIndexList selected = m_view->selectionModel()->selectedRows(); 0185 0186 // create a list of persistent model indexes to be able to remove all of them 0187 QList<QPersistentModelIndex> indexes; 0188 Q_FOREACH( const QModelIndex& index, selected ) { 0189 indexes.append( QPersistentModelIndex( index ) ); 0190 } 0191 0192 // and now ask the indexes to be removed 0193 Q_FOREACH( const QPersistentModelIndex& index, indexes ) { 0194 m_model->removeRow( index.row(), index.parent() ); 0195 } 0196 } 0197 0198 0199 K3b::ProjectBurnDialog* K3b::MovixView::newBurnDialog( QWidget* parent ) 0200 { 0201 return new K3b::MovixBurnDialog( m_doc, parent ); 0202 } 0203 0204 #include "moc_k3bmovixview.cpp"