From 5057386e2bc6b27306d8b506b13d2f75000afe61 Mon Sep 17 00:00:00 2001 From: Alexander Tsybulsky Date: Sun, 26 Mar 2023 10:28:26 +0300 Subject: [PATCH] Improve pull dialog button logic (#6169) --- .../zcl_abapgit_popups.clas.locals_imp.abap | 163 +++++++++++++----- src/zabapgit.prog.xml | 6 +- 2 files changed, 121 insertions(+), 48 deletions(-) diff --git a/src/ui/zcl_abapgit_popups.clas.locals_imp.abap b/src/ui/zcl_abapgit_popups.clas.locals_imp.abap index 9c99d13e2..c16bc312a 100644 --- a/src/ui/zcl_abapgit_popups.clas.locals_imp.abap +++ b/src/ui/zcl_abapgit_popups.clas.locals_imp.abap @@ -1,11 +1,11 @@ CLASS lcl_object_descision_list DEFINITION FINAL. PUBLIC SECTION. - CONSTANTS c_default_column TYPE abap_componentdescr-name VALUE 'DEFAULT_COLUMN'. + CONSTANTS c_default_column TYPE abap_componentdescr-name VALUE 'DEFAULT_COLUMN'. CONSTANTS c_fieldname_selected TYPE abap_componentdescr-name VALUE 'SELECTED'. CONSTANTS c_answer_cancel TYPE c LENGTH 1 VALUE 'A'. CONSTANTS c_fieldname_obj_type TYPE abap_componentdescr-name VALUE 'OBJ_TYPE'. - CONSTANTS c_own_pfstatus TYPE sy-pfkey VALUE 'DECIDE_DIALOG'. + CONSTANTS c_own_pfstatus TYPE sy-pfkey VALUE 'DECIDE_DIALOG'. METHODS constructor IMPORTING @@ -69,7 +69,7 @@ CLASS lcl_object_descision_list DEFINITION FINAL. cx_salv_msg. METHODS setup_columns IMPORTING - io_columns TYPE REF TO cl_salv_columns_table + io_columns TYPE REF TO cl_salv_columns_table iv_selection_mode TYPE salv_de_constant iv_select_column_text TYPE csequence it_columns_to_display TYPE zif_abapgit_popups=>ty_alv_column_tt @@ -88,7 +88,20 @@ CLASS lcl_object_descision_list DEFINITION FINAL. METHODS mark_all IMPORTING iv_selected TYPE abap_bool. - METHODS mark_visible. + METHODS mark_visible + IMPORTING + iv_selected TYPE abap_bool. + METHODS mark_selected. + METHODS mark_indexed + IMPORTING + iv_selected TYPE abap_bool DEFAULT abap_true + iv_invert TYPE abap_bool DEFAULT abap_false + it_scope TYPE lvc_t_fidx. + METHODS are_all_marked + IMPORTING + it_scope TYPE lvc_t_fidx + RETURNING + VALUE(rv_yes) TYPE abap_bool. ENDCLASS. @@ -374,15 +387,15 @@ CLASS lcl_object_descision_list IMPLEMENTATION. mo_alv->close_screen( ). WHEN 'SALL' OR 'SEL_ALL'. - mark_all( abap_true ). + mark_visible( abap_true ). mo_alv->refresh( ). WHEN 'DSEL' OR 'SEL_DEL'. - mark_all( abap_false ). + mark_visible( abap_false ). mo_alv->refresh( ). WHEN 'SEL_KEY'. - mark_visible( ). + mark_selected( ). mo_alv->refresh( ). WHEN 'SEL_CAT'. @@ -417,13 +430,9 @@ CLASS lcl_object_descision_list IMPLEMENTATION. ENDMETHOD. - METHOD mark_visible. + METHOD are_all_marked. - DATA: - lo_selection TYPE REF TO cl_salv_selections, - lt_filters TYPE lvc_t_filt, - lt_scope TYPE lvc_t_fidx, - lv_index LIKE LINE OF lt_scope. + DATA lv_index LIKE LINE OF it_scope. FIELD-SYMBOLS: TYPE STANDARD TABLE, @@ -433,35 +442,99 @@ CLASS lcl_object_descision_list IMPLEMENTATION. ASSIGN mr_table->* TO . ASSERT sy-subrc = 0. - " First get selection - lo_selection = mo_alv->get_selections( ). - lt_scope = lo_selection->get_selected_rows( ). - - IF lines( lt_scope ) = 0. - " If nothing selected, select all VISIBLE - lt_filters = cl_salv_controller_metadata=>get_lvc_filter( mo_alv->get_filters( ) ). - IF lines( lt_filters ) = 0. - mark_all( abap_true ). " No filters - just select all - RETURN. - ENDIF. - - CALL FUNCTION 'LVC_FILTER_APPLY' - EXPORTING - it_filter = lt_filters - IMPORTING - et_filter_index_inside = lt_scope - TABLES - it_data = . - ENDIF. - - LOOP AT lt_scope INTO lv_index. + LOOP AT it_scope INTO lv_index. READ TABLE ASSIGNING INDEX lv_index. CHECK sy-subrc = 0. ASSIGN COMPONENT c_fieldname_selected OF STRUCTURE TO . ASSERT sy-subrc = 0. - = abap_true. + + IF = abap_true. + rv_yes = abap_true. + ELSE. + rv_yes = abap_false. + RETURN. + ENDIF. + + ENDLOOP. + + ENDMETHOD. + + METHOD mark_selected. + + DATA lt_clear TYPE salv_t_row. + DATA lt_scope TYPE lvc_t_fidx. + + lt_scope = mo_alv->get_selections( )->get_selected_rows( ). + + IF lines( lt_scope ) > 0. + mark_indexed( + it_scope = lt_scope + iv_selected = boolc( are_all_marked( lt_scope ) = abap_false ) ). + mo_alv->get_selections( )->set_selected_rows( lt_clear ). + ELSE. + MESSAGE 'Select rows first to mark them' TYPE 'S'. + ENDIF. + + ENDMETHOD. + + METHOD mark_visible. + + DATA lt_filters TYPE lvc_t_filt. + DATA lt_scope TYPE lvc_t_fidx. + + FIELD-SYMBOLS TYPE STANDARD TABLE. + + ASSIGN mr_table->* TO . + ASSERT sy-subrc = 0. + + " If nothing selected, select all VISIBLE + lt_filters = cl_salv_controller_metadata=>get_lvc_filter( mo_alv->get_filters( ) ). + IF lines( lt_filters ) = 0. + mark_all( iv_selected ). " No filters - just select all + RETURN. + ENDIF. + + CALL FUNCTION 'LVC_FILTER_APPLY' + EXPORTING + it_filter = lt_filters + IMPORTING + et_filter_index_inside = lt_scope + TABLES + it_data = . + + mark_indexed( + it_scope = lt_scope + iv_selected = iv_selected ). + + ENDMETHOD. + + METHOD mark_indexed. + + DATA lv_index LIKE LINE OF it_scope. + + FIELD-SYMBOLS: + TYPE STANDARD TABLE, + TYPE any, + TYPE abap_bool. + + ASSIGN mr_table->* TO . + ASSERT sy-subrc = 0. + + LOOP AT it_scope INTO lv_index. + + READ TABLE ASSIGNING INDEX lv_index. + CHECK sy-subrc = 0. + + ASSIGN COMPONENT c_fieldname_selected OF STRUCTURE TO . + ASSERT sy-subrc = 0. + + IF iv_invert = abap_true. + = boolc( = abap_false ). + ELSE. + = iv_selected. + ENDIF. ENDLOOP. @@ -587,9 +660,9 @@ CLASS lcl_object_descision_list IMPLEMENTATION. METHOD setup_columns. DATA: - lt_columns TYPE salv_t_column_ref, - ls_column TYPE salv_s_column_ref, - lo_column TYPE REF TO cl_salv_column_list. + lt_columns TYPE salv_t_column_ref, + ls_column TYPE salv_s_column_ref, + lo_column TYPE REF TO cl_salv_column_list. FIELD-SYMBOLS TYPE zif_abapgit_popups=>ty_alv_column. @@ -645,12 +718,12 @@ CLASS lcl_object_descision_list IMPLEMENTATION. METHOD setup_toolbar. DATA: - lv_report TYPE sy-repid, - lv_pfstatus TYPE sy-pfkey, - lo_functions TYPE REF TO cl_salv_functions_list, - lt_func_list TYPE salv_t_ui_func, - lv_fn TYPE string, - ls_func LIKE LINE OF lt_func_list. + lv_report TYPE sy-repid, + lv_pfstatus TYPE sy-pfkey, + lo_functions TYPE REF TO cl_salv_functions_list, + lt_func_list TYPE salv_t_ui_func, + lv_fn TYPE string, + ls_func LIKE LINE OF lt_func_list. CALL FUNCTION 'RS_CUA_STATUS_CHECK' EXPORTING diff --git a/src/zabapgit.prog.xml b/src/zabapgit.prog.xml index f9f477c62..7a27030cc 100644 --- a/src/zabapgit.prog.xml +++ b/src/zabapgit.prog.xml @@ -85,7 +85,7 @@ S ICON_SELECT_ALL @4B@ - Select All + Select All Visible SEL_CAT @@ -101,7 +101,7 @@ S ICON_DESELECT_ALL @4D@ - Deselect All + Deselect All Visible SEL_KEY @@ -109,7 +109,7 @@ S ICON_SELECT_BLOCK @4C@ - Mark selected or all visible + Mark/Toggle Selected