!! 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_SETTINGS USE WINTERACTER USE RESOURCE USE MOD_DBL USE MOD_IDFPLOT USE MODPLOT USE MOD_UTL USE MOD_GENPLOT_PAR USE MOD_POLYGON_UTL USE MOD_GENPLOT USE MOD_LEGEND USE MOD_IPF_PAR USE MOD_IPF_LABEL CONTAINS !###==================================================================== SUBROUTINE SETTINGS_MAIN(FNAME) !###==================================================================== IMPLICIT NONE CHARACTER(LEN=*),INTENT(IN),OPTIONAL :: FNAME TYPE(WIN_MESSAGE) :: MESSAGE INTEGER :: ITYPE,IPLOT,IU,NATTRIB,I,IRGB,IOS,IFORMAT,ID LOGICAL :: LIPF,LIFF,LGEN,LISG,LLEG CHARACTER(LEN=20),DIMENSION(:),ALLOCATABLE :: ATTRIB CHARACTER(LEN=11),DIMENSION(:),POINTER :: LABELS CHARACTER(LEN=10) :: CAXES CHARACTER(LEN=256) :: LINE ID=WINFODIALOG(CURRENTDIALOG) !## find fname in mp()iplot IF(PRESENT(FNAME))THEN DO IPLOT=1,MXMPLOT IF(MP(IPLOT)%IDFNAME(INDEX(MP(IPLOT)%IDFNAME,'\',.TRUE.)+1:).EQ.FNAME)EXIT ENDDO ELSE DO IPLOT=1,MXMPLOT; IF(MP(IPLOT)%ISEL)EXIT; ENDDO ENDIF !## not for idf's and mdf's IF(MP(IPLOT)%IPLOT.EQ.1.OR.MP(IPLOT)%IPLOT.EQ.5)RETURN LIPF=.FALSE.; LIFF=.FALSE.; LGEN=.FALSE.; LISG=.FALSE. IF(MP(IPLOT)%IPLOT.EQ.2)LIPF=.TRUE.; IF(MP(IPLOT)%IPLOT.EQ.3)LIFF=.TRUE. IF(MP(IPLOT)%IPLOT.EQ.4)LISG=.TRUE.; IF(MP(IPLOT)%IPLOT.EQ.6)LGEN=.TRUE. IF(LIFF)THEN IU=IFFGETUNIT(MP(IPLOT)%IDFNAME,'OLD') ELSEIF(LIPF)THEN !## clear all ipf-names DO I=1,NIPF IPF(I)%FNAME='' END DO IU=UTL_GETUNITIPF(MP(IPLOT)%IDFNAME,'OLD') ELSEIF(LGEN)THEN !## get labels from gen file IF(POLYGON_UTL_OPENGEN(MP(IPLOT)%IDFNAME,IFORMAT,IU))CALL POLYGON_UTL_GETLABELSGEN(IU,IFORMAT,LABELS) ENDIF IF(LIFF.OR.LIPF)THEN READ(IU,'(A256)',IOSTAT=IOS) LINE READ(LINE,*,IOSTAT=IOS) NATTRIB IF(IOS.NE.0)THEN NATTRIB=UTL_COUNT_COLUMNS(LINE,',;') ALLOCATE(ATTRIB(NATTRIB)) READ(LINE,*) (ATTRIB(I),I=1,NATTRIB) ELSE IF(LIPF)READ(IU,*) NATTRIB ALLOCATE(ATTRIB(NATTRIB)) DO I=1,NATTRIB READ(IU,*) ATTRIB(I) ENDDO ENDIF CLOSE(IU) ELSEIF(LGEN)THEN NATTRIB=SIZE(LABELS) IF(NATTRIB.GT.0)THEN ALLOCATE(ATTRIB(NATTRIB)) ATTRIB=LABELS DEALLOCATE(LABELS) ENDIF ELSEIF(LISG)THEN NATTRIB=1 ALLOCATE(ATTRIB(NATTRIB)) ATTRIB(1)='nothing yet' ENDIF CALL WDIALOGLOAD(ID_DCONFIGURE) IF(LIPF)CALL WDIALOGTITLE('IPF Configure '//TRIM(MP(IPLOT)%ALIAS)) IF(LIFF)CALL WDIALOGTITLE('IFF Configure '//TRIM(MP(IPLOT)%ALIAS)) IF(LISG)CALL WDIALOGTITLE('ISG Configure '//TRIM(MP(IPLOT)%ALIAS)) IF(LGEN)CALL WDIALOGTITLE('GEN Configure '//TRIM(MP(IPLOT)%ALIAS)) IF(MP(IPLOT)%ILEG.EQ.0)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO1) IF(MP(IPLOT)%ILEG.EQ.1)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO2) LLEG=MP(IPLOT)%ILEG.EQ.1 CALL WDIALOGCOLOUR(IDF_STRING1,MP(IPLOT)%SCOLOR,MP(IPLOT)%SCOLOR) IF(MP(IPLOT)%HCOL.GT.0) CALL WDIALOGPUTCHECKBOX(IDF_CHECK5,1) IF(MP(IPLOT)%HCOL.LE.0) CALL WDIALOGPUTCHECKBOX(IDF_CHECK5,0) CALL WDIALOGPUTCHECKBOX(IDF_CHECK3,MP(IPLOT)%FADEOUT) !## fadeout CALL WDIALOGPUTINTEGER(IDF_INTEGER1,MP(IPLOT)%IDFI) !## sight depth IF(NATTRIB.GT.0)THEN CALL WDIALOGPUTMENU(IDF_MENU1,ATTRIB,NATTRIB,MP(IPLOT)%IATTRIB) !## colour-label ELSE CALL WDIALOGCLEARFIELD(IDF_MENU1) !## colour-label CALL WDIALOGFIELDSTATE(IDF_RADIO2,0) CALL WDIALOGFIELDSTATE(ID_LABELING,0) ENDIF IF(MP(IPLOT)%XCOL.LE.0)MP(IPLOT)%XCOL=1 IF(MP(IPLOT)%YCOL.LE.0)MP(IPLOT)%YCOL=2 IF(MP(IPLOT)%ZCOL.LE.0)MP(IPLOT)%ZCOL=3 IF(LIPF)THEN CALL WDIALOGPUTMENU(IDF_MENU3,ATTRIB,NATTRIB,MP(IPLOT)%XCOL) !x CALL WDIALOGPUTMENU(IDF_MENU4,ATTRIB,NATTRIB,MP(IPLOT)%YCOL) !y CALL WDIALOGPUTMENU(IDF_MENU5,ATTRIB,NATTRIB,MP(IPLOT)%ZCOL) !z CALL WDIALOGPUTMENU(IDF_MENU7,ATTRIB,NATTRIB,MP(IPLOT)%Z2COL) !second z I=0 IF(MP(IPLOT)%ZCOL.NE.MP(IPLOT)%Z2COL)I=1 CALL WDIALOGPUTCHECKBOX(IDF_CHECK6,I) IF(MP(IPLOT)%HCOL.GT.0)CALL WDIALOGPUTMENU(IDF_MENU6,ATTRIB,NATTRIB,MP(IPLOT)%HCOL) !plot IF(MP(IPLOT)%HCOL.LE.0)CALL WDIALOGPUTMENU(IDF_MENU6,ATTRIB,NATTRIB,1) !plot MP(IPLOT)%HCOL_METHOD=MIN(MAX(1,MP(IPLOT)%HCOL_METHOD),5) CALL WDIALOGPUTOPTION(IDF_MENU9,MP(IPLOT)%HCOL_METHOD) !method WRITE(CAXES,'(10I1)') MP(IPLOT)%IAXES(1:10) READ(CAXES,'(I10)') I CALL WDIALOGPUTINTEGER(IDF_INTEGER2,I) CALL WDIALOGFIELDSTATE(IDF_MENU3,1) CALL WDIALOGFIELDSTATE(IDF_MENU4,1) CALL WDIALOGFIELDSTATE(IDF_MENU5,1) CALL WDIALOGFIELDSTATE(IDF_MENU6,1) CALL WDIALOGFIELDSTATE(IDF_INTEGER2,1) CALL WDIALOGFIELDSTATE(IDF_LABEL6,1) ELSEIF(LIFF)THEN CALL WDIALOGPUTMENU(IDF_MENU3,(/'--- not available ---'/),1,1) CALL WDIALOGPUTMENU(IDF_MENU4,(/'--- not available ---'/),1,1) CALL WDIALOGPUTMENU(IDF_MENU5,(/'--- not available ---'/),1,1) CALL WDIALOGPUTMENU(IDF_MENU6,(/'--- not available ---'/),1,1) CALL WDIALOGPUTMENU(IDF_MENU7,(/'--- not available ---'/),1,1) CALL WDIALOGFIELDSTATE(IDF_MENU3,3) CALL WDIALOGFIELDSTATE(IDF_MENU4,3) CALL WDIALOGFIELDSTATE(IDF_MENU5,3) CALL WDIALOGFIELDSTATE(IDF_MENU6,3) CALL WDIALOGFIELDSTATE(IDF_MENU7,3) CALL WDIALOGFIELDSTATE(IDF_LABEL9,3) CALL WDIALOGFIELDSTATE(IDF_MENU9,3) CALL WDIALOGFIELDSTATE(IDF_CHECK5,3) CALL WDIALOGFIELDSTATE(IDF_CHECK6,3) CALL WDIALOGFIELDSTATE(IDF_INTEGER2,3) CALL WDIALOGFIELDSTATE(IDF_LABEL2,3) CALL WDIALOGFIELDSTATE(IDF_LABEL3,3) CALL WDIALOGFIELDSTATE(IDF_LABEL4,3) CALL WDIALOGFIELDSTATE(IDF_LABEL6,3) CALL WDIALOGFIELDSTATE(IDF_LABEL10,3) CALL WDIALOGFIELDSTATE(ID_LABELING,3) CALL WDIALOGFIELDSTATE(IDF_PICTURE5,3) ELSEIF(LGEN.OR.LISG)THEN CALL WDIALOGPUTMENU(IDF_MENU3,(/'--- not available ---'/),1,1) !ATTRIB,NATTRIB,1) !x CALL WDIALOGPUTMENU(IDF_MENU4,(/'--- not available ---'/),1,1) !,ATTRIB,NATTRIB,2) !y CALL WDIALOGPUTMENU(IDF_MENU5,(/'--- not available ---'/),1,1) !,ATTRIB,NATTRIB,3) !z CALL WDIALOGPUTMENU(IDF_MENU6,(/'--- not available ---'/),1,1) !,ATTRIB,NATTRIB,3) !z CALL WDIALOGPUTMENU(IDF_MENU7,(/'--- not available ---'/),1,1) !,ATTRIB,NATTRIB,3) !z CALL WDIALOGFIELDSTATE(IDF_MENU3,3) CALL WDIALOGFIELDSTATE(IDF_MENU4,3) CALL WDIALOGFIELDSTATE(IDF_MENU5,3) CALL WDIALOGFIELDSTATE(IDF_MENU6,3) CALL WDIALOGFIELDSTATE(IDF_MENU7,3) CALL WDIALOGFIELDSTATE(IDF_MENU9,3) CALL WDIALOGFIELDSTATE(IDF_LABEL2,3) CALL WDIALOGFIELDSTATE(IDF_LABEL3,3) CALL WDIALOGFIELDSTATE(IDF_LABEL4,3) CALL WDIALOGFIELDSTATE(IDF_LABEL5,3) CALL WDIALOGFIELDSTATE(IDF_LABEL6,3) CALL WDIALOGFIELDSTATE(IDF_LABEL9,3) CALL WDIALOGFIELDSTATE(IDF_LABEL10,3) CALL WDIALOGFIELDSTATE(IDF_CHECK3,3) CALL WDIALOGFIELDSTATE(IDF_CHECK5,3) CALL WDIALOGFIELDSTATE(IDF_CHECK6,3) CALL WDIALOGFIELDSTATE(IDF_INTEGER1,3) CALL WDIALOGFIELDSTATE(IDF_INTEGER2,3) ENDIF CALL SETTINGS_FIELDS(LGEN.OR.LISG) CALL UTL_DIALOGSHOW(-1,-1,0,2) DO CALL WMESSAGE(ITYPE,MESSAGE) SELECT CASE (ITYPE) CASE(FIELDCHANGED) CALL WDIALOGSELECT(MESSAGE%WIN) SELECT CASE (MESSAGE%VALUE1) CASE (IDF_CHECK3,IDF_CHECK5,IDF_RADIO1,IDF_RADIO2,IDF_CHECK6) CALL SETTINGS_FIELDS(LGEN.OR.LISG) END SELECT SELECT CASE (MESSAGE%VALUE2) END SELECT CASE(PUSHBUTTON) CALL WDIALOGSELECT(MESSAGE%WIN) SELECT CASE (MESSAGE%VALUE1) CASE (IDF_BUTTON6) IRGB=MP(IPLOT)%SCOLOR; CALL WSELECTCOLOUR(IRGB) IF(WINFODIALOG(4).EQ.1)THEN MP(IPLOT)%SCOLOR=IRGB CALL WDIALOGCOLOUR(IDF_STRING1,MP(IPLOT)%SCOLOR,MP(IPLOT)%SCOLOR) ENDIF CASE (ID_SYMBOLS) CALL SETTINGS_IPFSYMBOLS(IPLOT,LIPF,LIFF,LISG,LGEN) CALL WDIALOGSELECT(ID_DCONFIGURE) CALL WDIALOGCOLOUR(IDF_STRING1,MP(IPLOT)%SCOLOR,MP(IPLOT)%SCOLOR) CASE (ID_LABELING) IF(LIPF)CALL IMOD3D_LABELS(1,IPLOT) IF(LGEN)CALL GENLABELSDEFINE(IPLOT,ATTRIB,SIZE(ATTRIB)) CASE (IDOK,IDCANCEL) !## fadeout CALL WDIALOGGETCHECKBOX(IDF_CHECK3,MP(IPLOT)%FADEOUT) IF(MP(IPLOT)%FADEOUT.EQ.1)CALL WDIALOGGETINTEGER(IDF_INTEGER1,MP(IPLOT)%IDFI) !## colouring CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,MP(IPLOT)%ILEG) MP(IPLOT)%ILEG=MP(IPLOT)%ILEG-1 IF(MP(IPLOT)%ILEG.EQ.1)CALL WDIALOGGETMENU(IDF_MENU1,MP(IPLOT)%IATTRIB) IF(LIPF)THEN CALL WDIALOGGETMENU(IDF_MENU3,MP(IPLOT)%XCOL) CALL WDIALOGGETMENU(IDF_MENU4,MP(IPLOT)%YCOL) CALL WDIALOGGETMENU(IDF_MENU5,MP(IPLOT)%ZCOL) MP(IPLOT)%Z2COL=MP(IPLOT)%ZCOL CALL WDIALOGGETCHECKBOX(IDF_CHECK6,I) IF(I.EQ.1)CALL WDIALOGGETMENU(IDF_MENU7,MP(IPLOT)%Z2COL) CALL WDIALOGGETCHECKBOX(IDF_CHECK5,MP(IPLOT)%HCOL) IF(MP(IPLOT)%HCOL.EQ.1)THEN CALL WDIALOGGETMENU(IDF_MENU6,MP(IPLOT)%HCOL) CALL WDIALOGGETMENU(IDF_MENU9,MP(IPLOT)%HCOL_METHOD) ENDIF CALL WDIALOGGETINTEGER(IDF_INTEGER2,I) WRITE(CAXES,'(I10)') I READ(CAXES,'(10I1)') MP(IPLOT)%IAXES(1:10) ENDIF !## added legend colouring, for the first time ... make legend (linear) IF(.NOT.LLEG.AND.MP(IPLOT)%ILEG.EQ.1)THEN !## draw map to get info about points CALL IDFPLOT(1) !## legend legend entire region CALL LEG_CREATE_INIT(ID_CDLL) ENDIF EXIT CASE (IDHELP) CALL UTL_GETHELP('4.5.2','MMO.GO.Config') END SELECT END SELECT ENDDO IF(ALLOCATED(ATTRIB))DEALLOCATE(ATTRIB) CALL WDIALOGSELECT(ID_DCONFIGURE); CALL WDIALOGUNLOAD() CALL WDIALOGSELECT(ID) END SUBROUTINE SETTINGS_MAIN !###====================================================================== SUBROUTINE SETTINGS_FIELDS(LEX) !###====================================================================== IMPLICIT NONE LOGICAL,INTENT(IN) :: LEX INTEGER :: I,J !## colouring CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,I) J=1 IF(I.EQ.1)J=2 CALL WDIALOGFIELDSTATE(IDF_BUTTON6,I) CALL WDIALOGFIELDSTATE(IDF_STRING1,I) CALL WDIALOGFIELDSTATE(IDF_MENU1,J) IF(LEX)RETURN I=WINFODIALOGFIELD(IDF_MENU7,FIELDSTATE) IF(I.NE.3)THEN !## second z-coordinate CALL WDIALOGGETCHECKBOX(IDF_CHECK6,I) CALL WDIALOGFIELDSTATE(IDF_MENU7,I) ENDIF !## sight depth CALL WDIALOGGETCHECKBOX(IDF_CHECK3,I) CALL WDIALOGFIELDSTATE(IDF_INTEGER1,I) CALL WDIALOGFIELDSTATE(IDF_LABEL5,I) ! !## tic/marks ! CALL WDIALOGGETCHECKBOX(IDF_CHECK4,I) ! CALL WDIALOGFIELDSTATE(IDF_BUTTON5,I) !## scale I=WINFODIALOGFIELD(IDF_MENU7,FIELDSTATE) IF(I.NE.3)THEN CALL WDIALOGGETCHECKBOX(IDF_CHECK5,I) CALL WDIALOGFIELDSTATE(IDF_MENU6,I) CALL WDIALOGFIELDSTATE(IDF_MENU9,I) CALL WDIALOGFIELDSTATE(IDF_LABEL9,I) ENDIF END SUBROUTINE SETTINGS_FIELDS !###====================================================================== SUBROUTINE SETTINGS_IPFSYMBOLS(IPLOT,LIPF,LIFF,LISG,LGEN) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: IPLOT LOGICAL,INTENT(IN) :: LIPF,LIFF,LISG,LGEN TYPE(WIN_MESSAGE) :: MESSAGE INTEGER :: ITYPE,I,IRGB,JRGB,ID CHARACTER(LEN=2),ALLOCATABLE,DIMENSION(:) :: CLIST ID=WINFODIALOG(CURRENTDIALOG) CALL WDIALOGLOAD(ID_DSYMBOLS,ID_DSYMBOLS) IF(LIPF)THEN CALL WDIALOGPUTSTRING(IDF_GROUP1,'Marker Symbol') IF(ALLOCATED(CLIST))DEALLOCATE(CLIST) ALLOCATE(CLIST(40)) DO I=1,40 WRITE(CLIST(I),'(I2)') I END DO ITYPE=MP(IPLOT)%SYMBOL IF(ITYPE.LE.0.OR.ITYPE.GT.40)ITYPE=14 CALL WDIALOGPUTMENU(IDF_MENU1,CLIST,40,ITYPE) ENDIF IF(LIFF.OR.LISG.OR.LGEN)THEN CALL WDIALOGPUTSTRING(IDF_GROUP1,'Line Symbol') IF(ALLOCATED(CLIST))DEALLOCATE(CLIST) ALLOCATE(CLIST(8)) DO I=1,8 WRITE(CLIST(I),'(I2)') I-1 END DO ITYPE=MP(IPLOT)%SYMBOL+1 IF(ITYPE.LE.0.OR.ITYPE.GT.8)ITYPE=1 CALL WDIALOGPUTMENU(IDF_MENU1,CLIST,8,ITYPE) ENDIF CALL WDIALOGPUTINTEGER(IDF_INTEGER1,MP(IPLOT)%THICKNESS) CALL WDIALOGPUTSTRING(IDF_STRING1,MP(IPLOT)%TFORMAT) IF(ALLOCATED(CLIST))DEALLOCATE(CLIST) IF(LGEN)THEN CALL WDIALOGFIELDSTATE(IDF_CHECK1,1) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,MP(IPLOT)%PRFTYPE) ELSE CALL WDIALOGFIELDSTATE(IDF_CHECK1,2) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,0) ENDIF IF(LISG)THEN CALL WDIALOGFIELDSTATE(ID_LEGEND,0) ENDIF IRGB=MP(IPLOT)%SCOLOR CALL UTL_DIALOGSHOW(-1,-1,0,3) CALL SETTINGS_SYMBOLDRAW(LIFF,LIPF,LISG,LGEN,IRGB) DO CALL WMESSAGE(ITYPE, MESSAGE) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) CASE (IDF_MENU1,IDF_INTEGER1) CALL SETTINGS_SYMBOLDRAW(LIFF,LIPF,LISG,LGEN,IRGB) END SELECT CASE(PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (ID_LEGEND) IF(LEG_MAIN(0))CALL IDFPLOTFAST(1) CASE (ID_COLOR) IRGB=MP(IPLOT)%SCOLOR JRGB=IRGB CALL WSELECTCOLOUR(IRGB) IF(WINFODIALOG(4).EQ.1)THEN MP(IPLOT)%SCOLOR=IRGB ELSE IRGB=JRGB ENDIF CALL SETTINGS_SYMBOLDRAW(LIFF,LIPF,LISG,LGEN,IRGB) CASE (IDOK) CALL WDIALOGSELECT(ID_DSYMBOLS) CALL WDIALOGGETMENU(IDF_MENU1,MP(IPLOT)%SYMBOL) IF(LIFF.OR.LISG.OR.LGEN)THEN MP(IPLOT)%SYMBOL=MP(IPLOT)%SYMBOL-1 ENDIF CALL WDIALOGGETINTEGER(IDF_INTEGER1,MP(IPLOT)%THICKNESS) CALL WDIALOGGETSTRING(IDF_STRING1,MP(IPLOT)%TFORMAT) CALL WDIALOGGETCHECKBOX(IDF_CHECK1,MP(IPLOT)%PRFTYPE) EXIT CASE (IDCANCEL) EXIT END SELECT END SELECT ENDDO CALL WDIALOGSELECT(ID_DSYMBOLS); CALL WDIALOGUNLOAD() CALL WDIALOGSELECT(ID) END SUBROUTINE SETTINGS_IPFSYMBOLS !###====================================================================== SUBROUTINE SETTINGS_GENSYMBOLS() !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE) :: MESSAGE INTEGER :: ITYPE,I,IRGB,JRGB,IGEN,ID,NATTRIB,IFORMAT,IU CHARACTER(LEN=2),ALLOCATABLE,DIMENSION(:) :: CLIST INTEGER,ALLOCATABLE,DIMENSION(:) :: ILIST CHARACTER(LEN=11),DIMENSION(:),POINTER :: LABELS ID=WINFODIALOG(CURRENTDIALOG) CALL WDIALOGLOAD(ID_DSYMBOLS,ID_DSYMBOLS) DO IGEN=1,MXGEN; IF(GEN(IGEN)%ISEL)EXIT; ENDDO !## get labels from gen file IF(POLYGON_UTL_OPENGEN(GEN(IGEN)%GENFNAME,IFORMAT,IU))CALL POLYGON_UTL_GETLABELSGEN(IU,IFORMAT,LABELS) IF(IFORMAT.EQ.0)THEN NATTRIB=SIZE(LABELS); ALLOCATE(ILIST(NATTRIB)); ILIST=0 CALL UTL_FILLARRAY(ILIST,NATTRIB,GEN(IGEN)%ILABELS) CALL WDIALOGPUTMENU(IDF_MENU2,LABELS,NATTRIB,ILIST) ELSE CALL WDIALOGFIELDSTATE(IDF_MENU2,0) CALL WDIALOGFIELDSTATE(IDF_GROUP2,0) ENDIF GEN(IGEN)%IFILL=MIN(MAX(GEN(IGEN)%IFILL,0),1) CALL WDIALOGPUTCHECKBOX(IDF_CHECK1,GEN(IGEN)%IFILL) GEN(IGEN)%TSIZE=MIN(MAX(GEN(IGEN)%TSIZE,1),100) CALL WDIALOGPUTINTEGER(IDF_INTEGER2,GEN(IGEN)%TSIZE) IF(TRIM(GEN(IGEN)%TFORMAT).EQ.'')GEN(IGEN)%TFORMAT='F10.2' CALL WDIALOGPUTSTRING(IDF_STRING1,GEN(IGEN)%TFORMAT) CALL WDIALOGPUTSTRING(IDF_GROUP1,'Line Symbol') IF(ALLOCATED(CLIST))DEALLOCATE(CLIST) ALLOCATE(CLIST(8)); DO I=1,8; WRITE(CLIST(I),'(I2)') I-1; END DO ITYPE=GEN(IGEN)%SYMBOL+1; IF(ITYPE.LE.0.OR.ITYPE.GT.8)ITYPE=1 CALL WDIALOGPUTMENU(IDF_MENU1,CLIST,8,ITYPE) IF(ALLOCATED(CLIST))DEALLOCATE(CLIST) CALL WDIALOGPUTINTEGER(IDF_INTEGER1,GEN(IGEN)%THICKNESS) CALL WDIALOGFIELDSTATE(IDF_CHECK1,1) CALL WDIALOGPUTSTRING(IDF_LABEL3,'Thickness') CALL WDIALOGFIELDSTATE(ID_LEGEND,2) CALL UTL_DIALOGSHOW(-1,-1,0,3) IRGB=GEN(IGEN)%RGB CALL SETTINGS_SYMBOLDRAW(.FALSE.,.FALSE.,.FALSE.,.TRUE.,IRGB) DO CALL WMESSAGE(ITYPE, MESSAGE) SELECT CASE (ITYPE) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) CASE (IDF_INTEGER1,IDF_MENU1) CALL SETTINGS_SYMBOLDRAW(.FALSE.,.FALSE.,.FALSE.,.TRUE.,IRGB) END SELECT CASE(PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (ID_COLOR) JRGB=IRGB; CALL WSELECTCOLOUR(IRGB); IF(WINFODIALOG(4).NE.1)IRGB=JRGB CALL SETTINGS_SYMBOLDRAW(.FALSE.,.FALSE.,.FALSE.,.TRUE.,IRGB) CASE (IDOK) CALL WDIALOGGETMENU(IDF_MENU1,GEN(IGEN)%SYMBOL) GEN(IGEN)%SYMBOL=GEN(IGEN)%SYMBOL-1 GEN(IGEN)%RGB=IRGB CALL WDIALOGGETINTEGER(IDF_INTEGER1,GEN(IGEN)%THICKNESS) IF(IFORMAT.EQ.0)THEN CALL WDIALOGGETMENU(IDF_MENU2,ILIST) CALL UTL_READARRAY(ILIST,NATTRIB,GEN(IGEN)%ILABELS) ENDIF !## use colouring for labels CALL WDIALOGGETCHECKBOX(IDF_CHECK1,GEN(IGEN)%IFILL) CALL WDIALOGGETINTEGER(IDF_INTEGER2,GEN(IGEN)%TSIZE) !second z CALL WDIALOGGETSTRING(IDF_STRING1,GEN(IGEN)%TFORMAT) EXIT CASE (IDCANCEL) EXIT END SELECT END SELECT ENDDO IF(ALLOCATED(ILIST))DEALLOCATE(ILIST) CALL WDIALOGSELECT(ID_DSYMBOLS); CALL WDIALOGUNLOAD(); CALL WDIALOGSELECT(ID) END SUBROUTINE SETTINGS_GENSYMBOLS !###====================================================================== SUBROUTINE SETTINGS_SYMBOLDRAW(LIFF,LIPF,LISG,LGEN,IRGB) !###====================================================================== IMPLICIT NONE LOGICAL,INTENT(IN) :: LIFF,LIPF,LISG,LGEN INTEGER,INTENT(IN) :: IRGB INTEGER :: IMARKER,I CALL WDIALOGSELECT(ID_DSYMBOLS) CALL IGRPLOTMODE(MODECOPY) CALL IGRSELECT(DRAWFIELD,IDF_PICTURE1) CALL IGRCOLOURN(WRGB(255,255,255)) CALL IGRFILLPATTERN(SOLID) CALL DBL_IGRRECTANGLE(0.0D0,0.0D0,1.0D0,1.0D0) CALL IGRFILLPATTERN(OUTLINE) CALL IGRCOLOURN(WRGB(0,0,0)) CALL DBL_IGRAREA(0.0D0,0.0D0,1.0D0,1.0D0) CALL DBL_IGRUNITS(0.0D0,0.0D0,1.0D0,1.0D0) CALL IGRCOLOURN(IRGB) !## marker IF(LIPF)THEN CALL IGRLINETYPE(SOLIDLINE) CALL WDIALOGGETINTEGER(IDF_INTEGER1,I) CALL DBL_WGRTEXTFONT(IFAMILY=0,TWIDTH=(REAL(I)*4.0D0)/75.0D0,THEIGHT=(REAL(I)*2.0D0)/25.0D0,ISTYLE=0) CALL WDIALOGGETMENU(IDF_MENU1,IMARKER) CALL DBL_IGRMARKER(0.5D0,0.5D0,IMARKER) ENDIF !## lines IF(LIFF.OR.LISG.OR.LGEN)THEN CALL WDIALOGGETMENU(IDF_MENU1,IMARKER) CALL IGRLINETYPE(IMARKER-1) CALL WDIALOGGETINTEGER(IDF_INTEGER1,I) CALL IGRLINEWIDTH(I) CALL DBL_IGRJOIN(0.05D0,0.05D0,0.95D0,0.30D0) CALL DBL_IGRJOIN(0.95D0,0.30D0,0.05D0,0.60D0) CALL DBL_IGRJOIN(0.05D0,0.60D0,0.95D0,0.95D0) ENDIF END SUBROUTINE SETTINGS_SYMBOLDRAW END MODULE MOD_SETTINGS