Kitlist  1.1.0
kitlistgui.hpp
Go to the documentation of this file.
1 /*
2 
3  This file is part of Kitlist, a program to maintain a simple list
4  of items and assign items to one or more categories.
5 
6  Copyright (C) 2008-2021 Frank Dean
7 
8  Kitlist is free software: you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation, either version 3 of the License, or
11  (at your option) any later version.
12 
13  Kitlist is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with Kitlist. If not, see <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #ifndef KIT_LIST_GUI_H
24 #define KIT_LIST_GUI_H 1
25 
26 #include "service.hpp"
27 #ifndef GCONF
28 #include "yamlconfig.hpp"
29 #endif
30 
31 #include <iostream>
32 #ifdef KITLIST_DEBUG
33 #include <fstream>
34 #endif
35 #ifdef GCONF
36 #include <gconfmm/client.h>
37 #include <gconfmm.h>
38 #endif
39 #include <gtkmm/button.h>
40 #include <gtkmm/checkbutton.h>
41 #include <gtkmm/combobox.h>
42 #include <gtkmm/entry.h>
43 #include <gtkmm/imagemenuitem.h>
44 #include <gtkmm/main.h>
45 #include <gtkmm/statusbar.h>
46 #include <gtkmm/toolbutton.h>
47 #include <gtkmm/treemodelcolumn.h>
48 #include <gtkmm/liststore.h>
49 #include <gtkmm/pagesetup.h>
50 #include <gtkmm/printsettings.h>
51 #include <gtkmm/printoperation.h>
52 
54 
58 class ModelCategoryColumns : public Gtk::TreeModel::ColumnRecord {
59 public:
60 
62  add(m_col_text);
63  add(m_col_num);
64  }
65 
66  Gtk::TreeModelColumn<Glib::ustring> m_col_text;
67  Gtk::TreeModelColumn<int> m_col_num;
68 };
69 
70 
72 const int CHECKED_COL_POSITION = 0;
73 
77 class ModelItemColumns : public Gtk::TreeModel::ColumnRecord {
78 public:
79 
81  add(m_col_text);
82  add(m_col_checked);
83  add(m_col_num);
84  }
85 
86  Gtk::TreeModelColumn<Glib::ustring> m_col_text;
87  Gtk::TreeModelColumn<bool> m_col_checked;
88  Gtk::TreeModelColumn<int> m_col_num;
89 
90 };
91 
92 
99 class KitListGui {
100 private:
101 #ifndef GCONF
103 #endif
104 protected:
105 #ifdef GCONF
106  Glib::RefPtr<Gnome::Conf::Client> m_ref_gconf_client;
108 #endif
109 
114  Glib::ustring m_filename;
116  Glib::ustring m_page_title;
117 #ifdef KITLIST_DEBUG
118  std::ofstream* m_slog;
120 #endif
121  Glib::ustring m_clipboard_items;
126  Gtk::Main m_kit;
128  Gtk::Window* m_window;
130  Gtk::Window* m_window_preferences;
132  Gtk::Entry* m_entry_page_title;
134  Gtk::Window* m_window_add_item;
136  Gtk::Window* m_window_add_category;
138  Gtk::Entry* m_entry_add_item;
140  Gtk::Entry* m_entry_add_category;
142  Gtk::ImageMenuItem* m_file_save_menu_item;
144  Gtk::ToolButton* m_file_save_tool_button;
146  Gtk::MenuItem* m_recent_files_menu_item;
148  Gtk::ImageMenuItem* m_paste_menu_item;
150  Gtk::ToolButton* m_paste_tool_button;
152  Gtk::CheckButton* m_checkbutton_add_item;
154  Gtk::ComboBox* m_category_combo;
156  Glib::RefPtr<Gtk::ListStore> m_ref_category_list_store;
160  Gtk::TreeView* m_item_tree_view;
166  Glib::RefPtr<Gtk::ListStore> m_ref_item_tree_model;
168  Gtk::Statusbar* m_status_bar;
170  Glib::RefPtr<Gtk::PageSetup> m_ref_page_setup;
172  Glib::RefPtr<Gtk::PrintSettings> m_ref_printer_settings;
180  enum gui_state m_state;
182  virtual void init();
183  virtual gint get_max_recent_files();
184  virtual ModelItemContainer* get_selected_items();
185  virtual void add_items(const ModelItemContainer& items);
186  virtual void set_page_title(const Glib::ustring page_title);
187  virtual void close_preferences_window();
188  virtual void cancel_preferences_window();
189  virtual void close_add_item_window();
190  virtual void cancel_add_item_window();
191  virtual void close_add_category_window();
192  virtual void cancel_add_category_window();
193  virtual long get_selected_category();
194  virtual void init_add_item_window();
195  virtual void delete_selected_items();
196  virtual ModelItemContainer* copy_selected_items_to_clipboard();
197  virtual bool confirm_lose_changes(const Glib::ustring& message);
198  virtual void update_recent_files_menu();
199  virtual void update_recent_files(const Glib::ustring& filename);
200  virtual bool on_delete_event(GdkEventAny* event);
201  virtual void on_menu_quit();
202  virtual void on_menu_file_new();
203  virtual void on_menu_file_open();
204  virtual void on_menu_save();
205  virtual void on_menu_save_as();
206  void on_printoperation_done(Gtk::PrintOperationResult result, const Glib::RefPtr<Gtk::PrintOperation>& op);
207  void on_printoperation_status_changed(const Glib::RefPtr<Gtk::PrintOperation>& op);
208  virtual void on_menu_print();
209  virtual void on_menu_export_to_pdf();
210  virtual void on_menu_recent_file(const Glib::ustring& filename);
211  virtual void on_menu_preferences();
212  virtual void on_menu_add();
213  virtual void on_menu_delete();
214  virtual void on_menu_cut();
215  virtual void on_menu_copy();
216  virtual void on_menu_paste();
218  virtual void on_menu_show_all() { m_service.show_all(); refresh_item_list(); }
220  virtual void on_menu_show_checked() { m_service.show_checked_only(); refresh_item_list(); }
222  virtual void on_menu_show_unchecked() { m_service.show_unchecked_only(); refresh_item_list(); }
223  virtual void on_menu_select_all();
225  virtual void on_menu_check_selected() { set_selected(true); }
227  virtual void on_menu_uncheck_selected() { set_selected(false); }
228  virtual void on_menu_create_category();
229  virtual void on_menu_delete_category();
230  virtual void on_menu_rename_category();
231  virtual void on_menu_help_about();
232  virtual void on_clipboard_get(Gtk::SelectionData& selection_date, guint);
233  virtual void on_clipboard_clear();
234  virtual void on_clipboard_received(const Gtk::SelectionData& selection_data);
235  virtual void on_category_change();
236  virtual void on_cell_edit(const Glib::ustring s);
237  virtual bool choose_filename(Glib::ustring& filename);
238  virtual bool choose_pdf_filename(Glib::ustring& filename);
239  virtual void update_paste_status();
240  virtual void paste_status_received(const Glib::StringArrayHandle& targets_array);
241  virtual void paste_from_xml(const Glib::ustring& document);
242  virtual void refresh_item_list();
243  virtual void refresh_category_list(long cat_id = -2);
244  virtual void selected_row_callback(const Gtk::TreeModel::iterator& iter);
245  virtual void set_selected(bool checked);
246  virtual void toggle_selected();
247  // virtual void on_row_deleted(Gtk::TreeModel::Path path);
248  void on_row_changed(const Gtk::TreeModel::Path path, const Gtk::TreeModel::iterator iter);
249  virtual void update_item_count(size_t n);
250  public:
251  KitListGui(int argc, char **argv, Service& service);
252  ~KitListGui();
253  virtual void open_file(const Glib::ustring& filename);
254  virtual void raise();
255  virtual void safe_open_file(const Glib::ustring& filename);
256  void run();
257 };
258 
259 
260 #endif // KIT_LIST_GUI_H
Gtk::MenuItem * m_recent_files_menu_item
The recent files menu item.
Definition: kitlistgui.hpp:146
Gtk::ComboBox * m_category_combo
The combo box holding a list of categories.
Definition: kitlistgui.hpp:154
Gtk::Window * m_window_preferences
The &#39;Preferences&#39; dialog.
Definition: kitlistgui.hpp:130
virtual void on_menu_show_all()
Causes all items to be displayed.
Definition: kitlistgui.hpp:218
Gtk::Window * m_window
The main application window.
Definition: kitlistgui.hpp:128
Gtk::Window * m_window_add_category
The &#39;Add Category&#39; dialog.
Definition: kitlistgui.hpp:136
long m_current_cat_id
temporary reference to a category id, usually being renamed
Definition: kitlistgui.hpp:181
Gtk::Entry * m_entry_page_title
the text entry field for the page title
Definition: kitlistgui.hpp:132
Maintains the application&#39;s configuration parameters in a YAML formatted file.
Definition: yamlconfig.hpp:55
Glib::ustring m_page_title
The page title to be used when printing the item list.
Definition: kitlistgui.hpp:116
YamlConfig m_yaml_config
Definition: kitlistgui.hpp:102
Gtk::Window * m_window_add_item
The &#39;Add Item&#39; dialog.
Definition: kitlistgui.hpp:134
A definition for displaying an item in a multi-column list.
Definition: kitlistgui.hpp:77
Gtk::CheckButton * m_checkbutton_add_item
The check button field of the &#39;Add Item&#39; dialog.
Definition: kitlistgui.hpp:152
Gtk::TreeModelColumn< int > m_col_num
Definition: kitlistgui.hpp:88
Gtk::Statusbar * m_status_bar
The application status bar.
Definition: kitlistgui.hpp:168
ModelItemColumns m_item_cols
The definition of the item list&#39;s columns.
Definition: kitlistgui.hpp:162
virtual void show_unchecked_only()
Sets the filter to show only unchecked items.
Definition: service.hpp:77
virtual void show_checked_only()
Sets the filter to show only checked items.
Definition: service.hpp:75
Gtk::ToolButton * m_paste_tool_button
The toolbar paste button.
Definition: kitlistgui.hpp:150
Gtk::Entry * m_entry_add_category
The text entry field of the &#39;Add Category&#39; dialog.
Definition: kitlistgui.hpp:140
virtual void on_menu_check_selected()
Marks all selected items as checked.
Definition: kitlistgui.hpp:225
Gtk::Entry * m_entry_add_item
The text entry field of the &#39;Add Item&#39; dialog.
Definition: kitlistgui.hpp:138
virtual void on_menu_show_unchecked()
Causes only unchecked items to be displayed.
Definition: kitlistgui.hpp:222
Service & m_service
The business/service object.
Definition: kitlistgui.hpp:164
Glib::RefPtr< Gtk::PageSetup > m_ref_page_setup
Printer page setup settings.
Definition: kitlistgui.hpp:170
std::vector< ModelItem * > ModelItemContainer
Definition: kitmodel.hpp:81
Gtk::Main m_kit
The main application.
Definition: kitlistgui.hpp:126
Glib::RefPtr< Gtk::ListStore > m_ref_item_tree_model
The model backing the item list.
Definition: kitlistgui.hpp:166
bool m_ignore_list_events
Temporarily ignore events on the item list.
Definition: kitlistgui.hpp:124
Gtk::TreeModelColumn< Glib::ustring > m_col_text
Definition: kitlistgui.hpp:86
Glib::ustring m_filename
The filename currently associated with the loaded model.
Definition: kitlistgui.hpp:114
virtual void on_menu_show_checked()
Causes only checked items to be displayed.
Definition: kitlistgui.hpp:220
Encapsulates the methods for the application&#39;s GUI front end.
Definition: kitlistgui.hpp:99
Gtk::ImageMenuItem * m_paste_menu_item
The menu paste button.
Definition: kitlistgui.hpp:148
const int CHECKED_COL_POSITION
The position in the list of the tick box column.
Definition: kitlistgui.hpp:72
Gtk::TreeModelColumn< int > m_col_num
Definition: kitlistgui.hpp:67
A definition for displaying a ModelCategory in a combo box.
Definition: kitlistgui.hpp:58
Glib::RefPtr< Gtk::ListStore > m_ref_category_list_store
The model backing the category combo box.
Definition: kitlistgui.hpp:156
Gtk::ImageMenuItem * m_file_save_menu_item
The file save menu item.
Definition: kitlistgui.hpp:142
Gtk::TreeView * m_item_tree_view
The item list view definition.
Definition: kitlistgui.hpp:160
virtual void on_menu_uncheck_selected()
Marks all selected items as unchecked.
Definition: kitlistgui.hpp:227
Gtk::TreeModelColumn< Glib::ustring > m_col_text
Definition: kitlistgui.hpp:66
Glib::RefPtr< Gtk::PrintSettings > m_ref_printer_settings
Printer settings.
Definition: kitlistgui.hpp:172
gui_state
Definition: kitlistgui.hpp:53
Gtk::TreeModelColumn< bool > m_col_checked
Definition: kitlistgui.hpp:87
Gtk::ToolButton * m_file_save_tool_button
The file save toolbar button.
Definition: kitlistgui.hpp:144
Business/service layer implementation.
Definition: service.hpp:38
ModelCategoryColumns m_category_cols
The definition of the category combo box columns.
Definition: kitlistgui.hpp:158
virtual void show_all()
Removes filter. All items are shown.
Definition: service.hpp:73

Copyright 2008-2021 Frank Dean