"Fossies" - the Fresh Open Source Software Archive 
Member "regexxer-0.10/src/filetree.h" (6 Oct 2011, 6065 Bytes) of package /linux/privat/old/regexxer-0.10.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "filetree.h" see the
Fossies "Dox" file reference documentation.
1 /*
2 * Copyright (c) 2002-2007 Daniel Elstner <daniel.kitta@gmail.com>
3 *
4 * This file is part of regexxer.
5 *
6 * regexxer is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * regexxer is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with regexxer; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21 #ifndef REGEXXER_FILETREE_H_INCLUDED
22 #define REGEXXER_FILETREE_H_INCLUDED
23
24 #include "filebuffer.h"
25 #include "fileio.h"
26 #include "signalutils.h"
27 #include "undostack.h"
28
29 #include <gdkmm/color.h>
30 #include <gdkmm/pixbuf.h>
31 #include <gtkmm/treemodel.h>
32 #include <gtkmm/treeview.h>
33 #include <list>
34
35 namespace Gtk { class TreeStore; }
36 namespace Glib { class Regex; }
37
38 namespace Regexxer
39 {
40
41 class FileTree : public Gtk::TreeView
42 {
43 public:
44 class Error; // exception class
45
46 FileTree();
47 virtual ~FileTree();
48
49 void find_files(const std::string& dirname, const Glib::RefPtr<Glib::Regex>& pattern,
50 bool recursive, bool hidden);
51
52 int get_file_count() const;
53
54 void save_current_file();
55 void save_all_files();
56
57 void select_first_file();
58 bool select_next_file(bool move_forward);
59
60 BoundState get_bound_state();
61
62 void find_matches(const Glib::RefPtr<Glib::Regex>& pattern, bool multiple);
63 long get_match_count() const;
64 void replace_all_matches(const Glib::ustring& substitution);
65
66 int get_modified_count() const;
67
68 sigc::signal<void, FileInfoPtr, int> signal_switch_buffer;
69 sigc::signal<void> signal_bound_state_changed;
70 sigc::signal<void> signal_file_count_changed;
71 sigc::signal<void> signal_match_count_changed;
72 sigc::signal<void> signal_modified_count_changed;
73 sigc::signal<bool> signal_pulse;
74 sigc::signal<void, UndoActionPtr> signal_undo_stack_push;
75
76 // Provide line number, subject and file info for match location output.
77 sigc::signal<void, int, const Glib::ustring&, FileInfoPtr> signal_feedback;
78
79 protected:
80 virtual void on_style_updated();
81
82 private:
83 class TreeRowRef;
84 class MessageList;
85 class ScopedBlockSorting;
86 class BufferActionShell;
87 struct FindData;
88 struct FindMatchesData;
89 struct ReplaceMatchesData;
90
91 typedef Util::SharedPtr<TreeRowRef> TreeRowRefPtr;
92 typedef Util::SharedPtr<BufferActionShell> BufferActionShellPtr;
93
94 Glib::RefPtr<Gtk::TreeStore> treestore_;
95
96 Glib::RefPtr<Gdk::Pixbuf> pixbuf_directory_;
97 Glib::RefPtr<Gdk::Pixbuf> pixbuf_file_;
98 Glib::RefPtr<Gdk::Pixbuf> pixbuf_load_failed_;
99
100 Gdk::Color color_modified_;
101 Gdk::Color color_load_failed_;
102
103 TreeRowRefPtr last_selected_rowref_;
104 FileInfoPtr last_selected_;
105
106 DirInfo toplevel_;
107 long sum_matches_;
108
109 Util::AutoConnection conn_match_count_;
110 Util::AutoConnection conn_modified_changed_;
111 Util::AutoConnection conn_undo_stack_push_;
112
113 Gtk::TreeModel::Path path_match_first_;
114 Gtk::TreeModel::Path path_match_last_;
115
116 std::string fallback_encoding_;
117
118 void icon_cell_data_func(Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter);
119 void text_cell_data_func(Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter);
120
121 static bool select_func(const Glib::RefPtr<Gtk::TreeModel>& model,
122 const Gtk::TreeModel::Path& path, bool currently_selected);
123
124 void find_recursively(const std::string& dirname, FindData& find_data);
125 void find_add_file(const Glib::ustring& basename, const std::string& fullname,
126 FindData& find_data);
127 void find_fill_dirstack(FindData& find_data);
128 void find_increment_file_count(FindData& find_data, int file_count);
129
130 bool save_file_at_iter(const Gtk::TreeModel::iterator& iter,
131 const Util::SharedPtr<MessageList>& error_list);
132
133 bool find_matches_at_path_iter(const Gtk::TreeModel::Path& path,
134 const Gtk::TreeModel::iterator& iter,
135 FindMatchesData& find_data);
136
137 bool replace_matches_at_path_iter(const Gtk::TreeModel::Path& path,
138 const Gtk::TreeModel::iterator& iter,
139 ReplaceMatchesData& replace_data);
140
141 void expand_and_select(const Gtk::TreeModel::Path& path);
142
143 void on_treestore_rows_reordered(const Gtk::TreeModel::Path& path,
144 const Gtk::TreeModel::iterator& iter, int* order);
145 void on_selection_changed();
146 void on_buffer_match_count_changed();
147 void on_buffer_modified_changed();
148 void on_buffer_undo_stack_push(UndoActionPtr undo_action);
149
150 int calculate_file_index(const Gtk::TreeModel::iterator& pos);
151
152 void propagate_match_count_change(const Gtk::TreeModel::iterator& pos, int difference);
153 void propagate_modified_change(const Gtk::TreeModel::iterator& pos, bool modified);
154
155 void load_file_with_fallback(const Gtk::TreeModel::iterator& iter, const FileInfoPtr& fileinfo);
156
157 void on_conf_value_changed(const Glib::ustring& key);
158 };
159
160 class FileTree::Error
161 {
162 public:
163 explicit Error(const Util::SharedPtr<FileTree::MessageList>& error_list);
164 virtual ~Error();
165
166 Error(const FileTree::Error& other);
167 FileTree::Error& operator=(const FileTree::Error& other);
168
169 const std::list<Glib::ustring>& get_error_list() const;
170
171 private:
172 Util::SharedPtr<FileTree::MessageList> error_list_;
173 };
174
175 } // namespace Regexxer
176
177 #endif /* REGEXXER_FILETREE_H_INCLUDED */