5 #include <libglademm.h>
8 #include "ControlPrint.h"
9 #include "support/filetools.h"
10 #include "PrinterParams.h"
11 #include "support/lstrings.h"
14 GPrint::GPrint(Dialog & parent, string title)
15 : GViewCB<ControlPrint, GViewGladeB>(parent, title, false)
23 pp.target = printer_->get_active() ? PrinterParams::PRINTER : PrinterParams::FILE;
24 pp.printer_name = printerEntry_->get_text();
25 pp.file_name = printerEntry_->get_text();
26 pp.all_pages = all_->get_active();
27 pp.from_page = pp.to_page = 0;
28 if (!fromEntry_->get_text().empty()) {
29 pp.from_page = strToInt(fromEntry_->get_text());
30 if (!toEntry_->get_text().empty())
31 pp.to_page = strToInt(toEntry_->get_text());
33 pp.odd_pages = odd_->get_active();
34 pp.even_pages = even_->get_active();
35 pp.count_copies = number_->get_value_as_int();
36 pp.sorted_copies = sorted_->get_active();
37 pp.reverse_order = reverse_->get_active();
38 controller().params() = pp;
44 PrinterParams & pp = controller().params();
45 printer_->set_active(pp.target == PrinterParams::PRINTER);
46 printerEntry_->set_text(pp.printer_name);
47 fileEntry_->set_text(pp.file_name);
48 all_->set_active(pp.all_pages);
50 string const from = ( pp.from_page ? tostr(pp.from_page) : string() );
51 string const to = ( pp.to_page ? tostr(pp.to_page) : string() );
52 fromEntry_->set_text(from);
53 toEntry_->set_text(to);
54 odd_->set_active(pp.odd_pages);
55 even_->set_active(pp.even_pages);
56 reverse_->set_active(pp.reverse_order);
57 sorted_->set_active(pp.sorted_copies);
58 number_->set_value(pp.count_copies);
59 bool const enable_counter = pp.target == PrinterParams::PRINTER;
60 number_->set_sensitive(enable_counter);
61 sorted_->set_sensitive(enable_counter && pp.count_copies > 1);
65 void GPrint::updateUI()
67 ButtonPolicy::SMInput activate = ButtonPolicy::SMI_VALID;
68 // disable OK/Apply buttons when file output is selected, but no file name entered
69 if (file_->get_active() && fileEntry_->get_text().empty())
70 activate = ButtonPolicy::SMI_INVALID;
71 // check 'from' and 'to' fields only when 'from/to' radio button is selected
72 if (fromTo_->get_active()) {
73 string from = fromEntry_->get_text();
74 string to = toEntry_->get_text();
75 if (from.empty() || (!to.empty() && strToInt(from) > strToInt(to)))
76 activate = ButtonPolicy::SMI_INVALID;
78 bool const enableCounter = printer_->get_active();
79 number_->set_sensitive(enableCounter);
80 bool const enableSorted = enableCounter && number_->get_value_as_int() > 1;
81 sorted_->set_sensitive(enableSorted);
86 void GPrint::onBrowse()
88 string const inName = fileEntry_->get_text();
89 string const outName = Glib::locale_to_utf8(controller().Browse(Glib::locale_from_utf8(inName)));
90 if (outName != inName && !outName.empty())
91 fileEntry_->set_text(outName);
93 file_->set_active(true);
98 void GPrint::onTargetEdit(Gtk::Entry const * who)
100 if (who == fileEntry_)
101 file_->set_active(true);
102 else if (who == printerEntry_)
103 printer_->set_active(true);
108 void GPrint::onFromToEdit()
110 fromTo_->set_active(true);
115 void GPrint::doBuild()
117 string const gladeName = LibFileSearch("glade", "print", "glade");
118 xml_ = Gnome::Glade::Xml::create(gladeName);
119 xml_->get_widget("Printer", printer_);
120 xml_->get_widget("File", file_);
121 xml_->get_widget("All", all_);
122 xml_->get_widget("FromTo", fromTo_);
123 xml_->get_widget("Odd", odd_);
124 xml_->get_widget("Even", even_);
125 xml_->get_widget("Reverse", reverse_);
126 xml_->get_widget("Number", number_);
127 xml_->get_widget("Sorted", sorted_);
128 xml_->get_widget("FromEntry", fromEntry_);
129 xml_->get_widget("ToEntry", toEntry_);
130 xml_->get_widget("PrinterEntry", printerEntry_);
131 xml_->get_widget("FileEntry", fileEntry_);
133 Gtk::Button * cancel;
135 xml_->get_widget("OkButton", ok);
136 xml_->get_widget("CancelButton", cancel);
137 xml_->get_widget("ApplyButton", apply);
139 bc().setApply(apply);
140 bc().setCancel(cancel);
141 ok->signal_clicked().connect(SigC::slot(*this, &GViewBase::onOK));
142 apply->signal_clicked().connect(SigC::slot(*this, &GViewBase::onApply));
143 cancel->signal_clicked().connect(SigC::slot(*this, &GViewBase::onCancel));
144 Gtk::Button * browse;
145 xml_->get_widget("Browse", browse);
146 browse->signal_clicked().connect(SigC::slot(*this, &GPrint::onBrowse));
147 fileEntry_->signal_changed().connect(SigC::bind(SigC::slot(*this, &GPrint::onTargetEdit), fileEntry_));
148 printerEntry_->signal_changed().connect(SigC::bind(SigC::slot(*this, &GPrint::onTargetEdit), printerEntry_));
149 fromEntry_->signal_changed().connect(SigC::slot(*this, &GPrint::onFromToEdit));
150 toEntry_->signal_changed().connect(SigC::slot(*this, &GPrint::onFromToEdit));
151 printer_->signal_toggled().connect(SigC::slot(*this, &GPrint::updateUI));
152 file_->signal_toggled().connect(SigC::slot(*this, &GPrint::updateUI));
153 all_->signal_toggled().connect(SigC::slot(*this, &GPrint::updateUI));
154 fromTo_->signal_toggled().connect(SigC::slot(*this, &GPrint::updateUI));
155 number_->signal_changed().connect(SigC::slot(*this, &GPrint::updateUI));