[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24103] trunk/blender: - Right click menu can open links directly to API reference docs ( rna and operators)

Campbell Barton ideasman42 at gmail.com
Tue Oct 27 03:54:27 CET 2009


Revision: 24103
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24103
Author:   campbellbarton
Date:     2009-10-27 03:54:25 +0100 (Tue, 27 Oct 2009)

Log Message:
-----------
- Right click menu can open links directly to API reference docs (rna and operators)
- Generated and uploaded api docs - http://www.blender.org/documentation/250PythonDoc
- Added Edit docs menu item & operators as discussed with Mindrones, Brecht, Stani & Letterip @ bconf, needs some web backend. python operator can aparently use xml/rpc to upload docstrings.
- Added operator invoke function - context.manager.invoke_props_popup(self.__operator__, event)
  this calls a popup for invoke by default (which intern calls execute())

- Own recent commit to game framing applied to non-camera views too.
- v3d->persp is deprecated but still used in some places.

- Transforming strips could overlap 1 frame if moving them below frame 0
- Transforming overlapping strips could go into an eternal loop (though overlapping strips should not exist)

Modified Paths:
--------------
    trunk/blender/release/scripts/io/export_3ds.py
    trunk/blender/release/scripts/io/import_3ds.py
    trunk/blender/release/scripts/modules/bpy_ops.py
    trunk/blender/release/scripts/ui/space_info.py
    trunk/blender/source/blender/blenkernel/intern/sequence.c
    trunk/blender/source/blender/editors/interface/interface_anim.c
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/editors/interface/interface_intern.h
    trunk/blender/source/blender/editors/interface/interface_utils.c
    trunk/blender/source/blender/editors/screen/screen_edit.c
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/space_buttons/buttons_context.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_header.c
    trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_access.c
    trunk/blender/source/blender/makesrna/intern/rna_wm_api.c
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp

Modified: trunk/blender/release/scripts/io/export_3ds.py
===================================================================
--- trunk/blender/release/scripts/io/export_3ds.py	2009-10-27 00:25:38 UTC (rev 24102)
+++ trunk/blender/release/scripts/io/export_3ds.py	2009-10-27 02:54:25 UTC (rev 24103)
@@ -1091,9 +1091,9 @@
 #         Blender.Draw.PupMenu("Error%t|This script requires a full python installation")
 # # save_3ds('/test_b.3ds')
 
-class EXPORT_OT_3ds(bpy.types.Operator):
+class EXPORT_OT_autodesk_3ds(bpy.types.Operator):
 	'''Export to 3DS file format (.3ds).'''
-	__idname__ = "export.3ds"
+	__idname__ = "export.autodesk_3ds"
 	__label__ = 'Export 3DS'
 	
 	# List of operator properties, the attributes will be assigned
@@ -1117,9 +1117,9 @@
 		print("Poll")
 		return context.active_object != None
 
-bpy.ops.add(EXPORT_OT_3ds)
+bpy.ops.add(EXPORT_OT_autodesk_3ds)
 
 # Add to a menu
 import dynamic_menu
-menu_func = lambda self, context: self.layout.itemO("export.3ds", text="Autodesk 3DS...")
+menu_func = lambda self, context: self.layout.itemO("export.autodesk_3ds", text="Autodesk 3DS...")
 menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func)

Modified: trunk/blender/release/scripts/io/import_3ds.py
===================================================================
--- trunk/blender/release/scripts/io/import_3ds.py	2009-10-27 00:25:38 UTC (rev 24102)
+++ trunk/blender/release/scripts/io/import_3ds.py	2009-10-27 02:54:25 UTC (rev 24103)
@@ -1122,9 +1122,9 @@
 
 '''
 
-class IMPORT_OT_3ds(bpy.types.Operator):
+class IMPORT_OT_autodesk_3ds(bpy.types.Operator):
 	'''Import from 3DS file format (.3ds)'''
-	__idname__ = "import.3ds"
+	__idname__ = "import.autodesk_3ds"
 	__label__ = 'Import 3DS'
 	
 	# List of operator properties, the attributes will be assigned
@@ -1147,10 +1147,10 @@
 		wm.add_fileselect(self.__operator__)
 		return ('RUNNING_MODAL',)
 
-bpy.ops.add(IMPORT_OT_3ds)
+bpy.ops.add(IMPORT_OT_autodesk_3ds)
 
 import dynamic_menu
-menu_func = lambda self, context: self.layout.itemO("import.3ds", text="3D Studio (.3ds)...")
+menu_func = lambda self, context: self.layout.itemO("import.autodesk_3ds", text="3D Studio (.3ds)...")
 menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_import, menu_func)
 
 # NOTES:

Modified: trunk/blender/release/scripts/modules/bpy_ops.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_ops.py	2009-10-27 00:25:38 UTC (rev 24102)
+++ trunk/blender/release/scripts/modules/bpy_ops.py	2009-10-27 02:54:25 UTC (rev 24103)
@@ -311,7 +311,68 @@
 		exec("context.%s=advance_enum" % self.path)
 		return ('FINISHED',)
 
+doc_id = bpy.props.StringProperty(attr="doc_id", name="Doc ID", description="ID for the documentation", maxlen= 1024, default= "")
+doc_new = bpy.props.StringProperty(attr="doc_new", name="Doc New", description="", maxlen= 1024, default= "")
 
+class WM_OT_doc_view(bpy.types.Operator):
+	'''Load online reference docs'''
+	__idname__ = "wm.doc_view"
+	__label__ = "View Documentation"
+	__props__ = [doc_id]
+	_prefix = 'http://www.blender.org/documentation/250PythonDoc'
+	def execute(self, context):
+		id_split = self.doc_id.split('.')
+		# Example url, http://www.graphicall.org/ftp/ideasman42/html/bpy.types.Space3DView-class.html#background_image
+		# Example operator http://www.graphicall.org/ftp/ideasman42/html/bpy.ops.boid-module.html#boidrule_add
+		if len(id_split) == 1: # rna, class
+			url= '%s/bpy.types.%s-class.html' % (self._prefix, id_split[0])
+		elif len(id_split) == 2: # rna, class.prop
+			class_name, class_prop = id_split
+			
+			if hasattr(bpy.types, class_name.upper() + '_OT_' + class_prop):
+				url= '%s/bpy.ops.%s-module.html#%s' % (self._prefix, class_name, class_prop)
+			else:
+				url= '%s/bpy.types.%s-class.html#%s' % (self._prefix, class_name, class_prop)
+			
+		else:
+			return ('PASS_THROUGH',)
+		
+		import webbrowser
+		webbrowser.open(url)
+		
+		return ('FINISHED',)
+
+
+class WM_OT_doc_edit(bpy.types.Operator):
+	'''Load online reference docs'''
+	__idname__ = "wm.doc_edit"
+	__label__ = "Edit Documentation"
+	__props__ = [doc_id, doc_new]
+	
+	def execute(self, context):
+		
+		class_name, class_prop = self.doc_id.split('.')
+		
+		if self.doc_new:
+			
+			if hasattr(bpy.types, class_name.upper() + '_OT_' + class_prop):
+				# operator
+				print("operator - old:'%s' -> new:'%s'" % ('<TODO>', self.doc_new))
+			else:
+				doc_orig = getattr(bpy.types, class_name).__rna__.properties[class_prop].description
+				if doc_orig != self.doc_new:
+					print("rna - old:'%s' -> new:'%s'" % (doc_orig, self.doc_new))
+					# aparently we can use xml/rpc to upload docs to an online review board
+					# Ugh, will run this on every edit.... better not make any mistakes
+				
+		return ('FINISHED',)
+	
+	def invoke(self, context, event):
+		wm = context.manager
+		wm.invoke_props_popup(self.__operator__, event)
+		return ('RUNNING_MODAL',)
+
+
 bpy.ops.add(MESH_OT_delete_edgeloop)
 
 bpy.ops.add(WM_OT_context_set_boolean)
@@ -324,3 +385,5 @@
 bpy.ops.add(WM_OT_context_cycle_enum)
 bpy.ops.add(WM_OT_context_cycle_int)
 
+bpy.ops.add(WM_OT_doc_view)
+bpy.ops.add(WM_OT_doc_edit)

Modified: trunk/blender/release/scripts/ui/space_info.py
===================================================================
--- trunk/blender/release/scripts/ui/space_info.py	2009-10-27 00:25:38 UTC (rev 24102)
+++ trunk/blender/release/scripts/ui/space_info.py	2009-10-27 02:54:25 UTC (rev 24103)
@@ -241,14 +241,8 @@
 
 class HelpOperator(bpy.types.Operator):
 	def execute(self, context):
-		try: import webbrowser
-		except: webbrowser = None
-
-		if webbrowser:
-			webbrowser.open(self.__URL__)
-		else:
-			raise Exception("Operator requires a full Python installation")
-
+		import webbrowser
+		webbrowser.open(self.__URL__)
 		return ('FINISHED',)
 
 class HELP_OT_manual(HelpOperator):

Modified: trunk/blender/source/blender/blenkernel/intern/sequence.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequence.c	2009-10-27 00:25:38 UTC (rev 24102)
+++ trunk/blender/source/blender/blenkernel/intern/sequence.c	2009-10-27 02:54:25 UTC (rev 24103)
@@ -3425,7 +3425,7 @@
 	for(seq= seqbasep->first; seq; seq= seq->next) {
 		if(seq->tmp) {
 			for(seq_other= seqbasep->first; seq_other; seq_other= seq_other->next) {
-				if(seq_overlap(seq, seq_other)) {
+				if(!seq_other->tmp && seq_overlap(seq, seq_other)) {
 					if(dir=='L') {
 						offset= MIN2(offset, seq_other->startdisp - seq->enddisp);
 					}

Modified: trunk/blender/source/blender/editors/interface/interface_anim.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_anim.c	2009-10-27 00:25:38 UTC (rev 24102)
+++ trunk/blender/source/blender/editors/interface/interface_anim.c	2009-10-27 02:54:25 UTC (rev 24103)
@@ -240,11 +240,9 @@
 	int length;
 
 	if(but->rnapoin.data && but->rnaprop) {
-		pup= uiPupMenuBegin(C, RNA_property_ui_name(but->rnaprop), 0);
-		layout= uiPupMenuLayout(pup);
-		
+
 		length= RNA_property_array_length(&but->rnapoin, but->rnaprop);
-		
+
 		if(but->flag & UI_BUT_ANIMATED_KEY) {
 			if(length) {
 				uiItemBooleanO(layout, "Replace Keyframes", 0, "ANIM_OT_insert_keyframe_button", "all", 1);
@@ -263,20 +261,20 @@
 				uiItemBooleanO(layout, "Insert Keyframes", 0, "ANIM_OT_insert_keyframe_button", "all", 1);
 				uiItemBooleanO(layout, "Insert Single Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0);
 			}
-			else 
+			else
 				uiItemBooleanO(layout, "Insert Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0);
 		}
-		
+
 		if(but->flag & UI_BUT_DRIVEN) {
 			uiItemS(layout);
-			
+
 			if(length) {
 				uiItemBooleanO(layout, "Delete Drivers", 0, "ANIM_OT_remove_driver_button", "all", 1);
 				uiItemBooleanO(layout, "Delete Single Driver", 0, "ANIM_OT_remove_driver_button", "all", 0);
 			}
 			else
 				uiItemBooleanO(layout, "Delete Driver", 0, "ANIM_OT_remove_driver_button", "all", 0);
-				
+
 			uiItemO(layout, "Copy Driver", 0, "ANIM_OT_copy_driver_button");
 			if (ANIM_driver_can_paste())
 				uiItemO(layout, "Paste Driver", 0, "ANIM_OT_paste_driver_button");
@@ -284,21 +282,21 @@
 		else if(but->flag & UI_BUT_ANIMATED_KEY);
 		else if(RNA_property_animateable(&but->rnapoin, but->rnaprop)) {
 			uiItemS(layout);
-			
+
 			if(length) {
 				uiItemBooleanO(layout, "Add Drivers", 0, "ANIM_OT_add_driver_button", "all", 1);
 				uiItemBooleanO(layout, "Add Single Driver", 0, "ANIM_OT_add_driver_button", "all", 0);
 			}
 			else
 				uiItemBooleanO(layout, "Add Driver", 0, "ANIM_OT_add_driver_button", "all", 0);
-			
-			if (ANIM_driver_can_paste())			
+
+			if (ANIM_driver_can_paste())
 				uiItemO(layout, "Paste Driver", 0, "ANIM_OT_paste_driver_button");
 		}
-		
+
 		if(RNA_property_animateable(&but->rnapoin, but->rnaprop)) {
 			uiItemS(layout);
-			
+
 			if(length) {
 				uiItemBooleanO(layout, "Add All to Keying Set", 0, "ANIM_OT_add_keyingset_button", "all", 1);
 				uiItemBooleanO(layout, "Add Single to Keying Set", 0, "ANIM_OT_add_keyingset_button", "all", 0);
@@ -309,11 +307,15 @@
 				uiItemO(layout, "Remove from Keying Set", 0, "ANIM_OT_remove_keyingset_button");
 			}
 		}
-		
+
 		uiItemS(layout);
-		
+
 		uiItemO(layout, "Copy Data Path", 0, "ANIM_OT_copy_clipboard_button");
-		
+
+		uiItemS(layout);
+
+		//ui_but_doc_menu(layout, &but->rnapoin, but->rnaprop);
+
 		uiPupMenuEnd(C, pup);
 	}
 }

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2009-10-27 00:25:38 UTC (rev 24102)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2009-10-27 02:54:25 UTC (rev 24103)
@@ -51,6 +51,7 @@
 
 #include "ED_screen.h"
 #include "ED_util.h"
+#include "ED_keyframing.h"
 
 #include "UI_interface.h"
 
@@ -3378,6 +3379,145 @@
 	return block;
 }
 
+static int ui_but_menu(bContext *C, uiBut *but)
+{
+	uiPopupMenu *pup;
+	uiLayout *layout;
+	int length;
+	char *name;
+
+	if((but->rnapoin.data && but->rnaprop)==0 && but->optype==NULL)
+		return 0;
+
+
+	if(but->rnaprop)
+		name= RNA_property_ui_name(but->rnaprop);
+	else if (but->optype)
+		name= but->optype->name;
+	else
+		name= "<needs_name>"; // XXX - should never happen.
+
+	pup= uiPupMenuBegin(C, name, 0);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list