Commit c051366cf31f31f4a028fa94542462d618c8d486
1 parent
6c5ac017
Exists in
master
and in
3 other branches
Adding signals for save/print copy actions.
Showing
4 changed files
with
49 additions
and
149 deletions
Show diff stats
src/core/actions/table.c
| @@ -39,27 +39,6 @@ | @@ -39,27 +39,6 @@ | ||
| 39 | 39 | ||
| 40 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ | 40 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ |
| 41 | 41 | ||
| 42 | - /* | ||
| 43 | - static int save_all(H3270 *hSession) | ||
| 44 | - { | ||
| 45 | - return lib3270_save_all(hSession,NULL); | ||
| 46 | - } | ||
| 47 | - */ | ||
| 48 | - | ||
| 49 | - /* | ||
| 50 | - static int save_selected(H3270 *hSession) | ||
| 51 | - { | ||
| 52 | - return lib3270_save_selected(hSession,NULL); | ||
| 53 | - } | ||
| 54 | - */ | ||
| 55 | - | ||
| 56 | - /* | ||
| 57 | - static int save_copy(H3270 *hSession) | ||
| 58 | - { | ||
| 59 | - return lib3270_save_copy(hSession,NULL); | ||
| 60 | - } | ||
| 61 | - */ | ||
| 62 | - | ||
| 63 | static int paste_file(H3270 *hSession) | 42 | static int paste_file(H3270 *hSession) |
| 64 | { | 43 | { |
| 65 | return lib3270_load(hSession,NULL); | 44 | return lib3270_load(hSession,NULL); |
| @@ -211,55 +190,6 @@ | @@ -211,55 +190,6 @@ | ||
| 211 | .activatable = lib3270_is_connected | 190 | .activatable = lib3270_is_connected |
| 212 | }, | 191 | }, |
| 213 | 192 | ||
| 214 | - /* | ||
| 215 | - | ||
| 216 | - No need here; this actions are better when implemented on the widget or main application. | ||
| 217 | - // | ||
| 218 | - // Save/load actions | ||
| 219 | - // | ||
| 220 | - { | ||
| 221 | - .name = "save-all", | ||
| 222 | - .type = LIB3270_ACTION_TYPE_FILE, | ||
| 223 | - | ||
| 224 | - .keys = NULL, | ||
| 225 | - .icon = "document-save", | ||
| 226 | - .label = NULL, | ||
| 227 | - .summary = N_( "Save screen to file" ), | ||
| 228 | - .activate = save_all, | ||
| 229 | - | ||
| 230 | - .group = LIB3270_ACTION_GROUP_ONLINE, | ||
| 231 | - .activatable = lib3270_is_connected | ||
| 232 | - }, | ||
| 233 | - | ||
| 234 | - { | ||
| 235 | - .name = "save-selected", | ||
| 236 | - .type = LIB3270_ACTION_TYPE_FILE, | ||
| 237 | - | ||
| 238 | - .keys = NULL, | ||
| 239 | - .icon = "document-save", | ||
| 240 | - .label = NULL, | ||
| 241 | - .summary = N_( "Save selected area to file" ), | ||
| 242 | - .activate = save_selected, | ||
| 243 | - | ||
| 244 | - .group = LIB3270_ACTION_GROUP_SELECTION, | ||
| 245 | - .activatable = lib3270_has_selection | ||
| 246 | - }, | ||
| 247 | - | ||
| 248 | - { | ||
| 249 | - .name = "save-copy", | ||
| 250 | - .type = LIB3270_ACTION_TYPE_FILE, | ||
| 251 | - | ||
| 252 | - .keys = NULL, | ||
| 253 | - .icon = "document-save", | ||
| 254 | - .label = NULL, | ||
| 255 | - .summary = NULL, | ||
| 256 | - .activate = save_copy, | ||
| 257 | - | ||
| 258 | - .group = LIB3270_ACTION_GROUP_ONLINE, | ||
| 259 | - .activatable = lib3270_is_connected | ||
| 260 | - }, | ||
| 261 | - */ | ||
| 262 | - | ||
| 263 | { | 193 | { |
| 264 | .name = "paste-from-file", | 194 | .name = "paste-from-file", |
| 265 | .type = LIB3270_ACTION_TYPE_FILE, | 195 | .type = LIB3270_ACTION_TYPE_FILE, |
| @@ -642,71 +572,6 @@ | @@ -642,71 +572,6 @@ | ||
| 642 | }, | 572 | }, |
| 643 | 573 | ||
| 644 | // | 574 | // |
| 645 | - // Misc actions | ||
| 646 | - // | ||
| 647 | - /* | ||
| 648 | - | ||
| 649 | - No need here; this actions are better when implemented on the widget or main application. | ||
| 650 | - | ||
| 651 | - { | ||
| 652 | - .name = "print", | ||
| 653 | - .type = LIB3270_ACTION_TYPE_PRINTER, | ||
| 654 | - | ||
| 655 | - .keys = "Print", | ||
| 656 | - .icon = "document-print", | ||
| 657 | - .label = N_("Print"), | ||
| 658 | - .summary = N_("Send to printer"), | ||
| 659 | - .description = N_("If the terminal has selected area print it, if not, print all contents"), | ||
| 660 | - .activate = lib3270_print, | ||
| 661 | - | ||
| 662 | - .group = LIB3270_ACTION_GROUP_ONLINE, | ||
| 663 | - .activatable = lib3270_is_connected | ||
| 664 | - }, | ||
| 665 | - | ||
| 666 | - { | ||
| 667 | - .name = "print-all", | ||
| 668 | - .type = LIB3270_ACTION_TYPE_PRINTER, | ||
| 669 | - | ||
| 670 | - .keys = NULL, | ||
| 671 | - .icon = "document-print", | ||
| 672 | - .label = N_("Print screen"), | ||
| 673 | - .summary = N_("Print screen contents"), | ||
| 674 | - .activate = lib3270_print_all, | ||
| 675 | - | ||
| 676 | - .group = LIB3270_ACTION_GROUP_ONLINE, | ||
| 677 | - .activatable = lib3270_is_connected | ||
| 678 | - }, | ||
| 679 | - | ||
| 680 | - { | ||
| 681 | - .name = "print-selected", | ||
| 682 | - .type = LIB3270_ACTION_TYPE_PRINTER, | ||
| 683 | - | ||
| 684 | - .keys = NULL, | ||
| 685 | - .icon = "document-print", | ||
| 686 | - .label = N_("Print selection"), | ||
| 687 | - .summary = N_( "Print selected area" ), | ||
| 688 | - .activate = lib3270_print_selected, | ||
| 689 | - | ||
| 690 | - .group = LIB3270_ACTION_GROUP_SELECTION, | ||
| 691 | - .activatable = lib3270_has_selection | ||
| 692 | - }, | ||
| 693 | - | ||
| 694 | - { | ||
| 695 | - .name = "print-copy", | ||
| 696 | - .type = LIB3270_ACTION_TYPE_PRINTER, | ||
| 697 | - | ||
| 698 | - .keys = NULL, | ||
| 699 | - .icon = "document-print", | ||
| 700 | - .label = N_("Print copy"), | ||
| 701 | - .summary = N_("Print copy (if available)"), | ||
| 702 | - .activate = lib3270_print_copy, | ||
| 703 | - | ||
| 704 | - .group = LIB3270_ACTION_GROUP_COPY, | ||
| 705 | - .activatable = lib3270_is_connected | ||
| 706 | - }, | ||
| 707 | - */ | ||
| 708 | - | ||
| 709 | - // | ||
| 710 | // Test actions | 575 | // Test actions |
| 711 | // | 576 | // |
| 712 | 577 | ||
| @@ -751,19 +616,18 @@ | @@ -751,19 +616,18 @@ | ||
| 751 | return hSession == NULL ? 0 : 1; | 616 | return hSession == NULL ? 0 : 1; |
| 752 | } | 617 | } |
| 753 | 618 | ||
| 754 | - LIB3270_EXPORT int lib3270_action_group_get_activatable(const H3270 *hSession, const LIB3270_ACTION_GROUP group) | ||
| 755 | - { | ||
| 756 | - static const struct | ||
| 757 | - { | 619 | + LIB3270_EXPORT int lib3270_action_group_get_activatable(const H3270 *hSession, const LIB3270_ACTION_GROUP group) { |
| 620 | + | ||
| 621 | + static const struct { | ||
| 758 | int (*get)(const H3270 *); | 622 | int (*get)(const H3270 *); |
| 759 | - } activatable[LIB3270_ACTION_CUSTOM] = | ||
| 760 | - { | ||
| 761 | - { default_activatable_state }, // LIB3270_ACTION_GROUP_NONE | ||
| 762 | - { lib3270_is_connected }, // LIB3270_ACTION_GROUP_ONLINE | ||
| 763 | - { lib3270_is_disconnected }, // LIB3270_ACTION_GROUP_OFFLINE | ||
| 764 | - { lib3270_has_selection }, // LIB3270_ACTION_GROUP_SELECTION | ||
| 765 | - { lib3270_is_unlocked }, // LIB3270_ACTION_GROUP_LOCK_STATE | ||
| 766 | - { lib3270_is_formatted }, // LIB3270_ACTION_GROUP_FORMATTED | 623 | + } activatable[LIB3270_ACTION_CUSTOM] = { |
| 624 | + { default_activatable_state }, // LIB3270_ACTION_GROUP_NONE | ||
| 625 | + { lib3270_is_connected }, // LIB3270_ACTION_GROUP_ONLINE | ||
| 626 | + { lib3270_is_disconnected }, // LIB3270_ACTION_GROUP_OFFLINE | ||
| 627 | + { lib3270_get_has_selection }, // LIB3270_ACTION_GROUP_SELECTION | ||
| 628 | + { lib3270_is_unlocked }, // LIB3270_ACTION_GROUP_LOCK_STATE | ||
| 629 | + { lib3270_is_formatted }, // LIB3270_ACTION_GROUP_FORMATTED | ||
| 630 | + { lib3270_get_has_copy }, // LIB3270_ACTION_GROUP_COPY | ||
| 767 | }; | 631 | }; |
| 768 | 632 | ||
| 769 | if(group < (sizeof(activatable)/sizeof(activatable[0]))) { | 633 | if(group < (sizeof(activatable)/sizeof(activatable[0]))) { |
src/include/internals.h
| @@ -353,6 +353,7 @@ struct _h3270 | @@ -353,6 +353,7 @@ struct _h3270 | ||
| 353 | LIB3270_HOST_TYPE host_type; ///< @brief Host type. | 353 | LIB3270_HOST_TYPE host_type; ///< @brief Host type. |
| 354 | 354 | ||
| 355 | int selected : 1; ///< @brief Has selected region? | 355 | int selected : 1; ///< @brief Has selected region? |
| 356 | + int has_copy : 1; ///< @brief Has copy? | ||
| 356 | int rectsel : 1; ///< @brief Selected region is a rectangle ? | 357 | int rectsel : 1; ///< @brief Selected region is a rectangle ? |
| 357 | int vcontrol : 1; ///< @brief Visible control ? | 358 | int vcontrol : 1; ///< @brief Visible control ? |
| 358 | int modified_sel : 1; | 359 | int modified_sel : 1; |
src/include/lib3270.h
| @@ -1162,7 +1162,22 @@ | @@ -1162,7 +1162,22 @@ | ||
| 1162 | * @return Greater than zero if the terminal has selected area, 0 if not. | 1162 | * @return Greater than zero if the terminal has selected area, 0 if not. |
| 1163 | * | 1163 | * |
| 1164 | */ | 1164 | */ |
| 1165 | - LIB3270_EXPORT int lib3270_has_selection(const H3270 *hSession); | 1165 | + LIB3270_EXPORT int lib3270_get_has_selection(const H3270 *hSession); |
| 1166 | + | ||
| 1167 | + LIB3270_EXPORT int LIB3270_DEPRECATED(lib3270_has_selection(const H3270 *hSession)); | ||
| 1168 | + | ||
| 1169 | + /** | ||
| 1170 | + * @brief Check if the terminal has stored clipboard contents. | ||
| 1171 | + * | ||
| 1172 | + * @param hSession Session handle. | ||
| 1173 | + * | ||
| 1174 | + * @return Greater than zero if the terminal has copy, 0 if not. | ||
| 1175 | + * | ||
| 1176 | + */ | ||
| 1177 | + LIB3270_EXPORT int lib3270_get_has_copy(const H3270 *hSession); | ||
| 1178 | + | ||
| 1179 | + LIB3270_EXPORT void lib3270_set_has_copy(H3270 *hSession, int has_copy); | ||
| 1180 | + | ||
| 1166 | 1181 | ||
| 1167 | /** | 1182 | /** |
| 1168 | * @brief Get all text inside the terminal. | 1183 | * @brief Get all text inside the terminal. |
src/selection/selection.c
| @@ -393,7 +393,7 @@ LIB3270_EXPORT char * lib3270_get_field_string_at(H3270 *session, int baddr) | @@ -393,7 +393,7 @@ LIB3270_EXPORT char * lib3270_get_field_string_at(H3270 *session, int baddr) | ||
| 393 | return lib3270_get_string_at_address(session,first,lib3270_field_length(session,first)+1,0); | 393 | return lib3270_get_string_at_address(session,first,lib3270_field_length(session,first)+1,0); |
| 394 | } | 394 | } |
| 395 | 395 | ||
| 396 | -LIB3270_EXPORT int lib3270_has_selection(const H3270 *hSession) | 396 | +LIB3270_EXPORT int lib3270_get_has_selection(const H3270 *hSession) |
| 397 | { | 397 | { |
| 398 | errno = 0; | 398 | errno = 0; |
| 399 | if(check_online_session(hSession)) | 399 | if(check_online_session(hSession)) |
| @@ -402,6 +402,26 @@ LIB3270_EXPORT int lib3270_has_selection(const H3270 *hSession) | @@ -402,6 +402,26 @@ LIB3270_EXPORT int lib3270_has_selection(const H3270 *hSession) | ||
| 402 | return hSession->selected ? 1 : 0; | 402 | return hSession->selected ? 1 : 0; |
| 403 | } | 403 | } |
| 404 | 404 | ||
| 405 | +LIB3270_EXPORT int lib3270_has_selection(const H3270 *hSession) { | ||
| 406 | + return lib3270_get_has_selection(hSession); | ||
| 407 | +} | ||
| 408 | + | ||
| 409 | +LIB3270_EXPORT int lib3270_get_has_copy(const H3270 *hSession) | ||
| 410 | +{ | ||
| 411 | + errno = 0; | ||
| 412 | + if(check_online_session(hSession)) | ||
| 413 | + return 0; | ||
| 414 | + | ||
| 415 | + return hSession->has_copy ? 1 : 0; | ||
| 416 | +} | ||
| 417 | + | ||
| 418 | +LIB3270_EXPORT void lib3270_set_has_copy(H3270 *hSession, int has_copy) { | ||
| 419 | + hSession->has_copy = has_copy ? 1 : 0; | ||
| 420 | + lib3270_action_group_notify(hSession,LIB3270_ACTION_GROUP_COPY); | ||
| 421 | +} | ||
| 422 | + | ||
| 423 | + | ||
| 424 | + | ||
| 405 | LIB3270_EXPORT int lib3270_get_selection_rectangle(H3270 *hSession, unsigned int *row, unsigned int *col, unsigned int *width, unsigned int *height) | 425 | LIB3270_EXPORT int lib3270_get_selection_rectangle(H3270 *hSession, unsigned int *row, unsigned int *col, unsigned int *width, unsigned int *height) |
| 406 | { | 426 | { |
| 407 | unsigned int r, c, minRow, minCol, maxRow, maxCol, baddr, count; | 427 | unsigned int r, c, minRow, minCol, maxRow, maxCol, baddr, count; |