forked from openkylin/ukui-panel
fix: 适配IslandView
This commit is contained in:
parent
62f5fd4ec7
commit
87114ddf4a
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue