void TagEditor::addFiles(){ QModelIndexList indexes = TreeView->selectionModel()->selectedRows(0); QFileSystemModel *m = static_cast<QFileSystemModel*>(TreeView->model()); for(int i=0;i<indexes.size();i++){ QModelIndex index = indexes[i]; qDebug()<<index.row()<<index.column(); bool isdir = m->isDir(index); if(isdir){ QString folder = m->filePath(index); QList<QFileInfo> info = Global::getDirContent( folder, extensions, subfolders ); for(int j=0;j<info.size();j++){ TagItem *newItem = new TagItem( info[j].filePath() ); TreeWidget_->addItem( newItem ); } }else{ QFileInfo f(m->filePath(index)); TagItem *newItem = new TagItem( f.filePath() ); TreeWidget_->addItem( newItem ); } } }
void TagEditor::searchAndAddFiles(){ QModelIndexList indexes = TreeView->selectionModel()->selectedRows(0); QFileSystemModel *m = (QFileSystemModel *)TreeView->model(); QList<QFileInfo> infos; for(int i=0;i<indexes.size();i++){ QModelIndex index = indexes[i]; bool isdir = m->isDir(index); if(isdir){ QString folder = m->filePath(index); QList<QFileInfo> info = Global::getDirContent( folder, extensions, subfolders ); infos.append(info); }else{ infos.append( QFileInfo(m->filePath(index)) ); } } SearchForTagsDialog r(infos,this); if( r.exec()==QDialog::Accepted){ QList<QFileInfo> files = r.files(); for(int j=0;j<files.size();j++){ TagItem *newItem = new TagItem( files[j].filePath() ); TreeWidget_->addItem( newItem ); } } }
void DirTreeView::pasteFromClipboard() { qDebug() << "pasteFromClipboard()"; FileSystemSortFilterProxyModel* proxyModel = qobject_cast<FileSystemSortFilterProxyModel*>(model()); QFileSystemModel* dirModel = qobject_cast<QFileSystemModel*>(proxyModel->sourceModel()); QString to(dirModel->filePath(proxyModel->mapToSource(currentIndex()))); QClipboard* clipboard = QApplication::clipboard(); const QMimeData* mime = clipboard->mimeData(); if (mime->hasFormat(UrlListMimeData::format(UrlListMimeData::CopyAction))) { qDebug() << "pasteFromClipboard()" << "Copy list" << UrlListMimeData::listFrom(mime); emit paste(UrlListMimeData::listFrom(mime), to); } else if (mime->hasFormat(UrlListMimeData::format(UrlListMimeData::CutAction))) { qDebug() << "pasteFromClipboard()" << "Cut list" << UrlListMimeData::listFrom(mime, UrlListMimeData::CutAction); emit paste(UrlListMimeData::listFrom(mime, UrlListMimeData::CutAction), to, false); clipboard->clear(); } }
void MainWindow::dirViewClicked(QModelIndex idx){ if(NULL != currentFile){ fileSave(); } QFileSystemModel *model = (QFileSystemModel*) ui->listView->model(); openFile(model->filePath(idx)); }
void NTreeView::dropEvent(QDropEvent *event) { QFileSystemModel *model = (QFileSystemModel *)this->model(); // 選択されたファイルのパスを取得 QModelIndex selectedIndex = this->currentIndex(); QString selectedFilePath = model->filePath(selectedIndex); QTreeView::dropEvent(event); // ドロップが無視されたら処理を終了。例えば同じディレクトリなどにドロップした場合は無視される if (!event->isAccepted()) { return; } /* * ドロップされた座標からドロップされた場所のディレクトリパスを取得する. * AbobeItem, BelowItemの場合、ドロップ先はindexAtで取得されたものの親要素となる. * これはもとのQTreeViewのロジックをみて持ってきた. */ QModelIndex dropIndex = QTreeView::indexAt(event->pos()); switch (dropIndicatorPosition()) { case QAbstractItemView::AboveItem: case QAbstractItemView::BelowItem: dropIndex = dropIndex.parent(); break; case QAbstractItemView::OnItem: case QAbstractItemView::OnViewport: break; } QString dropPath; if (dropIndex.isValid()) { if (dropIndex == this->rootIndex()) { dropPath = model->rootPath(); } else { dropPath = model->filePath(dropIndex); } } else { // ドロップがModelIndexの領域外になった場合は、ルートディレクトリへのドロップである dropPath = model->rootPath(); } emit dropped(dropPath, selectedFilePath); }
virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const { QFileSystemModel* model = static_cast<QFileSystemModel*>(sourceModel()); QModelIndex index = sourceModel()->index(source_row, 0, source_parent); if(model->isDir(index)) return true; m_reader.setFileName(model->filePath(index)); return m_reader.canRead(); }
QList<QUrl> DirTreeView::selectedUrlList() { qDebug() << "selectedUrlList()"; QList<QUrl> urlList; QModelIndexList selected(selectedIndexes()); FileSystemSortFilterProxyModel* proxyModel = qobject_cast<FileSystemSortFilterProxyModel*>(model()); QFileSystemModel* sourceModel = qobject_cast<QFileSystemModel*>(proxyModel->sourceModel()); foreach (QModelIndex proxyIndex, selected) { QModelIndex index = proxyModel->mapToSource(proxyIndex); // use canonicalFilePath() to include URL queries urlList.append(QFileInfo( sourceModel->filePath(index)).canonicalFilePath()); }
void DirTreeView::dropEvent(QDropEvent *event) { if (event->mimeData()->hasFormat(UrlListMimeData::format())) { FileSystemSortFilterProxyModel* proxyModel = qobject_cast<FileSystemSortFilterProxyModel*>(model()); QFileSystemModel* dirModel = qobject_cast<QFileSystemModel*>(proxyModel->sourceModel()); emit dropped(UrlListMimeData::listFrom(event->mimeData()), dirModel->filePath( proxyModel->mapToSource(indexAt(event->pos()))), event->dropAction() == Qt::CopyAction); event->setDropAction(event->dropAction()); event->accept(); return; } event->ignore(); }
void TagEditor::searchOnline(){ QModelIndexList indexes = TreeView->selectionModel()->selectedRows(0); if(indexes.size()==0){ QMessageBox msgBox; msgBox.setText("No rows selected"); msgBox.exec(); return; } QModelIndex index = indexes[0]; QFileSystemModel *m = (QFileSystemModel *)TreeView->model(); bool isdir = m->isDir(index); QString query; QList<QFileInfo> info; QList<TagItem*> items; if(isdir){ //folder/album QString folder = m->filePath(index); info = Global::getDirContent( folder, extensions, subfolders ); }else{ for(int i=0;i<indexes.size();i++){ info.append( m->fileInfo( indexes[i] ) ); } } if(info.size()==0){ QMessageBox msgBox; msgBox.setText("Empty folder..."); msgBox.exec(); return; } for(int i=0;i<info.size();i++){ items.append(new TagItem(info[i].absoluteFilePath())); } SearchDialog d( items, this ); //d.setModal(false); d.exec(); /* if( d.exec()>=0 ){ //save settings anyway //settings = d.getSettings(); } */ //delete tag data from these files if they exist in TreeWidget_, since the tag data now might get changed for(int i=0;i<TreeWidget_->topLevelItemCount();i++){ if( info.size()==0 ){ break; } TagItem *item = (TagItem*)TreeWidget_->topLevelItem(i); for(int j=0;j<info.size();j++){ if( item->data(0,TreeWidget::FULLFILE)==info.at(j).absoluteFilePath() ){ item->clearTags(); info.removeAt( j ); break; } } } }