diff --git a/src/PropListDelegate.h b/src/PropListDelegate.h index 9a167c7d5..de20c2eb9 100644 --- a/src/PropListDelegate.h +++ b/src/PropListDelegate.h @@ -49,40 +49,39 @@ enum PropPriority {IGNORED=0, NORMAL=1, HIGH=2, MAXIMUM=7}; class PropListDelegate: public QItemDelegate { Q_OBJECT - signals: - void filteredFilesChanged(); +signals: + void filteredFilesChanged() const; - public: - PropListDelegate(QObject *parent=0) : QItemDelegate(parent){ - } +public: + PropListDelegate(QObject *parent=0) : QItemDelegate(parent){ + } - ~PropListDelegate(){} + ~PropListDelegate(){} - void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const{ - QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option); - QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; - switch(index.column()){ + void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const{ + QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option); + switch(index.column()){ case SIZE: - QItemDelegate::drawBackground(painter, opt, index); - QItemDelegate::drawDisplay(painter, opt, option.rect, misc::friendlyUnit(index.data().toLongLong())); - break; + QItemDelegate::drawBackground(painter, opt, index); + QItemDelegate::drawDisplay(painter, opt, option.rect, misc::friendlyUnit(index.data().toLongLong())); + break; case PROGRESS:{ - QStyleOptionProgressBarV2 newopt; - float progress = index.data().toDouble()*100.; - newopt.rect = opt.rect; - newopt.text = QString(QByteArray::number(progress, 'f', 1))+QString::fromUtf8("%"); - newopt.progress = (int)progress; - newopt.maximum = 100; - newopt.minimum = 0; - newopt.state |= QStyle::State_Enabled; - newopt.textVisible = true; - QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter); - break; - } + QStyleOptionProgressBarV2 newopt; + float progress = index.data().toDouble()*100.; + newopt.rect = opt.rect; + newopt.text = QString(QByteArray::number(progress, 'f', 1))+QString::fromUtf8("%"); + newopt.progress = (int)progress; + newopt.maximum = 100; + newopt.minimum = 0; + newopt.state |= QStyle::State_Enabled; + newopt.textVisible = true; + QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter); + break; + } case PRIORITY:{ - QStyleOptionComboBox newopt; - newopt.rect = opt.rect; - switch(index.data().toInt()){ + QStyleOptionComboBox newopt; + newopt.rect = opt.rect; + switch(index.data().toInt()){ case IGNORED: newopt.currentText = tr("Ignored"); break; @@ -98,126 +97,127 @@ class PropListDelegate: public QItemDelegate { default: qDebug("Unhandled priority, setting NORMAL"); newopt.currentText = tr("Normal", "Normal (priority)"); + } + newopt.state |= QStyle::State_Enabled; + newopt.subControls = QStyle::SC_All; + //painter->translate(QPoint(opt.rect.x()*-1,opt.rect.y()*-1)); + //QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &newopt, painter); + //painter->translate(QPoint(opt.rect.x(),opt.rect.y())); + QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &newopt, painter); + break; } - newopt.state |= QStyle::State_Enabled; - QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &newopt, - painter); - opt.palette.setColor(QPalette::Text, QColor("black")); - painter->setPen(opt.palette.color(cg, QPalette::Text)); - painter->drawText(option.rect, Qt::AlignLeft, QString::fromUtf8(" ")+newopt.currentText); - break; - } default: QItemDelegate::paint(painter, option, index); - } - } + } + } - QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex & index) const { - qDebug("CreateEditor called"); - if(index.column() != PRIORITY) return 0; - QComboBox* editor = new QComboBox(parent); - editor->setFocusPolicy(Qt::StrongFocus); - editor->addItem(tr("Ignored")); - editor->addItem(tr("Normal", "Normal (priority)")); - editor->addItem(tr("High", "High (priority)")); - editor->addItem(tr("Maximum", "Maximum (priority)")); - return editor; - } + QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex & index) const { + qDebug("CreateEditor called"); + if(index.column() != PRIORITY) return 0; + QComboBox* editor = new QComboBox(parent); + editor->setFocusPolicy(Qt::StrongFocus); + editor->addItem(tr("Ignored")); + editor->addItem(tr("Normal", "Normal (priority)")); + editor->addItem(tr("High", "High (priority)")); + editor->addItem(tr("Maximum", "Maximum (priority)")); + return editor; + } - void setEditorData(QWidget *editor, const QModelIndex &index) const { - qDebug("setEditorData called"); - unsigned short val = index.model()->data(index, Qt::DisplayRole).toInt(); - QComboBox *combobox = static_cast(editor); - qDebug("Set Editor data: Prio is %d", val); - switch(val){ + void setEditorData(QWidget *editor, const QModelIndex &index) const { + qDebug("setEditorData called"); + unsigned short val = index.model()->data(index, Qt::DisplayRole).toInt(); + QComboBox *combobox = static_cast(editor); + qDebug("Set Editor data: Prio is %d", val); + switch(val){ case IGNORED: - combobox->setCurrentIndex(0); - break; + combobox->setCurrentIndex(0); + break; case NORMAL: - combobox->setCurrentIndex(1); - break; + combobox->setCurrentIndex(1); + break; case HIGH: - combobox->setCurrentIndex(2); - break; + combobox->setCurrentIndex(2); + break; case MAXIMUM: - combobox->setCurrentIndex(3); - break; + combobox->setCurrentIndex(3); + break; default: - qDebug("Unhandled priority, setting to NORMAL"); - combobox->setCurrentIndex(1); - } + qDebug("Unhandled priority, setting to NORMAL"); + combobox->setCurrentIndex(1); } + } - QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const{ - QVariant value = index.data(Qt::FontRole); - QFont fnt = value.isValid() ? qvariant_cast(value) : option.font; - QFontMetrics fontMetrics(fnt); - const QString text = index.data(Qt::DisplayRole).toString(); - QRect textRect = QRect(0, 0, 0, fontMetrics.lineSpacing() * (text.count(QLatin1Char('\n')) + 1)); - return textRect.size(); - } + QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const{ + QVariant value = index.data(Qt::FontRole); + QFont fnt = value.isValid() ? qvariant_cast(value) : option.font; + QFontMetrics fontMetrics(fnt); + const QString text = index.data(Qt::DisplayRole).toString(); + QRect textRect = QRect(0, 0, 0, fontMetrics.lineSpacing() * (text.count(QLatin1Char('\n')) + 1)); + textRect.setHeight(textRect.height()+10); + return textRect.size(); + } public slots: - void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) { - QComboBox *combobox = static_cast(editor); - int value = combobox->currentIndex(); - qDebug("Setting combobox value in index: %d", value); - unsigned short old_val = index.model()->data(index, Qt::DisplayRole).toInt(); - switch(value){ + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { + QComboBox *combobox = static_cast(editor); + int value = combobox->currentIndex(); + qDebug("Setting combobox value in index: %d", value); + unsigned short old_val = index.model()->data(index, Qt::DisplayRole).toInt(); + switch(value){ case 0: - if(old_val != IGNORED){ - model->setData(index, QVariant(IGNORED)); - emit filteredFilesChanged(); - } else { - // XXX: hack to force the model to send the itemChanged() signal - model->setData(index, QVariant(NORMAL)); - model->setData(index, QVariant(IGNORED)); - } - break; + if(old_val != IGNORED){ + model->setData(index, QVariant(IGNORED)); + emit filteredFilesChanged(); + } else { + // XXX: hack to force the model to send the itemChanged() signal + model->setData(index, QVariant(NORMAL)); + model->setData(index, QVariant(IGNORED)); + } + break; case 1: -// if(old_val != NORMAL){ -// model->setData(index, QVariant(NORMAL)); -// if(filteredFilesChanged != 0) -// *filteredFilesChanged = true; -// } else { - model->setData(index, QVariant(HIGH)); - model->setData(index, QVariant(NORMAL)); - emit filteredFilesChanged(); -// } - break; + // if(old_val != NORMAL){ + // model->setData(index, QVariant(NORMAL)); + // if(filteredFilesChanged != 0) + // *filteredFilesChanged = true; + // } else { + model->setData(index, QVariant(HIGH)); + model->setData(index, QVariant(NORMAL)); + emit filteredFilesChanged(); + // } + break; case 2: - if(old_val != HIGH){ - model->setData(index, QVariant(HIGH)); - emit filteredFilesChanged(); - } else { - model->setData(index, QVariant(NORMAL)); - model->setData(index, QVariant(HIGH)); - } - break; + if(old_val != HIGH){ + model->setData(index, QVariant(HIGH)); + emit filteredFilesChanged(); + } else { + model->setData(index, QVariant(NORMAL)); + model->setData(index, QVariant(HIGH)); + } + break; case 3: - if(old_val != MAXIMUM){ - model->setData(index, QVariant(MAXIMUM)); - emit filteredFilesChanged(); - } else { - model->setData(index, QVariant(HIGH)); - model->setData(index, QVariant(MAXIMUM)); - } - break; + if(old_val != MAXIMUM){ + model->setData(index, QVariant(MAXIMUM)); + emit filteredFilesChanged(); + } else { + model->setData(index, QVariant(HIGH)); + model->setData(index, QVariant(MAXIMUM)); + } + break; default: - if(old_val != NORMAL){ - model->setData(index, QVariant(NORMAL)); - emit filteredFilesChanged(); - } else { - model->setData(index, QVariant(HIGH)); - model->setData(index, QVariant(NORMAL)); - } + if(old_val != NORMAL){ + model->setData(index, QVariant(NORMAL)); + emit filteredFilesChanged(); + } else { + model->setData(index, QVariant(HIGH)); + model->setData(index, QVariant(NORMAL)); } } + } - void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const { - qDebug("UpdateEditor Geometry called"); - editor->setGeometry(option.rect); - } + void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const { + qDebug("UpdateEditor Geometry called"); + editor->setGeometry(option.rect); + } }; diff --git a/src/propertieswidget.cpp b/src/propertieswidget.cpp index cd0534b88..5157c1ab0 100644 --- a/src/propertieswidget.cpp +++ b/src/propertieswidget.cpp @@ -522,7 +522,7 @@ void PropertiesWidget::ignoreSelection(){ if(index.column() == PRIORITY){ if(PropListModel->data(index) != QVariant(IGNORED)){ PropListModel->setData(index, QVariant(IGNORED)); - transferList->updateTorrentSizeAndProgress(h.hash()); + filteredFilesChanged(); setItemColor(index, "red"); } } @@ -535,7 +535,7 @@ void PropertiesWidget::normalSelection(){ if(index.column() == PRIORITY){ if(PropListModel->data(index) != QVariant(NORMAL)){ PropListModel->setData(index, QVariant(NORMAL)); - transferList->updateTorrentSizeAndProgress(h.hash()); + filteredFilesChanged(); setItemColor(index, "green"); } } @@ -548,7 +548,7 @@ void PropertiesWidget::highSelection(){ if(index.column() == PRIORITY){ if(PropListModel->data(index) != QVariant(HIGH)){ PropListModel->setData(index, QVariant(HIGH)); - transferList->updateTorrentSizeAndProgress(h.hash()); + filteredFilesChanged(); setItemColor(index, "green"); } } @@ -561,7 +561,7 @@ void PropertiesWidget::maximumSelection(){ if(index.column() == PRIORITY){ if(PropListModel->data(index) != QVariant(MAXIMUM)){ PropListModel->setData(index, QVariant(MAXIMUM)); - transferList->updateTorrentSizeAndProgress(h.hash()); + filteredFilesChanged(); setItemColor(index, "green"); } } @@ -727,6 +727,26 @@ void PropertiesWidget::setItemColor(QModelIndex index, QString color){ } } +bool PropertiesWidget::savePiecesPriorities() { + /*if(!changedFilteredfiles) return true; + if(allFiltered()) { + QMessageBox::warning(0, tr("Priorities error"), tr("Error, you can't filter all the files in a torrent.")); + return false; + }*/ + qDebug("Saving pieces priorities"); + int *priorities = new int[h.get_torrent_info().num_files()]; + getPriorities(PropListModel->invisibleRootItem(), priorities); + unsigned int nbFiles = h.get_torrent_info().num_files(); + for(unsigned int i=0; iupdateTorrentSizeAndProgress(h.hash()); + } } void PropertiesWidget::addFilesToTree(torrent_file *root, QStandardItem *parent) { diff --git a/src/propertieswidget.h b/src/propertieswidget.h index 6c563c2a1..549b9ff01 100644 --- a/src/propertieswidget.h +++ b/src/propertieswidget.h @@ -75,6 +75,7 @@ protected: QPushButton* getButtonFromIndex(int index); std::vector loadFilesPriorities(); bool allFiltered() const; + bool savePiecesPriorities(); protected slots: void loadTorrentInfos(QTorrentHandle &h);