!! Copyright (C) Stichting Deltares, 2005-2014. !! !! 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_QUICKOPEN USE WINTERACTER USE RESOURCE USE MOD_UTL, ONLY : UTL_IMODFILLMENU,LISTNAME,UTL_DIRINFO,ITOS,UTL_IDFGETDATE,UTL_GETUNIQUE_CHAR,UTL_IDFGETLAYERS USE MOD_PREF_PAR, ONLY : PREFVAL USE IMOD, ONLY : IDFINIT USE MODPLOT, ONLY : MPW USE MOD_SCENTOOL_PAR, ONLY : SCFFNAME CHARACTER(LEN=256),PRIVATE :: ROOT CHARACTER(LEN=50),PRIVATE :: VARIANT,CTYPE,CPERIOD CHARACTER(LEN=50),DIMENSION(:),ALLOCATABLE,PRIVATE :: CLAY INTEGER,DIMENSION(:),ALLOCATABLE,PRIVATE :: ILAY CONTAINS !###====================================================================== SUBROUTINE IDFQUICKOPEN_INIT(N,FOLDER) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: N CHARACTER(LEN=*),DIMENSION(N) :: FOLDER CALL WINDOWSELECT(0) IF(WMENUGETSTATE(ID_QUICKOPEN,2).EQ.1)THEN CALL IDFQUICKOPEN_CLOSE() RETURN ENDIF CALL WMENUSETSTATE(ID_QUICKOPEN,2,1) CALL WDIALOGLOAD(ID_DQUICKOPEN,ID_DQUICKOPEN) CALL WDIALOGPUTMENU(IDF_MENU1,FOLDER,N,1) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,1) CALL IDFQUICKOPEN_UPDATE(IDF_MENU1) CALL WDIALOGFIELDSTATE(IDOK,2) CALL WDIALOGSHOW(-1,-1,0,2) END SUBROUTINE IDFQUICKOPEN_INIT !###====================================================================== SUBROUTINE IDFQUICKOPEN_CLOSE() !###====================================================================== IMPLICIT NONE IF(ALLOCATED(CLAY))DEALLOCATE(CLAY) IF(ALLOCATED(ILAY))DEALLOCATE(ILAY) CALL WINDOWSELECT(0) CALL WMENUSETSTATE(ID_QUICKOPEN,2,0) CALL WDIALOGSELECT(ID_DQUICKOPEN) CALL WDIALOGUNLOAD() END SUBROUTINE IDFQUICKOPEN_CLOSE !###====================================================================== SUBROUTINE IDFQUICKOPEN_MAIN(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ITYPE TYPE(WIN_MESSAGE),INTENT(IN) :: MESSAGE INTEGER :: I LOGICAL :: LPLOT SELECT CASE (ITYPE) CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (IDOK) CALL WDIALOGSELECT(ID_DQUICKOPEN) CALL WDIALOGGETMENU(IDF_MENU5,ILAY) CALL WDIALOGGETCHECKBOX(IDF_CHECK1,I) LPLOT=I.EQ.1 DO I=1,SIZE(ILAY) IF(ILAY(I).EQ.1)THEN CALL IDFINIT(TRIM(ROOT) //'\'// & TRIM(VARIANT)//'\'// & TRIM(CTYPE) //'\'// & TRIM(CTYPE)//'_'//TRIM(CPERIOD)//'_L'//TRIM(CLAY(I))//'.IDF', & LPLOT=LPLOT) ENDIF END DO CALL WDIALOGSELECT(ID_DQUICKOPEN) CALL WDIALOGGETCHECKBOX(IDF_CHECK2,I) IF(I.EQ.1)THEN CALL IDFZOOM(ID_ZOOMFULLMAP,(MPW%XMAX+MPW%XMIN)/2.0,(MPW%YMAX+MPW%YMIN)/2.0,0) CALL IDFPLOTFAST(1) ENDIF CASE (IDHELP) CALL IMODGETHELP('3.4.2','MMO.QuickOpen') CASE (IDCANCEL) CALL IDFQUICKOPEN_CLOSE() END SELECT CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) CASE (IDF_MENU1,IDF_MENU2,IDF_MENU3,IDF_MENU4) CALL IDFQUICKOPEN_UPDATE(MESSAGE%VALUE2) CASE (IDF_MENU5) CALL WDIALOGGETMENU(IDF_MENU5,ILAY) CALL WDIALOGFIELDSTATE(IDOK,MIN(1,SUM(ILAY))) END SELECT END SELECT END SUBROUTINE IDFQUICKOPEN_MAIN !###====================================================================== SUBROUTINE IDFQUICKOPEN_UPDATE(IDMENU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: IDMENU INTEGER :: I CALL WDIALOGSELECT(ID_DQUICKOPEN) I=IDMENU IF(I.EQ.IDF_MENU1)THEN IF(IDFQUICKOPEN_MENU2().GT.0)I=IDF_MENU2 ENDIF IF(I.EQ.IDF_MENU2)THEN IF(IDFQUICKOPEN_MENU3().GT.0)I=IDF_MENU3 ENDIF IF(I.EQ.IDF_MENU3)THEN IF(IDFQUICKOPEN_MENU4().GT.0)I=IDF_MENU4 ENDIF IF(I.EQ.IDF_MENU4)THEN IF(IDFQUICKOPEN_MENU5().GT.0)I=IDF_MENU5 ENDIF !## grey out IF(I.EQ.IDF_MENU1)THEN I=IDF_MENU2 CALL WDIALOGCLEARFIELD(I) CALL WDIALOGFIELDSTATE(I,0) ENDIF IF(I.EQ.IDF_MENU2)THEN I=IDF_MENU3 CALL WDIALOGCLEARFIELD(I) CALL WDIALOGFIELDSTATE(I,0) ENDIF IF(I.EQ.IDF_MENU3)THEN I=IDF_MENU4 CALL WDIALOGCLEARFIELD(I) CALL WDIALOGFIELDSTATE(I,0) ENDIF IF(I.EQ.IDF_MENU4)THEN I=IDF_MENU5 CALL WDIALOGCLEARFIELD(I) CALL WDIALOGFIELDSTATE(I,0) ENDIF END SUBROUTINE IDFQUICKOPEN_UPDATE !###====================================================================== INTEGER FUNCTION IDFQUICKOPEN_MENU2() !###====================================================================== IMPLICIT NONE INTEGER :: I CHARACTER(LEN=50) :: FOLDER IDFQUICKOPEN_MENU2=0 CALL WDIALOGGETMENU(IDF_MENU1,I,FOLDER) SELECT CASE (FOLDER) CASE ('MODELS','SCENARIOS') !## models/scenarios ROOT=TRIM(PREFVAL(1))//'\'//TRIM(FOLDER) CASE ('SCENTOOL') !## scentool ROOT=SCFFNAME(:INDEX(SCFFNAME,'.',.TRUE.)-1) CALL WDIALOGFIELDSTATE(IDF_MENU1,0) END SELECT IF(TRIM(ROOT).NE.'')CALL UTL_IMODFILLMENU(IDF_MENU2,TRIM(ROOT),'*','D',IDFQUICKOPEN_MENU2,0,0) END FUNCTION IDFQUICKOPEN_MENU2 !###====================================================================== INTEGER FUNCTION IDFQUICKOPEN_MENU3() !###====================================================================== IMPLICIT NONE INTEGER :: I IDFQUICKOPEN_MENU3=0 CALL WDIALOGGETMENU(IDF_MENU2,I,VARIANT) CALL UTL_IMODFILLMENU(IDF_MENU3,TRIM(ROOT)//'\'//TRIM(VARIANT),'*','D',IDFQUICKOPEN_MENU3,0,0) END FUNCTION IDFQUICKOPEN_MENU3 !###====================================================================== INTEGER FUNCTION IDFQUICKOPEN_MENU4() !###====================================================================== IMPLICIT NONE INTEGER :: I,I1,I2 CHARACTER(LEN=50),ALLOCATABLE,DIMENSION(:) :: CH IDFQUICKOPEN_MENU4=0 CALL WDIALOGGETMENU(IDF_MENU3,I,CTYPE) CALL IOSDIRENTRYTYPE('F') CALL IOSDIRCOUNT(TRIM(ROOT)//'\'//TRIM(VARIANT)//'\'//TRIM(CTYPE),TRIM(CTYPE)//'_*_l*.idf',& IDFQUICKOPEN_MENU4) IF(IDFQUICKOPEN_MENU4.EQ.0)RETURN IF(ALLOCATED(LISTNAME))DEALLOCATE(LISTNAME) ALLOCATE(LISTNAME(IDFQUICKOPEN_MENU4)) CALL UTL_DIRINFO(TRIM(ROOT)//'\'//TRIM(VARIANT)//'\'//TRIM(CTYPE),TRIM(CTYPE)//'_*_l*.idf',& LISTNAME,IDFQUICKOPEN_MENU4,'F') IF(ALLOCATED(CH))DEALLOCATE(CH) ALLOCATE(CH(IDFQUICKOPEN_MENU4)) !## get unique values DO I=1,IDFQUICKOPEN_MENU4 I1=INDEX(LISTNAME(I),'_',.FALSE.) I2=INDEX(LISTNAME(I),'_',.TRUE.) CH(I)=LISTNAME(I)(I1+1:I2-1) ENDDO CALL UTL_GETUNIQUE_CHAR(CH,IDFQUICKOPEN_MENU4,I) !## number of unique values IDFQUICKOPEN_MENU4=I CALL WDIALOGFIELDSTATE(IDF_MENU4,1) CALL WDIALOGPUTMENU(IDF_MENU4,CH,IDFQUICKOPEN_MENU4,1) IF(ALLOCATED(CH))DEALLOCATE(CH) END FUNCTION IDFQUICKOPEN_MENU4 !###====================================================================== INTEGER FUNCTION IDFQUICKOPEN_MENU5() !###====================================================================== IMPLICIT NONE INTEGER,PARAMETER :: LDIM=250 INTEGER :: I IDFQUICKOPEN_MENU5=0 CALL WDIALOGGETMENU(IDF_MENU4,I,CPERIOD) CALL IOSDIRENTRYTYPE('F') CALL IOSDIRCOUNT(TRIM(ROOT)//'\'//TRIM(VARIANT)//'\'//TRIM(CTYPE),TRIM(CTYPE)//'_'//TRIM(CPERIOD)//'_l*.idf',& IDFQUICKOPEN_MENU5) IF(IDFQUICKOPEN_MENU5.EQ.0)RETURN IF(ALLOCATED(LISTNAME))DEALLOCATE(LISTNAME) ALLOCATE(LISTNAME(IDFQUICKOPEN_MENU5)) CALL UTL_DIRINFO(TRIM(ROOT)//'\'//TRIM(VARIANT)//'\'//TRIM(CTYPE),TRIM(CTYPE)//'_'//TRIM(CPERIOD)//'_l*.idf',& LISTNAME,IDFQUICKOPEN_MENU5,'F') IF(ALLOCATED(ILAY))DEALLOCATE(ILAY) ALLOCATE(ILAY(LDIM)) CALL UTL_IDFGETLAYERS(LISTNAME,IDFQUICKOPEN_MENU5,ILAY,LDIM) IDFQUICKOPEN_MENU5=SUM(ILAY) IF(ALLOCATED(CLAY))DEALLOCATE(CLAY) ALLOCATE(CLAY(IDFQUICKOPEN_MENU5)) IDFQUICKOPEN_MENU5=0 DO I=1,LDIM IF(ILAY(I).EQ.1)THEN IDFQUICKOPEN_MENU5=IDFQUICKOPEN_MENU5+1 CLAY(IDFQUICKOPEN_MENU5)=TRIM(ITOS(I)) ENDIF END DO IF(ALLOCATED(ILAY))DEALLOCATE(ILAY) ALLOCATE(ILAY(IDFQUICKOPEN_MENU5)) ILAY=0 CALL WDIALOGFIELDSTATE(IDF_MENU5,1) CALL WDIALOGPUTMENU(IDF_MENU5,CLAY,IDFQUICKOPEN_MENU5,ILAY) CALL WDIALOGFIELDSTATE(IDOK,0) END FUNCTION IDFQUICKOPEN_MENU5 END MODULE MOD_QUICKOPEN