summaryrefslogtreecommitdiff
path: root/ui/gridView.h
blob: b531093d6c79a300e11a105ed95b1eab0f3f871f (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
#ifndef GRIDVIEW_H_INCLUDED
#define GRIDVIEW_H_INCLUDED

#include "../structures.h"


namespace FreeFileSync
{
    //gui view of FolderComparison
    class GridView
    {
    public:
        GridView(FolderComparison& results);

        const FileCompareLine& operator[] (unsigned row) const;
        FileCompareLine& operator[] (unsigned row);

        //unsigned getResultsIndex(const unsigned viewIndex); //convert index on GridView to index on FolderComparison

        unsigned int elementsOnView() const; //only the currently visible elements

        bool refGridIsEmpty() const;

        //convert view references to FolderCompRef
        void viewRefToFolderRef(const std::set<int>& viewRef, FolderCompRef& output);

        const FolderPair getFolderPair(const unsigned int row) const;

        struct StatusInfo
        {
            StatusInfo();

            bool existsLeftOnly;
            bool existsRightOnly;
            bool existsLeftNewer;
            bool existsRightNewer;
            bool existsDifferent;
            bool existsEqual;
            bool existsConflict;

            bool existsSyncDirLeft;
            bool existsSyncDirRight;
            bool existsSyncDirNone;

            unsigned int filesOnLeftView;
            unsigned int foldersOnLeftView;
            unsigned int filesOnRightView;
            unsigned int foldersOnRightView;

            unsigned int objectsTotal;

            wxULongLong filesizeLeftView;
            wxULongLong filesizeRightView;
        };

        StatusInfo update(const bool hideFiltered, const bool syncPreviewActive);

        //UI View Filter settings
        //compare result
        bool leftOnlyFilesActive;
        bool rightOnlyFilesActive;
        bool leftNewerFilesActive;
        bool rightNewerFilesActive;
        bool differentFilesActive;
        bool equalFilesActive;
        bool conflictFilesActive;
        //sync preview
        bool syncDirLeftActive;
        bool syncDirRightActive;
        bool syncDirNoneActive;


        //sorting...
        enum SortType
        {
            SORT_BY_REL_NAME,
            SORT_BY_FILENAME,
            SORT_BY_FILESIZE,
            SORT_BY_DATE,
            SORT_BY_CMP_RESULT,
            SORT_BY_DIRECTORY,
            SORT_BY_SYNC_DIRECTION
        };

        void sortView(const SortType type, const bool onLeft, const bool ascending);

    private:
        template <bool syncPreviewActive>
        StatusInfo update_sub(const bool hideFiltered);

        struct RefIndex
        {
            unsigned int folderIndex;
            unsigned int rowIndex;
        };

        std::vector<RefIndex> refView;
        FolderComparison& folderCmp;
    };


//############################################################################
//inline implementation
    inline
    const FileCompareLine& GridView::operator[] (unsigned row) const
    {
        const unsigned int folderInd = refView[row].folderIndex;
        const unsigned int rowInd    = refView[row].rowIndex;

        return folderCmp[folderInd].fileCmp[rowInd];
    }

    inline
    FileCompareLine& GridView::operator[] (unsigned row)
    {
        //code re-use of const method: see Meyers Effective C++
        return const_cast<FileCompareLine&>(static_cast<const GridView&>(*this).operator[](row));
    }


    inline
    unsigned int GridView::elementsOnView() const
    {
        return refView.size();
    }


    inline
    const FolderPair GridView::getFolderPair(const unsigned int row) const
    {
        const unsigned int folderInd = refView[row].folderIndex;
        const FolderCompareLine& folderCmpLine = folderCmp[folderInd];
        return folderCmpLine.syncPair;
    }
}


#endif // GRIDVIEW_H_INCLUDED
bgstack15