diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 4ecc74b25..a9cee3b0b 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -171,6 +171,7 @@ CONSTANTS: BEGIN OF gc_action, repo_toggle_fav TYPE string VALUE 'repo_toggle_fav', abapgit_home TYPE string VALUE 'abapgit_home', + abapgit_wiki TYPE string VALUE 'abapgit_wiki', abapgit_install TYPE string VALUE 'abapgit_install', zip_import TYPE string VALUE 'zip_import', @@ -203,6 +204,8 @@ CONSTANTS: BEGIN OF gc_action, go_branch_overview TYPE string VALUE 'go_branch_overview', go_playground TYPE string VALUE 'go_playground', go_debuginfo TYPE string VALUE 'go_debuginfo', - go_settings type string value 'go_settings', + go_settings TYPE STRING VALUE 'go_settings', + go_tutorial TYPE STRING VALUE 'go_tutorial', jump TYPE string VALUE 'jump', + jump_pkg TYPE string VALUE 'jump_pkg', END OF gc_action. \ No newline at end of file diff --git a/src/zabapgit_gui_pages.prog.abap b/src/zabapgit_gui_pages.prog.abap index 255a32c09..24423c52d 100644 --- a/src/zabapgit_gui_pages.prog.abap +++ b/src/zabapgit_gui_pages.prog.abap @@ -13,6 +13,7 @@ INCLUDE zabapgit_repo_browser_util. * Components and templates INCLUDE zabapgit_view_repo. +INCLUDE zabapgit_view_tutorial. * Pages INCLUDE zabapgit_page_commit. diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index e148953cb..8f8f05fdb 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -96,15 +96,22 @@ CLASS lcl_gui_router IMPLEMENTATION. WHEN gc_action-go_playground. " Create playground page ei_page = get_page_playground( ). ev_state = gc_event_state-new_page. + WHEN gc_action-go_tutorial. " Go to tutorial + lcl_app=>user( )->set_repo_show( '' ). " Clear show_id + ev_state = gc_event_state-re_render. " Assume we are on main page " SAP GUI actions - WHEN gc_action-jump. + WHEN gc_action-jump. " Open object editor lcl_html_action_utils=>jump_decode( EXPORTING iv_string = iv_getdata IMPORTING ev_obj_type = ls_item-obj_type ev_obj_name = ls_item-obj_name ). lcl_objects=>jump( ls_item ). ev_state = gc_event_state-no_more_act. + WHEN gc_action-jump_pkg. " Open SE80 + lcl_services_repo=>open_se80( |{ iv_getdata }| ). + ev_state = gc_event_state-no_more_act. + " DB actions WHEN gc_action-db_display OR gc_action-db_edit. " DB Display/Edit ei_page = get_page_db_by_name( iv_name = iv_action iv_getdata = iv_getdata ). @@ -125,6 +132,9 @@ CLASS lcl_gui_router IMPLEMENTATION. WHEN gc_action-abapgit_home. " Go abapGit homepage lcl_services_abapgit=>open_abapgit_homepage( ). ev_state = gc_event_state-no_more_act. + WHEN gc_action-abapgit_wiki. " Go abapGit wikipage + lcl_services_abapgit=>open_abapgit_wikipage( ). + ev_state = gc_event_state-no_more_act. WHEN gc_action-abapgit_install. " Install abapGit lcl_services_abapgit=>install_abapgit( ). ev_state = gc_event_state-re_render. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 8d99436c1..0f5d31f6f 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -137,7 +137,10 @@ CLASS lcl_gui_page_super IMPLEMENTATION. IF iv_show_package = abap_true. ro_html->add( '' ). - ro_html->add( |{ io_repo->get_package( ) }| ). + ro_html->add( '' ). + ro_html->add_anchor( iv_txt = io_repo->get_package( ) + iv_act = |{ gc_action-jump_pkg }?{ io_repo->get_package( ) }| ). + ro_html->add( '' ). ENDIF. ro_html->add( '' ). diff --git a/src/zabapgit_page_debug.prog.abap b/src/zabapgit_page_debug.prog.abap index 151ca4017..e7bd0446a 100644 --- a/src/zabapgit_page_debug.prog.abap +++ b/src/zabapgit_page_debug.prog.abap @@ -6,10 +6,9 @@ CLASS lcl_gui_page_debuginfo DEFINITION FINAL INHERITING FROM lcl_gui_page_super PUBLIC SECTION. METHODS lif_gui_page~render REDEFINITION. + PRIVATE SECTION. METHODS scripts RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - - PRIVATE SECTION. METHODS render_debug_info RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. METHODS render_supported_object_types diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index a294c53a8..934a69cb1 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -114,9 +114,10 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD lif_gui_page~render. - DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt, - lx_error TYPE REF TO lcx_exception, - lo_repo LIKE LINE OF lt_repos. + DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt, + lx_error TYPE REF TO lcx_exception, + lo_tutorial TYPE REF TO lcl_gui_view_tutorial, + lo_repo LIKE LINE OF lt_repos. retrieve_active_repo( ). " Get and validate key of user default repo @@ -137,8 +138,13 @@ CLASS lcl_gui_page_main IMPLEMENTATION. IF lines( lt_repos ) = 0 AND lx_error IS INITIAL. ro_html->add( render_explore( ) ). ELSE. - lo_repo = lcl_app=>repo_srv( )->get( mv_show ). - ro_html->add( render_repo( lo_repo ) ). + IF mv_show IS INITIAL. + CREATE OBJECT lo_tutorial. + ro_html->add( lo_tutorial->lif_gui_page~render( ) ). + ELSE. + lo_repo = lcl_app=>repo_srv( )->get( mv_show ). + ro_html->add( render_repo( lo_repo ) ). + ENDIF. ENDIF. ro_html->add( footer( ) ). @@ -165,17 +171,10 @@ CLASS lcl_gui_page_main IMPLEMENTATION. lo_repo = lcl_app=>repo_srv( )->get( mv_show ). CATCH lcx_exception. CLEAR mv_show. + lcl_app=>user( )->set_repo_show( mv_show ). ENDTRY. ENDIF. - IF mv_show IS INITIAL. " Fall back to first available repo - READ TABLE lt_repos INTO lo_repo INDEX 1. - IF sy-subrc = 0. - mv_show = lo_repo->get_key( ). - lcl_app=>user( )->set_repo_show( mv_show ). - ENDIF. - ENDIF. - IF lv_show_old <> mv_show AND NOT mv_show IS INITIAL. CREATE OBJECT mo_repo_content EXPORTING @@ -186,20 +185,25 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD build_main_menu. - DATA lo_betasub TYPE REF TO lcl_html_toolbar. + DATA: lo_advsub TYPE REF TO lcl_html_toolbar, + lo_helpsub TYPE REF TO lcl_html_toolbar. CREATE OBJECT ro_menu. - CREATE OBJECT lo_betasub. + CREATE OBJECT lo_advsub. + CREATE OBJECT lo_helpsub. - lo_betasub->add( iv_txt = 'Database util' iv_act = gc_action-go_db ) ##NO_TEXT. - lo_betasub->add( iv_txt = 'Package to zip' iv_act = gc_action-zip_package ) ##NO_TEXT. - lo_betasub->add( iv_txt = 'Transport to zip' iv_act = gc_action-zip_transport ) ##NO_TEXT. - lo_betasub->add( iv_txt = 'Object to files' iv_act = gc_action-zip_object ) ##NO_TEXT. - lo_betasub->add( iv_txt = 'Test changed by' iv_act = c_actions-changed_by ) ##NO_TEXT. - lo_betasub->add( iv_txt = 'Page playground' iv_act = gc_action-go_playground ) ##NO_TEXT. - lo_betasub->add( iv_txt = 'Debug info' iv_act = gc_action-go_debuginfo ) ##NO_TEXT. - lo_betasub->add( iv_txt = 'Settings' iv_act = gc_action-go_settings ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Database util' iv_act = gc_action-go_db ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Package to zip' iv_act = gc_action-zip_package ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Transport to zip' iv_act = gc_action-zip_transport ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Object to files' iv_act = gc_action-zip_object ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Test changed by' iv_act = c_actions-changed_by ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Page playground' iv_act = gc_action-go_playground ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Debug info' iv_act = gc_action-go_debuginfo ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Settings' iv_act = gc_action-go_settings ) ##NO_TEXT. + + lo_helpsub->add( iv_txt = 'Tutorial' iv_act = gc_action-go_tutorial ) ##NO_TEXT. + lo_helpsub->add( iv_txt = 'abapGit wiki' iv_act = gc_action-abapgit_wiki ) ##NO_TEXT. ro_menu->add( iv_txt = 'Clone' iv_act = gc_action-repo_clone ) ##NO_TEXT. ro_menu->add( iv_txt = 'Explore' iv_act = gc_action-go_explore ) ##NO_TEXT. @@ -207,7 +211,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION. IF lcl_services_abapgit=>needs_installation( ) = abap_true. ro_menu->add( iv_txt = 'Get abapGit' iv_act = gc_action-abapgit_install ) ##NO_TEXT. ENDIF. - ro_menu->add( iv_txt = 'Advanced' io_sub = lo_betasub ) ##NO_TEXT. + ro_menu->add( iv_txt = 'Advanced' io_sub = lo_advsub ) ##NO_TEXT. + ro_menu->add( iv_txt = 'Help' io_sub = lo_helpsub ) ##NO_TEXT. ENDMETHOD. "build main_menu @@ -285,9 +290,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION. IF lo_favbar->count( ) > 0. ro_html->add( lo_favbar->render( iv_sort = abap_true ) ). ELSE. - ro_html->add( 'No favorites found. Please' - && ' click icon repo toolbar to add' - && ' it as favourite. Choose a repo there →' ). + ro_html->add( `No favorites so far. For more info please check ` ). + ro_html->add_anchor( iv_txt = 'tutorial' iv_act = gc_action-go_tutorial ). + ro_html->add( '' ). ENDIF. ro_html->add( '' ). diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap index a81637801..4f11a9d5c 100644 --- a/src/zabapgit_page_settings.prog.abap +++ b/src/zabapgit_page_settings.prog.abap @@ -3,14 +3,22 @@ *&---------------------------------------------------------------------* CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page_super. + PUBLIC SECTION. + METHODS lif_gui_page~render REDEFINITION. METHODS lif_gui_page~on_event REDEFINITION. CONSTANTS: BEGIN OF c_action, save_settings TYPE string VALUE 'save_settings', END OF c_action. + PRIVATE SECTION. + + DATA: + mo_settings TYPE REF TO lcl_settings, + mv_error TYPE abap_bool. + METHODS render_proxy RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. METHODS render_development_internals @@ -32,14 +40,13 @@ CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page_super. RAISING lcx_exception. METHODS read_settings. - DATA: - mo_settings TYPE REF TO lcl_settings, - mv_error TYPE abap_bool. + ENDCLASS. CLASS lcl_gui_page_settings IMPLEMENTATION. METHOD lif_gui_page~render. + CREATE OBJECT ro_html. read_settings( ). @@ -52,10 +59,15 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ro_html->add( |
| ). ro_html->add( render_development_internals( ) ). ro_html->add( render_form_end( ) ). + + ro_html->add( footer( ) ). + ENDMETHOD. METHOD render_proxy. + CREATE OBJECT ro_html. + ro_html->add( |

Proxy

| ). ro_html->add( || ). ro_html->add( |
| ). @@ -66,11 +78,14 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ro_html->add( `` ). ro_html->add( |
| ). ro_html->add( |
| ). + ENDMETHOD. METHOD lif_gui_page~on_event. + DATA: lt_post_fields TYPE tihttpnvp. + CASE iv_action. WHEN c_action-save_settings. lt_post_fields = parse_post( it_postdata ). @@ -86,10 +101,12 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ev_state = gc_event_state-go_back. ENDCASE. + ENDMETHOD. METHOD build_settings. + DATA ls_post_field TYPE ihttpnvp. CREATE OBJECT mo_settings. @@ -111,22 +128,27 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ELSE. mo_settings->set_run_critical_tests( abap_false ). ENDIF. + ENDMETHOD. METHOD validate_settings. + IF ( mo_settings->get_proxy_url( ) IS NOT INITIAL AND mo_settings->get_proxy_port( ) IS INITIAL ) OR ( mo_settings->get_proxy_url( ) IS INITIAL AND mo_settings->get_proxy_port( ) IS NOT INITIAL ). MESSAGE 'If specifying proxy, specify both URL and port' TYPE 'W'. ENDIF. + ENDMETHOD. METHOD parse_post. + DATA lv_serialized_post_data TYPE string. CONCATENATE LINES OF it_postdata INTO lv_serialized_post_data. rt_post_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_serialized_post_data ). + ENDMETHOD. @@ -141,36 +163,47 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ENDMETHOD. METHOD render_form_begin. + CREATE OBJECT ro_html. ro_html->add( '
' ). ro_html->add( `
` ). + ENDMETHOD. METHOD render_form_end. + CREATE OBJECT ro_html. ro_html->add( '' ). ro_html->add( '
' ). ro_html->add( '
' ). + ENDMETHOD. METHOD read_settings. + DATA lo_settings_persistence TYPE REF TO lcl_persistence_settings. + lo_settings_persistence = lcl_app=>settings( ). mo_settings = lo_settings_persistence->read( ). + ENDMETHOD. METHOD render_development_internals. + DATA lv_checked TYPE string. + IF mo_settings->get_run_critical_tests( ) = abap_true. lv_checked = 'checked'. ENDIF. + CREATE OBJECT ro_html. ro_html->add( |

abapGit Development Internals settings

| ). ro_html->add( ` Enable critical unit tests (see LTCL_DANGEROUS)` ). ro_html->add( |
| ). ro_html->add( |
| ). + ENDMETHOD. ENDCLASS. \ No newline at end of file diff --git a/src/zabapgit_services_abapgit.prog.abap b/src/zabapgit_services_abapgit.prog.abap index 98ba52ce8..0b6ce6edf 100644 --- a/src/zabapgit_services_abapgit.prog.abap +++ b/src/zabapgit_services_abapgit.prog.abap @@ -6,6 +6,7 @@ CLASS lcl_services_abapgit DEFINITION FINAL. PUBLIC SECTION. CONSTANTS c_abapgit_homepage TYPE string VALUE 'http://www.abapgit.org' ##NO_TEXT. + CONSTANTS c_abapgit_wikipage TYPE string VALUE 'https://github.com/larshp/abapGit/wiki'. CONSTANTS c_package_abapgit TYPE devclass VALUE '$ABAPGIT'. CONSTANTS c_package_plugins TYPE devclass VALUE '$ABAPGIT_PLUGINS'. CONSTANTS c_abapgit_url TYPE string VALUE 'https://github.com/larshp/abapGit.git'. @@ -14,6 +15,9 @@ CLASS lcl_services_abapgit DEFINITION FINAL. CLASS-METHODS open_abapgit_homepage RAISING lcx_exception. + CLASS-METHODS open_abapgit_wikipage + RAISING lcx_exception. + CLASS-METHODS install_abapgit RAISING lcx_exception lcx_cancel. @@ -35,6 +39,17 @@ CLASS lcl_services_abapgit IMPLEMENTATION. ENDMETHOD. "open_abapgit_homepage + METHOD open_abapgit_wikipage. + + cl_gui_frontend_services=>execute( + EXPORTING document = c_abapgit_wikipage + EXCEPTIONS OTHERS = 1 ). + IF sy-subrc <> 0. + lcx_exception=>raise( 'Opening page in external browser failed.' ). + ENDIF. + + ENDMETHOD. "open_abapgit_wikipage + METHOD install_abapgit. DATA lv_text TYPE c LENGTH 100. diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index eb1e2bfc5..0a4858a85 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -43,6 +43,10 @@ CLASS lcl_services_repo DEFINITION FINAL. IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key RAISING lcx_exception. + CLASS-METHODS open_se80 + IMPORTING iv_package TYPE devclass + RAISING lcx_exception. + ENDCLASS. "lcl_services_repo CLASS lcl_services_repo IMPLEMENTATION. @@ -296,4 +300,16 @@ CLASS lcl_services_repo IMPLEMENTATION. ENDMETHOD. " toggle_favorite. + METHOD open_se80. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + OPERATION = 'SHOW' + IN_NEW_WINDOW = 'X' + OBJECT_NAME = iv_package + OBJECT_TYPE = 'DEVC' + WITH_OBJECTLIST = 'X'. + + ENDMETHOD. " open_se80. + ENDCLASS. "lcl_services_repo \ No newline at end of file diff --git a/src/zabapgit_view_tutorial.prog.abap b/src/zabapgit_view_tutorial.prog.abap new file mode 100644 index 000000000..2dbeabd07 --- /dev/null +++ b/src/zabapgit_view_tutorial.prog.abap @@ -0,0 +1,28 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_PAGE_TUTORIAL +*&---------------------------------------------------------------------* + +CLASS lcl_gui_view_tutorial DEFINITION FINAL INHERITING FROM lcl_gui_page_super. + PUBLIC SECTION. + METHODS lif_gui_page~render REDEFINITION. + + PRIVATE SECTION. + +ENDCLASS. "lcl_gui_view_tutorial + +CLASS lcl_gui_view_tutorial IMPLEMENTATION. + + METHOD lif_gui_page~render. + + CREATE OBJECT ro_html. + + ro_html->add( '
' ). + ro_html->add( 'Tutorial
' ). + ro_html->add( 'To add a repo as favorite' + && ' click icon at repo toolbar.
' ). + ro_html->add( 'To choose a repo press at the favorite bar.
' ). + ro_html->add( '
' ). + + ENDMETHOD. "lif_gui_page~render + +ENDCLASS. "lcl_gui_view_tutorial \ No newline at end of file diff --git a/src/zabapgit_view_tutorial.prog.xml b/src/zabapgit_view_tutorial.prog.xml new file mode 100644 index 000000000..d7ba73043 --- /dev/null +++ b/src/zabapgit_view_tutorial.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_VIEW_TUTORIAL + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_PAGE_TUTORIAL + 30 + + + + + +