!! Copyright (C) Stichting Deltares, 2005-2017. !! !! 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_START USE WINTERACTER USE RESOURCE USE IMODVAR, ONLY : IMFFNAME USE MOD_PREF, ONLY : PREFMAIN USE MOD_PREF_PAR, ONLY : PREFVAL USE MOD_UTL, ONLY : UTL_DIRINFO,UTL_GETUNIT,UTL_DIRINFO_POINTER USE MOD_IR_QPF, ONLY : IR1PRJFILES USE MOD_IR_PAR,ONLY : MAINRESDIR USE MOD_OSD, ONLY : OSD_OPEN USE MOD_PLUGIN, ONLY : PLUGIN_INITMENU_FILL,PLUGIN_SETTIMER CHARACTER(LEN=256),PRIVATE :: DIR CONTAINS !###====================================================================== SUBROUTINE START_MAIN(EXT,IDEXIT) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IDEXIT CHARACTER(LEN=*),INTENT(IN) :: EXT TYPE(WIN_MESSAGE) :: MESSAGE INTEGER :: ITYPE,I CHARACTER(LEN=256) :: IMFFILE,FNAME SELECT CASE (EXT) CASE ('IMF','QPF') CASE DEFAULT CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot initiate start-dialog','Error') IDEXIT=0; RETURN END SELECT CALL START_INIT(EXT) CALL START_FILLMENU(EXT) CALL START_FIELDS() CALL WDIALOGSHOW(-1,-1,0,3) DO CALL WMESSAGE(ITYPE,MESSAGE) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) CASE (IDF_STRING1) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)CALL START_FILLMENU(EXT) CASE (IDF_RADIO1,IDF_RADIO2) CALL START_FIELDS() END SELECT CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) !## get file in editor CASE (ID_DELETE) CALL WDIALOGGETMENU(IDF_MENU1,I,IMFFILE) IF(TRIM(EXT).EQ.'IMF')THEN FNAME=TRIM(PREFVAL(1))//'\IMFILES\'//TRIM(IMFFILE) ELSEIF(TRIM(EXT).EQ.'QPF')THEN FNAME=TRIM(MAINRESDIR)//'\'//TRIM(IMFFILE) ENDIF CALL WMESSAGEBOX(YESNO,QUESTIONICON,COMMONNO,'Are you sure to delete the file:'//CHAR(13)//TRIM(FNAME),'Question') IF(WINFODIALOG(4).EQ.1)THEN CALL IOSDELETEFILE(FNAME) CALL START_FILLMENU(EXT) ENDIF !## get file in editor CASE (ID_INFO) CALL WDIALOGGETMENU(IDF_MENU1,I,IMFFILE) IF(TRIM(EXT).EQ.'IMF')THEN FNAME=TRIM(PREFVAL(1))//'\IMFILES\'//TRIM(IMFFILE) ELSEIF(TRIM(EXT).EQ.'QPF')THEN FNAME=TRIM(MAINRESDIR)//'\'//TRIM(IMFFILE) ENDIF CALL WINDOWOPENCHILD(I,FLAGS=HIDEWINDOW,TITLE='File ') CALL WEDITFILE(FNAME,MODAL,0,0,COURIERNEW,ISIZE=8) CASE (IDHELP) CALL IMODGETHELP('2.1','GS.StartiMOD') CASE (ID_PREFERENCES) IF(TRIM(EXT).EQ.'IMF'.OR.TRIM(EXT).EQ.'QPF')THEN CALL PREFMAIN() IF(TRIM(EXT).EQ.'IMF')THEN DIR=TRIM(PREFVAL(1))//'\IMFILES' ELSEIF(TRIM(EXT).EQ.'QPF')THEN DIR=TRIM(MAINRESDIR) ENDIF CALL START_FILLMENU(EXT) ENDIF !## open different imf CASE (ID_OPEN) CALL WDIALOGUNLOAD() IF(TRIM(EXT).EQ.'IMF')THEN CALL IMODLOADSAVE(ID_OPEN,I) ELSEIF(TRIM(EXT).EQ.'QPF')THEN I=1; IF(.NOT.IR1PRJFILES(ID_OPEN))I=0 ENDIF IF(I.EQ.0)THEN CALL START_INIT(EXT) CALL START_FILLMENU(EXT) CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO2) CALL START_FIELDS() CALL WDIALOGSHOW(-1,-1,0,3) ELSE !## okay IDEXIT=1 EXIT ENDIF CASE (IDCANCEL) !## stopped IDEXIT=0 CALL WDIALOGUNLOAD() EXIT CASE (IDOK) CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,I) IF(I.EQ.2)THEN CALL WDIALOGGETMENU(IDF_MENU1,I,IMFFILE) CALL WDIALOGUNLOAD() IF(TRIM(EXT).EQ.'IMF')THEN IMFFNAME=TRIM(PREFVAL(1))//'\IMFILES\'//TRIM(IMFFILE) CALL IMODLOADIMF() ELSEIF(TRIM(EXT).EQ.'QPF')THEN FNAME=TRIM(MAINRESDIR)//'\'//TRIM(IMFFILE) IF(.NOT.IR1PRJFILES(ID_OPEN,FNAME))THEN ENDIF ENDIF ELSE CALL WDIALOGUNLOAD() IF(PLUGIN_INITMENU_FILL())THEN; ENDIF ENDIF IDEXIT=1 EXIT END SELECT END SELECT END DO END SUBROUTINE START_MAIN !###====================================================================== SUBROUTINE START_INIT(EXT) !###====================================================================== IMPLICIT NONE CHARACTER(LEN=*),INTENT(IN) :: EXT CALL WDIALOGLOAD(ID_DSTART,ID_DSTART) CALL WDIALOGPUTIMAGE(ID_OPEN,ID_ICONOPEN,1) CALL WDIALOGPUTIMAGE(ID_INFO,ID_ICONINFO,1) CALL WDIALOGPUTIMAGE(ID_DELETE,ID_ICONDELETE,1) CALL WDIALOGPUTSTRING(IDF_STRING1,'*') CALL WDIALOGFIELDOPTIONS(IDF_STRING1,EDITFIELDCHANGED,1) IF(PLUGIN_INITMENU_FILL())THEN; ENDIF CALL PLUGIN_SETTIMER() IF(TRIM(EXT).EQ.'IMF')THEN DIR=TRIM(PREFVAL(1))//'\IMFILES' CALL WDIALOGPUTSTRING(IDF_RADIO1,'Create a new iMOD Project') CALL WDIALOGPUTSTRING(IDF_RADIO2,'Open an existing iMOD Project') CALL WDIALOGTITLE('Start iMOD') CALL WDIALOGPUTSTRING(ID_PREFERENCES,'Preferences ...') ELSEIF(TRIM(EXT).EQ.'QPF')THEN DIR=TRIM(MAINRESDIR) CALL WDIALOGPUTSTRING(IDF_RADIO1,'Create a new Quick-Scan Project') CALL WDIALOGPUTSTRING(IDF_RADIO2,'Open an existing Quick-Scan Project') CALL WDIALOGTITLE('Start Quick-Scan Tool') CALL WDIALOGFIELDSTATE(ID_PREFERENCES,3) CALL WDIALOGFIELDSTATE(ID_OPEN,3) CALL WDIALOGPUTSTRING(ID_PREFERENCES,'Preferences ...') ENDIF END SUBROUTINE START_INIT !###====================================================================== SUBROUTINE START_FIELDS() !###====================================================================== IMPLICIT NONE INTEGER :: I CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,I) IF(I.EQ.1)THEN I=2 ELSE I=1 ENDIF CALL WDIALOGFIELDSTATE(IDF_MENU1,I) CALL WDIALOGFIELDSTATE(ID_OPEN,I) CALL WDIALOGFIELDSTATE(ID_INFO,I) CALL WDIALOGFIELDSTATE(ID_DELETE,I) CALL WDIALOGFIELDSTATE(IDF_STRING1,I) IF(I.EQ.2)CALL WDIALOGFIELDSTATE(IDOK,1) END SUBROUTINE START_FIELDS !###====================================================================== SUBROUTINE START_FILLMENU(EXT) !###====================================================================== IMPLICIT NONE CHARACTER(LEN=*),INTENT(IN) :: EXT CHARACTER(LEN=52) :: WC CHARACTER(LEN=256),POINTER,DIMENSION(:) :: LISTNAME LOGICAL :: LEX CALL WDIALOGSELECT(ID_DSTART) CALL WDIALOGGETSTRING(IDF_STRING1,WC) IF(LEN_TRIM(WC).EQ.0)WC='*' IF(INDEX(WC,'.').GT.0)WC=WC(:INDEX(WC,'.',.TRUE.)-1) WC=TRIM(WC)//'.'//TRIM(EXT) LEX=UTL_DIRINFO_POINTER(DIR,WC,LISTNAME,'F') IF(SIZE(LISTNAME).LE.0)LEX=.FALSE. IF(LEX)THEN CALL WDIALOGFIELDSTATE(IDF_MENU1,1) CALL WDIALOGPUTMENU(IDF_MENU1,LISTNAME,SIZE(LISTNAME),1) CALL WDIALOGFIELDSTATE(IDOK,1) ELSE CALL WDIALOGCLEARFIELD(IDF_MENU1) CALL WDIALOGFIELDSTATE(IDOK,0) ENDIF DEALLOCATE(LISTNAME) END SUBROUTINE START_FILLMENU END MODULE