Commit f638ef952393191f6808e1f8ecb7dc144862be37

Authored by perry.werneck@gmail.com
1 parent 179ca6c9

Unificando controle de toggles

pw3270.cbp
... ... @@ -124,6 +124,8 @@
124 124 <Option compilerVar="CC" />
125 125 </Unit>
126 126 <Unit filename="src/include/lib3270.h" />
  127 + <Unit filename="src/include/lib3270/action_table.h" />
  128 + <Unit filename="src/include/lib3270/actions.h" />
127 129 <Unit filename="src/include/lib3270/config.h.in" />
128 130 <Unit filename="src/include/lib3270/log.h" />
129 131 <Unit filename="src/include/lib3270/popup.h" />
... ... @@ -300,6 +302,7 @@
300 302 </Unit>
301 303 <Unit filename="src/lib3270/xioc.h" />
302 304 <Unit filename="src/lib3270/xl.h" />
  305 + <Unit filename="ui/default.xml" />
303 306 <Unit filename="valgrind.suppression" />
304 307 <Extensions>
305 308 <code_completion />
... ...
src/gtk/actions.c
... ... @@ -54,6 +54,12 @@ static void disconnect_action(GtkAction *action, GtkWidget *widget)
54 54 v3270_disconnect(widget);
55 55 }
56 56  
  57 +static void activate_action(GtkAction *action, GtkWidget *widget)
  58 +{
  59 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  60 + gtk_widget_activate(widget);
  61 +}
  62 +
57 63 void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id)
58 64 {
59 65 #undef DECLARE_LIB3270_ACTION
... ... @@ -84,6 +90,7 @@ void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name,
84 90 }
85 91 gtk_action[] =
86 92 {
  93 + { "activate", activate_action },
87 94 { "connect", connect_action },
88 95 { "disconnect", disconnect_action },
89 96 };
... ...
src/gtk/v3270/mouse.c
... ... @@ -68,7 +68,7 @@ static void button_1_press(GtkWidget *widget, GdkEventType type, int baddr)
68 68 break;
69 69  
70 70 case GDK_3BUTTON_PRESS: // Triple clock - Select field
71   - lib3270_select_field(GTK_V3270(widget)->host,baddr);
  71 + lib3270_select_field_at(GTK_V3270(widget)->host,baddr);
72 72 break;
73 73  
74 74 #ifdef DEBUG
... ...
src/include/lib3270.h
... ... @@ -74,12 +74,10 @@
74 74 typedef enum _lib3270_toggle
75 75 {
76 76 LIB3270_TOGGLE_MONOCASE,
77   - LIB3270_TOGGLE_ALT_CURSOR,
78 77 LIB3270_TOGGLE_CURSOR_BLINK,
79 78 LIB3270_TOGGLE_SHOW_TIMING,
80 79 LIB3270_TOGGLE_CURSOR_POS,
81 80 LIB3270_TOGGLE_DS_TRACE,
82   - LIB3270_TOGGLE_SCROLL_BAR,
83 81 LIB3270_TOGGLE_LINE_WRAP,
84 82 LIB3270_TOGGLE_BLANK_FILL,
85 83 LIB3270_TOGGLE_SCREEN_TRACE,
... ... @@ -87,13 +85,22 @@
87 85 LIB3270_TOGGLE_MARGINED_PASTE,
88 86 LIB3270_TOGGLE_RECTANGLE_SELECT,
89 87 LIB3270_TOGGLE_CROSSHAIR,
90   - LIB3270_TOGGLE_VISIBLE_CONTROL,
91   - LIB3270_TOGGLE_AID_WAIT,
92 88 LIB3270_TOGGLE_FULL_SCREEN,
93 89 LIB3270_TOGGLE_RECONNECT,
94 90 LIB3270_TOGGLE_INSERT,
95   - LIB3270_TOGGLE_KEYPAD,
96 91 LIB3270_TOGGLE_SMART_PASTE,
  92 + LIB3270_TOGGLE_BOLD,
  93 + LIB3270_TOGGLE_KEEP_SELECTED,
  94 + LIB3270_TOGGLE_UNDERLINE,
  95 + LIB3270_TOGGLE_CONNECT_ON_STARTUP,
  96 + LIB3270_TOGGLE_KP_ALTERNATIVE, /**< Keypad +/- move to next/previous field */
  97 + LIB3270_TOGGLE_BEEP, /**< Beep on errors */
  98 +
  99 +// LIB3270_TOGGLE_ALT_CURSOR,
  100 +// LIB3270_TOGGLE_AID_WAIT,
  101 +// LIB3270_TOGGLE_SCROLL_BAR,
  102 +// LIB3270_TOGGLE_VISIBLE_CONTROL,
  103 +// LIB3270_TOGGLE_KEYPAD,
97 104  
98 105 LIB3270_TOGGLE_COUNT
99 106  
... ...
src/include/lib3270/action_table.h
... ... @@ -59,6 +59,10 @@
59 59 DECLARE_LIB3270_CLEAR_SELECTION_ACTION( clear )
60 60 DECLARE_LIB3270_CLEAR_SELECTION_ACTION( eraseinput )
61 61  
  62 + DECLARE_LIB3270_ACTION( selectfield )
  63 + DECLARE_LIB3270_ACTION( selectall )
  64 + DECLARE_LIB3270_ACTION( unselect )
  65 +
62 66 DECLARE_LIB3270_ACTION( firstfield )
63 67 DECLARE_LIB3270_ACTION( eraseeof )
64 68 DECLARE_LIB3270_ACTION( eraseeol )
... ...
src/include/lib3270/selection.h
... ... @@ -36,6 +36,6 @@
36 36 LIB3270_EXPORT void lib3270_clear_selection(H3270 *session);
37 37 LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr);
38 38 LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr);
39   - LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr);
  39 + LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr);
40 40  
41 41 #endif // LIB3270_SELECTION_H_INCLUDED
... ...
src/lib3270/XtGlue.c
... ... @@ -1002,7 +1002,9 @@ LIB3270_EXPORT int lib3270_wait(seconds)
1002 1002 LIB3270_EXPORT void lib3270_ring_bell(H3270 *session)
1003 1003 {
1004 1004 CHECK_SESSION_HANDLE(session);
1005   - callbacks->ring_bell(session);
  1005 +
  1006 + if(lib3270_get_toggle(session,LIB3270_TOGGLE_BEEP))
  1007 + callbacks->ring_bell(session);
1006 1008 }
1007 1009  
1008 1010  
... ...
src/lib3270/ansi.c
... ... @@ -1827,7 +1827,7 @@ ansi_send_pa(int nn)
1827 1827  
1828 1828 void toggle_lineWrap(H3270 *session, struct toggle *t unused, LIB3270_TOGGLE_TYPE type unused)
1829 1829 {
1830   - if (toggled(LINE_WRAP))
  1830 + if (toggled(LIB3270_TOGGLE_LINE_WRAP))
1831 1831 wraparound_mode = 1;
1832 1832 else
1833 1833 wraparound_mode = 0;
... ...
src/lib3270/glue.c
... ... @@ -117,31 +117,6 @@
117 117 char *profile_name = CN;
118 118 #endif /*]*/
119 119  
120   -const char *toggle_names[N_TOGGLES] =
121   -{
122   - "Monocase",
123   - "AltCursor",
124   - "CursorBlink",
125   - "ShowTiming",
126   - "CursorPos",
127   - "DSTrace",
128   - "ScrollBar",
129   - "LineWrap",
130   - "BlankFill",
131   - "ScreenTrace",
132   - "EventTrace",
133   - "MarginedPaste",
134   - "RectSelect",
135   - "CrossHair",
136   - "VisibleControl",
137   - "AidWait",
138   - "FullScreen",
139   - "Reconnect",
140   - "Insert",
141   - "Keypad",
142   - "SmartPaste"
143   -};
144   -
145 120 void lib3270_session_free(H3270 *h)
146 121 {
147 122 int f;
... ... @@ -319,6 +294,7 @@ static void initialize(void)
319 294 Trace("Initializing library (calls: %d)",init_calls);
320 295 #endif
321 296  
  297 + h3270.selected.begin = h3270.selected.end = -1;
322 298 initialize_toggles(&h3270,appres.toggle);
323 299  
324 300 #if defined(_WIN32)
... ...
src/lib3270/kybd.c
... ... @@ -651,7 +651,7 @@ static Boolean ins_prep(int faddr, int baddr, int count)
651 651 while (need && (xaddr != next_faddr)) {
652 652 if (ea_buf[xaddr].cc == EBC_null)
653 653 need--;
654   - else if (toggled(BLANK_FILL) &&
  654 + else if (toggled(LIB3270_TOGGLE_BLANK_FILL) &&
655 655 ((ea_buf[xaddr].cc == EBC_space) ||
656 656 (ea_buf[xaddr].cc == EBC_underscore))) {
657 657 if (tb_start == -1)
... ... @@ -3653,3 +3653,4 @@ clear_xks(void)
3653 3653 }
3654 3654 }
3655 3655  
  3656 +
... ...
src/lib3270/screen.c
... ... @@ -735,19 +735,6 @@ void popup_system_error(H3270 *session, const char *title, const char *message,
735 735 va_end(args);
736 736 }
737 737  
738   -/*
739   -LIB3270_EXPORT void update_toggle_actions(void)
740   -{
741   - int f;
742   -
743   - if(callbacks && callbacks->toggle_changed)
744   - {
745   - for(f=0;f< N_TOGGLES;f++)
746   - callbacks->toggle_changed(&h3270,f,appres.toggle[f].value,TT_UPDATE,toggle_names[f]);
747   - }
748   -}
749   -*/
750   -
751 738 void mcursor_set(H3270 *session,LIB3270_CURSOR m)
752 739 {
753 740 CHECK_SESSION_HANDLE(session);
... ...
src/lib3270/selection.c
... ... @@ -219,7 +219,7 @@ LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr)
219 219 update_selected_region(session);
220 220 }
221 221  
222   -LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr)
  222 +LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr)
223 223 {
224 224 int start,len;
225 225  
... ... @@ -251,3 +251,41 @@ LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr)
251 251  
252 252 return 0;
253 253 }
  254 +
  255 +LIB3270_ACTION( selectfield )
  256 +{
  257 + lib3270_select_field_at(hSession,hSession->cursor_addr);
  258 +}
  259 +
  260 +LIB3270_ACTION( selectall )
  261 +{
  262 + int len = hSession->rows*hSession->cols;
  263 + int baddr;
  264 +
  265 + // First remove unselected areas
  266 + for(baddr = 0; baddr < len; baddr++)
  267 + {
  268 + if(!(ea_buf[baddr].attr & LIB3270_ATTR_SELECTED))
  269 + {
  270 + ea_buf[baddr].attr |= LIB3270_ATTR_SELECTED;
  271 + hSession->update(hSession,baddr,ea_buf[baddr].chr,ea_buf[baddr].attr,baddr == hSession->cursor_addr);
  272 + }
  273 + }
  274 +}
  275 +
  276 +LIB3270_ACTION( unselect )
  277 +{
  278 + int len = hSession->rows*hSession->cols;
  279 + int baddr;
  280 +
  281 + // First remove unselected areas
  282 + for(baddr = 0; baddr < len; baddr++)
  283 + {
  284 + if(ea_buf[baddr].attr & LIB3270_ATTR_SELECTED)
  285 + {
  286 + ea_buf[baddr].attr &= ~LIB3270_ATTR_SELECTED;
  287 + hSession->update(hSession,baddr,ea_buf[baddr].chr,ea_buf[baddr].attr,baddr == hSession->cursor_addr);
  288 + }
  289 + }
  290 +}
  291 +
... ...
src/lib3270/toggles.c
... ... @@ -52,6 +52,33 @@
52 52  
53 53  
54 54  
  55 +static const char *toggle_names[LIB3270_TOGGLE_COUNT] =
  56 +{
  57 + "monocase",
  58 + "cursorblink",
  59 + "showtiming",
  60 + "cursorpos",
  61 + "dstrace",
  62 + "linewrap",
  63 + "blankfill",
  64 + "screentrace",
  65 + "eventtrace",
  66 + "marginedpaste",
  67 + "rectselect",
  68 + "crosshair",
  69 + "fullscreen",
  70 + "reconnect",
  71 + "insert",
  72 + "smartpaste",
  73 + "bold",
  74 + "keepselected",
  75 + "underline",
  76 + "autoconnect",
  77 + "kpalternative", /**< Keypad +/- move to next/previous field */
  78 + "beep", /**< Beep on errors */
  79 +};
  80 +
  81 +
55 82 static void no_callback(H3270 *h, int value, LIB3270_TOGGLE_TYPE reason)
56 83 {
57 84 }
... ... @@ -154,7 +181,7 @@ void initialize_toggles(H3270 *session, struct toggle *toggle)
154 181 {
155 182 int f;
156 183  
157   - for(f=0;f<N_TOGGLES;f++)
  184 + for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
158 185 {
159 186 toggle[f].callback = no_callback;
160 187 toggle[f].upcall = toggle_nop;
... ... @@ -164,33 +191,35 @@ void initialize_toggles(H3270 *session, struct toggle *toggle)
164 191 toggle[LIB3270_TOGGLE_MONOCASE].upcall = toggle_monocase;
165 192  
166 193 #if defined(X3270_TRACE)
167   - toggle[DS_TRACE].upcall = toggle_dsTrace;
168   - toggle[SCREEN_TRACE].upcall = toggle_screenTrace;
169   - toggle[EVENT_TRACE].upcall = toggle_eventTrace;
  194 + toggle[LIB3270_TOGGLE_DS_TRACE].upcall = toggle_dsTrace;
  195 + toggle[LIB3270_TOGGLE_SCREEN_TRACE].upcall = toggle_screenTrace;
  196 + toggle[LIB3270_TOGGLE_EVENT_TRACE].upcall = toggle_eventTrace;
170 197 #endif
171 198  
172 199 #if defined(X3270_ANSI)
173   - toggle[LINE_WRAP].upcall = toggle_lineWrap;
  200 + toggle[LIB3270_TOGGLE_LINE_WRAP].upcall = toggle_lineWrap;
174 201 #endif
175 202  
176   -#if defined(X3270_TRACE)
177   - if(toggle[DS_TRACE].value)
178   - toggle[DS_TRACE].upcall(session, &toggle[DS_TRACE],TT_INITIAL);
  203 + static const LIB3270_TOGGLE active_by_default[] =
  204 + {
  205 + LIB3270_TOGGLE_CURSOR_BLINK,
  206 + LIB3270_TOGGLE_CURSOR_POS,
  207 + LIB3270_TOGGLE_BEEP,
179 208  
180   - if(toggle[EVENT_TRACE].value)
181   - toggle[EVENT_TRACE].upcall(session, &toggle[EVENT_TRACE],TT_INITIAL);
  209 + (LIB3270_TOGGLE) -1
  210 + };
182 211  
183   - if(toggle[SCREEN_TRACE].value)
184   - toggle[SCREEN_TRACE].upcall(session, &toggle[SCREEN_TRACE],TT_INITIAL);
185   -#endif
  212 + for(f=0;active_by_default[f] != (LIB3270_TOGGLE) -1; f++)
  213 + {
  214 + toggle[active_by_default[f]].value = True;
  215 + }
186 216  
187   -#if defined(DEFAULT_TOGGLE_CURSOR_POS)
188   - toggle[CURSOR_POS].value = True;
189   -#endif /*]*/
190 217  
191   -#if defined(DEFAULT_TOGGLE_RECTANGLE_SELECT)
192   - toggle[RECTANGLE_SELECT].value = True;
193   -#endif
  218 + for(f=0;f<LIB3270_TOGGLE_COUNT;f++)
  219 + {
  220 + if(toggle[f].value)
  221 + toggle[f].upcall(session,&toggle[f],TT_INITIAL);
  222 + }
194 223  
195 224 }
196 225  
... ...
src/lib3270/togglesc.h
... ... @@ -23,7 +23,7 @@
23 23 * Global declarations for toggles.c.
24 24 */
25 25  
26   - extern const char *toggle_names[N_TOGGLES];
  26 +// extern const char *toggle_names[N_TOGGLES];
27 27  
28 28 LIB3270_INTERNAL void initialize_toggles(H3270 *session, struct toggle *toggle);
29 29 LIB3270_INTERNAL void shutdown_toggles(H3270 *session, struct toggle *toggle);
... ...
ui/default.xml
... ... @@ -58,11 +58,11 @@
58 58 <menuitem action='PasteTextFile' group='online' label='Paste text file' />
59 59  
60 60 <separator/>
61   - <menuitem action='SelectAll' key='<ctrl>a' icon='select-all' group='online' label='Select all' />
  61 + <menuitem action='selectall' key='<ctrl>a' icon='select-all' group='online' label='Select all' />
62 62  
63   - <menuitem action='SelectField' key='<Ctrl>f' group='online' label='Select Field' />
64   - <menuitem action='Unselect' group='selection' label='Unselect' />
65   - <menuitem action='Reselect' key='<Ctrl>r' group='online' label='Reselect' />
  63 + <menuitem action='selectfield' key='<Ctrl>f' group='online' label='Select Field' />
  64 + <menuitem action='unselect' group='selection' label='unselect' />
  65 + <!--- menuitem action='Reselect' key='<Ctrl>r' group='online' label='Reselect' /--->
66 66  
67 67 <separator/>
68 68 <menuitem action='Clear' group='online' key='Pause' label='Clear' />
... ... @@ -123,7 +123,7 @@
123 123 </menubar>
124 124  
125 125 <toolbar name='toolbar.default' label='Toolbar' key='<alt>t' >
126   - <toolitem action='SelectAll' />
  126 + <toolitem action='selectall' />
127 127 <toolitem action='Copy' />
128 128 <toolitem action='Paste' />
129 129 <toolitem action='EraseInput' />
... ... @@ -144,7 +144,7 @@
144 144 <menuitem action='Copy'/>
145 145 <menuitem action='Append'/>
146 146 <menuitem action='Unselect'/>
147   - <menuitem action='SelectAll'/>
  147 + <menuitem action='selectall'/>
148 148  
149 149 <separator />
150 150 <menuitem action='PrintScreen'/>
... ... @@ -158,14 +158,14 @@
158 158 <popup name='defaultpopup' type='default'>
159 159 <menuitem action='Paste'/>
160 160 <menuitem action='PasteNext'/>
161   - <menuitem action='SelectAll'/>
  161 + <menuitem action='selectall'/>
162 162 <menuitem action='PrintScreen'/>
163 163 <menuitem action='PrintClipboard'/>
164 164  
165 165 <separator />
166   - <menuitem action='PreviousField' label='Previous field' />
167   - <menuitem action='NextField' label='Next field'/>
168   - <menuitem action='Return' label='Return' />
  166 + <menuitem action='backtab' label='Previous field' />
  167 + <menuitem action='tab' label='Next field'/>
  168 + <menuitem action='activate' label='Return' />
169 169  
170 170 <separator />
171 171 <menuitem action='Quit'/>
... ...