Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/interface/interface_handlers.c')
-rw-r--r--source/blender/editors/interface/interface_handlers.c136
1 files changed, 58 insertions, 78 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index c02bbafce15..f4400d2d7db 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -107,12 +107,6 @@ typedef enum uiHandleButtonState {
BUTTON_STATE_EXIT
} uiHandleButtonState;
-typedef enum uiButtonJumpType {
- BUTTON_EDIT_JUMP_NONE,
- BUTTON_EDIT_JUMP_DELIM,
- BUTTON_EDIT_JUMP_ALL
-} uiButtonJumpType;
-
typedef struct uiHandleButtonData {
wmWindowManager *wm;
wmWindow *window;
@@ -266,7 +260,7 @@ static int ui_is_a_warp_but(uiBut *but)
}
/* file selectors are exempt from utf-8 checks */
-int ui_is_but_utf8(uiBut *but)
+static int ui_is_utf8_but(uiBut *but)
{
if (but->rnaprop) {
const int subtype= RNA_property_subtype(but->rnaprop);
@@ -1169,10 +1163,7 @@ static void ui_but_copy_paste(bContext *C, uiBut *but, uiHandleButtonData *data,
}
else {
button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
-
- if(ui_is_but_utf8(but)) BLI_strncpy_utf8(active_data->str, buf, active_data->maxlen);
- else BLI_strncpy(active_data->str, buf, active_data->maxlen);
-
+ BLI_strncpy(active_data->str, buf, active_data->maxlen);
if(but->type == SEARCH_MENU) {
/* else uiSearchboxData.active member is not updated [#26856] */
ui_searchbox_update(C, data->searchbox, but, 1);
@@ -1291,18 +1282,18 @@ static int ui_textedit_step_prev_utf8(const char *str, size_t UNUSED(maxlen), sh
static void ui_textedit_step_utf8(const char *str, size_t maxlen,
short *pos, const char direction,
- uiButtonJumpType jump)
+ const short do_jump, const short do_all)
{
const short pos_prev= *pos;
if(direction) { /* right*/
- if(jump != BUTTON_EDIT_JUMP_NONE) {
+ if(do_jump) {
/* jump between special characters (/,\,_,-, etc.),
* look at function test_special_char() for complete
* list of special character, ctr -> */
while((*pos) < maxlen) {
if (ui_textedit_step_next_utf8(str, maxlen, pos)) {
- if((jump != BUTTON_EDIT_JUMP_ALL) && test_special_char(str[(*pos)])) break;
+ if(!do_all && test_special_char(str[(*pos)])) break;
}
else {
break; /* unlikely but just incase */
@@ -1314,7 +1305,7 @@ static void ui_textedit_step_utf8(const char *str, size_t maxlen,
}
}
else { /* left */
- if(jump != BUTTON_EDIT_JUMP_NONE) {
+ if(do_jump) {
/* left only: compensate for index/change in direction */
ui_textedit_step_prev_utf8(str, maxlen, pos);
@@ -1323,7 +1314,7 @@ static void ui_textedit_step_utf8(const char *str, size_t maxlen,
* list of special character, ctr -> */
while ((*pos) > 0) {
if (ui_textedit_step_prev_utf8(str, maxlen, pos)) {
- if((jump != BUTTON_EDIT_JUMP_ALL) && test_special_char(str[(*pos)])) break;
+ if(!do_all && test_special_char(str[(*pos)])) break;
}
else {
break;
@@ -1437,28 +1428,27 @@ static void ui_textedit_set_cursor_select(uiBut *but, uiHandleButtonData *data,
ui_check_but(but);
}
-/* note: utf8 & ascii funcs should be merged */
-static int ui_textedit_type_utf8(uiBut *but, uiHandleButtonData *data, const char utf8_buf[6])
+static int ui_textedit_type_ascii(uiBut *but, uiHandleButtonData *data, char ascii)
{
char *str;
- int len, changed= 0;
+ int len, x, changed= 0;
str= data->str;
len= strlen(str);
if(len-(but->selend - but->selsta)+1 <= data->maxlen) {
- int step= BLI_strnlen(utf8_buf, sizeof(utf8_buf));
-
/* type over the current selection */
- if ((but->selend - but->selsta) > 0) {
+ if ((but->selend - but->selsta) > 0)
changed= ui_textedit_delete_selection(but, data);
- len= strlen(str);
- }
- if(len + step < data->maxlen) {
- memmove(&str[but->pos + step], &str[but->pos], (len + 1) - but->pos);
- memcpy(&str[but->pos], utf8_buf, step * sizeof(char));
- but->pos += step;
+ len= strlen(str);
+ if(len+1 < data->maxlen) {
+ for(x= data->maxlen; x>but->pos; x--)
+ str[x]= str[x-1];
+ str[but->pos]= ascii;
+ str[len+1]= '\0';
+
+ but->pos++;
changed= 1;
}
}
@@ -1466,13 +1456,7 @@ static int ui_textedit_type_utf8(uiBut *but, uiHandleButtonData *data, const cha
return changed;
}
-static int ui_textedit_type_ascii(uiBut *but, uiHandleButtonData *data, char ascii)
-{
- char utf8_buf[6]= {ascii, '\0'};
- return ui_textedit_type_utf8(but, data, utf8_buf);
-}
-
-static void ui_textedit_move(uiBut *but, uiHandleButtonData *data, int direction, int select, uiButtonJumpType jump)
+static void ui_textedit_move(uiBut *but, uiHandleButtonData *data, int direction, int select, int jump, int jump_all)
{
const char *str= data->str;
const int len= strlen(str);
@@ -1481,7 +1465,7 @@ static void ui_textedit_move(uiBut *but, uiHandleButtonData *data, int direction
/* special case, quit selection and set cursor */
if (has_sel && !select) {
- if (jump == BUTTON_EDIT_JUMP_ALL) {
+ if (jump_all) {
but->selsta = but->selend= but->pos = direction ? len : 0;
}
else {
@@ -1495,7 +1479,7 @@ static void ui_textedit_move(uiBut *but, uiHandleButtonData *data, int direction
data->selextend = 0;
}
else {
- ui_textedit_step_utf8(str, len, &but->pos, direction, jump);
+ ui_textedit_step_utf8(str, len, &but->pos, direction, jump, jump_all);
if(select) {
/* existing selection */
@@ -1544,33 +1528,35 @@ static void ui_textedit_move(uiBut *but, uiHandleButtonData *data, int direction
}
}
-static int ui_textedit_delete(uiBut *but, uiHandleButtonData *data, int direction, uiButtonJumpType jump)
+static int ui_textedit_delete(uiBut *but, uiHandleButtonData *data, int direction, const int all, const int jump)
{
char *str= data->str;
const int len= strlen(str);
- int changed= 0;
+ int x, changed= 0;
- if(jump == BUTTON_EDIT_JUMP_ALL) {
+ if(all) {
if(len) changed=1;
- str[0]= '\0';
+ str[0]= 0;
but->pos= 0;
}
else if(direction) { /* delete */
if ((but->selend - but->selsta) > 0) {
changed= ui_textedit_delete_selection(but, data);
}
- else if (but->pos>=0 && but->pos<len) {
+ else if(but->pos>=0 && but->pos<len) {
short pos= but->pos;
int step;
- ui_textedit_step_utf8(str, len, &pos, direction, jump);
+ ui_textedit_step_utf8(str, len, &pos, direction, jump, all);
step= pos - but->pos;
- memmove(&str[but->pos], &str[but->pos + step], (len + 1) - but->pos);
+ for(x=but->pos; x<len; x++)
+ str[x]= str[x+step];
+ str[len-step]='\0';
changed= 1;
}
}
else { /* backspace */
- if (len != 0) {
+ if(len!=0) {
if ((but->selend - but->selsta) > 0) {
changed= ui_textedit_delete_selection(but, data);
}
@@ -1578,9 +1564,13 @@ static int ui_textedit_delete(uiBut *but, uiHandleButtonData *data, int directio
short pos= but->pos;
int step;
- ui_textedit_step_utf8(str, len, &pos, direction, jump);
+ ui_textedit_step_utf8(str, len, &pos, direction, jump, all);
step= but->pos - pos;
- memmove(&str[but->pos - step], &str[but->pos], (len + 1) - but->pos);
+
+ for(x=but->pos; x<len; x++)
+ str[x-step]= str[x];
+ str[len-step]='\0';
+
but->pos -= step;
changed= 1;
}
@@ -1690,9 +1680,19 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data)
ui_get_but_string(but, data->str, data->maxlen);
if(ELEM3(but->type, NUM, NUMABS, NUMSLI)) {
- ui_convert_to_unit_alt_name(but, data->str, data->maxlen);
+ /* XXX: we dont have utf editing yet so for numbers its best to strip out utf chars
+ * this is so the deg' synbol isnt included in number editing fields: bug 22274 */
+ int i;
+ for(i=0; data->str[i]; i++) {
+ if(!isascii(data->str[i])) {
+ /* no stripping actually: just convert to alt name */
+ ui_convert_to_unit_alt_name(but, data->str, data->maxlen);
+ break;
+ }
+ }
}
-
+
+
data->origstr= BLI_strdup(data->str);
data->selextend= 0;
data->selstartx= 0;
@@ -1717,7 +1717,7 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data)
static void ui_textedit_end(bContext *C, uiBut *but, uiHandleButtonData *data)
{
if(but) {
- if(ui_is_but_utf8(but)) {
+ if(ui_is_utf8_but(but)) {
int strip= BLI_utf8_invalid_strip(but->editstr, strlen(but->editstr));
/* not a file?, strip non utf-8 chars */
if(strip) {
@@ -1869,11 +1869,11 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle
}
break;
case RIGHTARROWKEY:
- ui_textedit_move(but, data, 1, event->shift, event->ctrl ? BUTTON_EDIT_JUMP_DELIM : BUTTON_EDIT_JUMP_NONE);
+ ui_textedit_move(but, data, 1, event->shift, event->ctrl, FALSE);
retval= WM_UI_HANDLER_BREAK;
break;
case LEFTARROWKEY:
- ui_textedit_move(but, data, 0, event->shift, event->ctrl ? BUTTON_EDIT_JUMP_DELIM : BUTTON_EDIT_JUMP_NONE);
+ ui_textedit_move(but, data, 0, event->shift, event->ctrl, FALSE);
retval= WM_UI_HANDLER_BREAK;
break;
case DOWNARROWKEY:
@@ -1883,7 +1883,7 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle
}
/* pass on purposedly */
case ENDKEY:
- ui_textedit_move(but, data, 1, event->shift, BUTTON_EDIT_JUMP_ALL);
+ ui_textedit_move(but, data, 1, event->shift, TRUE, TRUE);
retval= WM_UI_HANDLER_BREAK;
break;
case UPARROWKEY:
@@ -1893,7 +1893,7 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle
}
/* pass on purposedly */
case HOMEKEY:
- ui_textedit_move(but, data, 0, event->shift, BUTTON_EDIT_JUMP_ALL);
+ ui_textedit_move(but, data, 0, event->shift, TRUE, TRUE);
retval= WM_UI_HANDLER_BREAK;
break;
case PADENTER:
@@ -1902,12 +1902,12 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle
retval= WM_UI_HANDLER_BREAK;
break;
case DELKEY:
- changed= ui_textedit_delete(but, data, 1, event->ctrl ? BUTTON_EDIT_JUMP_DELIM : BUTTON_EDIT_JUMP_NONE);
+ changed= ui_textedit_delete(but, data, 1, 0, event->ctrl);
retval= WM_UI_HANDLER_BREAK;
break;
case BACKSPACEKEY:
- changed= ui_textedit_delete(but, data, 0, event->shift ? BUTTON_EDIT_JUMP_ALL : (event->ctrl ? BUTTON_EDIT_JUMP_DELIM : BUTTON_EDIT_JUMP_NONE));
+ changed= ui_textedit_delete(but, data, 0, event->shift, event->ctrl);
retval= WM_UI_HANDLER_BREAK;
break;
@@ -1930,7 +1930,7 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle
break;
}
- if((event->ascii || event->utf8_buf[0]) && (retval == WM_UI_HANDLER_CONTINUE)) {
+ if(event->ascii && (retval == WM_UI_HANDLER_CONTINUE)) {
char ascii = event->ascii;
/* exception that's useful for number buttons, some keyboard
@@ -1939,16 +1939,7 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle
if(event->type == PADPERIOD && ascii == ',')
ascii = '.';
- if(event->utf8_buf[0]) {
- /* keep this printf until utf8 is well tested */
- printf("%s: utf8 char '%s'\n", __func__, event->utf8_buf);
- // strcpy(event->utf8_buf, "12345");
- changed= ui_textedit_type_utf8(but, data, event->utf8_buf);
- }
- else {
- changed= ui_textedit_type_ascii(but, data, ascii);
- }
-
+ changed= ui_textedit_type_ascii(but, data, ascii);
retval= WM_UI_HANDLER_BREAK;
}
@@ -4447,17 +4438,6 @@ static int ui_but_menu(bContext *C, uiBut *but)
}
}
-#ifdef WITH_PYTHON_UI_INFO
- if (but->py_dbg_ln != -1) {
- PointerRNA ptr_props;
-
- WM_operator_properties_create(&ptr_props, "WM_OT_text_edit");
- RNA_string_set(&ptr_props, "filepath", but->py_dbg_fn);
- RNA_int_set(&ptr_props, "line", but->py_dbg_ln);
- uiItemFullO(layout, "WM_OT_text_edit", "Edit Source", ICON_NONE, ptr_props.data, WM_OP_EXEC_DEFAULT, 0);
- }
-#endif /* WITH_PYTHON_UI_INFO */
-
uiPupMenuEnd(C, pup);
return 1;