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