]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GSearch.C
John Spray's gtk search dialog.
[lyx.git] / src / frontends / gtk / GSearch.C
1 /**
2  * \file GSearch.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author John Spray
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12 #include <gtkmm.h>
13
14 #include "GSearch.h"
15 #include "ControlSearch.h"
16 #include "ghelpers.h"
17 #include <libglademm.h>
18
19 using std::string;
20
21 namespace lyx {
22 namespace frontend {
23
24 typedef GViewCB<ControlSearch, GViewGladeB> base_class;
25
26 GSearch::GSearch(Dialog & parent)
27         : base_class(parent, _("Find and Replace"), false)
28 {}
29
30
31 void GSearch::doBuild()
32 {
33         string const gladeName = findGladeFile("search");
34         xml_ = Gnome::Glade::Xml::create(gladeName);
35         
36         Gtk::Button * cancelbutton;
37         xml_->get_widget("Cancel", cancelbutton);
38         setCancel(cancelbutton);
39
40         xml_->get_widget("FindNext", findnextbutton);
41         xml_->get_widget("Replace", replacebutton);
42         xml_->get_widget("ReplaceAll", replaceallbutton);       
43         xml_->get_widget("FindEntry", findentry);
44         xml_->get_widget("ReplaceEntry", replaceentry);
45         xml_->get_widget("CaseSensitive", casecheck);
46         xml_->get_widget("MatchWord", matchwordcheck);
47         xml_->get_widget("SearchBackwards", backwardscheck);
48
49         findnextbutton->signal_clicked().connect(
50                 SigC::slot(*this, &GSearch::onFindNext));
51         replacebutton->signal_clicked().connect(
52                 SigC::slot(*this, &GSearch::onReplace));
53         replaceallbutton->signal_clicked().connect(
54                 SigC::slot(*this, &GSearch::onReplaceAll));
55         findentry->signal_changed().connect(
56                 SigC::slot(*this,&GSearch::onFindEntryChanged));        
57
58         bcview().addReadOnly(replaceentry);
59         bcview().addReadOnly(replacebutton);
60         bcview().addReadOnly(replaceallbutton);
61 }
62
63 void GSearch::onFindNext()
64 {
65         controller().find(findentry->get_text(),
66                           casecheck->get_active(),
67                           matchwordcheck->get_active(),
68                           !backwardscheck->get_active());
69 }
70
71 void GSearch::onReplace()
72 {
73         controller().replace(findentry->get_text(),
74                              replaceentry->get_text(),
75                              casecheck->get_active(),
76                              matchwordcheck->get_active(),
77                              !backwardscheck->get_active(),
78                              false);                         
79 }
80
81 void GSearch::onReplaceAll()
82 {
83         controller().replace(findentry->get_text(),
84                              replaceentry->get_text(),
85                              casecheck->get_active(),
86                              matchwordcheck->get_active(),
87                              !backwardscheck->get_active(),
88                              true);                          
89 }
90
91 void GSearch::onFindEntryChanged()
92 {
93         if (findentry->get_text().empty()) {
94                 findnextbutton->set_sensitive(false);
95                 replacebutton->set_sensitive(false);
96                 replaceallbutton->set_sensitive(false); 
97         } else {
98                 findnextbutton->set_sensitive(true);
99                 replacebutton->set_sensitive(true);
100                 replaceallbutton->set_sensitive(true);  
101         }
102 }
103
104 } // namespace frontend
105 } // namespace lyx