32
# point size and face need to choosen for platform
33
if wx.Platform == '__WXMSW__':
36
elif wx.Platform == '__WXMAC__':
43
32
class WbFrame(wx.Frame):
45
34
status_search = 0 # use the general area
46
35
status_progress = 1
48
37
status_num_fields = 3
49
status_widths = [-1, 100, -2]
38
status_widths = [-1, 150, -2]
51
40
def __init__( self, app ):
42
title = T_('PySVN WorkBench')
55
44
win_prefs = self.app.prefs.getWindow()
58
47
if win_prefs.maximized:
59
48
extra_style = wx.MAXIMIZE
60
50
wx.Frame.__init__(self, None, -1, title,
61
51
win_prefs.frame_position,
62
52
win_prefs.frame_size,
63
53
wx.DEFAULT_FRAME_STYLE|extra_style )
55
# Reset the size after startup to workaround a potential
56
# problem on OSX with incorrect first size event saving the
57
# wrong size in teh preferences
58
wx.CallAfter(self.SetSize, win_prefs.frame_size)
65
60
self.menu_edit = wx.Menu()
66
self.menu_edit.Append( wb_ids.id_SP_EditCopy, "&Copy", "Copy Files" )
67
self.menu_edit.Append( wb_ids.id_SP_EditCut, "&Cut", "Cut Files" )
68
self.menu_edit.Append( wb_ids.id_SP_EditPaste, "&Paste", "Paste Files" )
61
self.menu_edit.Append( wb_ids.id_SP_EditCopy, T_("&Copy"), T_("Copy Files") )
62
self.menu_edit.Append( wb_ids.id_SP_EditCut, T_("&Cut"), T_("Cut Files") )
63
self.menu_edit.Append( wb_ids.id_SP_EditPaste, T_("&Paste"), T_("Paste Files") )
69
64
self.menu_edit.AppendSeparator()
70
self.menu_edit.Append( wb_ids.id_ClearLog, "&Clear log", "Clear the log window" )
65
self.menu_edit.Append( wb_ids.id_ClearLog, T_("&Clear log"), T_("Clear the log window") )
72
67
if wx.Platform != '__WXMAC__':
73
68
self.menu_file = wx.Menu()
75
70
self.menu_file = self.menu_edit
77
self.menu_file.Append( wx.ID_PREFERENCES, "&Preferences...", "Preferences" )
78
self.menu_file.Append( wx.ID_EXIT, "E&xit", "Exit the application" )
72
self.menu_file.Append( wx.ID_PREFERENCES, T_("&Preferences..."), T_("Preferences") )
73
self.menu_file.Append( wx.ID_EXIT, T_("E&xit"), T_("Exit the application") )
80
75
self.menu_actions = wx.Menu()
81
self.menu_actions.Append( wb_ids.id_Command_Shell, '&Command Shell', 'Command Shell' )
82
self.menu_actions.Append( wb_ids.id_File_Browser, '&File Browser', 'File Browser' )
83
self.menu_actions.AppendSeparator()
84
self.menu_actions.Append( wb_ids.id_File_Edit, 'Edit', 'Edit' )
85
self.menu_actions.Append( wb_ids.id_Shell_Open, 'Open', 'Open' )
86
self.menu_actions.AppendSeparator()
87
self.menu_actions.Append( wb_ids.id_SP_DiffWorkBase, 'Diff WC vs. BASE...', 'Diff WC vs. BASE...' )
88
self.menu_actions.Append( wb_ids.id_SP_DiffWorkHead, 'Diff WC vs. HEAD...', 'Diff WC vs. HEAD...' )
89
self.menu_actions.Append( wb_ids.id_SP_DiffWorkBranchOriginBase, 'Diff WC vs. branch origin BASE...', 'Diff WC vs. branch origin BASE...' )
90
self.menu_actions.Append( wb_ids.id_SP_DiffWorkBranchOriginHead, 'Diff WC vs. branch origin HEAD...', 'Diff WC vs. branch origin HEAD...' )
76
self.menu_actions.Append( wb_ids.id_Command_Shell, T_('&Command Shell'), T_('Command Shell') )
77
self.menu_actions.Append( wb_ids.id_File_Browser, T_('&File Browser'), T_('File Browser') )
78
self.menu_actions.AppendSeparator()
79
self.menu_actions.Append( wb_ids.id_File_Edit, T_('Edit'), T_('Edit') )
80
self.menu_actions.Append( wb_ids.id_Shell_Open, T_('Open'), T_('Open') )
81
self.menu_actions.AppendSeparator()
82
self.menu_actions.Append( wb_ids.id_SP_DiffWorkBase, T_('Diff WC vs. BASE...'), T_('Diff WC vs. BASE...') )
83
self.menu_actions.Append( wb_ids.id_SP_DiffWorkHead, T_('Diff WC vs. HEAD...'), T_('Diff WC vs. HEAD...') )
84
self.menu_actions.Append( wb_ids.id_SP_DiffWorkBranchOriginBase, T_('Diff WC vs. branch origin BASE...'), T_('Diff WC vs. branch origin BASE...') )
85
self.menu_actions.Append( wb_ids.id_SP_DiffWorkBranchOriginHead, T_('Diff WC vs. branch origin HEAD...'), T_('Diff WC vs. branch origin HEAD...') )
92
87
self.menu_actions_conflict = wx.Menu()
93
self.menu_actions.AppendMenu( wb_ids.id_SP_ConflictMenu, 'Conflict', self.menu_actions_conflict )
94
self.menu_actions_conflict.Append( wb_ids.id_SP_DiffOldMine, 'Diff Conflict Old vs. Mine...', 'Diff Conflict Old vs. Mine...' )
95
self.menu_actions_conflict.Append( wb_ids.id_SP_DiffMineNew, 'Diff Conflict Mine vs. New...', 'Diff Conflict Mine vs. New...' )
96
self.menu_actions_conflict.Append( wb_ids.id_SP_DiffOldNew, 'Diff Conflict Old vs. New...', 'Diff Conflict Old vs. New...' )
88
self.menu_actions.AppendMenu( wb_ids.id_SP_ConflictMenu, T_('Conflict'), self.menu_actions_conflict )
89
self.menu_actions_conflict.Append( wb_ids.id_SP_DiffOldMine, T_('Diff Conflict Old vs. Mine...'), T_('Diff Conflict Old vs. Mine...') )
90
self.menu_actions_conflict.Append( wb_ids.id_SP_DiffMineNew, T_('Diff Conflict Mine vs. New...'), T_('Diff Conflict Mine vs. New...') )
91
self.menu_actions_conflict.Append( wb_ids.id_SP_DiffOldNew, T_('Diff Conflict Old vs. New...'), T_('Diff Conflict Old vs. New...') )
97
92
self.menu_actions_conflict.AppendSeparator()
98
self.menu_actions_conflict.Append( wb_ids.id_SP_Resolved, 'Resolved Conflict', 'Resolved Conflict' )
93
self.menu_actions_conflict.Append( wb_ids.id_SP_Resolved, T_('Resolved Conflict'), T_('Resolved Conflict') )
100
95
self.menu_actions.AppendSeparator()
101
self.menu_actions.Append( wb_ids.id_SP_Annotate, 'Annotate...', 'Annotate...' )
102
self.menu_actions.Append( wb_ids.id_SP_History, 'Log history...', 'Log history...' )
103
self.menu_actions.Append( wb_ids.id_SP_Info, 'Information...', 'Information...' )
104
self.menu_actions.Append( wb_ids.id_SP_Properties, 'Properties...', 'Properties...' )
105
self.menu_actions.AppendSeparator()
106
self.menu_actions.Append( wb_ids.id_SP_Update, 'Update', 'Update' )
107
self.menu_actions.Append( wb_ids.id_SP_Checkout, 'Checkout', 'Checkout' )
108
self.menu_actions.AppendSeparator()
109
self.menu_actions.Append( wb_ids.id_SP_Checkin, 'Checkin...', 'Checkin...' )
110
self.menu_actions.AppendSeparator()
111
self.menu_actions.Append( wb_ids.id_SP_Lock, 'Lock...', 'Lock...' )
112
self.menu_actions.Append( wb_ids.id_SP_Unlock, 'Unlock...', 'Unlock...' )
113
self.menu_actions.AppendSeparator()
114
self.menu_actions.Append( wb_ids.id_SP_NewFile, 'New File...', 'New File...' )
115
self.menu_actions.Append( wb_ids.id_SP_Mkdir, 'Make directory...', 'Make directory...' )
116
self.menu_actions.Append( wb_ids.id_SP_Add, 'Add', 'Add' )
117
self.menu_actions.Append( wb_ids.id_SP_Rename, 'Rename...', 'Rename' )
118
self.menu_actions.AppendSeparator()
119
self.menu_actions.Append( wb_ids.id_SP_Delete, 'Delete...', 'Delete' )
120
self.menu_actions.Append( wb_ids.id_SP_Revert, 'Revert...', 'Revert' )
121
self.menu_actions.AppendSeparator()
122
self.menu_actions.Append( wb_ids.id_SP_Cleanup, 'Clean up', 'Clean up working copy' )
96
self.menu_actions.Append( wb_ids.id_SP_Annotate, T_('Annotate...'), T_('Annotate...') )
97
self.menu_actions.Append( wb_ids.id_SP_History, T_('Log history...'), T_('Log history...') )
98
self.menu_actions.Append( wb_ids.id_SP_Info, T_('Information...'), T_('Information...') )
99
self.menu_actions.Append( wb_ids.id_SP_Properties, T_('Properties...'), T_('Properties...') )
100
self.menu_actions.AppendSeparator()
101
self.menu_actions.Append( wb_ids.id_SP_Update, T_('Update'), T_('Update') )
102
self.menu_actions.Append( wb_ids.id_SP_Checkout, T_('Checkout'), T_('Checkout') )
103
self.menu_actions.AppendSeparator()
104
self.menu_actions.Append( wb_ids.id_SP_Checkin, T_('Checkin...'), T_('Checkin...') )
105
self.menu_actions.AppendSeparator()
106
self.menu_actions.Append( wb_ids.id_SP_Lock, T_('Lock...'), T_('Lock...') )
107
self.menu_actions.Append( wb_ids.id_SP_Unlock, T_('Unlock...'), T_('Unlock...') )
108
self.menu_actions.AppendSeparator()
109
self.menu_actions.Append( wb_ids.id_SP_NewFile, T_('New File...'), T_('New File...') )
110
self.menu_actions.Append( wb_ids.id_SP_Mkdir, T_('Make directory...'), T_('Make directory...') )
111
self.menu_actions.Append( wb_ids.id_SP_Add, T_('Add'), T_('Add') )
112
self.menu_actions.Append( wb_ids.id_SP_Rename, T_('Rename...'), T_('Rename') )
113
self.menu_actions.AppendSeparator()
114
self.menu_actions.Append( wb_ids.id_SP_Delete, T_('Delete...'), T_('Delete') )
115
self.menu_actions.Append( wb_ids.id_SP_Revert, T_('Revert...'), T_('Revert') )
116
self.menu_actions.AppendSeparator()
117
self.menu_actions.Append( wb_ids.id_SP_Cleanup, T_('Clean up'), T_('Clean up working copy') )
118
self.menu_actions.AppendSeparator()
119
self.menu_actions.Append( wb_ids.id_SP_CreateTag, T_('Create Tag...'), T_('Create Tag') )
120
self.menu_actions.Append( wb_ids.id_SP_CreateBranch, T_('Create Branch...'), T_('Create Branch') )
124
122
self.menu_reports = wx.Menu()
125
self.menu_reports.Append( wb_ids.id_SP_Report_LocksWc, 'Working copy Locks...', 'Locks held in Working Copy' )
126
self.menu_reports.Append( wb_ids.id_SP_Report_LocksRepos, 'Repository Locks...', 'Locks held in Repository' )
123
self.menu_reports.Append( wb_ids.id_SP_Report_LocksWc, T_('Working copy Locks...'), T_('Locks held in Working Copy') )
124
self.menu_reports.Append( wb_ids.id_SP_Report_LocksRepos, T_('Repository Locks...'), T_('Locks held in Repository') )
127
125
self.menu_reports.AppendSeparator()
128
self.menu_reports.Append( wb_ids.id_SP_Checkin, 'Changes...', 'Changes available for checkin' )
129
self.menu_reports.Append( wb_ids.id_SP_Report_Updates, 'Updates...', 'Updates available in the Repository' )
130
self.menu_reports.Append( wb_ids.id_SP_Report_BranchChanges, 'Branch changes...', 'Files changed in this branch' )
126
self.menu_reports.Append( wb_ids.id_SP_Checkin, T_('Changes...'), T_('Changes available for checkin') )
127
self.menu_reports.Append( wb_ids.id_SP_Report_Updates, T_('Updates...'), T_('Updates available in the Repository') )
128
self.menu_reports.Append( wb_ids.id_SP_Report_BranchChanges, T_('Branch changes...'), T_('Files changed in this branch') )
132
130
self.menu_view = wx.Menu()
133
self.menu_view.AppendCheckItem( wb_ids.id_View_ControlledFiles, "Show &Controlled files", "Show Controlled files" )
134
self.menu_view.AppendCheckItem( wb_ids.id_View_UncontrolledFiles, "Show &Uncontrolled files", "Show Uncontrolled files" )
135
self.menu_view.AppendCheckItem( wb_ids.id_View_IgnoredFiles, "Show &Ignored files", "Show ignored files" )
136
self.menu_view.AppendSeparator()
137
self.menu_view.AppendCheckItem( wb_ids.id_View_Recursive, "Show &Recursive files", "Show recursive files" )
138
self.menu_view.AppendSeparator()
139
self.menu_view.Append( wb_ids.id_View_Refresh, "&Refresh\tF5", "Refresh display" )
140
self.menu_view.AppendCheckItem( wb_ids.id_View_AutoRefresh, "&Automatic Refresh", "Automatic refresh" )
131
self.menu_view.AppendCheckItem( wb_ids.id_View_ControlledFiles, T_("Show &Controlled files"), T_("Show Controlled files") )
132
self.menu_view.AppendCheckItem( wb_ids.id_View_UncontrolledFiles, T_("Show &Uncontrolled files"), T_("Show Uncontrolled files") )
133
self.menu_view.AppendCheckItem( wb_ids.id_View_IgnoredFiles, T_("Show &Ignored files"), T_("Show ignored files") )
134
self.menu_view.AppendCheckItem( wb_ids.id_View_OnlyChanges, T_("Show &Only changed files"), T_("Filter out unchanged files") )
135
self.menu_view.AppendSeparator()
136
self.menu_view.AppendCheckItem( wb_ids.id_View_Recursive, T_("Show &Recursive files"), T_("Show recursive files") )
137
self.menu_view.AppendSeparator()
138
self.menu_view.AppendCheckItem( wb_ids.id_View_Diff_WbDiff, T_('Use WorkBench Diff') )
139
self.menu_view.AppendCheckItem( wb_ids.id_View_Diff_ExtGuiDiff, T_('Use External GUI Diff') )
140
self.menu_view.AppendCheckItem( wb_ids.id_View_Diff_ExtTextDiff, T_('Use External Text Diff') )
141
self.menu_view.AppendCheckItem( wb_ids.id_View_Diff_SvnDiff, T_('Use SVN Diff') )
142
self.menu_view.AppendSeparator()
143
self.menu_view.Append( wb_ids.id_View_Refresh, T_("&Refresh\tF5"), T_("Refresh display") )
144
self.menu_view.AppendCheckItem( wb_ids.id_View_AutoRefresh, T_("&Automatic Refresh"), T_("Automatic refresh") )
142
148
self.all_bookmark_ids = {}
143
149
self.all_bookmark_top_level_menu_ids = []
144
150
self.all_bookmark_folders = {}
146
152
self.menu_bookmarks = wx.Menu()
147
self.menu_bookmarks.Append( wb_ids.id_Bookmark_Add, 'Add', 'Add Bookmark' )
148
self.menu_bookmarks.Append( wb_ids.id_Bookmark_Manage, 'Manage...', 'Manage Bookmarks' )
153
self.menu_bookmarks.Append( wb_ids.id_Bookmark_Add, T_('Add'), T_('Add Bookmark') )
154
self.menu_bookmarks.Append( wb_ids.id_Bookmark_Manage, T_('Manage...'), T_('Manage Bookmarks') )
149
155
self.menu_bookmarks.AppendSeparator()
151
157
self.__bookmarkMenuReorder()
153
159
self.menu_project = wx.Menu()
154
self.menu_project.Append( wb_ids.id_Project_Add, 'Add...', 'Project Add' )
155
self.menu_project.Append( wb_ids.id_Project_Update, 'Update...', 'Update Project' )
160
self.menu_project.Append( wb_ids.id_Project_Add, T_('Add...'), T_('Project Add') )
161
self.menu_project.Append( wb_ids.id_Project_Update, T_('Update...'), T_('Update Project') )
156
162
self.menu_project.AppendSeparator()
157
self.menu_project.Append( wb_ids.id_Project_Delete, 'Delete...', 'Delete Project' )
163
self.menu_project.Append( wb_ids.id_Project_Delete, T_('Delete...'), T_('Delete Project') )
159
165
self.menu_help = wx.Menu()
160
self.menu_help.Append( wx.ID_ABOUT, "&About...", "About the application" )
166
self.menu_help.Append( wx.ID_ABOUT, T_("&About..."), T_("About the application") )
162
168
self.menu_bar = wx.MenuBar()
163
169
if wx.Platform != '__WXMAC__':
164
self.menu_bar.Append( self.menu_file, "&File" )
165
self.menu_bar.Append( self.menu_edit, "&Edit" )
166
self.menu_bar.Append( self.menu_view, "&View" )
167
self.menu_bar.Append( self.menu_actions, "&Actions" )
168
self.menu_bar.Append( self.menu_reports, "&Reports" )
169
self.menu_bar.Append( self.menu_bookmarks, "&Bookmarks" )
170
self.menu_bar.Append( self.menu_project, "&Project" )
171
self.menu_bar.Append( self.menu_help, "&Help" )
170
self.menu_bar.Append( self.menu_file, T_("&File") )
171
self.menu_bar.Append( self.menu_edit, T_("&Edit") )
172
self.menu_bar.Append( self.menu_view, T_("&View") )
173
self.menu_bar.Append( self.menu_actions, T_("&Actions") )
174
self.menu_bar.Append( self.menu_reports, T_("&Reports") )
175
self.menu_bar.Append( self.menu_bookmarks, T_("&Bookmarks") )
176
self.menu_bar.Append( self.menu_project, T_("&Project") )
177
self.menu_bar.Append( self.menu_help, T_("&Help") )
173
179
self.SetMenuBar( self.menu_bar )
183
189
t.SetToolBitmapSize( bitmap_size )
184
190
t.AddSimpleTool( wb_ids.id_SP_EditCut,
185
191
wb_images.getBitmap( 'toolbar_images/editcut.png', bitmap_size ),
186
'Cut Files and Folders', 'Cut Files and Folders' )
192
T_('Cut Files and Folders'), T_('Cut Files and Folders') )
187
193
t.AddSimpleTool( wb_ids.id_SP_EditCopy,
188
194
wb_images.getBitmap( 'toolbar_images/editcopy.png', bitmap_size ),
189
'Copy Files and Folders', 'Copy Files and Folders' )
195
T_('Copy Files and Folders'), T_('Copy Files and Folders') )
190
196
t.AddSimpleTool( wb_ids.id_SP_EditPaste,
191
197
wb_images.getBitmap( 'toolbar_images/editpaste.png', bitmap_size ),
192
'Paste Files and Folders', 'Paste Files and Folders' )
198
T_('Paste Files and Folders'), T_('Paste Files and Folders') )
194
200
t.AddSimpleTool( wb_ids.id_Command_Shell,
195
201
wb_images.getBitmap( 'toolbar_images/terminal.png', bitmap_size ),
196
'Command Shell', 'Start new command shell' )
202
T_('Command Shell'), T_('Start new command shell') )
197
203
t.AddSimpleTool( wb_ids.id_File_Browser,
198
204
wb_images.getBitmap( 'toolbar_images/file_browser.png', bitmap_size ),
199
'File Browser', 'File Browser' )
205
T_('File Browser'), T_('File Browser') )
201
207
t.AddSimpleTool( wb_ids.id_File_Edit,
202
208
wb_images.getBitmap( 'toolbar_images/edit.png', bitmap_size ),
203
'Edit File', 'Edit File' )
209
T_('Edit File'), T_('Edit File') )
204
210
t.AddSimpleTool( wb_ids.id_Shell_Open,
205
211
wb_images.getBitmap( 'toolbar_images/open.png', bitmap_size ),
206
'Open File', 'Open File' )
212
T_('Open File'), T_('Open File') )
208
214
t.AddSimpleTool( wb_ids.id_SP_DiffWorkBase,
209
215
wb_images.getBitmap( 'toolbar_images/diff.png', bitmap_size ),
210
'Diff changes against base', 'Diff changes against base' )
216
T_('Diff changes against base'), T_('Diff changes against base') )
211
217
t.AddSimpleTool( wb_ids.id_SP_History,
212
218
wb_images.getBitmap( 'toolbar_images/history.png', bitmap_size ),
213
'Show History log', 'Show History log' )
219
T_('Show History log'), T_('Show History log') )
214
220
t.AddSimpleTool( wb_ids.id_SP_Info,
215
221
wb_images.getBitmap( 'toolbar_images/info.png', bitmap_size ),
216
'File Information', 'File Information' )
222
T_('File Information'), T_('File Information') )
217
223
t.AddSimpleTool( wb_ids.id_SP_Properties,
218
224
wb_images.getBitmap( 'toolbar_images/property.png', bitmap_size ),
219
'File Properties', 'File Properties' )
225
T_('File Properties'), T_('File Properties') )
221
227
t.AddSimpleTool( wb_ids.id_SP_Add,
222
228
wb_images.getBitmap( 'toolbar_images/add.png', bitmap_size ),
223
'Add Files and Folders', 'Add Files and Folders' )
229
T_('Add Files and Folders'), T_('Add Files and Folders') )
224
230
t.AddSimpleTool( wb_ids.id_SP_Delete,
225
231
wb_images.getBitmap( 'toolbar_images/delete.png', bitmap_size ),
226
'Delete selected Files and Folders', 'Delete selected Files and Folders' )
232
T_('Delete selected Files and Folders'), T_('Delete selected Files and Folders') )
227
233
t.AddSimpleTool( wb_ids.id_SP_Revert,
228
234
wb_images.getBitmap( 'toolbar_images/revert.png', bitmap_size ),
229
'Revert selected Files and Folders', 'Revert selected Files and Folders' )
235
T_('Revert selected Files and Folders'), T_('Revert selected Files and Folders') )
231
237
t.AddSimpleTool( wb_ids.id_SP_Lock,
232
238
wb_images.getBitmap( 'toolbar_images/lock.png', bitmap_size ),
233
'Lock File', 'Lock File' )
239
T_('Lock File'), T_('Lock File') )
234
240
t.AddSimpleTool( wb_ids.id_SP_Unlock,
235
241
wb_images.getBitmap( 'toolbar_images/unlock.png', bitmap_size ),
236
'Unlock File', 'Unlock File' )
242
T_('Unlock File'), T_('Unlock File') )
238
244
t.AddSimpleTool( wb_ids.id_SP_Checkin,
239
245
wb_images.getBitmap( 'toolbar_images/checkin.png', bitmap_size ),
240
'Checkin changes', 'Checkin changes' )
246
T_('Checkin changes'), T_('Checkin changes') )
241
247
t.AddSimpleTool( wb_ids.id_SP_Update,
242
248
wb_images.getBitmap( 'toolbar_images/update.png', bitmap_size ),
243
'Update working copy', 'Update working copy' )
249
T_('Update working copy'), T_('Update working copy') )
251
t.AddSimpleTool( wb_ids.id_View_Recursive,
252
wb_images.getBitmap( 'toolbar_images/flatview.png', bitmap_size ),
253
T_('Use recursive (flat) view'), T_('Use recursive (flat) view'),
255
t.AddSimpleTool( wb_ids.id_View_OnlyChanges,
256
wb_images.getBitmap( 'toolbar_images/onlychanges.png', bitmap_size ),
257
T_('Show only changed files'), T_('Show only changed files'),