[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