editors/FileManagementPanel.py
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Thu, 01 Jun 2017 14:37:14 +0300
changeset 1686 85fdcc04da25
parent 1571 486f94a8032c
child 1730 64d8f52bc8c8
permissions -rw-r--r--
disallow setting IEC location addresses for TIME, DATE, DT and TOD variables

Size of these types is not defined and depends on the implementation
(IEC 61131-3 2.3.1).
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
     1
#!/usr/bin/env python
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
     3
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
     4
# This file is part of Beremiz, a Integrated Development Environment for
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
     5
# programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
     6
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
     7
# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
     8
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
     9
# See COPYING file for copyrights details.
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    10
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    11
# This program is free software; you can redistribute it and/or
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    12
# modify it under the terms of the GNU General Public License
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    13
# as published by the Free Software Foundation; either version 2
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    14
# of the License, or (at your option) any later version.
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    15
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    16
# This program is distributed in the hope that it will be useful,
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    17
# but WITHOUT ANY WARRANTY; without even the implied warranty of
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    18
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    19
# GNU General Public License for more details.
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    20
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    21
# You should have received a copy of the GNU General Public License
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    22
# along with this program; if not, write to the Free Software
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
    23
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    24
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    25
import os
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    26
import shutil
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    27
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    28
import wx
951
7f9a9c47a317 Extracted FolderTree control from FileManagementPanel to be able to use it anywhere else
Laurent Bessard
parents: 815
diff changeset
    29
import wx.lib.buttons
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    30
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents: 801
diff changeset
    31
from EditorPanel import EditorPanel
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents: 801
diff changeset
    32
from util.BitmapLibrary import GetBitmap
951
7f9a9c47a317 Extracted FolderTree control from FileManagementPanel to be able to use it anywhere else
Laurent Bessard
parents: 815
diff changeset
    33
from controls import FolderTree
783
f5cea1a6851e Fixing file explorer for Windows
laurent
parents: 782
diff changeset
    34
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    35
FILTER = _("All files (*.*)|*.*|CSV files (*.csv)|*.csv")
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    36
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    37
class FileManagementPanel(EditorPanel):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    38
    
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    39
    def _init_Editor(self, parent):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    40
        self.Editor = wx.Panel(parent)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    41
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    42
        main_sizer = wx.BoxSizer(wx.HORIZONTAL)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    43
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    44
        left_sizer = wx.BoxSizer(wx.VERTICAL)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    45
        main_sizer.AddSizer(left_sizer, 1, border=5, flag=wx.GROW|wx.ALL)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    46
        
815
e4f24593a758 Adding support for extending internationalization to extensions
laurent
parents: 814
diff changeset
    47
        managed_dir_label = wx.StaticText(self.Editor, label=_(self.TagName) + ":")
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    48
        left_sizer.AddWindow(managed_dir_label, border=5, flag=wx.GROW|wx.BOTTOM)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    49
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    50
        self.ManagedDir = FolderTree(self.Editor, self.Folder, FILTER)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    51
        left_sizer.AddWindow(self.ManagedDir, 1, flag=wx.GROW)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    52
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    53
        managed_treectrl = self.ManagedDir.GetTreeCtrl()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    54
        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemChanged, managed_treectrl)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    55
        if self.EnableDragNDrop:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    56
            self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnTreeBeginDrag, managed_treectrl)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    57
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    58
        button_sizer = wx.BoxSizer(wx.VERTICAL)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    59
        main_sizer.AddSizer(button_sizer, border=5, 
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    60
              flag=wx.ALL|wx.ALIGN_CENTER_VERTICAL)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    61
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    62
        for idx, (name, bitmap, help) in enumerate([
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    63
                ("DeleteButton", "remove_element", _("Remove file from left folder")),
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    64
                ("LeftCopyButton", "LeftCopy", _("Copy file from right folder to left")),
801
435e49e80832 Update list of messages to be translated for internationalization and french translations
laurent
parents: 794
diff changeset
    65
                ("RightCopyButton", "RightCopy", _("Copy file from left folder to right")),
784
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
    66
                ("EditButton", "edit", _("Edit file"))]):
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    67
            button = wx.lib.buttons.GenBitmapButton(self.Editor, 
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    68
                  bitmap=GetBitmap(bitmap), 
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    69
                  size=wx.Size(28, 28), style=wx.NO_BORDER)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    70
            button.SetToolTipString(help)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    71
            setattr(self, name, button)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    72
            if idx > 0:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    73
                flag = wx.TOP
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    74
            else:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    75
                flag = 0
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    76
            self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    77
            button_sizer.AddWindow(button, border=20, flag=flag)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    78
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    79
        right_sizer = wx.BoxSizer(wx.VERTICAL)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    80
        main_sizer.AddSizer(right_sizer, 1, border=5, flag=wx.GROW|wx.ALL)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    81
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    82
        if wx.Platform == '__WXMSW__':
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    83
            system_dir_label = wx.StaticText(self.Editor, label=_("My Computer:"))
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    84
        else:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    85
            system_dir_label = wx.StaticText(self.Editor, label=_("Home Directory:"))
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    86
        right_sizer.AddWindow(system_dir_label, border=5, flag=wx.GROW|wx.BOTTOM)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    87
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    88
        self.SystemDir = FolderTree(self.Editor, self.HomeDirectory, FILTER, False)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    89
        right_sizer.AddWindow(self.SystemDir, 1, flag=wx.GROW)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    90
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    91
        system_treectrl = self.SystemDir.GetTreeCtrl()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    92
        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnTreeItemChanged, system_treectrl)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    93
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    94
        self.Editor.SetSizer(main_sizer)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    95
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    96
    def __init__(self, parent, controler, name, folder, enable_dragndrop=False):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    97
        self.Folder = os.path.realpath(folder)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
    98
        self.EnableDragNDrop = enable_dragndrop
783
f5cea1a6851e Fixing file explorer for Windows
laurent
parents: 782
diff changeset
    99
        
f5cea1a6851e Fixing file explorer for Windows
laurent
parents: 782
diff changeset
   100
        if wx.Platform == '__WXMSW__':
f5cea1a6851e Fixing file explorer for Windows
laurent
parents: 782
diff changeset
   101
            self.HomeDirectory = "/"
f5cea1a6851e Fixing file explorer for Windows
laurent
parents: 782
diff changeset
   102
        else:
f5cea1a6851e Fixing file explorer for Windows
laurent
parents: 782
diff changeset
   103
            self.HomeDirectory = os.path.expanduser("~")
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   104
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   105
        EditorPanel.__init__(self, parent, name, None, None)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   106
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   107
        self.Controler = controler
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   108
        
784
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   109
        self.EditableFileExtensions = []
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   110
        self.EditButton.Hide()
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   111
        
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   112
        self.SetIcon(GetBitmap("FOLDER"))
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   113
    
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   114
    def __del__(self):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   115
        self.Controler.OnCloseEditor(self)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   116
    
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   117
    def GetTitle(self):
815
e4f24593a758 Adding support for extending internationalization to extensions
laurent
parents: 814
diff changeset
   118
        return _(self.TagName)
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   119
    
784
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   120
    def SetEditableFileExtensions(self, extensions):
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   121
        self.EditableFileExtensions = extensions
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   122
        if len(self.EditableFileExtensions) > 0:
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   123
            self.EditButton.Show()
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   124
    
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   125
    def RefreshView(self):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   126
        self.ManagedDir.RefreshTree()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   127
        self.SystemDir.RefreshTree()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   128
        self.RefreshButtonsState()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   129
    
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   130
    def RefreshButtonsState(self):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   131
        managed_filepath = self.ManagedDir.GetPath()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   132
        system_filepath = self.SystemDir.GetPath()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   133
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   134
        self.DeleteButton.Enable(os.path.isfile(managed_filepath))
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   135
        self.LeftCopyButton.Enable(os.path.isfile(system_filepath))
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   136
        self.RightCopyButton.Enable(os.path.isfile(managed_filepath))
784
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   137
        if len(self.EditableFileExtensions) > 0:
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   138
            self.EditButton.Enable(
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   139
                os.path.isfile(managed_filepath) and
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   140
                os.path.splitext(managed_filepath)[1] in self.EditableFileExtensions)
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   141
    
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   142
    def OnTreeItemChanged(self, event):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   143
        self.RefreshButtonsState()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   144
        event.Skip()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   145
        
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   146
    def OnDeleteButton(self, event):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   147
        filepath = self.ManagedDir.GetPath()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   148
        if os.path.isfile(filepath):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   149
            folder, filename = os.path.split(filepath)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   150
            
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   151
            dialog = wx.MessageDialog(self, 
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   152
                  _("Do you really want to delete the file '%s'?") % filename, 
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   153
                  _("Delete File"), wx.YES_NO|wx.ICON_QUESTION)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   154
            remove = dialog.ShowModal() == wx.ID_YES
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   155
            dialog.Destroy()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   156
            
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   157
            if remove:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   158
                os.remove(filepath)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   159
                self.ManagedDir.RefreshTree()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   160
        event.Skip()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   161
784
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   162
    def OnEditButton(self, event):
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   163
        filepath = self.ManagedDir.GetPath()
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   164
        if (os.path.isfile(filepath) and 
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   165
            os.path.splitext(filepath)[1] in self.EditableFileExtensions):
789
b1b1a8f85e2f Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents: 784
diff changeset
   166
            self.Controler._OpenView(filepath + "::")
784
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   167
        event.Skip()
a1d970365e41 Adding support for beremiz extensions to define custom file editors for project files
laurent
parents: 783
diff changeset
   168
        
782
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   169
    def CopyFile(self, src, dst):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   170
        if os.path.isfile(src):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   171
            src_folder, src_filename = os.path.split(src)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   172
            if os.path.isfile(dst):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   173
                dst_folder, dst_filename = os.path.split(dst)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   174
            else:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   175
                dst_folder = dst
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   176
            
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   177
            dst_filepath = os.path.join(dst_folder, src_filename)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   178
            if os.path.isfile(dst_filepath):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   179
                dialog = wx.MessageDialog(self, 
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   180
                      _("The file '%s' already exist.\nDo you want to replace it?") % src_filename, 
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   181
                      _("Replace File"), wx.YES_NO|wx.ICON_QUESTION)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   182
                copy = dialog.ShowModal() == wx.ID_YES
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   183
                dialog.Destroy()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   184
            else:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   185
                copy = True
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   186
                
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   187
            if copy:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   188
                shutil.copyfile(src, dst_filepath)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   189
                return dst_filepath
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   190
        return None
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   191
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   192
    def OnLeftCopyButton(self, event):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   193
        filepath = self.CopyFile(self.SystemDir.GetPath(), self.ManagedDir.GetPath())
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   194
        if filepath is not None:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   195
            self.ManagedDir.RefreshTree()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   196
            self.ManagedDir.SetPath(filepath)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   197
        event.Skip()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   198
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   199
    def OnRightCopyButton(self, event):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   200
        filepath = self.CopyFile(self.ManagedDir.GetPath(), self.SystemDir.GetPath())
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   201
        if filepath is not None:
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   202
            self.SystemDir.RefreshTree()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   203
            self.SystemDir.SetPath(filepath)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   204
        event.Skip()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   205
    
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   206
    def OnTreeBeginDrag(self, event):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   207
        filepath = self.ManagedDir.GetPath()
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   208
        if os.path.isfile(filepath):
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   209
            relative_filepath = filepath.replace(os.path.join(self.Folder, ""), "")
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   210
            data = wx.TextDataObject(str(("'%s'" % relative_filepath, "Constant")))
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   211
            dragSource = wx.DropSource(self)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   212
            dragSource.SetData(data)
6f0e10085df9 Adding support for file explorer for project files
laurent
parents:
diff changeset
   213
            dragSource.DoDragDrop()
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 951
diff changeset
   214