forked from explorer-cs/ukui-panel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathukuipanelapplication.cpp
141 lines (112 loc) · 3.92 KB
/
ukuipanelapplication.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <QtDebug>
#include <QUuid>
#include "ukuipanelapplication.h"
#include "ukuipanel.h"
UkuiPanelApplicationPrivate::UkuiPanelApplicationPrivate(UkuiPanelApplication *q)
: mSettings(0),
q_ptr(q)
{
}
UkuiPanelApplication::UkuiPanelApplication(int& argc, char** argv)
:QApplication(argc, argv),
d_ptr(new UkuiPanelApplicationPrivate(this))
{
Q_D(UkuiPanelApplication);
qDebug()<< "UkuiPanelApplication::UkuiPanelApplication";
QStringList panels;
panels << QStringLiteral("panel1");
d->mSettings = new LXQt::Settings(QLatin1String("panel"), this);
for(const QString& i : qAsConst(panels)){
new UkuiPanel(i,d->mSettings);
}
if (panels.isEmpty())
{
panels << "panel1";
}
for(const QString& i : qAsConst(panels))
{
addPanel(i);
}
}
UkuiPanel* UkuiPanelApplication::addPanel(const QString& name)
{
Q_D(UkuiPanelApplication);
UkuiPanel *panel = new UkuiPanel(name, d->mSettings);
mPanels << panel;
qDebug() << "the number of panel is 0000000:"<<mPanels.count();
// reemit signals
connect(panel, &UkuiPanel::deletedByUser, this, &UkuiPanelApplication::removePanel);
connect(panel, &UkuiPanel::pluginAdded, this, &UkuiPanelApplication::pluginAdded);
connect(panel, &UkuiPanel::pluginRemoved, this, &UkuiPanelApplication::pluginRemoved);
return panel;
}
void UkuiPanelApplication::removePanel(UkuiPanel* panel)
{
Q_D(UkuiPanelApplication);
Q_ASSERT(mPanels.contains(panel));
mPanels.removeAll(panel);
QStringList panels = d->mSettings->value("panels").toStringList();
// panels.removeAll(panel->name());
d->mSettings->setValue("panels", panels);
panel->deleteLater();
}
bool UkuiPanelApplication::isPluginSingletonAndRunnig(QString const & pluginId) const
{
for (auto const & panel : mPanels)
if (panel->isPluginSingletonAndRunnig(pluginId))
return true;
return false;
}
// See LXQtPanelApplication::LXQtPanelApplication for why this isn't good.
void UkuiPanelApplication::setIconTheme(const QString &iconTheme)
{
Q_D(UkuiPanelApplication);
d->mSettings->setValue("iconTheme", iconTheme == mGlobalIconTheme ? QString() : iconTheme);
QString newTheme = iconTheme.isEmpty() ? mGlobalIconTheme : iconTheme;
if (newTheme != QIcon::themeName())
{
QIcon::setThemeName(newTheme);
for(UkuiPanel* panel : qAsConst(mPanels))
{
panel->update();
panel->updateConfigDialog();
}
}
}
void UkuiPanelApplication::addNewPanel()
{
Q_D(UkuiPanelApplication);
QString name("panel_" + QUuid::createUuid().toString());
UkuiPanel *p = addPanel(name);
int screenNum = p->screenNum();
//ILXQtPanel::Position newPanelPosition = d->computeNewPanelPosition(p, screenNum);
//p->setPosition(screenNum, newPanelPosition, true);
QStringList panels = d->mSettings->value("panels").toStringList();
panels << name;
d->mSettings->setValue("panels", panels);
// Poupup the configuration dialog to allow user configuration right away
p->showConfigDialog();
}
/*
ILXQtPanel::Position UkuiPanelApplicationPrivate::computeNewPanelPosition(const UkuiPanel *p, const int screenNum)
{
Q_Q(UkuiPanelApplication);
QVector<bool> screenPositions(4, false); // false means not occupied
for (int i = 0; i < q->mPanels.size(); ++i) {
if (p != q->mPanels.at(i)) {
// We are not the newly added one
if (screenNum == q->mPanels.at(i)->screenNum()) { // Panels on the same screen
int p = static_cast<int> (q->mPanels.at(i)->position());
screenPositions[p] = true; // occupied
}
}
}
int availablePosition = 0;
for (int i = 0; i < 4; ++i) { // Bottom, Top, Left, Right
if (!screenPositions[i]) {
availablePosition = i;
break;
}
}
return static_cast<ILXQtPanel::Position> (availablePosition);
}*/