Allow pausing/resuming dirs in GUI
This commit is contained in:
parent
1f6555a718
commit
5101872532
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -17,6 +17,8 @@ public:
|
|||
private:
|
||||
const QPixmap m_refreshIcon;
|
||||
const QPixmap m_folderIcon;
|
||||
const QPixmap m_pauseIcon;
|
||||
const QPixmap m_resumeIcon;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue