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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to