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 | 39 | |
40 | 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 | 42 | static int paste_file(H3270 *hSession) |
64 | 43 | { |
65 | 44 | return lib3270_load(hSession,NULL); |
... | ... | @@ -211,55 +190,6 @@ |
211 | 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 | 194 | .name = "paste-from-file", |
265 | 195 | .type = LIB3270_ACTION_TYPE_FILE, |
... | ... | @@ -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 | 575 | // Test actions |
711 | 576 | // |
712 | 577 | |
... | ... | @@ -751,19 +616,18 @@ |
751 | 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 | 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 | 633 | if(group < (sizeof(activatable)/sizeof(activatable[0]))) { | ... | ... |
src/include/internals.h
... | ... | @@ -353,6 +353,7 @@ struct _h3270 |
353 | 353 | LIB3270_HOST_TYPE host_type; ///< @brief Host type. |
354 | 354 | |
355 | 355 | int selected : 1; ///< @brief Has selected region? |
356 | + int has_copy : 1; ///< @brief Has copy? | |
356 | 357 | int rectsel : 1; ///< @brief Selected region is a rectangle ? |
357 | 358 | int vcontrol : 1; ///< @brief Visible control ? |
358 | 359 | int modified_sel : 1; | ... | ... |
src/include/lib3270.h
... | ... | @@ -1162,7 +1162,22 @@ |
1162 | 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 | 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 | 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 | 398 | errno = 0; |
399 | 399 | if(check_online_session(hSession)) |
... | ... | @@ -402,6 +402,26 @@ LIB3270_EXPORT int lib3270_has_selection(const H3270 *hSession) |
402 | 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 | 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 | 427 | unsigned int r, c, minRow, minCol, maxRow, maxCol, baddr, count; | ... | ... |