559
559
/* ************** BLOCK ENDING FUNCTION ************* */
561
561
/* NOTE: if but->poin is allocated memory for every defbut, things fail... */
562
static bool ui_but_equals_old(uiBut *but, uiBut *oldbut)
562
static bool ui_but_equals_old(const uiBut *but, const uiBut *oldbut)
564
564
/* various properties are being compared here, hopefully sufficient
565
565
* to catch all cases, but it is simple to add more checks later */
566
566
if (but->retval != oldbut->retval) return false;
567
567
if (but->rnapoin.data != oldbut->rnapoin.data) return false;
568
if (but->rnaprop != oldbut->rnaprop)
569
if (but->rnaindex != oldbut->rnaindex) return false;
568
if (but->rnaprop != oldbut->rnaprop && but->rnaindex != oldbut->rnaindex) return false;
570
569
if (but->func != oldbut->func) return false;
571
570
if (but->funcN != oldbut->funcN) return false;
572
571
if (oldbut->func_arg1 != oldbut && but->func_arg1 != oldbut->func_arg1) return false;
573
572
if (oldbut->func_arg2 != oldbut && but->func_arg2 != oldbut->func_arg2) return false;
574
if (!but->funcN && ((but->poin != oldbut->poin && (uiBut *)oldbut->poin != oldbut) || but->pointype != oldbut->pointype)) return false;
573
if (!but->funcN && ((but->poin != oldbut->poin && (uiBut *)oldbut->poin != oldbut) ||
574
(but->pointype != oldbut->pointype))) return false;
575
575
if (but->optype != oldbut->optype) return false;
986
994
IDPropertyTemplate val = {0};
987
995
prop_path = IDP_New(IDP_GROUP, &val, __func__);
988
prop_path_value = IDP_NewString(data_path, "data_path", strlen(data_path) + 1); /* len + 1, or else will be truncated */
996
prop_path_value = IDP_NewString(data_path, "data_path", strlen(data_path) + 1);
989
997
IDP_AddToGroup(prop_path, prop_path_value);
991
999
/* check each until one works... */
1644
1652
if (RNA_property_editable(&but->rnapoin, prop)) {
1645
1653
switch (RNA_property_type(prop)) {
1646
1654
case PROP_BOOLEAN:
1647
if (RNA_property_array_length(&but->rnapoin, prop))
1655
if (RNA_property_array_check(prop))
1648
1656
RNA_property_boolean_set_index(&but->rnapoin, prop, but->rnaindex, value);
1650
1658
RNA_property_boolean_set(&but->rnapoin, prop, value);
1653
if (RNA_property_array_length(&but->rnapoin, prop))
1661
if (RNA_property_array_check(prop))
1654
1662
RNA_property_int_set_index(&but->rnapoin, prop, but->rnaindex, (int)value);
1656
1664
RNA_property_int_set(&but->rnapoin, prop, (int)value);
1658
1666
case PROP_FLOAT:
1659
if (RNA_property_array_length(&but->rnapoin, prop))
1667
if (RNA_property_array_check(prop))
1660
1668
RNA_property_float_set_index(&but->rnapoin, prop, but->rnaindex, value);
1662
1670
RNA_property_float_set(&but->rnapoin, prop, value);
1807
1815
static float ui_get_but_step_unit(uiBut *but, float step_default)
1809
1817
int unit_type = RNA_SUBTYPE_UNIT_VALUE(uiButGetUnitType(but));
1812
1820
step = bUnit_ClosestScalar(ui_get_but_scale_unit(but, step_default), but->block->unit->system, unit_type);
1814
if (step > 0.0f) { /* -1 is an error value */
1815
return (float)((double)step / ui_get_but_scale_unit(but, 1.0)) * 100.0f;
1822
/* -1 is an error value */
1824
BLI_assert(step > 0.0);
1825
return (float)(step / ui_get_but_scale_unit(but, 1.0)) * 100.0f;
1818
1828
return step_default;
2050
void ui_set_but_default(bContext *C, short all)
2060
void ui_set_but_default(bContext *C, const bool all)
2062
const char *opstring = "UI_OT_reset_default_button";
2052
2063
PointerRNA ptr;
2054
WM_operator_properties_create(&ptr, "UI_OT_reset_default_button");
2065
WM_operator_properties_create(&ptr, opstring);
2055
2066
RNA_boolean_set(&ptr, "all", all);
2056
WM_operator_name_call(C, "UI_OT_reset_default_button", WM_OP_EXEC_DEFAULT, &ptr);
2067
WM_operator_name_call(C, opstring, WM_OP_EXEC_DEFAULT, &ptr);
2057
2068
WM_operator_properties_free(&ptr);
2429
UI_GET_BUT_VALUE_INIT(but, value);
2438
if (!but->editstr) {
2439
UI_GET_BUT_VALUE_INIT(but, value);
2431
if (ui_is_but_float(but)) {
2432
if (value == (double) FLT_MAX) {
2433
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%sinf", but->str);
2435
else if (value == (double) -FLT_MAX) {
2436
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s-inf", but->str);
2438
/* support length type buttons */
2439
else if (ui_is_but_unit(but)) {
2440
char new_str[sizeof(but->drawstr)];
2441
ui_get_but_string_unit(but, new_str, sizeof(new_str), value, TRUE, -1);
2442
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%s", but->str, new_str);
2441
if (ui_is_but_float(but)) {
2442
if (value == (double) FLT_MAX) {
2443
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%sinf", but->str);
2445
else if (value == (double) -FLT_MAX) {
2446
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s-inf", but->str);
2448
/* support length type buttons */
2449
else if (ui_is_but_unit(but)) {
2450
char new_str[sizeof(but->drawstr)];
2451
ui_get_but_string_unit(but, new_str, sizeof(new_str), value, TRUE, -1);
2452
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%s", but->str, new_str);
2455
const int prec = ui_but_float_precision(but, value);
2456
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%.*f", but->str, prec, value);
2445
const int prec = ui_but_float_precision(but, value);
2446
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%.*f", but->str, prec, value);
2450
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%d", but->str, (int)value);
2454
PropertySubType pstype = RNA_property_subtype(but->rnaprop);
2456
if (pstype == PROP_PERCENTAGE)
2457
strcat(but->drawstr, "%");
2460
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%d", but->str, (int)value);
2464
PropertySubType pstype = RNA_property_subtype(but->rnaprop);
2466
if (pstype == PROP_PERCENTAGE)
2467
strcat(but->drawstr, "%");
2477
2488
if (!but->editstr) {
2478
2489
char str[UI_MAX_DRAW_STR];
2480
ui_get_but_string(but, str, UI_MAX_DRAW_STR - strlen(but->str));
2491
ui_get_but_string(but, str, UI_MAX_DRAW_STR);
2482
2492
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%s", but->str, str);
2487
BLI_strncpy(but->drawstr, but->str, UI_MAX_DRAW_STR);
2488
2499
if (but->flag & UI_SELECT) {
2489
strcat(but->drawstr, "Press a key");
2500
str = "Press a key";
2492
2503
UI_GET_BUT_VALUE_INIT(but, value);
2493
strcat(but->drawstr, WM_key_event_string((short)value));
2504
str = WM_key_event_string((short)value);
2506
BLI_snprintf(but->drawstr, UI_MAX_DRAW_STR, "%s%s", but->str, str);
2497
2509
case HOTKEYEVT:
2498
2510
if (but->flag & UI_SELECT) {
2499
but->drawstr[0] = '\0';
2501
2512
if (but->modifier_key) {
2502
2513
char *str = but->drawstr;
2514
but->drawstr[0] = '\0';
2504
2516
if (but->modifier_key & KM_SHIFT)
2505
2517
str += BLI_strcpy_rlen(str, "Shift ");
2863
2877
/* keep track of UI_interface.h */
2864
if (ELEM8(but->type, BLOCK, BUT, LABEL, PULLDOWN, ROUNDBOX, BUTM, SCROLL, SEPR)) {}
2878
if (ELEM9(but->type, BLOCK, BUT, LABEL, PULLDOWN, ROUNDBOX, LISTBOX, BUTM, SCROLL, SEPR)) {}
2865
2879
else if (but->type >= SEARCH_MENU) {}
2866
2880
else but->flag |= UI_BUT_UNDO;