Guitarix
gx_preset_window.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2009, 2010 Hermann Meyer, James Warden, Andreas Degert
3  * Copyright (C) 2011 Pete Shorthose
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) any later version.
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 Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  * ---------------------------------------------------------------------------
19  *
20  *
21  * ----------------------------------------------------------------------------
22  */
23 
24 /****************************************************************
25  ** class PresetWindow
26  */
27 
28 
29 class PresetStore: public Gtk::ListStore {
30 public:
31  class PresetModelColumns : public Gtk::TreeModel::ColumnRecord {
32  public:
33  Gtk::TreeModelColumn<Glib::ustring> name;
34  Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > edit_pb;
35  Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > del_pb;
36 
37  PresetModelColumns() { add(name); add(edit_pb); add(del_pb); }
38  } col;
39 public:
40  PresetStore();
41  virtual bool row_draggable_vfunc(const TreeModel::Path& path) const;
42 };
43 
44 class TargetModelColumns : public Gtk::TreeModel::ColumnRecord {
45 public:
46  Gtk::TreeModelColumn<Glib::ustring> name;
47  TargetModelColumns() { add(name); }
48 };
49 
50 class BankModelColumns : public Gtk::TreeModel::ColumnRecord {
51 public:
52  Gtk::TreeModelColumn<Glib::ustring> name;
53  Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > type_pb;
54  Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > edit_pb;
55  Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > del_pb;
56  Gtk::TreeModelColumn<int> tp;
57  BankModelColumns() { add(name); add(type_pb); add(edit_pb); add(del_pb); add(tp); }
58 };
59 
60 class MyTreeView: public Gtk::TreeView {
61 private:
62  MyTreeView(BaseObjectType* cobject): Gtk::TreeView(cobject) {}
63 public:
64  static MyTreeView *create_from_builder(BaseObjectType* cobject) { return new MyTreeView(cobject); }
65  //virtual bool on_drag_motion(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint timestamp);
66  using Gtk::TreeView::on_drag_motion;
67 };
68 
69 struct GxActions;
70 
71 class PresetWindow: public sigc::trackable {
72 private:
73  enum {
74  TEXT_TARGETS = 0,
75  MODELROW_TARGET = 1,
76  URILIST_TARGET = 2,
77  };
78  gx_engine::GxMachineBase& machine;
79  GxActions& actions;
80  CURL *curl;
81  bool in_edit;
82  Gtk::TreeModel::iterator edit_iter;
83  Glib::RefPtr<Gdk::Pixbuf> pb_edit;
84  Glib::RefPtr<Gdk::Pixbuf> pb_del;
85  Glib::RefPtr<Gdk::Pixbuf> pb_scratch;
86  Glib::RefPtr<Gdk::Pixbuf> pb_versiondiff;
87  Glib::RefPtr<Gdk::Pixbuf> pb_readonly;
88  Glib::RefPtr<Gdk::Pixbuf> pb_factory;
89  Glib::RefPtr<PresetStore> pstore;
90  TargetModelColumns target_col;
91  BankModelColumns bank_col;
92  sigc::connection bank_row_del_conn;
93  sigc::connection preset_row_del_conn;
94  int vpaned_pos;
95  int vpaned_step;
96  int vpaned_target;
97  const gx_system::CmdlineOptions& options;
98  bool in_current_preset;
99  sigc::connection on_map_conn;
100 
101  // widget pointers (keep last)
102  Gtk::Button *close_preset;
103  Gtk::Button *save_preset;
104  Gtk::Button *new_preset_bank;
105  Gtk::ToggleButton *organize_presets;
106  Gtk::Button *online_preset;
107  MyTreeView *bank_treeview;
108  Gtk::CellRendererText *bank_cellrenderer;
109  MyTreeView *preset_treeview;
110  Gtk::CellRendererText *preset_cellrenderer;
111  Gtk::ComboBox *banks_combobox;
112  MyTreeView *presets_target_treeview;
113  Gtk::Label *preset_title;
114  Gtk::ScrolledWindow *presets_target_scrolledbox;
115  Gtk::TreeViewColumn *bank_column_edit;
116  Gtk::TreeViewColumn *bank_column_delete;
117  Gtk::TreeViewColumn *preset_column_edit;
118  Gtk::TreeViewColumn *preset_column_delete;
119  Gtk::VPaned *main_vpaned;
120  Gtk::ScrolledWindow *preset_scrolledbox;
121  GtkSizeGroup *left_column;
122 private:
123  void load_widget_pointers(Glib::RefPtr<gx_gui::GxBuilder> bld);
124  void target_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& data, guint info, guint timestamp);
125  bool on_target_drag_motion(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint timestamp);
126  Glib::ustring get_combo_selection();
127  void reload_combo();
128  void on_preset_combo_changed();
129  void reload_target();
130  bool select_func(const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreePath& path, bool path_currently_selected);
131  void highlight_current_bank(Gtk::CellRenderer *cell, const Gtk::TreeModel::iterator& iter);
132  void text_func(Gtk::CellRenderer *cell, const Gtk::TreeModel::iterator& iter);
133  void on_editing_started(const Gtk::CellEditable* edit, const Glib::ustring& path, Glib::RefPtr<Gtk::TreeModel>& model);
134  bool edit_cell(Gtk::TreeModel::Path pt, Gtk::TreeViewColumn& col, Gtk::CellRenderer& cell);
135  void reset_edit(Gtk::TreeViewColumn& col);
136  void on_edit_canceled(Gtk::TreeViewColumn *col);
137  void start_edit(const Gtk::TreeModel::Path& pt, Gtk::TreeViewColumn& col, Gtk::CellRenderer& cell);
138  Gtk::TreeIter get_current_bank_iter() { return bank_treeview->get_selection()->get_selected(); }
139  Glib::ustring get_current_bank();
140  bool run_message_dialog(Gtk::Widget& w, const Glib::ustring& msg);
141  bool on_bank_button_release(GdkEventButton *ev);
142  void on_bank_edited(const Glib::ustring& path, const Glib::ustring& newtext, Gtk::TreeView* w);
143  bool is_row_separator(const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::iterator& iter);
144  void on_new_bank();
145  void on_preset_save();
146  const std::string pdir() { return options.get_preset_dir();}
147  void on_online_preset();
148  void replace_inline(std::string& l, const std::string& s, const std::string& r);
149  void show_online_preset();
150  void popup_pos( int& x, int& y, bool& push_in );
151  void downloadPreset(Gtk::Menu *presetMenu,std::string uri);
152  bool download_file(Glib::ustring from_uri, Glib::ustring to_path);
153  Glib::ustring resolve_hostname();
154  void create_preset_menu(bool is_new);
155  void read_preset_menu();
156  std::vector< std::tuple<std::string,std::string,std::string> > olp;
157  bool on_bank_drag_motion(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint timestamp);
158  void on_bank_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& data, guint info, guint timestamp);
159  void on_bank_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, Gtk::SelectionData& selection, int info, int timestamp);
160  void on_bank_changed();
161  bool on_bank_query_tooltip(int x, int y, bool kb_tooltip, Glib::RefPtr<Gtk::Tooltip> tooltip);
162  void reload_banks(const Glib::ustring& sel_bank);
163  void set_presets();
164  void on_bank_reordered(const Gtk::TreeModel::Path& path);
165  bool on_preset_button_release(GdkEventButton *ev);
166  bool on_preset_button_press(GdkEventButton *ev);
167  void on_preset_row_activated(const Gtk::TreePath& path, Gtk::TreeViewColumn* column);
168  void on_preset_edited(const Glib::ustring& path, const Glib::ustring& newtext);
169  void on_cursor_changed();
170  void on_preset_changed();
171  bool on_preset_drag_motion(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint timestamp);
172  void on_preset_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, Gtk::SelectionData& selection, int info, int timestamp);
173  void on_preset_reordered(const Gtk::TreeModel::Path& path);
174  void autosize();
175  void on_organize();
176  void on_presets_close();
177  bool animate_preset_show();
178  bool animate_preset_hide();
179  void set_row_for_presetfile(Gtk::TreeIter i, gx_system::PresetFileGui *f);
180  void display_paned(bool show_preset, int paned_child_height);
181  void on_selection_changed();
182 public:
183  PresetWindow(Glib::RefPtr<gx_gui::GxBuilder> bld, gx_engine::GxMachineBase& machine,
184  const gx_system::CmdlineOptions& options, GxActions& actions, GtkSizeGroup *lc);
185  ~PresetWindow();
186  void on_preset_select(bool v, bool animated, int preset_window_height);
187 };
BankModelColumns::name
Gtk::TreeModelColumn< Glib::ustring > name
Definition: gx_preset_window.h:51
BankModelColumns::BankModelColumns
BankModelColumns()
Definition: gx_preset_window.h:56
MyTreeView::create_from_builder
static MyTreeView * create_from_builder(BaseObjectType *cobject)
Definition: gx_preset_window.h:63
gx_engine::GxMachineBase
Definition: machine.h:53
PresetStore
Definition: gx_preset_window.h:28
PresetWindow
Definition: gx_preset_window.h:70
PresetStore::PresetModelColumns::edit_pb
Gtk::TreeModelColumn< Glib::RefPtr< Gdk::Pixbuf > > edit_pb
Definition: gx_preset_window.h:35
PresetStore::PresetModelColumns::PresetModelColumns
PresetModelColumns()
Definition: gx_preset_window.h:38
TargetModelColumns
Definition: gx_preset_window.h:43
PresetStore::PresetStore
PresetStore()
Definition: gx_preset_window.cpp:29
GxActions
Definition: gx_main_window.h:500
BankModelColumns
Definition: gx_preset_window.h:49
gx_system::CmdlineOptions::get_preset_dir
const std::string & get_preset_dir() const
Definition: gx_system.h:471
TargetModelColumns::TargetModelColumns
TargetModelColumns()
Definition: gx_preset_window.h:46
gx_system::PresetFileGui
Definition: gx_json.h:369
PresetWindow::PresetWindow
PresetWindow(Glib::RefPtr< gx_gui::GxBuilder > bld, gx_engine::GxMachineBase &machine, const gx_system::CmdlineOptions &options, GxActions &actions, GtkSizeGroup *lc)
Definition: gx_preset_window.cpp:44
BankModelColumns::type_pb
Gtk::TreeModelColumn< Glib::RefPtr< Gdk::Pixbuf > > type_pb
Definition: gx_preset_window.h:52
PresetStore::PresetModelColumns
Definition: gx_preset_window.h:31
PresetStore::row_draggable_vfunc
virtual bool row_draggable_vfunc(const TreeModel::Path &path) const
Definition: gx_preset_window.cpp:33
BankModelColumns::del_pb
Gtk::TreeModelColumn< Glib::RefPtr< Gdk::Pixbuf > > del_pb
Definition: gx_preset_window.h:54
TargetModelColumns::name
Gtk::TreeModelColumn< Glib::ustring > name
Definition: gx_preset_window.h:45
BankModelColumns::edit_pb
Gtk::TreeModelColumn< Glib::RefPtr< Gdk::Pixbuf > > edit_pb
Definition: gx_preset_window.h:53
BankModelColumns::tp
Gtk::TreeModelColumn< int > tp
Definition: gx_preset_window.h:55
PresetWindow::~PresetWindow
~PresetWindow()
Definition: gx_preset_window.cpp:176
gx_system::CmdlineOptions
Definition: gx_system.h:377
PresetStore::col
PresetStore::PresetModelColumns col
PresetStore::PresetModelColumns::del_pb
Gtk::TreeModelColumn< Glib::RefPtr< Gdk::Pixbuf > > del_pb
Definition: gx_preset_window.h:36
PresetWindow::on_preset_select
void on_preset_select(bool v, bool animated, int preset_window_height)
Definition: gx_preset_window.cpp:1349
PresetStore::PresetModelColumns::name
Gtk::TreeModelColumn< Glib::ustring > name
Definition: gx_preset_window.h:34
MyTreeView
Definition: gx_preset_window.h:59