fix: 适配IslandView

This commit is contained in:
hewenfei 2024-05-10 18:12:54 +08:00 committed by He Sir
parent 62f5fd4ec7
commit 87114ddf4a
2 changed files with 30 additions and 34 deletions

View File

@ -34,8 +34,9 @@ public:
int max {0};
};
// 如果需要不同Panel加载不同的Config,将id设置为不同即可
Panel::Panel(Screen *screen, const QString &id, QWindow *parent)
: UkuiQuick::WidgetContainerView(parent),
: UkuiQuick::IslandView(QStringLiteral("panel"), QStringLiteral("ukui-panel")),
m_id(id)
{
qRegisterMetaType<QList<int>>();
@ -105,9 +106,9 @@ Panel::Panel(Screen *screen, const QString &id, QWindow *parent)
}
});
connect(container()->config(), &UkuiQuick::Config::configChanged, this, [this] (const QString &key) {
connect(mainView()->config(), &UkuiQuick::Config::configChanged, this, [this] (const QString &key) {
if (key == QStringLiteral("disabledWidgets")) {
QStringList disabledWidgets = container()->config()->getValue(key).toStringList();
QStringList disabledWidgets = mainView()->config()->getValue(key).toStringList();
if (disabledWidgets == m_disabledWidgets) {
return;
}
@ -126,8 +127,6 @@ Panel::Panel(Screen *screen, const QString &id, QWindow *parent)
void Panel::initIsland()
{
setIsland(new UkuiQuick::Island(QStringLiteral("panel"), QStringLiteral("ukui-panel")));
const QString defaultViewId = QStringLiteral("org.ukui.panel");
auto config = Panel::config();
UkuiQuick::ConfigList list = config->children(UkuiQuick::Island::viewGroupName());
@ -139,15 +138,14 @@ void Panel::initIsland()
data.insert(QStringLiteral("widgets"), QVariantList());
config->addChild(UkuiQuick::Island::viewGroupName(), data);
config->forceSync();
}
// TODO: 配置错误检查
if (!loadContainer(defaultViewId)) {
if (!loadMainView(defaultViewId)) {
// 全部使用默认配置
auto cont = new UkuiQuick::WidgetContainer(this);
cont->setConfig(UkuiQuick::ConfigLoader::getConfig(QStringLiteral("panel")));
setContainer(cont);
setMainView(cont);
}
}
@ -163,7 +161,7 @@ void Panel::setPanelScreen(Screen *screen)
m_screen = screen;
setScreen(screen->internal());
container()->setScreen(screen->internal());
mainView()->setScreen(screen->internal());
updateGeometry();
connect(screen, &Screen::geometryChanged, this, &Panel::onScreenGeometryChanged);
}
@ -208,7 +206,7 @@ void Panel::initConfig()
setPanelPolicy(static_cast<GeneralConfigDefine::PanelSizePolicy>(map.value(QStringLiteral("panelSizePolicy"))));
// container
auto cont = container();
auto cont = mainView();
cont->setHost(UkuiQuick::WidgetMetadata::Host::Panel);
cont->setRadius(map.value(QStringLiteral("radius")));
@ -230,7 +228,7 @@ void Panel::initConfig()
void Panel::setPosition(UkuiQuick::Types::Pos position)
{
auto container = Panel::container();
auto container = Panel::mainView();
if (position != container->position()) {
// 任务栏位置与屏幕:上: 1, 下: 0, 左: 2, 右: 3, 如果为其他值,则说明任务栏不存在
int panelPosition = 0;
@ -289,10 +287,10 @@ void Panel::setPanelSize(int size)
// 仅同步到gsetting
QGSettings settings("org.ukui.panel.settings", "/org/ukui/panel/settings/", this);
// TODO: 修改任务栏尺寸m_panelSize为实际占用大小
if (container()->orientation() == UkuiQuick::Types::Horizontal) {
settings.set(QStringLiteral("panelsize"), m_panelSize + container()->margin()->top() + container()->margin()->bottom());
if (mainView()->orientation() == UkuiQuick::Types::Horizontal) {
settings.set(QStringLiteral("panelsize"), m_panelSize + mainView()->margin()->top() + mainView()->margin()->bottom());
} else {
settings.set(QStringLiteral("panelsize"), m_panelSize + container()->margin()->right() + container()->margin()->left());
settings.set(QStringLiteral("panelsize"), m_panelSize + mainView()->margin()->right() + mainView()->margin()->left());
}
}
@ -303,7 +301,7 @@ void Panel::loadContainerItem()
void Panel::loadWidgetsConfig()
{
auto containerConfig = container()->config();
auto containerConfig = mainView()->config();
containerConfig->addGroupInfo(QStringLiteral("widgets"), QStringLiteral("instanceId"));
if (containerConfig->numberOfChildren(QStringLiteral("widgets")) == 0) {
@ -333,7 +331,6 @@ void Panel::loadWidgetsConfig()
containerConfig->setValue(QStringLiteral("widgetsOrder"), order);
containerConfig->setValue(QStringLiteral("disabledWidgets"), QStringList());
containerConfig->forceSync();
}
// TODO: 在model内使用config实现禁用列表
@ -346,7 +343,7 @@ void Panel::initWidgets()
{
// 加载Widget
QStringList allWidgets;
UkuiQuick::ConfigList children = container()->config()->children(QStringLiteral("widgets"));
UkuiQuick::ConfigList children = mainView()->config()->children(QStringLiteral("widgets"));
for (const auto &config : children) {
const QString widgetId = config->getValue(QStringLiteral("id")).toString();
allWidgets << widgetId;
@ -354,7 +351,7 @@ void Panel::initWidgets()
if (m_disabledWidgets.contains(widgetId)) {
continue;
}
container()->addWidget(widgetId, config->id().toInt());
mainView()->addWidget(widgetId, config->id().toInt());
}
@ -387,17 +384,17 @@ void Panel::initWidgets()
void Panel::updateGeometry()
{
refreshRect();
if(container()->geometry().width() == 0 || container()->geometry().height() == 0) {
if(mainView()->geometry().width() == 0 || mainView()->geometry().height() == 0) {
return;
}
m_windowProxy->setGeometry(container()->geometry());
m_windowProxy->setGeometry(mainView()->geometry());
updateMask();
}
void Panel::refreshRect()
{
int panelSize = m_panelSize;
auto container = Panel::container();
auto container = Panel::mainView();
// panelRect 为实际占用的区域包括外边距margin
QRect screenGeometry = container->screen()->geometry(), panelRect;
switch (container->position()) {
@ -527,8 +524,7 @@ void Panel::widgetActionTriggered(const QAction *action)
}
disableWidget(id, !action->isChecked());
container()->config()->setValue(QStringLiteral("disabledWidgets"), m_disabledWidgets);
container()->config()->forceSync();
mainView()->config()->setValue(QStringLiteral("disabledWidgets"), m_disabledWidgets);
}
void Panel::disableWidget(const QString &id, bool disable)
@ -541,10 +537,10 @@ void Panel::disableWidget(const QString &id, bool disable)
m_disabledWidgets.append(id);
// 卸载全部widget
QVector<UkuiQuick::Widget *> widgets = container()->widgets();
QVector<UkuiQuick::Widget *> widgets = mainView()->widgets();
for (const auto &item: widgets) {
if (item->id() == id) {
container()->removeWidget(item);
mainView()->removeWidget(item);
}
}
} else {
@ -554,11 +550,11 @@ void Panel::disableWidget(const QString &id, bool disable)
}
// 重新激活全部widget
UkuiQuick::ConfigList children = container()->config()->children(QStringLiteral("widgets"));
UkuiQuick::ConfigList children = mainView()->config()->children(QStringLiteral("widgets"));
for (const auto &child : children) {
const QString widgetId = child->getValue(QStringLiteral("id")).toString();
if (widgetId == id) {
container()->addWidget(widgetId, child->id().toInt());
mainView()->addWidget(widgetId, child->id().toInt());
}
}
}
@ -625,7 +621,7 @@ void Panel::loadActions()
});
actions << panelSetting;
container()->setActions(actions);
mainView()->setActions(actions);
}
void Panel::initSizeAction()
@ -701,7 +697,7 @@ void Panel::updatePositionAction()
{
for (const auto &action: m_positionAction->menu()->actions()) {
action->setCheckable(true);
action->setChecked(action->property("position").value<UkuiQuick::Types::Pos>() == container()->position());
action->setChecked(action->property("position").value<UkuiQuick::Types::Pos>() == mainView()->position());
}
m_lockPanelAction->setChecked(m_lockPanel);
@ -764,7 +760,7 @@ bool Panel::event(QEvent *e)
bool Panel::performHide()
{
if (m_autoHide && !container()->active()) {
if (m_autoHide && !mainView()->active()) {
if (UkuiQuick::WindowProxy::isWayland()) {
m_windowProxy->setPanelBehavior(UkuiQuick::WindowProxy::PanelBehavior::WindowsGoBelow);
}
@ -865,7 +861,7 @@ bool Panel::lockPanel() const
void Panel::onContainerActiveChanged()
{
if (container()->active()) {
if (mainView()->active()) {
if (m_isHidden) {
performShow();
}
@ -881,7 +877,7 @@ void Panel::updateMask()
QRegion mask;
if (m_isHidden) {
const int maskSize = 4;
switch (container()->position()) {
switch (mainView()->position()) {
case UkuiQuick::Types::Left:
mask = QRegion(0, 0, maskSize, geometry().height());
break;

View File

@ -9,7 +9,7 @@
#include <QTimer>
#include <types.h>
#include <window-helper.h>
#include <widget-container-view.h>
#include <island-view.h>
#include "screens-manager.h"
#include "general-config-define.h"
@ -17,7 +17,7 @@ class QAction;
namespace UkuiPanel {
class Panel : public UkuiQuick::WidgetContainerView
class Panel : public UkuiQuick::IslandView
{
Q_OBJECT
Q_PROPERTY(bool lockPanel READ lockPanel NOTIFY lockPanelChanged)