quarkai/setting/animationwidget.cpp

366 lines
13 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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 "animationwidget.h"
#include <QDebug>
#include "../component/agentlistitem.h"
#include "../dbusproxy/youkersystemdbus.h"
#include "../mainui/mainwindow.h"
#include <QStringList>
#include <QFileDialog>
#include "../component/tipdialog.h"
AnimationWidget::AnimationWidget(QWidget *parent, SystemDispatcher *proxy, MainWindow *window) :
QWidget(parent),
systemproxy(proxy), parentWindow(window)
{
dataOK = false;
title_label = new QLabel();
left_widget = new QWidget();
left_widget->setFixedWidth(240);
right_widget = new QWidget();
right_widget->setFixedWidth(500);
// title_label = new QLabel();
// title_label->setFixedHeight(20);
// description_label = new QLabel();
// description_label->setFixedHeight(20);
// back_btn = new QPushButton();
// QVBoxLayout *v_layout = new QVBoxLayout();
// v_layout->addWidget(title_label);
// v_layout->addWidget(description_label);
// v_layout->setMargin(0);
// v_layout->setSpacing(1);
// QHBoxLayout *h_layout = new QHBoxLayout();
// h_layout->addWidget(back_btn);
// h_layout->addLayout(v_layout);
// h_layout->addStretch();
// top_widget->setLayout(h_layout);
// top_widget->setFixedSize(900,60);
// h_layout->setSpacing(20);
// h_layout->setContentsMargins(20, 0, 0, 0);
custom_btn = new QPushButton();
custom_btn->setFixedSize(120, 32);
custom_btn->setObjectName("blackButton");
custom_btn->setFocusPolicy(Qt::NoFocus);
ok_btn = new QPushButton();
ok_btn->setFixedSize(91, 25);
ok_btn->setObjectName("blackButton");
ok_btn->setFocusPolicy(Qt::NoFocus);
view_widget = new QWidget();
view_widget->setFixedSize(205, 190);
view_widget->setWindowFlags(Qt::FramelessWindowHint);
view_widget->setAutoFillBackground(true);
QPalette palette;
// palette.setColor(QPalette::Background, QColor(192,253,123));
palette.setBrush(QPalette::Background, QBrush(QPixmap("://res/previewzone.png")));
view_widget->setPalette(palette);
show_widget = new QWidget();
show_widget->setFixedSize(172, 115);
// show_widget->setWindowFlags(Qt::FramelessWindowHint);
// show_widget->setAutoFillBackground(true);
// show_widget->setObjectName("transparentWidget");
QVBoxLayout *layout0 = new QVBoxLayout();
layout0->addWidget(show_widget);
layout0->addStretch();
layout0->setMargin(0);
layout0->setSpacing(0);
view_widget->setLayout(layout0);
view_widget->setContentsMargins(16, 16, 16, 0);
tip_label = new QLabel();
list_widget = new QListWidget();
list_widget->setObjectName("animationListWidget");
// QStringList names;
// for (int i = 1; i <= 30; ++i)
// names.append(tr("app %1").arg(i));
// list_widget->insertItems(0, names);
list_widget->setIconSize(QSize(16, 16));
list_widget->setResizeMode(QListView::Adjust);
// list_widget->setViewMode(QListView::IconMode);
list_widget->setMovement(QListView::Static);
list_widget->setSpacing(5);
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(title_label);
layout->addStretch();
layout->setMargin(0);
layout->setContentsMargins(20, 20, 0, 0);
QHBoxLayout *layout1 = new QHBoxLayout();
layout1->addStretch();
layout1->addWidget(view_widget, Qt::AlignHCenter);
layout1->addStretch();
QHBoxLayout *layout2 = new QHBoxLayout();
layout2->addStretch();
layout2->addWidget(custom_btn, Qt::AlignHCenter);
layout2->addStretch();
QVBoxLayout *layout3 = new QVBoxLayout();
layout3->addLayout(layout1);
layout3->addLayout(layout2);
layout3->addStretch();
layout3->setAlignment(Qt::AlignHCenter);
layout3->setSpacing(20);
left_widget->setLayout(layout3);
QHBoxLayout *layout4 = new QHBoxLayout();
layout4->addStretch();
layout4->addWidget(ok_btn);
QVBoxLayout *layout5 = new QVBoxLayout();
layout5->addWidget(tip_label);
layout5->addWidget(list_widget);
layout5->addLayout(layout4);
right_widget->setLayout(layout5);
// QHBoxLayout *layout6 = new QHBoxLayout();
// layout6->addWidget(left_widget);
// layout6->addWidget(right_widget);
// bottom_widget->setLayout(layout6);
// bottom_widget->setFixedWidth(850);
// splitter->addWidget(top_widget);
// splitter->addWidget(bottom_widget);
QHBoxLayout *widget_layout = new QHBoxLayout();
// main_layout->addWidget(splitter);
widget_layout->addWidget(left_widget);
widget_layout->addWidget(right_widget);
widget_layout->setSpacing(60);
widget_layout->setMargin(0);
widget_layout->setContentsMargins(0, 0, 0, 0);
QVBoxLayout *main_layout = new QVBoxLayout();
main_layout->addLayout(layout);
main_layout->addLayout(widget_layout);
main_layout->setSpacing(30);
main_layout->setMargin(0);
main_layout->setContentsMargins(0, 0, 0, 0);
setLayout(main_layout);
// this->initData();
this->setLanguage();
}
AnimationWidget::~AnimationWidget()
{
// if(title_label != NULL)
// {
// delete title_label;
// title_label = NULL;
// }
// if(back_btn != NULL)
// {
// delete back_btn;
// back_btn = NULL;
// }
}
void AnimationWidget::setLanguage() {
// title_label->setText(tr("Boot animation settings"));
// description_label->setText(tr("Click the \"Custom Picture\" button to select the picture you want to add, click the picture you want to set and push the \"OK\" button to complete."));
// back_btn->setText(tr("Back"));
title_label->setText(tr("Please select a picture as boot animation"));
custom_btn->setText(tr("Custom Picture"));
tip_label->setText(tr("Optional BootAnimation"));
ok_btn->setText(tr("OK"));
}
void AnimationWidget::initConnect() {
// connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget()));
connect(custom_btn, SIGNAL(clicked()), this, SLOT(selectCustomAnimation()));
connect(ok_btn, SIGNAL(clicked()), this, SLOT(setCustomAnimation()));
}
bool AnimationWidget::getStatus()
{
return this->dataOK;
}
void AnimationWidget::initData()
{
// bootimagepage.selectedimage = plymouth_list[0];
systemproxy->plymouth_init_check_qt();
QStringList valid_list;
QStringList plymouth_list = systemproxy->get_existing_plymouth_list_qt();
for(int i=0; i < plymouth_list.length(); i++) {
if(systemproxy->get_image_path_qt(plymouth_list[i]) != "False"){
// mainModel.append({"itemTitle": plymouth_list[i]});
valid_list.append(plymouth_list[i]);
}
}
for(int nIndex = 0;nIndex < valid_list.length();++nIndex)
{
QString strPath=QString("://res/picture.png");
QPixmap objPixmap(strPath);
// //生成QListWidgetItem对象(注意其Icon图像进行了伸缩[16*16])---scaled函数
// QListWidgetItem *pItem = new QListWidgetItem(QIcon(objPixmap.scaled(QSize(16,16))), tr("animal picture %1").arg(nIndex));
// //设置单元项的宽度和高度
// pItem->setSizeHint(QSize(130,20));
// pItem->setBackgroundColor(QColor(0, 0, 255, 127));
// pItem->setTextColor(QColor(0, 0, 255, 127));
// list_widget->insertItem(nIndex, pItem);
AgentListItem *account_item = new AgentListItem();
account_item->setCurrentItemName(QString(valid_list[nIndex]));
connect(account_item, SIGNAL(showItemName(QString)), this, SLOT(displayCurrentItemInfo(QString)));
connect(account_item, SIGNAL(removeItem(QString)), this, SLOT(deleteSelectedAnimation(QString)));
QListWidgetItem *item = new QListWidgetItem(list_widget);
// item->setSizeHint(QSize(130,20));
// item->setBackgroundColor(QColor(0, 0, 255, 127));
item->setIcon(QIcon(objPixmap.scaled(QSize(16,16))));
list_widget->setItemWidget(item, account_item);
}
// connect(list_widget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(onItemClicked(QListWidgetItem*)));
dataOK = true;
this->initConnect();
}
void AnimationWidget::selectCustomAnimation()
{
show_widget->setWindowFlags(Qt::FramelessWindowHint);
show_widget->setAutoFillBackground(true);
// show_widget->setObjectName("transparentWidget");
QStringList fileNameList;
QString abs_path;
QFileDialog* fd = new QFileDialog(this);
fd->resize(500, 471);
fd->setFilter(tr("Image Files (*.png *.jpg *.gif)"));
fd->setViewMode(QFileDialog::List);//设置浏览模式,有 列表list 模式和 详细信息detail两种方式
if (fd->exec() == QDialog::Accepted)
{
fileNameList = fd->selectedFiles();
abs_path = fileNameList[0];
int start_pos = abs_path.lastIndexOf("/") + 1;
int end_pos = abs_path.length();
QString pic_name = abs_path.mid(start_pos, end_pos-start_pos);
this->selected_animation = pic_name;
QPalette palette;
// palette.setBrush(QPalette::Background, QBrush(QPixmap("://res/ubuntukylin.png").scaled(180, 170, Qt::KeepAspectRatio)));
palette.setBrush(QPalette::Background, QBrush(QPixmap(abs_path).scaled(172, 115, Qt::KeepAspectRatio)));
show_widget->setPalette(palette);
systemproxy->add_new_plymouth_qt(abs_path, pic_name);
//update date
list_widget->clear();
this->initData();
}
else
fd->close();
}
void AnimationWidget::setCustomAnimation()
{
// QList<QListWidgetItem *>::const_iterator i=list_widget.begin();
// qDebug() << (*i)->text();
systemproxy->custom_plymouth_bg_qt(this->selected_animation);
}
void AnimationWidget::deleteSelectedAnimation(QString name)
{
QString result = systemproxy->delete_plymouth_qt(name);
if (result == "ok") {
// toolkits.alertMSG(qsTr("Deleted successfully!"));//删除成功!
// qDebug() << "Deleted successfully!";
int list_count = list_widget->count();
for(int i=0; i < list_count; i++)
{
QListWidgetItem *item = list_widget->item(i);
AgentListItem *account_item = (AgentListItem *)(list_widget->itemWidget(item));
QString cur_name = account_item->getCurrentItemName();
if(name == cur_name)
{
list_widget->takeItem(i);
delete item;
break;
}
}
TipDialog *dialog = new TipDialog(0, tr("Deleted successfully!"));
int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2);
int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (180 / 2);
dialog->move(w_x, w_y);
dialog->show();
dialog->raise();
}
else if (result == "use") {
// qDebug() << "This is the using animation!";
TipDialog *dialog = new TipDialog(0, tr("This is the using animation!"));
int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2);
int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (180 / 2);
dialog->move(w_x, w_y);
dialog->show();
dialog->raise();
// toolkits.alertMSG(qsTr("This is the using animation!"));//该动画为当前使用动画!
}
else if (result == "sys") {
qDebug() << "This is the default animation!";
TipDialog *dialog = new TipDialog(0, tr("This is the default animation!"));
int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2);
int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (180 / 2);
dialog->move(w_x, w_y);
dialog->show();
dialog->raise();
// toolkits.alertMSG(qsTr("This is the default animation!"));//该动画为系统默认动画!
}
else {
// qDebug() << "An unknown error occurred!";
TipDialog *dialog = new TipDialog(0, tr("An unknown error occurred!"));
int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2);
int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (180 / 2);
dialog->move(w_x, w_y);
dialog->show();
dialog->raise();
// toolkits.alertMSG(qsTr("An unknown error occurred!"));//发生未知错误!
}
}
void AnimationWidget::displayCurrentItemInfo(QString info)
{
this->selected_animation = info;
int list_count = list_widget->count();
for(int i=0; i < list_count; i++)
{
QListWidgetItem *item = list_widget->item(i);
AgentListItem *account_item = (AgentListItem *)(list_widget->itemWidget(item));
QString cur_name = account_item->getCurrentItemName();
if(info == cur_name)
{
list_widget->setCurrentItem(item);
break;
}
}
}