feat: 将panel布局代码作为一个包加载

This commit is contained in:
hewenfei 2024-06-06 18:56:37 +08:00
parent a2f8550555
commit 8e38bfc8f1
5 changed files with 36 additions and 14 deletions

View File

@ -0,0 +1,25 @@
{
"Authors": [
{
"Name": "hxf",
"Email": "hewenfei@kylinos.cn"
}
],
"Id": "org.ukui.panel",
"Icon": "ukui-panel",
"Name": "ukui-panel",
"Name[zh_CN]": "任务栏面板",
"Tooltip": "Common taskbar panel",
"Tooltip[zh_CN]": "普通任务栏面板",
"Description": "Common taskbar panel",
"Description[zh_CN]": "普通任务栏面板",
"Version": "1.0",
"Website": "https://ukui.org",
"BugReport": "https://gitee.com/openkylin/ukui-panel/issues",
"ShowIn": "Panel",
"WidgetType": "Container",
"Contents": {
"Main": "ui/Container.qml"
}
}

View File

@ -259,7 +259,7 @@ WidgetContainerItem {
id: repeater
model: Panel.WidgetSortModel {
// TODO: use config
widgetOrder: widgetsOrder
widgetOrder: containerItem.WidgetContainer.config.widgetsOrder
sourceModel: containerItem.widgetItemModel
}
delegate: widgetLoaderComponent

View File

@ -1,5 +1,6 @@
<RCC>
<qresource prefix="/">
<file>Container.qml</file>
<qresource prefix="/ukui-panel">
<file>org.ukui.panel/metadata.json</file>
<file>org.ukui.panel/ui/Container.qml</file>
</qresource>
</RCC>

View File

@ -59,11 +59,12 @@ Panel::Panel(Screen *screen, const QString &id, QWindow *parent)
{
qRegisterMetaType<QList<int>>();
qmlRegisterType<UkuiPanel::WidgetSortModel>("org.ukui.panel.impl", 1, 0, "WidgetSortModel");
rootContext()->setContextProperty("panel", this);
initIsland();
setColor(Qt::transparent);
setFlags(flags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::WindowDoesNotAcceptFocus);
rootContext()->setContextProperty("panel", this);
m_windowProxy = new UkuiQuick::WindowProxy(this);
m_windowProxy->setWindowType(UkuiQuick::WindowType::Dock);
@ -72,7 +73,6 @@ Panel::Panel(Screen *screen, const QString &id, QWindow *parent)
setPanelScreen(screen);
initConfig();
loadWidgetsConfig();
loadContainerItem();
initWidgets();
loadActions();
@ -121,10 +121,14 @@ void Panel::initIsland()
config->addChild(UkuiQuick::Island::viewGroupName(), data);
}
// 添加panel包所在的qrc路径
UkuiQuick::WidgetContainer::widgetLoader().addWidgetSearchPath(QStringLiteral(":/ukui-panel"));
// TODO: 配置错误检查
if (!loadMainView(defaultViewId)) {
// 全部使用默认配置
auto cont = new UkuiQuick::WidgetContainer(this);
auto metadata = UkuiQuick::WidgetMetadata(QStringLiteral(":/ukui-panel/org.ukui.panel"));
auto cont = new UkuiQuick::WidgetContainer(metadata, this);
cont->setConfig(UkuiQuick::ConfigLoader::getConfig(QStringLiteral("panel")));
setMainView(cont);
}
@ -311,11 +315,6 @@ void Panel::setPanelSize(int size)
}
}
void Panel::loadContainerItem()
{
setSource(QUrl("qrc:///Container.qml"));
}
void Panel::loadWidgetsConfig()
{
auto containerConfig = mainView()->config();
@ -352,8 +351,6 @@ void Panel::loadWidgetsConfig()
// TODO: 在model内使用config实现禁用列表
m_disabledWidgets = containerConfig->getValue(QStringLiteral("disabledWidgets")).toStringList();
// widgetsOrder
rootContext()->setContextProperty("widgetsOrder", containerConfig->getValue(QStringLiteral("widgetsOrder")));
}
void Panel::initWidgets()

View File

@ -98,7 +98,6 @@ private Q_SLOTS:
private:
void initConfig();
void initPanelConfig();
void loadContainerItem();
void loadWidgetsConfig();
void initWidgets();
void updateGeometry();