File indexing completed on 2024-04-28 17:06:20

0001 /*
0002     SPDX-FileCopyrightText: 2010 Jan Lepper <krusader@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2010-2022 Krusader Krew <https://krusader.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef KRLAYOUTFACTORY_H
0009 #define KRLAYOUTFACTORY_H
0010 
0011 // QtCore
0012 #include <QHash>
0013 #include <QString>
0014 // QtWidgets
0015 #include <QBoxLayout>
0016 #include <QLayout>
0017 #include <QWidget>
0018 // QtXml
0019 #include <QDomElement>
0020 
0021 class ListPanel;
0022 
0023 class KrLayoutFactory
0024 {
0025 public:
0026     KrLayoutFactory(ListPanel *panel, QHash<QString, QWidget *> &widgets)
0027         : panel(panel)
0028         , widgets(widgets)
0029     {
0030     }
0031     // creates the layout and adds the widgets to it
0032     QLayout *createLayout(QString layoutName = QString());
0033 
0034     static QStringList layoutNames();
0035     static QString layoutDescription(const QString &layoutName);
0036 
0037 private:
0038     QBoxLayout *createLayout(const QDomElement &e, QWidget *parent);
0039     QWidget *createFrame(const QDomElement &e, QWidget *parent);
0040 
0041     static bool parseFiles();
0042     static bool parseFile(const QString &path, QDomDocument &doc);
0043     static bool parseResource(const QString &path, QDomDocument &doc);
0044     static bool parseContent(const QByteArray &content, const QString &fileName, QDomDocument &doc);
0045     static void getLayoutNames(const QDomDocument &doc, QStringList &names);
0046     static QDomElement findLayout(const QDomDocument &doc, const QString &layoutName);
0047 
0048     ListPanel *panel;
0049     QHash<QString, QWidget *> &widgets;
0050 
0051     static bool _parsed;
0052     static QDomDocument _mainDoc;
0053     static QList<QDomDocument> _extraDocs;
0054 };
0055 
0056 #endif