fix #6581, #6590
[fapman] / packageview.h
1 /*
2         This file is part of Faster Application Manager.
3
4         Faster Application Manager is free software: you can redistribute it and/or modify
5         it under the terms of the GNU General Public License as published by
6         the Free Software Foundation, either version 3 of the License, or
7         (at your option) any later version.
8
9         Faster Application Manager is distributed in the hope that it will be useful,
10         but WITHOUT ANY WARRANTY; without even the implied warranty of
11         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12         GNU General Public License for more details.
13
14         You should have received a copy of the GNU General Public License
15         along with Faster Application Manager.  If not, see <http://www.gnu.org/licenses/>.
16
17         (C) Heikki Holstila 2010
18 */
19
20 #ifndef PACKAGEVIEW_H
21 #define PACKAGEVIEW_H
22
23 #include <QtGui>
24 #include <QMainWindow>
25 #include "mainwindow.h"
26 #include "package.h"
27
28 namespace Ui {
29     class PackageView;
30 }
31
32 class MainWindow;
33 class AptInterface;
34 class Package;
35 class dimmer;
36 class KeyEventGrabber;
37 class Settings;
38
39 enum UserRoles { UserRoleName=Qt::UserRole, UserRoleVersion, UserRoleDescShort,
40                                  UserRoleMarked, UserRoleInstalled, UserRoleUpgradeable, UserRoleAvailVersion,
41                                  UserRoleCurrentStatFilter, UserRoleCurrentCatFilter, UserRoleBlacklisted };
42
43
44 class PackageListWidgetItem : public QListWidgetItem
45 {
46 public:
47         PackageListWidgetItem(Package* p_, QString name_);
48
49         Package* package() { return iPackage; }
50
51 private:
52         Package* iPackage;
53 };
54
55
56 class ListItemDelegate : public QStyledItemDelegate
57 {
58 public:
59         explicit ListItemDelegate(QObject *parent=0) : QStyledItemDelegate(parent) {}
60         virtual ~ListItemDelegate() {}
61
62         void paint (QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
63         QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const;
64         void loadIcons();
65
66 private:
67         ListItemDelegate(const ListItemDelegate& old);
68         ListItemDelegate operator= (const ListItemDelegate& old);
69
70         QPixmap iDefaultIcon;
71         QPixmap iIconPkgInstall;
72         QPixmap iIconPkgUpgrade;
73         QPixmap iIconPkgRemove;
74         QPixmap iIconPkgNoOpInstalled;
75         QPixmap iIconPkgNoOpNotInstalled;
76         QPixmap iIconPkgNoOpInstalledUpgradeable;
77 };
78
79
80 class PackageView : public QMainWindow
81 {
82     Q_OBJECT
83
84 public:
85
86         enum sortOrder { SortAlpha, SortDateDesc, SortSizeDesc };
87
88         explicit PackageView(QWidget *parent);
89         virtual ~PackageView();
90
91         void openWin();
92         void resizeEvent(QResizeEvent* event);
93         void setAptInterface(AAptInterface* a_) { iAptInterface=a_; }
94         void setSettings(Settings* s_) { iSettings=s_; }
95         dimmer* mydimmer() { return iDimmer; }
96         void disableMenu();
97         void enableMenu();
98         void setStatFilter(Package::packageStatus f_);
99         void setSortOrder(sortOrder s_) { iSortOrder = s_; }
100         void clearSelections();
101         void setSearchText(QString text);
102         void setSearchOptions(bool pkgname, bool dispname, bool dshort, bool dlong);
103
104         void show() {
105                 if( !isVisible() ) {
106 #ifdef Q_WS_MAEMO_5
107             if( dynamic_cast<QMainWindow*>(this->parent())->testAttribute( Qt::WA_Maemo5AutoOrientation ) ) {
108                 this->setAttribute( Qt::WA_Maemo5AutoOrientation );
109             } else {
110                 this->setAttribute( Qt::WA_Maemo5LandscapeOrientation );
111             }
112                         this->setAttribute(Qt::WA_Maemo5StackedWindow);
113                         this->setWindowFlags( Qt::Window );
114 #endif
115                 }
116                 QMainWindow::show();
117         }
118
119         static const int CatFilterAllMarked = 0;
120         static const int CatFilterAllUser = 1;
121         static const int CatFilterBlacklisted = 16;
122
123 public slots:
124         void orientationChanged();
125         void on_actionSearch_triggered();
126
127 protected:
128     void changeEvent(QEvent *e);
129         AAptInterface* iAptInterface;
130         //MainWindow::operation iOperation;
131         void closeEvent(QCloseEvent *event);
132
133 private:
134         PackageView(const PackageView& old);
135         PackageView operator= (const PackageView& old);
136
137         bool doFilterCategory(Package* pkg);
138         QString generateSortString(Package* pkg);
139         void addListItem(Package* pkg_, QString listname_);
140         void updateLabel(void);
141         void resetWindow();
142         void clearSearch();
143
144     Ui::PackageView *ui;
145         MainWindow* iMainWindow;
146         QBoxLayout* iPkgLayout;
147         dimmer* iDimmer;
148         QLabel* iListCoverLabel;
149         Settings* iSettings;
150
151         QStringList iCatFilterLabels;
152         QStringList iCatFilterStrings;
153         int iSelectedCatFilter;
154         int iDefaultCatFilter;
155
156         QStringList iStatFilterLabels;
157         int iSelectedStatFilter;
158         sortOrder iSortOrder;
159         bool iSortNoticeShown;
160
161         QList<Package*> iSearchResults;
162         QString iPrevSearchText;
163         KeyEventGrabber* iKeyFilter;
164
165         bool iSearchPkgName;
166         bool iSearchDisplayName;
167         bool iSearchDescShort;
168         bool iSearchDescLong;
169
170         int iPackagesEmptySort;
171
172 private slots:
173         void on_pushButton_searchOptions_clicked();
174  void on_actionRestore_all_triggered();
175  void on_actionSave_selections_triggered();
176         void on_actionLoad_selections_triggered();
177         void on_btn_Sort_clicked();
178         void on_actionView_log_triggered();
179         void on_actionUpgrade_all_triggered();
180         void on_lineEdit_textEdited(QString );
181         void on_btn_searchClose_clicked();
182         void on_actionHelp_triggered();
183         void on_btn_StatusFilter_clicked();
184         void on_btn_CategoryFilter_clicked();
185         void on_listWidget_itemClicked(QListWidgetItem* item);
186         void on_actionClear_selections_triggered();
187         void on_btn_Commit_clicked();
188 };
189
190
191 class KeyEventGrabber : public QObject
192 {
193         Q_OBJECT
194 public:
195         KeyEventGrabber(QObject* parent = 0);
196
197 protected:
198         bool eventFilter(QObject *obj, QEvent *event);
199
200 };
201
202
203 #endif // PACKAGEVIEW_H