Commit 39ec5f7db10a26970ba79663575e0a159be95658

Authored by perry.werneck@gmail.com
1 parent 98c4d197

Padronizando action que move o cursor ao final do campo ativo, incluindo função …

…de biblioteca que obtem a posição do último caractere do campo
src/include/lib3270.h
... ... @@ -125,7 +125,10 @@
125 125 LIB3270_DIR_UP,
126 126 LIB3270_DIR_DOWN,
127 127 LIB3270_DIR_LEFT,
128   - LIB3270_DIR_RIGHT
  128 + LIB3270_DIR_RIGHT,
  129 +
  130 + LIB3270_DIR_END,
  131 +
129 132 } LIB3270_DIRECTION;
130 133  
131 134 /**
... ... @@ -782,6 +785,19 @@
782 785 LIB3270_EXPORT int lib3270_get_next_unprotected(H3270 *hSession, int baddr0);
783 786  
784 787 /**
  788 + * Get address of the first blank.
  789 + *
  790 + * Get address of the first blank after the last nonblank in the
  791 + * field, or if the field is full, to the last character in the field.
  792 + *
  793 + * @param hSession Session handle.
  794 + * @param baddr Field address.
  795 + *
  796 + * @return address of the first blank or -1 if invalid.
  797 + */
  798 + LIB3270_EXPORT int lib3270_get_field_end(H3270 *hSession, int baddr);
  799 +
  800 + /**
785 801 * Find the buffer address of the field attribute for a given buffer address.
786 802 *
787 803 * @param h Session handle.
... ...
src/lib3270/kybd.c
... ... @@ -2346,29 +2346,43 @@ ToggleReverse_action(Widget w unused, XEvent *event, String *params, Cardinal *n
2346 2346 */
2347 2347 LIB3270_ACTION( fieldend )
2348 2348 {
2349   - int baddr, faddr;
2350   - unsigned char fa, c;
2351   - int last_nonblank = -1;
  2349 + int baddr;
2352 2350  
2353 2351 if (hSession->kybdlock)
2354 2352 {
2355 2353 ENQUEUE_ACTION( lib3270_fieldend );
2356 2354 return 0;
2357 2355 }
  2356 +
  2357 + baddr = lib3270_get_field_end(hSession,hSession->cursor_addr);
  2358 + if(baddr >= 0)
  2359 + cursor_move(hSession,baddr);
  2360 +
  2361 + return 0;
  2362 +}
  2363 +
  2364 +int lib3270_get_field_end(H3270 *hSession, int baddr)
  2365 +{
  2366 + int faddr;
  2367 + unsigned char fa, c;
  2368 + int last_nonblank = -1;
  2369 +
2358 2370 #if defined(X3270_ANSI) /*[*/
2359 2371 if (IN_ANSI)
2360   - return 0;
  2372 + return -1;
2361 2373 #endif /*]*/
  2374 +
2362 2375 if (!hSession->formatted)
2363   - return 0;
2364   - baddr = hSession->cursor_addr;
  2376 + return -1;
  2377 +
2365 2378 faddr = find_field_attribute(hSession,baddr);
2366 2379 fa = hSession->ea_buf[faddr].fa;
2367 2380 if (faddr == baddr || FA_IS_PROTECTED(fa))
2368   - return 0;
  2381 + return -1;
2369 2382  
2370 2383 baddr = faddr;
2371   - while (True) {
  2384 + while (True)
  2385 + {
2372 2386 INC_BA(baddr);
2373 2387 c = hSession->ea_buf[baddr].cc;
2374 2388 if (hSession->ea_buf[baddr].fa)
... ... @@ -2377,17 +2391,19 @@ LIB3270_ACTION( fieldend )
2377 2391 last_nonblank = baddr;
2378 2392 }
2379 2393  
2380   - if (last_nonblank == -1) {
  2394 + if (last_nonblank == -1)
  2395 + {
2381 2396 baddr = faddr;
2382 2397 INC_BA(baddr);
2383   - } else {
  2398 + }
  2399 + else
  2400 + {
2384 2401 baddr = last_nonblank;
2385 2402 INC_BA(baddr);
2386 2403 if (hSession->ea_buf[baddr].fa)
2387 2404 baddr = last_nonblank;
2388 2405 }
2389   - cursor_move(hSession,baddr);
2390   - return 0;
  2406 + return baddr;
2391 2407 }
2392 2408  
2393 2409 /**
... ...
src/lib3270/selection.c
... ... @@ -862,6 +862,12 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u
862 862 cursor_addr++;
863 863 break;
864 864  
  865 + case LIB3270_DIR_END:
  866 + cursor_addr = lib3270_get_field_end(hSession,cursor_addr);
  867 + if(cursor_addr == -1)
  868 + return EINVAL;
  869 + break;
  870 +
865 871 default:
866 872 return -1;
867 873 }
... ...
src/pw3270/actions.c
... ... @@ -320,7 +320,7 @@ static void cursor_move_action(GtkAction *action, GtkWidget *widget)
320 320 widget,
321 321 (unsigned int) flags);
322 322  
323   - lib3270_move_cursor(v3270_get_session(widget),(LIB3270_DIRECTION) (flags & 0x03), (flags & 0x80) );
  323 + lib3270_move_cursor(v3270_get_session(widget),(LIB3270_DIRECTION) (flags & 0x0F), (flags & 0x80) );
324 324 }
325 325  
326 326 static void connect_move_action(GtkAction *action, GtkWidget *widget, const gchar *target, unsigned short flags, GError **error)
... ... @@ -333,7 +333,7 @@ static void connect_move_action(GtkAction *action, GtkWidget *widget, const gcha
333 333  
334 334 if(!g_ascii_strcasecmp(target,"selection"))
335 335 {
336   - g_object_set_data(G_OBJECT(action),"direction",GINT_TO_POINTER((flags & 3)));
  336 + g_object_set_data(G_OBJECT(action),"direction",GINT_TO_POINTER((flags & 0x0F)));
337 337 g_signal_connect(action,"activate",G_CALLBACK(selection_move_action),widget);
338 338 }
339 339 else if(!g_ascii_strcasecmp(target,"cursor"))
... ... @@ -504,7 +504,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
504 504 } action_type = ACTION_TYPE_DEFAULT;
505 505  
506 506 if(dir != UI_ATTR_DIRECTION_NONE)
507   - flags |= ((unsigned char) dir) & 0x03;
  507 + flags |= ((unsigned char) dir) & 0x0F;
508 508  
509 509 if(ui_get_bool_attribute("selecting",names,values,FALSE))
510 510 flags |= 0x80;
... ...
src/pw3270/uiparser/parser.c
... ... @@ -38,7 +38,7 @@
38 38  
39 39 /*--[ Globals ]--------------------------------------------------------------------------------------*/
40 40  
41   -static const gchar * dirname[] = { "up", "down", "left", "right" };
  41 +static const gchar * dirname[] = { "up", "down", "left", "right", "end" };
42 42  
43 43 /*--[ Implement ]------------------------------------------------------------------------------------*/
44 44  
... ...
ui/00default.xml
... ... @@ -214,7 +214,6 @@
214 214 <accelerator action='Delete' key='Delete' group='online' />
215 215 <accelerator action='erase' target='char' key='BackSpace' group='online' />
216 216 <accelerator action='erase' target='eof' key='End' group='online' />
217   - <accelerator action='fieldend' key='<ctrl>End' group='online' />
218 217  
219 218 <accelerator action='SysREQ' key='Sys_Req' group='online' />
220 219 <accelerator action='SysREQ' key='<shift>Print' group='online' />
... ... @@ -233,6 +232,7 @@
233 232 <accelerator action='move' target='cursor' direction='left' key='Left' group='online' />
234 233 <accelerator action='move' target='cursor' direction='up' key='Up' group='online' />
235 234 <accelerator action='move' target='cursor' direction='down' key='Down' group='online' />
  235 + <accelerator action='move' target='cursor' direction='end' key='<ctrl>End' group='online' />
236 236  
237 237 <accelerator action='previousfield' key='ISO_Left_Tab' group='online' label='Previous field' />
238 238 <accelerator action='nextfield' key='Tab' group='online' label='Next field'/>
... ...