1 | /*************************************************************************** |
2 | * Copyright (C) 2005-2014 by the Quassel Project * |
3 | * devel@quassel-irc.org * |
4 | * * |
5 | * This program is free software; you can redistribute it and/or modify * |
6 | * it under the terms of the GNU General Public License as published by * |
7 | * the Free Software Foundation; either version 2 of the License, or * |
8 | * (at your option) version 3. * |
9 | * * |
10 | * This program is distributed in the hope that it will be useful, * |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
13 | * GNU General Public License for more details. * |
14 | * * |
15 | * You should have received a copy of the GNU General Public License * |
16 | * along with this program; if not, write to the * |
17 | * Free Software Foundation, Inc., * |
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * |
19 | ***************************************************************************/ |
20 | |
21 | #ifndef COREACCOUNTSETTINGSPAGE_H_ |
22 | #define COREACCOUNTSETTINGSPAGE_H_ |
23 | |
24 | #include <QSortFilterProxyModel> |
25 | |
26 | #include "settingspage.h" |
27 | |
28 | #include "coreaccount.h" |
29 | |
30 | #include "ui_coreaccounteditdlg.h" |
31 | #include "ui_coreaccountsettingspage.h" |
32 | |
33 | class CoreAccountModel; |
34 | class FilteredCoreAccountModel; |
35 | |
36 | class CoreAccountSettingsPage : public SettingsPage |
37 | { |
38 | Q_OBJECT |
39 | |
40 | public: |
41 | CoreAccountSettingsPage(QWidget *parent = 0); |
42 | |
43 | inline bool hasDefaults() const { return false; } |
44 | inline bool isStandAlone() const { return _standalone; } |
45 | |
46 | AccountId selectedAccount() const; |
47 | |
48 | public slots: |
49 | void save(); |
50 | void load(); |
51 | |
52 | void setSelectedAccount(AccountId accId); |
53 | void setStandAlone(bool); |
54 | |
55 | signals: |
56 | void connectToCore(AccountId accId); |
57 | |
58 | private slots: |
59 | void on_addAccountButton_clicked(); |
60 | void on_editAccountButton_clicked(); |
61 | void on_deleteAccountButton_clicked(); |
62 | void on_accountView_doubleClicked(const QModelIndex &index); |
63 | |
64 | void setWidgetStates(); |
65 | void widgetHasChanged(); |
66 | |
67 | void rowsAboutToBeRemoved(const QModelIndex &index, int start, int end); |
68 | void rowsInserted(const QModelIndex &index, int start, int end); |
69 | |
70 | private: |
71 | Ui::CoreAccountSettingsPage ui; |
72 | |
73 | CoreAccountModel *_model; |
74 | inline CoreAccountModel *model() const { return _model; } |
75 | FilteredCoreAccountModel *_filteredModel; |
76 | inline FilteredCoreAccountModel *filteredModel() const { return _filteredModel; } |
77 | |
78 | AccountId _lastAccountId, _lastAutoConnectId; |
79 | bool _standalone; |
80 | |
81 | void editAccount(const QModelIndex &); |
82 | |
83 | bool testHasChanged(); |
84 | |
85 | inline QString settingsKey() const { return QString("CoreAccounts" ); } |
86 | }; |
87 | |
88 | |
89 | // ======================================== |
90 | // CoreAccountEditDlg |
91 | // ======================================== |
92 | class CoreAccountEditDlg : public QDialog |
93 | { |
94 | Q_OBJECT |
95 | |
96 | public: |
97 | CoreAccountEditDlg(const CoreAccount &account, QWidget *parent = 0); |
98 | |
99 | CoreAccount account(); |
100 | |
101 | private slots: |
102 | void on_hostName_textChanged(const QString &); |
103 | void on_accountName_textChanged(const QString &); |
104 | void on_user_textChanged(const QString &); |
105 | |
106 | void setWidgetStates(); |
107 | |
108 | private: |
109 | Ui::CoreAccountEditDlg ui; |
110 | CoreAccount _account; |
111 | }; |
112 | |
113 | |
114 | // ======================================== |
115 | // FilteredCoreAccountModel |
116 | // ======================================== |
117 | |
118 | //! This filters out the internal account from the non-monolithic client's UI |
119 | class FilteredCoreAccountModel : public QSortFilterProxyModel |
120 | { |
121 | Q_OBJECT |
122 | |
123 | public: |
124 | FilteredCoreAccountModel(CoreAccountModel *model, QObject *parent = 0); |
125 | |
126 | protected: |
127 | virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; |
128 | |
129 | private: |
130 | AccountId _internalAccount; |
131 | }; |
132 | |
133 | |
134 | #endif |
135 | |