refactor: rm QtShell/ShellComponent code superseded by RootWrapper

This commit is contained in:
outfoxxed 2024-01-31 18:35:51 -08:00
parent 9a5ad44aa9
commit ba1e18a125
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
3 changed files with 12 additions and 115 deletions

View file

@ -10,7 +10,6 @@
#include <qstring.h> #include <qstring.h>
#include "rootwrapper.hpp" #include "rootwrapper.hpp"
#include "shell.hpp"
int main(int argc, char** argv) { int main(int argc, char** argv) {
const auto app = QGuiApplication(argc, argv); const auto app = QGuiApplication(argc, argv);
@ -41,8 +40,6 @@ int main(int argc, char** argv) {
return -1; return -1;
} }
CONFIG_PATH = configPath;
LayerShellQt::Shell::useLayerShell(); LayerShellQt::Shell::useLayerShell();
// Base window transparency appears to be additive. // Base window transparency appears to be additive.
// Use a fully transparent window with a colored rect. // Use a fully transparent window with a colored rect.

View file

@ -1,22 +1,13 @@
#include "shell.hpp" #include "shell.hpp"
#include <utility>
#include <qfileinfo.h>
#include <qlogging.h> #include <qlogging.h>
#include <qobject.h> #include <qobject.h>
#include <qobjectdefs.h>
#include <qqmlcomponent.h>
#include <qqmlcontext.h> #include <qqmlcontext.h>
#include <qqmlengine.h> #include <qqmlengine.h>
#include <qqmllist.h> #include <qqmllist.h>
#include <qtmetamacros.h>
#include "rootwrapper.hpp" #include "rootwrapper.hpp"
QString CONFIG_PATH; // NOLINT
QtShell::QtShell(): QObject(nullptr), path(CONFIG_PATH), dir(QFileInfo(this->path).dir()) {}
void QtShell::reload() { void QtShell::reload() {
auto* rootobj = QQmlEngine::contextForObject(this)->engine()->parent(); auto* rootobj = QQmlEngine::contextForObject(this)->engine()->parent();
auto* root = qobject_cast<RootWrapper*>(rootobj); auto* root = qobject_cast<RootWrapper*>(rootobj);
@ -29,14 +20,8 @@ void QtShell::reload() {
root->reloadGraph(); root->reloadGraph();
} }
void QtShell::componentComplete() { QQmlListProperty<QObject> QtShell::components() {
for (auto* component: this->mComponents) { return QQmlListProperty<QObject>(
component->prepare(this->dir);
}
}
QQmlListProperty<ShellComponent> QtShell::components() {
return QQmlListProperty<ShellComponent>(
this, this,
nullptr, nullptr,
&QtShell::appendComponent, &QtShell::appendComponent,
@ -48,56 +33,7 @@ QQmlListProperty<ShellComponent> QtShell::components() {
); );
} }
void QtShell::appendComponent(QQmlListProperty<ShellComponent>* list, ShellComponent* component) { void QtShell::appendComponent(QQmlListProperty<QObject>* list, QObject* component) {
auto* shell = qobject_cast<QtShell*>(list->object); auto* shell = static_cast<QtShell*>(list->object); // NOLINT
component->setParent(shell);
if (shell != nullptr) shell->mComponents.append(component);
}
void ShellComponent::setSource(QString source) {
if (this->mComponent != nullptr) {
qWarning() << "cannot define ShellComponent.source while defining a component";
return;
}
this->mSource = std::move(source);
}
void ShellComponent::setComponent(QQmlComponent* component) {
if (this->mSource != nullptr) {
qWarning() << "cannot define a component for ShellComponent while source is set";
return;
}
this->mComponent = component;
}
void ShellComponent::prepare(const QDir& basePath) {
if (this->mComponent == nullptr) {
if (this->mSource == nullptr) {
qWarning() << "neither source or a component was set for ShellComponent on prepare";
return;
}
auto path = basePath.filePath(this->mSource);
qDebug() << "preparing ShellComponent from" << path;
auto* context = QQmlEngine::contextForObject(this);
if (context == nullptr) {
qWarning() << "ShellComponent was created without an associated QQmlEngine, cannot prepare";
return;
}
auto* engine = context->engine();
this->mComponent = new QQmlComponent(engine, path, this);
if (this->mComponent == nullptr) {
qWarning() << "could not load ShellComponent source" << path;
return;
}
}
qDebug() << "Sending ready for ShellComponent";
emit this->ready();
} }

View file

@ -1,62 +1,26 @@
#pragma once #pragma once
#include <qdir.h> #include <qcontainerfwd.h>
#include <qlogging.h> #include <qlogging.h>
#include <qobject.h> #include <qobject.h>
#include <qqmlcomponent.h>
#include <qqmlengine.h> #include <qqmlengine.h>
#include <qqmlintegration.h>
#include <qqmllist.h> #include <qqmllist.h>
#include <qqmlparserstatus.h> #include <qtmetamacros.h>
extern QString CONFIG_PATH; // NOLINT class QtShell: public QObject {
class ShellComponent;
class QtShell: public QObject, public QQmlParserStatus {
Q_OBJECT; Q_OBJECT;
Q_INTERFACES(QQmlParserStatus); Q_PROPERTY(QQmlListProperty<QObject> components READ components FINAL);
Q_PROPERTY(QQmlListProperty<ShellComponent> components READ components FINAL);
Q_CLASSINFO("DefaultProperty", "components"); Q_CLASSINFO("DefaultProperty", "components");
QML_ELEMENT; QML_ELEMENT;
public: public:
explicit QtShell(); explicit QtShell(QObject* parent = nullptr): QObject(parent) {}
void classBegin() override {} QQmlListProperty<QObject> components();
void componentComplete() override;
QQmlListProperty<ShellComponent> components();
public slots: public slots:
void reload(); void reload();
private: private:
static void appendComponent(QQmlListProperty<ShellComponent>* list, ShellComponent* component); static void appendComponent(QQmlListProperty<QObject>* list, QObject* component);
QList<ShellComponent*> mComponents;
QString path;
QDir dir;
};
class ShellComponent: public QObject {
Q_OBJECT;
Q_PROPERTY(QString source WRITE setSource);
Q_PROPERTY(QQmlComponent* component MEMBER mComponent WRITE setComponent);
Q_CLASSINFO("DefaultProperty", "component");
QML_ELEMENT;
public:
explicit ShellComponent(QObject* parent = nullptr): QObject(parent) {}
void setSource(QString source);
void setComponent(QQmlComponent* component);
void prepare(const QDir& basePath);
signals:
void ready();
private:
QString mSource;
QQmlComponent* mComponent = nullptr;
}; };