Esempio n. 1
0
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 );
        }
    }

}
Esempio n. 2
0
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 );
        }

    }


}
Esempio n. 3
0
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();
    }
}
Esempio n. 4
0
void MainWindow::dirViewClicked(QModelIndex idx){
    if(NULL != currentFile){
        fileSave();
    }
    QFileSystemModel *model = (QFileSystemModel*) ui->listView->model();

    openFile(model->filePath(idx));

}
Esempio n. 5
0
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);
}
Esempio n. 6
0
    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();
    }
Esempio n. 7
0
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());
    }
Esempio n. 8
0
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();
}
Esempio n. 9
0
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;
            }
        }
    }

}