33 from controls import FolderTree |
33 from controls import FolderTree |
34 |
34 |
35 FILTER = _("All files (*.*)|*.*|CSV files (*.csv)|*.csv") |
35 FILTER = _("All files (*.*)|*.*|CSV files (*.csv)|*.csv") |
36 |
36 |
37 class FileManagementPanel(EditorPanel): |
37 class FileManagementPanel(EditorPanel): |
38 |
38 |
39 def _init_Editor(self, parent): |
39 def _init_Editor(self, parent): |
40 self.Editor = wx.Panel(parent) |
40 self.Editor = wx.Panel(parent) |
41 |
41 |
42 main_sizer = wx.BoxSizer(wx.HORIZONTAL) |
42 main_sizer = wx.BoxSizer(wx.HORIZONTAL) |
43 |
43 |
44 left_sizer = wx.BoxSizer(wx.VERTICAL) |
44 left_sizer = wx.BoxSizer(wx.VERTICAL) |
45 main_sizer.AddSizer(left_sizer, 1, border=5, flag=wx.GROW|wx.ALL) |
45 main_sizer.AddSizer(left_sizer, 1, border=5, flag=wx.GROW|wx.ALL) |
46 |
46 |
47 managed_dir_label = wx.StaticText(self.Editor, label=_(self.TagName) + ":") |
47 managed_dir_label = wx.StaticText(self.Editor, label=_(self.TagName) + ":") |
48 left_sizer.AddWindow(managed_dir_label, border=5, flag=wx.GROW|wx.BOTTOM) |
48 left_sizer.AddWindow(managed_dir_label, border=5, flag=wx.GROW|wx.BOTTOM) |
49 |
49 |
50 self.ManagedDir = FolderTree(self.Editor, self.Folder, FILTER) |
50 self.ManagedDir = FolderTree(self.Editor, self.Folder, FILTER) |
51 left_sizer.AddWindow(self.ManagedDir, 1, flag=wx.GROW) |
51 left_sizer.AddWindow(self.ManagedDir, 1, flag=wx.GROW) |
52 |
52 |
53 managed_treectrl = self.ManagedDir.GetTreeCtrl() |
53 managed_treectrl = self.ManagedDir.GetTreeCtrl() |
54 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemChanged, managed_treectrl) |
54 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemChanged, managed_treectrl) |
55 if self.EnableDragNDrop: |
55 if self.EnableDragNDrop: |
56 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTreeBeginDrag, managed_treectrl) |
56 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTreeBeginDrag, managed_treectrl) |
57 |
57 |
58 button_sizer = wx.BoxSizer(wx.VERTICAL) |
58 button_sizer = wx.BoxSizer(wx.VERTICAL) |
59 main_sizer.AddSizer(button_sizer, border=5, |
59 main_sizer.AddSizer(button_sizer, border=5, |
60 flag=wx.ALL|wx.ALIGN_CENTER_VERTICAL) |
60 flag=wx.ALL|wx.ALIGN_CENTER_VERTICAL) |
61 |
61 |
62 for idx, (name, bitmap, help) in enumerate([ |
62 for idx, (name, bitmap, help) in enumerate([ |
63 ("DeleteButton", "remove_element", _("Remove file from left folder")), |
63 ("DeleteButton", "remove_element", _("Remove file from left folder")), |
64 ("LeftCopyButton", "LeftCopy", _("Copy file from right folder to left")), |
64 ("LeftCopyButton", "LeftCopy", _("Copy file from right folder to left")), |
65 ("RightCopyButton", "RightCopy", _("Copy file from left folder to right")), |
65 ("RightCopyButton", "RightCopy", _("Copy file from left folder to right")), |
66 ("EditButton", "edit", _("Edit file"))]): |
66 ("EditButton", "edit", _("Edit file"))]): |
67 button = wx.lib.buttons.GenBitmapButton(self.Editor, |
67 button = wx.lib.buttons.GenBitmapButton(self.Editor, |
68 bitmap=GetBitmap(bitmap), |
68 bitmap=GetBitmap(bitmap), |
69 size=wx.Size(28, 28), style=wx.NO_BORDER) |
69 size=wx.Size(28, 28), style=wx.NO_BORDER) |
70 button.SetToolTipString(help) |
70 button.SetToolTipString(help) |
71 setattr(self, name, button) |
71 setattr(self, name, button) |
72 if idx > 0: |
72 if idx > 0: |
73 flag = wx.TOP |
73 flag = wx.TOP |
74 else: |
74 else: |
75 flag = 0 |
75 flag = 0 |
76 self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button) |
76 self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button) |
77 button_sizer.AddWindow(button, border=20, flag=flag) |
77 button_sizer.AddWindow(button, border=20, flag=flag) |
78 |
78 |
79 right_sizer = wx.BoxSizer(wx.VERTICAL) |
79 right_sizer = wx.BoxSizer(wx.VERTICAL) |
80 main_sizer.AddSizer(right_sizer, 1, border=5, flag=wx.GROW|wx.ALL) |
80 main_sizer.AddSizer(right_sizer, 1, border=5, flag=wx.GROW|wx.ALL) |
81 |
81 |
82 if wx.Platform == '__WXMSW__': |
82 if wx.Platform == '__WXMSW__': |
83 system_dir_label = wx.StaticText(self.Editor, label=_("My Computer:")) |
83 system_dir_label = wx.StaticText(self.Editor, label=_("My Computer:")) |
84 else: |
84 else: |
85 system_dir_label = wx.StaticText(self.Editor, label=_("Home Directory:")) |
85 system_dir_label = wx.StaticText(self.Editor, label=_("Home Directory:")) |
86 right_sizer.AddWindow(system_dir_label, border=5, flag=wx.GROW|wx.BOTTOM) |
86 right_sizer.AddWindow(system_dir_label, border=5, flag=wx.GROW|wx.BOTTOM) |
87 |
87 |
88 self.SystemDir = FolderTree(self.Editor, self.HomeDirectory, FILTER, False) |
88 self.SystemDir = FolderTree(self.Editor, self.HomeDirectory, FILTER, False) |
89 right_sizer.AddWindow(self.SystemDir, 1, flag=wx.GROW) |
89 right_sizer.AddWindow(self.SystemDir, 1, flag=wx.GROW) |
90 |
90 |
91 system_treectrl = self.SystemDir.GetTreeCtrl() |
91 system_treectrl = self.SystemDir.GetTreeCtrl() |
92 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemChanged, system_treectrl) |
92 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemChanged, system_treectrl) |
93 |
93 |
94 self.Editor.SetSizer(main_sizer) |
94 self.Editor.SetSizer(main_sizer) |
95 |
95 |
96 def __init__(self, parent, controler, name, folder, enable_dragndrop=False): |
96 def __init__(self, parent, controler, name, folder, enable_dragndrop=False): |
97 self.Folder = os.path.realpath(folder) |
97 self.Folder = os.path.realpath(folder) |
98 self.EnableDragNDrop = enable_dragndrop |
98 self.EnableDragNDrop = enable_dragndrop |
99 |
99 |
100 if wx.Platform == '__WXMSW__': |
100 if wx.Platform == '__WXMSW__': |
101 self.HomeDirectory = "/" |
101 self.HomeDirectory = "/" |
102 else: |
102 else: |
103 self.HomeDirectory = os.path.expanduser("~") |
103 self.HomeDirectory = os.path.expanduser("~") |
104 |
104 |
105 EditorPanel.__init__(self, parent, name, None, None) |
105 EditorPanel.__init__(self, parent, name, None, None) |
106 |
106 |
107 self.Controler = controler |
107 self.Controler = controler |
108 |
108 |
109 self.EditableFileExtensions = [] |
109 self.EditableFileExtensions = [] |
110 self.EditButton.Hide() |
110 self.EditButton.Hide() |
111 |
111 |
112 self.SetIcon(GetBitmap("FOLDER")) |
112 self.SetIcon(GetBitmap("FOLDER")) |
113 |
113 |
114 def __del__(self): |
114 def __del__(self): |
115 self.Controler.OnCloseEditor(self) |
115 self.Controler.OnCloseEditor(self) |
116 |
116 |
117 def GetTitle(self): |
117 def GetTitle(self): |
118 return _(self.TagName) |
118 return _(self.TagName) |
119 |
119 |
120 def SetEditableFileExtensions(self, extensions): |
120 def SetEditableFileExtensions(self, extensions): |
121 self.EditableFileExtensions = extensions |
121 self.EditableFileExtensions = extensions |
122 if len(self.EditableFileExtensions) > 0: |
122 if len(self.EditableFileExtensions) > 0: |
123 self.EditButton.Show() |
123 self.EditButton.Show() |
124 |
124 |
125 def RefreshView(self): |
125 def RefreshView(self): |
126 self.ManagedDir.RefreshTree() |
126 self.ManagedDir.RefreshTree() |
127 self.SystemDir.RefreshTree() |
127 self.SystemDir.RefreshTree() |
128 self.RefreshButtonsState() |
128 self.RefreshButtonsState() |
129 |
129 |
130 def RefreshButtonsState(self): |
130 def RefreshButtonsState(self): |
131 managed_filepath = self.ManagedDir.GetPath() |
131 managed_filepath = self.ManagedDir.GetPath() |
132 system_filepath = self.SystemDir.GetPath() |
132 system_filepath = self.SystemDir.GetPath() |
133 |
133 |
134 self.DeleteButton.Enable(os.path.isfile(managed_filepath)) |
134 self.DeleteButton.Enable(os.path.isfile(managed_filepath)) |
135 self.LeftCopyButton.Enable(os.path.isfile(system_filepath)) |
135 self.LeftCopyButton.Enable(os.path.isfile(system_filepath)) |
136 self.RightCopyButton.Enable(os.path.isfile(managed_filepath)) |
136 self.RightCopyButton.Enable(os.path.isfile(managed_filepath)) |
137 if len(self.EditableFileExtensions) > 0: |
137 if len(self.EditableFileExtensions) > 0: |
138 self.EditButton.Enable( |
138 self.EditButton.Enable( |
139 os.path.isfile(managed_filepath) and |
139 os.path.isfile(managed_filepath) and |
140 os.path.splitext(managed_filepath)[1] in self.EditableFileExtensions) |
140 os.path.splitext(managed_filepath)[1] in self.EditableFileExtensions) |
141 |
141 |
142 def OnTreeItemChanged(self, event): |
142 def OnTreeItemChanged(self, event): |
143 self.RefreshButtonsState() |
143 self.RefreshButtonsState() |
144 event.Skip() |
144 event.Skip() |
145 |
145 |
146 def OnDeleteButton(self, event): |
146 def OnDeleteButton(self, event): |
147 filepath = self.ManagedDir.GetPath() |
147 filepath = self.ManagedDir.GetPath() |
148 if os.path.isfile(filepath): |
148 if os.path.isfile(filepath): |
149 folder, filename = os.path.split(filepath) |
149 folder, filename = os.path.split(filepath) |
150 |
150 |
151 dialog = wx.MessageDialog(self, |
151 dialog = wx.MessageDialog(self, |
152 _("Do you really want to delete the file '%s'?") % filename, |
152 _("Do you really want to delete the file '%s'?") % filename, |
153 _("Delete File"), wx.YES_NO|wx.ICON_QUESTION) |
153 _("Delete File"), wx.YES_NO|wx.ICON_QUESTION) |
154 remove = dialog.ShowModal() == wx.ID_YES |
154 remove = dialog.ShowModal() == wx.ID_YES |
155 dialog.Destroy() |
155 dialog.Destroy() |
156 |
156 |
157 if remove: |
157 if remove: |
158 os.remove(filepath) |
158 os.remove(filepath) |
159 self.ManagedDir.RefreshTree() |
159 self.ManagedDir.RefreshTree() |
160 event.Skip() |
160 event.Skip() |
161 |
161 |
162 def OnEditButton(self, event): |
162 def OnEditButton(self, event): |
163 filepath = self.ManagedDir.GetPath() |
163 filepath = self.ManagedDir.GetPath() |
164 if (os.path.isfile(filepath) and |
164 if (os.path.isfile(filepath) and |
165 os.path.splitext(filepath)[1] in self.EditableFileExtensions): |
165 os.path.splitext(filepath)[1] in self.EditableFileExtensions): |
166 self.Controler._OpenView(filepath + "::") |
166 self.Controler._OpenView(filepath + "::") |
167 event.Skip() |
167 event.Skip() |
168 |
168 |
169 def CopyFile(self, src, dst): |
169 def CopyFile(self, src, dst): |
170 if os.path.isfile(src): |
170 if os.path.isfile(src): |
171 src_folder, src_filename = os.path.split(src) |
171 src_folder, src_filename = os.path.split(src) |
172 if os.path.isfile(dst): |
172 if os.path.isfile(dst): |
173 dst_folder, dst_filename = os.path.split(dst) |
173 dst_folder, dst_filename = os.path.split(dst) |
174 else: |
174 else: |
175 dst_folder = dst |
175 dst_folder = dst |
176 |
176 |
177 dst_filepath = os.path.join(dst_folder, src_filename) |
177 dst_filepath = os.path.join(dst_folder, src_filename) |
178 if os.path.isfile(dst_filepath): |
178 if os.path.isfile(dst_filepath): |
179 dialog = wx.MessageDialog(self, |
179 dialog = wx.MessageDialog(self, |
180 _("The file '%s' already exist.\nDo you want to replace it?") % src_filename, |
180 _("The file '%s' already exist.\nDo you want to replace it?") % src_filename, |
181 _("Replace File"), wx.YES_NO|wx.ICON_QUESTION) |
181 _("Replace File"), wx.YES_NO|wx.ICON_QUESTION) |
182 copy = dialog.ShowModal() == wx.ID_YES |
182 copy = dialog.ShowModal() == wx.ID_YES |
183 dialog.Destroy() |
183 dialog.Destroy() |
184 else: |
184 else: |
185 copy = True |
185 copy = True |
186 |
186 |
187 if copy: |
187 if copy: |
188 shutil.copyfile(src, dst_filepath) |
188 shutil.copyfile(src, dst_filepath) |
189 return dst_filepath |
189 return dst_filepath |
190 return None |
190 return None |
191 |
191 |