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:
authorWalid Shouman <eng.walidshouman@gmail.com>2013-12-09 07:20:53 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-12-09 07:25:03 +0400
commitc6620905a7c812aefac128f95960a38123b5af38 (patch)
treeb4a038cf5314dea08e9fe919b38b15fb5a27bb5b /source/blender/windowmanager
parentbac86a08259e23e6e1a8ff6c1ba4efdfe53a48fd (diff)
Tooltips: abbreviate long python operator tooltips
Some tooltips would end up containing long string/array args spanning the screen.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_api.h1
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c41
2 files changed, 42 insertions, 0 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 26294dd5876..d8f558bf2c9 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -278,6 +278,7 @@ char *WM_operator_pystring_ex(struct bContext *C, struct wmOperator *op,
struct wmOperatorType *ot, struct PointerRNA *opptr);
char *WM_operator_pystring(struct bContext *C, struct wmOperator *op,
const bool all_args, const bool macro_args);
+bool WM_operator_pystring_abbreviate(char *str, int str_len_max);
char *WM_prop_pystring_assign(struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA *prop, int index);
void WM_operator_bl_idname(char *to, const char *from);
void WM_operator_py_idname(char *to, const char *from);
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 91790f7d8d5..ac32d16a23b 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -611,6 +611,47 @@ char *WM_operator_pystring(bContext *C, wmOperator *op,
return WM_operator_pystring_ex(C, op, all_args, macro_args, op->type, op->ptr);
}
+
+/**
+ * \return true if the string was shortened
+ */
+bool WM_operator_pystring_abbreviate(char *str, int str_len_max)
+{
+ const int str_len = strlen(str);
+ const char *parens_start = strchr(str, '(');
+
+ if (parens_start) {
+ const int parens_start_pos = parens_start - str;
+ const char *parens_end = strrchr(parens_start + 1, ')');
+
+ if (parens_end) {
+ const int parens_len = parens_end - parens_start;
+
+ if (parens_len > str_len_max) {
+ const char *comma_first = strchr(parens_start, ',');
+
+ /* truncate after the first comma */
+ if (comma_first) {
+ const char end_str[] = " ... )";
+ const int end_str_len = sizeof(end_str) - 1;
+
+ /* leave a place for the first argument*/
+ const int new_str_len = (comma_first - parens_start) + 1;
+
+ if (str_len >= new_str_len + parens_start_pos + end_str_len + 1) {
+ /* append " ... )" to the string after the comma */
+ memcpy(str + new_str_len + parens_start_pos, end_str, end_str_len + 1);
+
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
/* return NULL if no match is found */
#if 0
static char *wm_prop_pystring_from_context(bContext *C, PointerRNA *ptr, PropertyRNA *prop, int index)