[Bf-blender-cvs] [954326c333c] soc-2020-info-editor: Clog: add copy operators

Mateusz Grzeliński noreply at git.blender.org
Fri Aug 14 21:16:05 CEST 2020


Commit: 954326c333c459a48804d9865e628ce210fcc691
Author: Mateusz Grzeliński
Date:   Fri Aug 14 21:14:11 2020 +0200
Branches: soc-2020-info-editor
https://developer.blender.org/rB954326c333c459a48804d9865e628ce210fcc691

Clog: add copy operators

===================================================================

M	release/scripts/startup/bl_ui/space_info.py
M	source/blender/editors/space_info/info_clog.c
M	source/blender/editors/space_info/info_draw_clog.c
M	source/blender/editors/space_info/info_intern.h

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index 9e03a4337ec..a433d558adc 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -159,7 +159,10 @@ class INFO_MT_context_menu(Menu):
             layout.operator("info.report_copy", text="Copy")
             layout.operator("info.report_delete", text="Delete")
         else:
-            layout.operator("info.clog_copy", text="Copy Message")
+            layout.operator("info.clog_copy", text="Copy Visible").method = 'COPY_VISIBLE'
+            layout.operator("info.clog_copy", text="Copy Message").method = 'COPY_MESSAGE'
+            layout.operator("info.clog_copy", text="Copy Path").method = 'COPY_PATH'
+            layout.operator("info.clog_copy", text="Copy Basename").method = 'COPY_BASENAME'
             layout.operator("info.clog_delete", text="Delete (mockup)")
 
 
diff --git a/source/blender/editors/space_info/info_clog.c b/source/blender/editors/space_info/info_clog.c
index 5467441e172..ac275238f90 100644
--- a/source/blender/editors/space_info/info_clog.c
+++ b/source/blender/editors/space_info/info_clog.c
@@ -456,10 +456,18 @@ void INFO_OT_clog_delete(wmOperatorType *ot)
   /* properties */
 }
 
-static int clog_copy_exec(bContext *C, wmOperator *UNUSED(op))
+typedef enum ClogCopy {
+  CLOG_COPY_VISBLE = 0,
+  CLOG_COPY_MESSAGE,
+  CLOG_COPY_FILE_LINE,
+  CLOG_COPY_FILE_LINE_SHORT,
+} ClogCopy;
+
+static int clog_copy_exec(bContext *C, wmOperator *op)
 {
   SpaceInfo *sinfo = CTX_wm_space_info(C);
   CLG_LogRecordList *records = CLG_log_records_get();
+  ClogCopy copy_type = RNA_enum_get(op->ptr, "method");
   CLG_LogRecord *record;
 
   DynStr *buf_dyn = BLI_dynstr_new();
@@ -467,8 +475,31 @@ static int clog_copy_exec(bContext *C, wmOperator *UNUSED(op))
 
   for (record = records->first; record; record = record->next) {
     if (is_clog_record_visible(record, sinfo) && (record->flag & CLG_SELECT)) {
-      BLI_dynstr_append(buf_dyn, record->message);
-      BLI_dynstr_append(buf_dyn, "\n");
+      switch (copy_type) {
+        case CLOG_COPY_VISBLE: {
+          char *log = clog_record_sprintfN(record, sinfo);
+          BLI_dynstr_append(buf_dyn, log);
+          BLI_dynstr_append(buf_dyn, "\n");
+          break;
+        }
+        case CLOG_COPY_MESSAGE: {
+          BLI_dynstr_append(buf_dyn, record->message);
+          BLI_dynstr_append(buf_dyn, "\n");
+          break;
+        }
+        case CLOG_COPY_FILE_LINE: {
+          BLI_dynstr_append(buf_dyn, record->file_line);
+          BLI_dynstr_append(buf_dyn, "\n");
+          break;
+        }
+        case CLOG_COPY_FILE_LINE_SHORT: {
+          BLI_dynstr_append(buf_dyn, BLI_path_basename(record->file_line));
+          BLI_dynstr_append(buf_dyn, "\n");
+          break;
+        }
+        default:
+          BLI_assert(false);
+      }
     }
   }
 
@@ -496,4 +527,15 @@ void INFO_OT_clog_copy(wmOperatorType *ot)
   /*ot->flag = OPTYPE_REGISTER;*/
 
   /* properties */
+  static const EnumPropertyItem clog_copy_items[] = {
+      {CLOG_COPY_VISBLE, "COPY_VISIBLE", 0, "", ""},
+      {CLOG_COPY_MESSAGE, "COPY_MESSAGE", 0, "", ""},
+      {CLOG_COPY_FILE_LINE, "COPY_PATH", 0, "", ""},
+      {CLOG_COPY_FILE_LINE_SHORT, "COPY_BASENAME", 0, "", ""},
+      {0, NULL, 0, NULL, NULL},
+  };
+
+  PropertyRNA *prop;
+  prop = RNA_def_enum(ot->srna, "method", clog_copy_items, CLOG_COPY_VISBLE, "Method", "");
+  RNA_def_property_flag(prop, PROP_SKIP_SAVE);
 }
diff --git a/source/blender/editors/space_info/info_draw_clog.c b/source/blender/editors/space_info/info_draw_clog.c
index 548c965bf1a..058432cd6b2 100644
--- a/source/blender/editors/space_info/info_draw_clog.c
+++ b/source/blender/editors/space_info/info_draw_clog.c
@@ -167,14 +167,8 @@ int clog_textview_step(struct TextViewContext *tvc)
   return (tvc->iter != NULL);
 }
 
-void clog_textview_text_get(struct TextViewContext *tvc,
-                            char **r_line,
-                            int *r_len,
-                            bool *owns_memory)
+char *clog_record_sprintfN(const struct CLG_LogRecord *record, const SpaceInfo *sinfo)
 {
-  const struct CLG_LogRecord *record = tvc->iter;
-  const SpaceInfo *sinfo = tvc->arg1;
-
   DynStr *dynStr = BLI_dynstr_new();
   if (sinfo->log_format & INFO_CLOG_SHOW_TIMESTAMP) {
     char timestamp_str[64];
@@ -199,8 +193,9 @@ void clog_textview_text_get(struct TextViewContext *tvc,
     BLI_dynstr_appendf(dynStr, "(%s) ", record->type->identifier);
   }
   if (sinfo->log_format & INFO_CLOG_SHOW_FILE_LINE) {
-    const char *file_line = (sinfo->log_format & INFO_CLOG_USE_SHORT_FILTE_LINE) ? BLI_path_basename(record->file_line) :
-                                                           record->file_line;
+    const char *file_line = (sinfo->log_format & INFO_CLOG_USE_SHORT_FILTE_LINE) ?
+                                BLI_path_basename(record->file_line) :
+                                record->file_line;
     BLI_dynstr_appendf(dynStr, "%s ", file_line);
   }
   if (sinfo->log_format & INFO_CLOG_SHOW_FUNCTION) {
@@ -211,9 +206,22 @@ void clog_textview_text_get(struct TextViewContext *tvc,
   }
 
   BLI_dynstr_append(dynStr, record->message);
+  char *cstring = BLI_dynstr_get_cstring(dynStr);
+  BLI_dynstr_free(dynStr);
+  return cstring;
+}
 
-  *r_line = BLI_dynstr_get_cstring(dynStr);
-  *r_len = BLI_dynstr_get_len(dynStr);
+void clog_textview_text_get(struct TextViewContext *tvc,
+                            char **r_line,
+                            int *r_len,
+                            bool *owns_memory)
+{
+  const struct CLG_LogRecord *record = tvc->iter;
+  const SpaceInfo *sinfo = tvc->arg1;
+
+  char *cstring = clog_record_sprintfN(record, sinfo);
+
+  *r_line = cstring;
+  *r_len = strlen(cstring);
   *owns_memory = true;
-  BLI_dynstr_free(dynStr);
 }
diff --git a/source/blender/editors/space_info/info_intern.h b/source/blender/editors/space_info/info_intern.h
index 5d159139272..bd33ea3dee2 100644
--- a/source/blender/editors/space_info/info_intern.h
+++ b/source/blender/editors/space_info/info_intern.h
@@ -104,6 +104,7 @@ void report_textview_text_get(struct TextViewContext *tvc,
                               int *r_len,
                               bool *owns_memory);
 /* info_draw_clog.c */
+char *clog_record_sprintfN(const struct CLG_LogRecord *record, const SpaceInfo *sinfo);
 bool is_clog_record_visible(const struct CLG_LogRecord *record, const struct SpaceInfo *sinfo);
 enum eTextViewContext_LineDrawFlag clog_line_draw_data(struct TextViewContext *tvc,
                                                        uchar fg[4],



More information about the Bf-blender-cvs mailing list