Allow pausing/resuming dirs in GUI

This commit is contained in:
Marius Kittler 2017-02-23 15:49:58 +01:00
parent 1f6555a718
commit 5101872532
6 changed files with 29 additions and 6 deletions

View File

@ -1,5 +1,7 @@
#include "./dirbuttonsitemdelegate.h"
#include "../model/syncthingdirectorymodel.h"
#include <QPixmap>
#include <QPainter>
#include <QApplication>
@ -9,6 +11,8 @@
#include <QBrush>
#include <QPalette>
using namespace Data;
namespace QtGui {
inline int centerObj(int avail, int size)
@ -19,7 +23,9 @@ inline int centerObj(int avail, int size)
DirButtonsItemDelegate::DirButtonsItemDelegate(QObject* parent) :
QStyledItemDelegate(parent),
m_refreshIcon(QIcon::fromTheme(QStringLiteral("view-refresh"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/view-refresh.svg"))).pixmap(QSize(16, 16))),
m_folderIcon(QIcon::fromTheme(QStringLiteral("folder-open"), QIcon(QStringLiteral(":/icons/hicolor/scalable/places/folder-open.svg"))).pixmap(QSize(16, 16)))
m_folderIcon(QIcon::fromTheme(QStringLiteral("folder-open"), QIcon(QStringLiteral(":/icons/hicolor/scalable/places/folder-open.svg"))).pixmap(QSize(16, 16))),
m_pauseIcon(QIcon::fromTheme(QStringLiteral("media-playback-pause"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/media-playback-pause.svg"))).pixmap(QSize(16, 16))),
m_resumeIcon(QIcon::fromTheme(QStringLiteral("media-playback-start"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/media-playback-start.svg"))).pixmap(QSize(16, 16)))
{}
void DirButtonsItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
@ -37,7 +43,7 @@ void DirButtonsItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem
// draw text
QRectF textRect = option.rect;
textRect.setWidth(textRect.width() - 38);
textRect.setWidth(textRect.width() - 58);
QTextOption textOption;
textOption.setAlignment(opt.displayAlignment);
painter->setFont(opt.font);
@ -46,6 +52,7 @@ void DirButtonsItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem
// draw buttons
const int buttonY = option.rect.y() + centerObj(option.rect.height(), 16);
painter->drawPixmap(option.rect.right() - 52, buttonY, 16, 16, index.data(SyncthingDirectoryModel::DirectoryPaused).toBool() ? m_resumeIcon : m_pauseIcon);
painter->drawPixmap(option.rect.right() - 34, buttonY, 16, 16, m_refreshIcon);
painter->drawPixmap(option.rect.right() - 16, buttonY, 16, 16, m_folderIcon);
}

View File

@ -17,6 +17,8 @@ public:
private:
const QPixmap m_refreshIcon;
const QPixmap m_folderIcon;
const QPixmap m_pauseIcon;
const QPixmap m_resumeIcon;
};
}

View File

@ -39,11 +39,13 @@ void DirView::mouseReleaseEvent(QMouseEvent *event)
if(!clickedIndex.parent().isValid()) {
// open/scan dir buttons
const QRect itemRect(visualRect(clickedIndex));
if(pos.x() > itemRect.right() - 34) {
if(pos.x() > itemRect.right() - 17) {
emit openDir(*dir);
} else {
if(pos.x() > itemRect.right() - 58) {
if(pos.x() < itemRect.right() - 34) {
emit pauseResumeDir(*dir);
} else if(pos.x() < itemRect.right() - 17) {
emit scanDir(*dir);
} else {
emit openDir(*dir);
}
}
} else if(clickedIndex.row() == 7 && !dir->errors.empty()) {

View File

@ -18,6 +18,7 @@ public:
Q_SIGNALS:
void openDir(const Data::SyncthingDir &dir);
void scanDir(const Data::SyncthingDir &dir);
void pauseResumeDir(const Data::SyncthingDir &dir);
protected:
void mouseReleaseEvent(QMouseEvent *event);

View File

@ -135,6 +135,7 @@ TrayWidget::TrayWidget(TrayMenu *parent) :
connect(&m_connection, &SyncthingConnection::newNotification, this, &TrayWidget::handleNewNotification);
connect(m_ui->dirsTreeView, &DirView::openDir, this, &TrayWidget::openDir);
connect(m_ui->dirsTreeView, &DirView::scanDir, this, &TrayWidget::scanDir);
connect(m_ui->dirsTreeView, &DirView::pauseResumeDir, this, &TrayWidget::pauseResumeDir);
connect(m_ui->devsTreeView, &DevView::pauseResumeDev, this, &TrayWidget::pauseResumeDev);
connect(m_ui->downloadsTreeView, &DownloadView::openDir, this, &TrayWidget::openDir);
connect(m_ui->downloadsTreeView, &DownloadView::openItemDir, this, &TrayWidget::openItemDir);
@ -452,6 +453,15 @@ void TrayWidget::pauseResumeDev(const SyncthingDev &dev)
}
}
void TrayWidget::pauseResumeDir(const SyncthingDir &dir)
{
if(dir.paused) {
m_connection.resumeDirectories(QStringList(dir.id));
} else {
m_connection.pauseDirectories(QStringList(dir.id));
}
}
void TrayWidget::changeStatus()
{
switch(m_connection.status()) {

View File

@ -69,6 +69,7 @@ private slots:
void openItemDir(const Data::SyncthingItemDownloadProgress &item);
void scanDir(const Data::SyncthingDir &dir);
void pauseResumeDev(const Data::SyncthingDev &dev);
void pauseResumeDir(const Data::SyncthingDir &dir);
void changeStatus();
void updateTraffic();
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD