4
#include "aui_notebook_ex.h"
5
#include "listctrlex.h"
6
#include "edithandler.h"
8
#define PRIORITY_COUNT 5
23
QueueItemType_FolderScan,
27
enum TransferDirection
38
virtual ~CQueueItem();
40
virtual void SetPriority(enum QueuePriority priority);
42
virtual void AddChild(CQueueItem* pItem);
43
unsigned int GetChildrenCount(bool recursive);
44
CQueueItem* GetChild(unsigned int item, bool recursive = true);
45
CQueueItem* GetParent() { return m_parent; }
46
const CQueueItem* GetParent() const { return m_parent; }
47
void SetParent(CQueueItem* parent) { m_parent = parent; }
48
virtual bool RemoveChild(CQueueItem* pItem, bool destroy = true); // Removes a child item with is somewhere in the tree of children.
49
virtual bool TryRemoveAll(); // Removes a inactive childrens, queues active children for removal.
50
// Returns true if item can be removed itself
51
CQueueItem* GetTopLevelItem();
52
const CQueueItem* GetTopLevelItem() const;
53
int GetItemIndex() const; // Return the visible item index relative to the topmost parent item.
54
virtual void SaveItem(TiXmlElement* pElement) const { }
56
virtual enum QueueItemType GetType() const = 0;
64
std::vector<CQueueItem*> m_children;
65
int m_visibleOffspring; // Visible offspring over all sublevels
75
std::vector<t_cacheItem> m_lookupCache;
77
friend class CServerItem;
81
class CServerItem : public CQueueItem
84
CServerItem(const CServer& server);
85
virtual ~CServerItem();
86
virtual enum QueueItemType GetType() const { return QueueItemType_Server; }
88
const CServer& GetServer() const;
89
wxString GetName() const;
91
virtual void AddChild(CQueueItem* pItem);
93
CFileItem* GetIdleChild(bool immadiateOnly, enum TransferDirection direction);
94
virtual bool RemoveChild(CQueueItem* pItem, bool destroy = true); // Removes a child item with is somewhere in the tree of children
95
wxLongLong GetTotalSize(int& filesWithUnknownSize, int& queuedFiles, int& folderScanCount) const;
97
void QueueImmediateFiles();
98
void QueueImmediateFile(CFileItem* pItem);
100
virtual void SaveItem(TiXmlElement* pElement) const;
102
void SetDefaultFileExistsAction(int action, const enum TransferDirection direction);
106
virtual bool TryRemoveAll();
108
void DetachChildren();
110
virtual void SetPriority(enum QueuePriority priority);
112
void SetChildPriority(CFileItem* pItem, enum QueuePriority oldPriority, enum QueuePriority newPriority);
115
void AddFileItemToList(CFileItem* pItem);
116
void RemoveFileItemFromList(CFileItem* pItem);
120
// array of item lists, sorted by priority. Used by scheduler to find
121
// next file to transfer
122
// First index specifies whether the item is queued (0) or immediate (1)
123
std::list<CFileItem*> m_fileList[2][PRIORITY_COUNT];
128
class CFileItem : public CQueueItem
131
CFileItem(CServerItem* parent, bool queued, bool download, const wxString& localFile,
132
const wxString& remoteFile, const CServerPath& remotePath, wxLongLong size);
133
virtual ~CFileItem();
135
virtual void SetPriority(enum QueuePriority priority);
136
void SetPriorityRaw(enum QueuePriority priority);
137
enum QueuePriority GetPriority() const;
139
wxString GetLocalFile() const { return m_localFile; }
140
wxString GetRemoteFile() const { return m_remoteFile; }
141
CServerPath GetRemotePath() const { return m_remotePath; }
142
wxLongLong GetSize() const { return m_size; }
143
void SetSize(wxLongLong size) { m_size = size; }
144
bool Download() const { return m_download; }
145
bool Queued() const { return m_queued; }
147
wxString GetIndent() { return m_indent; }
149
virtual enum QueueItemType GetType() const { return QueueItemType_File; }
151
bool IsActive() const { return m_active; }
152
virtual void SetActive(bool active);
154
virtual void SaveItem(TiXmlElement* pElement) const;
156
virtual bool TryRemoveAll(); // Removes a inactive childrens, queues active children for removal.
157
// Returns true if item can be removed itself
162
CEditHandler::fileType m_edit;
164
wxString m_statusMessage;
166
CFileTransferCommand::t_transferSettings m_transferSettings;
168
t_EngineData* m_pEngineData;
170
int m_defaultFileExistsAction;
176
enum QueuePriority m_priority;
179
wxString m_localFile;
180
wxString m_remoteFile;
181
CServerPath m_remotePath;
186
class CFolderItem : public CFileItem
189
CFolderItem(CServerItem* parent, bool queued, const wxString& localFile);
190
CFolderItem(CServerItem* parent, bool queued, const CServerPath& remotePath, const wxString& remoteFile);
192
virtual enum QueueItemType GetType() const { return QueueItemType_Folder; }
194
virtual void SaveItem(TiXmlElement* pElement) const;
196
virtual void SetActive(bool active);
199
class CFolderScanItem : public CQueueItem
202
CFolderScanItem(CServerItem* parent, bool queued, bool download, const wxString& localPath, const CServerPath& remotePath);
203
virtual ~CFolderScanItem() { }
205
virtual enum QueueItemType GetType() const { return QueueItemType_FolderScan; }
206
wxString GetLocalPath() const { return m_localPath; }
207
CServerPath GetRemotePath() const { return m_remotePath; }
208
bool Download() const { return m_download; }
209
bool Queued() const { return m_queued; }
210
int GetCount() const { return m_count; }
211
virtual bool TryRemoveAll();
213
wxString m_statusMessage;
216
volatile bool m_remove;
224
CServerPath remotePath;
226
std::list<t_dirPair> m_dirsToCheck;
228
int m_defaultFileExistsAction;
231
wxString m_localPath;
232
CServerPath m_remotePath;
236
class CStatusItem : public CQueueItem
240
virtual ~CStatusItem() {}
242
virtual enum QueueItemType GetType() const { return QueueItemType_Status; }
246
class CQueueViewBase : public wxListCtrlEx
249
CQueueViewBase(CQueue* parent, int index, const wxString& title);
250
virtual ~CQueueViewBase();
252
void CreateColumns(const wxString& lastColumnName = _T(""));
254
// Gets item for given server or creates new if it doesn't exist
255
CServerItem* CreateServerItem(const CServer& server);
257
virtual void InsertItem(CServerItem* pServerItem, CQueueItem* pItem);
258
virtual bool RemoveItem(CQueueItem* pItem, bool destroy, bool updateItemCount = true, bool updateSelections = true);
260
// Has to be called after adding or removing items. Also updates
261
// item count and selections.
262
virtual void CommitChanges();
264
wxString GetTitle() const { return m_title; }
268
// Gets item for given server
269
CServerItem* GetServerItem(const CServer& server);
271
// Gets item with given index
272
CQueueItem* GetQueueItem(unsigned int item);
274
// Get index for given queue item
275
int GetItemIndex(const CQueueItem* item);
277
virtual wxString OnGetItemText(long item, long column) const;
278
virtual int OnGetItemImage(long item) const;
280
void RefreshItem(const CQueueItem* pItem);
282
void DisplayNumberQueuedFiles();
284
// Position at which insertions start and number of insertions
285
int m_insertionStart;
286
unsigned int m_insertionCount;
289
int m_folderScanCount;
290
bool m_fileCountChanged;
291
bool m_folderScanCountChanged;
293
// Selection management.
294
void UpdateSelections_ItemAdded(int added);
295
void UpdateSelections_ItemRangeAdded(int added, int count);
296
void UpdateSelections_ItemRemoved(int removed);
297
void UpdateSelections_ItemRangeRemoved(int removed, int count);
300
bool m_allowBackgroundErase;
302
std::vector<CServerItem*> m_serverList;
306
const int m_pageIndex;
308
const wxString m_title;
310
DECLARE_EVENT_TABLE();
311
void OnEraseBackground(wxEraseEvent& event);
312
void OnNavigationKey(wxNavigationKeyEvent& event);
313
void OnChar(wxKeyEvent& event);
314
void OnEndColumnDrag(wxListEvent& event);
318
class CQueueViewFailed;
319
class CQueueViewSuccessful;
322
class CAsyncRequestQueue;
323
class CQueue : public wxAuiNotebookEx
326
CQueue(wxWindow* parent, CMainFrame* pMainFrame, CAsyncRequestQueue* pAsyncRequestQueue);
329
inline CQueueView* GetQueueView() { return m_pQueueView; }
330
inline CQueueViewFailed* GetQueueView_Failed() { return m_pQueueView_Failed; }
331
inline CQueueViewSuccessful* GetQueueView_Successful() { return m_pQueueView_Successful; }
333
virtual void SetFocus();
336
CQueueView* m_pQueueView;
337
CQueueViewFailed* m_pQueueView_Failed;
338
CQueueViewSuccessful* m_pQueueView_Successful;
341
#include "QueueView.h"