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
|
#ifndef CUSTOMGRID_H_INCLUDED
#define CUSTOMGRID_H_INCLUDED
#include <vector>
#include <wx/grid.h>
#include "../FreeFileSync.h"
#include "processXml.h"
using namespace FreeFileSync;
class CustomGridTable;
//##################################################################################
class CustomGrid : public wxGrid
{
public:
CustomGrid(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxWANTS_CHARS,
const wxString& name = wxGridNameStr);
virtual ~CustomGrid() {}
//overwrite virtual method to finally get rid of the scrollbars
virtual void SetScrollbar(int orientation, int position, int thumbSize, int range, bool refresh = true);
virtual void DrawColLabel(wxDC& dc, int col);
void initSettings(const bool enableScrollbars,
const bool showFileIcons,
CustomGrid* gridLeft,
CustomGrid* gridRight,
CustomGrid* gridMiddle,
GridView* gridRefUI,
FileCompareResult* gridData);
virtual void initGridRenderer(const bool showFileIcons) = 0;
//notify wxGrid that underlying table size has changed
void updateGridSizes();
//set sort direction indicator on UI
void setSortMarker(const int sortColumn, const wxBitmap* bitmap = &wxNullBitmap);
//set visibility, position and width of columns
static xmlAccess::ColumnAttributes getDefaultColumnAttributes();
xmlAccess::ColumnAttributes getColumnAttributes();
void setColumnAttributes(const xmlAccess::ColumnAttributes& attr);
xmlAccess::ColumnTypes getTypeAtPos(unsigned pos) const;
static wxString getTypeName(xmlAccess::ColumnTypes colType);
const wxGrid* getLeadGrid();
bool isLeadGrid();
protected:
void onGridAccess(wxEvent& event);
void adjustGridHeights(wxEvent& event);
xmlAccess::ColumnAttributes columnSettings; //set visibility, position and width of columns
const wxGrid* leadGrid; //grid that has user focus
bool scrollbarsEnabled;
CustomGrid* m_gridLeft;
CustomGrid* m_gridMiddle;
CustomGrid* m_gridRight;
CustomGridTable* gridDataTable;
int currentSortColumn;
const wxBitmap* sortMarker;
};
//############## SPECIALIZATIONS ###################
class CustomGridLeft : public CustomGrid
{
public:
CustomGridLeft(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxWANTS_CHARS,
const wxString& name = wxGridNameStr);
~CustomGridLeft() {}
//this method is called when grid view changes: useful for parallel updating of multiple grids
virtual void DoPrepareDC(wxDC& dc);
virtual bool CreateGrid(int numRows, int numCols, wxGrid::wxGridSelectionModes selmode = wxGrid::wxGridSelectCells);
virtual void initGridRenderer(const bool showFileIcons);
};
class CustomGridMiddle : public CustomGrid
{
public:
CustomGridMiddle(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxWANTS_CHARS,
const wxString& name = wxGridNameStr);
~CustomGridMiddle() {}
//this method is called when grid view changes: useful for parallel updating of multiple grids
virtual void DoPrepareDC(wxDC& dc);
virtual bool CreateGrid(int numRows, int numCols, wxGrid::wxGridSelectionModes selmode = wxGrid::wxGridSelectCells);
virtual void initGridRenderer(const bool showFileIcons) {}
};
class CustomGridRight : public CustomGrid
{
public:
CustomGridRight(wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxWANTS_CHARS,
const wxString& name = wxGridNameStr);
~CustomGridRight() {}
//this method is called when grid view changes: useful for parallel updating of multiple grids
virtual void DoPrepareDC(wxDC& dc);
virtual bool CreateGrid(int numRows, int numCols, wxGrid::wxGridSelectionModes selmode = wxGrid::wxGridSelectCells);
virtual void initGridRenderer(const bool showFileIcons);
};
#endif // CUSTOMGRID_H_INCLUDED
|