Refactor: Pass context to UI view item activate function
The `on_activate()` function is expected to do undo pushes, call operators, send notifiers and things like that as needed. Context is necessary for such things, so seems reasonable to provide it as argument. Also needed for #110378.
This commit is contained in:
@@ -168,7 +168,7 @@ class AbstractViewItem {
|
||||
* an item calls it, a change in the value returned by #should_be_active() to reflect an external
|
||||
* state change does not.
|
||||
*/
|
||||
virtual void on_activate();
|
||||
virtual void on_activate(bContext &C);
|
||||
/**
|
||||
* If the result is not empty, it controls whether the item should be active or not, usually
|
||||
* depending on the data that the view represents. Note that since this is meant to reflect
|
||||
@@ -238,7 +238,7 @@ class AbstractViewItem {
|
||||
* Requires the view to have completed reconstruction, see #is_reconstructed(). Otherwise the
|
||||
* actual item state is unknown, possibly calling state-change update functions incorrectly.
|
||||
*/
|
||||
void activate();
|
||||
void activate(bContext &C);
|
||||
void deactivate();
|
||||
/**
|
||||
* Requires the view to have completed reconstruction, see #is_reconstructed(). Otherwise we
|
||||
|
||||
@@ -189,7 +189,7 @@ class GridViewBuilder {
|
||||
class PreviewGridItem : public AbstractGridViewItem {
|
||||
public:
|
||||
using IsActiveFn = std::function<bool()>;
|
||||
using ActivateFn = std::function<void(PreviewGridItem &new_active)>;
|
||||
using ActivateFn = std::function<void(bContext &C, PreviewGridItem &new_active)>;
|
||||
|
||||
protected:
|
||||
/** See #set_on_activate_fn() */
|
||||
@@ -218,7 +218,7 @@ class PreviewGridItem : public AbstractGridViewItem {
|
||||
|
||||
private:
|
||||
std::optional<bool> should_be_active() const override;
|
||||
void on_activate() override;
|
||||
void on_activate(bContext &C) override;
|
||||
};
|
||||
|
||||
/** \} */
|
||||
|
||||
@@ -277,7 +277,7 @@ class AbstractTreeViewItem : public AbstractViewItem, public TreeViewItemContain
|
||||
class BasicTreeViewItem : public AbstractTreeViewItem {
|
||||
public:
|
||||
using IsActiveFn = std::function<bool()>;
|
||||
using ActivateFn = std::function<void(BasicTreeViewItem &new_active)>;
|
||||
using ActivateFn = std::function<void(bContext &C, BasicTreeViewItem &new_active)>;
|
||||
BIFIconID icon;
|
||||
|
||||
explicit BasicTreeViewItem(StringRef label, BIFIconID icon = ICON_NONE);
|
||||
@@ -304,7 +304,7 @@ class BasicTreeViewItem : public AbstractTreeViewItem {
|
||||
static void tree_row_click_fn(struct bContext *C, void *arg1, void *arg2);
|
||||
|
||||
std::optional<bool> should_be_active() const override;
|
||||
void on_activate() override;
|
||||
void on_activate(bContext &C) override;
|
||||
};
|
||||
|
||||
/** \} */
|
||||
|
||||
@@ -180,7 +180,7 @@ class LayerViewItem : public AbstractTreeViewItem {
|
||||
return {};
|
||||
}
|
||||
|
||||
void on_activate() override
|
||||
void on_activate(bContext & /*C*/) override
|
||||
{
|
||||
this->grease_pencil_.set_active_layer(&layer_);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ void AbstractViewItem::update_from_old(const AbstractViewItem &old)
|
||||
/** \name Active Item State
|
||||
* \{ */
|
||||
|
||||
void AbstractViewItem::on_activate()
|
||||
void AbstractViewItem::on_activate(bContext & /*C*/)
|
||||
{
|
||||
/* Do nothing by default. */
|
||||
}
|
||||
@@ -65,10 +65,10 @@ bool AbstractViewItem::set_state_active()
|
||||
return true;
|
||||
}
|
||||
|
||||
void AbstractViewItem::activate()
|
||||
void AbstractViewItem::activate(bContext &C)
|
||||
{
|
||||
if (set_state_active()) {
|
||||
on_activate();
|
||||
on_activate(C);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -127,13 +127,13 @@ bool AbstractGridViewItem::matches(const AbstractViewItem &other) const
|
||||
return identifier_ == other_grid_item.identifier_;
|
||||
}
|
||||
|
||||
void AbstractGridViewItem::grid_tile_click_fn(bContext * /*C*/, void *but_arg1, void * /*arg2*/)
|
||||
void AbstractGridViewItem::grid_tile_click_fn(bContext *C, void *but_arg1, void * /*arg2*/)
|
||||
{
|
||||
uiButViewItem *view_item_but = (uiButViewItem *)but_arg1;
|
||||
AbstractGridViewItem &grid_item = reinterpret_cast<AbstractGridViewItem &>(
|
||||
*view_item_but->view_item);
|
||||
|
||||
grid_item.activate();
|
||||
grid_item.activate(*C);
|
||||
}
|
||||
|
||||
void AbstractGridViewItem::add_grid_tile_button(uiBlock &block)
|
||||
@@ -441,10 +441,10 @@ void PreviewGridItem::set_is_active_fn(IsActiveFn fn)
|
||||
is_active_fn_ = fn;
|
||||
}
|
||||
|
||||
void PreviewGridItem::on_activate()
|
||||
void PreviewGridItem::on_activate(bContext &C)
|
||||
{
|
||||
if (activate_fn_) {
|
||||
activate_fn_(*this);
|
||||
activate_fn_(C, *this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -282,12 +282,12 @@ std::optional<DropLocation> TreeViewItemDropTarget::choose_drop_location(
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void AbstractTreeViewItem::tree_row_click_fn(bContext * /*C*/, void *but_arg1, void * /*arg2*/)
|
||||
void AbstractTreeViewItem::tree_row_click_fn(bContext *C, void *but_arg1, void * /*arg2*/)
|
||||
{
|
||||
uiButViewItem *item_but = (uiButViewItem *)but_arg1;
|
||||
AbstractTreeViewItem &tree_item = reinterpret_cast<AbstractTreeViewItem &>(*item_but->view_item);
|
||||
|
||||
tree_item.activate();
|
||||
tree_item.activate(*C);
|
||||
/* Not only activate the item, also show its children. Maybe this should be optional, or
|
||||
* controlled by the specific tree-view. */
|
||||
tree_item.set_collapsed(false);
|
||||
@@ -346,7 +346,7 @@ void AbstractTreeViewItem::collapse_chevron_click_fn(bContext *C,
|
||||
/* When collapsing an item with an active child, make this collapsed item active instead so the
|
||||
* active item stays visible. */
|
||||
if (hovered_item->has_active_child()) {
|
||||
hovered_item->activate();
|
||||
hovered_item->activate(*C);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -711,10 +711,10 @@ void BasicTreeViewItem::add_label(uiLayout &layout, StringRefNull label_override
|
||||
uiItemL(&layout, IFACE_(label.c_str()), icon);
|
||||
}
|
||||
|
||||
void BasicTreeViewItem::on_activate()
|
||||
void BasicTreeViewItem::on_activate(bContext &C)
|
||||
{
|
||||
if (activate_fn_) {
|
||||
activate_fn_(*this);
|
||||
activate_fn_(C, *this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ class AssetCatalogTreeViewItem : public ui::BasicTreeViewItem {
|
||||
public:
|
||||
AssetCatalogTreeViewItem(AssetCatalogTreeItem *catalog_item);
|
||||
|
||||
void on_activate() override;
|
||||
void on_activate(bContext &C) override;
|
||||
|
||||
void build_row(uiLayout &row) override;
|
||||
void build_context_menu(bContext &C, uiLayout &column) const override;
|
||||
@@ -220,7 +220,7 @@ AssetCatalogTreeViewAllItem &AssetCatalogTreeView::add_all_item()
|
||||
FileAssetSelectParams *params = params_;
|
||||
|
||||
AssetCatalogTreeViewAllItem &item = add_tree_item<AssetCatalogTreeViewAllItem>(IFACE_("All"));
|
||||
item.set_on_activate_fn([params](ui::BasicTreeViewItem & /*item*/) {
|
||||
item.set_on_activate_fn([params](bContext & /*C*/, ui::BasicTreeViewItem & /*item*/) {
|
||||
params->asset_catalog_visibility = FILE_SHOW_ASSETS_ALL_CATALOGS;
|
||||
WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr);
|
||||
});
|
||||
@@ -236,7 +236,7 @@ void AssetCatalogTreeView::add_unassigned_item()
|
||||
AssetCatalogTreeViewUnassignedItem &item = add_tree_item<AssetCatalogTreeViewUnassignedItem>(
|
||||
IFACE_("Unassigned"), ICON_FILE_HIDDEN);
|
||||
|
||||
item.set_on_activate_fn([params](ui::BasicTreeViewItem & /*item*/) {
|
||||
item.set_on_activate_fn([params](bContext & /*C*/, ui::BasicTreeViewItem & /*item*/) {
|
||||
params->asset_catalog_visibility = FILE_SHOW_ASSETS_WITHOUT_CATALOG;
|
||||
WM_main_add_notifier(NC_SPACE | ND_SPACE_ASSET_PARAMS, nullptr);
|
||||
});
|
||||
@@ -264,7 +264,7 @@ AssetCatalogTreeViewItem::AssetCatalogTreeViewItem(AssetCatalogTreeItem *catalog
|
||||
{
|
||||
}
|
||||
|
||||
void AssetCatalogTreeViewItem::on_activate()
|
||||
void AssetCatalogTreeViewItem::on_activate(bContext & /*C*/)
|
||||
{
|
||||
AssetCatalogTreeView &tree_view = static_cast<AssetCatalogTreeView &>(get_tree_view());
|
||||
tree_view.activate_catalog_by_id(catalog_item_.get_catalog_id());
|
||||
|
||||
@@ -41,7 +41,7 @@ class GeometryDataSetTreeViewItem : public ui::AbstractTreeViewItem {
|
||||
StringRef label,
|
||||
BIFIconID icon);
|
||||
|
||||
void on_activate() override;
|
||||
void on_activate(bContext &C) override;
|
||||
|
||||
void build_row(uiLayout &row) override;
|
||||
|
||||
@@ -56,7 +56,6 @@ class GeometryDataSetTreeViewItem : public ui::AbstractTreeViewItem {
|
||||
|
||||
class GeometryDataSetTreeView : public ui::AbstractTreeView {
|
||||
bke::GeometrySet geometry_set_;
|
||||
const bContext &C_;
|
||||
SpaceSpreadsheet &sspreadsheet_;
|
||||
bScreen &screen_;
|
||||
|
||||
@@ -65,7 +64,6 @@ class GeometryDataSetTreeView : public ui::AbstractTreeView {
|
||||
public:
|
||||
GeometryDataSetTreeView(bke::GeometrySet geometry_set, const bContext &C)
|
||||
: geometry_set_(std::move(geometry_set)),
|
||||
C_(C),
|
||||
sspreadsheet_(*CTX_wm_space_spreadsheet(&C)),
|
||||
screen_(*CTX_wm_screen(&C))
|
||||
{
|
||||
@@ -129,10 +127,9 @@ GeometryDataSetTreeViewItem::GeometryDataSetTreeViewItem(
|
||||
label_ = label;
|
||||
}
|
||||
|
||||
void GeometryDataSetTreeViewItem::on_activate()
|
||||
void GeometryDataSetTreeViewItem::on_activate(bContext &C)
|
||||
{
|
||||
GeometryDataSetTreeView &tree_view = this->get_tree();
|
||||
bContext &C = const_cast<bContext &>(tree_view.C_);
|
||||
SpaceSpreadsheet &sspreadsheet = tree_view.sspreadsheet_;
|
||||
tree_view.sspreadsheet_.geometry_component_type = uint8_t(component_type_);
|
||||
if (domain_) {
|
||||
|
||||
Reference in New Issue
Block a user