summaryrefslogtreecommitdiff
path: root/Userland/Applications
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Applications')
-rw-r--r--Userland/Applications/PDFViewer/OutlineModel.cpp41
-rw-r--r--Userland/Applications/PDFViewer/OutlineModel.h1
-rw-r--r--Userland/Applications/PDFViewer/SidebarWidget.cpp2
3 files changed, 42 insertions, 2 deletions
diff --git a/Userland/Applications/PDFViewer/OutlineModel.cpp b/Userland/Applications/PDFViewer/OutlineModel.cpp
index 75ee83da4c..f38b450d0d 100644
--- a/Userland/Applications/PDFViewer/OutlineModel.cpp
+++ b/Userland/Applications/PDFViewer/OutlineModel.cpp
@@ -5,8 +5,17 @@
*/
#include "OutlineModel.h"
+#include <AK/Assertions.h>
#include <AK/NonnullRefPtrVector.h>
+#include <LibGUI/ModelRole.h>
#include <LibGfx/Font/FontDatabase.h>
+#include <LibGfx/TextAlignment.h>
+
+enum Columns {
+ Page,
+ Title,
+ _Count
+};
ErrorOr<NonnullRefPtr<OutlineModel>> OutlineModel::create(NonnullRefPtr<PDF::OutlineDict> const& outline)
{
@@ -41,9 +50,14 @@ int OutlineModel::row_count(const GUI::ModelIndex& index) const
return static_cast<int>(outline_item->children.size());
}
+int OutlineModel::tree_column() const
+{
+ return Columns::Title;
+}
+
int OutlineModel::column_count(const GUI::ModelIndex&) const
{
- return 1;
+ return Columns::_Count;
}
GUI::Variant OutlineModel::data(const GUI::ModelIndex& index, GUI::ModelRole role) const
@@ -53,13 +67,36 @@ GUI::Variant OutlineModel::data(const GUI::ModelIndex& index, GUI::ModelRole rol
switch (role) {
case GUI::ModelRole::Display:
- return outline_item->title;
+ switch (index.column()) {
+ case Columns::Title:
+ return outline_item->title;
+ case Columns::Page: {
+ auto maybe_page_number = outline_item->dest.page;
+ if (maybe_page_number.has_value()) {
+ return maybe_page_number.release_value();
+ }
+ return {};
+ }
+ default:
+ VERIFY_NOT_REACHED();
+ }
+
case GUI::ModelRole::Icon:
if (m_open_outline_items.contains(outline_item))
return m_open_item_icon;
return m_closed_item_icon;
default:
return {};
+
+ case GUI::ModelRole::TextAlignment:
+ switch (index.column()) {
+ case Columns::Title:
+ return Gfx::TextAlignment::CenterLeft;
+ case Columns::Page:
+ return Gfx::TextAlignment::CenterRight;
+ default:
+ VERIFY_NOT_REACHED();
+ }
}
}
diff --git a/Userland/Applications/PDFViewer/OutlineModel.h b/Userland/Applications/PDFViewer/OutlineModel.h
index 3ecb57f6f7..ec55357142 100644
--- a/Userland/Applications/PDFViewer/OutlineModel.h
+++ b/Userland/Applications/PDFViewer/OutlineModel.h
@@ -18,6 +18,7 @@ public:
virtual int row_count(const GUI::ModelIndex&) const override;
virtual int column_count(const GUI::ModelIndex&) const override;
+ virtual int tree_column() const override;
virtual GUI::Variant data(const GUI::ModelIndex& index, GUI::ModelRole role) const override;
virtual GUI::ModelIndex parent_index(const GUI::ModelIndex&) const override;
virtual GUI::ModelIndex index(int row, int column, const GUI::ModelIndex&) const override;
diff --git a/Userland/Applications/PDFViewer/SidebarWidget.cpp b/Userland/Applications/PDFViewer/SidebarWidget.cpp
index a2740f3036..ad97d83cab 100644
--- a/Userland/Applications/PDFViewer/SidebarWidget.cpp
+++ b/Userland/Applications/PDFViewer/SidebarWidget.cpp
@@ -22,6 +22,8 @@ SidebarWidget::SidebarWidget()
m_outline_tree_view = outline_container.add<GUI::TreeView>();
m_outline_tree_view->set_activates_on_selection(true);
+ m_outline_tree_view->set_should_fill_selected_rows(true);
+ m_outline_tree_view->set_selection_behavior(GUI::AbstractView::SelectionBehavior::SelectRows);
auto& thumbnails_container = tab_bar.add_tab<GUI::Widget>("Thumbnails");
thumbnails_container.set_layout<GUI::VerticalBoxLayout>();