blob: 4c2486b959f7212add486256c73aa0475a182de3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
|
/***************************************************************
* Name: FreeFileSyncMain.h
* Purpose: Defines Application Frame
* Author: ZenJu (zhnmju123@gmx.de)
* Created: 2008-07-16
* Copyright: ZenJu ()
* License:
**************************************************************/
#ifndef MAINDIALOG_H
#define MAINDIALOG_H
#include "..\library\wxWidgets.h"
#include "GUI_Generated.h"
#include "..\FreeFileSync.h"
#include "SyncDialog.h"
#include "SmallDialogs.h"
#include "Resources.h"
using namespace std;
//configure filter dialog
const int OkayButtonPressed = 25;
const wxString ConstFilteredOut = "(-)";
struct UI_GridLine
{
wxString leftFilename;
wxString leftRelativePath;
wxString leftSize;
wxString leftDate;
wxString cmpResult;
wxString rightFilename;
wxString rightRelativePath;
wxString rightSize;
wxString rightDate;
unsigned int linkToCurrentGridData; //rownumber of corresponding row in currentGridData
};
typedef vector<UI_GridLine> UI_Grid;
bool updateUI_IsAllowed(); //test if a specific amount of time is over
void updateUI_Now(); //do the updating
extern int leadingPanel;
class CompareStatusUpdater;
class MainDialog : public GUI_Generated
{
public:
MainDialog(wxFrame* frame);
~MainDialog();
private:
friend class SyncDialog;
friend class FilterDlg;
friend class CompareStatusUpdater;
friend class SyncStatusUpdater;
void readConfigurationFromHD(const wxString& filename);
void writeConfigurationToHD(const wxString& filename);
void loadResourceFiles();
void unloadResourceFiles();
void updateViewFilterButtons();
void updateFilterButton();
void synchronizeFolders(FileCompareResult& grid, const SyncConfiguration config);
static wxString evaluateCmpResult(const CompareFilesResult result, const bool selectedForSynchronization);
//main method for putting gridData on UI: maps data respecting current view settings
void writeGrid(const FileCompareResult& gridData, bool useUI_GridCache = false);
void mapFileModelToUI(UI_Grid& output, const FileCompareResult& fileCmpResult);
void updateStatusInformation(const UI_Grid& output);
void filterRangeManual(int begin, int end, int leadingRow);
//Events
void onGrid1access(wxEvent& event);
void onGrid2access(wxEvent& event);
void onGrid3access(wxEvent& event);
void onGrid1ButtonEvent(wxKeyEvent& event);
void onGrid2ButtonEvent(wxKeyEvent& event);
void OnEnterLeftDir(wxCommandEvent& event);
void OnEnterRightDir(wxCommandEvent& event);
void OnDirChangedPanel1(wxFileDirPickerEvent& event);
void OnDirChangedPanel2(wxFileDirPickerEvent& event);
void onFilesDroppedPanel1(wxDropFilesEvent& event);
void onFilesDroppedPanel2(wxDropFilesEvent& event);
void OnGrid3SelectCell(wxGridEvent& event);
void OnGrid3SelectRange(wxGridRangeSelectEvent& event);
void OnGrid3LeftMouseUp(wxEvent& event);
void OnIdleToFilterManually(wxEvent& event);
void OnLeftGridDoubleClick( wxGridEvent& event);
void OnRightGridDoubleClick(wxGridEvent& event);
void OnSortLeftGrid( wxGridEvent& event);
void OnSortRightGrid( wxGridEvent& event);
void OnLeftOnlyFiles( wxCommandEvent& event);
void OnLeftNewerFiles( wxCommandEvent& event);
void OnDifferentFiles( wxCommandEvent& event);
void OnRightNewerFiles( wxCommandEvent& event);
void OnRightOnlyFiles( wxCommandEvent& event);
void OnEqualFiles( wxCommandEvent& event);
void OnAbortCompare( wxCommandEvent& event);
void OnFilterButton( wxCommandEvent& event);
void OnHideFilteredButton( wxCommandEvent& event);
void OnConfigureFilter( wxHyperlinkEvent& event);
void OnShowHelpDialog( wxCommandEvent& event);
void OnSwapDirs( wxCommandEvent& event);
void OnChangeCompareVariant(wxCommandEvent& event);
void OnCompare( wxCommandEvent& event);
void OnSync( wxCommandEvent& event);
void OnClose( wxCloseEvent& event);
void OnQuit( wxCommandEvent& event);
void OnAbout( wxCommandEvent& event);
//***********************************************
//global application variables are stored here:
//technical representation of grid-data
FileCompareResult currentGridData;
//UI view of currentGridData
UI_Grid currentUI_View;
//Synchronisation settings
SyncConfiguration syncConfiguration;
//Filter setting
wxString includeFilter;
wxString excludeFilter;
bool hideFiltered;
bool filterIsActive;
//UI View Filter settings
bool leftOnlyFilesActive;
bool leftNewerFilesActive;
bool differentFilesActive;
bool equalFilesActive;
bool rightNewerFilesActive;
bool rightOnlyFilesActive;
//other options
bool useRecycleBin; //use Recycle bin when deleting or overwriting files while synchronizing
//***********************************************
wxFrame* parent;
//variables for manual filtering of m_grid3
int selectedRangeBegin;
int selectedRangeEnd;
int selectionLead;
bool filteringPending;
CompareStatusUpdater* cmpStatusUpdaterTmp; //used only by the abort button when comparing
};
//######################################################################################
//classes handling sync and compare error as well as status information
class CompareStatusUpdater : public StatusUpdater
{
public:
CompareStatusUpdater(MainDialog* dlg, wxStatusBar* mainWindowBar);
~CompareStatusUpdater();
void updateStatus(const wxString& text);
void updateProgressIndicator(double number);
int reportError(const wxString& text);
void triggerUI_Refresh();
private:
MainDialog* mainDialog;
wxStatusBar* statusBar;
bool suppressUI_Errormessages;
unsigned int numberOfScannedObjects;
};
class SyncStatus;
class SyncStatusUpdater : public StatusUpdater
{
public:
SyncStatusUpdater(wxWindow* dlg, double gaugeTotalElements);
~SyncStatusUpdater();
void updateStatus(const wxString& text);
void updateProgressIndicator(double number);
int reportError(const wxString& text);
void triggerUI_Refresh();
private:
SyncStatus* syncStatusFrame;
bool suppressUI_Errormessages;
wxArrayString unhandledErrors; //list of non-resolved errors
};
#endif // MAINDIALOG_H
|