From 0f3372b0bf1d7df0403d0401b55bbba71926ca46 Mon Sep 17 00:00:00 2001 From: sbcgua Date: Sat, 10 Sep 2016 09:20:22 +0300 Subject: [PATCH] #332 gui/pages prev_page attr, replace action --- src/zabapgit_definitions.prog.abap | 1 + src/zabapgit_gui.prog.abap | 44 +++++++++++++++++++++--------- src/zabapgit_gui_router.prog.abap | 11 ++++---- src/zabapgit_page.prog.abap | 11 ++++---- 4 files changed, 44 insertions(+), 23 deletions(-) diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 4d858a2f4..84686f451 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -111,6 +111,7 @@ CONSTANTS: BEGIN OF gc_event_state, no_more_act VALUE 4, new_page_w_bookmark VALUE 5, go_back_to_bookmark VALUE 6, + new_page_replacing VALUE 7, END OF gc_event_state. CONSTANTS: BEGIN OF gc_html_opt, diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index 400aab6ae..6e2094ca4 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -14,7 +14,7 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. METHODS back IMPORTING iv_to_bookmark TYPE abap_bool DEFAULT abap_false - RETURNING VALUE(rv_exit) TYPE xfeld + RETURNING value(rv_exit) TYPE xfeld RAISING lcx_exception. METHODS on_event FOR EVENT sapevent OF cl_gui_html_viewer @@ -45,14 +45,18 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. METHODS cache_html IMPORTING iv_html TYPE string - RETURNING VALUE(rv_url) TYPE w3url. + RETURNING value(rv_url) TYPE w3url. METHODS render RAISING lcx_exception. + METHODS get_current_page_name + RETURNING value(rv_page_name) TYPE string. + METHODS call_page IMPORTING ii_page TYPE REF TO lif_gui_page iv_with_bookmark TYPE abap_bool DEFAULT abap_false + iv_replacing TYPE abap_bool DEFAULT abap_false RAISING lcx_exception. ENDCLASS. "lcl_gui DEFINITION @@ -78,23 +82,25 @@ CLASS lcl_gui IMPLEMENTATION. IF mi_cur_page IS BOUND. mi_cur_page->on_event( EXPORTING - iv_action = action - iv_getdata = getdata - it_postdata = postdata + iv_action = action + iv_prev_page = get_current_page_name( ) + iv_getdata = getdata + it_postdata = postdata IMPORTING - ei_page = li_page - ev_state = lv_state ). + ei_page = li_page + ev_state = lv_state ). ENDIF. IF lv_state IS INITIAL. mo_router->on_event( EXPORTING - iv_action = action - iv_getdata = getdata - it_postdata = postdata + iv_action = action + iv_prev_page = get_current_page_name( ) + iv_getdata = getdata + it_postdata = postdata IMPORTING - ei_page = li_page - ev_state = lv_state ). + ei_page = li_page + ev_state = lv_state ). ENDIF. CASE lv_state. @@ -104,6 +110,8 @@ CLASS lcl_gui IMPLEMENTATION. call_page( li_page ). WHEN gc_event_state-new_page_w_bookmark. call_page( ii_page = li_page iv_with_bookmark = abap_true ). + WHEN gc_event_state-new_page_replacing. + call_page( ii_page = li_page iv_replacing = abap_true ). WHEN gc_event_state-go_back. back( ). WHEN gc_event_state-go_back_to_bookmark. @@ -158,7 +166,7 @@ CLASS lcl_gui IMPLEMENTATION. ls_stack TYPE ty_page_stack. FIELD-SYMBOLS LIKE LINE OF lt_assets. - IF NOT mi_cur_page IS INITIAL. + IF iv_replacing = abap_false AND NOT mi_cur_page IS INITIAL. ls_stack-page = mi_cur_page. ls_stack-bookmark = iv_with_bookmark. APPEND ls_stack TO mt_stack. @@ -270,4 +278,14 @@ CLASS lcl_gui IMPLEMENTATION. ENDMETHOD. "cache_image + METHOD get_current_page_name. + IF mi_cur_page IS BOUND. + rv_page_name = + cl_abap_classdescr=>describe_by_object_ref( mi_cur_page + )->get_relative_name( ). + SHIFT rv_page_name LEFT DELETING LEADING 'LCL_GUI_'. + ENDIF." ELSE - return is empty => initial page + + ENDMETHOD. "get_current_page_name + ENDCLASS. "lcl_gui IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 569f0b184..72792c242 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -9,11 +9,12 @@ CLASS lcl_gui_router DEFINITION FINAL. PUBLIC SECTION. METHODS on_event - IMPORTING iv_action TYPE clike - iv_getdata TYPE clike OPTIONAL - it_postdata TYPE cnht_post_data_tab OPTIONAL - EXPORTING ei_page TYPE REF TO lif_gui_page - ev_state TYPE i + IMPORTING iv_action TYPE clike + iv_prev_page TYPE clike + iv_getdata TYPE clike OPTIONAL + it_postdata TYPE cnht_post_data_tab OPTIONAL + EXPORTING ei_page TYPE REF TO lif_gui_page + ev_state TYPE i RAISING lcx_exception. PRIVATE SECTION. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index f2b70a1a8..c90c08f83 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -8,11 +8,12 @@ INTERFACE lif_gui_page. METHODS on_event - IMPORTING iv_action TYPE clike - iv_getdata TYPE clike OPTIONAL - it_postdata TYPE cnht_post_data_tab OPTIONAL - EXPORTING ei_page TYPE REF TO lif_gui_page - ev_state TYPE i + IMPORTING iv_action TYPE clike + iv_prev_page TYPE clike + iv_getdata TYPE clike OPTIONAL + it_postdata TYPE cnht_post_data_tab OPTIONAL + EXPORTING ei_page TYPE REF TO lif_gui_page + ev_state TYPE i RAISING lcx_exception. METHODS render