Merged from trunk with revision range 36835-37865,
[blender.git] / source / blender / editors / space_text / text_header.c
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2008 Blender Foundation.
21  * All rights reserved.
22  *
23  * 
24  * Contributor(s): Blender Foundation
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 /** \file blender/editors/space_text/text_header.c
30  *  \ingroup sptext
31  */
32
33
34 #include <stdlib.h>
35 #include <string.h>
36 #include <stdio.h>
37
38 /* file time checking */
39 #include <ctype.h>
40 #include <sys/types.h>
41 #include <sys/stat.h>
42
43 #ifndef _WIN32
44 #include <unistd.h>
45 #else
46 #include <io.h>
47 #include "BLI_winstuff.h"
48 #endif
49
50 #include "DNA_windowmanager_types.h"
51
52 #include "MEM_guardedalloc.h"
53
54 #include "BLI_blenlib.h"
55 #include "BLI_utildefines.h"
56
57 #include "BKE_context.h"
58 #include "BKE_screen.h"
59
60 #include "ED_screen.h"
61
62 #include "WM_types.h"
63
64
65
66
67 #ifdef WITH_PYTHON
68 // XXX #include "BPY_menus.h"
69 #endif
70
71 #include "text_intern.h"
72
73 #define HEADER_PATH_MAX 260
74
75 /* ************************ header area region *********************** */
76
77 /************************** properties ******************************/
78
79 static ARegion *text_has_properties_region(ScrArea *sa)
80 {
81         ARegion *ar, *arnew;
82
83         ar= BKE_area_find_region_type(sa, RGN_TYPE_UI);
84         if(ar) return ar;
85         
86         /* add subdiv level; after header */
87         ar= BKE_area_find_region_type(sa, RGN_TYPE_HEADER);
88
89         /* is error! */
90         if(ar==NULL) return NULL;
91         
92         arnew= MEM_callocN(sizeof(ARegion), "properties region");
93         
94         BLI_insertlinkafter(&sa->regionbase, ar, arnew);
95         arnew->regiontype= RGN_TYPE_UI;
96         arnew->alignment= RGN_ALIGN_LEFT;
97         
98         arnew->flag = RGN_FLAG_HIDDEN;
99         
100         return arnew;
101 }
102
103 static int properties_poll(bContext *C)
104 {
105         return (CTX_wm_space_text(C) != NULL);
106 }
107
108 static int properties_exec(bContext *C, wmOperator *UNUSED(op))
109 {
110         ScrArea *sa= CTX_wm_area(C);
111         ARegion *ar= text_has_properties_region(sa);
112         
113         if(ar)
114                 ED_region_toggle_hidden(C, ar);
115
116         return OPERATOR_FINISHED;
117 }
118
119 void TEXT_OT_properties(wmOperatorType *ot)
120 {
121         /* identifiers */
122         ot->name= "Properties";
123         ot->description= "Toggle text properties panel";
124         ot->idname= "TEXT_OT_properties";
125         
126         /* api callbacks */
127         ot->exec= properties_exec;
128         ot->poll= properties_poll;
129 }
130
131 /******************** XXX popup menus *******************/
132
133 #if 0
134 {
135         // RMB
136
137         uiPopupMenu *pup;
138
139         if(text) {
140                 pup= uiPupMenuBegin(C, "Text", ICON_NONE);
141                 if(txt_has_sel(text)) {
142                         uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_cut");
143                         uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_copy");
144                 }
145                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_paste");
146                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_new");
147                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_open");
148                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_save");
149                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_save_as");
150                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_run_script");
151                 uiPupMenuEnd(C, pup);
152         }
153         else {
154                 pup= uiPupMenuBegin(C, "File", ICON_NONE);
155                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_new");
156                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_open");
157                 uiPupMenuEnd(C, pup);
158         }
159 }
160
161 {
162         // Alt+Shift+E
163
164         uiPopupMenu *pup;
165
166         pup= uiPupMenuBegin(C, "Edit", ICON_NONE);
167         uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_cut");
168         uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_copy");
169         uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_paste");
170         uiPupMenuEnd(C, pup);
171 }
172
173 {
174         // Alt+Shift+F
175
176         uiPopupMenu *pup;
177
178         if(text) {
179                 pup= uiPupMenuBegin(C, "Text", ICON_NONE);
180                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_new");
181                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_open");
182                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_save");
183                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_save_as");
184                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_run_script");
185                 uiPupMenuEnd(C, pup);
186         }
187         else {
188                 pup= uiPupMenuBegin(C, "File", ICON_NONE);
189                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_new");
190                 uiItemO(layout, NULL, ICON_NONE, "TEXT_OT_open");
191                 uiPupMenuEnd(C, pup);
192         }
193 }
194
195 {
196         // Alt+Shift+V
197
198         uiPopupMenu *pup;
199
200         pup= uiPupMenuBegin(C, "Text", ICON_NONE);
201         uiItemEnumO(layout, "TEXT_OT_move", "Top of File", 0, "type", FILE_TOP);
202         uiItemEnumO(layout, "TEXT_OT_move", "Bottom of File", 0, "type", FILE_BOTTOM);
203         uiItemEnumO(layout, "TEXT_OT_move", "Page Up", 0, "type", PREV_PAGE);
204         uiItemEnumO(layout, "TEXT_OT_move", "Page Down", 0, "type", NEXT_PAGE);
205         uiPupMenuEnd(C, pup);
206 }
207 #endif
208