source: filezilla/trunk/fuentes/src/interface/edithandler.h @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 6.3 KB
Line 
1#ifndef __EDITHANDLER_H__
2#define __EDITHANDLER_H__
3
4#include "dialogex.h"
5
6#include <wx/timer.h>
7
8// Handles all aspects about remote file viewing/editing
9
10namespace edit_choices {
11enum type
12{
13        edit_existing_action = 0x1,
14        edit_existing_always = 0x2
15};
16}
17
18class CQueueView;
19class CEditHandler : protected wxEvtHandler
20{
21public:
22        enum fileState
23        {
24                unknown = -1,
25                edit,
26                download,
27                upload,
28                upload_and_remove,
29                upload_and_remove_failed,
30                removing
31        };
32
33        enum fileType : signed char
34        {
35                none = -1,
36                local,
37                remote
38        };
39
40        static CEditHandler* Create();
41        static CEditHandler* Get();
42
43        wxString GetLocalDirectory();
44
45        // This tries to deletes all temporary files.
46        // If files are locked, they won't be removed though
47        void Release();
48
49        enum fileState GetFileState(const wxString& fileName) const; // Local files
50        enum fileState GetFileState(const wxString& fileName, const CServerPath& remotePath, const CServer& server) const; // Remote files
51
52        // Returns the number of files in given state
53        // pServer may be set only if state isn't unknown
54        int GetFileCount(enum fileType type, enum fileState state, const CServer* pServer = 0) const;
55
56        // Starts editing the given file, queues it if needed. For local files, fileName must include local path.
57        // Can be used to edit files already being added, user is prompted for action.
58        bool Edit(CEditHandler::fileType type, wxString const fileName, CServerPath const& path, CServer const& server, int64_t size, wxWindow* parent);
59
60        class FileData final {
61        public:
62                FileData() = default;
63                FileData(wxString const& n, int64_t s)
64                        : name(n), size(s) {}
65
66                wxString name;
67                int64_t size{};
68        };
69        bool Edit(CEditHandler::fileType type, std::vector<FileData> const& data, CServerPath const& path, CServer const& server, wxWindow* parent);
70
71        // Adds the file that doesn't exist yet. (Has to be in unknown state)
72        // The initial state will be download
73        bool AddFile(enum fileType type, wxString& fileName, const CServerPath& remotePath, const CServer& server);
74
75        // Tries to unedit and remove file
76        bool Remove(const wxString& fileName); // Local files
77        bool Remove(const wxString& fileName, const CServerPath& remotePath, const CServer& server); // Remote files
78        bool RemoveAll(bool force);
79        bool RemoveAll(enum fileState state, const CServer* pServer = 0);
80
81        void FinishTransfer(bool successful, const wxString& fileName);
82        void FinishTransfer(bool successful, const wxString& fileName, const CServerPath& remotePath, const CServer& server);
83
84        void CheckForModifications(bool emitEvent = false);
85
86        void SetQueue(CQueueView* pQueue) { m_pQueue = pQueue; }
87
88        /* Checks if file can be opened. One of these conditions has to be true:
89         * - Filetype association of system has to exist
90         * - Custom association for that filetype
91         * - Default editor set
92         *
93         * The dangerous argument will be set to true on some filetypes,
94         * e.g. executables.
95         */
96        wxString CanOpen(enum fileType type, const wxString& fileName, bool &dangerous, bool& program_exists);
97        bool StartEditing(const wxString& file);
98        bool StartEditing(const wxString& file, const CServerPath& remotePath, const CServer& server);
99
100        struct t_fileData
101        {
102                wxString name; // The name of the file
103                wxString file; // The actual local filename
104                fileState state;
105                CDateTime modificationTime;
106                CServerPath remotePath;
107                CServer server;
108        };
109
110        const std::list<t_fileData>& GetFiles(enum fileType type) const { wxASSERT(type != none); return m_fileDataList[(type == local) ? 0 : 1]; }
111
112        bool UploadFile(const wxString& file, bool unedit);
113        bool UploadFile(const wxString& file, const CServerPath& remotePath, const CServer& server, bool unedit);
114
115        // Returns command to open the file. If association is set but
116        // program does not exist, program_exists is set to false.
117        wxString GetOpenCommand(const wxString& file, bool& program_exists);
118
119protected:
120        bool DoEdit(CEditHandler::fileType type, FileData const& file, CServerPath const& path, CServer const& server, wxWindow* parent, size_t fileCount, int & already_editing_action);
121
122        CEditHandler();
123        virtual ~CEditHandler() {}
124
125        static CEditHandler* m_pEditHandler;
126
127        wxString m_localDir;
128
129        bool StartEditing(enum fileType type, t_fileData &data);
130
131        wxString GetCustomOpenCommand(const wxString& file, bool& program_exists);
132
133        void SetTimerState();
134
135        bool UploadFile(enum fileType type, std::list<t_fileData>::iterator iter, bool unedit);
136
137        std::list<t_fileData> m_fileDataList[2];
138
139        std::list<t_fileData>::iterator GetFile(const wxString& fileName);
140        std::list<t_fileData>::const_iterator GetFile(const wxString& fileName) const;
141        std::list<t_fileData>::iterator GetFile(const wxString& fileName, const CServerPath& remotePath, const CServer& server);
142        std::list<t_fileData>::const_iterator GetFile(const wxString& fileName, const CServerPath& remotePath, const CServer& server) const;
143
144        CQueueView* m_pQueue;
145
146        wxTimer m_timer;
147        wxTimer m_busyTimer;
148
149        void RemoveTemporaryFiles(wxString const& temp);
150        void RemoveTemporaryFilesInSpecificDir(wxString const& temp);
151
152        wxString GetTemporaryFile(wxString name);
153        wxString TruncateFilename(const wxString path, const wxString& name, int max);
154        bool FilenameExists(const wxString& file);
155
156        int DisplayChangeNotification(fileType type, std::list<t_fileData>::const_iterator iter, bool& remove);
157
158#ifdef __WXMSW__
159        HANDLE m_lockfile_handle;
160#else
161        int m_lockfile_descriptor;
162#endif
163
164        DECLARE_EVENT_TABLE()
165        void OnTimerEvent(wxTimerEvent& event);
166        void OnChangedFileEvent(wxCommandEvent& event);
167};
168
169class CWindowStateManager;
170class CEditHandlerStatusDialog : protected wxDialogEx
171{
172public:
173        CEditHandlerStatusDialog(wxWindow* parent);
174        virtual ~CEditHandlerStatusDialog();
175
176        virtual int ShowModal();
177
178protected:
179        void SetCtrlState();
180
181        CEditHandler::t_fileData* GetDataFromItem(int item, CEditHandler::fileType &type);
182
183        wxWindow* m_pParent;
184
185        CWindowStateManager* m_pWindowStateManager;
186
187        DECLARE_EVENT_TABLE()
188        void OnSelectionChanged(wxListEvent& event);
189        void OnUnedit(wxCommandEvent& event);
190        void OnUpload(wxCommandEvent& event);
191        void OnEdit(wxCommandEvent& event);
192};
193
194class CNewAssociationDialog : protected wxDialogEx
195{
196public:
197        CNewAssociationDialog(wxWindow* parent);
198
199        bool Run(const wxString& file);
200
201protected:
202        void SetCtrlState();
203        wxWindow* m_pParent;
204        wxString m_ext;
205
206        DECLARE_EVENT_TABLE()
207        void OnRadioButton(wxCommandEvent& event);
208        void OnOK(wxCommandEvent& event);
209        void OnBrowseEditor(wxCommandEvent& event);
210};
211
212#endif //__EDITHANDLER_H__
Note: See TracBrowser for help on using the repository browser.