quarkai/src/boxwidget.cpp

230 lines
8.3 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 "boxwidget.h"
#include "../component/plugininterface.h"
#include "pluginmanager.h"
#include <QDebug>
#include <QGridLayout>
#include <QStackedLayout>
#include <QProcess>
#include <QFileInfo>
BoxWidget::BoxWidget(QWidget *parent, QString arch, QString os, QString path) :
QWidget(parent), osarch(arch), osname(os), plugin_path(path)
// ,m_pluginsLayout(new QStackedLayout)
// ,m_pluginsManager(new PluginManager(this))
{
this->setFixedSize(900, 403);
this->setStyleSheet("QWidget{border: none;}");
//set white background color
this->setAutoFillBackground(true);
QPalette palette;
palette.setBrush(QPalette::Window, QBrush(Qt::white));
this->setPalette(palette);
list_view = new QListView(this);
// list_view = new KylinListView(this);
list_view->setFocusPolicy(Qt::NoFocus);
list_view->setAutoFillBackground(true);
list_view->setIconSize(QSize(48, 48));
list_view->setResizeMode(QListView::Adjust);
list_view->setModel(&pluginModel);
list_view->setViewMode(QListView::IconMode);
// list_view->setMovement(QListView::Static);
list_view->setSpacing(26);
// list_view->setLineWidth(110);
this->loadPlugins();
this->initPluginWidget();
connect(list_view,SIGNAL(clicked(const QModelIndex&)),this,SLOT(OnClickListView(const QModelIndex &)));
// stacked_widget = new QStackedWidget(this);//stacked_widget will delete when InfoWidget delete
// stacked_widget->setFocusPolicy(Qt::NoFocus);
// stacked_widget->setAutoFillBackground(true);
// stacked_widget->addWidget(list_view);
// stacked_widget->addWidget(test_widget);
QGridLayout *layout = new QGridLayout();
layout->addWidget(list_view,0,0);
layout->setSpacing(0);
layout->setMargin(0);
layout->setContentsMargins(0, 0, 0, 0);
setLayout(layout);
/*m_pluginLayoutWidget = new QWidget;
m_pluginLayoutWidget->setLayout(m_pluginsLayout);
QVBoxLayout *pluginWidgetLayout = new QVBoxLayout;
pluginWidgetLayout->addWidget(m_pluginLayoutWidget);
pluginWidgetLayout->setSpacing(0);
pluginWidgetLayout->setMargin(0);
m_pluginWidget = new QWidget;
m_pluginWidget->setLayout(pluginWidgetLayout);
QVBoxLayout *centralLayout = new QVBoxLayout(this);
centralLayout->addWidget(list_view);
centralLayout->addWidget(m_pluginWidget);
centralLayout->setSpacing(0);
centralLayout->setMargin(0);
connect(m_pluginsManager, &PluginManager::pluginAdded, this, &BoxWidget::pluginAdded, Qt::QueuedConnection);
m_pluginsManager->loadPlugin(plugin_path);*/
}
BoxWidget::~BoxWidget()
{
}
//void BoxWidget::pluginAdded(QWidget * const w)
//{
// qDebug() << "BoxWidget::pluginAdded............";
// w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// const int idx = m_pluginsLayout->addWidget(w);
// m_pluginsLayout->setCurrentIndex(idx);
//}
void BoxWidget::displayBoxHomePage() {
// stacked_widget->setCurrentIndex(0);
}
void BoxWidget::displayBoxSubPage(QString plugin_id) {
// QObject *object = QObject::sender();
// QPushButton *btn = qobject_cast<QPushButton *>(object);
// QString object_name = btn->statusTip();
// if (object_name == "theme") {
// stacked_widget->setCurrentIndex(1);
// }
}
void BoxWidget::loadPlugins()
{
PluginManager::Instance()->loadPlugin(plugin_path);
}
void BoxWidget::initPluginWidget()
{
QStringList title;
title << tr("");
pluginModel.setTitle(title);
// pluginModel.insertRows(0,1,QModelIndex());
// QModelIndex qindex = pluginModel.index(0,0,QModelIndex());
// pluginModel.setData(qindex,tr(" "));
pluginModel.insertRows(0,1,QModelIndex());
QModelIndex qindex = pluginModel.index(0,0,QModelIndex());
// if(this->osarch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin") {
// //set text
// pluginModel.setData(qindex, tr("Kylin Software Center"));
// //set tooltip
// pluginModel.setData(qindex, tr("Kylin Software Center"),Qt::WhatsThisRole);
// }
// else {
// //set text
// pluginModel.setData(qindex, tr("UbuntuKylin Software Center"));
// //set tooltip
// pluginModel.setData(qindex, tr("UbuntuKylin Software Center"),Qt::WhatsThisRole);
// }
//set text
pluginModel.setData(qindex, tr("Kylin Software Center"));
//set tooltip
pluginModel.setData(qindex, tr("Kylin Software Center"),Qt::WhatsThisRole);
//set icon
pluginModel.setData(qindex,QIcon(QPixmap("://res/ubuntukylin-software-center.png")),Qt::DecorationRole);
// QStringList icon_list;
// //icon_list<<"://res/boot"<<"://res/camera";
// icon_list<<"://res/boot";
// QStringList text_list;
// //text_list << tr("Boot Manager") << tr("Camera");
// text_list << tr("Boot Manager");
// for (int index = 0;index < 1;++index)
// {
// pluginModel.insertRows(index + 1,1,QModelIndex());
// qindex = pluginModel.index(index + 1,0,QModelIndex());
// pluginModel.setData(qindex, text_list.at(index));
// //set icon
// pluginModel.setData(qindex,QIcon(QPixmap(icon_list.at(index))),Qt::DecorationRole);
// //set tooltip
// pluginModel.setData(qindex, text_list.at(index),Qt::WhatsThisRole);
// }
int count = PluginManager::Instance()->count();
for (int i = 0;i < count;++i)
{
PluginInterface* ICommon = PluginManager::Instance()->getInterfaceByindex<PluginInterface>(i);
QString picture = ICommon->getPicture();
QString pacture_path = QString(":/model/res/plugin/%1").arg(picture);
pluginModel.setGuid(ICommon->getGuid());
// pluginModel.insertRows(i + 1,1,QModelIndex());
// qindex = pluginModel.index(i + 1,0,QModelIndex());
pluginModel.insertRows(i + 1,1,QModelIndex());
qindex = pluginModel.index(i + 1,0,QModelIndex());
pluginModel.setData(qindex,ICommon->getName());
pluginModel.setData(qindex,QIcon(QPixmap(pacture_path)),Qt::DecorationRole);
pluginModel.setData(qindex,ICommon->getName(),Qt::WhatsThisRole);
}
}
void BoxWidget::OnClickListView(const QModelIndex & index)
{
if(index.row() == 0) {
if (QFileInfo("/usr/bin/kylin-software-center").exists()) {
QProcess process;
process.start("/usr/bin/kylin-software-center");
process.waitForStarted(1000);
process.waitForFinished(20*1000);
}
else if (QFileInfo("/usr/bin/ubuntu-kylin-software-center").exists()) {
QProcess process;
process.start("/usr/bin/ubuntu-kylin-software-center");
process.waitForStarted(1000);
process.waitForFinished(20*1000);
}
else {
emit this->pluginModuleError(tr("No software center was found!"));
}
/*if(this->osarch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin")
sessionProxy->runApp("kylin-software-center");
else
sessionProxy->runApp("ubuntu-kylin-software-center");*/
}
// else if(index.row() == 1) {
// emit this->sendSubIndex(0);
// }
// else if(index.row() == -1) {
// if(this->osarch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin")
// sessionProxy->runApp("cheese");
// else
// emit this->sendSubIndex(1);
// }
else {
// QString guid = pluginModel.getGuid(index.row() - 1);
QString guid = pluginModel.getGuid(index.row() - 1);
PluginInterface* interface = PluginManager::Instance()->getInterfaceByGuid<PluginInterface>(guid);
interface->doAction();
}
}