Skip to content

Commit b8123a8

Browse files
committed
0.7
1 parent 6815197 commit b8123a8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+5098
-4062
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# plainControlCenter
22

3-
App that lets you edit config.json more convenient and faster<br><br>
4-
<img src="scr-0.6.3.png">
3+
App with user-friendly UI that lets you edit config.json more convenient and faster<br><br>
4+
<img src="scr-0.7.png">

dialog.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#include "dialog.h"
2+
3+
void Dialog::setTransparency(QWidget* widget) {
4+
QScreen* screen = widget->screen();
5+
QRect widgetGeometry = widget->geometry();
6+
QPixmap pixmap = screen->grabWindow(0,
7+
widgetGeometry.x(),
8+
widgetGeometry.y(),
9+
widgetGeometry.width(),
10+
widgetGeometry.height());
11+
QGraphicsBlurEffect* blurEffect = new QGraphicsBlurEffect();
12+
blurEffect->setBlurRadius(15);
13+
blurEffect->setBlurHints(QGraphicsBlurEffect::QualityHint);
14+
15+
QGraphicsScene* scene = new QGraphicsScene();
16+
QGraphicsPixmapItem item;
17+
item.setPixmap(pixmap);
18+
item.setGraphicsEffect(blurEffect);
19+
scene->addItem(&item);
20+
QImage res(QSize(widgetGeometry.width(), widgetGeometry.height()),
21+
QImage::Format_ARGB32);
22+
res.fill(Qt::transparent);
23+
QPainter ptr(&res);
24+
scene->render(&ptr, QRectF(), QRectF(0, 0, widgetGeometry.width(),
25+
widgetGeometry.height()));
26+
27+
QPalette palette;
28+
palette.setBrush(widget->backgroundRole(),
29+
QBrush(QPixmap::fromImage(res)));
30+
widget->setPalette(palette);
31+
}
32+
33+
void Dialog::setWindowGeometry() {
34+
QScreen* screen = this->screen();
35+
QRect geometry = screen->geometry();
36+
int width = 500, height = 350;
37+
int x = (geometry.width() - width) / 2;
38+
int y = (geometry.height() - height) / 2;
39+
this->setGeometry(x, y, width, height);
40+
}
41+
42+
Dialog::Dialog(QJsonObject* cfgObj, QString title, QString iconName) : Pane(nullptr,
43+
cfgObj,
44+
title,
45+
iconName) {
46+
47+
}

dialog.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#ifndef DIALOG_H
2+
#define DIALOG_H
3+
4+
#include "pane.h"
5+
6+
#include <QScreen>
7+
#include <QGraphicsBlurEffect>
8+
#include <QGraphicsScene>
9+
#include <QGraphicsPixmapItem>
10+
#include <QPainter>
11+
12+
class Dialog : public Pane {
13+
public:
14+
Dialog(QJsonObject* cfgObj, QString title, QString iconName);
15+
void setTransparency(QWidget* widget);
16+
void setWindowGeometry();
17+
};
18+
19+
#endif // DIALOG_H

dialogs/addappletdialog.cpp

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
#include "addappletdialog.h"
2+
3+
#include "launcherdialog.h"
4+
#include "clioutputdialog.h"
5+
#include "../panes/panelspane.h"
6+
7+
void AddAppletDialog::setPaneContents() {
8+
mContentsWidget = new QWidget();
9+
QVBoxLayout* contentsLayout = new QVBoxLayout(mContentsWidget);
10+
mContentsWidget->setObjectName("innerPane");
11+
12+
// Adding widgets
13+
QLabel* selectAppletLabel = new QLabel(tr("Select applet from the list:"));
14+
selectAppletLabel->setFont(mTitleFont);
15+
contentsLayout->addWidget(selectAppletLabel);
16+
17+
QListWidget* appletsListWidget = new QListWidget();
18+
appletsListWidget->setFont(mFont);
19+
QString style = QString("QListView::item:selected { "
20+
"background-color: %1; color: #ffffff; "
21+
"};").arg(getConfigValue("accent").toString());
22+
appletsListWidget->setStyleSheet(style);
23+
contentsLayout->addWidget(appletsListWidget);
24+
25+
QHBoxLayout* buttonsLayout = new QHBoxLayout();
26+
27+
buttonsLayout->addSpacerItem(new QSpacerItem(0, 0,
28+
QSizePolicy::MinimumExpanding,
29+
QSizePolicy::Ignored));
30+
31+
QPushButton* cancelButton = new QPushButton(tr("Cancel"));
32+
cancelButton->setFont(mFont);
33+
buttonsLayout->addWidget(cancelButton);
34+
35+
QPushButton* addButton = new QPushButton(tr("Add"));
36+
addButton->setFont(mFont);
37+
buttonsLayout->addWidget(addButton);
38+
39+
contentsLayout->addLayout(buttonsLayout);
40+
41+
// Misc
42+
QListWidgetItem* appMenuItem = new QListWidgetItem(tr("App Menu"));
43+
appMenuItem->setIcon(QIcon::fromTheme("app-launcher"));
44+
appletsListWidget->addItem(appMenuItem);
45+
46+
QListWidgetItem* windowListItem = new QListWidgetItem(tr("Window List"));
47+
windowListItem->setIcon(QIcon::fromTheme("kwin"));
48+
appletsListWidget->addItem(windowListItem);
49+
50+
QListWidgetItem* spacerItem = new QListWidgetItem(tr("Spacer"));
51+
spacerItem->setIcon(QIcon::fromTheme("extensions"));
52+
appletsListWidget->addItem(spacerItem);
53+
54+
QListWidgetItem* workspacesItem = new QListWidgetItem(tr("Workspaces"));
55+
workspacesItem->setIcon(QIcon::fromTheme("cs-workspaces"));
56+
appletsListWidget->addItem(workspacesItem);
57+
58+
QListWidgetItem* volumeItem = new QListWidgetItem(tr("Volume"));
59+
volumeItem->setIcon(QIcon::fromTheme("sound"));
60+
appletsListWidget->addItem(volumeItem);
61+
62+
QListWidgetItem* kbLayoutItem = new QListWidgetItem(tr("Keyboard Layout"));
63+
kbLayoutItem->setIcon(QIcon::fromTheme("keyboard"));
64+
appletsListWidget->addItem(kbLayoutItem);
65+
66+
QListWidgetItem* dateTimeItem = new QListWidgetItem(tr("Date & Time"));
67+
dateTimeItem->setIcon(QIcon::fromTheme("calendar"));
68+
appletsListWidget->addItem(dateTimeItem);
69+
70+
QListWidgetItem* splitterItem = new QListWidgetItem(tr("Splitter"));
71+
splitterItem->setIcon(QIcon::fromTheme("extensions"));
72+
appletsListWidget->addItem(splitterItem);
73+
74+
QListWidgetItem* userMenuItem = new QListWidgetItem(tr("User Menu"));
75+
userMenuItem->setIcon(QIcon::fromTheme("user_icon"));
76+
appletsListWidget->addItem(userMenuItem);
77+
78+
QListWidgetItem* ipAddrItem = new QListWidgetItem(tr("Local IPv4 Address"));
79+
ipAddrItem->setIcon(QIcon::fromTheme("cs-network"));
80+
appletsListWidget->addItem(ipAddrItem);
81+
82+
QListWidgetItem* mprisItem = new QListWidgetItem(tr("Playback Control (MPRIS)"));
83+
mprisItem->setIcon(QIcon::fromTheme("sound"));
84+
appletsListWidget->addItem(mprisItem);
85+
86+
QListWidgetItem* launcherItem = new QListWidgetItem(tr("Launcher"));
87+
launcherItem->setIcon(QIcon::fromTheme("utilities-terminal"));
88+
appletsListWidget->addItem(launcherItem);
89+
90+
QListWidgetItem* batteryItem = new QListWidgetItem(tr("Battery"));
91+
batteryItem->setIcon(QIcon::fromTheme("extensions"));
92+
appletsListWidget->addItem(batteryItem);
93+
94+
QListWidgetItem* sniTrayItem = new QListWidgetItem(tr("Tray (StatusNotifierItem)"));
95+
sniTrayItem->setIcon(QIcon::fromTheme("extensions"));
96+
appletsListWidget->addItem(sniTrayItem);
97+
98+
QListWidgetItem* cliOutputItem = new QListWidgetItem("CLI Output");
99+
cliOutputItem->setIcon(QIcon::fromTheme("utilities-terminal"));
100+
appletsListWidget->addItem(cliOutputItem);
101+
102+
// Making connections
103+
connect(addButton, &QPushButton::clicked, this, [this, appletsListWidget]() {
104+
if (!appletsListWidget->selectedItems().isEmpty()) {
105+
if (!appletsListWidget->currentItem()->text().compare("Launcher")) {
106+
this->hide();
107+
LauncherDialog* dialog = new LauncherDialog(mCfgObj, mPanelID, true, -1, mAppletsListWidget);
108+
dialog->setPaneContents();
109+
dialog->show();
110+
}
111+
else if (!appletsListWidget->currentItem()->text().compare("CLI Output")) {
112+
this->hide();
113+
CLIOutputDialog* dialog = new CLIOutputDialog(mCfgObj, mPanelID, true, -1, mAppletsListWidget);
114+
dialog->setPaneContents();
115+
dialog->show();
116+
}
117+
else {
118+
QListWidgetItem* item = new QListWidgetItem();
119+
item->setText(appletsListWidget->currentItem()->text());
120+
item->setIcon(appletsListWidget->currentItem()->icon());
121+
mAppletsListWidget->addItem(item);
122+
mAppletsListWidget->setCurrentRow(mAppletsListWidget->count() - 1);
123+
this->hide();
124+
delete this;
125+
}
126+
}
127+
});
128+
129+
connect(cancelButton, &QPushButton::clicked, this, [this]() {
130+
this->hide();
131+
delete this;
132+
});
133+
134+
finalizeUI();
135+
setWindowGeometry();
136+
setTransparency(this);
137+
}
138+
139+
AddAppletDialog::AddAppletDialog(QJsonObject* cfgObj,
140+
int panelID,
141+
QListWidget* appletsListWidget) : Dialog(cfgObj,
142+
tr("Adding applet"),
143+
"cs-applets") {
144+
mCfgObj = cfgObj;
145+
mPanelID = panelID;
146+
mAppletsListWidget = appletsListWidget;
147+
}

dialogs/addappletdialog.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#ifndef ADDAPPLETDIALOG_H
2+
#define ADDAPPLETDIALOG_H
3+
4+
#include "../dialog.h"
5+
6+
#include <QJsonObject>
7+
#include <QGraphicsBlurEffect>
8+
#include <QGraphicsScene>
9+
#include <QGraphicsPixmapItem>
10+
#include <QPainter>
11+
#include <QScreen>
12+
#include <QListWidget>
13+
#include <QPushButton>
14+
15+
class AddAppletDialog : public Dialog {
16+
public:
17+
AddAppletDialog(QJsonObject* cfgObj,
18+
int panelID,
19+
QListWidget* appletsListWidget);
20+
virtual void setPaneContents() override;
21+
22+
private:
23+
QListWidget* mAppletsListWidget;
24+
QJsonObject* mCfgObj;
25+
int mPanelID;
26+
};
27+
28+
#endif // ADDAPPLETDIALOG_H
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
#include "addautostartentrydialog.h"
2+
3+
void AddAutostartEntryDialog::setPaneContents() {
4+
mContentsWidget = new QWidget();
5+
QVBoxLayout* contentsLayout = new QVBoxLayout(mContentsWidget);
6+
mContentsWidget->setObjectName("innerPane");
7+
8+
// Adding widgets
9+
QLabel* selectEntryLabel = new QLabel(tr("Select app from the list:"));
10+
selectEntryLabel->setFont(mTitleFont);
11+
contentsLayout->addWidget(selectEntryLabel);
12+
13+
QListWidget* entriesListWidget = new QListWidget();
14+
entriesListWidget->setFont(mFont);
15+
QString style = QString("QListView::item:selected { "
16+
"background-color: %1; color: #ffffff; "
17+
"};").arg(getConfigValue("accent").toString());
18+
entriesListWidget->setStyleSheet(style);
19+
contentsLayout->addWidget(entriesListWidget);
20+
21+
QHBoxLayout* buttonsLayout = new QHBoxLayout();
22+
23+
buttonsLayout->addSpacerItem(new QSpacerItem(0, 0,
24+
QSizePolicy::MinimumExpanding,
25+
QSizePolicy::Ignored));
26+
27+
QPushButton* cancelButton = new QPushButton(tr("Cancel"));
28+
cancelButton->setFont(mFont);
29+
buttonsLayout->addWidget(cancelButton);
30+
31+
QPushButton* addButton = new QPushButton(tr("Add"));
32+
addButton->setFont(mFont);
33+
buttonsLayout->addWidget(addButton);
34+
35+
contentsLayout->addLayout(buttonsLayout);
36+
37+
38+
// Misc
39+
QDir appDir("/usr/share/applications");
40+
QStringList desktopEntriesList = appDir.entryList(QDir::Files | QDir::NoDotAndDotDot);
41+
42+
for (int i = 0; i < desktopEntriesList.length(); ++i) {
43+
QString name, iconName;
44+
QString desktopEntryPath = appDir.absoluteFilePath(desktopEntriesList[i]);
45+
if (desktopEntryPath.endsWith(".desktop")) {
46+
QSettings desktopFileReader(desktopEntryPath, QSettings::IniFormat);
47+
desktopFileReader.sync();
48+
desktopFileReader.beginGroup("Desktop Entry");
49+
name = desktopFileReader.value("Name").toString();
50+
iconName = desktopFileReader.value("Icon").toString();
51+
desktopFileReader.endGroup();
52+
53+
QListWidgetItem* item = new QListWidgetItem(name);
54+
if (QIcon::hasThemeIcon(iconName)) {
55+
item->setIcon(QIcon::fromTheme(iconName));
56+
}
57+
else if (QFile::exists(iconName)) {
58+
item->setIcon(QIcon(iconName));
59+
}
60+
else {
61+
item->setIcon(QIcon::fromTheme("dialog-question"));
62+
}
63+
entriesListWidget->addItem(item);
64+
65+
mEntryByItem[item] = desktopEntryPath;
66+
}
67+
}
68+
69+
QString homeDir = getenv("HOME");
70+
if (QDir(homeDir + "/.local/share/applications").exists()) {
71+
appDir.cd(homeDir + "/.local/share/applications");
72+
desktopEntriesList = appDir.entryList(QDir::Files | QDir::NoDotAndDotDot);
73+
74+
for (int i = 0; i < desktopEntriesList.length(); ++i) {
75+
QString name, iconName;
76+
QString desktopEntryPath = appDir.absoluteFilePath(desktopEntriesList[i]);
77+
if (desktopEntryPath.endsWith(".desktop")) {
78+
QSettings desktopFileReader(desktopEntryPath, QSettings::IniFormat);
79+
desktopFileReader.sync();
80+
desktopFileReader.beginGroup("Desktop Entry");
81+
name = desktopFileReader.value("Name").toString();
82+
iconName = desktopFileReader.value("Icon").toString();
83+
desktopFileReader.endGroup();
84+
85+
QListWidgetItem* item = new QListWidgetItem(name);
86+
if (QIcon::hasThemeIcon(iconName)) {
87+
item->setIcon(QIcon::fromTheme(iconName));
88+
}
89+
else if (QFile::exists(iconName)) {
90+
item->setIcon(QIcon(iconName));
91+
}
92+
else {
93+
item->setIcon(QIcon::fromTheme("dialog-question"));
94+
}
95+
entriesListWidget->addItem(item);
96+
97+
mEntryByItem[item] = desktopEntryPath;
98+
}
99+
}
100+
}
101+
102+
entriesListWidget->sortItems();
103+
104+
105+
// Making connections
106+
connect(cancelButton, &QPushButton::clicked, this, [this]() {
107+
this->hide();
108+
delete this;
109+
});
110+
111+
connect(addButton, &QPushButton::clicked, this, [this, entriesListWidget]() {
112+
if (!entriesListWidget->selectedItems().isEmpty()) {
113+
QString entry = mEntryByItem[entriesListWidget->selectedItems()[0]];
114+
mParent->addEntry(entry);
115+
this->hide();
116+
delete this;
117+
}
118+
});
119+
120+
finalizeUI();
121+
setWindowGeometry();
122+
setTransparency(this);
123+
}
124+
125+
AddAutostartEntryDialog::AddAutostartEntryDialog(QJsonObject* cfgObj,
126+
AutostartPane *parent) : Dialog(cfgObj,
127+
tr("Adding Autostart Entry"),
128+
"cs-general") {
129+
mParent = parent;
130+
}

0 commit comments

Comments
 (0)