]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/qt-console/util/fmtwidgetitem.h
Change copyright as per agreement with FSFE
[bacula/bacula] / bacula / src / qt-console / util / fmtwidgetitem.h
1 #ifndef _FMTWIDGETITEM_H_
2 #define _FMTWIDGETITEM_H_
3 /*
4    Bacula(R) - The Network Backup Solution
5
6    Copyright (C) 2000-2016 Kern Sibbald
7
8    The original author of Bacula is Kern Sibbald, with contributions
9    from many others, a complete list can be found in the file AUTHORS.
10
11    You may use this file and others of this release according to the
12    license defined in the LICENSE file, which includes the Affero General
13    Public License, v3.0 ("AGPLv3") and some additional permissions and
14    terms pursuant to its AGPLv3 Section 7.
15
16    This notice must be preserved when any source code is 
17    conveyed and/or propagated.
18
19    Bacula(R) is a registered trademark of Kern Sibbald.
20 */
21 /*
22  *   TreeView formatting helpers - Riccardo Ghetta, May 2008 
23  */
24
25 class QWidget;
26 class QTreeWidgetItem;
27 class QTableWidget;
28 class QTableWidgetItem;
29 class QString;
30 class QBrush;
31
32
33 /*
34  * common conversion routines
35  *
36  */
37 QString convertJobStatus(const QString &sts);
38
39 /* bytes formatted as power-of-two with IEC suffixes (KiB, MiB, and so on) */
40 QString convertBytesIEC(qint64 fld);
41
42 /* bytes formatted as power-of-ten with SI suffixes (kB, MB, and so on) */
43 QString convertBytesSI(qint64 fld);
44
45 /*
46  * disable widget updating
47  */
48 class Freeze
49 {
50 private:
51    QWidget *qw;
52
53  public:
54    Freeze(QWidget &q);
55    ~Freeze();
56 };
57
58
59
60 /*
61  * base class for formatters
62  *
63  */
64 class ItemFormatterBase
65 {
66 public:
67    enum BYTES_CONVERSION {
68       BYTES_CONVERSION_NONE,
69       BYTES_CONVERSION_IEC,
70       BYTES_CONVERSION_SI,
71    };
72
73 public:
74    virtual ~ItemFormatterBase(); 
75
76    /* Prints Yes if fld is != 0, No otherwise. Centers field if center true*/
77    void setBoolFld(int index, const QString &fld, bool center = true);
78    void setBoolFld(int index, int fld, bool center = true);
79
80    /* Print nice icon to represent percent */
81    void setPercent(int index, float number);
82
83    /* Normal text field. Centers field if center true*/
84    void setTextFld(int index, const QString &fld, bool center = false);
85
86    /* Normal date field. Centers field if center true*/
87    void setDateFld(int index, utime_t fld, bool center = false);
88
89    /* Right-aligned text field. */
90    void setRightFld(int index, const QString &fld);
91
92    /* Numeric field - sorted as numeric type */
93    void setNumericFld(int index, const QString &fld);
94    void setNumericFld(int index, const QString &fld, const QVariant &sortVal);
95
96    /* fld value interpreted as bytes and formatted with size suffixes */
97    void setBytesFld(int index, const QString &fld);
98
99    /* fld value interpreted as seconds and formatted with y,m,w,h suffixes */
100    void setDurationFld(int index, const QString &fld);
101
102    /* fld value interpreted as volume status. Colored accordingly */
103    void setVolStatusFld(int index, const QString &fld, bool center = true);
104   
105    /* fld value interpreted as job status. Colored accordingly */
106    void setJobStatusFld(int index, const QString &status, bool center = true);
107   
108    /* fld value interpreted as job type. */
109    void setJobTypeFld(int index, const QString &fld, bool center = false);
110   
111    /* fld value interpreted as job level. */
112    void setJobLevelFld(int index, const QString &fld, bool center = false);
113
114    /* fld value interpreted as Online/Offline */
115    void setInChanger(int index, const QString &InChanger);
116   
117    /* fld value interpreted as file or folder */
118    void setFileType(int index, const QString &type);
119
120    static void setBytesConversion(BYTES_CONVERSION b) {
121       cnvFlag = b;
122    }
123    static BYTES_CONVERSION getBytesConversion() {
124       return cnvFlag;
125    }
126
127 protected:
128    /* only derived classes can create one of these */
129    ItemFormatterBase();
130
131    virtual void setText(int index, const QString &fld) = 0;
132    virtual void setTextAlignment(int index, int align) = 0;
133    virtual void setBackground(int index, const QBrush &) = 0;
134    virtual void setPixmap(int index, const QPixmap &pix) = 0;
135    virtual void setPixmap(int index, const QPixmap &pix, const QString &tip);
136
137    /* sets the *optional* value used for sorting */
138    virtual void setSortValue(int index, const QVariant &value) = 0;
139
140 private:
141    static BYTES_CONVERSION cnvFlag;
142 };
143
144 /*
145  * This class can be used instead of QTreeWidgetItem (it allocates one internally,
146  * to format data fields.
147  * All setXXXFld routines receive a column index and the unformatted string value.
148  */
149 class TreeItemFormatter : public ItemFormatterBase
150 {
151 public:
152
153    TreeItemFormatter(QTreeWidgetItem &parent, int indent_level);
154
155    /* access internal widget */
156    QTreeWidgetItem *widget() { return wdg; }
157    const QTreeWidgetItem *widget() const { return wdg; }
158
159 protected:
160    virtual void setText(int index, const QString &fld);
161    virtual void setTextAlignment(int index, int align);
162    virtual void setBackground(int index, const QBrush &);
163    virtual void setSortValue(int index, const QVariant &value);
164    virtual void setPixmap(int index, const QPixmap &pix);
165
166 private:
167    QTreeWidgetItem *wdg;
168    int level;
169 };
170
171 /*
172  * This class can be used instead of QTableWidgetItem (it allocates one internally,
173  * to format data fields.
174  * All setXXXFld routines receive the column and the unformatted string value.
175  */
176 class TableItemFormatter : public ItemFormatterBase
177 {
178 private:
179
180    /* specialized widget item - allows an optional data property for sorting */ 
181    class BatSortingTableItem : public QTableWidgetItem
182    {
183    private:
184       static const int SORTDATA_ROLE = Qt::UserRole + 100;
185    public:
186       BatSortingTableItem();
187       
188       /* uses the sort data if available, reverts to default behavior othervise */
189       virtual bool operator< ( const QTableWidgetItem & o ) const;
190
191       /* set the value used for sorting - MUST BE A NUMERIC TYPE */
192       void setSortData(const QVariant &d);
193    };
194
195 public:
196
197    TableItemFormatter(QTableWidget &parent, int row);
198
199    /* access internal widget at column col*/
200    QTableWidgetItem *widget(int col);
201    const QTableWidgetItem *widget(int col) const;
202
203 protected:
204    virtual void setText(int index, const QString &fld);
205    virtual void setTextAlignment(int index, int align);
206    virtual void setBackground(int index, const QBrush &);
207    virtual void setSortValue(int index, const QVariant &value);
208    virtual void setPixmap(int index, const QPixmap &pix);
209    virtual void setPixmap(int index, const QPixmap &pix, const QString &tip);
210
211 private:
212    QTableWidget *parent;
213    int row;
214    BatSortingTableItem  *last;
215 };
216
217 #endif /* _FMTWIDGETITEM_H_ */