Refactor: Port spreadsheet data set to UI tree view

This patch removes a bunch of specific code for drawing the spreadsheet
data set region, which was an overly specific solution for a generic UI.
Nowadays, the UI tree view API used for asset browser catalogs is a much
better way to implement this behavior.

To make this possible, the tree view API is extended in a few ways.
Collapsibility can now be turned off, and whether an item should
be active is moved to a separate virtual function.

The only visual change is that the items are now drawn in a box,
just like the asset catalog.

Differential Revision: https://developer.blender.org/D13198
This commit is contained in:
2021-11-19 17:36:11 -05:00
parent a0780ad625
commit 01df48a983
18 changed files with 273 additions and 590 deletions

View File

@@ -16,49 +16,11 @@
#pragma once
#include <array>
#include "BKE_geometry_set.hh"
#include "UI_interface.h"
#include "spreadsheet_dataset_layout.hh"
struct ARegion;
struct View2D;
struct Panel;
struct bContext;
struct uiBlock;
namespace blender::ed::spreadsheet {
class DatasetDrawContext;
class DatasetRegionDrawer {
public:
const int row_height;
float ymin_offset = 0;
int xmin;
int xmax;
uiBlock &block;
const View2D &v2d;
DatasetDrawContext &draw_context;
DatasetRegionDrawer(const ARegion *region, uiBlock &block, DatasetDrawContext &draw_context);
void draw_hierarchy(const DatasetLayoutHierarchy &layout);
void draw_attribute_domain_row(const DatasetComponentLayoutInfo &component,
const DatasetAttrDomainLayoutInfo &domain_info);
void draw_component_row(const DatasetComponentLayoutInfo &component_info);
private:
void draw_dataset_row(const int indentation,
const GeometryComponentType component,
const std::optional<AttributeDomain> domain,
const BIFIconID icon,
const char *label,
const bool is_active);
};
void draw_dataset_in_region(const bContext *C, ARegion *region);
void spreadsheet_data_set_panel_draw(const bContext *C, Panel *panel);
} // namespace blender::ed::spreadsheet