/* * 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 "animationwidget.h" #include #include "../component/agentlistitem.h" #include "../dbusproxy/youkersystemdbus.h" #include "../mainui/mainwindow.h" #include #include #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::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; } } }