bool RsCollectionDialog::eventFilter(QObject *obj, QEvent *event) { if (obj == _fileEntriesTW) { if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event); if (keyEvent && keyEvent->key() == Qt::Key_Space) { // Space pressed // get state of current item QTreeWidgetItem *item = _fileEntriesTW->currentItem(); if (item) { Qt::CheckState checkState = (item->checkState(0) == Qt::Checked) ? Qt::Unchecked : Qt::Checked; connectUpdate(false); // set state of all selected items QList<QTreeWidgetItem*> selectedItems = _fileEntriesTW->selectedItems(); QList<QTreeWidgetItem*>::iterator it; for (it = selectedItems.begin(); it != selectedItems.end(); ++it) { (*it)->setCheckState(0, checkState); } updateSizes(); connectUpdate(true); } return true; // eat event } } } // pass the event on to the parent class return QDialog::eventFilter(obj, event); }
RsCollectionDialog::RsCollectionDialog(const QString& CollectionFileName,const std::vector<RsCollectionFile::DLinfo>& dlinfos) : _dlinfos(dlinfos),_filename(CollectionFileName) { setupUi(this) ; setWindowFlags(Qt::Window); // for maximize button setWindowFlags(windowFlags() & ~Qt::WindowMinimizeButtonHint); setWindowTitle(QString("%1 - %2").arg(windowTitle()).arg(QFileInfo(_filename).completeBaseName())); // 1 - add all elements to the list. _fileEntriesTW->setColumnCount(3) ; QTreeWidgetItem *headerItem = _fileEntriesTW->headerItem(); headerItem->setText(0, tr("File")); headerItem->setText(1, tr("Size")); headerItem->setText(2, tr("Hash")); uint32_t size = dlinfos.size(); uint64_t total_size ; uint32_t total_files ; for(uint32_t i=0;i<size;++i) { const RsCollectionFile::DLinfo &dlinfo = dlinfos[i]; QTreeWidgetItem *item = new QTreeWidgetItem; item->setFlags(Qt::ItemIsUserCheckable | item->flags()); item->setCheckState(0, Qt::Checked); item->setData(0, Qt::UserRole, i); item->setText(0, dlinfo.path + "/" + dlinfo.name); item->setText(1, misc::friendlyUnit(dlinfo.size)); item->setText(2, dlinfo.hash); _fileEntriesTW->addTopLevelItem(item); total_size += dlinfo.size ; total_files++ ; } _filename_TL->setText(_filename) ; for (int column = 0; column < _fileEntriesTW->columnCount(); ++column) { _fileEntriesTW->resizeColumnToContents(column); } updateSizes() ; // 2 - connect necessary signals/slots connectUpdate(true); connect(_selectAll_PB,SIGNAL(clicked()),this,SLOT(selectAll())) ; connect(_deselectAll_PB,SIGNAL(clicked()),this,SLOT(deselectAll())) ; connect(_cancel_PB,SIGNAL(clicked()),this,SLOT(cancel())) ; connect(_download_PB,SIGNAL(clicked()),this,SLOT(download())) ; _fileEntriesTW->installEventFilter(this); }
RsCollectionDialog::RsCollectionDialog(const QString& CollectionFileName,const std::vector<RsCollectionFile::DLinfo>& dlinfos) : _dlinfos(dlinfos),_filename(CollectionFileName) { setupUi(this) ; setWindowFlags(Qt::Window); // for maximize button setWindowFlags(windowFlags() & ~Qt::WindowMinimizeButtonHint); setWindowTitle(QString("%1 - %2").arg(windowTitle()).arg(QFileInfo(_filename).completeBaseName())); // 1 - add all elements to the list. _fileEntriesTW->setColumnCount(3) ; QTreeWidgetItem *headerItem = _fileEntriesTW->headerItem(); headerItem->setText(0, tr("File")); headerItem->setText(1, tr("Size")); headerItem->setText(2, tr("Hash")); uint32_t size = dlinfos.size(); uint64_t total_size ; uint32_t total_files ; bool wrong_chars = false ; for(uint32_t i=0;i<size;++i) { const RsCollectionFile::DLinfo &dlinfo = dlinfos[i]; QTreeWidgetItem *item = new QTreeWidgetItem; item->setFlags(Qt::ItemIsUserCheckable | item->flags()); item->setCheckState(0, Qt::Checked); item->setData(0, Qt::UserRole, i); item->setText(0, dlinfo.path + "/" + dlinfo.name); item->setText(1, misc::friendlyUnit(dlinfo.size)); item->setText(2, dlinfo.hash); if(dlinfo.filename_has_wrong_characters) { wrong_chars = true ; item->setTextColor(0,QColor(255,80,120)) ; } _fileEntriesTW->addTopLevelItem(item); total_size += dlinfo.size ; total_files++ ; } _filename_TL->setText(_filename) ; for (int column = 0; column < _fileEntriesTW->columnCount(); ++column) { _fileEntriesTW->resizeColumnToContents(column); } updateSizes() ; // 2 - connect necessary signals/slots connectUpdate(true); connect(_selectAll_PB,SIGNAL(clicked()),this,SLOT(selectAll())) ; connect(_deselectAll_PB,SIGNAL(clicked()),this,SLOT(deselectAll())) ; connect(_cancel_PB,SIGNAL(clicked()),this,SLOT(cancel())) ; connect(_download_PB,SIGNAL(clicked()),this,SLOT(download())) ; _fileEntriesTW->installEventFilter(this); if(wrong_chars) QMessageBox::warning(NULL,tr("Bad filenames have been cleaned"),tr("Some filenames or directory names contained forbidden characters.\nCharacters <b>\",|,/,\\,<,>,*,?</b> will be replaced by '_'.\n Concerned files are listed in red.")) ; }