0.7.1
[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_actionStore_list_triggered();
174  void on_pushButton_searchOptions_clicked();
175  void on_actionRestore_all_triggered();
176  void on_actionSave_selections_triggered();
177     void on_actionLoad_selections_triggered();
178     void on_btn_Sort_clicked();
179     void on_actionView_log_triggered();
180     void on_actionUpgrade_all_triggered();
181     void on_lineEdit_textEdited(QString );
182     void on_btn_searchClose_clicked();
183     void on_actionHelp_triggered();
184     void on_btn_StatusFilter_clicked();
185     void on_btn_CategoryFilter_clicked();
186     void on_listWidget_itemClicked(QListWidgetItem* item);
187     void on_actionClear_selections_triggered();
188     void on_btn_Commit_clicked();
189 };
190
191
192 class KeyEventGrabber : public QObject
193 {
194     Q_OBJECT
195 public:
196     KeyEventGrabber(QObject* parent = 0);
197
198 protected:
199     bool eventFilter(QObject *obj, QEvent *event);
200
201 };
202
203
204 #endif // PACKAGEVIEW_H