yhkylin-backup-tools/kybackup/leftsiderbarwidget.cpp

165 lines
6.0 KiB
C++
Raw Permalink Normal View History

2021-09-16 16:05:46 +08:00
#include "leftsiderbarwidget.h"
#include <QDebug>
#include <QStyleOption>
#include <QPainter>
#include "../common/mydefine.h"
#include "component/myiconbutton.h"
#include "component/doubleclickwidget.h"
2022-02-15 16:51:03 +08:00
#define PERSONALSIE_SCHEMA "org.ukui.control-center.personalise"
#define PERSONALSIE_TRAN_KEY "transparency"
#define CONTAIN_PERSONALSIE_TRAN_KEY "transparency"
2021-09-16 16:05:46 +08:00
LeftsiderbarWidget::LeftsiderbarWidget(QWidget *parent, StartMode mode)
2022-05-06 17:58:37 +08:00
: QWidget(parent),
m_navigationBar(nullptr)
2021-09-16 16:05:46 +08:00
{
2022-02-16 17:47:06 +08:00
m_parent = parent;
2022-04-12 11:27:37 +08:00
m_mode = mode;
2023-03-18 20:28:52 +08:00
initUi();
2022-04-12 11:27:37 +08:00
m_personalQgsettings = nullptr;
if (QGSettings::isSchemaInstalled(PERSONALSIE_SCHEMA)) {
m_personalQgsettings = new QGSettings(PERSONALSIE_SCHEMA, QByteArray(), this);
m_transparency = m_personalQgsettings->get(PERSONALSIE_TRAN_KEY).toDouble();
connect(m_personalQgsettings,&QGSettings::changed,this,[=](QString changedKey) { //监听透明度变化
if (changedKey == CONTAIN_PERSONALSIE_TRAN_KEY) {
m_transparency = m_personalQgsettings->get(PERSONALSIE_TRAN_KEY).toDouble();
2023-03-18 20:28:52 +08:00
// 透明度设置转移到paintEvent中
2022-04-12 11:27:37 +08:00
// this->setWindowOpacity(m_transparency);
this->repaint();
}
});
}
}
void LeftsiderbarWidget::initUi()
{
2022-03-02 11:24:54 +08:00
m_leftSideBarVLayout = new QVBoxLayout;
m_leftSideBarVLayout->setObjectName("m_leftSideBarVLayout");
2022-04-12 11:27:37 +08:00
m_leftSideBarVLayout->setContentsMargins(0,0,0,0);
2021-09-16 16:05:46 +08:00
m_leftSideBarVLayout->setSpacing(5);
2022-03-02 11:24:54 +08:00
setLayout(m_leftSideBarVLayout);
2021-09-16 16:05:46 +08:00
DoubleClickWidget *titleWidget = new DoubleClickWidget(this);
2021-09-16 16:05:46 +08:00
m_leftSideBarVLayout->addWidget(titleWidget);
connect(titleWidget, &DoubleClickWidget::doubleClicked, this, &LeftsiderbarWidget::doubleClicked);
2021-09-16 16:05:46 +08:00
2022-03-02 11:24:54 +08:00
QHBoxLayout * titleLayout = new QHBoxLayout;
m_mTitleIcon = new PixmapLabel;
m_mTitleIcon->setFixedSize(24, 24);
m_mTitleIcon->setThemeIconSchema(THEME_YHKYLIN_BACKUP_TOOLS, ":/images/yhkylin-backup-tools.png");
2022-03-02 11:24:54 +08:00
m_titleLabel = new MyLabel;
2023-03-18 20:28:52 +08:00
// m_titleLabel->setFixedWidth(this->width() - 40);
m_titleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
m_titleLabel->setElidedText(tr("Backup & Restore"));
if (m_titleLabel->text() != tr("Backup & Restore"))
m_titleLabel->setToolTip(tr("Backup & Restore"));
2021-09-16 16:05:46 +08:00
titleWidget->setLayout(titleLayout);
titleLayout->addWidget(m_mTitleIcon);
titleLayout->addWidget(m_titleLabel);
2023-03-18 20:28:52 +08:00
titleLayout->setAlignment(Qt::AlignLeft);
2021-09-16 16:05:46 +08:00
m_leftSideBarVLayout->addSpacing(10);
// 功能列表
2023-03-17 17:59:26 +08:00
if (StartMode::casper == m_mode) {
2023-03-18 20:28:52 +08:00
m_deplayFuncs << FuncTypeConverter::FunType::RESTORE_SYSTEM;
2023-03-17 17:59:26 +08:00
} else if (StartMode::stdUser == m_mode) {
2023-03-18 20:28:52 +08:00
m_deplayFuncs << FuncTypeConverter::FunType::BACKUP_DATA
<< FuncTypeConverter::FunType::RESTORE_DATA
<< FuncTypeConverter::FunType::OPERATION_LOG;
2021-11-17 13:23:38 +08:00
} else {
2023-03-18 20:28:52 +08:00
m_deplayFuncs << FuncTypeConverter::FunType::BACKUP_SYSTEM
<< FuncTypeConverter::FunType::RESTORE_SYSTEM
<< FuncTypeConverter::FunType::BACKUP_DATA
<< FuncTypeConverter::FunType::RESTORE_DATA
<< FuncTypeConverter::FunType::OPERATION_LOG
<< FuncTypeConverter::FunType::GHOST_IMAGE;
2021-11-17 13:23:38 +08:00
}
2022-05-06 17:58:37 +08:00
m_idxToFunctype.clear();
2023-03-18 20:28:52 +08:00
m_functypeToIdx.clear();
2022-05-06 17:58:37 +08:00
m_navigationBar = new KNavigationBar(this);
2022-10-21 15:17:26 +08:00
m_navigationBar->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
2021-09-16 16:05:46 +08:00
FuncTypeConverter kvConverter;
2023-03-18 20:28:52 +08:00
for (int index = 0; index < m_deplayFuncs.size(); ++index) {
int funcType = m_deplayFuncs.at(index);
2021-11-17 13:23:38 +08:00
2022-05-06 17:58:37 +08:00
QStandardItem * item = new QStandardItem;
2023-03-18 20:28:52 +08:00
QString themeIconName = kvConverter.funcTypeToThemeIconName(funcType);
QString mnamei18nString = kvConverter.funcTypeToFuncName(funcType); //设置界面显示文本
2021-10-13 16:31:58 +08:00
QString defaultIconName(":/symbos/");
defaultIconName += themeIconName;
2022-05-06 17:58:37 +08:00
QIcon icon = QIcon::fromTheme(themeIconName, QIcon(defaultIconName));
item->setIcon(icon);
item->setText(mnamei18nString);
item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
// item->setToolTip(mnamei18nString);
2022-05-06 17:58:37 +08:00
item->setCheckable(true);
m_navigationBar->addItem(item);
2023-03-18 20:28:52 +08:00
m_idxToFunctype.insert(index, funcType);
m_functypeToIdx.insert(funcType, index);
2021-09-16 16:05:46 +08:00
}
2022-05-06 17:58:37 +08:00
connect(m_navigationBar->listview(), &QListView::clicked, [=](const QModelIndex &index) {
int row = index.row();
2023-03-18 20:28:52 +08:00
int type = this->m_idxToFunctype.value(row, -1);
2022-05-12 16:58:35 +08:00
emit this->selected(type);
2022-05-06 17:58:37 +08:00
});
2021-09-16 16:05:46 +08:00
2022-05-06 17:58:37 +08:00
QHBoxLayout * hbarLayout = new QHBoxLayout;
hbarLayout->setContentsMargins(10, 0, 10, 0);
hbarLayout->addWidget(m_navigationBar);
m_leftSideBarVLayout->addLayout(hbarLayout);
2021-09-16 16:05:46 +08:00
m_leftSideBarVLayout->addSpacing(8);
2022-11-02 14:30:19 +08:00
m_leftSideBarVLayout->setAlignment(Qt::AlignTop);
2021-09-16 16:05:46 +08:00
}
LeftsiderbarWidget::~LeftsiderbarWidget()
{
}
2023-03-18 20:28:52 +08:00
void LeftsiderbarWidget::setBusy(bool isBusy)
2022-02-22 15:49:57 +08:00
{
2023-03-18 20:28:52 +08:00
bool enabled = !isBusy;
this->m_navigationBar->setEnabled(enabled);
}
2022-02-22 15:49:57 +08:00
2023-03-18 20:28:52 +08:00
void LeftsiderbarWidget::setCheckedFunc(int funcType)
{
int index = m_functypeToIdx.value(funcType, -1);
if (index > -1)
m_navigationBar->listview()->setCurrentIndex(m_navigationBar->model()->index(index, 0));
2022-02-22 15:49:57 +08:00
}
2021-09-16 16:05:46 +08:00
void LeftsiderbarWidget::paintEvent(QPaintEvent *event)
{
2021-09-23 11:21:58 +08:00
Q_UNUSED(event);
2022-02-16 17:47:06 +08:00
2021-09-16 16:05:46 +08:00
QStyleOption opt;
opt.init(this);
QPainter p(this);
p.setPen(Qt::NoPen);
2022-02-16 17:47:06 +08:00
QColor color = palette().color(QPalette::Window);
if (m_parent != nullptr) {
color = m_parent->palette().color(QPalette::Window);
}
2022-02-15 16:51:03 +08:00
color.setAlphaF(m_transparency);
2021-09-16 16:05:46 +08:00
QPalette pal(this->palette());
2022-02-15 16:51:03 +08:00
pal.setColor(QPalette::Window, QColor(color));
2021-09-16 16:05:46 +08:00
this->setPalette(pal);
2022-02-15 16:51:03 +08:00
QBrush brush = QBrush(color);
2021-09-16 16:05:46 +08:00
p.setBrush(brush);
p.drawRoundedRect(opt.rect,0,0);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
m_titleLabel->setElidedText(tr("Backup & Restore"));
if (m_titleLabel->text() != tr("Backup & Restore"))
m_titleLabel->setToolTip(tr("Backup & Restore"));
2021-09-16 16:05:46 +08:00
}