1 /* This file is part of Clementine.
2    Copyright 2010, David Sansome <me@davidsansome.com>
3 
4    Clementine 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    Clementine 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 Clementine.  If not, see <http://www.gnu.org/licenses/>.
16 */
17 
18 #ifndef GLOBALSHORTCUTSSETTINGSPAGE_H
19 #define GLOBALSHORTCUTSSETTINGSPAGE_H
20 
21 #include <memory>
22 
23 #include <QMap>
24 #include <QSettings>
25 
26 #include "core/globalshortcuts.h"
27 #include "ui/settingspage.h"
28 
29 class QTreeWidgetItem;
30 
31 class Ui_GlobalShortcutsSettingsPage;
32 class GlobalShortcutGrabber;
33 
34 class GlobalShortcutsSettingsPage : public SettingsPage {
35   Q_OBJECT
36 
37  public:
38   GlobalShortcutsSettingsPage(SettingsDialog* dialog);
39   ~GlobalShortcutsSettingsPage();
40 
41   bool IsEnabled() const;
42 
43   void Load();
44   void Save();
45 
46  private slots:
47   void ItemClicked(QTreeWidgetItem*);
48   void NoneClicked();
49   void DefaultClicked();
50   void ChangeClicked();
51 
52   void OpenGnomeKeybindingProperties();
53 
54  private:
55   struct Shortcut {
56     GlobalShortcuts::Shortcut s;
57     QKeySequence key;
58     QTreeWidgetItem* item;
59   };
60 
61   void SetShortcut(const QString& id, const QKeySequence& key);
62 
63  private:
64   Ui_GlobalShortcutsSettingsPage* ui_;
65 
66   bool initialised_;
67   std::unique_ptr<GlobalShortcutGrabber> grabber_;
68 
69   QSettings settings_;
70   QMap<QString, Shortcut> shortcuts_;
71 
72   QString current_id_;
73 };
74 
75 #endif  // GLOBALSHORTCUTSSETTINGSPAGE_H
76