quarkai/setting/themewidget-org.cpp

210 lines
7.1 KiB
C++

/*
* Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd.
*
* Authors:
* Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "themewidget.h"
#include <QStandardItemModel>
#include <QListWidgetItem>
#include <QLabel>
#include <QDebug>
#include <QGridLayout>
#include "../dbusproxy/youkersessiondbus.h"
ThemeWidget::ThemeWidget(QWidget *parent, SessionDispatcher *proxy) :
QWidget(parent),
sessionproxy(proxy)
{
//创建QListWidget部件
list_widget = new QListWidget(this);
list_widget->setFocusPolicy(Qt::NoFocus);
//设置QListWidget中的单元项的图片大小
list_widget->setIconSize(QSize(106, 106));
list_widget->setResizeMode(QListView::Adjust);
//设置QListWidget的显示模式
list_widget->setViewMode(QListView::IconMode);
//设置QListWidget中的单元项不可被拖动
list_widget->setMovement(QListView::Static);
//设置QListWidget中的单元项的间距
list_widget->setSpacing(26);
// QPalette palette1;
// palette1.setBrush(QPalette::Normal, QPalette::Highlight, Qt::black);
// palette1.setBrush(QPalette::Inactive, QPalette::Highlight, Qt::black);
// list_widget->setPalette(palette1);
dataOK = false;
current_index = 0;
initIndex = 0;
using_label = new QLabel(list_widget);
using_label->setFixedSize(20, 20);
using_label->setAutoFillBackground(true);
QPalette palette;
// palette.setBrush(using_label->backgroundRole(), QBrush(QPixmap("://res/using.png")));
palette.setBrush(QPalette::Background, QBrush(QPixmap("://res/checkbox-press.png")));
using_label->setPalette(palette);
using_label->show();
// using_label->move(26, 26);
// QHBoxLayout *layout = new QHBoxLayout();
// layout->addWidget(list_widget);
// setLayout(layout);
QGridLayout *layout = new QGridLayout();
layout->addWidget(list_widget);
setLayout(layout);
}
bool ThemeWidget::getStatus()
{
return this->dataOK;
}
void ThemeWidget::initData() {
QString current_theme = sessionproxy->get_theme_qt();
/*QStringList */syslist = sessionproxy->get_themes_qt();
QList<QString>::Iterator it = syslist.begin(), itend = syslist.end();
initIndex = 0;
for(;it != itend; it++,initIndex++)
{
if(*it == current_theme)
break;
}
for(int i = 0; i<syslist.length(); ++i)
{
QString strPath=QString(":/gtk/res/theme/" + syslist[i] + ".png");
QPixmap pixmap(strPath);
if(pixmap.isNull())
{
pixmap = QPixmap(":/gtk/res/theme/disappear.png");
}
//伸缩106*106
QListWidgetItem *pItem = new QListWidgetItem(QIcon(pixmap.scaled(QSize(106,106))), tr("%1").arg(syslist[i]));
pItem->setSizeHint(QSize(130,130));
// pItem->setFlags(Qt::ItemIsSelectable);
// pItem->setBackgroundColor(QColor(0, 0, 255, 127));
// pItem->setTextColor(QColor(0, 0, 255, 127));//0629
list_widget->insertItem(i, pItem);
// QListWidgetItem *pItem = new QListWidgetItem(QIcon(pixmap.scaled(QSize(106,106))), tr("%1").arg(syslist[i]), list_widget);
// QWidget *wContainer = new QWidget(list_widget);
//// wContainer->setStyleSheet("QWidget{background:transparent url(://res/menu-big-hover.png);}");
// wContainer->resize(130, 130);
// QLabel *label = new QLabel();
// label->setStyleSheet("QLabel{background-image:url('://res/menu-big-hover.png')}");
// QHBoxLayout *hLayout = new QHBoxLayout(wContainer);
// hLayout->addWidget(label);
// list_widget->setItemWidget(pItem,wContainer);
}
//set using logo
QListWidgetItem *cur_item = list_widget->item(initIndex);
this->initCurrentTheme(cur_item);
dataOK = true;
this->initConnect();
}
ThemeWidget::~ThemeWidget()
{
}
void ThemeWidget::initConnect() {
connect(list_widget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(onItemClicked(QListWidgetItem*)));
connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(themewidget_notify_string(QString, QString)));
}
void ThemeWidget::themewidget_notify_string(QString key, QString value)
{
if (key == "gtk-theme")
{
QList<QString>::Iterator it = syslist.begin(), itend = syslist.end();
int index = -1;
bool exist = false;
for(;it != itend; it++)
{
++index;
if(*it == value) {
exist = true;
break;
}
}
if(exist)
{
exist = false;
QListWidgetItem *cur_item = list_widget->item(index);
this->initCurrentTheme(cur_item);
}
}
}
void ThemeWidget::initCurrentTheme(QListWidgetItem *init_item)
{
int nRowIndex = list_widget->row(init_item);
QRect rect = list_widget->visualItemRect(init_item);
// QPoint p = rect.topLeft();
// using_label->move(p.x(), p.y());
QPoint p = rect.bottomRight();
using_label->move(p.x()-20, p.y()-40);
// using_label->move(p.x(), p.y());
//reset current item status
QListWidgetItem *pre_item = list_widget->item(current_index);
// pre_item->setTextColor(QColor(0, 0, 255, 127));//0629
pre_item->setTextColor(QColor("4f4f4f"));
current_index = nRowIndex;
init_item->setTextColor(QColor("4f4f4f"));
}
void ThemeWidget::onItemClicked(QListWidgetItem *selected_item)
{
if(!selected_item)
{
return;
}
sessionproxy->set_theme_qt(selected_item->text());
int nRowIndex = list_widget->row(selected_item);
QRect rect = list_widget->visualItemRect(selected_item);
// QPoint p = rect.topLeft();
QPoint p = rect.bottomRight();
using_label->move(p.x()-20, p.y()-40);
// p.setX(p.x() + 58);
// p.setY(p.y() + 29);
// using_label->move(p.x(), p.y());
//reset current item status
QListWidgetItem *pre_item = list_widget->item(current_index);
// pre_item->setTextColor(QColor(0, 0, 255, 127));
pre_item->setTextColor(QColor("4f4f4f"));
pre_item->setBackground(Qt::white);
current_index = nRowIndex;
// item->setBackgroundColor(QColor(0, 0, 255, 127));
selected_item->setTextColor(QColor("4f4f4f"));
// selected_item->setSizeHint(QSize(130,130));
}
void ThemeWidget::paintEvent(QPaintEvent *)
{
//kobe: if the scrollbar move, the using_label should move the the select item
QListWidgetItem *select_item = list_widget->item(current_index);
QRect rect = list_widget->visualItemRect(select_item);
// QPoint p = rect.topLeft();
// using_label->move(p.x(), p.y());
QPoint p = rect.bottomRight();
using_label->move(p.x()-20, p.y()-40);
}