#include "leftsiderbarwidget.h" #include #include #include #include "../common/mydefine.h" #include "component/myiconbutton.h" #include "globalbackupinfo.h" #include "gsettingswrapper.h" #define PERSONALSIE_SCHEMA "org.ukui.control-center.personalise" #define PERSONALSIE_TRAN_KEY "transparency" #define CONTAIN_PERSONALSIE_TRAN_KEY "transparency" LeftsiderbarWidget::LeftsiderbarWidget(QWidget *parent, StartMode mode) : QWidget(parent) { m_parent = parent; m_leftSideBarVLayout = new QVBoxLayout(); m_leftSideBarVLayout->setObjectName(QString::fromUtf8("m_leftSideBarVLayout")); m_leftSideBarVLayout->setContentsMargins(5,0,0,0); setLayout(m_leftSideBarVLayout); m_leftSideBarVLayout->setSpacing(5); QWidget *titleWidget = new QWidget(this); m_leftSideBarVLayout->addWidget(titleWidget); QHBoxLayout * titleLayout = new QHBoxLayout(); m_mTitleIcon = new QLabel(); m_titleLabel = new MyLabel(); m_titleLabel->setDeplayText(tr("Backup & Restore")); m_titleLabel->setToolTip(tr("Backup & Restore")); titleWidget->setLayout(titleLayout); titleLayout->addWidget(m_mTitleIcon); titleLayout->addWidget(m_titleLabel); m_mTitleIcon->setFixedSize(24, 24); QIcon titleIcon = QIcon::fromTheme(THEME_YHKYLIN_BACKUP_TOOLS); m_mTitleIcon->setPixmap(titleIcon.pixmap(titleIcon.actualSize(QSize(24, 24)))); g_GSettingWrapper.connectUkuiIconSchema(m_mTitleIcon); m_titleLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); m_leftSideBarVLayout->addSpacing(10); // 功能列表 int funcNum = FuncTypeConverter::FunType::TOTALMODULES; if (StartMode::livecd == mode) { m_deplayFuncs << "BACKUP_SYSTEM" << "RESTORE_SYSTEM"; } else if (StartMode::std_user == mode) { m_deplayFuncs << "BACKUP_DATA" << "RESTORE_DATA" << "OPERATION_LOG"; } else { m_deplayFuncs << "BACKUP_SYSTEM" << "RESTORE_SYSTEM" << "BACKUP_DATA" << "RESTORE_DATA" << "OPERATION_LOG" << "GHOST_IMAGE"; } m_funcGroup = new QButtonGroup(this); FuncTypeConverter kvConverter; for (int type = 0; type < funcNum; ++type) { QString mnameString = kvConverter.keycodeTokeystring(type); //设置TEXT if (!m_deplayFuncs.contains(mnameString)) continue ; QString themeIconName = kvConverter.keycodeToThemeIconString(type); QString mnamei18nString = kvConverter.keycodeTokeyi18nstring(type); //设置TEXT MyIconButton *funcButton = new MyIconButton(this); QString btnName = mnameString; funcButton->setObjectName(btnName); funcButton->setFixedSize(180, 40); funcButton->setDesplayText(mnamei18nString); QString defaultIconName(":/symbos/"); defaultIconName += themeIconName; defaultIconName += ".png"; funcButton->setThemeIcon(themeIconName, defaultIconName); funcButton->setToolTip(mnamei18nString); funcButton->setCheckable(true); connect(funcButton, &MyIconButton::clicked, [=](bool checked) { if (checked) emit this->selected(type); }); // 設置無邊框,跟隨背景色 funcButton->setFlat(true); // 設置了setStyleSheet,不能再跟隨主題,舍弃此种方式 // funcButton->setStyleSheet("QPushButton:hover{background-color: rgba(55,144,250,0.30);border-radius: 4px;}" // "QPushButton:checked{background-color: palette(highlight);border-radius: 4px;}" // "QPushButton:!checked{border: none;}"); m_funcGroup->addButton(funcButton, type); m_leftSideBarVLayout->addWidget(funcButton); } connect(GlobelBackupInfo::inst().getGlobalSignals(), &GlobalSignals::busy, this, [=](bool isBusy) { QList list = this->m_funcGroup->buttons(); bool enabled = !isBusy; for (QAbstractButton * button : list) { button->setEnabled(enabled); } }); m_leftSideBarVLayout->addSpacing(8); m_leftSideBarVLayout->addStretch(); 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(); // this->setWindowOpacity(m_transparency); this->repaint(); } }); } } LeftsiderbarWidget::~LeftsiderbarWidget() { } void LeftsiderbarWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QStyleOption opt; opt.init(this); QPainter p(this); p.setPen(Qt::NoPen); QColor color = palette().color(QPalette::Window); if (m_parent != nullptr) { color = m_parent->palette().color(QPalette::Window); } color.setAlphaF(m_transparency); QPalette pal(this->palette()); pal.setColor(QPalette::Window, QColor(color)); this->setPalette(pal); QBrush brush = QBrush(color); p.setBrush(brush); p.drawRoundedRect(opt.rect,0,0); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); }