Blender V5.0
interface_region_search.cc File Reference
#include "MEM_guardedalloc.h"
#include <cstdarg>
#include <cstdlib>
#include <cstring>
#include "DNA_userdef_types.h"
#include "BLI_listbase.h"
#include "BLI_math_base.h"
#include "BLI_rect.h"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_task.hh"
#include "BLI_utildefines.h"
#include "BKE_context.hh"
#include "BKE_screen.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "RNA_access.hh"
#include "UI_interface_icons.hh"
#include "UI_view2d.hh"
#include "BLT_translation.hh"
#include "ED_screen.hh"
#include "BLF_api.hh"
#include "GPU_state.hh"
#include "interface_intern.hh"
#include "interface_regions_intern.hh"

Go to the source code of this file.

Classes

struct  uiSearchItems
struct  uiSearchboxData

Search Box Creation

#define SEARCH_ITEMS   10
bool UI_search_item_add (uiSearchItems *items, const StringRef name, void *poin, int iconid, const int but_flag, const uint8_t name_prefix_offset)
int UI_searchbox_size_y ()
int UI_searchbox_size_x ()
static int ui_searchbox_size_x_from_items (const uiSearchItems &items)
int UI_searchbox_size_x_guess (const bContext *C, const uiButSearchUpdateFn update_fn, void *arg)
int UI_search_items_find_index (const uiSearchItems *items, const char *name)
static void ui_searchbox_select (bContext *C, ARegion *region, uiBut *but, int step)
static void ui_searchbox_butrect (rcti *r_rect, uiSearchboxData *data, int itemnr)
int ui_searchbox_find_index (ARegion *region, const char *name)
bool ui_searchbox_inside (ARegion *region, const int xy[2])
bool ui_searchbox_apply (uiBut *but, ARegion *region)
static ARegionwm_searchbox_tooltip_init (bContext *C, ARegion *region, int *, double *, bool *r_exit_on_event)
bool ui_searchbox_event (bContext *C, ARegion *region, uiBut *but, ARegion *butregion, const wmEvent *event)
static void ui_searchbox_update_fn (bContext *C, uiButSearch *but, const char *str, uiSearchItems *items)
void ui_searchbox_update (bContext *C, ARegion *region, uiBut *but, const bool reset)
int ui_searchbox_autocomplete (bContext *C, ARegion *region, uiBut *but, char *str)
static void ui_searchbox_draw_clip_tri_down (rcti *rect, const float zoom)
static void ui_searchbox_draw_clip_tri_up (rcti *rect, const float zoom)
static void ui_searchbox_region_draw_fn (const bContext *C, ARegion *region)
static void ui_searchbox_region_free_fn (ARegion *region)
static void ui_searchbox_region_listen_fn (const wmRegionListenerParams *params)
static void ui_searchbox_region_layout_fn (const bContext *C, ARegion *region)
static ARegionui_searchbox_create_generic_ex (bContext *C, ARegion *butregion, uiButSearch *but, const bool use_shortcut_sep)
ARegionui_searchbox_create_generic (bContext *C, ARegion *butregion, uiButSearch *search_but)
static void str_tolower_titlecaps_ascii (char *str, const size_t len)
static void ui_searchbox_region_draw_cb__operator (const bContext *, ARegion *region)
ARegionui_searchbox_create_operator (bContext *C, ARegion *butregion, uiButSearch *search_but)
void ui_searchbox_free (bContext *C, ARegion *region)
static void ui_searchbox_region_draw_cb__menu (const bContext *, ARegion *)
ARegionui_searchbox_create_menu (bContext *C, ARegion *butregion, uiButSearch *search_but)
void ui_but_search_refresh (uiButSearch *but)

Detailed Description

Search Box Region & Interaction

Definition in file interface_region_search.cc.

Macro Definition Documentation

◆ SEARCH_ITEMS

#define SEARCH_ITEMS   10

Function Documentation

◆ str_tolower_titlecaps_ascii()

void str_tolower_titlecaps_ascii ( char * str,
const size_t len )
static

Similar to Python's str.title except...

  • we know words are upper case and ASCII only.
  • _ are replaced by spaces.

Definition at line 1063 of file interface_region_search.cc.

References ELEM, i, len, and str.

Referenced by ui_searchbox_region_draw_cb__operator().

◆ ui_but_search_refresh()

◆ UI_search_item_add()

bool UI_search_item_add ( uiSearchItems * items,
blender::StringRef name,
void * poin,
int iconid,
int but_flag,
uint8_t name_prefix_offset )

Public function exported for functions that use ButType::SearchMenu.

Use inside searchfunc to add items.

Parameters
itemsStores the items.
nameText to display for the item.
poinOpaque pointer (for use by the caller).
iconidThe icon, #ICON_NONE for no icon.
but_flagButton flags (uiBut.flag) indicating the state of the item, typically UI_BUT_DISABLED, UI_BUT_INACTIVE or UI_BUT_HAS_SEP_CHAR.
Returns
false if there is nothing to add.

Definition at line 104 of file interface_region_search.cc.

References uiSearchItems::active, uiSearchItems::autocpl, BLI_assert, uiSearchItems::but_flags, uiSearchItems::has_icon, uiSearchItems::icons, uiSearchItems::maxitem, uiSearchItems::maxstrlen, MEM_callocN(), uiSearchItems::more, name, uiSearchItems::name_prefix_offsets, uiSearchItems::names, uiSearchItems::offset_i, uiSearchItems::pointers, uiSearchItems::totitem, UI_autocomplete_update_name(), UI_BUT_DISABLED, UI_BUT_HAS_SEP_CHAR, UI_BUT_INACTIVE, and UI_BUT_REDALERT.

Referenced by add_collection_search_item(), blender::ui::attribute_search_add_items(), blender::ui::attribute_search_item_add(), blender::ui::grease_pencil_layer_search_add_items(), blender::ed::space_node::grid_search_item_add(), id_search_add(), blender::ed::space_node::link_drag_search_update_fn(), menu_search_update_fn(), blender::ed::outliner::merged_element_search_fn_recursive(), blender::ed::space_node::node_find_update_fn(), operator_enum_search_update_fn(), operator_search_update_fn(), and blender::ed::space_node::volume_grid_search_add_items().

◆ UI_search_items_find_index()

int UI_search_items_find_index ( const uiSearchItems * items,
const char * name )

◆ ui_searchbox_apply()

bool ui_searchbox_apply ( uiBut * but,
ARegion * region )

◆ ui_searchbox_autocomplete()

◆ ui_searchbox_butrect()

◆ ui_searchbox_create_generic()

ARegion * ui_searchbox_create_generic ( bContext * C,
ARegion * butregion,
uiButSearch * search_but )

Search-box for string button.

Definition at line 1052 of file interface_region_search.cc.

References C, and ui_searchbox_create_generic_ex().

Referenced by template_common_search_menu(), ui_but_add_search(), UI_but_func_search_set(), and uiDefSearchButO_ptr().

◆ ui_searchbox_create_generic_ex()

◆ ui_searchbox_create_menu()

ARegion * ui_searchbox_create_menu ( bContext * C,
ARegion * butregion,
uiButSearch * search_but )

◆ ui_searchbox_create_operator()

ARegion * ui_searchbox_create_operator ( bContext * C,
ARegion * butregion,
uiButSearch * search_but )

◆ ui_searchbox_draw_clip_tri_down()

void ui_searchbox_draw_clip_tri_down ( rcti * rect,
const float zoom )
static

Draws a downwards facing triangle.

Parameters
rectRectangle under which the triangle icon is drawn. Usually from the last result item that can be displayed.

Definition at line 629 of file interface_region_search.cc.

References BLI_rcti_cent_x(), GPU_blend(), GPU_BLEND_ALPHA, GPU_BLEND_NONE, U, UI_icon_draw_ex(), UI_ICON_SIZE, UI_NO_ICON_OVERLAY_TEXT, UI_SEARCHBOX_TRIA_H, x, y, and rcti::ymin.

Referenced by ui_searchbox_region_draw_cb__operator(), and ui_searchbox_region_draw_fn().

◆ ui_searchbox_draw_clip_tri_up()

void ui_searchbox_draw_clip_tri_up ( rcti * rect,
const float zoom )
static

Draws an upwards facing triangle.

Parameters
rectRectangle above which the triangle icon is drawn. Usually from the first result item that can be displayed.

Definition at line 646 of file interface_region_search.cc.

References BLI_rcti_cent_x(), GPU_blend(), GPU_BLEND_ALPHA, GPU_BLEND_NONE, U, UI_icon_draw_ex(), UI_ICON_SIZE, UI_NO_ICON_OVERLAY_TEXT, UI_SEARCHBOX_TRIA_H, x, y, and rcti::ymax.

Referenced by ui_searchbox_region_draw_cb__operator(), and ui_searchbox_region_draw_fn().

◆ ui_searchbox_event()

◆ ui_searchbox_find_index()

int ui_searchbox_find_index ( ARegion * region,
const char * name )

Definition at line 328 of file interface_region_search.cc.

References data, name, ARegion::regiondata, and UI_search_items_find_index().

Referenced by ui_textedit_end().

◆ ui_searchbox_free()

void ui_searchbox_free ( bContext * C,
ARegion * region )

Definition at line 1185 of file interface_region_search.cc.

References C, CTX_wm_screen(), and ui_region_temp_remove().

Referenced by ui_textedit_end().

◆ ui_searchbox_inside()

bool ui_searchbox_inside ( ARegion * region,
const int xy[2] )

◆ ui_searchbox_region_draw_cb__menu()

void ui_searchbox_region_draw_cb__menu ( const bContext * ,
ARegion *  )
static

Definition at line 1190 of file interface_region_search.cc.

Referenced by ui_searchbox_create_menu().

◆ ui_searchbox_region_draw_cb__operator()

◆ ui_searchbox_region_draw_fn()

◆ ui_searchbox_region_free_fn()

void ui_searchbox_region_free_fn ( ARegion * region)
static

Definition at line 825 of file interface_region_search.cc.

References data, MEM_freeN(), and ARegion::regiondata.

Referenced by ui_searchbox_create_generic_ex().

◆ ui_searchbox_region_layout_fn()

◆ ui_searchbox_region_listen_fn()

void ui_searchbox_region_listen_fn ( const wmRegionListenerParams * params)
static

Definition at line 846 of file interface_region_search.cc.

References data, and params.

Referenced by ui_searchbox_create_generic_ex().

◆ ui_searchbox_select()

void ui_searchbox_select ( bContext * C,
ARegion * region,
uiBut * but,
int step )
static

◆ UI_searchbox_size_x()

int UI_searchbox_size_x ( )

◆ ui_searchbox_size_x_from_items()

◆ UI_searchbox_size_x_guess()

int UI_searchbox_size_x_guess ( const bContext * C,
const uiButSearchUpdateFn update_fn,
void * arg )

Guess a good width for the search box based on the searchable items.

Note
When used with a menu that does full refreshes, it might be beneficial to cache this size because recomputing it is potentially expensive.

Definition at line 210 of file interface_region_search.cc.

References C, Array< T, InlineBufferCapacity, Allocator >::data(), i, uiSearchItems::icons, uiSearchItems::maxitem, uiSearchItems::maxstrlen, MEM_SAFE_FREE, uiSearchItems::name_prefix_offsets, uiSearchItems::names, and ui_searchbox_size_x_from_items().

Referenced by blender::ed::space_node::node_find_menu(), and template_common_search_menu().

◆ UI_searchbox_size_y()

◆ ui_searchbox_update()

◆ ui_searchbox_update_fn()

void ui_searchbox_update_fn ( bContext * C,
uiButSearch * but,
const char * str,
uiSearchItems * items )
static

◆ wm_searchbox_tooltip_init()

ARegion * wm_searchbox_tooltip_init ( bContext * C,
ARegion * region,
int * ,
double * ,
bool * r_exit_on_event )
static