Remember last used folder (#6677)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2023-11-30 03:07:13 -05:00 committed by GitHub
parent ada2314fae
commit d1e96e9952
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 82 additions and 18 deletions

View File

@ -13,10 +13,6 @@ CLASS lcl_gui DEFINITION FINAL.
CLASS-METHODS select_tr_requests
RETURNING
VALUE(rt_trkorr) TYPE trwbo_request_headers.
PRIVATE SECTION.
CLASS-DATA gv_last_folder TYPE string.
ENDCLASS.
CLASS lcl_gui IMPLEMENTATION.
@ -32,13 +28,9 @@ CLASS lcl_gui IMPLEMENTATION.
lo_fe_serv->directory_browse(
EXPORTING
iv_window_title = lv_title
iv_initial_folder = gv_last_folder
CHANGING
cv_selected_folder = rv_folder ).
"Store the last directory for user friendly UI
gv_last_folder = rv_folder.
ENDMETHOD.
METHOD open_folder_frontend.

View File

@ -2,12 +2,20 @@ CLASS zcl_abapgit_frontend_services DEFINITION
PUBLIC
CREATE PRIVATE
GLOBAL FRIENDS zcl_abapgit_ui_factory.
PUBLIC SECTION.
INTERFACES zif_abapgit_frontend_services.
PROTECTED SECTION.
PRIVATE SECTION.
CLASS-DATA gv_initial_folder TYPE string.
METHODS get_path_from_fullname
IMPORTING
iv_fullname TYPE string
RETURNING
VALUE(rv_path) TYPE string.
ENDCLASS.
@ -15,6 +23,23 @@ ENDCLASS.
CLASS zcl_abapgit_frontend_services IMPLEMENTATION.
METHOD get_path_from_fullname.
DATA lv_len TYPE i.
FIND FIRST OCCURRENCE OF REGEX '^/(.*/)?' IN iv_fullname MATCH LENGTH lv_len.
IF sy-subrc = 0.
rv_path = iv_fullname(lv_len).
ELSE.
FIND FIRST OCCURRENCE OF REGEX '^(.*\\)?' IN iv_fullname MATCH LENGTH lv_len.
IF sy-subrc = 0.
rv_path = iv_fullname(lv_len).
ENDIF.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_frontend_services~clipboard_export.
DATA lv_rc TYPE i.
@ -63,10 +88,14 @@ CLASS zcl_abapgit_frontend_services IMPLEMENTATION.
METHOD zif_abapgit_frontend_services~directory_browse.
IF iv_initial_folder IS NOT INITIAL.
gv_initial_folder = iv_initial_folder.
ENDIF.
cl_gui_frontend_services=>directory_browse(
EXPORTING
window_title = iv_window_title
initial_folder = iv_initial_folder
initial_folder = gv_initial_folder
CHANGING
selected_folder = cv_selected_folder
EXCEPTIONS
@ -78,6 +107,8 @@ CLASS zcl_abapgit_frontend_services IMPLEMENTATION.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
gv_initial_folder = cv_selected_folder.
ENDMETHOD.
@ -392,6 +423,7 @@ CLASS zcl_abapgit_frontend_services IMPLEMENTATION.
window_title = iv_title
default_filename = iv_default_filename
file_filter = lv_filter
initial_directory = gv_initial_folder
CHANGING
file_table = lt_file_table
rc = lv_rc
@ -413,6 +445,8 @@ CLASS zcl_abapgit_frontend_services IMPLEMENTATION.
ASSERT sy-subrc = 0.
rv_path = ls_file_table-filename.
gv_initial_folder = get_path_from_fullname( rv_path ).
ENDMETHOD.
@ -434,6 +468,7 @@ CLASS zcl_abapgit_frontend_services IMPLEMENTATION.
default_extension = iv_extension
default_file_name = iv_default_filename
file_filter = lv_filter
initial_directory = gv_initial_folder
CHANGING
filename = lv_filename
path = lv_path
@ -451,5 +486,7 @@ CLASS zcl_abapgit_frontend_services IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Cancelled' ).
ENDIF.
gv_initial_folder = lv_path.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,41 @@
CLASS ltcl_frontend_services DEFINITION FOR TESTING RISK LEVEL HARMLESS
DURATION SHORT FINAL.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO zcl_abapgit_frontend_services.
METHODS:
setup,
path_windows FOR TESTING,
path_unix FOR TESTING,
no_path FOR TESTING.
ENDCLASS.
CLASS zcl_abapgit_frontend_services DEFINITION LOCAL FRIENDS ltcl_frontend_services.
CLASS ltcl_frontend_services IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_cut.
ENDMETHOD.
METHOD path_windows.
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_path_from_fullname( 'C:\SAPworkdir\hello\world.abap' )
exp = 'C:\SAPworkdir\hello\' ).
ENDMETHOD.
METHOD path_unix.
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_path_from_fullname( '/var/tmp/world.abap' )
exp = '/var/tmp/' ).
ENDMETHOD.
METHOD no_path.
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_path_from_fullname( 'toronto.abap' )
exp = '' ).
ENDMETHOD.
ENDCLASS.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>

View File

@ -50,8 +50,6 @@ CLASS zcl_abapgit_zip DEFINITION
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
CLASS-DATA gv_prev TYPE string .
PRIVATE SECTION.
CLASS-METHODS filename
@ -169,16 +167,11 @@ CLASS zcl_abapgit_zip IMPLEMENTATION.
ENDIF.
lo_frontend_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
lo_frontend_serv->directory_browse(
EXPORTING
iv_initial_folder = gv_prev
CHANGING
cv_selected_folder = lv_folder ).
lo_frontend_serv->directory_browse( CHANGING cv_selected_folder = lv_folder ).
IF lv_folder IS INITIAL.
RAISE EXCEPTION TYPE zcx_abapgit_cancel.
ENDIF.
gv_prev = lv_folder.
lo_frontend_serv->get_file_separator( CHANGING cv_file_separator = lv_sep ).
LOOP AT ls_files_item-files ASSIGNING <ls_file>.