1 /**
2  * Copyright (c) 2005 PCMan <pcman.tw@gmail.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18 
19 #ifdef __GNUG__
20   #pragma implementation "sitepage.h"
21 #endif
22 
23 #include <cstdlib>
24 #include <glib/gi18n.h>
25 #include "appconfig.h"
26 #include "sitepage.h"
27 #include "site.h"
28 
CSitePage(CSite & site)29 CSitePage::CSitePage(CSite& site)
30  : CWidget(), m_Site(site)
31 {
32 	GtkWidget *hbox1;
33 	GtkWidget *label1;
34 	GtkWidget *label40;
35 	GtkWidget *hbox3;
36 	GtkWidget *label3;
37 	GtkObject *m_Reconnect_adj;
38 	GtkWidget *label4;
39 	GtkWidget *hbox6;
40 	GtkWidget *label10;
41 	GtkObject *m_Idle_adj;
42 	GtkWidget *label11;
43 	GtkWidget *hbox7;
44 	GtkWidget *label12;
45 	GtkWidget *hbox13;
46 	GtkWidget *label17;
47 	GtkWidget *hbox14;
48 	GtkWidget *label22;
49 	GtkObject *m_Line_adj;
50 	GtkWidget *label23;
51 	GtkObject *m_Col_adj;
52 	GtkWidget *hbox10;
53 	GtkWidget *label20;
54 	GtkWidget *label21;
55 	GtkWidget *hbox15;
56 	GtkWidget *label24;
57 	GtkObject *m_PasteWrap_adj;
58 	GtkWidget *label25;
59 	GtkWidget *hbox25;
60 	GtkWidget *label39;
61 	GtkWidget *t_pScreenAlignBox;
62 
63 	m_Widget = gtk_vbox_new (FALSE, 0);
64 	gtk_widget_show (m_Widget);
65 	PostCreate();
66 
67 	hbox1 = gtk_hbox_new (FALSE, 2);
68 	gtk_widget_show (hbox1);
69 	gtk_box_pack_start (GTK_BOX (m_Widget), hbox1, FALSE, TRUE, 0);
70 	gtk_container_set_border_width (GTK_CONTAINER (hbox1), 1);
71 
72 	label1 = gtk_label_new (_("Name: "));
73 	gtk_widget_show (label1);
74 	gtk_box_pack_start (GTK_BOX (hbox1), label1, FALSE, FALSE, 0);
75 
76 	m_Name = gtk_entry_new ();
77 	gtk_widget_show (m_Name);
78 	gtk_box_pack_start (GTK_BOX (hbox1), m_Name, TRUE, TRUE, 2);
79 	gtk_widget_set_size_request (m_Name, 100, -1);
80 
81 	label40 = gtk_label_new (_("Address: "));
82 	gtk_widget_show (label40);
83 	gtk_box_pack_start (GTK_BOX (hbox1), label40, FALSE, FALSE, 2);
84 
85 	m_Address = gtk_entry_new ();
86 	gtk_widget_show (m_Address);
87 	gtk_box_pack_start (GTK_BOX (hbox1), m_Address, TRUE, TRUE, 0);
88 	gtk_widget_set_size_request (m_Address, 100, -1);
89 
90 	hbox3 = gtk_hbox_new (FALSE, 2);
91 	gtk_widget_show (hbox3);
92 	gtk_box_pack_start (GTK_BOX (m_Widget), hbox3, FALSE, TRUE, 0);
93 	gtk_container_set_border_width (GTK_CONTAINER (hbox3), 1);
94 
95 	label3 = gtk_label_new (_("Reconnect when disconnected in specified duration : "));
96 	gtk_widget_show (label3);
97 	gtk_box_pack_start (GTK_BOX (hbox3), label3, FALSE, FALSE, 0);
98 
99 	m_Reconnect_adj = gtk_adjustment_new (0, 0, 65535, 1, 0, 0);
100 	m_Reconnect = gtk_spin_button_new (GTK_ADJUSTMENT (m_Reconnect_adj), 1, 0);
101 	gtk_widget_show (m_Reconnect);
102 	gtk_box_pack_start (GTK_BOX (hbox3), m_Reconnect, FALSE, TRUE, 0);
103 
104 	label4 = gtk_label_new (_("Sec (0 = Disabled)"));
105 	gtk_widget_show (label4);
106 	gtk_box_pack_start (GTK_BOX (hbox3), label4, FALSE, FALSE, 0);
107 
108 	hbox6 = gtk_hbox_new (FALSE, 2);
109 	gtk_widget_show (hbox6);
110 	gtk_box_pack_start (GTK_BOX (m_Widget), hbox6, FALSE, TRUE, 0);
111 	gtk_container_set_border_width (GTK_CONTAINER (hbox6), 1);
112 
113 	label10 = gtk_label_new (_("Anti-Idle: Send specified string to server when idling for  "));
114 	gtk_widget_show (label10);
115 	gtk_box_pack_start (GTK_BOX (hbox6), label10, FALSE, FALSE, 0);
116 
117 	m_Idle_adj = gtk_adjustment_new (0, 0, 65535, 1, 0, 0);
118 	m_Idle = gtk_spin_button_new (GTK_ADJUSTMENT (m_Idle_adj), 1, 0);
119 	gtk_widget_show (m_Idle);
120 	gtk_box_pack_start (GTK_BOX (hbox6), m_Idle, FALSE, TRUE, 0);
121 
122 	label11 = gtk_label_new (_("Sec (0 = Disabled)"));
123 	gtk_widget_show (label11);
124 	gtk_box_pack_start (GTK_BOX (hbox6), label11, FALSE, FALSE, 0);
125 
126 	hbox7 = gtk_hbox_new (FALSE, 2);
127 	gtk_widget_show (hbox7);
128 	gtk_box_pack_start (GTK_BOX (m_Widget), hbox7, FALSE, TRUE, 0);
129 	gtk_container_set_border_width (GTK_CONTAINER (hbox7), 1);
130 
131 	label12 = gtk_label_new (_("Anti-Idle string to be sent :"));
132 	gtk_widget_show (label12);
133 	gtk_box_pack_start (GTK_BOX (hbox7), label12, FALSE, FALSE, 0);
134 
135 	m_IdleStr = gtk_entry_new ();
136 	gtk_widget_show (m_IdleStr);
137 	gtk_box_pack_start (GTK_BOX (hbox7), m_IdleStr, TRUE, TRUE, 0);
138 
139 	hbox13 = gtk_hbox_new (FALSE, 16);
140 	gtk_widget_show (hbox13);
141 	gtk_box_pack_start (GTK_BOX (m_Widget), hbox13, FALSE, TRUE, 0);
142 	gtk_container_set_border_width (GTK_CONTAINER (hbox13), 1);
143 
144 	label17 = gtk_label_new (_("Terminal Screen Size"));
145 	gtk_widget_show (label17);
146 	gtk_box_pack_start (GTK_BOX (hbox13), label17, FALSE, TRUE, 0);
147 
148 	hbox14 = gtk_hbox_new (FALSE, 0);
149 	gtk_widget_show (hbox14);
150 	gtk_box_pack_start (GTK_BOX (hbox13), hbox14, TRUE, TRUE, 0);
151 
152 	label22 = gtk_label_new (_("Line: "));
153 	gtk_widget_show (label22);
154 	gtk_box_pack_start (GTK_BOX (hbox14), label22, FALSE, FALSE, 0);
155 
156 	m_Line_adj = gtk_adjustment_new (24, 24, 96, 1, 0, 0);
157 	m_Line = gtk_spin_button_new (GTK_ADJUSTMENT (m_Line_adj), 1, 0);
158 	gtk_widget_show (m_Line);
159 	gtk_box_pack_start (GTK_BOX (hbox14), m_Line, FALSE, TRUE, 0);
160 
161 	label23 = gtk_label_new (_("Col: "));
162 	gtk_widget_show (label23);
163 	gtk_box_pack_start (GTK_BOX (hbox14), label23, FALSE, FALSE, 0);
164 
165 	m_Col_adj = gtk_adjustment_new (80, 40, 240, 1, 0, 0);
166 	m_Col = gtk_spin_button_new (GTK_ADJUSTMENT (m_Col_adj), 1, 0);
167 	gtk_widget_show (m_Col);
168 	gtk_box_pack_start (GTK_BOX (hbox14), m_Col, FALSE, TRUE, 0);
169 
170 	hbox10 = gtk_hbox_new (FALSE, 2);
171 	gtk_widget_show (hbox10);
172 	gtk_box_pack_start (GTK_BOX (m_Widget), hbox10, FALSE, TRUE, 0);
173 	gtk_container_set_border_width (GTK_CONTAINER (hbox10), 1);
174 
175 	label20 = gtk_label_new (_("Terminal Type: "));
176 	gtk_widget_show (label20);
177 	gtk_box_pack_start (GTK_BOX (hbox10), label20, FALSE, FALSE, 0);
178 
179 	m_TermType = gtk_entry_new ();
180 	gtk_widget_show (m_TermType);
181 	gtk_box_pack_start (GTK_BOX (hbox10), m_TermType, TRUE, TRUE, 0);
182 	gtk_widget_set_size_request (m_TermType, 60, -1);
183 
184 	label21 = gtk_label_new (_("Convert ESC in ANSI color code to  "));
185 	gtk_widget_show (label21);
186 	gtk_box_pack_start (GTK_BOX (hbox10), label21, FALSE, FALSE, 0);
187 
188 	m_ESCConv = gtk_entry_new ();
189 	gtk_widget_show (m_ESCConv);
190 	gtk_box_pack_start (GTK_BOX (hbox10), m_ESCConv, TRUE, TRUE, 0);
191 	gtk_widget_set_size_request (m_ESCConv, 60, -1);
192 
193 	hbox15 = gtk_hbox_new (FALSE, 2);
194 	gtk_widget_show (hbox15);
195 	gtk_box_pack_start (GTK_BOX (m_Widget), hbox15, FALSE, TRUE, 0);
196 	gtk_container_set_border_width (GTK_CONTAINER (hbox15), 1);
197 
198 	label24 = gtk_label_new (_("Wrap pasted text when there's too many characters per line :"));
199 	gtk_widget_show (label24);
200 	gtk_box_pack_start (GTK_BOX (hbox15), label24, FALSE, FALSE, 0);
201 
202 	m_PasteWrap_adj = gtk_adjustment_new (78, 0, 100, 1, 0, 0);
203 	m_PasteWrap = gtk_spin_button_new (GTK_ADJUSTMENT (m_PasteWrap_adj), 1, 0);
204 	gtk_widget_show (m_PasteWrap);
205 	gtk_box_pack_start (GTK_BOX (hbox15), m_PasteWrap, FALSE, TRUE, 0);
206 
207 	label25 = gtk_label_new (_("(0 = Disabled)"));
208 	gtk_widget_show (label25);
209 	gtk_box_pack_start (GTK_BOX (hbox15), label25, FALSE, FALSE, 0);
210 
211 	hbox25 = gtk_hbox_new (FALSE, 2);
212 	gtk_widget_show (hbox25);
213 	gtk_box_pack_start (GTK_BOX (m_Widget), hbox25, FALSE, TRUE, 0);
214 	gtk_container_set_border_width (GTK_CONTAINER (hbox25), 1);
215 
216 	label39 = gtk_label_new (_("Site Encoding: "));
217 	gtk_widget_show (label39);
218 	gtk_box_pack_start (GTK_BOX (hbox25), label39, FALSE, FALSE, 0);
219 
220 	m_Encoding = gtk_entry_new ();
221 	gtk_widget_show (m_Encoding);
222 	gtk_box_pack_start (GTK_BOX (hbox25), m_Encoding, TRUE, TRUE, 0);
223 	gtk_widget_set_size_request (m_Encoding, 60, -1);
224 
225 	m_DetectDBChar = gtk_check_button_new_with_mnemonic (_("Detect double-byte characters on typing"));
226 	gtk_widget_show (m_DetectDBChar);
227 	gtk_box_pack_start (GTK_BOX (hbox25), m_DetectDBChar, TRUE, TRUE, 0);
228 
229 	m_Startup = gtk_check_button_new_with_mnemonic (_("Connect automatically on program startup"));
230 	gtk_widget_show (m_Startup);
231 	gtk_box_pack_start (GTK_BOX (m_Widget), m_Startup, FALSE, FALSE, 0);
232 
233 	t_pScreenAlignBox = gtk_hbox_new(FALSE, 2);
234 	gtk_widget_show(t_pScreenAlignBox);
235 	gtk_box_pack_start(GTK_BOX(m_Widget), t_pScreenAlignBox, FALSE, TRUE, 0);
236 	gtk_container_set_border_width(GTK_CONTAINER(t_pScreenAlignBox), 1);
237 
238 	m_pVerticalCenterAlign = gtk_check_button_new_with_mnemonic(_("Center terminal screen vertically"));
239 	gtk_widget_show(m_pVerticalCenterAlign);
240 	gtk_box_pack_start(GTK_BOX(t_pScreenAlignBox), m_pVerticalCenterAlign, FALSE, FALSE, 0);
241 
242 	m_pHorizontalCenterAlign = gtk_check_button_new_with_mnemonic(_("Center terminal screen horizontally"));
243 	gtk_widget_show(m_pHorizontalCenterAlign);
244 	gtk_box_pack_start(GTK_BOX(t_pScreenAlignBox), m_pHorizontalCenterAlign, FALSE, FALSE, 0);
245 
246 	/* UAO user interface */
247     GtkWidget* uao_box = gtk_hbox_new (FALSE, 10);
248 	gtk_box_pack_start(GTK_BOX(uao_box), gtk_label_new (_("Unicode-at-on (UAO)")), FALSE, FALSE, 0);
249 
250     GtkTreeStore* store = gtk_tree_store_new (1, G_TYPE_STRING);
251 	GtkTreeIter iter;
252 	gtk_tree_store_append (store, &iter, NULL);
253         gtk_tree_store_set (store, &iter, 0, _("2.50"), -1);
254 	gtk_tree_store_append (store, &iter, NULL);
255         gtk_tree_store_set (store, &iter, 0, _("2.41"), -1);
256 	gtk_tree_store_append (store, &iter, NULL);
257 	gtk_tree_store_set (store, &iter, 0, _("Disable"), -1);
258 	m_UAOModel = GTK_TREE_MODEL(store);
259 	m_UAOBox = gtk_combo_box_new_with_model (m_UAOModel);
260 	gtk_box_pack_start(GTK_BOX(uao_box), m_UAOBox, FALSE, FALSE, 0);
261 	GtkCellRenderer* renderer = gtk_cell_renderer_text_new ();
262 	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (m_UAOBox), renderer, TRUE);
263 	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (m_UAOBox), renderer, "text", 0, NULL);
264 	gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (m_UAOBox), renderer, NULL, NULL, NULL);
265 
266 	GtkTreePath* path = gtk_tree_path_new_from_indices (m_Site.m_UAO, -1);
267 	gtk_tree_model_get_iter (m_UAOModel, &iter, path);
268 	gtk_tree_path_free (path);
269 	gtk_combo_box_set_active_iter (GTK_COMBO_BOX (m_UAOBox), &iter);
270 
271 	gtk_box_pack_start (GTK_BOX (m_Widget), uao_box, FALSE, FALSE, 0);
272     gtk_widget_show_all (uao_box);
273 
274 	if( m_Site.m_Name.empty() )
275 	{
276 		gtk_widget_hide(hbox1);
277 		gtk_widget_hide(m_Name);
278 		gtk_widget_hide(m_Address);
279 		gtk_widget_hide(m_Startup);
280 //		gtk_widget_set_sensitive(m_Name, false);
281 //		gtk_widget_set_sensitive(m_Address, false);
282 	}
283 
284 	gtk_entry_set_text(GTK_ENTRY(m_Name), m_Site.m_Name.c_str());
285 	gtk_entry_set_text(GTK_ENTRY(m_Address), m_Site.m_URL.c_str());
286 
287 	gtk_spin_button_set_value( GTK_SPIN_BUTTON(m_Idle), m_Site.m_AntiIdle);
288 	gtk_entry_set_text(GTK_ENTRY(m_IdleStr), m_Site.m_AntiIdleStr.c_str());
289 
290 	gtk_spin_button_set_value( GTK_SPIN_BUTTON(m_Reconnect), m_Site.m_AutoReconnect);
291 
292 	gtk_spin_button_set_value( GTK_SPIN_BUTTON(m_Line), m_Site.m_RowsPerPage);
293 
294 	gtk_spin_button_set_value( GTK_SPIN_BUTTON(m_Col), m_Site.m_ColsPerPage);
295 
296 	gtk_entry_set_text(GTK_ENTRY(m_TermType), m_Site.m_TermType.c_str());
297 	gtk_entry_set_text(GTK_ENTRY(m_ESCConv), m_Site.m_ESCConv.c_str());
298 
299 	gtk_spin_button_set_value( GTK_SPIN_BUTTON(m_PasteWrap), m_Site.m_AutoWrapOnPaste);
300 
301 	gtk_entry_set_text(GTK_ENTRY(m_Encoding), m_Site.m_Encoding.c_str());
302 
303 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_DetectDBChar),
304 	 								m_Site.m_DetectDBChar);
305 
306 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_Startup),
307 	 								m_Site.m_Startup);
308 
309 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_pVerticalCenterAlign), m_Site.m_bVerticalCenterAlign);
310 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_pHorizontalCenterAlign), m_Site.m_bHorizontalCenterAlign);
311 }
312 
313 
~CSitePage()314 CSitePage::~CSitePage()
315 {
316 }
317 
OnOK()318 bool CSitePage::OnOK()
319 {
320 	m_Site.m_Name = gtk_entry_get_text(GTK_ENTRY(m_Name));
321 	m_Site.m_URL = gtk_entry_get_text(GTK_ENTRY(m_Address));
322 	if( GTK_WIDGET_VISIBLE(m_Name) && (m_Site.m_Name.empty() || m_Site.m_URL.empty()) )
323 		return false;	// Empty name and URL are not allowed.
324 	m_Site.m_AntiIdle = atoi( gtk_entry_get_text(GTK_ENTRY(m_Idle)) );
325 	m_Site.m_AntiIdleStr = gtk_entry_get_text(GTK_ENTRY(m_IdleStr));
326 
327 	m_Site.m_Encoding = gtk_entry_get_text(GTK_ENTRY(m_Encoding));
328 
329 	m_Site.m_AutoReconnect = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(m_Reconnect));
330 
331 	m_Site.m_RowsPerPage = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(m_Line));
332 	m_Site.m_ColsPerPage = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(m_Col));
333 
334 	m_Site.m_TermType = gtk_entry_get_text(GTK_ENTRY(m_TermType));
335 	m_Site.m_ESCConv = gtk_entry_get_text(GTK_ENTRY(m_ESCConv));
336 
337 	m_Site.m_AutoWrapOnPaste = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(m_PasteWrap));
338 
339 	m_Site.m_DetectDBChar = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_DetectDBChar));
340 	m_Site.m_Startup = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_Startup));
341 
342 	m_Site.m_bVerticalCenterAlign = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_pVerticalCenterAlign));
343 	m_Site.m_bHorizontalCenterAlign = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_pHorizontalCenterAlign));
344 
345     GtkTreeIter iter;
346 	if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (m_UAOBox), &iter)) {
347         gchar* idx = gtk_tree_model_get_string_from_iter (m_UAOModel, &iter);
348         m_Site.m_UAO = atoi(idx);
349         g_free(idx);
350     }
351 
352 	return true;
353 }
354