19#include "RNA_prototypes.hh"
69 return std::to_string(row_filter.
value_int);
83 return fmt::format(
"({}, {}, {})",
112 std::ostringstream
result;
138 if (column->display_name == column_name) {
156 (column ==
nullptr && !column_name.
is_empty()))
168 else if (column ==
nullptr) {
169 row->
label(column_name.
data(), ICON_NONE);
173 std::stringstream ss;
179 row->
label(ss.str(), ICON_NONE);
182 row = &layout->
row(
true);
185 PointerRNA op_ptr = row->
op(
"SPREADSHEET_OT_remove_row_filter_rule",
"", ICON_X);
203 (column ==
nullptr && !column_name.
is_empty()))
214 if (column ==
nullptr || column_name.
is_empty()) {
220 layout->
prop(filter_ptr,
"operation",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
225 layout->
prop(filter_ptr,
"operation",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
229 layout->
prop(filter_ptr,
"operation",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
233 layout->
prop(filter_ptr,
"operation",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
237 layout->
prop(filter_ptr,
"operation",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
240 layout->
prop(filter_ptr,
"threshold",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
244 layout->
prop(filter_ptr,
"operation",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
247 layout->
prop(filter_ptr,
"threshold",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
251 layout->
prop(filter_ptr,
"operation",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
254 layout->
prop(filter_ptr,
"threshold",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
265 layout->
prop(filter_ptr,
"operation",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
268 layout->
prop(filter_ptr,
"threshold",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
278 layout->
label(
IFACE_(
"Unsupported column type"), ICON_ERROR);
295 layout->
op(
"SPREADSHEET_OT_add_row_filter_rule", std::nullopt, ICON_ADD);
305 PointerRNA *filter_ptr = MEM_new<PointerRNA>(
"panel customdata");
307 &screen->
id, &RNA_SpreadsheetRowFilter, row_filter);
319 panel_iter = panel_iter->
next;
323 PointerRNA *filter_ptr = MEM_new<PointerRNA>(
"panel customdata");
325 &screen->
id, &RNA_SpreadsheetRowFilter, row_filter);
328 panel_iter = panel_iter->
next;
bScreen * CTX_wm_screen(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
SpaceSpreadsheet * CTX_wm_space_spreadsheet(const bContext *C)
@ PANEL_TYPE_HEADER_EXPAND
#define BLI_assert_unreachable()
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void void bool BLI_listbase_link_move(ListBase *listbase, void *vlink, int step) ATTR_NONNULL()
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define BLT_I18NCONTEXT_DEFAULT_BPYRNA
@ SPREADSHEET_ROW_FILTER_BOOL_VALUE
@ SPREADSHEET_ROW_FILTER_UI_EXPAND
@ SPREADSHEET_ROW_FILTER_ENABLED
@ SPREADSHEET_FILTER_ENABLE
eSpreadsheetFilterOperation
@ SPREADSHEET_ROW_FILTER_GREATER
@ SPREADSHEET_ROW_FILTER_EQUAL
@ SPREADSHEET_ROW_FILTER_LESS
eSpreadsheetColumnValueType
@ SPREADSHEET_VALUE_TYPE_INT8
@ SPREADSHEET_VALUE_TYPE_FLOAT
@ SPREADSHEET_VALUE_TYPE_INT32_2D
@ SPREADSHEET_VALUE_TYPE_BYTE_COLOR
@ SPREADSHEET_VALUE_TYPE_UNKNOWN
@ SPREADSHEET_VALUE_TYPE_FLOAT3
@ SPREADSHEET_VALUE_TYPE_BOOL
@ SPREADSHEET_VALUE_TYPE_STRING
@ SPREADSHEET_VALUE_TYPE_INT32_3D
@ SPREADSHEET_VALUE_TYPE_QUATERNION
@ SPREADSHEET_VALUE_TYPE_FLOAT4X4
@ SPREADSHEET_VALUE_TYPE_INT32
@ SPREADSHEET_VALUE_TYPE_BUNDLE_ITEM
@ SPREADSHEET_VALUE_TYPE_INT64
@ SPREADSHEET_VALUE_TYPE_FLOAT2
@ SPREADSHEET_VALUE_TYPE_COLOR
@ SPREADSHEET_VALUE_TYPE_INSTANCES
void UI_panels_free_instanced(const bContext *C, ARegion *region)
void UI_panel_custom_data_set(Panel *panel, PointerRNA *custom_data)
bool UI_panel_list_matches_data(ARegion *region, ListBase *data, uiListPanelIDFromDataFunc panel_idname_func)
PointerRNA * UI_panel_custom_data_get(const Panel *panel)
Panel * UI_panel_add_instanced(const bContext *C, ARegion *region, ListBase *panels, const char *panel_idname, PointerRNA *custom_data)
constexpr bool is_empty() const
constexpr const char * data() const
void * MEM_callocN(size_t len, const char *str)
static void spreadsheet_filter_panel_draw(const bContext *C, Panel *panel)
static std::string operation_string(const eSpreadsheetColumnValueType data_type, const eSpreadsheetFilterOperation operation)
static void set_filter_expand_flag(const bContext *, Panel *panel, short expand_flag)
static std::string value_string(const SpreadsheetRowFilter &row_filter, const eSpreadsheetColumnValueType data_type)
static void spreadsheet_row_filters_layout(const bContext *C, Panel *panel)
static void filter_panel_id_fn(void *, char *r_name)
static void filter_reorder(bContext *C, Panel *panel, int new_index)
static void spreadsheet_filter_panel_draw_header(const bContext *C, Panel *panel)
SpreadsheetTable * get_active_table(SpaceSpreadsheet &sspreadsheet)
static const SpreadsheetColumn * lookup_visible_column_for_filter(const SpaceSpreadsheet &sspreadsheet, const StringRef column_name)
static short get_filter_expand_flag(const bContext *, Panel *panel)
void register_row_filter_panels(ARegionType ®ion_type)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
void(* reorder)(bContext *C, Panel *pa, int new_index)
void(* set_list_data_expand_flag)(const bContext *C, Panel *pa, short expand_flag)
void(* draw)(const bContext *C, Panel *panel)
char idname[BKE_ST_MAXNAME]
char translation_context[BKE_ST_MAXNAME]
char category[BKE_ST_MAXNAME]
char label[BKE_ST_MAXNAME]
short(* get_list_data_expand_flag)(const bContext *C, Panel *pa)
void(* draw_header)(const bContext *C, Panel *panel)
SpreadsheetColumn ** columns
void use_property_decorate_set(bool is_sep)
void label(blender::StringRef name, int icon)
void active_set(bool active)
void separator(float factor=1.0f, LayoutSeparatorType type=LayoutSeparatorType::Auto)
uiLayout & row(bool align)
void emboss_set(blender::ui::EmbossType emboss)
PointerRNA op(wmOperatorType *ot, std::optional< blender::StringRef > name, int icon, blender::wm::OpCallContext context, eUI_Item_Flag flag)
void use_property_split_set(bool value)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)