REPORT ZDEMO_PICTURE_CONTROL.
* Declarations *****************************************************
CLASS C_REACTION DEFINITION.
PUBLIC SECTION.
METHODS H1 FOR EVENT PICTURE_CLICK OF CL_GUI_PICTURE.
ENDCLASS. "c_reaction DEFINITION
*---------------------------------------------------------------------*
* CLASS c_service DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS C_SERVICE DEFINITION.
PUBLIC SECTION.
CLASS-METHODS GET_PIC_TAB IMPORTING MIME_URL TYPE CSEQUENCE
EXPORTING PIC_TAB TYPE STANDARD TABLE.
ENDCLASS. "c_service DEFINITION
DATA: CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
CONTAINER2 LIKE CONTAINER1,
PICT1 TYPE REF TO CL_GUI_PICTURE,
PICT2 LIKE PICT1,
REACT TYPE REF TO C_REACTION,
EVT_TAB TYPE CNTL_SIMPLE_EVENTS,
EVT_TAB_LINE LIKE LINE OF EVT_TAB,
URL(256) TYPE C.
TYPES PIC_LINE(1022) TYPE X.
DATA PIC_TAB TYPE TABLE OF PIC_LINE.
DATA L_ALIGNMENT TYPE I.
* Reporting events ***************************************************
START-OF-SELECTION.
C_SERVICE=>GET_PIC_TAB(
EXPORTING MIME_URL = '/SAP/BC/fp/graphics/FPsamples/Tatze.bmp'
IMPORTING PIC_TAB = PIC_TAB ).
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
TYPE = 'IMAGE'
SUBTYPE = 'GIF'
TABLES
DATA = PIC_TAB
CHANGING
URL = URL.
CALL SCREEN 100.
* Dialog Modules Output
MODULE STATUS_0100 OUTPUT.
CREATE OBJECT: CONTAINER1 EXPORTING CONTAINER_NAME = 'PICTURE1',
CONTAINER2 EXPORTING CONTAINER_NAME = 'PICTURE2',
PICT1 EXPORTING PARENT = CONTAINER1,
PICT2 EXPORTING PARENT = CONTAINER2,
REACT.
L_ALIGNMENT = CL_GUI_CONTROL=>ALIGN_AT_LEFT +
CL_GUI_CONTROL=>ALIGN_AT_RIGHT +
CL_GUI_CONTROL=>ALIGN_AT_TOP +
CL_GUI_CONTROL=>ALIGN_AT_BOTTOM.
CALL METHOD PICT1->SET_ALIGNMENT
EXPORTING
ALIGNMENT = L_ALIGNMENT.
CALL METHOD PICT1->SET_3D_BORDER
EXPORTING
BORDER = 1.
EVT_TAB_LINE-EVENTID = CL_GUI_PICTURE=>EVENTID_PICTURE_CLICK.
EVT_TAB_LINE-APPL_EVENT = ' '. " System Event!
APPEND EVT_TAB_LINE TO EVT_TAB.
CALL METHOD PICT1->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVT_TAB.
SET HANDLER REACT->H1 FOR PICT1.
CALL METHOD PICT1->LOAD_PICTURE_FROM_URL
EXPORTING
URL = URL
EXCEPTIONS
OTHERS = 4.
SET PF-STATUS 'SCREEN_100'.
ENDMODULE. "status_0100 OUTPUT
* Dialog Modules Output
MODULE CANCEL INPUT.
LEAVE PROGRAM.
ENDMODULE. "cancel INPUT
* CLass Implementations **********************************************
CLASS C_REACTION IMPLEMENTATION.
METHOD H1.
C_SERVICE=>GET_PIC_TAB(
EXPORTING MIME_URL = '/SAP/BC/fp/graphics/FPsamples/eumel.bmp'
IMPORTING PIC_TAB = PIC_TAB ).
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
TYPE = 'IMAGE'
SUBTYPE = 'GIF'
TABLES
DATA = PIC_TAB
CHANGING
URL = URL.
CALL METHOD PICT2->LOAD_PICTURE_FROM_URL
EXPORTING
URL = URL.
ENDMETHOD. "h1
ENDCLASS. "c_reaction IMPLEMENTATION
*
CLASS C_SERVICE IMPLEMENTATION.
METHOD GET_PIC_TAB.
DATA PIC_WA TYPE XSTRING.
DATA LENGTH TYPE I.
DATA MIME_API TYPE REF TO IF_MR_API.
MIME_API = CL_MIME_REPOSITORY_API=>GET_API( ).
MIME_API->GET( EXPORTING I_URL = MIME_URL
IMPORTING E_CONTENT = PIC_WA
EXCEPTIONS OTHERS = 4 ).
IF SY-SUBRC = 4.
RETURN.
ENDIF.
CLEAR PIC_TAB.
LENGTH = XSTRLEN( PIC_WA ).
WHILE LENGTH >= 1022.
APPEND PIC_WA(1022) TO PIC_TAB.
SHIFT PIC_WA BY 1022 PLACES LEFT IN BYTE MODE.
LENGTH = XSTRLEN( PIC_WA ).
ENDWHILE.
IF LENGTH > 0.
APPEND PIC_WA TO PIC_TAB.
ENDIF.
ENDMETHOD. "get_pic_tab
ENDCLASS. "c_service IMPLEMENTATION
* Declarations *****************************************************
CLASS C_REACTION DEFINITION.
PUBLIC SECTION.
METHODS H1 FOR EVENT PICTURE_CLICK OF CL_GUI_PICTURE.
ENDCLASS. "c_reaction DEFINITION
*---------------------------------------------------------------------*
* CLASS c_service DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS C_SERVICE DEFINITION.
PUBLIC SECTION.
CLASS-METHODS GET_PIC_TAB IMPORTING MIME_URL TYPE CSEQUENCE
EXPORTING PIC_TAB TYPE STANDARD TABLE.
ENDCLASS. "c_service DEFINITION
DATA: CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
CONTAINER2 LIKE CONTAINER1,
PICT1 TYPE REF TO CL_GUI_PICTURE,
PICT2 LIKE PICT1,
REACT TYPE REF TO C_REACTION,
EVT_TAB TYPE CNTL_SIMPLE_EVENTS,
EVT_TAB_LINE LIKE LINE OF EVT_TAB,
URL(256) TYPE C.
TYPES PIC_LINE(1022) TYPE X.
DATA PIC_TAB TYPE TABLE OF PIC_LINE.
DATA L_ALIGNMENT TYPE I.
* Reporting events ***************************************************
START-OF-SELECTION.
C_SERVICE=>GET_PIC_TAB(
EXPORTING MIME_URL = '/SAP/BC/fp/graphics/FPsamples/Tatze.bmp'
IMPORTING PIC_TAB = PIC_TAB ).
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
TYPE = 'IMAGE'
SUBTYPE = 'GIF'
TABLES
DATA = PIC_TAB
CHANGING
URL = URL.
CALL SCREEN 100.
* Dialog Modules Output
MODULE STATUS_0100 OUTPUT.
CREATE OBJECT: CONTAINER1 EXPORTING CONTAINER_NAME = 'PICTURE1',
CONTAINER2 EXPORTING CONTAINER_NAME = 'PICTURE2',
PICT1 EXPORTING PARENT = CONTAINER1,
PICT2 EXPORTING PARENT = CONTAINER2,
REACT.
L_ALIGNMENT = CL_GUI_CONTROL=>ALIGN_AT_LEFT +
CL_GUI_CONTROL=>ALIGN_AT_RIGHT +
CL_GUI_CONTROL=>ALIGN_AT_TOP +
CL_GUI_CONTROL=>ALIGN_AT_BOTTOM.
CALL METHOD PICT1->SET_ALIGNMENT
EXPORTING
ALIGNMENT = L_ALIGNMENT.
CALL METHOD PICT1->SET_3D_BORDER
EXPORTING
BORDER = 1.
EVT_TAB_LINE-EVENTID = CL_GUI_PICTURE=>EVENTID_PICTURE_CLICK.
EVT_TAB_LINE-APPL_EVENT = ' '. " System Event!
APPEND EVT_TAB_LINE TO EVT_TAB.
CALL METHOD PICT1->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVT_TAB.
SET HANDLER REACT->H1 FOR PICT1.
CALL METHOD PICT1->LOAD_PICTURE_FROM_URL
EXPORTING
URL = URL
EXCEPTIONS
OTHERS = 4.
SET PF-STATUS 'SCREEN_100'.
ENDMODULE. "status_0100 OUTPUT
* Dialog Modules Output
MODULE CANCEL INPUT.
LEAVE PROGRAM.
ENDMODULE. "cancel INPUT
* CLass Implementations **********************************************
CLASS C_REACTION IMPLEMENTATION.
METHOD H1.
C_SERVICE=>GET_PIC_TAB(
EXPORTING MIME_URL = '/SAP/BC/fp/graphics/FPsamples/eumel.bmp'
IMPORTING PIC_TAB = PIC_TAB ).
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
TYPE = 'IMAGE'
SUBTYPE = 'GIF'
TABLES
DATA = PIC_TAB
CHANGING
URL = URL.
CALL METHOD PICT2->LOAD_PICTURE_FROM_URL
EXPORTING
URL = URL.
ENDMETHOD. "h1
ENDCLASS. "c_reaction IMPLEMENTATION
*
CLASS C_SERVICE IMPLEMENTATION.
METHOD GET_PIC_TAB.
DATA PIC_WA TYPE XSTRING.
DATA LENGTH TYPE I.
DATA MIME_API TYPE REF TO IF_MR_API.
MIME_API = CL_MIME_REPOSITORY_API=>GET_API( ).
MIME_API->GET( EXPORTING I_URL = MIME_URL
IMPORTING E_CONTENT = PIC_WA
EXCEPTIONS OTHERS = 4 ).
IF SY-SUBRC = 4.
RETURN.
ENDIF.
CLEAR PIC_TAB.
LENGTH = XSTRLEN( PIC_WA ).
WHILE LENGTH >= 1022.
APPEND PIC_WA(1022) TO PIC_TAB.
SHIFT PIC_WA BY 1022 PLACES LEFT IN BYTE MODE.
LENGTH = XSTRLEN( PIC_WA ).
ENDWHILE.
IF LENGTH > 0.
APPEND PIC_WA TO PIC_TAB.
ENDIF.
ENDMETHOD. "get_pic_tab
ENDCLASS. "c_service IMPLEMENTATION