From 3a077f19c46d691d8748833e12189085fa43070a Mon Sep 17 00:00:00 2001 From: Inoki Date: Sun, 10 Apr 2022 09:01:48 +0200 Subject: [PATCH] Add tabs to show LoadOption brief info and DP info --- CMakeLists.txt | 2 ++ qefientrydetailview.cpp | 46 +++++++++++++++++++++++++++++++-------- qefientrydetailview.h | 19 ++++++++++++++-- qefientrydpdetailview.cpp | 29 ++++++++++++++++++++++++ qefientrydpdetailview.h | 21 ++++++++++++++++++ 5 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 qefientrydpdetailview.cpp create mode 100644 qefientrydpdetailview.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c9eeb1..ab7f594 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,8 @@ set(PROJECT_SOURCES mainwindow.h qefientrydetailview.cpp qefientrydetailview.h + qefientrydpdetailview.cpp + qefientrydpdetailview.h qefientryview.cpp qefientryview.h qefientry.cpp diff --git a/qefientrydetailview.cpp b/qefientrydetailview.cpp index 8c36ab9..7683ece 100644 --- a/qefientrydetailview.cpp +++ b/qefientrydetailview.cpp @@ -1,12 +1,11 @@ #include "qefientrydetailview.h" #include "helpers.h" -QEFIEntryDetailView::QEFIEntryDetailView(QEFIEntry &entry, QWidget *parent) +QEFIEntryDetailBriefView::QEFIEntryDetailBriefView( + QEFIEntry &entry, QWidget *parent) : QWidget(parent), m_entry(entry) { - m_topLevelLayout = new QBoxLayout(QBoxLayout::LeftToRight, this); m_briefLayout = new QFormLayout(this); - m_topLevelLayout->addLayout(m_briefLayout, 1); m_briefLayout->addRow("ID:", new QLabel(QString::asprintf("Boot%04X ", entry.id()))); @@ -17,7 +16,7 @@ QEFIEntryDetailView::QEFIEntryDetailView(QEFIEntry &entry, QWidget *parent) auto dpList = loadOption->devicePathList(); m_briefLayout->addRow("Device Path instance:", new QLabel(QString::number(dpList.size()))); - // TODO: Add a tab to display each DP + // Add a tab to display each DP for (int i = 0; i < dpList.size(); i++) { // Display type name m_briefLayout->addRow(QString::asprintf("Device Path %d type:", i + 1), @@ -32,11 +31,40 @@ QEFIEntryDetailView::QEFIEntryDetailView(QEFIEntry &entry, QWidget *parent) } } -QEFIEntryDetailView::~QEFIEntryDetailView() +QEFIEntryDetailBriefView::~QEFIEntryDetailBriefView() { - // TODO: Use smart ptr - if (m_topLevelLayout != nullptr) { - delete m_topLevelLayout; - m_topLevelLayout = nullptr; + if (m_briefLayout != nullptr) delete m_briefLayout; + m_briefLayout = nullptr; +} + + +QEFIEntryDetailView::QEFIEntryDetailView(QEFIEntry &entry, QWidget *parent) + : QWidget(parent), m_entry(entry) +{ + m_topLevelLayout = new QBoxLayout(QBoxLayout::LeftToRight, this); + m_tab = new QTabWidget(this); + m_tab->addTab(new QEFIEntryDetailBriefView(entry, m_tab), + QStringLiteral("Brief")); + + QEFILoadOption *loadOption = entry.loadOption(); + if (loadOption) { + auto dpList = loadOption->devicePathList(); + // Add a tab to display each DP + for (int i = 0; i < dpList.size(); i++) { + m_tab->addTab(new QEFIEntryDPDetailView(dpList[i].get(), m_tab), + QString::asprintf("DP %d", i + 1)); + } } + m_topLevelLayout->addWidget(m_tab); + setLayout(m_topLevelLayout); +} + +QEFIEntryDetailView::~QEFIEntryDetailView() +{ + if (m_topLevelLayout != nullptr) delete m_topLevelLayout; + m_topLevelLayout = nullptr; + + // Has ownership been passed to layout? + if (m_tab != nullptr) delete m_tab; + m_tab = nullptr; } diff --git a/qefientrydetailview.h b/qefientrydetailview.h index cef2e0e..e715c10 100644 --- a/qefientrydetailview.h +++ b/qefientrydetailview.h @@ -3,20 +3,35 @@ #include -#include +#include #include #include #include "qefientry.h" +#include "qefientrydpdetailview.h" + +class QEFIEntryDetailBriefView: public QWidget +{ + Q_OBJECT + + QEFIEntry &m_entry; + + QFormLayout *m_briefLayout; +public: + QEFIEntryDetailBriefView(QEFIEntry &entry, QWidget *parent = nullptr); + ~QEFIEntryDetailBriefView(); +}; + class QEFIEntryDetailView: public QWidget { Q_OBJECT QEFIEntry &m_entry; + QTabWidget *m_tab; + QBoxLayout *m_topLevelLayout; - QFormLayout *m_briefLayout; public: QEFIEntryDetailView(QEFIEntry &entry, QWidget *parent = nullptr); ~QEFIEntryDetailView(); diff --git a/qefientrydpdetailview.cpp b/qefientrydpdetailview.cpp new file mode 100644 index 0000000..bb9b9e7 --- /dev/null +++ b/qefientrydpdetailview.cpp @@ -0,0 +1,29 @@ +#include "qefientrydpdetailview.h" +#include "helpers.h" + + +QEFIEntryDPDetailView::QEFIEntryDPDetailView(QEFIDevicePath *dp, QWidget *parent) + : QWidget(parent) +{ + m_topLevelLayout = new QFormLayout(this); + + m_topLevelLayout->addRow("Device Path type:", new QLabel( + convert_device_path_type_to_name(dp->type()) + " " + + convert_device_path_subtype_to_name(dp->type(), dp->subType())) + ); + m_topLevelLayout->addRow(QStringLiteral(""), + new QLabel(QString::asprintf("%02X %02X", + dp->type(), dp->subType())) + ); + // TODO: Parse device path and add more properties + setLayout(m_topLevelLayout); +} + +QEFIEntryDPDetailView::~QEFIEntryDPDetailView() +{ + // TODO: Use smart ptr + if (m_topLevelLayout != nullptr) { + delete m_topLevelLayout; + m_topLevelLayout = nullptr; + } +} diff --git a/qefientrydpdetailview.h b/qefientrydpdetailview.h new file mode 100644 index 0000000..7c6a151 --- /dev/null +++ b/qefientrydpdetailview.h @@ -0,0 +1,21 @@ +#ifndef QEFIENTRYDPDETAILVIEW_H +#define QEFIENTRYDPDETAILVIEW_H + +#include + +#include +#include + +#include + +class QEFIEntryDPDetailView: public QWidget +{ + Q_OBJECT + + QFormLayout *m_topLevelLayout; +public: + QEFIEntryDPDetailView(QEFIDevicePath *dp, QWidget *parent = nullptr); + ~QEFIEntryDPDetailView(); +}; + +#endif // QEFIENTRYDPDETAILVIEW_H \ No newline at end of file