[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19877] branches/blender2.5/blender: UI

Brecht Van Lommel brecht at blender.org
Wed Apr 22 20:39:44 CEST 2009


Revision: 19877
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19877
Author:   blendix
Date:     2009-04-22 20:39:44 +0200 (Wed, 22 Apr 2009)

Log Message:
-----------
UI
* Headers and menus can now be created in python.
* Replaced the uiMenuItem functions to create menus with equivalent
  uiItem functions using a layout, removing duplicated code.
* More uiItem functions are now exposed to python.
* The text editor header, panels and one of its menus are now created
  in space_text.py.
* Buttons window data context icon new changes depending on active
  object.

Issues
* Icons are not wrapped yet, hardcoded ints at the moment.
* The ID browse template is unfinished.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_library.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/library.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
    branches/blender2.5/blender/source/blender/editors/animation/keyframing.c
    branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
    branches/blender2.5/blender/source/blender/editors/armature/poselib.c
    branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c
    branches/blender2.5/blender/source/blender/editors/curve/editcurve.c
    branches/blender2.5/blender/source/blender/editors/include/BIF_transform.h
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_anim.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_api.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/physics/editparticle.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_header.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_header.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_ops.c
    branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
    branches/blender2.5/blender/source/blender/editors/space_info/info_header.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_header.c
    branches/blender2.5/blender/source/blender/editors/space_text/space_text.c
    branches/blender2.5/blender/source/blender/editors/space_text/text_header.c
    branches/blender2.5/blender/source/blender/editors/space_text/text_intern.h
    branches/blender2.5/blender/source/blender/editors/space_text/text_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_snap.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_context.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_screen.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_space.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_text.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_ui.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Added Paths:
-----------
    branches/blender2.5/blender/release/ui/space_text.py

Added: branches/blender2.5/blender/release/ui/space_text.py
===================================================================
--- branches/blender2.5/blender/release/ui/space_text.py	                        (rev 0)
+++ branches/blender2.5/blender/release/ui/space_text.py	2009-04-22 18:39:44 UTC (rev 19877)
@@ -0,0 +1,145 @@
+
+import bpy
+
+# temporary
+ICON_LINENUMBERS_OFF = 588
+ICON_WORDWRAP_OFF = 584
+ICON_SYNTAX_OFF = 586
+ICON_TEXT = 120
+ICON_HELP = 1
+ICON_SCRIPTPLUGINS = 1
+
+class TEXT_HT_header(bpy.types.Header):
+	__space_type__ = "TEXT_EDITOR"
+	__idname__ = "TEXT_HT_header"
+
+	def draw(self, context):
+		st = context.space_data
+		text = st.text
+		layout = self.layout
+
+		layout.template_header()
+		layout.itemM("TEXT_MT_text")
+		if text:
+			layout.itemM("TEXT_MT_edit")
+			layout.itemM("TEXT_MT_format")
+
+		if text and text.modified:
+			layout.row()
+			# layout.color(redalert)
+			layout.itemO("TEXT_OT_resolve_conflict", text="", icon=ICON_HELP)
+
+		layout.row()
+		layout.itemR(st, "line_numbers", text="", icon=ICON_LINENUMBERS_OFF)
+		layout.itemR(st, "word_wrap", text="", icon=ICON_WORDWRAP_OFF)
+		layout.itemR(st, "syntax_highlight", text="", icon=ICON_SYNTAX_OFF)
+		# layout.itemR(st, "do_python_plugins", text="", icon=ICON_SCRIPTPLUGINS)
+
+		layout.row()
+		layout.template_header_ID(st, "text", new="TEXT_OT_new", open="TEXT_OT_open", unlink="TEXT_OT_unlink")
+
+		if text:
+			layout.row()
+			if text.filename != "":
+				if text.dirty:
+					layout.itemL(text="File: *" + text.filename + " (unsaved)")
+				else:
+					layout.itemL(text="File: " + text.filename)
+			else:
+				if text.library:
+					layout.itemL(text="Text: External")
+				else:
+					layout.itemL(text="Text: Internal")
+
+class TEXT_PT_properties(bpy.types.Panel):
+	__space_type__ = "TEXT_EDITOR"
+	__region_type__ = "UI"
+	__label__ = "Properties"
+
+	def draw(self, context):
+		st = context.space_data
+		layout = self.layout
+
+		layout.column_flow()
+		layout.itemR(st, "line_numbers", icon=ICON_LINENUMBERS_OFF)
+		layout.itemR(st, "word_wrap", icon=ICON_WORDWRAP_OFF)
+		layout.itemR(st, "syntax_highlight", icon=ICON_SYNTAX_OFF)
+
+		layout.column_flow()
+		layout.itemR(st, "font_size")
+		layout.itemR(st, "tab_width")
+
+class TEXT_PT_find(bpy.types.Panel):
+	__space_type__ = "TEXT_EDITOR"
+	__region_type__ = "UI"
+	__label__ = "Find"
+
+	def draw(self, context):
+		st = context.space_data
+		layout = self.layout
+
+		# find
+		layout.row()
+		layout.itemR(st, "find_text", text="")
+		layout.itemO("TEXT_OT_find_set_selected", text="", icon=ICON_TEXT)
+		layout.column()
+		layout.itemO("TEXT_OT_find")
+
+		# replace
+		layout.row()
+		layout.itemR(st, "replace_text", text="")
+		layout.itemO("TEXT_OT_replace_set_selected", text="", icon=ICON_TEXT)
+		layout.column()
+		layout.itemO("TEXT_OT_replace")
+
+		# mark
+		layout.column()
+		layout.itemO("TEXT_OT_mark_all")
+
+		# settings
+		layout.row()
+		layout.itemR(st, "find_wrap", text="Wrap")
+		layout.itemR(st, "find_all", text="All")
+
+class TEXT_MT_text(bpy.types.Menu):
+	__space_type__ = "TEXT_EDITOR"
+	__label__ = "Text"
+
+	def draw(self, context):
+		layout = self.layout
+		st = context.space_data
+		text = st.text
+
+		layout.column()
+		layout.itemO("TEXT_OT_new")
+		layout.itemO("TEXT_OT_open")
+
+		if text:
+			layout.itemO("TEXT_OT_reload")
+
+			layout.column()
+			layout.itemO("TEXT_OT_save")
+			layout.itemO("TEXT_OT_save_as")
+
+			if text.filename != "":
+				layout.itemO("TEXT_OT_make_internal")
+
+			layout.column()
+			layout.itemO("TEXT_OT_run_script")
+
+			#ifndef DISABLE_PYTHON
+			# XXX if(BPY_is_pyconstraint(text))
+			# XXX   uiMenuItemO(head, 0, "TEXT_OT_refresh_pyconstraints");
+			#endif
+		
+		#ifndef DISABLE_PYTHON
+		# XXX layout.column()
+		# XXX uiDefIconTextBlockBut(block, text_template_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Script Templates", 0, yco-=20, 120, 19, "");
+		# XXX uiDefIconTextBlockBut(block, text_plugin_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Text Plugins", 0, yco-=20, 120, 19, "");
+		#endif
+
+bpy.types.register(TEXT_HT_header)
+bpy.types.register(TEXT_PT_properties)
+bpy.types.register(TEXT_PT_find)
+bpy.types.register(TEXT_MT_text)
+

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_library.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_library.h	2009-04-22 18:20:41 UTC (rev 19876)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_library.h	2009-04-22 18:39:44 UTC (rev 19877)
@@ -61,6 +61,7 @@
 void splitIDname(char *name, char *left, int *nr);
 void rename_id(struct ID *id, char *name);
 void test_idbutton(char *name);
+void text_idbutton(struct ID *id, char *text);
 void all_local(struct Library *lib, int untagged_only);
 struct ID *find_id(char *type, char *name);
 void clear_id_newpoins(void);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-04-22 18:20:41 UTC (rev 19876)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-04-22 18:39:44 UTC (rev 19877)
@@ -38,6 +38,7 @@
 struct ListBase;
 struct Panel;
 struct Header;
+struct Menu;
 struct ScrArea;
 struct SpaceType;
 struct wmNotifier;
@@ -136,6 +137,9 @@
 	/* header type definitions */
 	ListBase headertypes;
 
+	/* menu type definitions */
+	ListBase menutypes;
+
 	/* hardcoded constraints, smaller than these values region is not visible */
 	int			minsizex, minsizey;
 	/* default keymaps to add */
@@ -183,6 +187,27 @@
 	void				(*py_free)(void *py_data);
 } HeaderType;
 
+/* menu types */
+
+typedef struct MenuType {
+	struct MenuType *next, *prev;
+
+	char		idname[BKE_ST_MAXNAME];	/* unique name */
+	char		label[BKE_ST_MAXNAME];	/* for button text */
+	int 		space_type;
+
+	/* verify if the menu should draw or not */
+	int			(*poll)(const struct bContext *, struct MenuType *);
+	/* draw entirely, view changes should be handled here */
+	void		(*draw)(const struct bContext *, struct Menu *);	
+
+	/* python integration */
+	void				*py_data;
+	struct StructRNA	*py_srna;
+	int					(*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *);
+	void				(*py_free)(void *py_data);
+} MenuType;
+
 /* spacetypes */
 struct SpaceType *BKE_spacetype_from_id(int spaceid);
 struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/library.c	2009-04-22 18:20:41 UTC (rev 19876)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/library.c	2009-04-22 18:39:44 UTC (rev 19877)
@@ -1102,6 +1102,27 @@
 	if(idtest) if( new_id(lb, idtest, name)==0 ) sort_alpha_id(lb, idtest);
 }
 
+void text_idbutton(struct ID *id, char *text)
+{
+	if(id) {
+		if(GS(id->name)==ID_SCE)
+			strcpy(text, "SCE: ");
+        else if(GS(id->name)==ID_SCE)
+			strcpy(text, "SCR: ");
+        else if(GS(id->name)==ID_MA && ((Material*)id)->use_nodes)
+			strcpy(text, "NT: ");
+        else {
+			text[0]= id->name[0];
+			text[1]= id->name[1];
+			text[2]= ':';
+			text[3]= ' ';
+			text[4]= 0;
+        }
+	}
+	else
+		strcpy(text, "");
+}
+
 void rename_id(ID *id, char *name)
 {
 	ListBase *lb;

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2009-04-22 18:20:41 UTC (rev 19876)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2009-04-22 18:39:44 UTC (rev 19877)
@@ -54,6 +54,8 @@
 {
 	ARegionType *art;
 	PanelType *pt;
+	HeaderType *ht;
+	MenuType *mt;
 	
 	for(art= st->regiontypes.first; art; art= art->next) {
 		BLI_freelistN(&art->drawcalls);
@@ -62,8 +64,17 @@
 			if(pt->py_free)
 				pt->py_free(pt->py_data);
 
+		for(ht= art->headertypes.first; ht; ht= ht->next)
+			if(ht->py_free)
+				ht->py_free(ht->py_data);
+
+		for(mt= art->menutypes.first; mt; mt= mt->next)
+			if(mt->py_free)
+				mt->py_free(mt->py_data);
+
 		BLI_freelistN(&art->paneltypes);
 		BLI_freelistN(&art->headertypes);
+		BLI_freelistN(&art->menutypes);
 	}
 	
 	BLI_freelistN(&st->regiontypes);

Modified: branches/blender2.5/blender/source/blender/editors/animation/keyframing.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyframing.c	2009-04-22 18:20:41 UTC (rev 19876)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyframing.c	2009-04-22 18:39:44 UTC (rev 19877)
@@ -989,22 +989,24 @@
 {
 	Scene *scene= CTX_data_scene(C);
 	KeyingSet *ks;
-	uiMenuItem *head;
+	uiPopupMenu *pup;
+	uiLayout *layout;
 	int i = 0;
 	
-	head= uiPupMenuBegin("Insert Keyframe", 0);
+	pup= uiPupMenuBegin("Insert Keyframe", 0);
+	layout= uiPupMenuLayout(pup);
 	
 	/* active Keying Set */
-	uiMenuItemIntO(head, "Active Keying Set", 0, "ANIM_OT_insert_keyframe_menu", "type", i++);
-	uiMenuSeparator(head);
+	uiItemIntO(layout, "Active Keying Set", 0, "ANIM_OT_insert_keyframe_menu", "type", i++);
+	uiItemS(layout);
 	
 	/* user-defined Keying Sets 
 	 *	- these are listed in the order in which they were defined for the active scene
 	 */
 	if (scene->keyingsets.first) {
 		for (ks= scene->keyingsets.first; ks; ks= ks->next)
-			uiMenuItemIntO(head, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i++);
-		uiMenuSeparator(head);
+			uiItemIntO(layout, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i++);
+		uiItemS(layout);
 	}
 	
 	/* builtin Keying Sets */
@@ -1013,11 +1015,11 @@
 	for (ks= builtin_keyingsets.first; ks; ks= ks->next) {
 		/* only show KeyingSet if context is suitable */
 		if (keyingset_context_ok_poll(C, ks)) {
-			uiMenuItemIntO(head, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i--);
+			uiItemIntO(layout, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i--);
 		}
 	}
 	
-	uiPupMenuEnd(C, head);
+	uiPupMenuEnd(C, pup);
 	
 	return OPERATOR_CANCELLED;
 }

Modified: branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list