Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-04-22 22:39:44 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-04-22 22:39:44 +0400
commitaf02a0aa4e0b80c3c1154e7be095f4a387f81179 (patch)
tree3f714e683c96929cc4e44962570860ab0f635bc9 /source/blender/editors/space_text/text_header.c
parent643d59bb9bf3bdd46f41a0b8c79384146629f9c8 (diff)
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.
Diffstat (limited to 'source/blender/editors/space_text/text_header.c')
-rw-r--r--source/blender/editors/space_text/text_header.c436
1 files changed, 93 insertions, 343 deletions
diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c
index 0ab43cbf455..a3b62adf6c8 100644
--- a/source/blender/editors/space_text/text_header.c
+++ b/source/blender/editors/space_text/text_header.c
@@ -155,44 +155,46 @@ static uiBlock *text_plugin_scriptsmenu(bContext *C, void *args_unused)
}
#endif
-static void text_editmenu_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu_viewmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemEnumO(head, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP);
- uiMenuItemEnumO(head, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM);
+ uiItemEnumO(layout, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP);
+ uiItemEnumO(layout, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM);
}
-static void text_editmenu_selectmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu_selectmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "TEXT_OT_select_all");
- uiMenuItemO(head, 0, "TEXT_OT_select_line");
+ uiItemO(layout, NULL, 0, "TEXT_OT_select_all");
+ uiItemO(layout, NULL, 0, "TEXT_OT_select_line");
}
-static void text_editmenu_markermenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu_markermenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "TEXT_OT_markers_clear");
- uiMenuItemO(head, 0, "TEXT_OT_next_marker");
- uiMenuItemO(head, 0, "TEXT_OT_previous_marker");
+ uiItemO(layout, NULL, 0, "TEXT_OT_markers_clear");
+ uiItemO(layout, NULL, 0, "TEXT_OT_next_marker");
+ uiItemO(layout, NULL, 0, "TEXT_OT_previous_marker");
}
-static void text_formatmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_formatmenu(const bContext *C, Menu *menu)
{
- uiMenuItemO(head, 0, "TEXT_OT_indent");
- uiMenuItemO(head, 0, "TEXT_OT_unindent");
+ uiLayout *layout= menu->layout;
- uiMenuSeparator(head);
+ uiItemO(layout, NULL, 0, "TEXT_OT_indent");
+ uiItemO(layout, NULL, 0, "TEXT_OT_unindent");
- uiMenuItemO(head, 0, "TEXT_OT_comment");
- uiMenuItemO(head, 0, "TEXT_OT_uncomment");
+ uiItemS(layout);
- uiMenuSeparator(head);
+ uiItemO(layout, NULL, 0, "TEXT_OT_comment");
+ uiItemO(layout, NULL, 0, "TEXT_OT_uncomment");
- uiMenuLevelEnumO(head, "TEXT_OT_convert_whitespace", "type");
+ uiItemS(layout);
+
+ uiItemLevelEnumO(layout, NULL, 0, "TEXT_OT_convert_whitespace", "type");
}
-static void text_editmenu_to3dmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu_to3dmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemBooleanO(head, "One Object", 0, "TEXT_OT_to_3d_object", "split_lines", 0);
- uiMenuItemBooleanO(head, "One Object Per Line", 0, "TEXT_OT_to_3d_object", "split_lines", 1);
+ uiItemBooleanO(layout, "One Object", 0, "TEXT_OT_to_3d_object", "split_lines", 0);
+ uiItemBooleanO(layout, "One Object Per Line", 0, "TEXT_OT_to_3d_object", "split_lines", 1);
}
static int text_menu_edit_poll(bContext *C)
@@ -200,308 +202,56 @@ static int text_menu_edit_poll(bContext *C)
return (CTX_data_edit_text(C) != NULL);
}
-static void text_editmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu(const bContext *C, Menu *menu)
{
- uiMenuItemO(head, 0, "ED_OT_undo");
- uiMenuItemO(head, 0, "ED_OT_redo");
-
- uiMenuSeparator(head);
-
- uiMenuItemO(head, 0, "TEXT_OT_cut");
- uiMenuItemO(head, 0, "TEXT_OT_copy");
- uiMenuItemO(head, 0, "TEXT_OT_paste");
-
- uiMenuSeparator(head);
-
- uiMenuLevel(head, "View", text_editmenu_viewmenu);
- uiMenuLevel(head, "Select", text_editmenu_selectmenu);
- uiMenuLevel(head, "Markers", text_editmenu_markermenu);
-
- uiMenuSeparator(head);
-
- uiMenuItemO(head, 0, "TEXT_OT_jump");
- uiMenuItemO(head, 0, "TEXT_OT_properties");
-
- uiMenuSeparator(head);
-
- uiMenuLevel(head, "Text to 3D Object", text_editmenu_to3dmenu);
-}
+ uiLayout *layout= menu->layout;
-static void text_filemenu(bContext *C, uiMenuItem *head, void *arg_unused)
-{
- SpaceText *st= (SpaceText*)CTX_wm_space_data(C);
- Text *text= st->text;
-
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
-
- if(text) {
- uiMenuItemO(head, 0, "TEXT_OT_reload");
-
- uiMenuSeparator(head);
-
- uiMenuItemO(head, 0, "TEXT_OT_save");
- uiMenuItemO(head, 0, "TEXT_OT_save_as");
-
- if(text->name)
- uiMenuItemO(head, 0, "TEXT_OT_make_internal");
-
- uiMenuSeparator(head);
-
- uiMenuItemO(head, 0, "TEXT_OT_run_script");
+ uiItemO(layout, NULL, 0, "ED_OT_undo");
+ uiItemO(layout, NULL, 0, "ED_OT_redo");
-#ifndef DISABLE_PYTHON
- if(BPY_is_pyconstraint(text))
- uiMenuItemO(head, 0, "TEXT_OT_refresh_pyconstraints");
-#endif
- }
+ uiItemS(layout);
-#ifndef DISABLE_PYTHON
- // XXX uiMenuSeparator(head);
+ uiItemO(layout, NULL, 0, "TEXT_OT_cut");
+ uiItemO(layout, NULL, 0, "TEXT_OT_copy");
+ uiItemO(layout, NULL, 0, "TEXT_OT_paste");
- // 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
-}
+ uiItemS(layout);
-/*********************** datablock browse *************************/
+ uiItemLevel(layout, "View", 0, text_editmenu_viewmenu);
+ uiItemLevel(layout, "Select", 0, text_editmenu_selectmenu);
+ uiItemLevel(layout, "Markers", 0, text_editmenu_markermenu);
-static void text_unlink(Main *bmain, Text *text)
-{
- bScreen *scr;
- ScrArea *area;
- SpaceLink *sl;
+ uiItemS(layout);
- /* XXX this ifdef is in fact dangerous, if python is
- * disabled it will leave invalid pointers in files! */
+ uiItemO(layout, NULL, 0, "TEXT_OT_jump");
+ uiItemO(layout, NULL, 0, "TEXT_OT_properties");
-#ifndef DISABLE_PYTHON
- // XXX BPY_clear_bad_scriptlinks(text);
- // XXX BPY_free_pyconstraint_links(text);
- // XXX free_text_controllers(text);
- // XXX free_dome_warp_text(text);
-
- /* check if this text was used as script link:
- * this check function unsets the pointers and returns how many
- * script links used this Text */
- if(0) // XXX BPY_text_check_all_scriptlinks (text))
- ; // XXX notifier: allqueue(REDRAWBUTSSCRIPT, 0);
-
- /* equivalently for pynodes: */
- if(0) // XXX nodeDynamicUnlinkText ((ID*)text))
- ; // XXX notifier: allqueue(REDRAWNODE, 0);
-#endif
-
- for(scr= bmain->screen.first; scr; scr= scr->id.next) {
- for(area= scr->areabase.first; area; area= area->next) {
- for(sl= area->spacedata.first; sl; sl= sl->next) {
- if(sl->spacetype==SPACE_TEXT) {
- SpaceText *st= (SpaceText*) sl;
-
- if(st->text==text) {
- st->text= NULL;
- st->top= 0;
-
- if(st==area->spacedata.first)
- ED_area_tag_redraw(area);
- }
- }
- }
- }
- }
+ uiItemS(layout);
- free_libblock(&bmain->text, text);
-}
-
-static void text_idpoin_handle(bContext *C, ID *id, int event)
-{
- SpaceText *st= (SpaceText*)CTX_wm_space_data(C);
- Text *text;
-
- switch(event) {
- case UI_ID_BROWSE:
- st->text= (Text*)id;
- st->top= 0;
-
- text_update_edited(st->text);
- WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
-
- ED_undo_push(C, "Browse Text");
- break;
- case UI_ID_DELETE:
- text= st->text;
-
- /* make the previous text active, if its not there make the next text active */
- if(text->id.prev) {
- st->text = text->id.prev;
- WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
- }
- else if(text->id.next) {
- st->text = text->id.next;
- WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
- }
-
- text_unlink(CTX_data_main(C), text);
- WM_event_add_notifier(C, NC_TEXT|NA_REMOVED, text);
-
- ED_undo_push(C, "Delete Text");
- break;
- case UI_ID_RENAME:
- break;
- case UI_ID_ADD_NEW:
- WM_operator_name_call(C, "TEXT_OT_new", WM_OP_INVOKE_REGION_WIN, NULL);
- break;
- case UI_ID_OPEN:
- WM_operator_name_call(C, "TEXT_OT_open", WM_OP_INVOKE_REGION_WIN, NULL);
- break;
- }
+ uiItemLevel(layout, "Text to 3D Object", 0, text_editmenu_to3dmenu);
}
/********************** header buttons ***********************/
-static void text_header_draw(const bContext *C, Header *header)
-{
- bScreen *sc= CTX_wm_screen(C);
- SpaceText *st= (SpaceText*)CTX_wm_space_data(C);
- PointerRNA spaceptr;
- Text *text= st->text;
- uiLayout *layout= header->layout;
-
- RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr);
-
- uiTemplateHeaderMenus(layout);
- uiItemM(layout, "Text", 0, text_filemenu);
- if(text) {
- uiItemM(layout, "Edit", 0, text_editmenu);
- uiItemM(layout, "Format", 0, text_formatmenu);
- }
-
- /* warning button if text is out of date */
- if(text && text_file_modified(text)) {
- uiTemplateHeaderButtons(layout);
- uiTemplateSetColor(layout, TH_REDALERT);
- uiItemO(layout, "", ICON_HELP, "TEXT_OT_resolve_conflict");
- }
-
- uiTemplateHeaderButtons(layout);
- uiItemR(layout, "", ICON_LINENUMBERS_OFF, &spaceptr, "line_numbers", 0);
- uiItemR(layout, "", ICON_WORDWRAP_OFF, &spaceptr, "word_wrap", 0);
- uiItemR(layout, "", ICON_SYNTAX_OFF, &spaceptr, "syntax_highlight", 0);
- // XXX uiItemR(layout, "", ICON_SCRIPTPLUGINS, &spaceptr, "do_python_plugins", 0);
-
- uiTemplateHeaderID(layout, &spaceptr, "text",
- UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_DELETE,
- text_idpoin_handle);
-
- /* file info */
- if(text) {
- char fname[HEADER_PATH_MAX];
- static char headtxt[HEADER_PATH_MAX+17];
- int len;
-
- if(text->name) {
- len = strlen(text->name);
- if(len > HEADER_PATH_MAX-1)
- len = HEADER_PATH_MAX-1;
- strncpy(fname, text->name, len);
- fname[len]='\0';
- if(text->flags & TXT_ISDIRTY)
- sprintf(headtxt, "File: *%s (unsaved)", fname);
- else
- sprintf(headtxt, "File: %s", fname);
- }
- else
- sprintf(headtxt, text->id.lib? "Text: External": "Text: Internal");
-
- uiTemplateHeaderButtons(layout);
- uiItemL(layout, headtxt, 0);
- }
-}
-
void text_header_register(ARegionType *art)
{
- HeaderType *ht;
-
- /* header */
- ht= MEM_callocN(sizeof(HeaderType), "spacetype text header");
- strcpy(ht->idname, "TEXT_HT_header");
- ht->draw= text_header_draw;
- BLI_addhead(&art->headertypes, ht);
+ MenuType *mt;
+
+ mt= MEM_callocN(sizeof(MenuType), "spacetype text menu edit");
+ strcpy(mt->idname, "TEXT_MT_edit");
+ strcpy(mt->label, "Edit");
+ mt->draw= text_editmenu;
+ BLI_addhead(&art->menutypes, mt);
+
+ mt= MEM_callocN(sizeof(MenuType), "spacetype text menu format");
+ strcpy(mt->idname, "TEXT_MT_format");
+ strcpy(mt->label, "Format");
+ mt->draw= text_formatmenu;
+ BLI_addhead(&art->menutypes, mt);
}
/************************** properties ******************************/
-static void text_properties_panel_draw(const bContext *C, Panel *panel)
-{
- bScreen *sc= CTX_wm_screen(C);
- SpaceText *st= CTX_wm_space_text(C);
- uiLayout *layout= panel->layout;
- PointerRNA spaceptr;
-
- RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr);
-
- uiLayoutColumn(layout);
- uiItemR(layout, NULL, ICON_LINENUMBERS_OFF, &spaceptr, "line_numbers", 0);
- uiItemR(layout, NULL, ICON_WORDWRAP_OFF, &spaceptr, "word_wrap", 0);
- uiItemR(layout, NULL, ICON_SYNTAX_OFF, &spaceptr, "syntax_highlight", 0);
-
- uiLayoutColumn(layout);
- uiItemR(layout, NULL, 0, &spaceptr, "font_size", 0);
- uiItemR(layout, NULL, 0, &spaceptr, "tab_width", 0);
-}
-
-static void text_find_panel_draw(const bContext *C, Panel *panel)
-{
- bScreen *sc= CTX_wm_screen(C);
- SpaceText *st= CTX_wm_space_text(C);
- uiLayout *layout= panel->layout;
- PointerRNA spaceptr;
-
- RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr);
-
- /* find */
- uiLayoutRow(layout);
- uiItemR(layout, "", 0, &spaceptr, "find_text", 0);
- uiItemO(layout, "", ICON_TEXT, "TEXT_OT_find_set_selected");
- uiLayoutColumn(layout);
- uiItemO(layout, NULL, 0, "TEXT_OT_find");
-
- /* replace */
- uiLayoutRow(layout);
- uiItemR(layout, "", 0, &spaceptr, "replace_text", 0);
- uiItemO(layout, "", ICON_TEXT, "TEXT_OT_replace_set_selected");
- uiLayoutColumn(layout);
- uiItemO(layout, NULL, 0, "TEXT_OT_replace");
-
- /* mark */
- uiLayoutColumn(layout);
- uiItemO(layout, NULL, 0, "TEXT_OT_mark_all");
-
- /* settings */
- uiLayoutColumnFlow(layout, 0);
- uiItemR(layout, "Wrap", 0, &spaceptr, "find_wrap", 0);
- uiItemR(layout, "All", 0, &spaceptr, "find_all", 0);
-}
-
-void text_properties_register(ARegionType *art)
-{
- PanelType *pt;
-
- /* panels: properties */
- pt= MEM_callocN(sizeof(PanelType), "spacetype text panel");
- strcpy(pt->idname, "TEXT_PT_properties");
- strcpy(pt->label, "Properties");
- pt->draw= text_properties_panel_draw;
- BLI_addtail(&art->paneltypes, pt);
-
- /* panels: find */
- pt= MEM_callocN(sizeof(PanelType), "spacetype text panel");
- strcpy(pt->idname, "TEXT_PT_find");
- strcpy(pt->label, "Find");
- pt->draw= text_find_panel_draw;
- BLI_addtail(&art->paneltypes, pt);
-}
-
ARegion *text_has_properties_region(ScrArea *sa)
{
ARegion *ar, *arnew;
@@ -570,75 +320,75 @@ void TEXT_OT_properties(wmOperatorType *ot)
{
// RMB
- uiMenuItem *head;
+ uiPopupMenu *pup;
if(text) {
- head= uiPupMenuBegin("Text", 0);
+ pup= uiPupMenuBegin("Text", 0);
if(txt_has_sel(text)) {
- uiMenuItemO(head, 0, "TEXT_OT_cut");
- uiMenuItemO(head, 0, "TEXT_OT_copy");
+ uiItemO(layout, NULL, 0, "TEXT_OT_cut");
+ uiItemO(layout, NULL, 0, "TEXT_OT_copy");
}
- uiMenuItemO(head, 0, "TEXT_OT_paste");
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
- uiMenuItemO(head, 0, "TEXT_OT_save");
- uiMenuItemO(head, 0, "TEXT_OT_save_as");
- uiMenuItemO(head, 0, "TEXT_OT_run_script");
- uiPupMenuEnd(C, head);
+ uiItemO(layout, NULL, 0, "TEXT_OT_paste");
+ uiItemO(layout, NULL, 0, "TEXT_OT_new");
+ uiItemO(layout, NULL, 0, "TEXT_OT_open");
+ uiItemO(layout, NULL, 0, "TEXT_OT_save");
+ uiItemO(layout, NULL, 0, "TEXT_OT_save_as");
+ uiItemO(layout, NULL, 0, "TEXT_OT_run_script");
+ uiPupMenuEnd(C, pup);
}
else {
- head= uiPupMenuBegin("File", 0);
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin("File", 0);
+ uiItemO(layout, NULL, 0, "TEXT_OT_new");
+ uiItemO(layout, NULL, 0, "TEXT_OT_open");
+ uiPupMenuEnd(C, pup);
}
}
{
// Alt+Shift+E
- uiMenuItem *head;
+ uiPopupMenu *pup;
- head= uiPupMenuBegin("Edit", 0);
- uiMenuItemO(head, 0, "TEXT_OT_cut");
- uiMenuItemO(head, 0, "TEXT_OT_copy");
- uiMenuItemO(head, 0, "TEXT_OT_paste");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin("Edit", 0);
+ uiItemO(layout, NULL, 0, "TEXT_OT_cut");
+ uiItemO(layout, NULL, 0, "TEXT_OT_copy");
+ uiItemO(layout, NULL, 0, "TEXT_OT_paste");
+ uiPupMenuEnd(C, pup);
}
{
// Alt+Shift+F
- uiMenuItem *head;
+ uiPopupMenu *pup;
if(text) {
- head= uiPupMenuBegin("Text", 0);
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
- uiMenuItemO(head, 0, "TEXT_OT_save");
- uiMenuItemO(head, 0, "TEXT_OT_save_as");
- uiMenuItemO(head, 0, "TEXT_OT_run_script");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin("Text", 0);
+ uiItemO(layout, NULL, 0, "TEXT_OT_new");
+ uiItemO(layout, NULL, 0, "TEXT_OT_open");
+ uiItemO(layout, NULL, 0, "TEXT_OT_save");
+ uiItemO(layout, NULL, 0, "TEXT_OT_save_as");
+ uiItemO(layout, NULL, 0, "TEXT_OT_run_script");
+ uiPupMenuEnd(C, pup);
}
else {
- head= uiPupMenuBegin("File", 0);
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin("File", 0);
+ uiItemO(layout, NULL, 0, "TEXT_OT_new");
+ uiItemO(layout, NULL, 0, "TEXT_OT_open");
+ uiPupMenuEnd(C, pup);
}
}
{
// Alt+Shift+V
- uiMenuItem *head;
+ uiPopupMenu *pup;
- head= uiPupMenuBegin("Text", 0);
- uiMenuItemEnumO(head, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP);
- uiMenuItemEnumO(head, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM);
- uiMenuItemEnumO(head, "Page Up", 0, "TEXT_OT_move", "type", PREV_PAGE);
- uiMenuItemEnumO(head, "Page Down", 0, "TEXT_OT_move", "type", NEXT_PAGE);
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin("Text", 0);
+ uiItemEnumO(layout, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP);
+ uiItemEnumO(layout, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM);
+ uiItemEnumO(layout, "Page Up", 0, "TEXT_OT_move", "type", PREV_PAGE);
+ uiItemEnumO(layout, "Page Down", 0, "TEXT_OT_move", "type", NEXT_PAGE);
+ uiPupMenuEnd(C, pup);
}
#endif