"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 */