!! Copyright (C) Stichting Deltares, 2005-2020.
!!
!! This file is part of iMOD.
!!
!! This program is free software: you can redistribute it and/or modify
!! it under the terms of the GNU General Public License as published by
!! the Free Software Foundation, either version 3 of the License, or
!! (at your option) any later version.
!!
!! This program is distributed in the hope that it will be useful,
!! but WITHOUT ANY WARRANTY; without even the implied warranty of
!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
!! GNU General Public License for more details.
!!
!! You should have received a copy of the GNU General Public License
!! along with this program. If not, see .
!!
!! Contact: imod.support@deltares.nl
!! Stichting Deltares
!! P.O. Box 177
!! 2600 MH Delft, The Netherlands.
!!
MODULE MOD_CREATEIPF
USE WINTERACTER
USE RESOURCE
USE MOD_DBL
USE MOD_IDFPLOT
USE IMODVAR, ONLY : DP_KIND,SP_KIND,IDIAGERROR
USE MOD_POLYGON_PAR
USE MOD_POLYGON_DRAW, ONLY : POLYGON1DRAWSHAPE
USE MOD_POLYGON_UTL, ONLY : POLYGON1CLOSE,POLYGON1INIT,POLYGON1IMAGES,POLYGON1FIELDS,POLYGON_UTL_FILLDATAGRID !POLYGON1SAVELOADSHAPE
USE MOD_POLYGON, ONLY : POLYGON1MAIN,POLYGON1CREATEPOLYGON
USE MODPLOT, ONLY : MPW
USE MOD_UTL, ONLY : ITOS,DBL_IGRINSIDEPOLYGON,UTL_PLOT1BITMAP,UTL_PLOT2BITMAP,UTL_GETHELP
USE MOD_MAIN_UTL
USE MOD_CREATE_UTL
USE MOD_CREATE_UTL
USE MOD_MAIN_UTL
CONTAINS
!###======================================================================
SUBROUTINE CREATEIPF1MAIN(ITYPE,MESSAGE)
!###======================================================================
IMPLICIT NONE
TYPE(WIN_MESSAGE),INTENT(IN) :: MESSAGE
INTEGER,INTENT(IN) :: ITYPE
CHARACTER(LEN=54),DIMENSION(:),ALLOCATABLE :: CNAME
INTEGER :: I
!## check polygon actions
IACTSHAPES=(/1,3,3,3,3,3/)
CALL POLYGON1MAIN(ITYPE,MESSAGE)
IF(ITYPE.EQ.PUSHBUTTON.AND.MESSAGE%VALUE1.EQ.ID_ZOOMSELECT)THEN
CALL IDFZOOM(ID_DGOTOXY,0.0D0,0.0D0,0)
CALL IDFPLOT(1)
ENDIF
CALL WDIALOGSELECT(MESSAGE%WIN)
CALL WDIALOGFIELDSTATE(ID_INFO,MIN(1,SHP%NPOL))
SELECT CASE(ITYPE)
CASE(FIELDCHANGED)
SELECT CASE (MESSAGE%VALUE2)
END SELECT
CASE(PUSHBUTTON)
SELECT CASE (MESSAGE%VALUE1)
CASE (ID_INFO)
!## read/show current data from memory!
CALL POLYGON_UTL_FILLDATAGRID()
ALLOCATE(CNAME(SHP%NPOL))
DO I=1,SIZE(CNAME)
IF(TRIM(SHP%POL(I)%PNAME).EQ.'')THEN
CNAME(I)=''
ELSE
CNAME(I)=TRIM(SHP%POL(I)%PNAME)
ENDIF
ENDDO
CALL WDIALOGPUTMENU(IDF_MENU1,CNAME,SHP%NPOL,SHP%POL%IACT)
DEALLOCATE(CNAME)
CASE (ID_SELECTPOLYGON)
CALL CREATEIPF_SELECTPOLYGON()
CALL IDFPLOTFAST(1)
CASE (IDHELP)
CALL UTL_GETHELP('3.2.2','EMO.CreateGEN')
CASE (IDCANCEL)
CALL CREATEIPF1CLOSE()
END SELECT
END SELECT
END SUBROUTINE
!###====================================================================
SUBROUTINE CREATEIPF_SELECTPOLYGON()
!###====================================================================
IMPLICIT NONE
INTEGER,PARAMETER :: MAXPOL=500
REAL(KIND=DP_KIND),ALLOCATABLE,DIMENSION(:) :: XPOL,YPOL
REAL(KIND=DP_KIND) :: X,Y
INTEGER :: NPOL,I,J,N
ALLOCATE(XPOL(MAXPOL),YPOL(MAXPOL))
CALL POLYGON1CREATEPOLYGON(XPOL,YPOL,MAXPOL,NPOL)
!## correct polygon specified
IF(NPOL.GT.0)THEN
!## get lines completely within polygon
SHP%POL%IACT=0
DO I=1,SHP%NPOL
!## count number of points within polygon
N=0; DO J=1,SHP%POL(I)%N
X=SHP%POL(I)%X(J); Y=SHP%POL(I)%Y(J)
IF(MPW%XMIN.LE.X.AND.MPW%XMAX.GE.X.AND.MPW%YMIN.LE.Y.AND.MPW%YMAX.GE.Y)THEN
IF(DBL_IGRINSIDEPOLYGON(X,Y,XPOL,YPOL,NPOL).NE.1)EXIT
N=N+1
ENDIF
ENDDO
IF(N.EQ.SHP%POL(I)%N)SHP%POL(I)%IACT=1
ENDDO
ENDIF
DEALLOCATE(XPOL,YPOL)
CALL WCURSORSHAPE(CURARROW); CALL IGRPLOTMODE(MODECOPY); CALL IGRFILLPATTERN(OUTLINE)
CALL WDIALOGSELECT(ID_DCREATEIPF)
CALL WDIALOGPUTMENU(IDF_MENU1,SHP%POL%PNAME,SHP%NPOL,SHP%POL%IACT)
END SUBROUTINE CREATEIPF_SELECTPOLYGON
!###======================================================================
SUBROUTINE CREATEIPF1INIT()
!###======================================================================
IMPLICIT NONE
CALL WINDOWSELECT(0)
IF(WMENUGETSTATE(ID_CREATEIPF,2).EQ.1)THEN
CALL CREATEIPF1CLOSE()
RETURN
ENDIF
CALL MAIN_UTL_INACTMODULE(ID_CREATEIPF)
!## other module no closed, no approvement given
IF(IDIAGERROR.EQ.1)RETURN
CALL WMENUSETSTATE(ID_CREATEIPF,2,1)
CALL WDIALOGLOAD(ID_DCREATEIPF,ID_DCREATEIPF)
CALL POLYGON1INIT()
CALL POLYGON1IMAGES(ID_DCREATEIPF)
CALL POLYGON1FIELDS(ID_DCREATEIPF)
CALL WDIALOGPUTIMAGE(ID_INFO,ID_ICONINFO)
! CALL WDIALOGPUTIMAGE(ID_SAVE,ID_ICONSAVE)
CALL WDIALOGFIELDSTATE(ID_INFO,0)
! CALL WDIALOGFIELDSTATE(ID_SAVE,0)
CALL WDIALOGSELECT(ID_DCREATEIPF); CALL UTL_DIALOGSHOW(-1,-1,0,2)
END SUBROUTINE CREATEIPF1INIT
END MODULE MOD_CREATEIPF