Property Search: Quick start and clear operators

`ctrl-F` to start the search is obviously necessary, but the clear
operator, `alt-F` requires some of explanation. First, it maps nicely
to the paradigm of "key to set, alt-key to clear," which makes it
unobtrusive. Second, it can be a quicker way to clear the search than
moving the mouse to the top. Finally, in the future, it could a reset
the panels to their expansion before the search started.

Differential Revision: https://developer.blender.org/D8857
This commit is contained in:
Hans Goudey 2020-09-15 11:39:25 -05:00
parent 8bcdcab659
commit bedbd8655e
Notes: blender-bot 2023-02-14 08:08:56 +01:00
Referenced by issue #77824, Properties Search Implementation
4 changed files with 66 additions and 0 deletions

View File

@ -738,6 +738,8 @@ def km_property_editor(_params):
{"properties": [("direction", 'PREV')]}),
("screen.space_context_cycle", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("direction", 'NEXT')]}),
("buttons.start_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None),
("buttons.clear_filter", {"type": 'F', "value": 'PRESS', "alt": True}, None),
# Modifier panels
("object.modifier_remove", {"type": 'X', "value": 'PRESS'}, {"properties": [("report", True)]}),
("object.modifier_remove", {"type": 'DEL', "value": 'PRESS'}, {"properties": [("report", True)]}),

View File

@ -89,6 +89,8 @@ extern const char *buttons_context_dir[]; /* doc access */
void buttons_texture_context_compute(const struct bContext *C, struct SpaceProperties *sbuts);
/* buttons_ops.c */
void BUTTONS_OT_start_filter(struct wmOperatorType *ot);
void BUTTONS_OT_clear_filter(struct wmOperatorType *ot);
void BUTTONS_OT_toggle_pin(struct wmOperatorType *ot);
void BUTTONS_OT_file_browse(struct wmOperatorType *ot);
void BUTTONS_OT_directory_browse(struct wmOperatorType *ot);

View File

@ -38,6 +38,7 @@
#include "BKE_context.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_screen.h"
#include "WM_api.h"
#include "WM_types.h"
@ -52,6 +53,65 @@
#include "buttons_intern.h" /* own include */
/* -------------------------------------------------------------------- */
/** \name Start / Clear Seach Filter Operators
*
* \note Almost a duplicate of the file browser operator #FILE_OT_start_filter.
* \{ */
static int buttons_start_filter_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceProperties *space = CTX_wm_space_properties(C);
ScrArea *area = CTX_wm_area(C);
ARegion *region = BKE_area_find_region_type(area, RGN_TYPE_HEADER);
ARegion *region_ctx = CTX_wm_region(C);
CTX_wm_region_set(C, region);
UI_textbutton_activate_rna(C, region, space, "search_filter");
CTX_wm_region_set(C, region_ctx);
return OPERATOR_FINISHED;
}
void BUTTONS_OT_start_filter(struct wmOperatorType *ot)
{
/* Identifiers. */
ot->name = "Filter";
ot->description = "Start entering filter text";
ot->idname = "BUTTONS_OT_start_filter";
/* Callbacks. */
ot->exec = buttons_start_filter_exec;
ot->poll = ED_operator_buttons_active;
}
static int buttons_clear_filter_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceProperties *space = CTX_wm_space_properties(C);
space->runtime->search_string[0] = '\0';
ScrArea *area = CTX_wm_area(C);
ED_region_search_filter_update(area, CTX_wm_region(C));
ED_area_tag_redraw(area);
return OPERATOR_FINISHED;
}
void BUTTONS_OT_clear_filter(struct wmOperatorType *ot)
{
/* Identifiers. */
ot->name = "Clear Filter";
ot->description = "Clear the search filter";
ot->idname = "BUTTONS_OT_clear_filter";
/* Callbacks. */
ot->exec = buttons_clear_filter_exec;
ot->poll = ED_operator_buttons_active;
}
/** \} */
/* -------------------------------------------------------------------- */
/** \name Pin ID Operator
* \{ */

View File

@ -329,6 +329,8 @@ static void buttons_main_region_listener(wmWindow *UNUSED(win),
static void buttons_operatortypes(void)
{
WM_operatortype_append(BUTTONS_OT_start_filter);
WM_operatortype_append(BUTTONS_OT_clear_filter);
WM_operatortype_append(BUTTONS_OT_toggle_pin);
WM_operatortype_append(BUTTONS_OT_context_menu);
WM_operatortype_append(BUTTONS_OT_file_browse);