/*
* 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 .
*/
#include "menuwidget.h"
#include
#include
#include
#include
#include
#include
#include
MenuWidget::MenuWidget(QWidget *parent, QString cur_desktop) :
SettingModulePage(parent),desktop(cur_desktop)
{
size_label = new QLabel();
size_value_label = new QLabel();
hide_label = new QLabel();
icon_label = new QLabel();
transparency_label = new QLabel();
background_label = new QLabel();
size_top_label = new QLabel();
hide_top_label = new QLabel();
size_top_value_label = new QLabel();
size_bottom_label = new QLabel();
hide_bottom_label = new QLabel();
size_bottom_value_label = new QLabel();
position_label = new QLabel();
size_slider = new QSlider(Qt::Horizontal);
size_slider->setFocusPolicy(Qt::NoFocus);
size_slider->setRange(32, 64);
size_slider->setSingleStep(1);
hide_switcher = new KylinSwitcher();
icon_switcher = new KylinSwitcher();
transparency_slider = new QDoubleSpinBox();
transparency_slider->setButtonSymbols(QAbstractSpinBox::PlusMinus);
transparency_slider->setSingleStep(0.1);
transparency_slider->setMinimum(0.0);
transparency_slider->setMaximum(1.0);
backgound_combo = new QComboBox();
size_top_slider = new QSlider(Qt::Horizontal);
size_top_slider->setFocusPolicy(Qt::NoFocus);
size_top_slider->setRange(24, 180);
size_top_slider->setSingleStep(1);
size_bottom_slider = new QSlider(Qt::Horizontal);
size_bottom_slider->setFocusPolicy(Qt::NoFocus);
size_bottom_slider->setRange(24, 180);
size_bottom_slider->setSingleStep(1);
hide_top_switcher = new KylinSwitcher();
hide_bottom_switcher = new KylinSwitcher();
position_combo = new QComboBox();
if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") {
size_label->hide();
size_value_label->hide();
hide_label->hide();
icon_label->hide();
transparency_label->hide();
background_label->hide();
position_label->hide();
size_slider->hide();
hide_switcher->hide();
icon_switcher->hide();
transparency_slider->hide();
backgound_combo->hide();
position_combo->hide();
}
else
{
size_top_label->hide();
hide_top_label->hide();
size_top_value_label->hide();
size_bottom_label->hide();
hide_bottom_label->hide();
size_bottom_value_label->hide();
size_top_slider->hide();
size_bottom_slider->hide();
hide_top_switcher->hide();
hide_bottom_switcher->hide();
}
size_label->setFixedWidth(180);
hide_label->setFixedWidth(180);
icon_label->setFixedWidth(180);
transparency_label->setFixedWidth(180);
background_label->setFixedWidth(180);
size_top_label->setFixedWidth(180);
hide_top_label->setFixedWidth(180);
size_bottom_label->setFixedWidth(180);
hide_bottom_label->setFixedWidth(180);
position_label->setFixedWidth(180);
QHBoxLayout *layout1 = new QHBoxLayout();
layout1->setSpacing(10);
layout1->addWidget(size_label);
layout1->addWidget(size_slider);
layout1->addWidget(size_value_label);
layout1->addStretch();
QHBoxLayout *layout2 = new QHBoxLayout();
layout2->setSpacing(10);
layout2->addWidget(hide_label);
layout2->addWidget(hide_switcher);
layout2->addStretch();
QHBoxLayout *layout3 = new QHBoxLayout();
layout3->setSpacing(10);
layout3->addWidget(icon_label);
layout3->addWidget(icon_switcher);
layout3->addStretch();
QHBoxLayout *layout4 = new QHBoxLayout();
layout4->setSpacing(10);
layout4->addWidget(transparency_label);
layout4->addWidget(transparency_slider);
layout4->addStretch();
QHBoxLayout *layout5 = new QHBoxLayout();
layout5->setSpacing(10);
layout5->addWidget(background_label);
layout5->addWidget(backgound_combo);
layout5->addStretch();
QHBoxLayout *layout6 = new QHBoxLayout();
layout6->setSpacing(10);
layout6->addWidget(size_top_label);
layout6->addWidget(size_top_slider);
layout6->addWidget(size_top_value_label);
layout6->addStretch();
QHBoxLayout *layout7 = new QHBoxLayout();
layout7->setSpacing(10);
layout7->addWidget(hide_top_label);
layout7->addWidget(hide_top_switcher);
layout7->addStretch();
QHBoxLayout *layout8 = new QHBoxLayout();
layout8->setSpacing(10);
layout8->addWidget(size_bottom_label);
layout8->addWidget(size_bottom_slider);
layout8->addWidget(size_bottom_value_label);
layout8->addStretch();
QHBoxLayout *layout9 = new QHBoxLayout();
layout9->setSpacing(10);
layout9->addWidget(hide_bottom_label);
layout9->addWidget(hide_bottom_switcher);
layout9->addStretch();
QHBoxLayout *layout10 = new QHBoxLayout();
layout10->setSpacing(10);
layout10->addWidget(position_label);
layout10->addWidget(position_combo);
layout10->addStretch();
QVBoxLayout *layout = new QVBoxLayout();
layout->addLayout(layout1);
layout->addLayout(layout2);
layout->addLayout(layout10);
layout->addLayout(layout3);
layout->addLayout(layout4);
layout->addLayout(layout5);
layout->addLayout(layout6);
layout->addLayout(layout7);
layout->addLayout(layout8);
layout->addLayout(layout9);
layout->addStretch();
setLayout(layout);
layout->setSpacing(10);
layout->setContentsMargins(20, 20, 0, 0);
this->setLanguage();
}
MenuWidget::~MenuWidget()
{
if (size_label != NULL) {
delete size_label;
size_label = NULL;
}
if (size_value_label != NULL) {
delete size_value_label;
size_value_label = NULL;
}
if (hide_label != NULL) {
delete hide_label;
hide_label = NULL;
}
if (icon_label != NULL) {
delete icon_label;
icon_label = NULL;
}
if (transparency_label != NULL) {
delete transparency_label;
transparency_label = NULL;
}
if (background_label != NULL) {
delete background_label;
background_label = NULL;
}
if (size_top_label != NULL) {
delete size_top_label;
size_top_label = NULL;
}
if (hide_top_label != NULL) {
delete hide_top_label;
hide_top_label = NULL;
}
if (position_label != NULL) {
delete position_label;
position_label = NULL;
}
if (size_top_value_label != NULL) {
delete size_top_value_label;
size_top_value_label = NULL;
}
if (size_bottom_label != NULL) {
delete size_bottom_label;
size_bottom_label = NULL;
}
if (hide_bottom_label != NULL) {
delete hide_bottom_label;
hide_bottom_label = NULL;
}
if (size_bottom_value_label != NULL) {
delete size_bottom_value_label;
size_bottom_value_label = NULL;
}
if (size_slider != NULL) {
delete size_slider;
size_slider = NULL;
}
if (hide_switcher != NULL) {
delete hide_switcher;
hide_switcher = NULL;
}
if (icon_switcher != NULL) {
delete icon_switcher;
icon_switcher = NULL;
}
if (transparency_slider != NULL) {
delete transparency_slider;
transparency_slider = NULL;
}
if (backgound_combo != NULL) {
delete backgound_combo;
backgound_combo = NULL;
}
if (size_top_slider != NULL) {
delete size_top_slider;
size_top_slider = NULL;
}
if (size_bottom_slider != NULL) {
delete size_bottom_slider;
size_bottom_slider = NULL;
}
if (hide_top_switcher != NULL) {
delete hide_top_switcher;
hide_top_switcher = NULL;
}
if (hide_bottom_switcher != NULL) {
delete hide_bottom_switcher;
hide_bottom_switcher = NULL;
}
if (position_combo != NULL) {
delete position_combo;
position_combo = NULL;
}
}
QString MenuWidget::settingModuleName()
{
return "MenuPage";
}
void MenuWidget::setLanguage() {
size_label->setText(tr("Launcher icon size") + ":");
hide_label->setText(tr("Launcher hide mode") + ":");
icon_label->setText(tr("Display desktop icon") + ":");
transparency_label->setText(tr("Launcher Transparency") + ":");
background_label->setText(tr("Icon Background") + ":");
size_top_label->setText(tr("Top panel icon size") + ":");
hide_top_label->setText(tr("Top panel auto hide") + ":");
size_bottom_label->setText(tr("Bottom panel icon size") + ":");
hide_bottom_label->setText(tr("Bottom panel auto hide") + ":");
position_label->setText(tr("Launcher position") + ":");
}
void MenuWidget::initSettingData()
{
if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") {
emit this->requestMateOrUnityMenuData(true);
}
else {
emit this->requestMateOrUnityMenuData(false);
}
this->initConnect();
}
void MenuWidget::onSendMatePanelIconValue(int topIconSize, int bottomIconSize, bool topIconHide, bool bottomIconHide)
{
size_top_slider->setValue(topIconSize);
size_top_value_label->setText(QString::number(topIconSize));
size_bottom_slider->setValue(bottomIconSize);
size_bottom_value_label->setText(QString::number(bottomIconSize));
hide_top_switcher->switchedOn = topIconHide;
hide_bottom_switcher->switchedOn = bottomIconHide;
}
void MenuWidget::onSendUnityIconValue(int iconSize, bool iconHide, bool desktopIconShowed, double launcherTransparency, int iconColourIndex, const QStringList &colourlist)
{
size_slider->setValue(iconSize);
size_value_label->setText(QString::number(iconSize));
hide_switcher->switchedOn = iconHide;
icon_switcher->switchedOn = desktopIconShowed;
transparency_slider->setValue(launcherTransparency);
QString current_icon_colouring = "";
if (iconColourIndex == 0) {
current_icon_colouring = "all programs";
}
else if (iconColourIndex == 1) {
current_icon_colouring = "only run app";
}
else if (iconColourIndex == 2) {
current_icon_colouring = "no coloring";
}
else if (iconColourIndex == 3) {
current_icon_colouring = "edge coloring";
}
else if (iconColourIndex == 4) {
current_icon_colouring = "each workspace alternating coloring";
}
m_colourlist.clear();
m_colourlist = colourlist;
backgound_combo->clearEditText();
backgound_combo->addItems(m_colourlist);
QList::Iterator it = m_colourlist.begin(), itend = m_colourlist.end();
int initIndex = 0;
for(;it != itend; it++,initIndex++)
{
if(*it == current_icon_colouring)
break;
}
backgound_combo->setCurrentIndex(initIndex);
}
void MenuWidget::onSendUnityLauncherPosition(const QString ¤t_position, const QStringList &positionlist)
{
m_positionlist.clear();
m_positionlist = positionlist;
position_combo->clear();
position_combo->clearEditText();
position_combo->addItems(m_positionlist);
QList::Iterator it2 = m_positionlist.begin(), itend2 = m_positionlist.end();
int initIndex = 0;
for(;it2 != itend2; it2++,initIndex++)
{
if(*it2 == current_position)
break;
}
position_combo->setCurrentIndex(initIndex);
}
void MenuWidget::initConnect() {
// connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget()));
connect(size_slider, SIGNAL(valueChanged(int)), this, SLOT(setIconSizeValue(int)));
connect(hide_switcher, SIGNAL(clicked()), this, SLOT(setAutoHide()));
connect(icon_switcher, SIGNAL(clicked()), this, SLOT(setDisplayDesktopIcon()));
connect(transparency_slider, SIGNAL(valueChanged(double)), this, SLOT(setTransparencyValue(double)));
connect(backgound_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setIconColouring(QString)));
connect(position_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setLauncherPosition(QString)));
connect(size_top_slider, SIGNAL(valueChanged(int)), this, SLOT(setTopIconSizeValue(int)));
connect(size_bottom_slider, SIGNAL(valueChanged(int)), this, SLOT(setBottomIconSizeValue(int)));
connect(hide_top_switcher, SIGNAL(clicked()), this, SLOT(setTopAutoHide()));
connect(hide_bottom_switcher, SIGNAL(clicked()), this, SLOT(setBottomAutoHide()));
// connect(sessionproxy, SIGNAL(bool_value_notify(QString, bool)), this, SLOT(launcherwidget_notify_bool(QString, bool)));
// connect(sessionproxy, SIGNAL(double_value_notify(QString, double)), this, SLOT(launcherwidget_notify_double(QString, double)));
// connect(sessionproxy, SIGNAL(int_value_notify(QString, int)), this, SLOT(launcherwidget_notify_int(QString, int)));
// connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(launcherwidget_notify_string(QString, QString)));
}
void MenuWidget::launcherwidget_notify_double(QString key, double value)
{
if (key == "launcher-opacity") {
transparency_slider->setValue(value);
}
}
void MenuWidget::launcherwidget_notify_bool(QString key, bool value)
{
if (key == "auto-hide-top") {
hide_top_switcher->switchedOn = value;
}
else if (key == "auto-hide-bottom") {
hide_bottom_switcher->switchedOn = value;
}
}
void MenuWidget::launcherwidget_notify_int(QString key, int value)
{
if (key == "icon-size") {
size_slider->setValue(value);
size_value_label->setText(QString::number(value));
}
if (key == "launcher-hide-mode") {
if (value == 0)
hide_switcher->switchedOn = false;
else if (value == 1)
hide_switcher->switchedOn = true;
}
if (key == "backlight-mode") {
QString current_icon_colouring = "";
if (value == 0) {
current_icon_colouring = "all programs";
}
else if (value == 1) {
current_icon_colouring = "only run app";
}
else if (value == 2) {
current_icon_colouring = "no coloring";
}
else if (value == 3) {
current_icon_colouring = "edge coloring";
}
else if (value == 4) {
current_icon_colouring = "each workspace alternating coloring";
}
QList::Iterator it = m_colourlist.begin(), itend = m_colourlist.end();
int index = -1;
bool exist = false;
for(;it != itend; it++)
{
++index;
if(*it == current_icon_colouring) {
exist = true;
break;
}
}
if (exist) {
exist = false;
backgound_combo->setCurrentIndex(index);
}
else
backgound_combo->setCurrentIndex(-1);
}
if (key == "size-top") {
size_top_slider->setValue(value);
size_top_value_label->setText(QString::number(value));
}
else if (key == "size-bottom") {
size_bottom_slider->setValue(value);
size_bottom_value_label->setText(QString::number(value));
}
}
void MenuWidget::launcherwidget_notify_string(QString key, QString value)
{
if (key == "launcher-position") {
QList::Iterator it = m_positionlist.begin(), itend = m_positionlist.end();
int index = -1;
bool exist = false;
for(;it != itend; it++)
{
++index;
if(*it == value) {
exist = true;
break;
}
}
if (exist) {
exist = false;
position_combo->setCurrentIndex(index);
}
else
position_combo->setCurrentIndex(-1);
}
}
void MenuWidget::setIconSizeValue(int value) {
size_value_label->setText(QString::number(value));
emit resetIconSizeValue(value);
}
void MenuWidget::setTransparencyValue(double value)
{
emit resetTransparencyValue(value);
}
void MenuWidget::setIconColouring(QString selectColour) {
if (selectColour == "all programs") {
emit this->resetIconColouring(0);
}
else if (selectColour == "only run app") {
emit this->resetIconColouring(1);
}
else if (selectColour == "no coloring") {
emit this->resetIconColouring(2);
}
else if (selectColour == "edge coloring") {
emit this->resetIconColouring(3);
}
else if (selectColour == "each workspace alternating coloring") {
emit this->resetIconColouring(4);
}
}
void MenuWidget::setAutoHide() {
emit this->resetAutoHide(hide_switcher->switchedOn);
}
void MenuWidget::setDisplayDesktopIcon() {
emit this->resetDisplayDesktopIcon(icon_switcher->switchedOn);
}
void MenuWidget::setTopIconSizeValue(int value){
size_top_value_label->setText(QString::number(value));
emit this->resetTopIconSizeValue(value);
}
void MenuWidget::setBottomIconSizeValue(int value){
size_bottom_value_label->setText(QString::number(value));
emit this->resetBottomIconSizeValue(value);
}
void MenuWidget::setTopAutoHide() {
emit this->resetTopAutoHide(hide_top_switcher->switchedOn);
}
void MenuWidget::setBottomAutoHide() {
emit this->resetBottomAutoHide(hide_bottom_switcher->switchedOn);
}
void MenuWidget::setLauncherPosition(QString position) {
emit this->resetLauncherPosition(position);
}