File: FileList.h

package info (click to toggle)
qtop 2.3.4-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,976 kB
  • sloc: cpp: 40,477; makefile: 7
file content (178 lines) | stat: -rw-r--r-- 4,163 bytes parent folder | download | duplicates (3)
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
#ifndef FileList_h
#define FileList_h

/******************************************************************************
*
* Copyright (C) 2002 Hugo PEREIRA <mailto: hugo.pereira@free.fr>
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* Any WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program.  If not, see <http://www.gnu.org/licenses/>.
*
*******************************************************************************/

#include "Counter.h"
#include "Debug.h"
#include "File.h"
#include "FileRecord.h"
#include "TimeStamp.h"
#include "ValidFileThread.h"

#include <QObject>

//* handles list of files saved into resource file for later reopening
class FileList: public QObject, private Base::Counter<FileList>
{

    //* Qt meta object declaration
    Q_OBJECT

    public:

    //* constructor
    explicit FileList( QObject* );

    //*@name accessors
    //@{

    //* returns true if file is found in list
    bool contains( const File& ) const;

    //* empty
    bool isEmpty() const
    { return records_.isEmpty(); }

    //* file list size
    int size() const
    { return records_.size(); }

    //* file list max size
    int maxSize() const
    { return maxSize_; }

    //* all records
    FileRecord::List records() const
    { return _truncatedList( records_ ); }

    //* all files
    File::List files() const;

    //* returns true if file list can be cleaned
    bool cleanEnabled() const
    { return (check()) ? cleanEnabled_ : !isEmpty(); }

    //* check flag
    bool check() const
    { return check_; }

    //@}

    //*@name modifiers
    //@{

    //* remove file from database
    void remove( const File& );

    //* get filerecord associated to a name
    /** creates new fileRecord if not found */
    FileRecord& get( const File& file )
    { return _add( FileRecord( file ), false ); }

    //* set record
    void set( const FileRecord::List& );

    //* get last valid file
    FileRecord lastValidFile();

    //* clean files. Remove either invalid or all files, depending on check_
    void clean();

    //* clear files. Remove all
    void clear();

    //* check_ flag
    void setCheck( bool value )
    { check_ = value; }

    //* maximum Size
    void setMaxSize( int );

    //@}

    Q_SIGNALS:

    //* emitted when thread has completed validity check
    void validFilesChecked();

    //* emitted when contents is changed
    void contentsChanged();

    public Q_SLOTS:

    //* add file.
    FileRecord& add( const File& file )
    { return _add( FileRecord( file ) ); }

    //* run thread to check file validity
    void checkValidFiles();

    protected:

    //* maximum size
    int _maxSize() const
    { return maxSize_; }

    //* add record to current list
    FileRecord& _add(
        const FileRecord&,
        bool = true,
        bool = true );

    //* truncate list if larger than maxSize_
    FileRecord::List _truncatedList( FileRecord::List ) const;

    //* list of files records
    const FileRecord::List& _records() const
    { return records_; }

    //* list of files records
    FileRecord::List& _records()
    { return records_; }

    protected Q_SLOTS:

    //* process records from threads
    void _processRecords( const FileRecord::List&, bool );

    private:

    //* clean enabled
    void _setCleanEnabled( bool value )
    { cleanEnabled_ = value; }

    //* maximum size (zero means no limit)
    int maxSize_ = 0;

    //* if true, check file validity
    bool check_ = true;

    //* true if clean action is enabled
    bool cleanEnabled_ = false;

    //* thread to check file validity
    ValidFileThread thread_;

    //* current list of files
    FileRecord::List records_;

};
#endif