Пример #1
0
static wmKeyMapItem *rna_KeyMap_item_new(wmKeyMap *km,
                                         ReportList *reports,
                                         const char *idname,
                                         int type,
                                         int value,
                                         bool any,
                                         bool shift,
                                         bool ctrl,
                                         bool alt,
                                         bool oskey,
                                         int keymodifier,
                                         bool head)
{
  /*  wmWindowManager *wm = CTX_wm_manager(C); */
  wmKeyMapItem *kmi = NULL;
  char idname_bl[OP_MAX_TYPENAME];
  int modifier = 0;

  /* only on non-modal maps */
  if (km->flag & KEYMAP_MODAL) {
    BKE_report(reports, RPT_ERROR, "Not a non-modal keymap");
    return NULL;
  }

  WM_operator_bl_idname(idname_bl, idname);

  if (shift)
    modifier |= KM_SHIFT;
  if (ctrl)
    modifier |= KM_CTRL;
  if (alt)
    modifier |= KM_ALT;
  if (oskey)
    modifier |= KM_OSKEY;

  if (any)
    modifier = KM_ANY;

  /* create keymap item */
  kmi = WM_keymap_add_item(km, idname_bl, type, value, modifier, keymodifier);

  /* [#32437] allow scripts to define hotkeys that get added to start of keymap
   *          so that they stand a chance against catch-all defines later on
   */
  if (head) {
    BLI_remlink(&km->items, kmi);
    BLI_addhead(&km->items, kmi);
  }

  return kmi;
}
Пример #2
0
static PointerRNA rna_KeyMap_item_find_from_operator(ID *id,
                                                     wmKeyMap *km,
                                                     const char *idname,
                                                     PointerRNA *properties,
                                                     int include_mask,
                                                     int exclude_mask)
{
  char idname_bl[OP_MAX_TYPENAME];
  WM_operator_bl_idname(idname_bl, idname);

  wmKeyMapItem *kmi = WM_key_event_operator_from_keymap(
      km, idname_bl, properties->data, include_mask, exclude_mask);
  PointerRNA kmi_ptr;
  RNA_pointer_create(id, &RNA_KeyMapItem, kmi, &kmi_ptr);
  return kmi_ptr;
}
Пример #3
0
static PointerRNA rna_KeyConfig_find_item_from_operator(
        wmWindowManager *wm,
        bContext *C,
        const char *idname,
        int opcontext,
        PointerRNA *properties,
        bool is_hotkey,
        PointerRNA *km_ptr)
{
	char idname_bl[OP_MAX_TYPENAME];
	WM_operator_bl_idname(idname_bl, idname);

	wmKeyMap *km = NULL;
	wmKeyMapItem *kmi = WM_key_event_operator(C, idname_bl, opcontext, properties->data, (bool)is_hotkey, &km);
	PointerRNA kmi_ptr;
	RNA_pointer_create(&wm->id, &RNA_KeyMap, km, km_ptr);
	RNA_pointer_create(&wm->id, &RNA_KeyMapItem, kmi, &kmi_ptr);
	return kmi_ptr;
}
Пример #4
0
static wmKeyMapItem *rna_KeyMap_item_new(wmKeyMap *km, ReportList *reports, const char *idname, int type, int value,
                                         int any, int shift, int ctrl, int alt, int oskey, int keymodifier)
{
/*	wmWindowManager *wm = CTX_wm_manager(C); */
	char idname_bl[OP_MAX_TYPENAME];
	int modifier = 0;

	/* only on non-modal maps */
	if (km->flag & KEYMAP_MODAL) {
		BKE_report(reports, RPT_ERROR, "Not a non-modal keymap");
		return NULL;
	}

	WM_operator_bl_idname(idname_bl, idname);

	if (shift) modifier |= KM_SHIFT;
	if (ctrl) modifier |= KM_CTRL;
	if (alt) modifier |= KM_ALT;
	if (oskey) modifier |= KM_OSKEY;

	if (any) modifier = KM_ANY;

	return WM_keymap_add_item(km, idname_bl, type, value, modifier, keymodifier);
}