Skip to content

Commit

Permalink
feat: [detailspace] minimum detailsapce plugin
Browse files Browse the repository at this point in the history
Add minimum detailspace plugin and base qml compoment.

Log: Add minimum detailspace plugin.
  • Loading branch information
rb-union authored and Johnson-zs committed Jun 24, 2024
1 parent 1d4f00a commit 394ece0
Show file tree
Hide file tree
Showing 14 changed files with 647 additions and 37 deletions.
3 changes: 3 additions & 0 deletions src/dfm-gui/windowmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,9 @@ QSharedPointer<QQmlEngine> WindowManager::engine() const
* \brief 根据传入的插件 \a pluginName 和组件 \a quickId 信息查找并创建对应的主窗体,\a var 为初始化时传递给主窗体组件的参数,
* 创建的窗口会被当前管理类保留管理.
* \return 创建的 QQuickWindow 和 Panel,无法创建返回空的 Handle
*
* \warning 主窗口对应的 Qml 组件会立即加载,子 Applet 是异步加载的,所以在默认初始化的流程中,不使用旧版框架中 findWindowId() 这类
* 接口
*/
WindowManager::Handle WindowManager::createWindow(const QUrl &url, const QString &pluginName,
const QString &quickId, const QVariantMap &var)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ target_include_directories(${PROJECT_NAME}

target_link_libraries(${PROJECT_NAME}
DFM::base
DFM::gui
DFM::framework
${DtkWidget_LIBRARIES}
)
Expand Down
30 changes: 0 additions & 30 deletions src/plugins/filemanager/core/dfmplugin-detailspace/DetailSpace.qml

This file was deleted.

34 changes: 34 additions & 0 deletions src/plugins/filemanager/core/dfmplugin-detailspace/detailspace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,51 @@
#include "detailspace.h"
#include "utils/detailspacehelper.h"
#include "events/detailspaceeventreceiver.h"
#include "detailspacecontainment.h"
#include "model/quickfilebaseinfomodel.h"

#include <dfm-base/widgets/filemanagerwindowsmanager.h>

#include <dfm-gui/windowmanager.h>
#include <dfm-gui/appletfactory.h>

#include <QQmlEngine>

namespace dfmplugin_detailspace {
DFM_LOG_REISGER_CATEGORY(DPDETAILSPACE_NAMESPACE)
DFMBASE_USE_NAMESPACE

static constexpr char kAppletUrl[] { "org.dfm.detailspace" };

static dfmgui::Applet *createDetailSpaceApplet(const QString &url, dfmgui::Containment *parent, QString *errorString)
{
if (kAppletUrl == url) {
Q_ASSERT_X(parent && parent->flags().testFlag(dfmgui::Applet::kPanel),
"Create detailspace applet", "Parent must based on panel");

auto detailSpace = new DetailSpaceContainment(parent);
QObject::connect(parent, &dfmgui::Applet::currentUrlChanged, detailSpace, &DetailSpaceContainment::setCurrentUrl);
return detailSpace;
}
return nullptr;
}

void DetailSpace::initialize()
{
connect(&FMWindowsIns, &FileManagerWindowsManager::windowClosed, this, &DetailSpace::onWindowClosed, Qt::DirectConnection);
DetailSpaceEventReceiver::instance().connectService();

// 注册插件使用模块组件
// @uri org.dfm.detailspace
const char *uri = "org.dfm.detailspace";
qmlRegisterType<QuickFileBaseInfoModel>(uri, 1, 0, "BaseFileInfoModel");

QString errorString;
bool ret = dfmgui::AppletFactory::instance()->regCreator(
kAppletUrl, &createDetailSpaceApplet, &errorString);
if (!ret) {
fmWarning() << QString("Register applet %1 failed.").arg(kAppletUrl) << errorString;
}
}

bool DetailSpace::start()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@
],
"Quick": [
{
"Url" : "DetailSpace.qml",
"Url" : "qml/DetailSpace.qml",
"Id" : "detailspace",
"Parent" : "dfmplugin-core.filewindow"
"Parent" : "dfmplugin-core.filewindow",
"Applet" : "org.dfm.detailspace"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#include "detailspacecontainment.h"

#include <dfm-base/interfaces/fileinfo.h>
#include <dfm-base/base/schemefactory.h>
#include <dfm-base/utils/thumbnail/thumbnailhelper.h>

#include <dfm-framework/event/event.h>

DFMBASE_USE_NAMESPACE

namespace dfmplugin_detailspace {

DetailSpaceContainment::DetailSpaceContainment(QObject *parent)
: dfmgui::Containment(parent)
{
}

bool DetailSpaceContainment::detailVisible() const
{
return visibleFlag;
}

void DetailSpaceContainment::setDetailVisible(bool b)
{
if (visibleFlag != b) {
visibleFlag = b;
Q_EMIT detailVisibleChanged(b);
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#ifndef DETAILSPACECONTAINMENT_H
#define DETAILSPACECONTAINMENT_H

#include <QObject>

#include <dfm-gui/containment.h>

namespace dfmplugin_detailspace {

class DetailSpaceContainment : public dfmgui::Containment
{
Q_OBJECT

Q_PROPERTY(bool detailVisible READ detailVisible WRITE setDetailVisible NOTIFY detailVisibleChanged FINAL)

public:
explicit DetailSpaceContainment(QObject *parent = nullptr);

bool detailVisible() const;
void setDetailVisible(bool b);
Q_SIGNAL void detailVisibleChanged(bool b);

private:
bool visibleFlag { false };
QString curIconName;
};

}

#endif // DETAILSPACECONTAINMENT_H
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ enum DetailFilterType {
kFileInterviewTimeField = 1 << 7,
kFileChangeTimeField = 1 << 8
};
Q_ENUM_NS(DetailFilterType)
Q_FLAG_NS(DetailFilterType)

// TODO: try remove it
enum BasicFieldExpandEnum : int {
kNotAll,
kFileName,
Expand Down
Loading

0 comments on commit 394ece0

Please sign in to comment.