1 // This file is part of GtkEveMon.
2 //
3 // GtkEveMon is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7 //
8 // You should have received a copy of the GNU General Public License
9 // along with GtkEveMon. If not, see <http://www.gnu.org/licenses/>.
10
11 #ifndef GTK_ITEM_BROWSER_HEADER
12 #define GTK_ITEM_BROWSER_HEADER
13
14 #include <gtkmm.h>
15
16 #include "api/apicharsheet.h"
17 #include "gtkplannerbase.h"
18
19 class ItemBrowserBase
20 {
21 private:
22 SignalApiElementSelected sig_element_selected;
23 SignalApiElementActivated sig_element_activated;
24 SignalPlanningRequested sig_planning_requested;
25
26 protected:
27 ApiCharSheetPtr charsheet;
28 GuiPlannerElemCols cols;
29 Glib::RefPtr<Gtk::TreeStore> store;
30 GtkListViewHelper view;
31
32 protected:
33 /* Executed if the item selection changed. */
34 void on_selection_changed (void);
35 /* Executed if some item is double clicked. */
36 void on_row_activated (Gtk::TreeModel::Path const& path,
37 Gtk::TreeViewColumn* col);
38 /* Executed if a mouse button is pressed. */
39 void on_view_button_pressed (GdkEventButton* event);
40 /* Executed if planning was requested from the context menu. */
41 void on_planning_requested (ApiElement const* skill, int level);
42 /* Tooltip query. */
43 bool on_query_element_tooltip (int x, int y, bool key,
44 Glib::RefPtr<Gtk::Tooltip> const& tooltip);
45
46 public:
47 ItemBrowserBase (void);
~ItemBrowserBase(void)48 virtual ~ItemBrowserBase (void) {};
49 virtual void set_character (ApiCharSheetPtr charsheet);
50 virtual void fill_store (void) = 0;
51
52 SignalApiElementSelected& signal_element_selected (void);
53 SignalApiElementActivated& signal_element_activated (void);
54 SignalPlanningRequested& signal_planning_requested (void);
55 };
56
57 /* ---------------------------------------------------------------- */
58
59 class GtkSkillBrowser : public ItemBrowserBase, public Gtk::Box
60 {
61 private:
62 Gtk::Entry filter_entry;
63 Gtk::ComboBoxText filter_cb;
64 Gtk::ComboBoxText primary_cb;
65 Gtk::ComboBoxText secondary_cb;
66
67 protected:
68 void fill_store (void);
69 void clear_filter (void);
70 bool have_prerequisites_for_skill (ApiSkill const* skill);
71
72 public:
73 GtkSkillBrowser (void);
74 };
75
76 /* ---------------------------------------------------------------- */
77
78 class GtkCertBrowser : public ItemBrowserBase, public Gtk::Box
79 {
80 protected:
81 enum CertPrerequisite
82 {
83 CERT_PRE_HAVE_NONE,
84 CERT_PRE_HAVE_SOME,
85 CERT_PRE_HAVE_ALL
86 };
87
88 private:
89 Gtk::Entry filter_entry;
90 Gtk::ComboBoxText filter_cb;
91
92 protected:
93 void fill_store (void);
94 void clear_filter (void);
95 CertPrerequisite check_prerequisites_for_cert (ApiCert const* cert);
96
97 public:
98 GtkCertBrowser (void);
99 };
100
101 /* ---------------------------------------------------------------- */
102
103 inline SignalApiElementSelected&
signal_element_selected(void)104 ItemBrowserBase::signal_element_selected (void)
105 {
106 return this->sig_element_selected;
107 }
108
109 inline SignalApiElementActivated&
signal_element_activated(void)110 ItemBrowserBase::signal_element_activated (void)
111 {
112 return this->sig_element_activated;
113 }
114
115 inline SignalPlanningRequested&
signal_planning_requested(void)116 ItemBrowserBase::signal_planning_requested (void)
117 {
118 return this->sig_planning_requested;
119 }
120
121 inline void
on_planning_requested(ApiElement const * elem,int level)122 ItemBrowserBase::on_planning_requested (ApiElement const* elem, int level)
123 {
124 this->sig_planning_requested.emit(elem, level);
125 }
126
127 inline void
set_character(ApiCharSheetPtr charsheet)128 ItemBrowserBase::set_character (ApiCharSheetPtr charsheet)
129 {
130 this->charsheet = charsheet;
131 this->fill_store();
132 }
133
134 #endif /* GTK_ITEM_BROWSER_HEADER */
135