[metview] 42/97: Metview 4.4.7
Alastair McKinstry
mckinstry at moszumanska.debian.org
Tue Sep 1 09:18:44 UTC 2015
This is an automated email from the git hooks/post-receive script.
mckinstry pushed a commit to branch master
in repository metview.
commit 7ccfe13adb9b47420c60b1d5837d4aadc9b0fe73
Author: Alastair McKinstry <mckinstry at debian.org>
Date: Fri Jun 20 09:50:49 2014 +0100
Metview 4.4.7
---
Makefile.am | 2 +-
Makefile.in | 6 +-
NOTICE | 16 +
aux_build/ax_boost_base.m4 | 258 +++
bootstrap | 13 +
configure | 779 +++++--
configure.ac | 195 +-
rpms/Makefile.in | 4 +
scripts/Makefile.am | 15 +-
scripts/Makefile.in | 14 +-
scripts/compile | 16 +-
scripts/metview_base | 17 +-
scripts/metview_create_user_dir | 11 +
scripts/metview_help | 16 +-
scripts/metview_local.ecm_lnx64 | 18 +-
scripts/mv_compress | 4 +-
scripts/mv_mail | 4 +-
scripts/mv_rttov_run | 10 +-
scripts/mv_vapor_gui | 49 +
scripts/mv_vapor_prep.mv | 933 +++++++++
scripts/set_mars_env | 45 +-
share/metview/Makefile.in | 4 +
.../app-defaults/CommonMacroFuncs/mvl_geoline | 99 +-
.../CommonMacroFuncs/mvl_geopotential_on_ml | 10 +-
.../CommonMacroFuncs/mvl_plot_scm_data | 76 +-
share/metview/app-defaults/Desktop.qss | 189 ++
.../Visual Definitions/.Observation Plotting | 5 +
.../Visual Definitions/Observation Plotting | 1 +
share/metview/app-defaults/FrameKeyProfile_all.xml | 3 +-
share/metview/app-defaults/Makefile.am | 5 +-
share/metview/app-defaults/Makefile.in | 9 +-
share/metview/app-defaults/MvVersion | 2 +-
share/metview/app-defaults/MvVersionDetails | 2 +-
share/metview/app-defaults/Sample_Drawers.tar.gz | Bin 0 -> 2133 bytes
.../.Pressure Axis => .Average Data} | 0
.../.Pressure Axis => .Average View} | 0
.../.Pressure Axis => .Bufr Thermo Data} | 0
.../.Pressure Axis => .Cartesian View} | 0
.../.Pressure Axis => .Cross Section View} | 0
.../.Pressure Axis => .Geopoints to KML} | 0
.../.Pressure Axis => .Grib Thermo Data} | 0
.../.Pressure Axis => .Hovmoeller View} | 0
.../.Pressure Axis => .Input Visualiser} | 0
.../.Pressure Axis => .NetCDF Visualiser} | 0
.../.Pressure Axis => .Observation Filter} | 0
.../.Pressure Axis => .Odb Thermo Data} | 0
.../.Pressure Axis => .Odb Visualiser} | 0
.../.Pressure Axis => .Reprojection} | 0
.../.Pressure Axis => .Scm Run} | 0
.../.Pressure Axis => .Table Visualiser} | 0
.../.Pressure Axis => .Vapor Prepare} | 0
.../.Pressure Axis => Average Data/.Data} | 0
.../.Horizontal Axis} | 0
.../.Pressure Axis => Average View/.Vertical Axis} | 0
.../.Pressure Axis => Bufr Thermo Data/.Data} | 0
.../.Pressure Axis => Bufr Thermo Data/.Station} | 0
.../.Horizontal Axis} | 0
.../.Pressure Axis => Cartesian View/.Taylor Grid} | 0
.../.Tephigram Grid} | 0
.../.Pressure Axis => Cartesian View/.Thermo Grid} | 0
.../.Vertical Axis} | 0
.../.Horizontal Axis} | 0
.../.Vertical Axis} | 0
.../.Pressure Axis => Geopoints to KML/.Geopoints} | 0
.../.Pressure Axis => Grib Thermo Data/.Data} | 0
.../.Pressure Axis => Grib Thermo Data/.Station} | 0
.../.Pressure Axis => Hovmoeller View/.Geo Axis} | 0
.../.Pressure Axis => Hovmoeller View/.Time Axis} | 0
.../.Vertical Axis} | 0
.../.Input Binning} | 0
.../.Netcdf Data} | 0
.../.Pressure Axis => Observation Filter/.Data} | 0
.../.Pressure Axis => Odb Thermo Data/.Data} | 0
.../.Pressure Axis => Odb Visualiser/.Odb Binning} | 0
.../.Pressure Axis => Odb Visualiser/.Odb Data} | 0
.../.Pressure Axis => Reprojection/.Data} | 0
.../.Pressure Axis => Scm Run/.Scm Input Data} | 0
.../.Pressure Axis => Scm Run/.Scm Namelist} | 0
.../.Pressure Axis => Scm Run/.Scm Vtable} | 0
.../.Table Binning} | 0
.../.Table Data} | 0
.../.Vapor Input Data} | 0
.../{.Pressure Axis => .Level Axis} | 0
share/metview/app-defaults/UiTheme.Desktop | 158 ++
share/metview/app-defaults/User_Dir_Frame.tar.gz | Bin 401876 -> 403101 bytes
share/metview/app-defaults/metview.qss | 132 +-
share/metview/etc/CartesianViewDef | 10 +-
share/metview/etc/CartesianViewRules | 42 +-
share/metview/etc/ConfigDef | 34 +-
share/metview/etc/GeoViewDef | 17 +-
share/metview/etc/MARS_webapi | 9 +
share/metview/etc/MSYMBDef | 12 +-
share/metview/etc/MSYMBRules | 99 +-
share/metview/etc/MTHERMOGRIDDef | 322 +++
share/metview/etc/MTHERMOGRIDRules | 62 +
share/metview/etc/MWINDRules | 4 +-
share/metview/etc/Makefile.am | 7 +-
share/metview/etc/Makefile.in | 53 +-
share/metview/etc/MarsEcRegridDef | 13 +-
share/metview/etc/MarsEcRegridRules | 14 +-
share/metview/etc/MarsG2Def | 57 +
share/metview/etc/MarsG2Rules | 14 +-
share/metview/etc/MarsOdbDef | 13 +-
share/metview/etc/MarsOdbRules | 14 +-
share/metview/etc/MarsRules | 14 +-
share/metview/etc/MarsTiggeDef | 57 +
share/metview/etc/MarsTiggeRules | 14 +-
share/metview/etc/ObjectList | 580 +++---
share/metview/etc/ObsDef | 936 ---------
share/metview/etc/ObsPlottingDef | 252 +++
share/metview/etc/ObsPlottingRules | 57 +
share/metview/etc/ObsRules | 315 ---
share/metview/etc/PlotPageDef | 2 +-
share/metview/etc/Services | 8 +-
share/metview/etc/UiSpec.Bookmarks | 12 +-
share/metview/etc/UiSpec.DetailedFolderView | 58 +-
share/metview/etc/UiSpec.FolderView | 55 +-
share/metview/etc/UiSpec.IconFolderView | 75 +-
share/metview/etc/ecmwf.def | 13 +-
share/metview/etc/ifsdata/Makefile.in | 4 +
share/metview/etc/macro_built_in_functions.txt | 15 +-
share/metview/etc/macro_icon_function_help.xml | 428 ++--
share/metview/etc/mars.chk | 14 +-
share/metview/etc/ms_mars.cfg | 26 +
share/metview/etc/ms_mars.cfg.INFO | 12 +
share/metview/etc/reportypes.def | 13 +-
share/metview/etc/rt_by_obsgroup.chk | 2 +-
share/metview/etc/tigge.def | 57 +
share/metview/etc/uPlotTable | 656 ++----
share/metview/icons/CPTECACCESS.xpm | 244 +++
share/metview/icons/{POBS.xpm => MOBS.xpm} | 2 +-
share/metview/icons/MTHERMOGRID.xpm | 41 +
share/metview/icons/Makefile.am | 17 +-
share/metview/icons/Makefile.in | 50 +-
share/metview/icons/SPECTRA.xpm | 40 +
share/metview/icons/THERMODATA.xpm | 48 +
share/metview/icons/VAPOR_PREPARE.xpm | 162 ++
share/metview/icons_mv5/ALIGN_BOTTOM.xpm | 23 -
share/metview/icons_mv5/ALIGN_LEFT.xpm | 23 -
share/metview/icons_mv5/ALIGN_RIGHT.xpm | 23 -
share/metview/icons_mv5/ALIGN_TOP.xpm | 23 -
share/metview/icons_mv5/DISTR_HCENTER.xpm | 23 -
share/metview/icons_mv5/DISTR_VCENTER.xpm | 23 -
share/metview/icons_mv5/FOLDER.svg | 160 +-
share/metview/icons_mv5/GEOPOINTS.svg | 83 +-
share/metview/icons_mv5/GRIB.svg | 264 +--
share/metview/icons_mv5/HOME.svg | 339 +++-
share/metview/icons_mv5/MACRO.svg | 301 +--
share/metview/icons_mv5/MHOVMOELLERDATA.xpm | 42 +
share/metview/icons_mv5/MHOVMOELLERVIEW.xpm | 44 +
share/metview/icons_mv5/Makefile.am | 27 +-
share/metview/icons_mv5/Makefile.in | 31 +-
share/metview/icons_mv5/NEWS.xpm | 39 -
share/metview/icons_mv5/PLOTPAGE.xpm | 38 -
share/metview/icons_mv5/PLOTSUBPAGE.xpm | 39 -
share/metview/icons_mv5/SUBPAGEDETAILS.xpm | 39 -
share/metview/icons_mv5/SYSTEM.svg | 166 +-
share/metview/icons_mv5/TAR.svg | 258 +++
share/metview/icons_mv5/TAR.xpm | 474 -----
share/metview/icons_mv5/THERMODATA.xpm | 48 +
share/metview/icons_mv5/VAPOR_PREPARE.svg | 238 +++
share/metview/icons_mv5/WASTEBASKET.svg | 333 ++-
share/metview/icons_mv5/help_area.xpm | 22 -
share/metview/icons_mv5/help_line.xpm | 22 -
share/metview/icons_mv5/help_map.xpm | 22 -
share/metview/icons_mv5/help_point.xpm | 22 -
share/metview/icons_mv5/help_station.xpm | 46 -
src/AppMod/Makefile.in | 4 +
src/AppMod/MvMailTo.cc | 2 +-
src/AppMod/savepool.cc | 48 +-
src/BufrExaminer/Makefile.in | 4 +
src/CptecAccess/Makefile.in | 4 +
src/Datacoverage/Makefile.in | 4 +
src/DebugTools/Makefile.am | 2 +-
src/DebugTools/Makefile.in | 6 +-
src/DebugTools/MvProcNode.cc | 45 +-
src/DebugTools/MvQProcModel.cc | 61 +-
src/DebugTools/MvQProcModel.h | 14 +-
src/DebugTools/ProcMonitor.cc | 159 +-
src/DebugTools/ProcMonitor.h | 22 +-
src/DebugTools/XServ.qrc | 5 +
src/DebugTools/XServ.qrc.cpp | 2 +-
src/DebugTools/debug.qrc | 2 +
src/Desktop/Action.h | 5 +-
src/Desktop/ActionCommand.h | 5 +-
src/Desktop/Command.h | 5 +-
src/Desktop/ComputeEditor.cc | 18 +-
src/Desktop/ComputeEditor.h | 5 +-
src/Desktop/ConfigLoader.h | 81 +-
src/Desktop/Counted.h | 5 +-
src/Desktop/Dependancy.h | 5 +-
src/Desktop/{MvQ.h => Desktop.h} | 14 +-
src/Desktop/Drop.cc | 4 +-
src/Desktop/Drop.h | 5 +-
src/Desktop/EditTransaction.h | 5 +-
src/Desktop/Editor.cc | 14 +-
src/Desktop/Editor.h | 8 +-
src/Desktop/EditorObserver.h | 5 +-
src/Desktop/FileObject.cc | 4 +-
src/Desktop/Folder.cc | 66 +-
src/Desktop/Folder.h | 11 +-
src/Desktop/FolderInfo.cc | 81 +-
src/Desktop/FolderInfo.h | 16 +-
src/Desktop/FolderSearchData.cc | 134 ++
src/Desktop/FolderSearchData.h | 56 +
src/Desktop/FolderSettings.cc | 236 +++
src/Desktop/FolderSettings.h | 52 +
src/Desktop/HelpFactory.h | 4 +-
src/Desktop/IconClass.cc | 122 +-
src/Desktop/IconClass.h | 10 +-
src/Desktop/IconFactory.cc | 10 +-
src/Desktop/IconInfo.cc | 25 +-
src/Desktop/IconInfo.h | 7 +-
src/Desktop/IconObject.cc | 55 +-
src/Desktop/IconObject.h | 1 +
src/Desktop/IconObserver.h | 5 +-
src/Desktop/InternalService.h | 5 +-
src/Desktop/InternalTask.h | 5 +-
src/Desktop/Items.cc | 6 +-
src/Desktop/Language.cc | 25 +-
src/Desktop/Language.h | 78 +-
src/Desktop/LineFactory.h | 5 +-
src/Desktop/Log.cc | 39 +-
src/Desktop/Log.h | 3 +-
src/Desktop/MacroParamEditor.cc | 19 +-
src/Desktop/MacroParamEditor.h | 3 +-
src/Desktop/MacroParamState.h | 5 +-
src/Desktop/Makefile.am | 53 +-
src/Desktop/Makefile.in | 427 ++--
src/Desktop/MessageObserver.h | 5 +-
src/Desktop/MethodCommand.cc | 6 +-
src/Desktop/MethodCommand.h | 5 +-
src/Desktop/MetviewService.h | 5 +-
src/Desktop/MetviewTask.cc | 35 +-
src/Desktop/MetviewTask.h | 5 +-
src/Desktop/MvQ.h | 5 +-
src/Desktop/MvQActionList.cc | 45 +
src/Desktop/{EditorObserver.h => MvQActionList.h} | 31 +-
src/Desktop/MvQAdvancedSearch.cc | 134 ++
src/Desktop/MvQAdvancedSearch.h | 41 +
src/Desktop/MvQBookmarks.cc | 364 +++-
src/Desktop/MvQBookmarks.h | 39 +-
src/Desktop/MvQClassBrowser.cc | 230 ---
src/Desktop/MvQClassBrowser.h | 67 -
src/Desktop/MvQColourLine.cc | 95 +-
src/Desktop/MvQColourLine.h | 12 +-
src/Desktop/MvQComboBoxLine.cc | 11 +-
src/Desktop/MvQComboBoxLine.h | 3 +-
src/Desktop/MvQContextMenu.cc | 47 +-
src/Desktop/MvQContextMenu.h | 6 +
src/Desktop/MvQDesktop.cc | 46 +-
src/Desktop/MvQDesktopSettings.cc | 27 +-
src/Desktop/MvQDesktopSettings.h | 14 +-
src/Desktop/MvQDetailedFolderView.cc | 512 +++--
src/Desktop/MvQDetailedFolderView.h | 31 +-
src/Desktop/MvQDrawerPanel.cc | 97 +-
src/Desktop/MvQDrawerPanel.h | 8 +
src/Desktop/MvQDropTarget.cc | 98 +
src/Desktop/MvQDropTarget.h | 42 +
src/Desktop/MvQEditor.cc | 74 +-
src/Desktop/MvQEditor.h | 8 +-
src/Desktop/MvQExternalHelp.cc | 12 +-
src/Desktop/MvQFileBrowser.cc | 863 ++++++--
src/Desktop/MvQFileBrowser.h | 53 +-
src/Desktop/MvQFileSystemModel.cc | 241 ---
src/Desktop/MvQFileSystemModel.h | 77 -
src/Desktop/MvQFileWatcher.cc | 4 +-
src/Desktop/MvQFolderDrawerPanel.cc | 2 +-
src/Desktop/MvQFolderHistory.cc | 100 +-
src/Desktop/MvQFolderHistory.h | 16 +-
src/Desktop/MvQFolderItemProperty.cc | 603 +++++-
src/Desktop/MvQFolderItemProperty.h | 106 +-
src/Desktop/MvQFolderModel.cc | 264 ++-
src/Desktop/MvQFolderModel.h | 33 +-
src/Desktop/MvQFolderPanel.cc | 398 +++-
src/Desktop/MvQFolderPanel.h | 58 +-
src/Desktop/MvQFolderViewBase.cc | 554 ++++-
src/Desktop/MvQFolderViewBase.h | 52 +-
src/Desktop/MvQFolderViewDelegate.cc | 163 +-
src/Desktop/MvQFolderViewDelegate.h | 19 +-
src/Desktop/MvQFolderViewHandler.cc | 174 +-
src/Desktop/MvQFolderViewHandler.h | 37 +-
src/Desktop/MvQFolderWidget.cc | 374 ++--
src/Desktop/MvQFolderWidget.h | 68 +-
src/Desktop/MvQGeoHelp.cc | 2 +-
src/Desktop/MvQIconFolderView.cc | 2128 +++++++++++++++++---
src/Desktop/MvQIconFolderView.h | 214 +-
src/Desktop/MvQIconFolderViewBase.cc | 924 ---------
src/Desktop/MvQIconHolder.cc | 30 +-
src/Desktop/MvQIconHolder.h | 1 +
src/Desktop/MvQIconMimeData.cc | 19 +-
src/Desktop/MvQIconMimeData.h | 18 +-
src/Desktop/MvQIconProvider.cc | 51 +-
src/Desktop/MvQIconProvider.h | 5 +-
src/Desktop/MvQIconStripView.cc | 58 +-
src/Desktop/MvQIconStripView.h | 11 +-
src/Desktop/MvQListFolderViewBase.cc | 497 +++++
...conFolderViewBase.h => MvQListFolderViewBase.h} | 34 +-
src/Desktop/MvQLogDialog.cc | 111 +-
src/Desktop/MvQLogDialog.h | 10 +-
src/Desktop/MvQNewIconWidget.cc | 439 ++--
src/Desktop/MvQNewIconWidget.h | 64 +-
src/Desktop/MvQObjectBrowser.cc | 117 --
src/Desktop/MvQObjectBrowser.h | 53 -
src/Desktop/MvQPathWidget.cc | 234 ++-
src/Desktop/MvQPathWidget.h | 38 +
src/Desktop/MvQRecentIcons.cc | 69 +
src/Desktop/MvQRecentIcons.h | 41 +
src/Desktop/MvQRequestPanelLine.cc | 52 +-
src/Desktop/MvQRequestPanelLine.h | 3 +-
src/Desktop/MvQRequestPanelWidget.cc | 83 +-
src/Desktop/MvQRequestPanelWidget.h | 9 +-
src/Desktop/MvQScrolledTextLine.cc | 13 +-
src/Desktop/MvQScrolledTextLine.h | 2 +-
src/Desktop/MvQSearchPanel.cc | 366 ++++
src/Desktop/MvQSearchPanel.h | 115 ++
src/Desktop/MvQStringLine.cc | 12 +-
src/Desktop/MvQTextLine.cc | 2 +-
src/Desktop/MvQTheme.cc | 242 +++
src/Desktop/MvQTheme.h | 40 +
src/Desktop/MvQTools.cc | 24 +-
src/Desktop/MvQTools.h | 8 +-
src/Desktop/Parameter.cc | 6 +-
src/Desktop/Protocol.h | 5 +-
src/Desktop/ReplyObserver.cc | 8 +-
src/Desktop/ReplyObserver.h | 5 +-
src/Desktop/RequestPanel.cc | 28 +-
src/Desktop/RequestPanel.h | 3 +
src/Desktop/RequestPanelItem.cc | 4 +-
src/Desktop/RequestPanelItem.h | 1 +
src/Desktop/ResolveTransaction.cc | 74 +
src/Desktop/ResolveTransaction.h | 51 +
src/Desktop/RootFolder.cc | 3 +-
src/Desktop/ServiceEditor.cc | 17 +-
src/Desktop/SimpleEditor.cc | 2 +-
src/Desktop/StandardObject.cc | 4 +
src/Desktop/State.h | 7 +-
src/Desktop/SystemFolder.h | 5 +-
src/Desktop/Task.h | 5 +-
src/Desktop/TaskObserver.h | 5 +-
src/Desktop/TemporaryEditor.cc | 4 +-
src/Desktop/TemporaryFolder.cc | 38 +
src/Desktop/TemporaryFolder.h | 34 +
src/Desktop/Tools.cc | 6 +-
src/Desktop/Transaction.h | 5 +-
src/Desktop/ViewEditor.cc | 10 +-
src/Desktop/Wastebasket.h | 5 +-
src/Desktop/desktop.qrc | 23 +-
src/Divrot/Makefile.in | 4 +
src/Ecfile/Makefile.in | 4 +
src/Event/Event.cc | 10 +-
src/Event/Makefile.in | 4 +
src/ExamineManager/Makefile.in | 4 +
src/Flextra/Makefile.in | 4 +
src/FlextraExaminer/Makefile.in | 4 +
src/GeopExaminer/Makefile.in | 4 +
src/GribExaminer/GribExaminer.cc | 12 +-
src/GribExaminer/GribExaminer.h | 5 +-
src/GribExaminer/Makefile.in | 4 +
src/GribExaminer/MvMain.cc | 5 +-
src/GribVectors/Makefile.in | 4 +
src/Hovmoeller/HovArea.cc | 62 +-
src/Hovmoeller/HovArea.h | 10 +-
src/Hovmoeller/HovHeight.cc | 41 +
src/Hovmoeller/HovHeight.h | 8 +-
src/Hovmoeller/HovLine.cc | 48 +
src/Hovmoeller/HovLine.h | 10 +-
src/Hovmoeller/HovToolkit.cc | 94 +-
src/Hovmoeller/HovToolkit.h | 15 +-
src/Hovmoeller/Makefile.in | 4 +
src/Hovmoeller/ObjectSpec.Hovmoeller | 6 +-
src/KML/Makefile.in | 4 +
src/KML/ObjectSpec.GeoToKML | 2 +-
src/Macro/Makefile.in | 4 +
src/Macro/grib.cc | 2 +
src/Macro/netcdf.cc | 49 +
src/MacroEditor/MacroEdit.cc | 12 +-
src/MacroEditor/Makefile.in | 4 +
src/MacroEditor/mvplaintextedit.cc | 4 +-
src/MagML/Makefile.in | 4 +
src/Makefile.am | 6 +-
src/Makefile.in | 26 +-
src/MarsCatalog/MARS_CATALOG.xpm | 758 -------
src/MarsCatalog/Makefile.am | 34 +-
src/MarsCatalog/Makefile.in | 342 ++--
src/MarsCatalog/MvMain.cc | 94 +-
src/MarsCatalog/MvQMarsBrowser.cc | 2 +-
src/MarsCatalog/ObjectSpec.MarsCatalog | 26 -
src/Meteogram/Makefile.in | 4 +
src/MetviewUI/FileObject.cc | 14 +-
src/MetviewUI/FolderDrawers.cc | 7 +-
src/MetviewUI/IconClass.cc | 12 +
src/MetviewUI/IconClass.h | 2 +
src/MetviewUI/Makefile.in | 4 +
src/MetviewUI/MetviewTask.cc | 27 +-
src/MvApp/Makefile.in | 4 +
src/NcExaminer/Makefile.in | 4 +
src/ObsFilter/Makefile.in | 4 +
src/ObsFilter/ObsFilter.cc | 14 +-
src/Obstat/Makefile.in | 4 +
src/ObstatCurveTool/Makefile.in | 4 +
src/ObstatScatterTool/Makefile.in | 4 +
src/Odb/Makefile.in | 4 +
src/OdbExaminer/Makefile.in | 4 +
src/OgcClient/Makefile.in | 4 +
src/OperaRadar/Makefile.in | 4 +
src/PM_Tephigram/Makefile.am | 14 -
src/PM_Tephigram/Makefile.in | 724 -------
src/PM_Tephigram/MvTephiData.cc | 715 -------
src/PM_Tephigram/MvTephiData.h | 179 --
src/PM_Tephigram/MvTephiFrame.cc | 741 -------
src/PM_Tephigram/MvTephiFrame.h | 90 -
src/PM_Tephigram/MvTephiParams.cc | 146 --
src/PM_Tephigram/MvTephiParams.h | 82 -
src/PM_Tephigram/Tephigrams.cc | 500 -----
src/Percentile/Makefile.in | 4 +
src/PottF/Makefile.am | 2 +-
src/PottF/Makefile.in | 22 +-
.../TaskObserver.h => PottF/include/grbll.h} | 21 +-
src/{Desktop/State.h => PottF/include/grbsec.h} | 21 +-
.../TaskObserver.h => PottF/include/grbsh.h} | 25 +-
src/Relhum/Makefile.in | 4 +
src/Reprojection/Makefile.in | 4 +
src/Reprojection/ReprojectService.cc | 2 +-
src/Rttov/Makefile.in | 4 +
src/Scm/Makefile.in | 4 +
src/Scm/ScmRun.cc | 12 +-
src/ScmEditor/Makefile.in | 4 +
src/Spectra/Makefile.am | 32 +
src/{WebAccess => Spectra}/Makefile.in | 208 +-
src/Spectra/ObjectSpec.Spectra | 50 +
src/Spectra/SPECTRA.xpm | 40 +
src/Spectra/Spectra.cc | 567 ++++++
src/Spectra/Spectra.h | 88 +
src/Spectra/SpectraDef | 129 ++
src/Spectra/SpectraRules | 0
src/Spectra/speccont.F | 167 ++
src/Spectra/specgraph.F | 123 ++
src/Spectra/specpro.F | 52 +
src/Spectra/spectra.F | 160 ++
src/Stations/Makefile.in | 4 +
src/StdAppManager/Makefile.in | 4 +
src/StdAppManager/NetcdfPlusDef | 17 +-
src/StdAppManager/NetcdfPlusRules | 20 +
src/StdAppManager/ObjectSpec.StdAppManager | 2 +-
src/StdAppManager/StdAppManager.cc | 37 +-
src/Thermo/BufrThermo.cc | 475 +++++
src/Thermo/BufrThermo.h | 76 +
src/Thermo/DataThermo.cc | 590 ++++++
src/Thermo/DataThermo.h | 208 ++
src/Thermo/GribThermo.cc | 494 +++++
src/Thermo/GribThermo.h | 47 +
src/Thermo/Makefile.am | 40 +
src/{XSection => Thermo}/Makefile.in | 213 +-
src/Thermo/ObjectSpec.Thermo | 65 +
src/Thermo/ParamsThermo.cc | 132 ++
src/Thermo/ParamsThermo.h | 66 +
src/Thermo/THERMODATA.xpm | 48 +
src/Thermo/THERMOVIEW.xpm | 41 +
src/Thermo/Thermo.cc | 89 +
src/Thermo/Thermo.h | 70 +
src/Thermo/ThermoDataDef | 163 ++
src/Thermo/ThermoDataRules | 13 +
src/Thermo/ThermoViewDef | 65 +
src/Thermo/ThermoViewRules | 2 +
src/Vapor/Makefile.am | 40 +
src/{Scm => Vapor}/Makefile.in | 127 +-
src/Vapor/ObjectSpec.Vapor | 77 +
src/Vapor/VaporPrepare.cc | 606 ++++++
src/Vapor/VaporPrepareDef | 113 ++
src/Vapor/VaporPrepareRules | 15 +
src/Vapor/gribToVapor.cc | 206 ++
src/Velstr/Makefile.in | 4 +
src/VisTools/Makefile.in | 4 +
src/WebAccess/Makefile.in | 4 +
src/XSection/Average.cc | 87 +-
src/XSection/Average.h | 15 +-
src/XSection/CrossS.cc | 118 +-
src/XSection/CrossS.h | 10 +-
src/XSection/Makefile.in | 4 +
src/XSection/ObjectSpec.XSection | 3 +
src/XSection/Vprofile.cc | 122 +-
src/XSection/Vprofile.h | 15 +-
src/XSection/Xsect.cc | 234 ++-
src/XSection/Xsect.h | 32 +-
src/images/Makefile.am | 23 +-
src/images/Makefile.in | 27 +-
src/images/add_drawer.svg | 301 +++
src/images/add_icon.svg | 343 ++++
src/images/add_tab.svg | 301 +++
src/images/{home.svg => arrow_drop_target.svg} | 80 +-
src/images/big_arrow_left.svg | 151 +-
src/images/big_arrow_right.svg | 151 +-
src/images/big_arrow_up.svg | 149 +-
src/images/bookmark.svg | 12 +-
src/images/{bookmark.svg => bookmark_empty.svg} | 16 +-
src/images/create_folder.svg | 198 +-
src/images/create_macro.svg | 75 +-
src/images/detailed_view.svg | 533 +++--
src/images/{link.svg => directory_arrow.svg} | 70 +-
src/images/drawer.svg | 114 +-
src/images/drawer_close.svg | 143 ++
src/images/drawer_open.svg | 143 ++
src/images/duplicate.svg | 63 +-
src/images/edit.svg | 17 +-
src/images/editcopy.svg | 28 +-
src/images/editcut.svg | 33 +-
src/images/examine.svg | 79 +-
src/images/folder.svg | 160 +-
src/images/history.svg | 28 +-
src/images/home.svg | 339 +++-
src/images/icon_group.svg | 24 +-
src/images/icon_view.svg | 1054 ++++++++--
src/images/link.svg | 56 +-
src/images/{home.svg => menu_arrow_down.svg} | 80 +-
src/images/padlock.svg | 160 +-
src/images/{examine.svg => reset_lineEditor.svg} | 154 +-
src/images/{examine.svg => search_decor.svg} | 83 +-
src/images/simple_view.svg | 1144 +++++++++++
src/images/{duplicate.svg => statusbar.svg} | 142 +-
src/images/use_global_iconsize.svg | 279 +++
src/images/videowall.svg | 288 +++
src/images/wall_screen.svg | 225 +++
src/images/wall_screen_selected.svg | 225 +++
src/images/wastebasket.svg | 331 +--
src/libFTimeUtil/Makefile.in | 4 +
src/libMars-ecregrid/Makefile.in | 4 +
src/libMars/Makefile.in | 4 +
src/libMars/field.c | 4 +-
src/libMars/nfdbbase.c | 10 +-
src/libMars/request.c | 16 +-
src/libMars/timer.c | 13 +-
src/libMars/xservice.c | 2 +-
src/libMetview/Makefile.in | 4 +
src/libMetview/MvApplication.cc | 10 +
src/libMetview/MvApplication.h | 1 +
src/libMetview/MvFieldSet.cc | 4 +
src/libMetview/MvGeoPoints.cc | 24 +-
src/libMetview/MvGeoPoints.h | 3 +-
src/libMetview/MvGrid.cc | 17 +-
src/libMetview/MvGrid.h | 13 +-
src/libMetview/MvLanguage.cc | 6 +-
src/libMetview/MvRequest.cc | 7 +-
src/libMetview/MvScanFileType.cc | 1 +
src/libMetview/Path.cc | 6 +-
src/libMetview/Path.h | 3 +-
src/libMvMotif/Makefile.in | 4 +
src/libMvNetCDF/Makefile.in | 4 +
src/libMvNetCDF/MvNetCDF.cc | 16 +-
src/libMvNetCDF/MvNetCDF.h | 6 +-
src/libMvQtGui/Makefile.am | 2 +-
src/libMvQtGui/Makefile.in | 6 +-
src/libMvQtGui/MvQAbstractMessageExaminer.cc | 9 +-
src/libMvQtGui/MvQFileDialog.cc | 47 +-
src/libMvQtGui/MvQFileDialog.h | 1 +
src/libMvQtGui/MvQLineEdit.cc | 70 +-
src/libMvQtGui/MvQLineEdit.h | 10 +-
src/libMvQtGui/MvQMainWindow.cc | 7 +-
src/libMvQtGui/MvQMainWindow.h | 2 +
src/libMvQtGui/MvQOdbModel.cc | 16 +-
src/libMvQtGui/MvQScmDataWidget.cc | 8 +-
src/libMvQtGui/mail.qrc | 5 +
src/libMvQtGui/mail.qrc.cpp | 374 ----
src/libMvQtUtil/Makefile.am | 7 +-
src/libMvQtUtil/Makefile.in | 64 +-
src/libMvQtUtil/MvQKeyManager.cc | 17 +
src/libMvQtUtil/MvQNetworkProxyFactory.cc | 2 +-
src/libMvQtUtil/MvQWeatherRoomManager.cc | 166 ++
src/libMvQtUtil/MvQWeatherRoomManager.h | 51 +
src/libUtil/GribMetaData.cc | 82 +-
src/libUtil/GribMetaData.h | 9 +-
src/libUtil/Makefile.in | 4 +
src/libUtil/MvMiscelaneous.cc | 65 +-
src/libUtil/MvMiscelaneous.h | 3 +
src/metview_config.h | 18 +-
src/metview_config.h.in | 6 +
src/uPlot/AverageView.cc | 61 +-
src/uPlot/AverageView.h | 7 +-
src/uPlot/CommonXSectView.cc | 3 +-
src/uPlot/CommonXSectView.h | 2 +-
src/uPlot/DataBuilder.cc | 84 +-
src/uPlot/HovmoellerView.cc | 131 +-
src/uPlot/HovmoellerView.h | 2 +-
src/uPlot/MagicsTranslator.cc | 33 +-
src/uPlot/Makefile.am | 31 +-
src/uPlot/Makefile.in | 140 +-
src/uPlot/MapView.cc | 128 +-
src/uPlot/MvQCursorData.cc | 157 +-
src/uPlot/MvQCursorData.h | 4 +-
src/uPlot/MvQWeatherRoomDialog.cc | 676 +++++++
src/uPlot/MvQWeatherRoomDialog.h | 188 ++
src/uPlot/ObjectList.cc | 36 +-
src/uPlot/ObjectList.h | 2 +-
src/uPlot/PlotMod.cc | 3 +-
src/uPlot/PlotPageBuilder.cc | 172 +-
src/uPlot/PmGeneralProjection.cc | 162 +-
src/uPlot/Presentable.h | 4 +-
src/uPlot/SuperPage.cc | 36 +-
src/uPlot/SuperPage.h | 9 +-
src/uPlot/VertProfView.cc | 111 +-
src/uPlot/VertProfView.h | 9 +-
src/uPlot/XSectView.cc | 58 +-
src/uPlot/XSectView.h | 6 +
src/uPlot/uPlot.cc | 33 +-
src/uPlot/uPlot.h | 2 +
src/uPlot/uPlot.qrc | 6 +-
src/uPlot/uPlotBase.cc | 74 +-
src/uPlot/uPlotBase.h | 9 +
src/uPlot/uPlotManager.cc | 1 +
test/Makefile.in | 4 +
test/macros/Makefile.in | 4 +
version.sh | 6 +-
612 files changed, 33399 insertions(+), 16152 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 35e78ee..160822f 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
SUBDIRS = src scripts share/metview test
DIST_SUBDIRS = src scripts share/metview test rpms
-EXTRA_DIST = LICENSE NOTICE config version.sh docs/Metview_Installation_Guide.pdf metview.desktop
+EXTRA_DIST = LICENSE NOTICE config version.sh docs/Metview_Installation_Guide.pdf metview.desktop bootstrap
#bin_SCRIPTS = bin/metview.sh
ACLOCAL_AMFLAGS = -I m4
diff --git a/Makefile.in b/Makefile.in
index c89e48b..50fecbd 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -43,6 +43,7 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
config/ltmain.sh config/missing config/ylwrap
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -142,6 +143,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -165,6 +168,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -342,7 +346,7 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = src scripts share/metview test
DIST_SUBDIRS = src scripts share/metview test rpms
-EXTRA_DIST = LICENSE NOTICE config version.sh docs/Metview_Installation_Guide.pdf metview.desktop
+EXTRA_DIST = LICENSE NOTICE config version.sh docs/Metview_Installation_Guide.pdf metview.desktop bootstrap
#bin_SCRIPTS = bin/metview.sh
ACLOCAL_AMFLAGS = -I m4
diff --git a/NOTICE b/NOTICE
index d4540d0..9acb6ff 100644
--- a/NOTICE
+++ b/NOTICE
@@ -37,6 +37,22 @@ the GNU Autotools environment. More details can be found at:
http://www.tsunanet.net/autotroll/
+AX_BOOST_BASE
+=============
+
+An autotools extension to allow the testing for a particular version of Boost.
+
+# LICENSE
+#
+# Copyright (c) 2008 Thomas Porschberg <thomas at randspringer.de>
+# Copyright (c) 2009 Peter Adolphs
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+
JSON_SPIRIT_READER
==================
diff --git a/aux_build/ax_boost_base.m4 b/aux_build/ax_boost_base.m4
new file mode 100644
index 0000000..54a2a1b
--- /dev/null
+++ b/aux_build/ax_boost_base.m4
@@ -0,0 +1,258 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_boost_base.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# DESCRIPTION
+#
+# Test for the Boost C++ libraries of a particular version (or newer)
+#
+# If no path to the installed boost library is given the macro searchs
+# under /usr, /usr/local, /opt and /opt/local and evaluates the
+# $BOOST_ROOT environment variable. Further documentation is available at
+# <http://randspringer.de/boost/index.html>.
+#
+# This macro calls:
+#
+# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
+#
+# And sets:
+#
+# HAVE_BOOST
+#
+# LICENSE
+#
+# Copyright (c) 2008 Thomas Porschberg <thomas at randspringer.de>
+# Copyright (c) 2009 Peter Adolphs
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 20
+
+AC_DEFUN([AX_BOOST_BASE],
+[
+AC_ARG_WITH([boost],
+ [AS_HELP_STRING([--with-boost@<:@=ARG@:>@],
+ [use Boost library from a standard location (ARG=yes),
+ from the specified location (ARG=<path>),
+ or disable it (ARG=no)
+ @<:@ARG=yes@:>@ ])],
+ [
+ if test "$withval" = "no"; then
+ want_boost="no"
+ elif test "$withval" = "yes"; then
+ want_boost="yes"
+ ac_boost_path=""
+ else
+ want_boost="yes"
+ ac_boost_path="$withval"
+ fi
+ ],
+ [want_boost="yes"])
+
+
+AC_ARG_WITH([boost-libdir],
+ AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
+ [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]),
+ [
+ if test -d "$withval"
+ then
+ ac_boost_lib_path="$withval"
+ else
+ AC_MSG_ERROR(--with-boost-libdir expected directory name)
+ fi
+ ],
+ [ac_boost_lib_path=""]
+)
+
+if test "x$want_boost" = "xyes"; then
+ boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
+ boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
+ boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
+ boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
+ boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
+ if test "x$boost_lib_version_req_sub_minor" = "x" ; then
+ boost_lib_version_req_sub_minor="0"
+ fi
+ WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
+ AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
+ succeeded=no
+
+ dnl On 64-bit systems check for system libraries in both lib64 and lib.
+ dnl The former is specified by FHS, but e.g. Debian does not adhere to
+ dnl this (as it rises problems for generic multi-arch support).
+ dnl The last entry in the list is chosen by default when no libraries
+ dnl are found, e.g. when only header-only libraries are installed!
+ libsubdirs="lib"
+ ax_arch=`uname -m`
+ if test $ax_arch = x86_64 -o $ax_arch = ppc64 -o $ax_arch = s390x -o $ax_arch = sparc64; then
+ libsubdirs="lib64 lib lib64"
+ fi
+
+ dnl first we check the system location for boost libraries
+ dnl this location ist chosen if boost libraries are installed with the --layout=system option
+ dnl or if you install boost with RPM
+ if test "$ac_boost_path" != ""; then
+ BOOST_CPPFLAGS="-I$ac_boost_path/include"
+ for ac_boost_path_tmp in $libsubdirs; do
+ if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then
+ BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp"
+ break
+ fi
+ done
+ elif test "$cross_compiling" != yes; then
+ for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
+ if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
+ for libsubdir in $libsubdirs ; do
+ if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
+ done
+ BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir"
+ BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
+ break;
+ fi
+ done
+ fi
+
+ dnl overwrite ld flags if we have required special directory with
+ dnl --with-boost-libdir parameter
+ if test "$ac_boost_lib_path" != ""; then
+ BOOST_LDFLAGS="-L$ac_boost_lib_path"
+ fi
+
+ CPPFLAGS_SAVED="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+ export CPPFLAGS
+
+ LDFLAGS_SAVED="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
+ AC_REQUIRE([AC_PROG_CXX])
+ AC_LANG_PUSH(C++)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <boost/version.hpp>
+ ]], [[
+ #if BOOST_VERSION >= $WANT_BOOST_VERSION
+ // Everything is okay
+ #else
+ # error Boost version is too old
+ #endif
+ ]])],[
+ AC_MSG_RESULT(yes)
+ succeeded=yes
+ found_system=yes
+ ],[
+ ])
+ AC_LANG_POP([C++])
+
+
+
+ dnl if we found no boost with system layout we search for boost libraries
+ dnl built and installed without the --layout=system option or for a staged(not installed) version
+ if test "x$succeeded" != "xyes"; then
+ _version=0
+ if test "$ac_boost_path" != ""; then
+ if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+ for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+ _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+ V_CHECK=`expr $_version_tmp \> $_version`
+ if test "$V_CHECK" = "1" ; then
+ _version=$_version_tmp
+ fi
+ VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+ BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
+ done
+ fi
+ else
+ if test "$cross_compiling" != yes; then
+ for ac_boost_path in /usr /usr/local /opt /opt/local ; do
+ if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+ for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+ _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+ V_CHECK=`expr $_version_tmp \> $_version`
+ if test "$V_CHECK" = "1" ; then
+ _version=$_version_tmp
+ best_path=$ac_boost_path
+ fi
+ done
+ fi
+ done
+
+ VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+ BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
+ if test "$ac_boost_lib_path" = ""; then
+ for libsubdir in $libsubdirs ; do
+ if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
+ done
+ BOOST_LDFLAGS="-L$best_path/$libsubdir"
+ fi
+ fi
+
+ if test "x$BOOST_ROOT" != "x"; then
+ for libsubdir in $libsubdirs ; do
+ if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
+ done
+ if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
+ version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
+ stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
+ stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
+ V_CHECK=`expr $stage_version_shorten \>\= $_version`
+ if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
+ AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
+ BOOST_CPPFLAGS="-I$BOOST_ROOT"
+ BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
+ fi
+ fi
+ fi
+ fi
+
+ CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+ export CPPFLAGS
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
+ AC_LANG_PUSH(C++)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <boost/version.hpp>
+ ]], [[
+ #if BOOST_VERSION >= $WANT_BOOST_VERSION
+ // Everything is okay
+ #else
+ # error Boost version is too old
+ #endif
+ ]])],[
+ AC_MSG_RESULT(yes)
+ succeeded=yes
+ found_system=yes
+ ],[
+ ])
+ AC_LANG_POP([C++])
+ fi
+
+ if test "$succeeded" != "yes" ; then
+ if test "$_version" = "0" ; then
+ AC_MSG_NOTICE([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.]])
+ else
+ AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
+ fi
+ # execute ACTION-IF-NOT-FOUND (if present):
+ ifelse([$3], , :, [$3])
+ else
+ AC_SUBST(BOOST_CPPFLAGS)
+ AC_SUBST(BOOST_LDFLAGS)
+ AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
+ # execute ACTION-IF-FOUND (if present):
+ ifelse([$2], , :, [$2])
+ fi
+
+ CPPFLAGS="$CPPFLAGS_SAVED"
+ LDFLAGS="$LDFLAGS_SAVED"
+fi
+
+])
diff --git a/bootstrap b/bootstrap
new file mode 100755
index 0000000..c36875e
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,13 @@
+#! /bin/sh
+set -x
+if test "`uname`x" = "Darwinx"
+then
+ glibtoolize --force
+else
+ libtoolize --force
+fi
+aclocal
+autoheader
+# '--add-missing' needs replacing if ECMWF license!!!
+automake --add-missing --copy
+autoconf
diff --git a/configure b/configure
index ad8f4a3..5a77d6f 100755
--- a/configure
+++ b/configure
@@ -805,6 +805,8 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
+METVIEW_WEATHER_ROOM_FALSE
+METVIEW_WEATHER_ROOM_TRUE
METVIEW_SCM_AUX_FALSE
METVIEW_SCM_AUX_TRUE
METVIEW_INPE_FALSE
@@ -875,6 +877,8 @@ METVIEW_DEBUG_FALSE
METVIEW_DEBUG_TRUE
MVSTARTDIR
METVIEW_EXTRA_TITLE
+BOOST_LDFLAGS
+BOOST_CPPFLAGS
MARS_HOME
MARS_ODB_ACCESS
ODB1_USE_SCRIPT
@@ -883,11 +887,11 @@ ODB1_BIN
ODB_LIBDIR
METVIEW_ECREGRID
ECREGRID_LIBS
+MV_EMOSLIB
LDFLAGS_INLINE
GRIBAPI_LIBS
GRIB_API_LIB
GRIB_API_INC
-MV_EMOSLIB
MAGPLUS_LIBDIR
MAGICS_LIBS
MAGICS_CFLAGS
@@ -914,6 +918,7 @@ FLIBS
CPPLIBS
AXX
MV_ENVIRON
+EXTRA_LD_LIBRARY_PATHS
HAVE_KSH
PKGCONFIG_REQUIRES
STARTUP_SCRIPT
@@ -1078,9 +1083,9 @@ enable_qtdebug
enable_magics
with_magics_home
with_netcdf
+with_grib_api
with_emos_libraries
with_emos_libname
-with_grib_api
enable_ecregrid
with_ecregrid
enable_inpe
@@ -1100,6 +1105,9 @@ with_proj4
with_flextra
with_scm
enable_scm_aux_files
+enable_weather_room
+with_boost
+with_boost_libdir
with_python_command
with_extra_title
enable_debug
@@ -1776,6 +1784,7 @@ Optional Features:
--enable-obstat enable the OBSTAT support (only at ECMWF) [default=no]
--enable-opera-radar enable OPERA radar support (requires proj4) [default=yes]
--enable-scm-aux-files enable SCM auxillary files [default=no]
+ --enable-weather-room enable the ECMWF Weather Room support (only at ECMWF) [default=no]
--enable-debug Turn on debugging [default=no]
--enable-prof Turn on profiling (ECMWF internal) [default=no]
@@ -1791,10 +1800,10 @@ Optional Packages:
--with-qt Path to Qt [Look in PATH and /usr/local/Trolltech]
--with-magics-home Location of Magics libraries
--with-netcdf Prefix of NetCDF libraries and headers.
+ --with-grib-api Prefix of GRIB API libraries and headers.
--with-emos-libraries Location of EMOS libraries [default is
/usr/local/lib]
--with-emos-libname Name of EMOS library [default is emosR64]
- --with-grib-api Prefix of GRIB API libraries and headers.
--with-ecregrid Prefix of ecRegrid libraries and headers.
--with-odb Prefix of ODB libraries and headers.
--with-odb1-bin Path to the ODB-1 bin directory.
@@ -1804,6 +1813,15 @@ Optional Packages:
--with-proj4 Prefix of Proj4 libraries and headers.
--with-flextra FLEXTRA executable path.
--with-scm SCM executable path.
+ --with-boost[=ARG] use Boost library from a standard location
+ (ARG=yes), from the specified location (ARG=<path>),
+ or disable it (ARG=no) [ARG=yes]
+ --with-boost-libdir=LIB_DIR
+ Force given directory for boost libraries. Note that
+ this will override library path detection, so use
+ this parameter only if default library detection
+ fails and you know exactly where your boost
+ libraries are located.
--with-python-command Python interpreter's path.
--with-extra-title Extra information for the title bar
@@ -6559,13 +6577,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
else
lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext
- (eval echo "\"\$as_me:6562: $ac_compile\"" >&5)
+ (eval echo "\"\$as_me:6580: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err)
cat conftest.err >&5
- (eval echo "\"\$as_me:6565: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval echo "\"\$as_me:6583: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
cat conftest.err >&5
- (eval echo "\"\$as_me:6568: output\"" >&5)
+ (eval echo "\"\$as_me:6586: output\"" >&5)
cat conftest.out >&5
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin"
@@ -7770,7 +7788,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 7773 "configure"' > conftest.$ac_ext
+ echo '#line 7791 "configure"' > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -9988,11 +10006,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:9991: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:10009: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:9995: \$? = $ac_status" >&5
+ echo "$as_me:10013: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -10327,11 +10345,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:10330: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:10348: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:10334: \$? = $ac_status" >&5
+ echo "$as_me:10352: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -10432,11 +10450,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:10435: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:10453: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:10439: \$? = $ac_status" >&5
+ echo "$as_me:10457: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -10487,11 +10505,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:10490: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:10508: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:10494: \$? = $ac_status" >&5
+ echo "$as_me:10512: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -12854,7 +12872,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12857 "configure"
+#line 12875 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12950,7 +12968,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12953 "configure"
+#line 12971 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14906,11 +14924,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14909: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14927: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14913: \$? = $ac_status" >&5
+ echo "$as_me:14931: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -15005,11 +15023,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15008: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:15026: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:15012: \$? = $ac_status" >&5
+ echo "$as_me:15030: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -15057,11 +15075,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15060: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:15078: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:15064: \$? = $ac_status" >&5
+ echo "$as_me:15082: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -16437,11 +16455,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16440: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16458: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:16444: \$? = $ac_status" >&5
+ echo "$as_me:16462: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -16536,11 +16554,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16539: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16557: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:16543: \$? = $ac_status" >&5
+ echo "$as_me:16561: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -16588,11 +16606,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16591: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16609: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:16595: \$? = $ac_status" >&5
+ echo "$as_me:16613: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -19029,11 +19047,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:19032: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:19050: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:19036: \$? = $ac_status" >&5
+ echo "$as_me:19054: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -19128,11 +19146,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:19131: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:19149: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:19135: \$? = $ac_status" >&5
+ echo "$as_me:19153: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -19180,11 +19198,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:19183: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:19201: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:19187: \$? = $ac_status" >&5
+ echo "$as_me:19205: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -21407,10 +21425,9 @@ case "${host}" in
F2o_RULE="\$(FC) -c \$(FC_FLAGS) \$(FPP_FLAGS) \$*.F"
MAJOR_VERSION=`uname -r | awk -F. ' { print $2 }'`
AXX=""
- CFLAGS="$CFLAGS -Dmacosx -I/usr/include/sys"
- CXXFLAGS="$CXXFLAGS -Dmacosx -I/usr/include/sys"
- CPPFLAGS="$CPPFLAGS -I/opt/local/include -I/usr/local/include"
- LDFLAGS="$LDFLAGS -L/opt/local/lib -L/usr/local/lib"
+ CFLAGS="$CFLAGS -I/usr/local/include"
+ CPPFLAGS="$CPPFLAGS -I/usr/include/sys -I/usr/local/include"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
;;
# Compaq alpha ev68-dec-osf5.1 compiler
*-dec-osf5.* )
@@ -21449,10 +21466,18 @@ fi
# at ECMWF on Red Hat 6 (ecgb), libfdb is in a difference place
+EXTRA_LD_LIBRARY_PATHS=""
+
if test "x$SITE_NAME" = 'xecmwf'; then
if test "x$OS_VERSION" = 'xrhel6'; then
FDBLIB="-L/usr/local/apps/fdb/current/lib -lfdb"
fi
+
+ if test "x$OS_VERSION" = 'xopensuse131'; then
+ FDBLIB_PATH="/usr/local/apps/fdb/4.6.0/lib"
+ FDBLIB="-L${FDBLIB_PATH} -lfdb"
+ EXTRA_LD_LIBRARY_PATHS="${FDBLIB_PATH}:${EXTRA_LD_LIBRARY_PATHS}"
+ fi
fi
@@ -21460,6 +21485,8 @@ fi
+
+
#AC_SUBST(ARFLAGS)
#AC_SUBST(AR_FLAGS)
@@ -23661,6 +23688,18 @@ $as_echo "yes" >&6; }
magics_gd=no
fi
+ # the autotools installation of Magics does not have the following flag,
+ # so we test for it by trying to ask for it and read the return value
+ if test "`grep with.qtlib ${MAGPLUS_HOME}/bin/magics-config > /dev/null; echo $?`" = 1; then
+ echo "Magics has a separate Qt library (autotools installation)"
+ else
+ if test "x`${MAGPLUS_HOME}/bin/magics-config --with-qtlib`" = xno; then
+ MAGPLUS_LIB_QT=""
+ echo "Magics does not have a separate Qt library (cmake installation)"
+ else
+ echo "Magics has a separate Qt library (cmake installation)"
+ fi
+ fi
MAGPLUS_LIB="${MAGPLUS_LIB} ${MAGPLUSLIB_APPEND}"
##################################
@@ -24140,6 +24179,9 @@ _ACEOF
fi
+
+ CPPFLAGS="${CPPFLAGS} -DMETVIEW_MOTIF"
+
fi
#### end GUI
@@ -24434,104 +24476,6 @@ fi
MAGPLUS_LIB="${MAGPLUS_LIB} ${NETCDF_LIBS}"
-
-
-#############################################################################################################
-#
-# E M O S L I B -- always DOUBLE precision !!!
-#
-
-# emoslib is currently required (or libMars interpolation/subarea extraction, etc)
-# so remove the option to disable it.
-
-#AC_ARG_ENABLE(emos, [[ --enable-emos enable the EmosLib support [default=yes]]],
-# emos=$enableval, emos=yes)
-
-emos="yes"
-
-if test "x$emos" = xyes; then
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EmosLib (ECMWF)" >&5
-$as_echo_n "checking for EmosLib (ECMWF)... " >&6; }
-
- EMOS_LIB_NAME="emosR64"
-
- emos_path=/usr/local/${LIBNAME}
-
-
-# Check whether --with-emos-libraries was given.
-if test "${with_emos_libraries+set}" = set; then :
- withval=$with_emos_libraries; EMOS_LIB_FLAGS="-L$with_emos_libraries";LDFLAGS="$EMOS_LIB_FLAGS $LDFLAGS"; emos_path=$with_emos_libraries
-
-fi
-
-
-
-# Check whether --with-emos-libname was given.
-if test "${with_emos_libname+set}" = set; then :
- withval=$with_emos_libname; EMOS_LIB_NAME="$with_emos_libname"
-
-fi
-
-
- as_ac_Lib=`$as_echo "ac_cv_lib_${EMOS_LIB_NAME}''_pbopen" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pbopen in -l${EMOS_LIB_NAME}" >&5
-$as_echo_n "checking for pbopen in -l${EMOS_LIB_NAME}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-l${EMOS_LIB_NAME} $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pbopen ();
-int
-main ()
-{
-return pbopen ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- eval "$as_ac_Lib=yes"
-else
- eval "$as_ac_Lib=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-eval ac_res=\$$as_ac_Lib
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
- echo "EmosLib detected"
-else
- as_fn_error "Emoslib (${EMOS_LIB_NAME}) could not be linked! Metview requires emoslib with 64-bit reals (usually libemosR64.a). Try setting --with-emos-libraries and --with-emos-libname." "$LINENO" 5
-fi
-
-
- $as_echo "#define METVIEW_EMOS 1" >>confdefs.h
-
- METVIEW_3RDPARTY_LIBS="$METVIEW_3RDPARTY_LIBS -l${EMOS_LIB_NAME}"
-
- MV_EMOSLIB="${EMOS_LIB_FLAGS} -l${EMOS_LIB_NAME}"
-
-
-else
- emos="no"
-fi
-
-
#########################################################################################
#
# Check for GRIB API
@@ -24737,6 +24681,153 @@ GRIB_API_LIB="${GRIB_API_LIB} ${GRIBAPI_LIBS} ${JPEG_LIB}" # for inline fortran/
# for inline fortran/c macros
+
+
+#############################################################################################################
+#
+# E M O S L I B -- always DOUBLE precision !!!
+#
+
+# emoslib is currently required (or libMars interpolation/subarea extraction, etc)
+# so remove the option to disable it.
+
+#AC_ARG_ENABLE(emos, [[ --enable-emos enable the EmosLib support [default=yes]]],
+# emos=$enableval, emos=yes)
+
+emos="yes"
+
+if test "x$emos" = xyes; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EmosLib (ECMWF)" >&5
+$as_echo_n "checking for EmosLib (ECMWF)... " >&6; }
+
+ EMOS_LIB_NAME="emosR64"
+
+ emos_path=/usr/local/${LIBNAME}
+
+
+# Check whether --with-emos-libraries was given.
+if test "${with_emos_libraries+set}" = set; then :
+ withval=$with_emos_libraries; EMOS_LIB_FLAGS="-L$with_emos_libraries";LDFLAGS="$EMOS_LIB_FLAGS $LDFLAGS"; emos_path=$with_emos_libraries
+
+fi
+
+
+
+# Check whether --with-emos-libname was given.
+if test "${with_emos_libname+set}" = set; then :
+ withval=$with_emos_libname; EMOS_LIB_NAME="$with_emos_libname"
+
+fi
+
+
+ as_ac_Lib=`$as_echo "ac_cv_lib_${EMOS_LIB_NAME}''_pbopen" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pbopen in -l${EMOS_LIB_NAME}" >&5
+$as_echo_n "checking for pbopen in -l${EMOS_LIB_NAME}... " >&6; }
+if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-l${EMOS_LIB_NAME} $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pbopen ();
+int
+main ()
+{
+return pbopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ eval "$as_ac_Lib=yes"
+else
+ eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+eval as_val=\$$as_ac_Lib
+ if test "x$as_val" = x""yes; then :
+ echo "EmosLib detected"
+else
+ as_fn_error "Emoslib (${EMOS_LIB_NAME}) could not be linked! Metview requires emoslib with 64-bit reals (usually libemosR64.a). Try setting --with-emos-libraries and --with-emos-libname." "$LINENO" 5
+fi
+
+
+ as_ac_Lib=`$as_echo "ac_cv_lib_${EMOS_LIB_NAME}''_intf2" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for intf2 in -l${EMOS_LIB_NAME}" >&5
+$as_echo_n "checking for intf2 in -l${EMOS_LIB_NAME}... " >&6; }
+if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-l${EMOS_LIB_NAME} ${GRIBAPI_LIBS} ${FLIBS} $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char intf2 ();
+int
+main ()
+{
+return intf2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ eval "$as_ac_Lib=yes"
+else
+ eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+eval as_val=\$$as_ac_Lib
+ if test "x$as_val" = x""yes; then :
+ echo "EmosLib has GRIB_API support"
+else
+ as_fn_error "Emoslib (${EMOS_LIB_NAME}) appears to have been built without GRIB_API support. Please enable this option when rebuilding emoslib." "$LINENO" 5
+fi
+
+
+
+ $as_echo "#define METVIEW_EMOS 1" >>confdefs.h
+
+ METVIEW_3RDPARTY_LIBS="$METVIEW_3RDPARTY_LIBS -l${EMOS_LIB_NAME}"
+
+ MV_EMOSLIB="${EMOS_LIB_FLAGS} -l${EMOS_LIB_NAME}"
+
+
+else
+ emos="no"
+fi
+
+
+
+
#########################################################################################
#
# For ecRegrid header file
@@ -24866,9 +24957,33 @@ eval ac_res=\$$as_ac_File
$as_echo "$ac_res" >&6; }
eval as_val=\$$as_ac_File
if test "x$as_val" = x""yes; then :
- odbnew=yes
+ odbnewstatic=yes
+else
+ odbnewstatic=no
+fi
+
+ as_ac_File=`$as_echo "ac_cv_file_${with_odb}/lib/libOdb.so" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${with_odb}/lib/libOdb.so" >&5
+$as_echo_n "checking for ${with_odb}/lib/libOdb.so... " >&6; }
+if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ test "$cross_compiling" = yes &&
+ as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${with_odb}/lib/libOdb.so"; then
+ eval "$as_ac_File=yes"
+else
+ eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+eval as_val=\$$as_ac_File
+ if test "x$as_val" = x""yes; then :
+ odbnewshared=yes
else
- odbnew=no
+ odbnewshared=no
fi
@@ -24877,6 +24992,12 @@ fi
+ if test "x$odbnewstatic" = xyes -o "x$odbnewshared" = xyes; then
+ odbnew=yes
+ else
+ odbnew=no
+ fi
+
# if using ODB_API 0.9.21:
# [ODB_CPPFLAGS="-DODB_SUPPORT -DOLD_ODB_API -I${with_odb}/include";
@@ -25164,10 +25285,15 @@ fi
if test "x$mars_web_access" = xno ; then
CPPFLAGS="${CPPFLAGS} -DNOCURL"
else
- echo "MARS web api will be built"
- fi
+ echo "MARS web api will be built"
+fi
+# if MARS_ACCESS is none, but web-api support is there, then set MARS_ACCESS to MARS_webapi
+if test "x$MARS_ACCESS" = "xMARS_none" -a "x$mars_web_access" = "xyes" ; then
+ MARS_ACCESS=MARS_webapi
+fi
+
#####################################################################
#
@@ -25377,6 +25503,352 @@ fi
+#####################################################################
+#
+# ECMWF Weather Room support
+# This option enables Metview to export plots directly to a screen
+# in the Weather Room.
+#
+
+
+# Check whether --enable-weather-room was given.
+if test "${enable_weather_room+set}" = set; then :
+ enableval=$enable_weather_room; weather_room=$enableval
+else
+ weather_room=no
+fi
+
+
+if test "x$weather_room" = xyes ; then
+ if test "x$SITE_NAME" = 'xecmwf' ; then
+ # ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_boost_base.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# DESCRIPTION
+#
+# Test for the Boost C++ libraries of a particular version (or newer)
+#
+# If no path to the installed boost library is given the macro searchs
+# under /usr, /usr/local, /opt and /opt/local and evaluates the
+# $BOOST_ROOT environment variable. Further documentation is available at
+# <http://randspringer.de/boost/index.html>.
+#
+# This macro calls:
+#
+# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
+#
+# And sets:
+#
+# HAVE_BOOST
+#
+# LICENSE
+#
+# Copyright (c) 2008 Thomas Porschberg <thomas at randspringer.de>
+# Copyright (c) 2009 Peter Adolphs
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 20
+
+
+
+
+
+# Check whether --with-boost was given.
+if test "${with_boost+set}" = set; then :
+ withval=$with_boost;
+ if test "$withval" = "no"; then
+ want_boost="no"
+ elif test "$withval" = "yes"; then
+ want_boost="yes"
+ ac_boost_path=""
+ else
+ want_boost="yes"
+ ac_boost_path="$withval"
+ fi
+
+else
+ want_boost="yes"
+fi
+
+
+
+
+# Check whether --with-boost-libdir was given.
+if test "${with_boost_libdir+set}" = set; then :
+ withval=$with_boost_libdir;
+ if test -d "$withval"
+ then
+ ac_boost_lib_path="$withval"
+ else
+ as_fn_error "--with-boost-libdir expected directory name" "$LINENO" 5
+ fi
+
+else
+ ac_boost_lib_path=""
+
+fi
+
+
+if test "x$want_boost" = "xyes"; then
+ boost_lib_version_req=1.47
+ boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'`
+ boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'`
+ boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'`
+ boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
+ if test "x$boost_lib_version_req_sub_minor" = "x" ; then
+ boost_lib_version_req_sub_minor="0"
+ fi
+ WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for boostlib >= $boost_lib_version_req" >&5
+$as_echo_n "checking for boostlib >= $boost_lib_version_req... " >&6; }
+ succeeded=no
+
+ libsubdirs="lib"
+ ax_arch=`uname -m`
+ if test $ax_arch = x86_64 -o $ax_arch = ppc64 -o $ax_arch = s390x -o $ax_arch = sparc64; then
+ libsubdirs="lib64 lib lib64"
+ fi
+
+ if test "$ac_boost_path" != ""; then
+ BOOST_CPPFLAGS="-I$ac_boost_path/include"
+ for ac_boost_path_tmp in $libsubdirs; do
+ if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then
+ BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp"
+ break
+ fi
+ done
+ elif test "$cross_compiling" != yes; then
+ for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
+ if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
+ for libsubdir in $libsubdirs ; do
+ if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
+ done
+ BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir"
+ BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
+ break;
+ fi
+ done
+ fi
+
+ if test "$ac_boost_lib_path" != ""; then
+ BOOST_LDFLAGS="-L$ac_boost_lib_path"
+ fi
+
+ CPPFLAGS_SAVED="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+ export CPPFLAGS
+
+ LDFLAGS_SAVED="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <boost/version.hpp>
+
+int
+main ()
+{
+
+ #if BOOST_VERSION >= $WANT_BOOST_VERSION
+ // Everything is okay
+ #else
+ # error Boost version is too old
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ succeeded=yes
+ found_system=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+ if test "x$succeeded" != "xyes"; then
+ _version=0
+ if test "$ac_boost_path" != ""; then
+ if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+ for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+ _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+ V_CHECK=`expr $_version_tmp \> $_version`
+ if test "$V_CHECK" = "1" ; then
+ _version=$_version_tmp
+ fi
+ VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+ BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
+ done
+ fi
+ else
+ if test "$cross_compiling" != yes; then
+ for ac_boost_path in /usr /usr/local /opt /opt/local ; do
+ if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+ for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+ _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+ V_CHECK=`expr $_version_tmp \> $_version`
+ if test "$V_CHECK" = "1" ; then
+ _version=$_version_tmp
+ best_path=$ac_boost_path
+ fi
+ done
+ fi
+ done
+
+ VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+ BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
+ if test "$ac_boost_lib_path" = ""; then
+ for libsubdir in $libsubdirs ; do
+ if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
+ done
+ BOOST_LDFLAGS="-L$best_path/$libsubdir"
+ fi
+ fi
+
+ if test "x$BOOST_ROOT" != "x"; then
+ for libsubdir in $libsubdirs ; do
+ if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
+ done
+ if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
+ version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
+ stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
+ stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'`
+ V_CHECK=`expr $stage_version_shorten \>\= $_version`
+ if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: We will use a staged boost library from $BOOST_ROOT" >&5
+$as_echo "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;}
+ BOOST_CPPFLAGS="-I$BOOST_ROOT"
+ BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
+ fi
+ fi
+ fi
+ fi
+
+ CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+ export CPPFLAGS
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <boost/version.hpp>
+
+int
+main ()
+{
+
+ #if BOOST_VERSION >= $WANT_BOOST_VERSION
+ // Everything is okay
+ #else
+ # error Boost version is too old
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ succeeded=yes
+ found_system=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ fi
+
+ if test "$succeeded" != "yes" ; then
+ if test "$_version" = "0" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation." >&5
+$as_echo "$as_me: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation." >&6;}
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your boost libraries seems to old (version $_version)." >&5
+$as_echo "$as_me: Your boost libraries seems to old (version $_version)." >&6;}
+ fi
+ # execute ACTION-IF-NOT-FOUND (if present):
+ as_fn_error "Boost library not found - if you use RPM do not forget boost-devel" "$LINENO" 5
+ else
+
+
+
+$as_echo "#define HAVE_BOOST /**/" >>confdefs.h
+
+ # execute ACTION-IF-FOUND (if present):
+ :
+ fi
+
+ CPPFLAGS="$CPPFLAGS_SAVED"
+ LDFLAGS="$LDFLAGS_SAVED"
+fi
+
+
+ ac_fn_cxx_check_header_mongrel "$LINENO" "boost/property_tree/json_parser.hpp" "ac_cv_header_boost_property_tree_json_parser_hpp" "$ac_includes_default"
+if test "x$ac_cv_header_boost_property_tree_json_parser_hpp" = x""yes; then :
+
+else
+ as_fn_error "could not successfully compile with Boost::property_tree/json_parser.hpp" "$LINENO" 5
+ unset ac_cv_header_boost_h
+fi
+
+
+
+
+ $as_echo "#define METVIEW_WEATHER_ROOM 1" >>confdefs.h
+
+ echo ""
+ echo "ECMWF Weather Room support enabled"
+ else
+ weather_room="no"
+ echo ""
+ as_fn_error "ECMWF Weather Room option only supported at ECMWF." "$LINENO" 5
+ fi
+fi
+
+
+
#####################################################################
#
@@ -25471,6 +25943,7 @@ MVSTARTDIR=${bindir}/.. # where the startup script will go
+
#
# Enable Debug information
#
@@ -25819,8 +26292,16 @@ else
METVIEW_SCM_AUX_FALSE=
fi
+ if test "$weather_room" = yes; then
+ METVIEW_WEATHER_ROOM_TRUE=
+ METVIEW_WEATHER_ROOM_FALSE='#'
+else
+ METVIEW_WEATHER_ROOM_TRUE='#'
+ METVIEW_WEATHER_ROOM_FALSE=
+fi
-ac_config_files="$ac_config_files Makefile src/Makefile src/AppMod/Makefile src/Event/Makefile src/BufrExaminer/Makefile src/CptecAccess/Makefile src/Datacoverage/Makefile src/DebugTools/Makefile src/Desktop/Makefile src/Divrot/Makefile src/Ecfile/Makefile src/ExamineManager/Makefile src/Flextra/Makefile src/FlextraExaminer/Makefile src/GeopExaminer/Makefile src/GribExaminer/Makefile src/GribVectors/Makefile src/Hovmoeller/Makefile src/KML/Makefile src/Macro/Makefile src/MacroEditor/Make [...]
+
+ac_config_files="$ac_config_files Makefile src/Makefile src/AppMod/Makefile src/Event/Makefile src/BufrExaminer/Makefile src/CptecAccess/Makefile src/Datacoverage/Makefile src/DebugTools/Makefile src/Desktop/Makefile src/Divrot/Makefile src/Ecfile/Makefile src/ExamineManager/Makefile src/Flextra/Makefile src/FlextraExaminer/Makefile src/GeopExaminer/Makefile src/GribExaminer/Makefile src/GribVectors/Makefile src/Hovmoeller/Makefile src/KML/Makefile src/Macro/Makefile src/MacroEditor/Make [...]
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -26035,6 +26516,10 @@ if test -z "${METVIEW_SCM_AUX_TRUE}" && test -z "${METVIEW_SCM_AUX_FALSE}"; then
as_fn_error "conditional \"METVIEW_SCM_AUX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${METVIEW_WEATHER_ROOM_TRUE}" && test -z "${METVIEW_WEATHER_ROOM_FALSE}"; then
+ as_fn_error "conditional \"METVIEW_WEATHER_ROOM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: ${CONFIG_STATUS=./config.status}
ac_write_fail=0
@@ -27196,6 +27681,7 @@ do
"src/Rttov/Makefile") CONFIG_FILES="$CONFIG_FILES src/Rttov/Makefile" ;;
"src/Scm/Makefile") CONFIG_FILES="$CONFIG_FILES src/Scm/Makefile" ;;
"src/ScmEditor/Makefile") CONFIG_FILES="$CONFIG_FILES src/ScmEditor/Makefile" ;;
+ "src/Spectra/Makefile") CONFIG_FILES="$CONFIG_FILES src/Spectra/Makefile" ;;
"src/StdAppManager/Makefile") CONFIG_FILES="$CONFIG_FILES src/StdAppManager/Makefile" ;;
"src/images/Makefile") CONFIG_FILES="$CONFIG_FILES src/images/Makefile" ;;
"src/libFTimeUtil/Makefile") CONFIG_FILES="$CONFIG_FILES src/libFTimeUtil/Makefile" ;;
@@ -27207,12 +27693,13 @@ do
"src/libMvQtGui/Makefile") CONFIG_FILES="$CONFIG_FILES src/libMvQtGui/Makefile" ;;
"src/libUtil/Makefile") CONFIG_FILES="$CONFIG_FILES src/libUtil/Makefile" ;;
"src/libMvQtUtil/Makefile") CONFIG_FILES="$CONFIG_FILES src/libMvQtUtil/Makefile" ;;
+ "src/Thermo/Makefile") CONFIG_FILES="$CONFIG_FILES src/Thermo/Makefile" ;;
"src/uPlot/Makefile") CONFIG_FILES="$CONFIG_FILES src/uPlot/Makefile" ;;
"src/Velstr/Makefile") CONFIG_FILES="$CONFIG_FILES src/Velstr/Makefile" ;;
"src/VisTools/Makefile") CONFIG_FILES="$CONFIG_FILES src/VisTools/Makefile" ;;
- "src/PM_Tephigram/Makefile") CONFIG_FILES="$CONFIG_FILES src/PM_Tephigram/Makefile" ;;
"src/XSection/Makefile") CONFIG_FILES="$CONFIG_FILES src/XSection/Makefile" ;;
"src/Stations/Makefile") CONFIG_FILES="$CONFIG_FILES src/Stations/Makefile" ;;
+ "src/Vapor/Makefile") CONFIG_FILES="$CONFIG_FILES src/Vapor/Makefile" ;;
"src/WebAccess/Makefile") CONFIG_FILES="$CONFIG_FILES src/WebAccess/Makefile" ;;
"scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
"share/metview/Makefile") CONFIG_FILES="$CONFIG_FILES share/metview/Makefile" ;;
@@ -29125,7 +29612,7 @@ if test "x$SITE_NAME" != 'xecmwf'; then
configtmp=${configdef}.tmp
echo "Not at ECMWF: resetting the default proxy setting in ${configdef}."
chmod u+w $configdef
- sed "s/ } = yes/ } = no/g" $configdef > $configtmp
+ sed "s/ } = YES/ } = NO/g" $configdef > $configtmp
mv $configtmp $configdef
fi
@@ -29167,6 +29654,10 @@ echo "MARS ODB --enable-mars-odb=${marsodb}"
echo "OBSTAT --enable-obstat=$obstat"
echo "User Interface --enable-ui=$ui"
echo "INPE --enable-inpe=$inpe"
+if test "x$SITE_NAME" = 'xecmwf'; then
+ echo "WEATHER ROOM --enable-weather-room=$weather_room"
+fi
+
echo ""
echo ""
if test "x$odbnew" = 'xyes' -a "x$odbplot" = 'xno' ; then
diff --git a/configure.ac b/configure.ac
index 65c9cb2..3acdac6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -274,10 +274,9 @@ case "${host}" in
F2o_RULE="\$(FC) -c \$(FC_FLAGS) \$(FPP_FLAGS) \$*.F"
MAJOR_VERSION=`uname -r | awk -F. ' { print $2 }'`
AXX=""
- CFLAGS="$CFLAGS -Dmacosx -I/usr/include/sys"
- CXXFLAGS="$CXXFLAGS -Dmacosx -I/usr/include/sys"
- CPPFLAGS="$CPPFLAGS -I/opt/local/include -I/usr/local/include"
- LDFLAGS="$LDFLAGS -L/opt/local/lib -L/usr/local/lib"
+ CFLAGS="$CFLAGS -I/usr/local/include"
+ CPPFLAGS="$CPPFLAGS -I/usr/include/sys -I/usr/local/include"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
;;
# Compaq alpha ev68-dec-osf5.1 compiler
*-dec-osf5.* )
@@ -316,13 +315,23 @@ fi
# at ECMWF on Red Hat 6 (ecgb), libfdb is in a difference place
+EXTRA_LD_LIBRARY_PATHS=""
+
if test "x$SITE_NAME" = 'xecmwf'; then
if test "x$OS_VERSION" = 'xrhel6'; then
FDBLIB="-L/usr/local/apps/fdb/current/lib -lfdb"
fi
+
+ if test "x$OS_VERSION" = 'xopensuse131'; then
+ FDBLIB_PATH="/usr/local/apps/fdb/4.6.0/lib"
+ FDBLIB="-L${FDBLIB_PATH} -lfdb"
+ EXTRA_LD_LIBRARY_PATHS="${FDBLIB_PATH}:${EXTRA_LD_LIBRARY_PATHS}"
+ fi
fi
+AC_SUBST(EXTRA_LD_LIBRARY_PATHS)
+
AC_SUBST(MV_ENVIRON)
@@ -711,6 +720,18 @@ if test "x$magics" = xyes; then
magics_gd=no
fi
+ # the autotools installation of Magics does not have the following flag,
+ # so we test for it by trying to ask for it and read the return value
+ if test "`grep with.qtlib ${MAGPLUS_HOME}/bin/magics-config > /dev/null; echo $?`" = 1; then
+ echo "Magics has a separate Qt library (autotools installation)"
+ else
+ if test "x`${MAGPLUS_HOME}/bin/magics-config --with-qtlib`" = xno; then
+ MAGPLUS_LIB_QT=""
+ echo "Magics does not have a separate Qt library (cmake installation)"
+ else
+ echo "Magics has a separate Qt library (cmake installation)"
+ fi
+ fi
MAGPLUS_LIB="${MAGPLUS_LIB} ${MAGPLUSLIB_APPEND}"
##################################
@@ -776,6 +797,9 @@ if test "x$ui" = xyes ; then
[AC_MSG_FAILURE([Your Motif does not implement XmDrawingAreaConstraintPart (are you using Lesstif? It is not supported).])]
)
AC_CHECK_LIB(pthread,pthread_key_create)
+
+ CPPFLAGS="${CPPFLAGS} -DMETVIEW_MOTIF"
+
fi
#### end GUI
@@ -860,53 +884,6 @@ fi
MAGPLUS_LIB="${MAGPLUS_LIB} ${NETCDF_LIBS}"
-
-
-#############################################################################################################
-#
-# E M O S L I B -- always DOUBLE precision !!!
-#
-
-# emoslib is currently required (or libMars interpolation/subarea extraction, etc)
-# so remove the option to disable it.
-
-#AC_ARG_ENABLE(emos, [[ --enable-emos enable the EmosLib support [default=yes]]],
-# emos=$enableval, emos=yes)
-
-emos="yes"
-
-if test "x$emos" = xyes; then
-
- AC_MSG_CHECKING([for EmosLib (ECMWF)])
-
- EMOS_LIB_NAME="emosR64"
-
- emos_path=/usr/local/${LIBNAME}
-
- AC_ARG_WITH([emos-libraries],
- [AS_HELP_STRING([--with-emos-libraries],[Location of EMOS libraries @<:@default is /usr/local/lib@:>@])],
- [EMOS_LIB_FLAGS="-L$with_emos_libraries";LDFLAGS="$EMOS_LIB_FLAGS $LDFLAGS"; emos_path=$with_emos_libraries]
- )
-
- AC_ARG_WITH([emos-libname],
- [AC_HELP_STRING([--with-emos-libname],[Name of EMOS library @<:@default is emosR64@:>@ ])],
- [EMOS_LIB_NAME="$with_emos_libname"]
- )
-
- AC_CHECK_LIB(${EMOS_LIB_NAME},pbopen,echo "EmosLib detected",
- AC_MSG_ERROR([Emoslib (${EMOS_LIB_NAME}) could not be linked! Metview requires emoslib with 64-bit reals (usually libemosR64.a). Try setting --with-emos-libraries and --with-emos-libname.]))
-
- AC_DEFINE(METVIEW_EMOS, 1)
- METVIEW_3RDPARTY_LIBS="$METVIEW_3RDPARTY_LIBS -l${EMOS_LIB_NAME}"
-
- MV_EMOSLIB="${EMOS_LIB_FLAGS} -l${EMOS_LIB_NAME}"
- AC_SUBST(MV_EMOSLIB)
-
-else
- emos="no"
-fi
-
-
#########################################################################################
#
# Check for GRIB API
@@ -986,6 +963,60 @@ AC_SUBST(GRIB_API_LIB) # for inline fortran/c macros
AC_SUBST(GRIBAPI_LIBS)
AC_SUBST(LDFLAGS_INLINE) # for inline fortran/c macros
+
+
+#############################################################################################################
+#
+# E M O S L I B -- always DOUBLE precision !!!
+#
+
+# emoslib is currently required (or libMars interpolation/subarea extraction, etc)
+# so remove the option to disable it.
+
+#AC_ARG_ENABLE(emos, [[ --enable-emos enable the EmosLib support [default=yes]]],
+# emos=$enableval, emos=yes)
+
+emos="yes"
+
+if test "x$emos" = xyes; then
+
+ AC_MSG_CHECKING([for EmosLib (ECMWF)])
+
+ EMOS_LIB_NAME="emosR64"
+
+ emos_path=/usr/local/${LIBNAME}
+
+ AC_ARG_WITH([emos-libraries],
+ [AS_HELP_STRING([--with-emos-libraries],[Location of EMOS libraries @<:@default is /usr/local/lib@:>@])],
+ [EMOS_LIB_FLAGS="-L$with_emos_libraries";LDFLAGS="$EMOS_LIB_FLAGS $LDFLAGS"; emos_path=$with_emos_libraries]
+ )
+
+ AC_ARG_WITH([emos-libname],
+ [AC_HELP_STRING([--with-emos-libname],[Name of EMOS library @<:@default is emosR64@:>@ ])],
+ [EMOS_LIB_NAME="$with_emos_libname"]
+ )
+
+ AC_CHECK_LIB(${EMOS_LIB_NAME},pbopen,echo "EmosLib detected",
+ AC_MSG_ERROR([Emoslib (${EMOS_LIB_NAME}) could not be linked! Metview requires emoslib with 64-bit reals (usually libemosR64.a). Try setting --with-emos-libraries and --with-emos-libname.]))
+
+ AC_CHECK_LIB(${EMOS_LIB_NAME},intf2,echo "EmosLib has GRIB_API support",
+ AC_MSG_ERROR([Emoslib (${EMOS_LIB_NAME}) appears to have been built without GRIB_API support. Please enable this option when rebuilding emoslib.]),
+ ${GRIBAPI_LIBS} ${FLIBS})
+
+
+ AC_DEFINE(METVIEW_EMOS, 1)
+ METVIEW_3RDPARTY_LIBS="$METVIEW_3RDPARTY_LIBS -l${EMOS_LIB_NAME}"
+
+ MV_EMOSLIB="${EMOS_LIB_FLAGS} -l${EMOS_LIB_NAME}"
+ AC_SUBST(MV_EMOSLIB)
+
+else
+ emos="no"
+fi
+
+
+
+
#########################################################################################
#
# For ecRegrid header file
@@ -1063,11 +1094,18 @@ if test "x$odb" = xyes ; then
ODB_LIBDIR="${with_odb}/lib";
ODB_LDFLAGS="-L${ODB_LIBDIR}";
ODB_LIBS="-lOdb -lEc";
- AC_CHECK_FILE(${with_odb}/lib/libOdb.a,odbnew=yes,odbnew=no)]
+ AC_CHECK_FILE(${with_odb}/lib/libOdb.a,odbnewstatic=yes,odbnewstatic=no)
+ AC_CHECK_FILE(${with_odb}/lib/libOdb.so,odbnewshared=yes,odbnewshared=no)]
)
AC_SUBST(ODB_LIBDIR)
+ if test "x$odbnewstatic" = xyes -o "x$odbnewshared" = xyes; then
+ odbnew=yes
+ else
+ odbnew=no
+ fi
+
# if using ODB_API 0.9.21:
# [ODB_CPPFLAGS="-DODB_SUPPORT -DOLD_ODB_API -I${with_odb}/include";
@@ -1240,10 +1278,15 @@ fi
if test "x$mars_web_access" = xno ; then
CPPFLAGS="${CPPFLAGS} -DNOCURL"
else
- echo "MARS web api will be built"
- fi
+ echo "MARS web api will be built"
+fi
+# if MARS_ACCESS is none, but web-api support is there, then set MARS_ACCESS to MARS_webapi
+if test "x$MARS_ACCESS" = "xMARS_none" -a "x$mars_web_access" = "xyes" ; then
+ MARS_ACCESS=MARS_webapi
+fi
+
#####################################################################
#
@@ -1327,6 +1370,38 @@ AC_ARG_ENABLE(scm-aux-files, [[ --enable-scm-aux-files enable SCM auxilla
+#####################################################################
+#
+# ECMWF Weather Room support
+# This option enables Metview to export plots directly to a screen
+# in the Weather Room.
+#
+
+
+AC_ARG_ENABLE(weather-room, [[ --enable-weather-room enable the ECMWF Weather Room support (only at ECMWF) [default=no]]],
+ weather_room=$enableval, weather_room=no)
+
+if test "x$weather_room" = xyes ; then
+ if test "x$SITE_NAME" = 'xecmwf' ; then
+ m4_include([aux_build/ax_boost_base.m4])
+ AX_BOOST_BASE(1.47,,AC_MSG_ERROR([Boost library not found - if you use RPM do not forget boost-devel]))
+ AC_CHECK_HEADER(boost/property_tree/json_parser.hpp,,
+ AC_MSG_ERROR([could not successfully compile with Boost::property_tree/json_parser.hpp])
+ unset ac_cv_header_boost_h)
+
+
+ AC_DEFINE(METVIEW_WEATHER_ROOM, 1)
+ echo ""
+ echo "ECMWF Weather Room support enabled"
+ else
+ weather_room="no"
+ echo ""
+ AC_MSG_ERROR([ECMWF Weather Room option only supported at ECMWF.])
+ fi
+fi
+
+
+
#####################################################################
#
@@ -1415,6 +1490,7 @@ AH_TEMPLATE(METVIEW_EXPERIMENTAL, [Turn on experimental components used only in
AH_TEMPLATE(METVIEW_ECREGRID, [Turn on experimental interpolation library - only in developments.])
AH_TEMPLATE(METVIEW_INPE, [Turn on the INPE support])
AH_TEMPLATE(METVIEW_SCM_AUX, [Turn on the SCM auxillary files])
+AH_TEMPLATE(METVIEW_WEATHER_ROOM, [Turn on the Weather Room export facility])
#
# Enable Debug information
@@ -1593,6 +1669,7 @@ AM_CONDITIONAL(METVIEW_EXPERIMENTAL, test "$experimental" = yes)
AM_CONDITIONAL(METVIEW_ECREGRID, test "$ecregrid" = yes)
AM_CONDITIONAL(METVIEW_INPE, test "$inpe" = yes)
AM_CONDITIONAL(METVIEW_SCM_AUX, test "$scm_aux" = yes)
+AM_CONDITIONAL(METVIEW_WEATHER_ROOM,test "$weather_room" = yes)
AC_CONFIG_FILES([Makefile
src/Makefile
@@ -1636,6 +1713,7 @@ AC_CONFIG_FILES([Makefile
src/Rttov/Makefile
src/Scm/Makefile
src/ScmEditor/Makefile
+ src/Spectra/Makefile
src/StdAppManager/Makefile
src/images/Makefile
src/libFTimeUtil/Makefile
@@ -1647,12 +1725,13 @@ AC_CONFIG_FILES([Makefile
src/libMvQtGui/Makefile
src/libUtil/Makefile
src/libMvQtUtil/Makefile
+ src/Thermo/Makefile
src/uPlot/Makefile
src/Velstr/Makefile
src/VisTools/Makefile
- src/PM_Tephigram/Makefile
src/XSection/Makefile
src/Stations/Makefile
+ src/Vapor/Makefile
src/WebAccess/Makefile
scripts/Makefile
share/metview/Makefile
@@ -1743,7 +1822,7 @@ if test "x$SITE_NAME" != 'xecmwf'; then
configtmp=${configdef}.tmp
echo "Not at ECMWF: resetting the default proxy setting in ${configdef}."
chmod u+w $configdef
- sed "s/ } = yes/ } = no/g" $configdef > $configtmp
+ sed "s/ } = YES/ } = NO/g" $configdef > $configtmp
mv $configtmp $configdef
fi
@@ -1785,6 +1864,10 @@ echo "MARS ODB --enable-mars-odb=${marsodb}"
echo "OBSTAT --enable-obstat=$obstat"
echo "User Interface --enable-ui=$ui"
echo "INPE --enable-inpe=$inpe"
+if test "x$SITE_NAME" = 'xecmwf'; then
+ echo "WEATHER ROOM --enable-weather-room=$weather_room"
+fi
+
echo ""
echo ""
if test "x$odbnew" = 'xyes' -a "x$odbplot" = 'xno' ; then
diff --git a/rpms/Makefile.in b/rpms/Makefile.in
index 8077343..4cccc7b 100644
--- a/rpms/Makefile.in
+++ b/rpms/Makefile.in
@@ -39,6 +39,7 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/Metview.spec.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -64,6 +65,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -87,6 +90,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index a537912..9bd1547 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -18,7 +18,8 @@ scripts = ../bin/compile ../bin/dump ../bin/metview-mail ../bin/mvrun ../bin/mvr
../bin/mv_flextra_prep.mv ../bin/mv_flextra_prep ../bin/mv_flextra_run \
../bin/mv_flexpart_run \
../bin/mv_rttov_run \
- ../bin/mv_scm_run ../bin/mv_scm_vis.mv
+ ../bin/mv_scm_run ../bin/mv_scm_vis.mv \
+ ../bin/mv_vapor_prep.mv ../bin/mv_vapor_gui
#../bin/ObstatCurveKind1.magml
@@ -70,6 +71,13 @@ else
METVIEW_GUI_BUILT_FLAG=false
endif
+if METVIEW_WEATHER_ROOM
+MV_WEATHER_ROOM_BUILT=true
+else
+MV_WEATHER_ROOM_BUILT=false
+endif
+
+
../$(STARTUP_SCRIPT): metview_base ../config/CONFIG.site ../share/metview/app-defaults/MvVersion ../version.sh ../bin
-$(RM) $@
printf '#!/bin/ksh\n' > $@
@@ -80,8 +88,9 @@ endif
# METVIEW_VERSION_TITLE="Metview `cat ../share/metview/app-defaults/MvVersion` (`date -u '+%Y-%m-%d'`)"
# printf "METVIEW_VERSION_TITLE=$(METVIEW_VERSION_TITLE)\n" >> $@
printf "METVIEW_VERSION_TITLE=\"Metview `cat ../share/metview/app-defaults/MvVersion` $(METVIEW_EXTRA_TITLE) (`date -u '+%Y-%m-%d'`)\"\n" >> $@
- printf 'LD_LIBRARY_PATH=\"$${QT_DIR_LIB}:${MAGPLUS_LIBDIR}:${ODB_LIBDIR}:$${LD_LIBRARY_PATH}\"\n' >> $@
- printf "METVIEW_GUI_BUILT=${METVIEW_GUI_BUILT_FLAG}\n\n" >> $@
+ printf 'LD_LIBRARY_PATH=\"$${QT_DIR_LIB}:${MAGPLUS_LIBDIR}:${ODB_LIBDIR}:${EXTRA_LD_LIBRARY_PATHS}:$${LD_LIBRARY_PATH}\"\n' >> $@
+ printf "METVIEW_GUI_BUILT=${METVIEW_GUI_BUILT_FLAG}\n" >> $@
+ printf "MV_WEATHER_ROOM_BUILT=${MV_WEATHER_ROOM_BUILT}\n\n" >> $@
cat metview_base >> $@
chmod a+x $@
chmod +w $@
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
index 67b5ed0..68a734b 100644
--- a/scripts/Makefile.in
+++ b/scripts/Makefile.in
@@ -39,6 +39,7 @@ subdir = scripts
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in compile
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -87,6 +88,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -110,6 +113,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -302,7 +306,8 @@ scripts = ../bin/compile ../bin/dump ../bin/metview-mail ../bin/mvrun ../bin/mvr
../bin/mv_flextra_prep.mv ../bin/mv_flextra_prep ../bin/mv_flextra_run \
../bin/mv_flexpart_run \
../bin/mv_rttov_run \
- ../bin/mv_scm_run ../bin/mv_scm_vis.mv
+ ../bin/mv_scm_run ../bin/mv_scm_vis.mv \
+ ../bin/mv_vapor_prep.mv ../bin/mv_vapor_gui
#../bin/ObstatCurveKind1.magml
@@ -317,6 +322,8 @@ CLEANFILES = $(scripts) ../$(STARTUP_SCRIPT) $(macro_list) $(dict) $(icon_functi
# --------------------------------------------------- scripts to run Metview
@METVIEW_GUI_TRUE at METVIEW_GUI_BUILT_FLAG = true
+ at METVIEW_WEATHER_ROOM_FALSE@MV_WEATHER_ROOM_BUILT = false
+ at METVIEW_WEATHER_ROOM_TRUE@MV_WEATHER_ROOM_BUILT = true
local_scripts = $(scripts:../bin/%=%) # e.g. ../bin/dump -> dump
EXTRA_DIST = $(local_scripts) compile.src metview_local.common metview_local2.common metview_base generate_list_of_macro_functions.mv generate_dictionary.mv generate_icon_fun_help.mv
all: all-am
@@ -616,8 +623,9 @@ compile: compile.src ../config/CONFIG.site
# METVIEW_VERSION_TITLE="Metview `cat ../share/metview/app-defaults/MvVersion` (`date -u '+%Y-%m-%d'`)"
# printf "METVIEW_VERSION_TITLE=$(METVIEW_VERSION_TITLE)\n" >> $@
printf "METVIEW_VERSION_TITLE=\"Metview `cat ../share/metview/app-defaults/MvVersion` $(METVIEW_EXTRA_TITLE) (`date -u '+%Y-%m-%d'`)\"\n" >> $@
- printf 'LD_LIBRARY_PATH=\"$${QT_DIR_LIB}:${MAGPLUS_LIBDIR}:${ODB_LIBDIR}:$${LD_LIBRARY_PATH}\"\n' >> $@
- printf "METVIEW_GUI_BUILT=${METVIEW_GUI_BUILT_FLAG}\n\n" >> $@
+ printf 'LD_LIBRARY_PATH=\"$${QT_DIR_LIB}:${MAGPLUS_LIBDIR}:${ODB_LIBDIR}:${EXTRA_LD_LIBRARY_PATHS}:$${LD_LIBRARY_PATH}\"\n' >> $@
+ printf "METVIEW_GUI_BUILT=${METVIEW_GUI_BUILT_FLAG}\n" >> $@
+ printf "MV_WEATHER_ROOM_BUILT=${MV_WEATHER_ROOM_BUILT}\n\n" >> $@
cat metview_base >> $@
chmod a+x $@
chmod +w $@
diff --git a/scripts/compile b/scripts/compile
index f804873..99ed1d7 100644
--- a/scripts/compile
+++ b/scripts/compile
@@ -2,19 +2,19 @@
# --- head created by Make ---
set -e
CC=gcc
-CC_FLAGS=" -O2 -I/include/python2.5 -m64 -fPIC -DECMWF -DLITTLE -DLITTLE_END -DH_INCLUDES_CC -DR64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DI32 -DMAGINT_IS_INT -DREAL_IS_DOUBLE"
+CC_FLAGS=" -g -O0 -I/usr/local/apps/python/2.7.1-02/include/python2.5 -m64 -fPIC -DECMWF -DLITTLE -DLITTLE_END -DH_INCLUDES_CC -DR64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DI32 -DMAGINT_IS_INT -DREAL_IS_DOUBLE"
CXX=g++
-CXX_FLAGS="-O2 -mtune=native -O2 -Wall -W -DUSE_NEW_IO -m64 -fPIC -fno-gnu-keywords -Wno-deprecated -Wno-write-strings -DMETVIEW_QT -DQT_NO_DEBUG_OUTPUT -DECMWF -DLITTLE -DLITTLE_END -DH_INCLUDES_CC -DR64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DI32 -DMAGINT_IS_INT -DREAL_IS_DOUBLE"
+CXX_FLAGS="-g -O0 -Wall -W -DMETVIEW_EXPERIMENTAL -DUSE_NEW_IO -m64 -fPIC -fno-gnu-keywords -Wno-deprecated -Wno-write-strings -DMETVIEW_QT -DECMWF -DLITTLE -DLITTLE_END -DH_INCLUDES_CC -DR64 -DREAL_8 -DREAL_BIGGER_THAN_INTEGER -DI32 -DMAGINT_IS_INT -DREAL_IS_DOUBLE"
F77=pgf90
-F77_FLAGS="-g -r8 -tp amd64 -r8 -O2"
+F77_FLAGS="-g -r8 -tp amd64 -r8"
F90=pgf90
-F90_FLAGS="-g -r8 -tp amd64 -r8 -O2"
+F90_FLAGS="-g -r8 -tp amd64 -r8"
FC_LIBS="-L/usr/local/apps/pgi/pgi-10.8/linux86-64/10.8/libso -Wl,-rpath,/usr/local/apps/pgi/pgi-10.8/linux86-64/10.8/libso -Wl,-rpath,/usr/local/apps/pgi/pgi-10.8/linux86-64/10.8/libso -lpgf90rtl -lpgftnrtl -lrt -lpgf90 -lpgf902 -lpghpf -lpgf90_rpm1 -lpghpf2 -lpgc -lpgftnrtl -lpgc -lrt"
LIBNAME="lib64"
-GRIBAPI_LIB="-L/usr/local/apps/Metview/AuxSW/grib_api/1.11.0-64/lib64 -lgrib_api -ljasper"
-GRIBAPI_INC="-I/usr/local/apps/Metview/AuxSW/grib_api/1.11.0-64/include64"
-MV_EMOSLIB="-L/usr/local/apps/libemos/000393 -lemos.R64.D64.I32"
-LDFLAGS_INLINE="-L/lib"
+GRIBAPI_LIB="-L/usr/local/lib/metaps/lib/grib_api/1.12.1/lib64 -lgrib_api -ljasper"
+GRIBAPI_INC="-I/usr/local/lib/metaps/lib/grib_api/1.12.1/include64"
+MV_EMOSLIB="-L/usr/local/apps/libemos/000394/lib -lemos.R64.D64.I32"
+LDFLAGS_INLINE="-L/usr/local/apps/python/2.7.1-02/lib"
# **************************** LICENSE START ***********************************
#
# Copyright 2012 ECMWF and INPE. This software is distributed under the terms
diff --git a/scripts/metview_base b/scripts/metview_base
index 0d9b343..d0ac0ee 100755
--- a/scripts/metview_base
+++ b/scripts/metview_base
@@ -1,7 +1,7 @@
# **************************** LICENSE START ***********************************
#
-# Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+# Copyright 2014 ECMWF and INPE. This software is distributed under the terms
# of the Apache License version 2.0. In applying this license, ECMWF does not
# waive the privileges and immunities granted to it by virtue of its status as
# an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -126,7 +126,7 @@ cleanup(){
rm -fr $METVIEW_TMPDIR || true
rm -f $METVIEW_USER_DIRECTORY/System/.$MV_TMPDIR_LINK || true
- rm -f $METVIEW_USER_DIRECTORY/System/$MV_TMPDIR_LINK || true
+ rm -Rf $METVIEW_USER_DIRECTORY/System/$MV_TMPDIR_LINK || true
if [ -d $METVIEW_TMPDIR ]
then
echo " >> Metview cache $METVIEW_TMPDIR still exists, retry in 10 secs..."
@@ -360,6 +360,15 @@ do
fi
;;
+ -wr)
+ MV_WEATHER_ROOM="1"
+ if [ "$MV_WEATHER_ROOM_BUILT" != "true" ]
+ then
+ info "-wr option not valid: Weather Room export facility not available in this build"
+ exit 1
+ fi
+ ;;
+
*)
echo "$me: option not supported \"$1\"" 1>&2
exit 1
@@ -531,7 +540,7 @@ fi
METVIEW_EXTRA_GRIB_DEFINITION_PATH=${METVIEW_EXTRA_GRIB_DEFINITION_PATH:=""}
if [ "x$METVIEW_EXTRA_GRIB_DEFINITION_PATH" != x -a "x$GRIBAPI_DIR" != x ] ; then
- export GRIB_DEFINITION_PATH="${METVIEW_EXTRA_GRIB_DEFINITION_PATH}:${GRIBAPI_DIR}/share/definitions"
+ export GRIB_DEFINITION_PATH="${METVIEW_EXTRA_GRIB_DEFINITION_PATH}:${GRIBAPI_DIR}/share/grib_api/definitions"
fi
# =============================================================
@@ -863,7 +872,7 @@ else
echo " -startup '$METVIEW_STARTUP' -exit $METVIEW_EXIT"
$MV_DBG $METVIEW_BIN/event
else
- $metview_command $METVIEW_BIN/event -startup '$METVIEW_STARTUP' \
+ $metview_command $METVIEW_BIN/event -startup '$METVIEW_STARTUP ${METVIEW_QT_APPLICATION_FLAGS}' \
-exit $METVIEW_EXIT
fi
fi
diff --git a/scripts/metview_create_user_dir b/scripts/metview_create_user_dir
index 51a5811..5c78724 100755
--- a/scripts/metview_create_user_dir
+++ b/scripts/metview_create_user_dir
@@ -20,7 +20,10 @@
# User Metview directory (full path)
#
+
TAR_FILE=$METVIEW_DIR/share/metview/app-defaults/User_Dir_Frame.tar.gz
+DRAWERS_TAR_FILE=$METVIEW_DIR/share/metview/app-defaults/Sample_Drawers.tar.gz
+
if [ x$1 = x ]
then
@@ -36,6 +39,14 @@ if [ -f $TAR_FILE ]
then
cd $USER_DIR
gunzip -c $TAR_FILE | tar xf -
+
+ if [ x$MV_DESKTOP_NAME = xDesktop ]
+ then
+ echo " creating sample drawers"
+ cd System
+ gunzip -c $DRAWERS_TAR_FILE | tar xf -
+ fi
+
echo " created !"
else
echo " UNABLE TO CREATE: missing file $TAR_FILE"
diff --git a/scripts/metview_help b/scripts/metview_help
index 0ede92b..11e8792 100755
--- a/scripts/metview_help
+++ b/scripts/metview_help
@@ -1,7 +1,7 @@
# **************************** LICENSE START ***********************************
#
-# Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+# Copyright 2014 ECMWF and INPE. This software is distributed under the terms
# of the Apache License version 2.0. In applying this license, ECMWF does not
# waive the privileges and immunities granted to it by virtue of its status as
# an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -101,6 +101,14 @@ Environment variables that have an effect on Metview-Magics-MARS-Emoslib-GRIB_AP
in Metview. The possible values are 'raster' and 'native'.
[$METVIEW_GRAPHICS_SYSTEM]
+ METVIEW_WALL_URL set the URL for the 'export to Weather Room' functionality.
+ This will override the setting in Preferences.
+ [$METVIEW_WALL_URL]
+
+ METVIEW_WALL_TOKEN set the token for the 'export to Weather Room' functionality.
+ This will override the setting in Preferences.
+ [$METVIEW_WALL_TOKEN]
+
Viewers
--------------------------------------------------------------------------
@@ -134,6 +142,11 @@ Environment variables that have an effect on Metview-Magics-MARS-Emoslib-GRIB_AP
[$MV_SCM_EXE]
+ VAPOR
+ --------------------------------------------------------------------------
+ MV_VAPOR_BIN path to the bin directory of the VAPOR 3D visualisation system
+ [$MV_VAPOR_BIN]
+
Other
--------------------------------------------------------------------------
MV_GENERATING_PROCESS custom value used when converting an LLMatrix to GRIB
@@ -167,6 +180,7 @@ warn
-display dis set \$DISPLAY temporarily to 'dis'
-F use bigger fonts for big audience
-mfdbg dbgr run your external Macro Functions (Fortran/C/C++) under debugger 'dbgr'
+ -wr enable export of plots to the Weather Room screens (only at ECMWF)
Data examiner flags:
-e type path examine the given file
diff --git a/scripts/metview_local.ecm_lnx64 b/scripts/metview_local.ecm_lnx64
index 34dc29b..29bb372 100755
--- a/scripts/metview_local.ecm_lnx64
+++ b/scripts/metview_local.ecm_lnx64
@@ -20,7 +20,13 @@
# BUFR_TABLES=${BUFR_TABLES:=/home/ma/emos/tables/bufr/000300/}
#-- yes it is! --#
-BUFR_TABLES=${BUFR_TABLES:=/home/ma/emos/tables/bufr/text/000351/}
+BUFR_1=/home/ma/emos/tables/bufr/text/000351/
+if [ -d ${BUFR_1} ] # check this first
+then
+ BUFR_TABLES=${BUFR_TABLES:=${BUFR_1}}
+else
+ BUFR_TABLES=${BUFR_TABLES:=/usr/local/apps/libemos/tables/bufr/text/000351/} # cray
+fi
#-- use 'konsole' because xterm discards LD_LIBRARY_PATH setting --#
@@ -30,7 +36,10 @@ BUFR_TABLES=${BUFR_TABLES:=/home/ma/emos/tables/bufr/text/000351/}
#LD_LIBRARY_PATH=/usr/local/apps/Magics/$MAG_AUX_ROOT_BASENAME/lib:$LD_LIBRARY_PATH
#-- MARS related stuff --
-. $METVIEW_BIN/set_mars_env
+if [ "$MV_MARS_ACCESS" != "MARS_none" ]
+then
+ . $METVIEW_BIN/set_mars_env
+fi
#-- editor help button browser config - used in src/WebAccess/WebAccess.cc
MV_BROWSER_NAME=${MV_BROWSER_NAME:=firefox}
@@ -46,4 +55,7 @@ then
fi
METVIEW_GRIB_DUMP=$GRIBAPI_DIR/bin/grib_dump
-export PATH="/usr/local/apps/netCDF/current/bin:$PATH" # for ncdump,ncgen
+export PATH="/usr/local/apps/netcdf4/4.1.3/LP64/bin:$PATH" # for ncdump,ncgen
+
+
+MV_VAPOR_BIN=${MV_VAPOR_BIN:=/usr/local/apps/vapor/current/bin}
diff --git a/scripts/mv_compress b/scripts/mv_compress
index 3bfc542..3fb15a7 100644
--- a/scripts/mv_compress
+++ b/scripts/mv_compress
@@ -229,7 +229,7 @@ do
f_ICON=` echo ${d}"/"${b} | sed "s,//,/,g"`
#Dot file
- f_DOT=`echo "${d}/.__metview_icon_" | sed "s,//,/,g"`
+ f_DOT=`echo "${d}/._mv_iconlist_" | sed "s,//,/,g"`
if [ ! -f "$f_DOT" ] ; then
f_DOT=`echo "${d}/.${b}" | sed "s,//,/,g"`
elif [ `echo $folders | grep -c ${d}` -eq 0 ] ; then
@@ -237,7 +237,7 @@ do
else
f_DOT=""
fi
-
+
if [ -e "$f_ICON" ] ; then
if [ x"$f_DOT" != x -a -f "$f_DOT" ] ; then
diff --git a/scripts/mv_mail b/scripts/mv_mail
index 27e17a5..ff872e6 100644
--- a/scripts/mv_mail
+++ b/scripts/mv_mail
@@ -112,12 +112,12 @@ METVIEW-ICONS --------------->
This mail has been sent from Metview. The attachment is a tar.gz file containing some Metview icons (together with their descriptor files needed by Metview to interpret them).
-To import these icons into your Metview environment you need to do as follows:
+To import these icons into your Metview environment you need do as follows:
1. Download the tar.gz attachment into a Metview folder
2. Right click on the tar.gz icon and select 'Extract'. A new Metview folder will be created for you containing all the extracted icons.
-Please note that the minimum Metview version to use this feature is 4.5.
+Please note that the minimum Metview version to use this feature is 4.4.7 and you need to use the new desktop user interface (called Desktop) to make it work.
<--------------- METVIEW-ICONS
diff --git a/scripts/mv_rttov_run b/scripts/mv_rttov_run
index 8371a0d..5d9f7a8 100644
--- a/scripts/mv_rttov_run
+++ b/scripts/mv_rttov_run
@@ -56,17 +56,17 @@ fi
#-------------------------------------------
if [ "$SENSOR" != "CUSTOM" ] ; then
-
+ RTTOV_CHANNELS_FILES_PATH="${RTTOV_CHANNELS_FILES_PATH:=/home/graphics/cgx/model_files/rttov}"
case "$SENSOR" in
"AMSUA")
- f_CHANNEL="/scratch/graphics/cgr/rttov/amsua_channels"
- f_COEFF="/scratch/graphics/cgr/rttov/rttov8pred44L/rtcoef_metop_2_amsua.dat"
+ f_CHANNEL="${RTTOV_CHANNELS_FILES_PATH}/amsua_channels"
+ f_COEFF="${RTTOV_CHANNELS_FILES_PATH}/rtcoef_metop_2_amsua.dat"
do_SOLAR=0
do_OZONE=0
;;
"IASI")
- f_CHANNEL="/scratch/graphics/cgr/rttov/iasi_channels"
- f_COEFF="/scratch/graphics/cgr/rttov/rttov8pred44L/rtcoef_metop_2_iasi.dat"
+ f_CHANNEL="${RTTOV_CHANNELS_FILES_PATH}/iasi_channels"
+ f_COEFF="${RTTOV_CHANNELS_FILES_PATH}/rtcoef_metop_2_iasi.dat"
do_SOLAR=0
do_OZONE=1
;;
diff --git a/scripts/mv_vapor_gui b/scripts/mv_vapor_gui
new file mode 100644
index 0000000..1fbfc84
--- /dev/null
+++ b/scripts/mv_vapor_gui
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+# of the Apache License version 2.0. In applying this license, ECMWF does not
+# waive the privileges and immunities granted to it by virtue of its status as
+# an Intergovernmental Organization or submit itself to any jurisdiction.
+#
+# ***************************** LICENSE END ************************************
+
+set -x
+print_err()
+{
+ echo ${text_ERR} $* >> "${f_LOG}"
+}
+
+text_ERR="Script `basename $0` FAILED> "
+
+#Get args
+if [ $# -ne 2 ] ; then
+ echo "Invalid number of arguments specified for script $0 ! (" $# " instead of 2)"
+ exit 1
+fi
+
+f_VDF=$1
+f_LOG=$2
+
+#Source the vapor setup script
+vapor_script="${MV_VAPOR_BIN}"/vapor-setup.sh
+
+if [ x"$vapor_script" = x ] ; then
+ print_err "VAPOR script is not executable: " $vapor_script
+ exit 1
+fi
+
+if [ ! -f "$vapor_script" ] ; then
+ print_err "VAPOR script not found: " $vapor_script
+ exit 1
+fi
+
+#Source the vapor setup script
+. "$vapor_script"
+
+#Start up vapor
+vaporgui "$f_VDF" &
+
+exit 0
+
diff --git a/scripts/mv_vapor_prep.mv b/scripts/mv_vapor_prep.mv
new file mode 100644
index 0000000..e0e7989
--- /dev/null
+++ b/scripts/mv_vapor_prep.mv
@@ -0,0 +1,933 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2013 ECMWF. This software is distributed under the terms
+# of the Apache License version 2.0. In applying this license, ECMWF does not
+# waive the privileges and immunities granted to it by virtue of its status as
+# an Intergovernmental Organization or submit itself to any jurisdiction.
+#
+# ***************************** LICENSE END ************************************
+#
+#---------------------------------------
+# Define global parameters
+#---------------------------------------
+
+global VDF_FILE=""
+global OUTPUT_DIR=""
+global WORK_DIR=""
+global LOG_FILE=""
+
+global STEP_NUMBER=-1
+global SURF_PARAMS=""
+global UPPER_PARAMS=""
+global VERTICAL_GRID=""
+global ELEVATION_PARAM=""
+global MIN_VERTICAL="0"
+global MAX_VERTICAL="0"
+global VDF_LEVEL=""
+
+global AREA=""
+global GRID=""
+
+global INPUT_GRB=nil
+global DATE_LST=nil
+global LEV_LST=nil
+global LEV_TYPE=""
+global LON_WEST=0
+global LON_EAST=0
+global LAT_NORTH=0
+global LAT_SOUTH=0
+global NX=0
+global NY=0
+global NZ=0
+global REVERT_LAT=0
+global REVERT_LON=0
+global errH=0
+global infoH=0
+
+#--------------------------------
+# The vapor setup command
+#--------------------------------
+
+global VAPOR_SETUP_CMD=". $MV_VAPOR_BIN/vapor-setup.sh"
+
+#----------------------------------------------------
+#The exe to convert grib into raw binary for vapor
+#----------------------------------------------------
+
+global TORAW_EXE=getenv("METVIEW_BIN") & "/gribToVapor"
+
+#---------------------------------------------------------------
+# Read arguments
+#---------------------------------------------------------------
+
+#Get arguments
+global ARGS
+ARGS=arguments()
+global CURRENT_ARG_INDEX=1
+
+if count(ARGS) = 0 then
+ log_fail("No arguments specified!")
+end if
+
+print("Arguments: ",ARGS)
+
+#Get output dir
+OUTPUT_DIR=ARGS[1]
+WORK_DIR=OUTPUT_DIR
+
+#Get vdf filename
+VDF_FILE=nextArg() & ".vdf"
+
+#Get vdf check mode
+val=nextArg()
+doCheck=0
+if val = "1" then
+ doCheck=1
+ if exist(VDF_FILE) then
+ log_info("VDF file already exists! No conversion is performed!")
+ stop()
+ end if
+end if
+
+#Get vdf refinement level
+VDF_LEVEL=nextArg()
+
+#Get vertical grid params
+VERTICAL_GRID=nextArg()
+if VERTICAL_GRID = "LAYERED" then
+ ELEVATION_PARAM=nextArg()
+ MIN_VERTICAL=nextArg()
+ MAX_VERTICAL=nextArg()
+end if
+
+#Get interpoltaion params
+val=nextArg()
+doInterpolate=0
+if val = "1" then
+ doInterpolate=1
+ AREA=parse(nextArg(),"/")
+ GRID=parse(nextArg(),"/")
+end if
+
+#Get step number
+STEP_NUMBER=number(nextArg())
+
+#Get parameter list
+SURF_PARAMS=parse(nextArg(),"/")
+UPPER_PARAMS=parse(nextArg(),"/")
+
+#Get working dir
+WORK_DIR=nextArg()
+
+#Get input files
+inputMode=nextArg()
+if inputMode = "ICON" then
+ INPUT_GRB=nil
+ while hasNextArg() do
+ INPUT_GRB=INPUT_GRB & read(nextArg())
+ end while
+else
+ log_fail("InputMode=" & inputMode & " not implemented!")
+end if
+
+#---------------------------------------
+#Log input parameters
+#---------------------------------------
+
+log_info("Input arguments --->")
+log_info(tab & "VDF_FILE=" & VDF_FILE)
+log_info(tab & "OUTPUT_DIR=" & OUTPUT_DIR)
+log_info(tab & "SURF_PARAMS=" & listToString(SURF_PARAMS))
+log_info(tab & "UPPER_PARAMS=" & listToString(SURF_PARAMS))
+log_info(tab & "VERTICAL_GRID=" & VERTICAL_GRID)
+if VERTICAL_GRID = "LAYERED" then
+ log_info(tab & "ELEVATION_PARAM=" & ELEVATION_PARAM)
+ log_info(tab & "MIN_VERTICAL=" & MIN_VERTICAL)
+ log_info(tab & "MAX_VERTICAL=" & MAX_VERTICAL)
+end if
+if doInterpolate = 1 then
+ log_info(tab & "Interpolate to AREA=" & listToString(AREA) & " GRID=" & listToString(GRID))
+end if
+log_info(tab & "STEP_NUMBER=" & STEP_NUMBER)
+log_info(tab & "VDF_LEVEL=" & VDF_LEVEL)
+
+#---------------------------------------
+# Check directories
+#---------------------------------------
+
+if not(exist(OUTPUT_DIR)) then
+ if shell("mkdir -p " & OUTPUT_DIR) <> 0 then
+ print("Could not create output directory!")
+ print("Shell command failed: mkdir -p " & OUTPUT_DIR)
+ fail()
+ end if
+end if
+
+if not(exist(WORK_DIR)) then
+ if shell("mkdir -p " & WORK_DIR) <> 0 then
+ print("Could not create working directory!")
+ print("Shell command failed: mkdir -p " & WORK_DIR)
+ fail()
+ end if
+end if
+
+#------------------------------------
+# Interpolation
+#------------------------------------
+
+#Should be done only for the required fields
+if doInterpolate = 1 then
+ INPUT_GRB=read(
+ data : INPUT_GRB,
+ area: AREA,
+ grid: GRID
+ )
+end if
+
+#------------------------------------
+# Get vertical structure
+#------------------------------------
+getVertical()
+
+#------------------------------------
+# Get dates and times
+#------------------------------------
+getDateTime()
+
+#------------------------------------
+# Get geography
+#------------------------------------
+getGeography()
+
+#------------------------------------
+# Sorting
+#------------------------------------
+
+if LEV_TYPE = "ml" or LEV_TYPE = "pl" then
+ INPUT_GRB=sort(INPUT_GRB,["param","date","time","step","levelist"],["<","<","<","<",">"])
+# #Ig=sort(INPUT_GRB,"parameter")
+# #INPUT_GRB=sort(INPUT_GRB)
+else
+ INPUT_GRB=sort(INPUT_GRB,["param","date","time","step","levelist"],["<","<","<","<","<"])
+end if
+
+#------------------------------------
+# Check vertical parameters
+#------------------------------------
+
+if VERTICAL_GRID = "LAYERED" then
+ prepareElevation()
+end if
+
+#-------------------------
+# Create the vdf file
+#-------------------------
+createVdf()
+
+#-------------------------
+# Process 2D params
+#-------------------------
+
+log_info("Processing 2D params --->")
+
+loop v in SURF_PARAMS
+
+ log_info(tab & "param: " & v)
+
+ g=read(
+ data : INPUT_GRB,
+ levtype: "sfc",
+ param: v
+ )
+ if g =nil then
+ log_fail("No data found for param: " & v)
+ end if
+
+ varName=checkVarName(v,"2D")
+ processVar(g,varName,"2D")
+
+end loop
+
+#-------------------------
+#Process 3D params
+#-------------------------
+log_info("Processing 3D params --->")
+
+loop v in UPPER_PARAMS
+
+ log_info(tab & "param: " & v)
+
+ g=read(
+ data : INPUT_GRB,
+ levtype: LEV_TYPE,
+ param: v
+ )
+ if g =nil then
+ log_fail("No data found for param: " & v)
+ end if
+
+ varName=checkVarName(v,"3D")
+ processVar(g,varName,"3D")
+
+end loop
+
+stop(0)
+
+#======== Functions ===================================
+
+#=======================================================
+# Read the all the validity dates for the first available
+# variable. The result is stored in DATE_LST
+#=======================================================
+
+function getDateTime()
+
+ log_info("Check dates --->")
+
+ par=SURF_PARAMS[1]
+ g=read(data : INPUT_GRB, param: par)
+
+ DATE_LST=nil
+ loop fg in g
+
+ if STEP_NUMBER = -1 or count(DATE_LST) < STEP_NUMBER then
+
+ vd=grib_get_long(fg,"validityDate")
+ vt=grib_get_long(fg,"validityTime")
+
+ d=(date: vd,time: vt)
+
+ if count(DATE_LST) =0 then
+ DATE_LST = DATE_LST & [d]
+ else
+ found = 0
+ loop item in DATE_LST
+ if item["date"] = d["date"] and
+ item["time"] = d["time"] then
+ found = 1
+ end if
+ end loop
+
+ if found = 0 then
+ DATE_LST = DATE_LST & [d]
+ end if
+ end if
+ end if
+
+ end loop
+
+ log_info(tab &"Validity dates:")
+ for i=1 to count(DATE_LST) do
+ log_info(tab & i & ") date=" & DATE_LST[i].date & ", time=" & DATE_LST[i].time)
+ end for
+
+ #print("dates")
+ #print(DATE_LST)
+
+end getDateTime
+
+#=======================================================
+# Read the all the level related parameters from the first
+# upper level parameter.
+#=======================================================
+
+function getVertical()
+
+ log_info("Check vertical --->")
+
+ par=UPPER_PARAMS[1]
+ if par = "lnsp" then
+ if count(UPPER_PARAMS) < 2 then
+ log_fail("No upper level params specified!")
+ end if
+ par=UPPER_PARAMS[2]
+ end if
+
+ g=read(data : INPUT_GRB, param: par)
+ levType="sfc"
+ cnt=1
+ while levType = "sfc" and cnt <> count(g) do
+ levType=grib_get_string(g[cnt],"levelType")
+ cnt=cnt+1
+ end while
+
+ if levType = "sfc" then
+ log_fail("No vertical level is found for param: " & par)
+ end if
+
+ #Set the level type
+ LEV_TYPE=levType
+
+ #Generate the level list
+ loop fg in g
+ lev=grib_get_string(fg,"level")
+ if count(LEV_LST) = 0 then
+ LEV_LST=LEV_LST & [lev]
+ else if lev not in LEV_LST then
+ LEV_LST=LEV_LST & [lev]
+ end if
+ end loop
+
+ NZ=count(LEV_LST)
+
+ log_info(tab & "Level type: " & LEV_TYPE)
+ log_info(tab & "Level num: " & NZ)
+ levStr=""
+ for i=1 to count(LEV_LST) do
+ if i = 1 then
+ levStr=levStr & LEV_LST[i]
+ else
+ levStr=levStr & "," & LEV_LST[i]
+ end if
+ end for
+ log_info(tab & "Levels: " & levStr)
+
+
+
+end getVertical
+
+function getGeography()
+
+ log_info("Check geography ---> ")
+
+ g=INPUT_GRB[1]
+
+ lat1=grib_get_double(g,"latitudeOfFirstGridPointInDegrees")
+ lat2=grib_get_double(g,"latitudeOfLastGridPointInDegrees")
+
+ if lat1 > lat2 then
+ LAT_NORTH=lat1
+ LAT_SOUTH=lat2
+ else
+ LAT_NORTH=lat2
+ LAT_SOUTH=lat1
+ end if
+
+ lon1=grib_get_double(g,"longitudeOfFirstGridPointInDegrees")
+ lon2=grib_get_double(g,"longitudeOfLastGridPointInDegrees")
+
+ #log_info(tab & "lon1/lon2: " & lon1 & "/" &lon2)
+
+ if lon1 > 180 then
+ lon1 = lon1-360
+ end if
+ if lon2 > 180 then
+ lon2 = lon2-360
+ end if
+
+ #log_info(tab & "lon1/lon2: " & lon1 & "/" &lon2)
+
+ if lon1 < lon2 then
+ LON_WEST=lon1
+ LON_EAST=lon2
+ else
+ LON_WEST=lon2
+ LON_EAST=lon1
+ end if
+
+ NX=grib_get_long(g,"Ni")
+ NY=grib_get_long(g,"Nj")
+
+ log_info(tab & "nx/ny: " & NX & "/" & NY)
+ log_info(tab & "N/W/S/E: " & LAT_NORTH & "/" & LON_WEST & "/" & LAT_SOUTH & "/" & LON_EAST)
+ #log_info(tab & "revert lat: " & REVERT_LAT)
+ #log_info(tab & "revert lon: " & REVERT_LON)
+
+end getGeography
+
+#====================================================
+# Check and modify an original parameter names to
+# fit it to VAPOR's needs
+#====================================================
+
+function checkVarName(varName,varType:string)
+
+ if varName = "z" then
+ if varType = "3D" then
+ return "ELEVATION"
+ else if varType = "2D" then
+ return "HGT"
+ end if
+ end if
+
+ numberLst=["0","1","2","3","4","5","6","7","8","9"]
+ if type(varName) = "number" then
+ return "v" & string(varName)
+ else
+ s = substring(varName,1,1)
+ if s in numberLst then
+ return "v" & varName
+ end if
+ end if
+
+ return varName
+end checkVarName
+
+#====================================================
+# Create the VDF file
+#====================================================
+
+function createVdf()
+
+ #Write al the timestamps into a ascii file.
+ #vdfcreate will need it!
+ fName=WORK_DIR & "/tsfile.txt"
+ f=file(fName)
+ for i=1 to count(DATE_LST) do
+ vdate=DATE_LST[i]["date"]
+ vtime=DATE_LST[i]["time"]
+ write(f,vdate & vtime, newline)
+ end for
+ f=0
+
+ #Generate 2d parameter string for vdfcreate
+ par2D=""
+ for i=1 to count(SURF_PARAMS) do
+ if i=1 then
+ par2D=checkVarName(SURF_PARAMS[i],"2D")
+ else
+ par2D=par2D & ":" & checkVarName(SURF_PARAMS[i],"2D")
+ end if
+ end for
+
+ #Generate 2d parameter string for vdfcreate
+ par3D=""
+ for i=1 to count(UPPER_PARAMS) do
+ if i=1 then
+ par3D=checkVarName(UPPER_PARAMS[i],"3D")
+ else
+ par3D=par3D & ":" & checkVarName(UPPER_PARAMS[i],"3D")
+ end if
+ end for
+
+ fLog=WORK_DIR & "/log.txt"
+
+ if VERTICAL_GRID = "LAYERED" then
+ gridType="layered"
+ else
+ gridType="regular"
+ if LEV_TYPE = "ml" or LEV_TYPE = "pl" then
+ MIN_VERTICAL="-" & LEV_LST[1]
+ MAX_VERTICAL="-" & LEV_LST[count(LEV_LST)]
+ else
+ MIN_VERTICAL=LEV_LST[1]
+ MAX_VERTICAL=LEV_LST[count(LEV_LST)]
+ end if
+ end if
+
+ log_info("---> Create VDF file with vdfcreate!")
+
+ #Create VDF file
+ geoFactor=111177
+ cmd=VAPOR_SETUP_CMD & ";" &
+ " cd " & OUTPUT_DIR & ";" &
+ " vdfcreate -dimension " & NX & "x" & NY & "x" & NZ &
+ " -gridtype " & gridType &
+ " -mapprojection \"+proj=latlong +ellps=sphere\" " &
+ " -level " & VDF_LEVEL &
+ " -numts " & count(DATE_LST) &
+ # " -usertimes tsfile.txt " &
+ " -extents " & LON_WEST*geoFactor & ":" &
+ LAT_SOUTH*geoFactor & ":" &
+ MIN_VERTICAL & ":" &
+ LON_EAST*geoFactor & ":" &
+ LAT_NORTH*geoFactor & ":" &
+ MAX_VERTICAL &
+ " -vars3d " & par3D &
+ " -vars2dxy " & par2D &
+ " " & VDF_FILE &
+ " > " & fLog
+
+ print(cmd)
+ if shell(cmd) <> 0 then
+ log_error("vdfcreate failed!")
+ log_error("command: " & cmd)
+ #log_error("output " & read(fLog))
+ fail()
+ else
+ log_info("command: " & cmd)
+ end if
+
+end createVdf
+
+function toGrib(g:fieldset,ts:number)
+
+ #Save grib file
+ grbFile=WORK_DIR & "/tmp_" & ts & ".grib"
+ write(grbFile,g)
+
+end toGrib
+
+
+#====================================================
+# Write one timestep of one parameter to vdf/vdc
+#====================================================
+
+function toVdf(g:fieldset,varName:string,ts:number,varType:string)
+
+ #Save grib file
+ #grbFile=WORK_DIR & "/" & varType & "_" & varName & "_" & ts & ".grib"
+ #grbFile=WORK_DIR & "/tmp_" & ts & ".grib"
+ grbFile=WORK_DIR & "/tmp.grib"
+ write(grbFile,g)
+
+ #log_info(" grib: " & varName & " " & count(g))
+
+ mv_bin=getenv("METVIEW_BIN")
+
+ #Generate the raw binary file
+ #rawFile=WORK_DIR & "/" & varType & "_" & varName & "_" & ts & ".raw"
+ #rawFile=WORK_DIR & "/tmp_" & ts & ".raw"
+ rawFile=WORK_DIR & "/tmp.raw"
+ cmd=TORAW_EXE & " " & grbFile & " " & rawFile
+
+ ret= shell(cmd)
+ if ret <> 0 then
+ log_error("Conversion of GRIB to raw binary failed!")
+ log_fail("command: " & cmd)
+ end if
+
+ #Add raw binary to vdf/vdc
+ cmd=VAPOR_SETUP_CMD & ";" &
+ " cd " & OUTPUT_DIR & ";" &
+ " raw2vdf -ts " & ts &
+ " -varname " & varName &
+ " " & VDF_FILE &
+ " " & rawFile
+
+ ret= shell(cmd)
+ if ret <> 0 then
+ log_error("Adding raw binary to VAPOR failed!")
+ log_fail("command: " &cmd)
+ end if
+
+end toVdf
+
+function processVar(g:fieldset,varName:string,varType:string)
+
+ for i=1 to count(DATE_LST) do
+
+ vdate=DATE_LST[i]["date"]
+ vtime=DATE_LST[i]["time"]
+
+ log_info(tab & "--> processing: " & vdate & " " & vtime)
+
+ gRes=nil
+ loop f in g
+ if grib_get_long(f,"validityDate") = vdate and
+ grib_get_long(f,"validityTime") = vtime then
+ gRes=gRes & f
+ end if
+ end loop
+
+ #Write to vdf
+ toVdf(gRes,varName,i-1,varType)
+
+ end for
+
+end processVar
+
+function prepareElevation()
+
+ log_info("Checking vertical parameters --->")
+
+ g=read(data : INPUT_GRB,
+ param: ELEVATION_PARAM,
+ levtype: LEV_TYPE)
+
+ if g = nil then
+ #log_fail("Elevation parameter=" & ELEVATION_PARAM & "not found in input data!")
+ if LEV_TYPE = "ml" and ELEVATION_PARAM = "z" then
+ log_info(tab & "Geopotential is not present! Need to be computed or model levels")
+ computeElevation_ml()
+ else
+ log_fail("Elevation parameter=" & ELEVATION_PARAM & " not found in input data!")
+ end if
+ end if
+
+ if ELEVATION_PARAM not in UPPER_PARAMS then
+ UPPER_PARAMS = UPPER_PARAMS & [ELEVATION_PARAM]
+ end if
+
+end prepareElevation
+
+function computeElevation_ml()
+
+ t=read(data : INPUT_GRB,
+ param: "t",
+ levtype: LEV_TYPE)
+
+ q=read(data : INPUT_GRB,
+ param: "q",
+ levtype: LEV_TYPE)
+
+ lnsp=read(data : INPUT_GRB,
+ param: "lnsp",
+ levtype: LEV_TYPE,
+ level: 1)
+
+ zs=read(data : INPUT_GRB,
+ param: "z",
+ levtype: "sfc")
+
+ if t=nil then
+ log_fail("Parameter=t not found on model levels! Height of model levels cannot be computed!")
+ else if q = nil then
+ log_fail("Parameter=q not found on model levels! Height of model levels cannot be computed!")
+ else if lnsp = nil then
+ log_fail("Parameter=lnsp not found! Height of model levels cannot be computed!")
+ else if zs = nil then
+ log_fail("Surface geopotential is not found! Height of model levels cannot be computed!")
+ end if
+
+ gRes=nil
+ for i=1 to count(DATE_LST) do
+
+ vdate=DATE_LST[i]["date"]
+ vtime=DATE_LST[i]["time"]
+
+ tAct=nil
+ loop f in t
+ if grib_get_long(f,"validityDate") = vdate and
+ grib_get_long(f,"validityTime") = vtime then
+ tAct=tAct & f
+ end if
+ end loop
+
+ qAct=nil
+ loop f in q
+ if grib_get_long(f,"validityDate") = vdate and
+ grib_get_long(f,"validityTime") = vtime then
+ qAct=qAct & f
+ end if
+ end loop
+
+ lnspAct=nil
+ loop f in lnsp
+ if grib_get_long(f,"validityDate") = vdate and
+ grib_get_long(f,"validityTime") = vtime then
+ lnspAct=lnspAct & f
+ end if
+ end loop
+
+ zsAct=nil
+ loop f in zs
+ if grib_get_long(f,"validityDate") = vdate and
+ grib_get_long(f,"validityTime") = vtime then
+ zsAct=zsAct & f
+ end if
+ end loop
+
+ gRes=gRes & geopotential_on_ml(tAct,qAct,lnspAct,zsAct)
+
+ end for
+
+ INPUT_GRB = INPUT_GRB & gRes
+
+end computeElevation_ml
+
+
+function nextArg()
+
+ CURRENT_ARG_INDEX=CURRENT_ARG_INDEX+1
+
+ if CURRENT_ARG_INDEX <= count(ARGS) then
+ return ARGS[CURRENT_ARG_INDEX]
+ else
+ return ""
+ end if
+
+end nextArg
+
+function hasNextArg()
+ if CURRENT_ARG_INDEX < count(ARGS) then
+ return 1
+ else
+ return 0
+ end if
+end hasNextArg
+
+function log_fail(txt:string)
+
+ log_error(txt)
+ fail()
+
+end log_fail
+
+function log_error(txt:string)
+
+ if errH=0 then
+ errH=file(WORK_DIR & "/m_err.txt")
+ end if
+ write(errH,txt,newline)
+
+end log_error
+
+function log_info(txt:string)
+
+ if infoH=0 then
+ infoH=file(WORK_DIR & "/m_log.txt")
+ end if
+ write(infoH,txt,newline)
+
+end log_info
+
+
+function geopotential_on_ml (T_fs:fieldset, q_fs:fieldset, lnsp_fs:fieldset, zs_fs:fieldset)
+
+ Rd = 287.06
+ g = 9.80665
+
+ #Do some basic checking on the input data -
+ #only check the first field of each fielset for efficiency
+ gridtype_t = grib_get_string(T_fs[1], 'gridType')
+ gridtype_q = grib_get_string(q_fs[1], 'gridType')
+ gridtype_l = grib_get_string(lnsp_fs[1], 'gridType')
+ gridtype_z = grib_get_string(zs_fs[1], 'gridType')
+
+ if (gridtype_t = 'sh' or gridtype_q = 'sh' or gridtype_l = 'sh' or gridtype_z = 'sh') then
+ log_fail("geopotential_on_ml: fields must be gridded, not spectral")
+ end if
+
+ #How many levels are we computing?
+ levelSize = count(T_fs)
+ bottomLevel = grib_get_long(T_fs[1], 'level')
+ topLevel = grib_get_long(T_fs[levelSize], 'level')
+
+ if bottomLevel < topLevel then
+ log_fail("geopotential_on_ml: fields are not sorted in descending order according to model levels")
+ end if
+
+ #print("levels: ",bottomLevel," ",topLevel)
+
+ zs = values(zs_fs) # extract the data for this field as a vector
+ lnsp = values(lnsp_fs) # extract the data for this field as a vector
+
+ pv = grib_get_double_array(lnsp_fs, 'pv') # for computing pressures at model levels
+ sp = exp(lnsp) # surface pressure
+ z_h = zs # orography
+
+ #Get the coefficients for computing the pressures
+ #e.g. L-91: A=1..92, B=93..184
+ pv = grib_get_double_array(lnsp_fs, 'pv')
+ totalLevNum=count(pv)/2-1
+ A = pv[1, totalLevNum+1]
+ B = pv[totalLevNum+2, 2*totalLevNum+2]
+
+ if totalLevNum <> bottomLevel then
+ log_fail("geopotential_on_ml: bottom level should be " & totalLeveNum & " instead of " & bottomLevel)
+ end if
+
+ #A = pv[1, levelSize+1] #e.g. L-91: A=1..92, B=93..184
+ #B = pv[levelSize+2, levelSize+levelSize+2]
+
+ z_f = z_h # output vector
+ z_out_fs = nil # output fieldset - the end result
+
+ #Compute the bottom pressure (on half-levels)
+ #initialise to the lowest numbered level
+ Ph_levplusone = (A[totalLevNum+1] + (B[totalLevNum+1] * sp))
+
+ # We want to integrate up into the atmosphere, starting at the ground
+ # so we start at the lowest level (highest number) and keep
+ # accumulating the height as we go.
+ # See the IFS documentation:
+ # http://www.ecmwf.int/research/ifsdocs/DYNAMICS/Chap2_Discretization4.html
+ # For speed and file I/O, we perform the computations with vectors instead
+ # of fieldsets.
+
+ for lev=bottomLevel to topLevel by -1 do
+
+ levIdx=bottomLevel-lev+1 #levelSize-lev+1
+
+ print("level: ",lev," ",levIdx)
+
+ # we assume that the data are in (numerically) descending level order - check if true
+
+ T_level = grib_get_long(T_fs[levIdx], 'level')
+ q_level = grib_get_long(q_fs[levIdx], 'level')
+
+ if (T_level <> lev) then
+ log_fail ('T field index ', levIdx, ' should be level ', lev, ' but it is ', T_level)
+ else if (q_level <> lev) then
+ log_fail ('q field index ', levIdx, ' should be level ', lev, ' but it is ', q_level)
+ end if
+
+
+ q = values(q_fs[levIdx]) # extract the data for this field as a vector
+ T = values(T_fs[levIdx]) # extract the data for this field as a vector
+
+ # quick check for data consistency
+
+ if ((count(q) <> count(T)) or
+ (count(q) <> count(sp)) or
+ (count(q) <> count(z_h))) then
+ errmsg = 'mvl_geopotential_on_ml: T, Q, LNSP and Z, must have the same number of grid points (they have ' &
+ count(T) & ', ' & count(q) & ', ' & count(sp) & ' and ' & count(z_h) & ' respectively).'
+ log_fail(errmsg)
+ end if
+
+ T = T*(1.+0.609133*q) # compute moist temperature
+ q = 0 # free the memory for 'q'
+
+ # compute the pressures (on half-levels)
+
+ Ph_lev = (A[lev] + (B[lev] * sp))
+
+ if lev = 1 then
+ dlogP = log(Ph_levplusone/0.1) # Ph[lev] is zero, so don't divide by it
+ alpha = log(2)
+ else
+ dlogP = log(Ph_levplusone/Ph_lev)
+ dP = Ph_levplusone-Ph_lev
+ alpha = 1 - Ph_lev/dP*dlogP
+ end if
+
+ TRd = T*Rd
+ T = 0 # free memory for 'T'
+
+ # z_f is the geopotential of this full level
+ # integrate from previous (lower) half-level z_h to the full level
+
+ z_f = z_h + (TRd*alpha)
+
+ # z_h is the geopotential of 'half-levels'
+ # integrate z_h to next half level
+
+ z_h = z_h + (TRd*dlogP)
+
+ # store the result (z_f) in a field and add to the output fieldset
+ # (add it to the front, not the end, because we are going 'backwards'
+ # through the fields)
+
+ out_field = set_values(T_fs[levIdx], z_f)
+ out_field = grib_set_string(out_field, ['shortName', "z"])
+ out_field = grib_set_long(out_field, ['generatingProcessIdentifier',128,
+ 'level', lev])
+
+ z_out_fs = z_out_fs &out_field
+
+ Ph_levplusone = Ph_lev # store for the next iteration, will be equivalent to (A[lev+1] + (B[lev+1] * sp))
+
+ end for
+
+ return z_out_fs
+
+end geopotential_on_ml
+
+function listToString(lst)
+
+ s=""
+ for i=1 to count(lst) do
+ if i = 1 then
+ s=s & lst[i]
+ else
+ s=s & "," & lst[i]
+ end if
+ end for
+
+ return s
+
+end listToString
\ No newline at end of file
diff --git a/scripts/set_mars_env b/scripts/set_mars_env
index ffab446..4270f2e 100755
--- a/scripts/set_mars_env
+++ b/scripts/set_mars_env
@@ -2,7 +2,7 @@
# **************************** LICENSE START ***********************************
#
-# Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+# Copyright 2014 ECMWF and INPE. This software is distributed under the terms
# of the Apache License version 2.0. In applying this license, ECMWF does not
# waive the privileges and immunities granted to it by virtue of its status as
# an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -14,61 +14,54 @@
# ECMWF extras for setting MARS environment
# -----------------------------------------
-if [ x$OS_VERSION = xrhel6 ]
-then
- export METAPS=/usr/local/apps/mars/current
-else
- export METAPS=/usr/local/lib/metaps/mars_grib_api
-fi
-
-export MARS_HOME=$METAPS
+export METAPS=$MARS_HOME # required for ppdir.sh
#-- for xtra safety --
unset FDB_SERVER_HOST || true
-export MARS_AUTH_FILE=$METAPS/etc/mars.authentication
-export MARS_IBM_RULES=$METAPS/chk/ibm.chk
+export MARS_AUTH_FILE=$MARS_HOME/etc/mars.authentication
+export MARS_IBM_RULES=$MARS_HOME/chk/ibm.chk
#if [ $METV_DEV = no ]
#then
- export MARS_LANGUAGE_FILE=$METAPS/etc/mars.def
- export MARS_TEST_FILE=$METAPS/chk/mars.chk
+ export MARS_LANGUAGE_FILE=$MARS_HOME/etc/mars.def
+ export MARS_TEST_FILE=$MARS_HOME/chk/mars.chk
# export MARS_LANGUAGE_FILE=$METVIEW_DIR_SHARE/etc/MarsDef
# export MARS_TEST_FILE=$METVIEW_DIR_SHARE/etc/MarsRules
#else
# export MARS_LANGUAGE_FILE=$METVIEW_DIR_SHARE/etc/MarsDef
# export MARS_TEST_FILE=$METVIEW_DIR_SHARE/etc/MarsRules
-# MARSOLD_LANGUAGE_FILE=/usr/local/lib/metaps/etc/mars.def
-# MARSOLD_TEST_FILE=/usr/local/lib/metaps/chk/mars.chk
+# MARSOLD_LANGUAGE_FILE=/usr/local/lib/MARS_HOME/etc/mars.def
+# MARSOLD_TEST_FILE=/usr/local/lib/MARS_HOME/chk/mars.chk
#fi
-export MARS_CFG_FILE=$METAPS/etc/mars.cfg
-export MARS_EMS_FILE=$METAPS/etc/ems_cache_prod
-export MARS_ACCOUNT_FILE=$METAPS/etc/account
-export MARS_DISSEMINATION_SCHEDULE_FILE=$METAPS/etc/mars.dissemination.schedule
-export MARS_EMS_ACCOUNTS_FILE=$METAPS/etc/ems_ecaccount_prod
+export MARS_CFG_FILE=$MARS_HOME/etc/mars.cfg
+export MARS_EMS_FILE=$MARS_HOME/etc/ems_cache_prod
+export MARS_ACCOUNT_FILE=$MARS_HOME/etc/account
+export MARS_DISSEMINATION_SCHEDULE_FILE=$MARS_HOME/etc/mars.dissemination.schedule
+export MARS_EMS_ACCOUNTS_FILE=$MARS_HOME/etc/ems_ecaccount_prod
#-- for Lagrandian coeffiecient files --
-export PPDIR=${PPDIR=`$METAPS/bin/ppdir.sh`}
+export PPDIR=${PPDIR=`$MARS_HOME/bin/ppdir.sh`}
#-- for MARS statistics --
export STAT_PREFIX=metview
-. $METAPS/bin/marsstat.sh
+. $MARS_HOME/bin/marsstat.sh
#-- MARS home directory for user --
-. $METAPS/bin/mars_user_home
+. $MARS_HOME/bin/mars_user_home
#-- how frequent MARS sends warning e-mails --
export MARS_MAIL_FREQUENCY=${MARS_MAIL_FREQUENCY:=86400}
-export MARS_DHSBASE_CHECK=$METAPS/chk/dhs.chk
+export MARS_DHSBASE_CHECK=$MARS_HOME/chk/dhs.chk
#-- final solution from Manuel 000615/29 --
-. $METAPS/bin/mars.environment
+. $MARS_HOME/bin/mars.environment
#-- Choose interpolation configuration (040913) --
#-- -- moved inside 'mars.environment' (050308) --
-#-- config_interp=$($METAPS/bin/select_interpolation_mode)
+#-- config_interp=$($MARS_HOME/bin/select_interpolation_mode)
#-- CONFIG_INTERP=${CONFIG_INTERP:=$config_interp}
diff --git a/share/metview/Makefile.in b/share/metview/Makefile.in
index 7305857..fe588fc 100644
--- a/share/metview/Makefile.in
+++ b/share/metview/Makefile.in
@@ -40,6 +40,7 @@ subdir = share/metview
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -105,6 +106,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -128,6 +131,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/share/metview/app-defaults/CommonMacroFuncs/mvl_geoline b/share/metview/app-defaults/CommonMacroFuncs/mvl_geoline
index 3b0edc3..296c9c2 100644
--- a/share/metview/app-defaults/CommonMacroFuncs/mvl_geoline
+++ b/share/metview/app-defaults/CommonMacroFuncs/mvl_geoline
@@ -12,9 +12,8 @@
# **************************************************************************
# Function : mvl_geoline
#
-# Syntax : definition mvl_geoline (left_lon : number, right_lon : number,
-# top_lat : number, bot_lat : number, incrm : number,
-# colour : string, thickness : number, linestyle : string)
+# Syntax : definition mvl_geoline ( lat1 : number, lon1 : number,
+# lat2 : number, lon2 : number, incrm : number)
#
# Category : VISUAL
#
@@ -23,8 +22,7 @@
# Description : Returns a visual definintion for drawing a line to mark
# a geographical line of interest. This line is projection-independent.
#
-# Parameters : left_lon, right_lon, top_lat, bot_lat - coordinates of the
-# corners of the line in lat/long.
+# Parameters : lat1,lon1,lat2,lon2 - coordinates of the two end-points of the line lat/long.
# incrm - the increments in which the line is drawn (degrees)
# (not relevant for cylindrical projection)
#
@@ -32,37 +30,80 @@
#
# Example Usage :
#
-# left_lon = -130
-# right_lon = -100
-# top_lat = 60
-# bot_lat = 30
-# incrm = (right_lon - left_lon) / 100
+# lat1 = 60
+# lon1 = -130
+# lat2 = 30
+# lon2 = -100
+# incrm = 1
#
-# my_line = mvl_geoline(left_lon, right_lon, top_lat, bot_lat, incrm)
+# my_line = mvl_geoline(lat1,lon1,lat2,lon2, incrm)
#
# plot ( display_window, data, my_line, mgraph())
#
# **************************************************************************
-function mvl_geoline (left_lon : number, right_lon : number,
- top_lat : number, bot_lat : number, incrm : number)
+function mvl_geoline (lat1 : number, lon1 : number,
+ lat2 : number, lon2 : number, incrm : number)
- # calculates the line equation
- a = (top_lat - bot_lat) / (right_lon - left_lon)
- b = top_lat - a*right_lon
-
- xcoord = nil
- ycoord = nil
- for x = left_lon to right_lon by incrm do
- xcoord = xcoord & [x]
- ycoord = ycoord & [a*x + b]
- end for
-
- # make sure the last point is included
- xcoord = xcoord & [right_lon]
- ycoord = ycoord & [a*right_lon + b]
-
- # sets-up a curve with suitable vis def
+ dx = lon2 - lon1
+ dy = lat2 - lat1
+
+ if abs(dx) > abs(dy) then
+ incr_lon = 1 # increment along longitudes
+ if lon1 > lon2 then
+ incrm = -incrm
+ end if
+ else
+ incr_lon = 0 # increment along latitudes
+ if lat1 > lat2 then
+ incrm = -incrm
+ end if
+ end if
+
+
+ # calculate the line equation
+
+ xcoord = nil
+ ycoord = nil
+
+ if dx = 0 then # vertical line
+ for y = lat1 to lat2 by incrm do
+ ycoord = ycoord & [y]
+ xcoord = xcoord & [lon1]
+ end for
+
+ # make sure the last point is included
+ ycoord = ycoord & [lat2]
+ xcoord = xcoord & [lon2]
+
+ else # more general case - not a vertical line
+
+ a = (lat1 - lat2) / (lon1 - lon2)
+ b = lat1 - a*lon1
+
+ if incr_lon then
+ for x = lon1 to lon2 by incrm do
+ xcoord = xcoord & [x]
+ ycoord = ycoord & [a*x + b]
+ end for
+
+ # make sure the last point is included
+ xcoord = xcoord & [lon2]
+ ycoord = ycoord & [a*lon2 + b]
+ else
+ for y = lat1 to lat2 by incrm do
+ ycoord = ycoord & [y]
+ xcoord = xcoord & [(y-b)/a]
+ end for
+
+ # make sure the last point is included
+ ycoord = ycoord & [lat2]
+ xcoord = xcoord & [(lat2-b)/a]
+ end if
+
+ end if
+
+ # set up a curve with suitable vis def
geoline_curve = input_visualiser
(
input_plot_type : "geo_points",
diff --git a/share/metview/app-defaults/CommonMacroFuncs/mvl_geopotential_on_ml b/share/metview/app-defaults/CommonMacroFuncs/mvl_geopotential_on_ml
index 00c94d9..9693270 100644
--- a/share/metview/app-defaults/CommonMacroFuncs/mvl_geopotential_on_ml
+++ b/share/metview/app-defaults/CommonMacroFuncs/mvl_geopotential_on_ml
@@ -67,8 +67,8 @@ function mvl_geopotential_on_ml (T_fs:fieldset, q_fs:fieldset, lnsp_fs:fieldset,
levelSize = count(T_fs) # how many levels are we computing?
- zs = gridvals(zs_fs) # extract the data for this field as a vector
- lnsp = gridvals(lnsp_fs) # extract the data for this field as a vector
+ zs = values(zs_fs) # extract the data for this field as a vector
+ lnsp = values(lnsp_fs) # extract the data for this field as a vector
pv = grib_get_double_array(zs_fs, 'pv') # for computing pressures at model levels
@@ -117,8 +117,8 @@ function mvl_geopotential_on_ml (T_fs:fieldset, q_fs:fieldset, lnsp_fs:fieldset,
end if
- q = gridvals(q_fs[lev]) # extract the data for this field as a vector
- T = gridvals(T_fs[lev]) # extract the data for this field as a vector
+ q = values(q_fs[lev]) # extract the data for this field as a vector
+ T = values(T_fs[lev]) # extract the data for this field as a vector
# quick check for data consistency
@@ -170,7 +170,7 @@ function mvl_geopotential_on_ml (T_fs:fieldset, q_fs:fieldset, lnsp_fs:fieldset,
# (add it to the front, not the end, because we are going 'backwards'
# through the fields)
- out_field = set_gridvals(T_fs[lev], z_f)
+ out_field = set_values(T_fs[lev], z_f)
out_field = grib_set_long(out_field, ['paramId', 129,
'generatingProcessIdentifier',128,
'level', lev])
diff --git a/share/metview/app-defaults/CommonMacroFuncs/mvl_plot_scm_data b/share/metview/app-defaults/CommonMacroFuncs/mvl_plot_scm_data
index a38ed2e..cbf0454 100755
--- a/share/metview/app-defaults/CommonMacroFuncs/mvl_plot_scm_data
+++ b/share/metview/app-defaults/CommonMacroFuncs/mvl_plot_scm_data
@@ -31,8 +31,9 @@
# title_1 - title to appear in the legend for the first data
# title_2 - title to appear in the legend for the comparison data
# comparison_mode - 'overlay' or 'difference'
-# output_mode - 'postscript' or 'screen'
+# output_mode - 'postscript', 'png' or 'screen'
# output_path - only if mode='batch'. Do not supply an extension.
+# output_ps_mode - 'single' file,or 'split' into multiple files
# param_selection - 'list', 'file' or 'all'
# param_list_path - path to a text file containing each parameter name on a new line
# param_list - if param_selection is 'list'
@@ -65,6 +66,7 @@
# plot_type : 'profile', # 'profile' is the only accepted string here; anthing else means 'not profile'
# output_mode : 'ps',
# output_path : 'scm_out',
+# output_ps_mode : 'split',
# param_selection : 'list',
# param_list_path : nil,
# param_list : ['t_skin', 'top_lwrad_clr', 'u_wind_10m'],
@@ -101,8 +103,14 @@ print(arglist)
end if
if args.mode <> nil then
- if args.output_mode <> 'postscript' and args.output_mode <> 'screen' then
- fail("Argument 'output_mode' should be 'postscript' or 'screen'. It is ", args.output_mode)
+ if args.output_mode <> 'postscript' and args.output_mode <> 'png' and args.output_mode <> 'screen' then
+ fail("Argument 'output_mode' should be 'postscript', 'png' or 'screen'. It is ", args.output_mode)
+ end if
+ end if
+
+ if args.output_ps_mode <> nil then
+ if args.output_ps_mode <> 'single' and args.output_ps_mode <> 'split' then
+ fail("Argument 'output_ps_mode' should be 'single' or 'split'. It is ", args.output_ps_mode)
end if
end if
@@ -135,6 +143,10 @@ print(arglist)
args.output_mode = 'screen'
end if
+ if args.output_ps_mode = nil then
+ args.output_ps_mode = 'single'
+ end if
+
if args.title_1 = nil then
args.title_1 = ''
end if
@@ -153,7 +165,9 @@ print(arglist)
if runmode() = 'batch' then
args.mode = 'batch'
- args.output_mode = 'postscript'
+ if args.output_mode = 'screen' then
+ args.output_mode = 'postscript'
+ end if
end if
@@ -235,7 +249,7 @@ print(arglist)
ui_param_output_mode = option_menu
(
name : "output mode",
- values : ["screen", "postscript"],
+ values : ["screen", "postscript", "png"],
default : args.output_mode
)
@@ -333,8 +347,9 @@ print(arglist)
grid = args.grid
- outmode = args.output_mode
- outpath = args.output_path
+ outmode = args.output_mode
+ outpath = args.output_path
+ outpsmode = args.output_ps_mode
# Read netcdf file
@@ -388,14 +403,27 @@ print(arglist)
print('Plotting parameters: ', selected_vars, ' ; indexes: ', plot_var_indexes)
+ global text_scaling = 1.2 # most drivers use the default font sizes
+
if outmode = 'postscript' then
print('Will generate output plot in ', outpath)
- psfile = ps_output(output_name : outpath)
+ if outpsmode = 'split' then
+ split = (output_ps_split : 'on')
+ else
+ split = ()
+ end if
+ psfile = ps_output(output_name : outpath, split)
setoutput(psfile)
end if
+ if outmode = 'png' then
+ print('Will generate output plot in multiple files: ', outpath)
+ text_scaling = 2.0
+ pngfile = png_output(output_name : outpath, output_width : 1200)
+ setoutput(pngfile)
+ end if
# plots can have restrictions on their axes' limits
@@ -664,10 +692,10 @@ print(arglist)
if times[ti] = 0 then
- line_thickness = 3
+ line_thickness = 3 * text_scaling
line_style = 'dash'
else
- line_thickness = 1
+ line_thickness = 1 * text_scaling
line_style = 'solid'
end if
#print(rgb)
@@ -809,7 +837,7 @@ print(arglist)
text_line_1 : title_line_1,
text_line_2 : title_line_2,
text_line_3 : title_line_3,
- text_font_size : 0.35
+ text_font_size : 0.35 * text_scaling
)
@@ -909,18 +937,25 @@ print(arglist)
end if
+ # define the legend
if num_dims = 1 or plot_type = 'profile' then
- # define the legend
legend_curves = mlegend
(
legend_display_type : "disjoint",
legend_text_composition : "user_text_only",
- legend_text_font_size : 0.3,
+ legend_text_font_size : 0.35 * text_scaling,
legend_user_lines : [args.title_1, args.title_2]
)
to_plot = to_plot & [legend_curves]
+ else
+ legend_plot = mlegend
+ (
+ legend_text_font_size : 0.32 * text_scaling
+ )
+ to_plot = to_plot & [legend_plot]
end if
+
# -----------
# do the plot
# -----------
@@ -969,21 +1004,26 @@ print(arglist)
(
axis_grid : grid,
axis_grid_colour : 'black',
- axis_grid_line_style : 'dash'
+ axis_grid_line_style : 'dash',
+ axis_grid_thickness : 1 * text_scaling
)
horizontal_axis = maxis
(
- axis_title_text : xtitle,
+ axis_title_text : xtitle,
+ axis_title_height : 0.4 * text_scaling,
+ axis_tick_label_height : 0.3 * text_scaling,
grid_def
)
vertical_axis = maxis
(
- axis_orientation : 'vertical',
- axis_title_text : ytitle,
+ axis_orientation : 'vertical',
+ axis_title_text : ytitle,
+ axis_title_height : 0.4 * text_scaling,
+ axis_tick_label_height : 0.3 * text_scaling,
grid_def
)
@@ -1032,6 +1072,8 @@ print(arglist)
axis_tick_label_type : "label_list",
axis_tick_label_list : pres_labels,
#axis_tick_label_frequency : 20,
+ axis_title_height : 0.4 * text_scaling,
+ axis_tick_label_height : 0.3 * text_scaling,
axis_title_text : pres_title
)
diff --git a/share/metview/app-defaults/Desktop.qss b/share/metview/app-defaults/Desktop.qss
new file mode 100644
index 0000000..53c5f5e
--- /dev/null
+++ b/share/metview/app-defaults/Desktop.qss
@@ -0,0 +1,189 @@
+/*----------------------------
+ Statusbar
+------------------------------*/
+
+/* We do not want the border around items in the statusbar */
+QStatusBar::item { border: 0px solid black }
+
+QMainWindow {
+ icon-size: 20px;
+}
+
+/*QToolBar {
+ top-padding: 1px;
+ bottom-padding: 1px;
+ icon-size: 20px;
+}*/
+
+QToolBar > QToolButton {
+ padding: 1px;
+}
+
+QWidget [editor="true"] > QToolBar {
+ icon-size: 20px;
+ padding: 1px;
+}
+
+/*---------------------------
+ Drawer tabs
+------------------------------*/
+
+QWidget[helper="true"] QToolButton {
+ padding: 1px;
+}
+
+/*--------------------------------------------------
+ Sidebar listview: bookmarks, new icon, search
+-----------------------------------------------------*/
+
+QListView[sidebarView="true"] {
+ background: rgb(252,252,252);
+ color: black;
+ icon-size: 18px;
+ }
+
+QListView::item:selected[sidebar="true"] {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(100,149,215), stop: 1 rgb(136,171,208));
+ border-top: 1px solid rgb(125,162,206);
+ border-bottom: 1px solid rgb(125,162,206);
+ color: rgb(30,30,30);
+}
+
+
+/*---------------------
+ Helper icon folder view
+------------------------------*/
+
+QListView[helper="true"] {
+ background: rgb(252,252,252);
+
+ }
+
+/*----------------------------
+ Icon folder view
+------------------------------*/
+
+/* QGraphicsview cannot be set from qss only its
+baseclass QFrame. So we need to set QFrame here! */
+QFrame[mvStyle="IconFolderView"] {
+ background: rgb(252, 252, 252);
+ border: 0;
+}
+
+/*----------------------------
+ Detail folder view
+------------------------------*/
+
+QAbstractItemView[mvStyle="DetailedFolderView"]
+{
+ background: rgb(252, 252, 252);
+}
+
+QTreeView[mvStyle="desktop"] {
+ background: rgb(108, 108, 108);
+ color: rgb(30,30,30);
+ icon-size: 18px;
+ }
+
+QTreeView::item:selected[mvStyle="desktop"] {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(220,235,252), stop: 1 rgb(193,220,252));
+ border-top: 1px solid rgb(125,162,206);
+ border-bottom: 1px solid rgb(125,162,206);
+ color: rgb(30,30,30);
+}
+
+/* ----------------------------
+ Breadcrumbs
+-------------------------------*/
+
+QWidget [path="1"]{
+ background: rgb(245,245,245);
+ border-radius: 4px;
+ border-color: rgb(140,140,140);
+ /*border-top-width: 4px;*/
+}
+
+QToolButton#pathNameTb {
+ border-radius: 0px;
+ padding: 0px;
+ color: black;
+ }
+
+QToolButton#pathNameTb:hover{
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #deebf6, stop: 1 #bed8ee);
+ border: 1px solid rgb(160, 160, 160);
+ border-radius: 0px;
+ padding: 0px;
+ }
+
+QToolButton#pathIconTb{
+ border: none;
+ padding: 0px;
+ }
+
+QToolButton#pathIconTb:hover{
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(253,253,253), stop: 1 rgb(227,227,227));
+ border: 1px solid rgb(180, 180, 180);
+ border-radius: 0px;
+ padding: 0px;
+ }
+
+QToolButton#pathMenuTb{
+ image: url(":/desktop/directory_arrow.svg");
+ border: none;
+ padding: 0px;
+}
+
+QToolButton#pathMenuTb:hover{
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #deebf6, stop: 1 #bed8ee);
+ border: 1px solid rgb(160, 160, 160);
+ border-radius: 0px;
+ padding: 0px;
+}
+
+
+
+/*---------------------------------------
+ Icon editors
+----------------------------------------*/
+
+QLabel#editorHeaderLabel {
+ border: 1px solid rgb(60,60,60);
+ background: rgb(246, 246, 246);
+}
+
+QLabel#editorHeaderIcon {
+ background: rgb(246, 246, 246);
+ border: 1px solid rgb(110,110,110);
+}
+
+QLabel#editorWarningLabel {
+ background: rgb(255, 226, 171);
+ border: 1px solid rgb(174,174,172);
+ border-radius: 4px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+
+QLabel#editorMessageLabel {
+ background: rgb(255, 231, 231);
+ border: 1px solid rgb(223,152,152);
+ border-radius: 4px;
+}
+
+/*QToolButton::enabled#guiItemDefaultTb {
+ padding: 0px;
+ background: rgb(12, 121, 224);
+ }*/
+
+QToolButton#guiItemDefaultTb {
+ padding: 0px;
+}
+
+/*---------------------------------------
+ Search
+----------------------------------------*/
+
+/*QLabel[lineEdit="true"] {
+ padding: 1 px;
+}*/
\ No newline at end of file
diff --git a/share/metview/app-defaults/Drawers/Visual Definitions/.Observation Plotting b/share/metview/app-defaults/Drawers/Visual Definitions/.Observation Plotting
new file mode 100644
index 0000000..f776eb2
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Visual Definitions/.Observation Plotting
@@ -0,0 +1,5 @@
+USER_INTERFACE,
+ ICON_CLASS = MOBS,
+ X = 177,
+ Y = 82
+
diff --git a/share/metview/app-defaults/Drawers/Visual Definitions/Observation Plotting b/share/metview/app-defaults/Drawers/Visual Definitions/Observation Plotting
new file mode 100644
index 0000000..c1355bf
--- /dev/null
+++ b/share/metview/app-defaults/Drawers/Visual Definitions/Observation Plotting
@@ -0,0 +1 @@
+MOBS
\ No newline at end of file
diff --git a/share/metview/app-defaults/FrameKeyProfile_all.xml b/share/metview/app-defaults/FrameKeyProfile_all.xml
index 9cb1fd5..e4c4ccb 100644
--- a/share/metview/app-defaults/FrameKeyProfile_all.xml
+++ b/share/metview/app-defaults/FrameKeyProfile_all.xml
@@ -9,7 +9,6 @@
</Key>
</Profile>
<Profile name="GRIB API keys">
- <Key name="GRIBEditionNumber" shortName="GRIBEditionNumber" desc=""/>
<Key name="Ni" shortName="Ni" desc=""/>
<Key name="Nj" shortName="Nj" desc=""/>
<Key name="P1" shortName="P1" desc=""/>
@@ -265,4 +264,4 @@
<Key name="reportType" shortName="reportType" desc=""/>
<Key name="scanPosition" shortName="scanPosition" desc=""/>
</Profile>
-</MetviewKeyProfile>
\ No newline at end of file
+</MetviewKeyProfile>
diff --git a/share/metview/app-defaults/Makefile.am b/share/metview/app-defaults/Makefile.am
index a24c9c4..fe907a3 100644
--- a/share/metview/app-defaults/Makefile.am
+++ b/share/metview/app-defaults/Makefile.am
@@ -1,8 +1,9 @@
sharedir = $(datadir)/metview/app-defaults
dirstocopy = CommonMacroFuncs Drawers Templates news
-share_DATA = DemoFonts Metview NormalFonts User_Dir_Frame.tar.gz MvVersion MvVersionDetails metview.qss \
+share_DATA = DemoFonts Metview NormalFonts User_Dir_Frame.tar.gz Sample_Drawers.tar.gz MvVersion MvVersionDetails metview.qss \
BufrKeyProfile_default.xml BufrKeyProfile_all.xml GribKeyProfile_default.xml \
- FrameKeyProfile_default.xml FrameKeyProfile_all.xml LayerKeyProfile_default.xml
+ FrameKeyProfile_default.xml FrameKeyProfile_all.xml LayerKeyProfile_default.xml \
+ Desktop.qss UiTheme.Desktop
# to ensure that certain directories (Drawers, Templates, etc) are installed. Unfortunately,
diff --git a/share/metview/app-defaults/Makefile.in b/share/metview/app-defaults/Makefile.in
index 6cc6bda..2f7beec 100644
--- a/share/metview/app-defaults/Makefile.in
+++ b/share/metview/app-defaults/Makefile.in
@@ -39,6 +39,7 @@ subdir = share/metview/app-defaults
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -87,6 +88,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -110,6 +113,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -287,9 +291,10 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
sharedir = $(datadir)/metview/app-defaults
dirstocopy = CommonMacroFuncs Drawers Templates news
-share_DATA = DemoFonts Metview NormalFonts User_Dir_Frame.tar.gz MvVersion MvVersionDetails metview.qss \
+share_DATA = DemoFonts Metview NormalFonts User_Dir_Frame.tar.gz Sample_Drawers.tar.gz MvVersion MvVersionDetails metview.qss \
BufrKeyProfile_default.xml BufrKeyProfile_all.xml GribKeyProfile_default.xml \
- FrameKeyProfile_default.xml FrameKeyProfile_all.xml LayerKeyProfile_default.xml
+ FrameKeyProfile_default.xml FrameKeyProfile_all.xml LayerKeyProfile_default.xml \
+ Desktop.qss UiTheme.Desktop
BUILT_SOURCES = Drawers/Basic/Folder
EXTRA_DIST = $(share_DATA) $(dirstocopy)
diff --git a/share/metview/app-defaults/MvVersion b/share/metview/app-defaults/MvVersion
index f0f76fb..3401474 100644
--- a/share/metview/app-defaults/MvVersion
+++ b/share/metview/app-defaults/MvVersion
@@ -1 +1 @@
-4.4.3
\ No newline at end of file
+4.4.7
\ No newline at end of file
diff --git a/share/metview/app-defaults/MvVersionDetails b/share/metview/app-defaults/MvVersionDetails
index 4e8ea4e..da68786 100644
--- a/share/metview/app-defaults/MvVersionDetails
+++ b/share/metview/app-defaults/MvVersionDetails
@@ -1 +1 @@
-1 Metview 4 4 3 2012 1990-2012 15-October-2013
+1 Metview 4 4 7 2014 1990-2014 12-May-2014
diff --git a/share/metview/app-defaults/Sample_Drawers.tar.gz b/share/metview/app-defaults/Sample_Drawers.tar.gz
new file mode 100644
index 0000000..ec809ab
Binary files /dev/null and b/share/metview/app-defaults/Sample_Drawers.tar.gz differ
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Average Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Average Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Average View
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Average View
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Bufr Thermo Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Bufr Thermo Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Cartesian View
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Cartesian View
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Cross Section View
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Cross Section View
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Geopoints to KML
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Geopoints to KML
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Grib Thermo Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Grib Thermo Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Hovmoeller View
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Hovmoeller View
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Input Visualiser
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Input Visualiser
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.NetCDF Visualiser
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.NetCDF Visualiser
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Observation Filter
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Observation Filter
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Odb Thermo Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Odb Thermo Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Odb Visualiser
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Odb Visualiser
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Reprojection
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Reprojection
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Scm Run
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Scm Run
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Table Visualiser
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Table Visualiser
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/.Vapor Prepare
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/.Vapor Prepare
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Average Data/.Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Average Data/.Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Average View/.Horizontal Axis
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Average View/.Horizontal Axis
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Average View/.Vertical Axis
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Average View/.Vertical Axis
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Bufr Thermo Data/.Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Bufr Thermo Data/.Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Bufr Thermo Data/.Station
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Bufr Thermo Data/.Station
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Cartesian View/.Horizontal Axis
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Cartesian View/.Horizontal Axis
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Cartesian View/.Taylor Grid
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Cartesian View/.Taylor Grid
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Cartesian View/.Tephigram Grid
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Cartesian View/.Tephigram Grid
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Cartesian View/.Thermo Grid
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Cartesian View/.Thermo Grid
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Cartesian View/.Vertical Axis
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Cartesian View/.Vertical Axis
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Cross Section View/.Horizontal Axis
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Cross Section View/.Horizontal Axis
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Cross Section View/.Vertical Axis
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Cross Section View/.Vertical Axis
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Geopoints to KML/.Geopoints
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Geopoints to KML/.Geopoints
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Grib Thermo Data/.Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Grib Thermo Data/.Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Grib Thermo Data/.Station
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Grib Thermo Data/.Station
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Hovmoeller View/.Geo Axis
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Hovmoeller View/.Geo Axis
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Hovmoeller View/.Time Axis
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Hovmoeller View/.Time Axis
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Hovmoeller View/.Vertical Axis
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Hovmoeller View/.Vertical Axis
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Input Visualiser/.Input Binning
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Input Visualiser/.Input Binning
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/NetCDF Visualiser/.Netcdf Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/NetCDF Visualiser/.Netcdf Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Observation Filter/.Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Observation Filter/.Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Odb Thermo Data/.Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Odb Thermo Data/.Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Odb Visualiser/.Odb Binning
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Odb Visualiser/.Odb Binning
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Odb Visualiser/.Odb Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Odb Visualiser/.Odb Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Reprojection/.Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Reprojection/.Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Scm Run/.Scm Input Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Scm Run/.Scm Input Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Scm Run/.Scm Namelist
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Scm Run/.Scm Namelist
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Scm Run/.Scm Vtable
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Scm Run/.Scm Vtable
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Table Visualiser/.Table Binning
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Table Visualiser/.Table Binning
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Table Visualiser/.Table Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Table Visualiser/.Table Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Vapor Prepare/.Vapor Input Data
similarity index 100%
copy from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
copy to share/metview/app-defaults/Templates/Vapor Prepare/.Vapor Input Data
diff --git a/share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis b/share/metview/app-defaults/Templates/Vertical Profile View/.Level Axis
similarity index 100%
rename from share/metview/app-defaults/Templates/Vertical Profile View/.Pressure Axis
rename to share/metview/app-defaults/Templates/Vertical Profile View/.Level Axis
diff --git a/share/metview/app-defaults/UiTheme.Desktop b/share/metview/app-defaults/UiTheme.Desktop
new file mode 100644
index 0000000..b185cc1
--- /dev/null
+++ b/share/metview/app-defaults/UiTheme.Desktop
@@ -0,0 +1,158 @@
+#active
+#"window" 224 223 222
+#"shadow" 70 69 68
+#"brighttext" 255 255 255
+#"buttontext" 20 19 18
+#"mid" 187 185 184
+#"text" 20 19 18
+#"base" 255 255 255
+#"tooltipbase" 192 218 255
+#"linkvisited" 69 40 134
+#"dark" 125 124 123
+#"midlight" 233 233 232
+#"tooltiptext" 20 19 18
+#"light" 255 255 255
+#"highlightedtext" 255 255 255
+#"link" 0 87 174
+#"alternatebase" 232 232 232
+#"button" 232 231 230
+#"windowtext" 20 19 18
+#"higlight" 65 139 212
+
+#inactive
+#"window" 224 223 222
+#"shadow" 70 69 68
+#"brighttext" 255 255 255
+#"buttontext" 20 19 18
+#"mid" 187 185 184
+#"text" 20 19 18
+#"base" 255 255 255
+#"tooltipbase" 192 218 255
+#"linkvisited" 69 40 134
+#"dark" 125 124 123
+#"midlight" 233 233 232
+#"tooltiptext" 20 19 18
+#"light" 255 255 255
+#"highlightedtext" 255 255 255
+#"link" 0 87 174
+#"alternatebase" 232 232 232
+#"button" 232 231 230
+#"windowtext" 20 19 18
+#"higlight" 65 139 212
+
+#disabled
+#"window" 214 213 211
+#"shadow" 69 68 67
+#"brighttext" 255 255 255
+#"buttontext" 151 150 149
+#"mid" 179 178 176
+#"text" 165 164 164
+#"base" 244 244 244
+#"tooltipbase" 192 218 255
+#"linkvisited" 182 170 208
+#"dark" 119 118 117
+#"midlight" 224 223 222
+#"tooltiptext" 20 19 18
+#"light" 248 248 247
+#"highlightedtext" 146 145 144
+#"link" 151 188 223
+#"alternatebase" 232 232 232
+#"button" 222 220 219
+#"windowtext" 146 145 144
+#"higlight" 214 213 211
+
+palette_active,
+ window = 'rgb(220,221,222)',
+ windowtext = 'rgb(20,19,18)',
+ base = 'rgb(255,255,255)',
+ alternatebase = 'rgb(220,220,220)',
+ text = 'rgb(20,19,18)',
+ button = 'rgb(232,231,230)',
+ buttontext = 'rgb(20,20,20)',
+ brighttext = 'rgb(255,255,255)',
+ light = 'rgb(225,225,225)',
+ midlight = 'rgb(233,232,231)',
+ dark = 'rgb(125,124,123)',
+ mid = 'rgb(187,185,184)',
+ shadow = 'rgb(70,69,68)',
+ highligt = 'rgb(65,139,212)',
+ highligtedtext = 'rgb(255,255,255)'
+
+
+palette_inactive,
+ window = 'rgb(220,221,222)',
+ windowtext = 'rgb(20,19,18)',
+ base = 'rgb(255,255,255)',
+ alternatebase = 'rgb(220,220,220)',
+ text = 'rgb(20,19,18)',
+ button = 'rgb(232,231,230)',
+ buttontext = 'rgb(20,20,20)',
+ brighttext = 'rgb(255,255,255)',
+ light = 'rgb(225,225,225)',
+ midlight = 'rgb(233,232,231)',
+ dark = 'rgb(125,124,123)',
+ mid = 'rgb(187,185,184)',
+ shadow = 'rgb(70,69,68)',
+ highligt = 'rgb(65,139,212)',
+ highligtedtext = 'rgb(255,255,255)'
+
+palette_disabled,
+ window = 'rgb(210,211,212)',
+ windowtext = 'rgb(146,145,144)',
+ base = 'rgb(244,244,244)',
+ alternatebase = 'rgb(220,220,220)',
+ text = 'rgb(165,164,164)',
+ button = 'rgb(242,241,240)',
+ buttontext = 'rgb(181,180,189)',
+ brighttext = 'rgb(255,255,255)',
+ light = 'rgb(245,245,245)',
+ midlight = 'rgb(234,233,232)',
+ dark = 'rgb(139,138,137)',
+ mid = 'rgb(219,218,216)',
+ shadow = 'rgb(70,69,68)',
+ highligt = 'rgb(214,213,211)',
+ highligtedtext = 'rgb(146,145,144)'
+
+
+icon_info,
+ name = 'rgb(20,20,20)',
+ type = 'rgb(90,90,90)',
+ size = 'rgb(8,76,179)',
+ time = 'rgb(20,20,20)'
+
+itemview_main,
+ text = 'rgb(30,30,30)',
+ select_brush = 'gradient(p1(0,0),p2(0,1),rgb(220,235,252),rgb(193,220,252))',
+ select_pen = 'rgb(125,162,206)',
+ hover_brush = 'gradient(p1(0,0),p2(0,1),rgb(250,250,250),rgb(240,240,240))',
+ hover_pen = 'rgb(201,201,201)',
+ edit_brush = 'rgb(200,200,200)',
+ edit_pen = 'rgb(170,170,170)',
+ faded_text = 'rgb(190,190,190)',
+ faded_base = 'rgb(190,190,190)'
+
+itemview_helper,
+ text = 'rgb(30,30,30)',
+ select_brush = 'gradient(p1(0,0),p2(0,1),rgb(220,235,252),rgb(193,220,252))',
+ select_pen = 'rgb(125,162,206)',
+ hover_brush = 'gradient(p1(0,0),p2(0,1),rgb(250,250,250),rgb(240,240,240))',
+ hover_pen = 'rgb(201,201,201)',
+ edit_brush = 'rgb(200,200,200)',
+ edit_pen = 'rgb(170,170,170)'
+
+itemview_sidebar,
+ text = 'rgb(30,30,30)'
+
+editor,
+ line_item_brush_left = 'rgb(242,242,242)',
+ line_item_brush_right = 'gradient(p1(0,0),p2(0,1),rgb(235,235,235),rgb(225,225,225))',
+ line_item_pen_horizontal = 'rgb(140,140,140)',
+ line_item_pen_vertical = 'rgb(190,190,190)',
+ line_item_pen_reset = 'rgb(221,221,221)',
+ header_text = 'rgb(50,50,50)',
+ header_icon_name = 'rgb(8,113,218)'
+
+search,
+ not_found = 'rgb(247,230,230)',
+ found = 'rgb(186,249,206)'
+
diff --git a/share/metview/app-defaults/User_Dir_Frame.tar.gz b/share/metview/app-defaults/User_Dir_Frame.tar.gz
index b42129f..a1f89d4 100644
Binary files a/share/metview/app-defaults/User_Dir_Frame.tar.gz and b/share/metview/app-defaults/User_Dir_Frame.tar.gz differ
diff --git a/share/metview/app-defaults/metview.qss b/share/metview/app-defaults/metview.qss
index 0be815c..a31f977 100644
--- a/share/metview/app-defaults/metview.qss
+++ b/share/metview/app-defaults/metview.qss
@@ -1,3 +1,18 @@
+
+/*--------------------------------
+ Toolbar
+----------------------------------*/
+
+/*This sets the icon size for all the icons in a mainwindow's toolbar*/
+QMainWindow {
+ icon-size: 20px;
+}
+
+QToolBar > QToolButton {
+ padding: 1px;
+}
+
+
QLineEdit:read-only {
background: #eeeeee;
color: #3a3a3a
@@ -10,35 +25,6 @@ QLineEdit#iconLabel {
color: black;
}
-QFrame#guiItemLine {
- border: 1px solid rgb(190,190,190);
- }
-
-QToolButton::checked#guiItemDefaultTb {
- background: rgb(12, 121, 224);
- }
-
-QToolButton::menu-indicator {
- image: url(":/desktop/menu_indicator.png");
- }
-
-QLabel#editorHeaderLabel {
- background: rgb(246, 246, 246);
-}
-
-QLabel#editorWarningLabel {
- background: rgb(255, 226, 171);
- border: 1px solid rgb(174,174,172);
- border-radius: 4px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-
-QLabel#editorMessageLabel {
- background: rgb(255, 231, 231);
- border: 1px solid rgb(223,152,152);
- border-radius: 4px;
-}
QLabel#fileInfoLabel {
background: rgb(246, 246, 246);
@@ -68,55 +54,37 @@ QToolButton#zoomStackLevelTb:checked {
border-color: red;
}
-QToolButton#pathNameTb {
- background: rgb(242, 242, 242);
- border: 1px solid rgb(220, 220, 220);
- border-radius: 0px;
- padding: 0px;
- }
-
-QToolButton#pathNameTb:hover{
- background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #deebf6, stop: 1 #bed8ee);
- border: 1px solid rgb(160, 160, 160);
- border-radius: 0px;
- padding: 0px;
- }
-
-QToolButton#pathIconTb{
- background: white;
- border: none;
- padding: 0px;
- }
-
-QToolButton#pathIconTb:hover{
- background: white;
- border: 1px solid rgb(160, 160, 160);
- border-radius: 0px;
- padding: 0px;
+QTreeView[mvStyle="desktop"] {
+ background: rgb(252, 252, 252);
+ color: rgb(30,30,30);
+ icon-size: 18px;
}
-QToolButton#pathMenuTb{
- background: white;
- border: none;
- padding: 0px;
+QTreeView::item:selected[mvStyle="desktop"] {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(220,235,252), stop: 1 rgb(193,220,252));
+ border-top: 1px solid rgb(125,162,206);
+ border-bottom: 1px solid rgb(125,162,206);
+ color: rgb(30,30,30);
}
-QListView[mvStyle="bookmarks"] {
- background: rgb(238, 238, 238);
- border-style: outset;
- border-width: 1px;
- border-color: rgb(120, 120, 120);;
- border-radius: 8px;
- padding: 1px;
+QListView[mvStyle="desktop"] {
+ background: rgb(252, 252, 252);
+ color: rgb(30,30,30);
+ icon-size: 18px;
}
-QListView::text[mvStyle="IconFolderView"] {
- background: rgb(238, 0, 0);
- }
+QListView::item:selected[mvStyle="desktop"] {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(220,235,252), stop: 1 rgb(193,220,252));
+ border-top: 1px solid rgb(125,162,206);
+ border-bottom: 1px solid rgb(125,162,206);
+ color: rgb(30,30,30);
+}
-QListView[mvStyle="helper"] {
- background: rgb(238, 238, 238);
- }
+QListView::item:hover[mvStyle="desktop"] {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(250,250,250), stop: 1 rgb(240,240,240));
+ border-top: 1px solid rgb(127,154,191);
+ border-bottom: 1px solid rgb(127,154,191);
+}
QAbstractItemView[mvStyle="0"] {
@@ -201,28 +169,8 @@ QPlainTextEdit[mvStyle="fileContents"]{ background: rgb(255, 255, 242) }
QPlainTextEdit[mvStyle="fileContentsReadOnly"]{ background: rgb(240, 240, 240) }
-QPlainTextEdit[mvStyle="mailAttachment"]{ background: rgb(240, 240, 240) }
-
QTextEdit { font-size: 9pt }
QStatusBar::item { border: 0px solid black }
-QTabBar::tab:selected[mvStyle="folder"] {
- font: bold ;
- }
-
-QScrollBar::vertical:handler[mvStyle="helper"] {
- min-height : 10px ;
- }
-
-QToolBar
-{
- icon-size: 16px;
-}
-
-QWidget [path="1"]{
- background: white;
- border-radius: 4px;
- border-color: rgb(20,200.200);
- border-top-width: 4px;
-}
+QPlainTextEdit[macro="true"] { background: rgb(245, 245, 245)}
diff --git a/share/metview/etc/CartesianViewDef b/share/metview/etc/CartesianViewDef
index aadd4d7..8ec4d09 100644
--- a/share/metview/etc/CartesianViewDef
+++ b/share/metview/etc/CartesianViewDef
@@ -144,13 +144,13 @@ CARTESIANVIEW; CartesianTransformation; MagicsPlusPlus Object
{
@
}
- TEPHIGRAM_GRID [interface = icon,
- class = MTEPHI, missing = ignored,
+ THERMO_GRID [interface = icon,
+ class = MTHERMOGRID, missing = ignored,
help = help_data,
- help_name = Tephigram Grid,
+ help_name = Thermo Grid,
help_directory = '/System/Defaults',
- help_class = MTEPHI,
- help_definition = ( MTEPHI )
+ help_class = MTHERMOGRID,
+ help_definition = ( MTHERMOGRID )
]
{
@
diff --git a/share/metview/etc/CartesianViewRules b/share/metview/etc/CartesianViewRules
index 38d163a..761b843 100644
--- a/share/metview/etc/CartesianViewRules
+++ b/share/metview/etc/CartesianViewRules
@@ -1,4 +1,4 @@
-%if MAP_PROJECTION = tephigram %then
+%if MAP_PROJECTION = tephigram %then
%unset HORIZONTAL_AXIS
%unset VERTICAL_AXIS
%unset X_AUTOMATIC
@@ -17,21 +17,26 @@
%unset Y_MAX_LATITUDE
%unset Y_MIN_LONGITUDE
%unset Y_MAX_LONGITUDE
-
-%if MAP_PROJECTION <> tephigram %then
- %unset TEPHIGRAM_GRID
-%if MAP_PROJECTION <> taylor %then
- %unset TAYLOR_GRID
+%if MAP_PROJECTION <> tephigram %then
+ %unset THERMO_GRID
-
-%if X_AUTOMATIC = off %then
- %unset X_AUTOMATIC_REVERSE
+%if MAP_PROJECTION <> taylor %then
+ %unset TAYLOR_GRID
-%if Y_AUTOMATIC = off %then
- %unset Y_AUTOMATIC_REVERSE
+%if X_AUTOMATIC = on %then
+ %unset X_MIN
+ %unset X_MAX
+ %unset X_MIN_LATITUDE
+ %unset X_MAX_LATITUDE
+ %unset X_MIN_LONGITUDE
+ %unset X_MAX_LONGITUDE
+ %unset X_DATE_MIN
+ %unset X_DATE_MAX
+
+%if X_AUTOMATIC = off %then
+ %unset X_AUTOMATIC_REVERSE
-
%if X_AXIS_TYPE = regular %or X_AXIS_TYPE = logarithmic %then
%unset X_DATE_MIN
%unset X_DATE_MAX
@@ -54,6 +59,19 @@
%unset X_MIN_LONGITUDE
%unset X_MAX_LONGITUDE
+%if Y_AUTOMATIC = on %then
+ %unset Y_MIN
+ %unset Y_MAX
+ %unset Y_MIN_LATITUDE
+ %unset Y_MAX_LATITUDE
+ %unset Y_MIN_LONGITUDE
+ %unset Y_MAX_LONGITUDE
+ %unset Y_DATE_MIN
+ %unset Y_DATE_MAX
+
+%if Y_AUTOMATIC = off %then
+ %unset Y_AUTOMATIC_REVERSE
+
%if Y_AXIS_TYPE = regular %or Y_AXIS_TYPE = logarithmic %then
%unset Y_DATE_MIN
%unset Y_DATE_MAX
diff --git a/share/metview/etc/ConfigDef b/share/metview/etc/ConfigDef
index 23a5f10..6ef7c70 100644
--- a/share/metview/etc/ConfigDef
+++ b/share/metview/etc/ConfigDef
@@ -352,13 +352,31 @@ GENERAL_PREFERENCES; Configuration; Metview
{
@
} = '../Devices/Default Printer'
+
+ DEFAULT_VIEW_MODE [interface = option_menu]
+ {
+ CLASSIC_ICON_VIEW
+ SIMPLE_ICON_VIEW
+ DETAILED_VIEW
+ } = CLASSIC_ICON_VIEW
- FOLDER_ICON_SIZE_POLICY [interface = option_menu]
+ DEFAULT_ICON_SIZE [interface = option_menu]
{
- Unique icon size for each folder ; UNIQUE
- Same icon size for all folders ; SAME
- } = SAME
-
+ 12
+ 16
+ 24
+ 32
+ 48
+ 64
+ 96
+ } = 32
+
+ ICON_DRAG_POLICY [interface = option_menu]
+ {
+ 'Show all the selected icons during drag' ; SHOW_ALL
+ 'Show only the dragged icon during drag' ; SHOW_DRAGGED
+ } = SHOW_DRAGGED
+
DATA_CACHE_RETENTION_PERIOD
{
0; INFINITE
@@ -368,9 +386,9 @@ GENERAL_PREFERENCES; Configuration; Metview
USE_NETWORK_PROXY
[ visible = true ]
{
- 'Yes' ; yes
- 'No' ; no
- } = yes
+ YES
+ NO
+ } = YES
PROXY_URL {
@
diff --git a/share/metview/etc/GeoViewDef b/share/metview/etc/GeoViewDef
index 6d2696a..c9dc0cf 100644
--- a/share/metview/etc/GeoViewDef
+++ b/share/metview/etc/GeoViewDef
@@ -16,18 +16,19 @@ GEOVIEW; GEOVIEW; UPLOT
MAP_PROJECTION
{
CYLINDRICAL ; CYLINDRICAL
- POLAR_STEREOGRAPHIC ; POLAR_STEREOGRAPHIC
- POLAR_NORTH
- LAMBERT
- LAMBERT_NORTH_ATLANTIC
+ BONNE
+ COLLIGNON
+ EPSG:32661
+ EPSG:4326
GEOS
GOODE
- COLLIGNON
+ LAMBERT
+ LAMBERT_NORTH_ATLANTIC
+ MERCATOR
MOLLWEIDE
+ POLAR_NORTH
+ POLAR_STEREOGRAPHIC ; POLAR_STEREOGRAPHIC
ROBINSON
- BONNE
- EPSG:32661
- EPSG:4326
} = CYLINDRICAL
MAP_AREA_DEFINITION
diff --git a/share/metview/etc/MARS_webapi b/share/metview/etc/MARS_webapi
new file mode 100644
index 0000000..4ad71a3
--- /dev/null
+++ b/share/metview/etc/MARS_webapi
@@ -0,0 +1,9 @@
+cat <<END_OF_HERE_DOCUMENT
+#---------------------------------------------------------- MARS_webapi
+#
+# Only MARS access through the Web API is configured
+#
+#--------------------------------------------------------------------
+
+END_OF_HERE_DOCUMENT
+
diff --git a/share/metview/etc/MSYMBDef b/share/metview/etc/MSYMBDef
index b35ba73..1cc207c 100644
--- a/share/metview/etc/MSYMBDef
+++ b/share/metview/etc/MSYMBDef
@@ -26,7 +26,6 @@ MSYMB; Magics; Automatically generated
TEXT;TEXT
MARKER;MARKER
WIND;WIND
- BOTH;BOTH
} = NUMBER
SYMBOL_TABLE_MODE
@@ -159,8 +158,7 @@ MSYMB; Magics; Automatically generated
SYMBOL_TEXT_FONT_NAME
{
- SERIF;SERIF
- SANSSERIF;SANSSERIF
+ @
} = SANSSERIF
SYMBOL_TEXT_FONT_SIZE
@@ -187,6 +185,11 @@ MSYMB; Magics; Automatically generated
OFF; OFF
} = OFF
+ SYMBOL_LEGEND_HEIGHT
+ {
+ *
+ } = -1
+
SYMBOL_MIN_TABLE
{
*
@@ -354,8 +357,7 @@ MSYMB; Magics; Automatically generated
SYMBOL_ADVANCED_TABLE_TEXT_FONT_NAME
{
- SERIF;SERIF
- SANSSERIF;SANSSERIF
+ @
} = SANSSERIF
SYMBOL_ADVANCED_TABLE_TEXT_FONT_SIZE
diff --git a/share/metview/etc/MSYMBRules b/share/metview/etc/MSYMBRules
index 59542c8..7203b0e 100644
--- a/share/metview/etc/MSYMBRules
+++ b/share/metview/etc/MSYMBRules
@@ -1,12 +1,12 @@
+%if SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR <> OFF %or SYMBOL_CONNECT_LINE <> ON %then
+ %unset SYMBOL_CONNECT_LINE_COLOUR
+
%if SYMBOL_CONNECT_LINE <> ON %then
%unset SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR
%unset SYMBOL_CONNECT_LINE_THICKNESS
%unset SYMBOL_CONNECT_LINE_STYLE
-%if SYMBOL_TYPE <> TEXT %then
- %unset SYMBOL_TEXT_LIST
-
%if SYMBOL_TABLE_MODE <> ON %then
%unset SYMBOL_MAX_TABLE
%unset SYMBOL_NAME_TABLE
@@ -18,12 +18,13 @@
%if LEGEND <> ON %or SYMBOL_TABLE_MODE <> OFF %then
%unset LEGEND_USER_TEXT
-%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> LIST %or SYMBOL_TABLE_MODE <> ADVANCED %then
- %unset SYMBOL_ADVANCED_TABLE_LEVEL_LIST
-
%if SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> NUMBER %and SYMBOL_TYPE <> TEXT %then
%unset SYMBOL_TEXT_BLANKING
+%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> INTERVAL %or SYMBOL_TABLE_MODE <> ADVANCED %then
+ %unset SYMBOL_ADVANCED_TABLE_INTERVAL
+ %unset SYMBOL_ADVANCED_TABLE_REFERENCE_LEVEL
+
%if SYMBOL_ADVANCED_TABLE_COLOUR_METHOD <> LIST %or SYMBOL_TABLE_MODE <> ADVANCED %then
%unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST
%unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST_POLICY
@@ -31,17 +32,23 @@
%if SYMBOL_MARKER_MODE <> INDEX %or SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
%unset SYMBOL_MARKER_INDEX
-%if SYMBOL_TYPE <> NUMBER %and SYMBOL_TYPE <> TEXT %then
- %unset SYMBOL_TEXT_BLANKING
+%if SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> NUMBER %then
+ %unset SYMBOL_FORMAT
+
+%if SYMBOL_MARKER_MODE <> NAME %or SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
+ %unset SYMBOL_MARKER_NAME
+
+%if SYMBOL_MARKER_MODE <> IMAGE %or SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
+ %unset SYMBOL_IMAGE_WIDTH
+ %unset SYMBOL_IMAGE_HEIGHT
+ %unset SYMBOL_IMAGE_PATH
+ %unset SYMBOL_IMAGE_FORMAT
%if SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
%unset SYMBOL_MARKER_MODE
- %unset SYMBOL_MARKER_INDEX
- %unset SYMBOL_MARKER_NAME
-%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> INTERVAL %or SYMBOL_TABLE_MODE <> ADVANCED %then
- %unset SYMBOL_ADVANCED_TABLE_INTERVAL
- %unset SYMBOL_ADVANCED_TABLE_REFERENCE_LEVEL
+%if SYMBOL_ADVANCED_TABLE_SELECTION_TYPE <> LIST %or SYMBOL_TABLE_MODE <> ADVANCED %then
+ %unset SYMBOL_ADVANCED_TABLE_LEVEL_LIST
%if SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> TEXT %then
%unset SYMBOL_TEXT_LIST
@@ -51,9 +58,10 @@
%unset SYMBOL_OUTLINE_THICKNESS
%unset SYMBOL_OUTLINE_COLOUR
-%if SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD <> LIST %or SYMBOL_TABLE_MODE <> ADVANCED %then
- %unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST
- %unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST_POLICY
+%if SYMBOL_TABLE_MODE <> OFF %then
+ %unset SYMBOL_LEGEND_HEIGHT
+ %unset SYMBOL_COLOUR
+ %unset SYMBOL_HEIGHT
%if SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD <> CALCULATE %or SYMBOL_TABLE_MODE <> ADVANCED %then
%unset SYMBOL_ADVANCED_TABLE_HEIGHT_MAX_VALUE
@@ -75,60 +83,25 @@
%unset SYMBOL_ADVANCED_TABLE_COLOUR_DIRECTION
%unset SYMBOL_ADVANCED_TABLE_MAX_LEVEL_COLOUR
-%if SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
- %unset SYMBOL_IMAGE_WIDTH
- %unset SYMBOL_IMAGE_HEIGHT
- %unset SYMBOL_IMAGE_PATH
- %unset SYMBOL_IMAGE_FORMAT
-
-%if SYMBOL_CONNECT_AUTOMATIC_LINE_COLOUR <> OFF %or SYMBOL_CONNECT_LINE <> ON %then
- %unset SYMBOL_CONNECT_LINE_COLOUR
+%if SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD <> LIST %or SYMBOL_TABLE_MODE <> ADVANCED %then
+ %unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST
+ %unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST_POLICY
%if SYMBOL_TABLE_MODE <> ADVANCED %then
%unset SYMBOL_ADVANCED_TABLE_SELECTION_TYPE
- %unset SYMBOL_ADVANCED_TABLE_TEXT_LIST
- %unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_SIZE
- %unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_STYLE
- %unset SYMBOL_ADVANCED_TABLE_INTERVAL
- %unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST
- %unset SYMBOL_ADVANCED_TABLE_COLOUR_LIST_POLICY
- %unset SYMBOL_ADVANCED_TABLE_LEVEL_COUNT
%unset SYMBOL_ADVANCED_TABLE_COLOUR_METHOD
- %unset SYMBOL_ADVANCED_TABLE_HEIGHT_MIN_VALUE
- %unset SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD
- %unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST_POLICY
- %unset SYMBOL_ADVANCED_TABLE_REFERENCE_LEVEL
- %unset SYMBOL_ADVANCED_TABLE_MARKER_LIST_POLICY
- %unset SYMBOL_ADVANCED_TABLE_MAX_LEVEL_COLOUR
- %unset SYMBOL_ADVANCED_TABLE_OUTLAYER_MIN_VALUE
+ %unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_COLOUR
+ %unset SYMBOL_ADVANCED_TABLE_MIN_VALUE
%unset SYMBOL_ADVANCED_TABLE_OUTLAYER_METHOD
+ %unset SYMBOL_ADVANCED_TABLE_TEXT_LIST
+ %unset SYMBOL_ADVANCED_TABLE_HEIGHT_METHOD
%unset SYMBOL_ADVANCED_TABLE_OUTLAYER_MAX_VALUE
- %unset SYMBOL_ADVANCED_TABLE_HEIGHT_LIST
+ %unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_SIZE
%unset SYMBOL_ADVANCED_TABLE_MARKER_LIST
- %unset SYMBOL_ADVANCED_TABLE_MAX_VALUE
- %unset SYMBOL_ADVANCED_TABLE_COLOUR_DIRECTION
- %unset SYMBOL_ADVANCED_TABLE_LEVEL_TOLERANCE
- %unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_COLOUR
- %unset SYMBOL_ADVANCED_TABLE_MIN_VALUE
- %unset SYMBOL_ADVANCED_TABLE_HEIGHT_MAX_VALUE
+ %unset SYMBOL_ADVANCED_TABLE_MARKER_LIST_POLICY
%unset SYMBOL_ADVANCED_TABLE_TEXT_LIST_POLICY
- %unset SYMBOL_ADVANCED_TABLE_LEVEL_LIST
- %unset SYMBOL_ADVANCED_TABLE_MIN_LEVEL_COLOUR
+ %unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_STYLE
+ %unset SYMBOL_ADVANCED_TABLE_MAX_VALUE
+ %unset SYMBOL_ADVANCED_TABLE_OUTLAYER_MIN_VALUE
%unset SYMBOL_ADVANCED_TABLE_TEXT_FONT_NAME
%unset SYMBOL_ADVANCED_TABLE_TEXT_DISPLAY_TYPE
-
-%if SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> NUMBER %then
- %unset SYMBOL_FORMAT
-
-%if SYMBOL_MARKER_MODE <> NAME %or SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
- %unset SYMBOL_MARKER_NAME
-
-%if SYMBOL_TABLE_MODE <> OFF %then
- %unset SYMBOL_COLOUR
- %unset SYMBOL_HEIGHT
-
-%if SYMBOL_MARKER_MODE <> IMAGE %or SYMBOL_TABLE_MODE <> OFF %or SYMBOL_TYPE <> BOTH %and SYMBOL_TYPE <> MARKER %then
- %unset SYMBOL_IMAGE_WIDTH
- %unset SYMBOL_IMAGE_HEIGHT
- %unset SYMBOL_IMAGE_PATH
- %unset SYMBOL_IMAGE_FORMAT
diff --git a/share/metview/etc/MTHERMOGRIDDef b/share/metview/etc/MTHERMOGRIDDef
new file mode 100644
index 0000000..511fe49
--- /dev/null
+++ b/share/metview/etc/MTHERMOGRIDDef
@@ -0,0 +1,322 @@
+PARAMSHARE ; ParamShare; PARAMSHARE
+{
+ COLOUR {
+ %include MagicsColors.h
+ }
+ STYLE {
+ SOLID; SOLID
+ DASH; DASH
+ DOT; DOT
+ CHAIN_DOT; CHAIN_DOT
+ CHAIN_DASH; CHAIN_DASH
+ }
+}
+
+MTHERMOGRID; Magics; Automatically generated
+{
+ THERMO_ISOTHERM_GRID [ help_text = 'Plot the isotherms' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ THERMO_ISOTHERM_COLOUR [ help = help_colour,interface = colour, help_text='Colou of the isotherms' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = CHARCOAL
+
+ THERMO_ISOTHERM_THICKNESS[ help_text = 'Thickness of the isotherms' ]
+ {
+ *
+ } = 1
+
+ THERMO_ISOTHERM_STYLE
+ {
+ &PARAMSHARE&STYLE
+ } = SOLID
+
+ THERMO_ISOTHERM_INTERVAL[ help_text = 'interval for isotherms grid' ]
+ {
+ *
+ } = 10
+
+ THERMO_ISOTHERM_REFERENCE[ help_text = 'Reference of the isotherms' ]
+ {
+ *
+ } = 0
+
+ THERMO_ISOTHERM_REFERENCE_COLOUR [ help = help_colour,interface = colour, help_text='Reference of the isotherms' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = RED
+
+ THERMO_ISOTHERM_REFERENCE_STYLE
+ {
+ &PARAMSHARE&STYLE
+ } = SOLID
+
+ THERMO_ISOTHERM_REFERENCE_THICKNESS[ help_text = 'Reference of the isotherms' ]
+ {
+ *
+ } = 2
+
+ THERMO_ISOTHERM_LABEL_COLOUR [ help = help_colour,interface = colour, help_text='Label Colour for the isotherms' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = CHARCOAL
+
+ THERMO_ISOTHERM_LABEL_FONT_NAME
+ {
+ @
+ } = SANSERIF
+
+ THERMO_ISOTHERM_LABEL_FONT_STYLE
+ {
+ NORMAL;NORMAL
+ BOLD;BOLD
+ ITALIC;ITALIC
+ BOLDITALIC;BOLDITALIC
+ } = NORMAL
+
+ THERMO_ISOTHERM_LABEL_FONT_SIZE[ help_text = 'Font Size used for the isotherms labels' ]
+ {
+ *
+ } = 0.3
+
+ THERMO_ISOTHERM_LABEL_FREQUENCY[ help_text = 'Isotherm frequency for labelling' ]
+ {
+ *
+ } = 1
+
+ THERMO_ISOBAR_GRID [ help_text = 'Plot the isobars' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ THERMO_ISOBAR_COLOUR [ help = help_colour,interface = colour, help_text='Colou of the isobars' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = EVERGREEN
+
+ THERMO_ISOBAR_THICKNESS[ help_text = 'Thickness of the isobars' ]
+ {
+ *
+ } = 2
+
+ THERMO_ISOBAR_STYLE
+ {
+ &PARAMSHARE&STYLE
+ } = SOLID
+
+ THERMO_ISOBAR_INTERVAL[ help_text = 'Interval between isobars' ]
+ {
+ *
+ } = 100
+
+ THERMO_ISOBAR_REFERENCE[ help_text = 'Line Style of the isobars' ]
+ {
+ *
+ } = 1000
+
+ THERMO_ISOBAR_LABEL_COLOUR [ help = help_colour,interface = colour, help_text='Label Colour for the isotherms' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = EVERGREEN
+
+ THERMO_ISOBAR_LABEL_FONT_NAME
+ {
+ @
+ } = SANSERIF
+
+ THERMO_ISOBAR_LABEL_FONT_STYLE
+ {
+ NORMAL;NORMAL
+ BOLD;BOLD
+ ITALIC;ITALIC
+ BOLDITALIC;BOLDITALIC
+ } = NORMAL
+
+ THERMO_ISOBAR_LABEL_FONT_SIZE[ help_text = 'Font Size used for the isobars labels' ]
+ {
+ *
+ } = 0.3
+
+ THERMO_ISOBAR_LABEL_FREQUENCY[ help_text = 'isobar frequency for labelling' ]
+ {
+ *
+ } = 1
+
+ THERMO_DRY_ADIABATIC_GRID [ help_text = 'Plot the dry_adiabatics' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ THERMO_DRY_ADIABATIC_COLOUR [ help = help_colour,interface = colour, help_text='Colou of the dry_adiabatics' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = CHARCOAL
+
+ THERMO_DRY_ADIABATIC_THICKNESS[ help_text = 'Thickness of the dry_adiabatics' ]
+ {
+ *
+ } = 1
+
+ THERMO_DRY_ADIABATIC_STYLE
+ {
+ &PARAMSHARE&STYLE
+ } = SOLID
+
+ THERMO_DRY_ADIABATIC_INTERVAL[ help_text = 'Interval between 2 dry_adiabatics.' ]
+ {
+ *
+ } = 10
+
+ THERMO_DRY_ADIABATIC_REFERENCE[ help_text = 'Reference of the dry_adiabatics' ]
+ {
+ *
+ } = 0
+
+ THERMO_DRY_ADIABATIC_LABEL_COLOUR [ help = help_colour,interface = colour, help_text='Label Colour for the isotherms' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = CHARCOAL
+
+ THERMO_DRY_ADIABATIC_LABEL_FONT_NAME
+ {
+ @
+ } = SANSERIF
+
+ THERMO_DRY_ADIABATIC_LABEL_FONT_STYLE
+ {
+ NORMAL;NORMAL
+ BOLD;BOLD
+ ITALIC;ITALIC
+ BOLDITALIC;BOLDITALIC
+ } = NORMAL
+
+ THERMO_DRY_ADIABATIC_LABEL_FONT_SIZE[ help_text = 'Font Size used for the dry_adiabatics labels' ]
+ {
+ *
+ } = 0.3
+
+ THERMO_DRY_ADIABATIC_LABEL_FREQUENCY[ help_text = 'frequency for dry_adiabatic labelling' ]
+ {
+ *
+ } = 1
+
+ THERMO_SATURATED_ADIABATIC_GRID [ help_text = 'Plot the saturated_adiabatics' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ THERMO_SATURATED_ADIABATIC_COLOUR [ help = help_colour,interface = colour, help_text='Colou of the saturated_adiabatics' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = CHARCOAL
+
+ THERMO_SATURATED_ADIABATIC_THICKNESS[ help_text = 'Thickness of the dry_adiabatics' ]
+ {
+ *
+ } = 2
+
+ THERMO_SATURATED_ADIABATIC_STYLE
+ {
+ &PARAMSHARE&STYLE
+ } = SOLID
+
+ THERMO_SATURATED_ADIABATIC_INTERVAL[ help_text = 'interval for saturated_adiabatics grid' ]
+ {
+ *
+ } = 5
+
+ THERMO_SATURATED_ADIABATIC_REFERENCE[ help_text = 'Reference of the saturated_adiabatics' ]
+ {
+ *
+ } = 0
+
+ THERMO_SATURATED_ADIABATIC_LABEL_COLOUR [ help = help_colour,interface = colour, help_text='Label Colour for the isotherms' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = CHARCOAL
+
+ THERMO_SATURATED_ADIABATIC_LABEL_FONT_NAME
+ {
+ @
+ } = SANSERIF
+
+ THERMO_SATURATED_ADIABATIC_LABEL_FONT_STYLE
+ {
+ NORMAL;NORMAL
+ BOLD;BOLD
+ ITALIC;ITALIC
+ BOLDITALIC;BOLDITALIC
+ } = NORMAL
+
+ THERMO_SATURATED_ADIABATIC_LABEL_FONT_SIZE[ help_text = 'Font Size used for the saturated_adiabatics labels' ]
+ {
+ *
+ } = 0.3
+
+ THERMO_SATURATED_ADIABATIC_LABEL_FREQUENCY[ help_text = 'saturated_adiabatic frequency for labelling' ]
+ {
+ *
+ } = 1
+
+ THERMO_MIXING_RATIO_GRID [ help_text = 'Plot the mixing_ratios' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ THERMO_MIXING_RATIO_COLOUR [ help = help_colour,interface = colour, help_text='Colou of the mixing_ratios' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = PURPLE
+
+ THERMO_MIXING_RATIO_THICKNESS[ help_text = 'Thickness of the mixing_ratios' ]
+ {
+ *
+ } = 1
+
+ THERMO_MIXING_RATIO_STYLE
+ {
+ &PARAMSHARE&STYLE
+ } = DASH
+
+ THERMO_MIXING_RATIO_FREQUENCY[ help_text = 'mixing_ratio frequency for grid' ]
+ {
+ *
+ } = 1
+
+ THERMO_MIXING_RATIO_LABEL_COLOUR [ help = help_colour,interface = colour, help_text='Label Colour for the isotherms' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = PURPLE
+
+ THERMO_MIXING_RATIO_LABEL_FONT_NAME
+ {
+ @
+ } = SANSERIF
+
+ THERMO_MIXING_RATIO_LABEL_FONT_STYLE
+ {
+ NORMAL;NORMAL
+ BOLD;BOLD
+ ITALIC;ITALIC
+ BOLDITALIC;BOLDITALIC
+ } = NORMAL
+
+ THERMO_MIXING_RATIO_LABEL_FONT_SIZE[ help_text = 'Font Size used for the mixing_ratios labels' ]
+ {
+ *
+ } = 0.3
+
+ THERMO_MIXING_RATIO_LABEL_FREQUENCY[ help_text = 'mixing_ratio frequency for labelling' ]
+ {
+ *
+ } = 1
+
+}
diff --git a/share/metview/etc/MTHERMOGRIDRules b/share/metview/etc/MTHERMOGRIDRules
new file mode 100644
index 0000000..bbfe9f1
--- /dev/null
+++ b/share/metview/etc/MTHERMOGRIDRules
@@ -0,0 +1,62 @@
+
+%if THERMO_ISOTHERM_GRID <> ON %then
+ %unset THERMO_ISOTHERM_LABEL_FONT_STYLE
+ %unset THERMO_ISOTHERM_LABEL_COLOUR
+ %unset THERMO_ISOTHERM_LABEL_FREQUENCY
+ %unset THERMO_ISOTHERM_REFERENCE_STYLE
+ %unset THERMO_ISOTHERM_REFERENCE_THICKNESS
+ %unset THERMO_ISOTHERM_STYLE
+ %unset THERMO_ISOTHERM_COLOUR
+ %unset THERMO_ISOTHERM_REFERENCE
+ %unset THERMO_ISOTHERM_LABEL_FONT_NAME
+ %unset THERMO_ISOTHERM_INTERVAL
+ %unset THERMO_ISOTHERM_REFERENCE_COLOUR
+ %unset THERMO_ISOTHERM_THICKNESS
+ %unset THERMO_ISOTHERM_LABEL_FONT_SIZE
+
+%if THERMO_MIXING_RATIO_GRID <> ON %then
+ %unset THERMO_MIXING_RATIO_STYLE
+ %unset THERMO_MIXING_RATIO_COLOUR
+ %unset THERMO_MIXING_RATIO_LABEL_COLOUR
+ %unset THERMO_MIXING_RATIO_LABEL_FONT_STYLE
+ %unset THERMO_MIXING_RATIO_LABEL_FONT_SIZE
+ %unset THERMO_MIXING_RATIO_LABEL_FONT_NAME
+ %unset THERMO_MIXING_RATIO_THICKNESS
+ %unset THERMO_MIXING_RATIO_LABEL_FREQUENCY
+
+%if THERMO_ISOBAR_GRID <> ON %then
+ %unset THERMO_ISOBAR_INTERVAL
+ %unset THERMO_ISOBAR_LABEL_FREQUENCY
+ %unset THERMO_ISOBAR_COLOUR
+ %unset THERMO_ISOBAR_LABEL_FONT_NAME
+ %unset THERMO_ISOBAR_STYLE
+ %unset THERMO_ISOBAR_THICKNESS
+ %unset THERMO_ISOBAR_LABEL_FONT_SIZE
+ %unset THERMO_ISOBAR_LABEL_REFERENCE
+ %unset THERMO_ISOBAR_LABEL_COLOUR
+ %unset THERMO_ISOBAR_LABEL_FONT_STYLE
+ %unset THERMO_ISOBAR_REFERENCE
+
+%if THERMO_SATURATED_ADIABATIC_GRID <> ON %then
+ %unset THERMO_SATURATED_ADIABATIC_REFERENCE
+ %unset THERMO_SATURATED_ADIABATIC_LABEL_FONT_STYLE
+ %unset THERMO_SATURATED_ADIABATIC_LABEL_COLOUR
+ %unset THERMO_SATURATED_ADIABATIC_LABEL_FONT_NAME
+ %unset THERMO_SATURATED_ADIABATIC_STYLE
+ %unset THERMO_SATURATED_ADIABATIC_THICKNESS
+ %unset THERMO_SATURATED_ADIABATIC_COLOUR
+ %unset THERMO_SATURATED_ADIABATIC_LABEL_FONT_SIZE
+ %unset THERMO_SATURATED_ADIABATIC_LABEL_FREQUENCY
+ %unset THERMO_SATURATED_ADIABATIC_INTERVAL
+
+%if THERMO_DRY_ADIABATIC_GRID <> ON %then
+ %unset THERMO_DRY_ADIABATIC_THICKNESS
+ %unset THERMO_DRY_ADIABATIC_COLOUR
+ %unset THERMO_DRY_ADIABATIC_STYLE
+ %unset THERMO_DRY_ADIABATIC_LABEL_FONT_NAME
+ %unset THERMO_DRY_ADIABATIC_LABEL_COLOUR
+ %unset THERMO_DRY_ADIABATIC_REFERENCE
+ %unset THERMO_DRY_ADIABATIC_LABEL_FONT_STYLE
+ %unset THERMO_DRY_ADIABATIC_LABEL_FREQUENCY
+ %unset THERMO_DRY_ADIABATIC_LABEL_FONT_SIZE
+ %unset THERMO_DRY_ADIABATIC_INTREVAL
diff --git a/share/metview/etc/MWINDRules b/share/metview/etc/MWINDRules
index b335bd8..89426a6 100644
--- a/share/metview/etc/MWINDRules
+++ b/share/metview/etc/MWINDRules
@@ -1,13 +1,13 @@
%if WIND_FIELD_TYPE <> FLAGS %or WIND_FLAG_CALM_INDICATOR <> ON %then
%unset WIND_FLAG_CALM_INDICATOR_SIZE
- %unset WIND_FLAG_CALM_BELOW
%if WIND_FIELD_TYPE <> FLAGS %then
%unset WIND_FLAG_ORIGIN_MARKER
%unset WIND_FLAG_MIN_SPEED
%unset WIND_FLAG_LENGTH
%unset WIND_FLAG_ORIGIN_MARKER_SIZE
+ %unset WIND_FLAG_CALM_BELOW
%unset WIND_FLAG_COLOUR
%unset WIND_FLAG_THICKNESS
%unset WIND_FLAG_STYLE
@@ -23,10 +23,10 @@
%if WIND_ARROW_CALM_INDICATOR <> ON %or WIND_FIELD_TYPE <> ARROWS %then
%unset WIND_ARROW_CALM_INDICATOR_SIZE
- %unset WIND_ARROW_CALM_BELOW
%if WIND_FIELD_TYPE <> ARROWS %then
%unset WIND_ARROW_UNIT_VELOCITY
+ %unset WIND_ARROW_CALM_BELOW
%unset WIND_ARROW_HEAD_SHAPE
%unset WIND_ARROW_MAX_SPEED
%unset WIND_ARROW_HEAD_RATIO
diff --git a/share/metview/etc/Makefile.am b/share/metview/etc/Makefile.am
index fe4d3a6..5f20c8c 100644
--- a/share/metview/etc/Makefile.am
+++ b/share/metview/etc/Makefile.am
@@ -38,6 +38,7 @@ share_DATA = \
MARS_none \
MARS_local \
MARS_remote \
+ MARS_webapi \
MAXISDef MAXISRules \
MCOASTDef MCOASTRules \
MCONTDef MCONTRules \
@@ -46,6 +47,7 @@ share_DATA = \
MSYMBDef MSYMBRules \
MTAYLORDef MTAYLORRules \
MTEXTDef MTEXTRules \
+ MTHERMOGRIDDef MTHERMOGRIDRules \
MWINDDef MWINDRules \
MacroDef \
MacroParamDef \
@@ -62,10 +64,9 @@ share_DATA = \
MarsTiggeRules \
ObjectList \
ObjectList.forTesting \
- ObsDef \
- ObsRules \
ObsFilterDef \
ObsFilterRules \
+ ObsPlottingDef ObsPlottingRules \
OverlayControl \
OverlayControlDef \
OverlayControlRules \
@@ -125,6 +126,8 @@ share_DATA = \
rt_by_obsgroup.chk \
reportypes.def \
tigge.def \
+ ms_mars.cfg \
+ ms_mars.cfg.INFO \
macro_built_in_functions.txt \
macro_deprecated_functions.txt \
macro_templates.txt \
diff --git a/share/metview/etc/Makefile.in b/share/metview/etc/Makefile.in
index f86b039..86d93e5 100644
--- a/share/metview/etc/Makefile.in
+++ b/share/metview/etc/Makefile.in
@@ -41,6 +41,7 @@ subdir = share/metview/etc
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -129,6 +130,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -152,6 +155,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -338,36 +342,37 @@ share_DATA = AnnotationViewDef AnnotationViewRules \
DivrotRules DrawingPriorityDef DrawingPriorityRules EcfsDef \
EPSOutputDef GenAppDef GenAppRules GeoToGribDef GeoViewDef \
GeoViewRules GraphDef GraphRules GribToGeoDef Input_Window \
- KMLOutputDef MARS_none MARS_local MARS_remote MAXISDef \
- MAXISRules MCOASTDef MCOASTRules MCONTDef MCONTRules MGRAPHDef \
- MGRAPHRules MLEGENDDef MLEGENDRules MSYMBDef MSYMBRules \
- MTAYLORDef MTAYLORRules MTEXTDef MTEXTRules MWINDDef \
- MWINDRules MacroDef MacroParamDef MacroParamRules MacroRules \
- MagicsColors.h MapViewDef MapViewRules MarsDef MarsRules \
- MarsG2Def MarsG2Rules MarsTiggeDef MarsTiggeRules ObjectList \
- ObjectList.forTesting ObsDef ObsRules ObsFilterDef \
- ObsFilterRules OverlayControl OverlayControlDef \
- OverlayControlRules PageFrameDef PageFrameRules PDFOutputDef \
- PercentileDef PercentileRules PlotPageDef PlotPageRules \
- PlotSubPageDef PlotSubPageRules PlotSuperPageDef \
- PlotSuperPageRules Plot_Window_for_Image PNGOutputDef PottFDef \
- PottFRules PSOutputDef RelHumDef RelHumRules Services \
- SimpleFormulaDef SimpleFormulaRules StationDef StationRules \
- SubpageFrameDef SubpageFrameRules SVGOutputDef SymbDef \
- SymbRules TableCommonDef TableReaderDef TableReaderRules \
- TextDef TextRules UiSpec.Bookmarks UiSpec.Breadcrumbs \
- UiSpec.DetailedFolderView UiSpec.DrawerView \
+ KMLOutputDef MARS_none MARS_local MARS_remote MARS_webapi \
+ MAXISDef MAXISRules MCOASTDef MCOASTRules MCONTDef MCONTRules \
+ MGRAPHDef MGRAPHRules MLEGENDDef MLEGENDRules MSYMBDef \
+ MSYMBRules MTAYLORDef MTAYLORRules MTEXTDef MTEXTRules \
+ MTHERMOGRIDDef MTHERMOGRIDRules MWINDDef MWINDRules MacroDef \
+ MacroParamDef MacroParamRules MacroRules MagicsColors.h \
+ MapViewDef MapViewRules MarsDef MarsRules MarsG2Def \
+ MarsG2Rules MarsTiggeDef MarsTiggeRules ObjectList \
+ ObjectList.forTesting ObsFilterDef ObsFilterRules \
+ ObsPlottingDef ObsPlottingRules OverlayControl \
+ OverlayControlDef OverlayControlRules PageFrameDef \
+ PageFrameRules PDFOutputDef PercentileDef PercentileRules \
+ PlotPageDef PlotPageRules PlotSubPageDef PlotSubPageRules \
+ PlotSuperPageDef PlotSuperPageRules Plot_Window_for_Image \
+ PNGOutputDef PottFDef PottFRules PSOutputDef RelHumDef \
+ RelHumRules Services SimpleFormulaDef SimpleFormulaRules \
+ StationDef StationRules SubpageFrameDef SubpageFrameRules \
+ SVGOutputDef SymbDef SymbRules TableCommonDef TableReaderDef \
+ TableReaderRules TextDef TextRules UiSpec.Bookmarks \
+ UiSpec.Breadcrumbs UiSpec.DetailedFolderView UiSpec.DrawerView \
UiSpec.FolderDrawerPanel UiSpec.FolderHistory \
UiSpec.FolderPanel UiSpec.FolderView UiSpec.IconFolderView \
UiSpec.IconHelpView UiSpec.IconHolderView \
UiSpec.TemplateDrawerView UiSpec.ViewDrawerView VelstrDef \
VelstrRules VoidDef WidgetDef WindDef WindRules dwd.def \
ecmwf.def italy.def mars.chk oldrd.chk obsgroups.def \
- rt_by_obsgroup.chk reportypes.def tigge.def \
- macro_built_in_functions.txt macro_deprecated_functions.txt \
- macro_templates.txt uPlotTable macro_icon_function_help.xml \
- licence_for_about_box.txt licence_for_macros.txt \
- $(am__append_1) $(am__append_2)
+ rt_by_obsgroup.chk reportypes.def tigge.def ms_mars.cfg \
+ ms_mars.cfg.INFO macro_built_in_functions.txt \
+ macro_deprecated_functions.txt macro_templates.txt uPlotTable \
+ macro_icon_function_help.xml licence_for_about_box.txt \
+ licence_for_macros.txt $(am__append_1) $(am__append_2)
nodist_share_DATA = ObjectListAll
EXTRA_DIST = $(share_DATA)
all: all-recursive
diff --git a/share/metview/etc/MarsEcRegridDef b/share/metview/etc/MarsEcRegridDef
index 0fc1220..78e8494 100644
--- a/share/metview/etc/MarsEcRegridDef
+++ b/share/metview/etc/MarsEcRegridDef
@@ -236,6 +236,8 @@ NEUTRAL WIND AT 10 M Y-COMPONENT ; V10N ; 228132 ; 132.228
NW-SE OROGRAPHIC VARIANCE ; NEOV ; 193
OBSERVATION COUNT ; OBCT ; 062
OCEAN POTENTIAL TEMPERATURE ; OCPT ; 129
+OCEAN CURRENT ZONAL COMPONENT ; OCU ; 131.151
+OCEAN CURRENT MERIDIONAL COMPONENT ; OCV ; 132.151
OZONE MASS MIXING RATIO ; O3 ; 203 ; 203.128
PEAK DIRECTION ; PD ; 230
PEAK PERIOD ; PP ; 231
@@ -1034,7 +1036,7 @@ GRIB IMAGES #= (0/1/10/20)
# Extractions
-BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/140/142/144/145/147/164)
+BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/109/111/140/142/144/145/147/164)
WAVESCAT = (121)
SCAT = (122)
RALT = (123)
@@ -1053,6 +1055,7 @@ ENVISAT_MERIS = (212)
ATMS = (201)
CRIS = (202)
SMOS = (203)
+AMSR2_GC = (60)
# FeedBack
@@ -1105,7 +1108,7 @@ FBWINDSAT = (156)
# Type VSNS (NSD)
-VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/106/107)
+VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/106/107/109/111)
PILOT LAND ; P ; 91
PILOT SHIP ; PS ; 92
@@ -1119,6 +1122,8 @@ VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/10
ROCOB SHIP ; RS ; 105
TEMP MOBILE ; TM ; 106
CLIMATE TEMP ; CT ; 107
+ HIGH RESOLUTION TEMP LAND ; HRT ; 109
+ HIGH RESOLUTION TEMP SHIP ; HRTS ; 111
# Type VSS (SD)
@@ -3046,7 +3051,7 @@ RETRIEVE_ECREGRID ; Retrieval of data ; MARS
{
DATASET [ java_hidden = TRUE ,
- visible = false,
+ visible = true,
check = false,
priority = 0]
{
@@ -4313,7 +4318,7 @@ READ_ECREGRID ; X; METVIEW
106
*
ANY ; ANY
- } = ANY
+ } = AUTO
ROTATION
{
diff --git a/share/metview/etc/MarsEcRegridRules b/share/metview/etc/MarsEcRegridRules
index 7d645ca..edf1548 100644
--- a/share/metview/etc/MarsEcRegridRules
+++ b/share/metview/etc/MarsEcRegridRules
@@ -123,7 +123,9 @@
%if GRID=O %and (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
%if GRID=AV %and (_APPL = mars %or _APPL = marsG2 %or _APPL = marsEcRegrid %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
-%if (RESOL=AUTO %or RESOL=AV) %and (%not GRID) %then %unset RESOL
+# READ_ECREGRID can have RESOL=AUTO and GRID=ANY
+%if (RESOL=AUTO %or RESOL=AV) %and ((%not GRID) %or (GRID = ANY)) %then %unset RESOL
+
%if (STYLE = DISSEMINATION) %and (RESOL=AUTO %or (%not RESOL)) %then
%warning "Force RESOL=AV when STYLE=DISSEMINATION"
%set RESOL=AV
@@ -153,6 +155,8 @@
%if USE = STAGE %then %set TARGET="/dev/null" %unset FIELDSET %set EXPECT=0
%if COSTONLY = N %then %unset COSTONLY
+%if (CLASS = EI) %and (GRID = 128 %or GRID=0.75) %then
+ %warning "For full resolution grid, it is recommended to use RESOL=AV to prevent any truncation before transformation"
!
@@ -233,6 +237,7 @@
TYPE <> FCSTDEV %and
TYPE <> SVAR %and
CLASS <> TI %and
+ CLASS <> S2 %and
STREAM <> MOFC %and
STREAM <> WAMF %and
STREAM <> MOFM %and
@@ -570,6 +575,7 @@
%and (CLASS<>E4 %and
CLASS<>EI %and
CLASS<>TI %and
+ CLASS<>S2 %and
CLASS<>ER %and
CLASS<>PV %and
CLASS<>DM %and
@@ -733,10 +739,10 @@
# %unset STEP
#
-%if CLASS = TI %or CLASS = S2 %then %unset DOMAIN
-%if CLASS = TI %and TYPE = CF %then %set NUMBER=0
+%if (CLASS = TI %or CLASS = S2) %then %unset DOMAIN
+%if (CLASS = TI %or CLASS = S2) %and TYPE = CF %then %set NUMBER=0
%if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
-%if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
+%if (CLASS = TI %or CLASS = S2) %and (%not EXPVER) %then %set EXPVER=PROD
%if CLASS = DM %and TYPE = FC %then %set TIME=0
diff --git a/share/metview/etc/MarsG2Def b/share/metview/etc/MarsG2Def
index 35ba792..87dfd79 100644
--- a/share/metview/etc/MarsG2Def
+++ b/share/metview/etc/MarsG2Def
@@ -59,6 +59,7 @@ CONVECTIVE AVAILABLE POTENTIAL ENERGY ; CAPE ; 59
CONVECTIVE INHIBITION ; CIN ; 228001
GEOPOTENTIAL HEIGHT ; GH ; 156
LAND SEA MASK ; LSM ; 172
+LARGE SCALE PRECIPITATION ; LSP ; 3062
MEAN SEA LEVEL PRESSURE ; MSL ; 151
OROGRAPHY ; OROG ; 228002
POTENTIAL TEMPERATURE ; PT ; 3
@@ -86,6 +87,27 @@ TOTAL COLUMN WATER ; TCW ; 136
TOTAL PRECIPITATION ; TP ; 228228
U VELOCITY ; U ; 131
V VELOCITY ; V ; 132
+WIND GUST AT 10 METRES IN THE LAST 3 HOURS ; 10FG3 ; 228028
+
+# Additions for S2S
+
+VERTICAL VELOCITY ; W ; 135
+CONVECTIVE PRECIPITATION ; CP ; 228143
+NORTHWARD TURBULENT SURFACE STRESS ; NSSS ; 181
+EASTWARD TURBULENT SURFACE STRESS ; EWSS ; 180
+WATER RUNFOFF AND DRAINAGE ; RO ; 228205
+SURFACE WATER RUNOFF ; SRO ; 8
+SNOW DENSITY ; RSN ; 33
+SEA SURFACE TEMPERATURE ; SSTK ; 34
+SEA ICE COVER ; CI ; 31
+SOIL MOISTURE TOP 20CM ; SM20 ; 228086
+SOIL MOISTURE TOP 100CM ; SM100 ; 228087
+SOIL TEMPERATURE TOP 20CM ; ST20 ; 228095
+SOIL TEMPERATURE TOP 100CM ; ST100 ; 228096
+SOIL TYPE ; SLT ; 43
+SNOW ALBEDO ; ASN ; 228032
+TIME INTEGRATED SURFACE NET SOLAR RADIATION DOWNWARDS ; SSRD ; 169
+TIME INTEGRATED SURFACE NET THERMAL RADIATION DOWNWARDS ; STRD ; 175
*
/
@@ -109,6 +131,7 @@ V VELOCITY ; V ; 132
STREAM
{
ENFO
+ ENFH
DA ; OPER
} = ENFO
@@ -325,6 +348,12 @@ ARCHIVE ; Archives data ; TIGGE
&TIGGEDEF&DATE
} = CURRENT DATE
+ HDATE
+ {
+ &TIGGEDEF&DATE
+ ALL
+ } = OFF
+
TIME
{
*
@@ -520,6 +549,12 @@ LIST ; LIST FDF ENTRIES AND CFS FILES ; TIGGE
ALL
}
+ HDATE
+ {
+ &TIGGEDEF&DATE
+ ALL
+ }
+
MONTH
{
@@ -849,6 +884,11 @@ STAGE ; STAGE FIELDS ; MARS
&TIGGEDEF&DATE
} = CURRENT DATE
+ HDATE
+ {
+ &TIGGEDEF&DATE
+ } = CURRENT DATE
+
TIME
{
*
@@ -1285,6 +1325,17 @@ RETRIEVE_G2 ; Retrieval of data ; TIGGE
&TIGGEDEF&DATE
} = YESTERDAY
+ HDATE [ java_control = CHOICE_TEXT_2,
+ java_section = DATE,
+ marsdoc = date/all,
+ mars_interface = text,
+ java_hidden = FALSE ]
+ {
+ &TIGGEDEF&DATE
+ ALL
+ OFF ; OFF
+ } = OFF
+
TIME [ java_control = CHOICE_TEXT_2,
java_section = DATE,
marsdoc = date/all,
@@ -1847,6 +1898,12 @@ READ_G2 ; X; TIGGEMETVIEW
&TIGGEDEF&DATE
} = ANY
+ HDATE
+ {
+ ANY ; ANY
+ &TIGGEDEF&DATE
+ } = ANY
+
TIME
{
ANY
diff --git a/share/metview/etc/MarsG2Rules b/share/metview/etc/MarsG2Rules
index c31367f..c3354fe 100644
--- a/share/metview/etc/MarsG2Rules
+++ b/share/metview/etc/MarsG2Rules
@@ -123,7 +123,9 @@
%if GRID=O %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
%if GRID=AV %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
-%if (RESOL=AUTO %or RESOL=AV) %and (%not GRID) %then %unset RESOL
+# READ_G2 can have RESOL=AUTO and GRID=ANY
+%if (RESOL=AUTO %or RESOL=AV) %and ((%not GRID) %or (GRID = ANY)) %then %unset RESOL
+
%if (STYLE = DISSEMINATION) %and (RESOL=AUTO %or (%not RESOL)) %then
%warning "Force RESOL=AV when STYLE=DISSEMINATION"
%set RESOL=AV
@@ -153,6 +155,8 @@
%if USE = STAGE %then %set TARGET="/dev/null" %unset FIELDSET %set EXPECT=0
%if COSTONLY = N %then %unset COSTONLY
+%if (CLASS = EI) %and (GRID = 128 %or GRID=0.75) %then
+ %warning "For full resolution grid, it is recommended to use RESOL=AV to prevent any truncation before transformation"
!
@@ -233,6 +237,7 @@
TYPE <> FCSTDEV %and
TYPE <> SVAR %and
CLASS <> TI %and
+ CLASS <> S2 %and
STREAM <> MOFC %and
STREAM <> WAMF %and
STREAM <> MOFM %and
@@ -570,6 +575,7 @@
%and (CLASS<>E4 %and
CLASS<>EI %and
CLASS<>TI %and
+ CLASS<>S2 %and
CLASS<>ER %and
CLASS<>PV %and
CLASS<>DM %and
@@ -733,10 +739,10 @@
# %unset STEP
#
-%if CLASS = TI %or CLASS = S2 %then %unset DOMAIN
-%if CLASS = TI %and TYPE = CF %then %set NUMBER=0
+%if (CLASS = TI %or CLASS = S2) %then %unset DOMAIN
+%if (CLASS = TI %or CLASS = S2) %and TYPE = CF %then %set NUMBER=0
%if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
-%if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
+%if (CLASS = TI %or CLASS = S2) %and (%not EXPVER) %then %set EXPVER=PROD
%if CLASS = DM %and TYPE = FC %then %set TIME=0
diff --git a/share/metview/etc/MarsOdbDef b/share/metview/etc/MarsOdbDef
index c8217b6..9420784 100644
--- a/share/metview/etc/MarsOdbDef
+++ b/share/metview/etc/MarsOdbDef
@@ -236,6 +236,8 @@ NEUTRAL WIND AT 10 M Y-COMPONENT ; V10N ; 228132 ; 132.228
NW-SE OROGRAPHIC VARIANCE ; NEOV ; 193
OBSERVATION COUNT ; OBCT ; 062
OCEAN POTENTIAL TEMPERATURE ; OCPT ; 129
+OCEAN CURRENT ZONAL COMPONENT ; OCU ; 131.151
+OCEAN CURRENT MERIDIONAL COMPONENT ; OCV ; 132.151
OZONE MASS MIXING RATIO ; O3 ; 203 ; 203.128
PEAK DIRECTION ; PD ; 230
PEAK PERIOD ; PP ; 231
@@ -1034,7 +1036,7 @@ GRIB IMAGES #= (0/1/10/20)
# Extractions
-BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/140/142/144/145/147/164)
+BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/109/111/140/142/144/145/147/164)
WAVESCAT = (121)
SCAT = (122)
RALT = (123)
@@ -1053,6 +1055,7 @@ ENVISAT_MERIS = (212)
ATMS = (201)
CRIS = (202)
SMOS = (203)
+AMSR2_GC = (60)
# FeedBack
@@ -1105,7 +1108,7 @@ FBWINDSAT = (156)
# Type VSNS (NSD)
-VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/106/107)
+VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/106/107/109/111)
PILOT LAND ; P ; 91
PILOT SHIP ; PS ; 92
@@ -1119,6 +1122,8 @@ VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/10
ROCOB SHIP ; RS ; 105
TEMP MOBILE ; TM ; 106
CLIMATE TEMP ; CT ; 107
+ HIGH RESOLUTION TEMP LAND ; HRT ; 109
+ HIGH RESOLUTION TEMP SHIP ; HRTS ; 111
# Type VSS (SD)
@@ -3046,7 +3051,7 @@ RETRIEVE_ODB ; Retrieval of data ; MARS
{
DATASET [ java_hidden = TRUE ,
- visible = false,
+ visible = true,
check = false,
priority = 0]
{
@@ -4313,7 +4318,7 @@ READ_ODB ; X; METVIEW
106
*
ANY ; ANY
- } = ANY
+ } = AUTO
ROTATION
{
diff --git a/share/metview/etc/MarsOdbRules b/share/metview/etc/MarsOdbRules
index cec9762..86661e6 100644
--- a/share/metview/etc/MarsOdbRules
+++ b/share/metview/etc/MarsOdbRules
@@ -123,7 +123,9 @@
%if GRID=O %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
%if GRID=AV %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
-%if (RESOL=AUTO %or RESOL=AV) %and (%not GRID) %then %unset RESOL
+# READ_ODB can have RESOL=AUTO and GRID=ANY
+%if (RESOL=AUTO %or RESOL=AV) %and ((%not GRID) %or (GRID = ANY)) %then %unset RESOL
+
%if (STYLE = DISSEMINATION) %and (RESOL=AUTO %or (%not RESOL)) %then
%warning "Force RESOL=AV when STYLE=DISSEMINATION"
%set RESOL=AV
@@ -153,6 +155,8 @@
%if USE = STAGE %then %set TARGET="/dev/null" %unset FIELDSET %set EXPECT=0
%if COSTONLY = N %then %unset COSTONLY
+%if (CLASS = EI) %and (GRID = 128 %or GRID=0.75) %then
+ %warning "For full resolution grid, it is recommended to use RESOL=AV to prevent any truncation before transformation"
!
@@ -233,6 +237,7 @@
TYPE <> FCSTDEV %and
TYPE <> SVAR %and
CLASS <> TI %and
+ CLASS <> S2 %and
STREAM <> MOFC %and
STREAM <> WAMF %and
STREAM <> MOFM %and
@@ -570,6 +575,7 @@
%and (CLASS<>E4 %and
CLASS<>EI %and
CLASS<>TI %and
+ CLASS<>S2 %and
CLASS<>ER %and
CLASS<>PV %and
CLASS<>DM %and
@@ -733,10 +739,10 @@
# %unset STEP
#
-%if CLASS = TI %or CLASS = S2 %then %unset DOMAIN
-%if CLASS = TI %and TYPE = CF %then %set NUMBER=0
+%if (CLASS = TI %or CLASS = S2) %then %unset DOMAIN
+%if (CLASS = TI %or CLASS = S2) %and TYPE = CF %then %set NUMBER=0
%if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
-%if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
+%if (CLASS = TI %or CLASS = S2) %and (%not EXPVER) %then %set EXPVER=PROD
%if CLASS = DM %and TYPE = FC %then %set TIME=0
diff --git a/share/metview/etc/MarsRules b/share/metview/etc/MarsRules
index 7a09ed9..4a5f5c8 100755
--- a/share/metview/etc/MarsRules
+++ b/share/metview/etc/MarsRules
@@ -123,7 +123,9 @@
%if GRID=O %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
%if GRID=AV %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
-%if (RESOL=AUTO %or RESOL=AV) %and (%not GRID) %then %unset RESOL
+# READ can have RESOL=AUTO and GRID=ANY
+%if (RESOL=AUTO %or RESOL=AV) %and ((%not GRID) %or (GRID = ANY)) %then %unset RESOL
+
%if (STYLE = DISSEMINATION) %and (RESOL=AUTO %or (%not RESOL)) %then
%warning "Force RESOL=AV when STYLE=DISSEMINATION"
%set RESOL=AV
@@ -153,6 +155,8 @@
%if USE = STAGE %then %set TARGET="/dev/null" %unset FIELDSET %set EXPECT=0
%if COSTONLY = N %then %unset COSTONLY
+%if (CLASS = EI) %and (GRID = 128 %or GRID=0.75) %then
+ %warning "For full resolution grid, it is recommended to use RESOL=AV to prevent any truncation before transformation"
!
@@ -233,6 +237,7 @@
TYPE <> FCSTDEV %and
TYPE <> SVAR %and
CLASS <> TI %and
+ CLASS <> S2 %and
STREAM <> MOFC %and
STREAM <> WAMF %and
STREAM <> MOFM %and
@@ -570,6 +575,7 @@
%and (CLASS<>E4 %and
CLASS<>EI %and
CLASS<>TI %and
+ CLASS<>S2 %and
CLASS<>ER %and
CLASS<>PV %and
CLASS<>DM %and
@@ -733,10 +739,10 @@
# %unset STEP
#
-%if CLASS = TI %or CLASS = S2 %then %unset DOMAIN
-%if CLASS = TI %and TYPE = CF %then %set NUMBER=0
+%if (CLASS = TI %or CLASS = S2) %then %unset DOMAIN
+%if (CLASS = TI %or CLASS = S2) %and TYPE = CF %then %set NUMBER=0
%if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
-%if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
+%if (CLASS = TI %or CLASS = S2) %and (%not EXPVER) %then %set EXPVER=PROD
%if CLASS = DM %and TYPE = FC %then %set TIME=0
diff --git a/share/metview/etc/MarsTiggeDef b/share/metview/etc/MarsTiggeDef
index b15ffd4..355323e 100644
--- a/share/metview/etc/MarsTiggeDef
+++ b/share/metview/etc/MarsTiggeDef
@@ -59,6 +59,7 @@ CONVECTIVE AVAILABLE POTENTIAL ENERGY ; CAPE ; 59
CONVECTIVE INHIBITION ; CIN ; 228001
GEOPOTENTIAL HEIGHT ; GH ; 156
LAND SEA MASK ; LSM ; 172
+LARGE SCALE PRECIPITATION ; LSP ; 3062
MEAN SEA LEVEL PRESSURE ; MSL ; 151
OROGRAPHY ; OROG ; 228002
POTENTIAL TEMPERATURE ; PT ; 3
@@ -86,6 +87,27 @@ TOTAL COLUMN WATER ; TCW ; 136
TOTAL PRECIPITATION ; TP ; 228228
U VELOCITY ; U ; 131
V VELOCITY ; V ; 132
+WIND GUST AT 10 METRES IN THE LAST 3 HOURS ; 10FG3 ; 228028
+
+# Additions for S2S
+
+VERTICAL VELOCITY ; W ; 135
+CONVECTIVE PRECIPITATION ; CP ; 228143
+NORTHWARD TURBULENT SURFACE STRESS ; NSSS ; 181
+EASTWARD TURBULENT SURFACE STRESS ; EWSS ; 180
+WATER RUNFOFF AND DRAINAGE ; RO ; 228205
+SURFACE WATER RUNOFF ; SRO ; 8
+SNOW DENSITY ; RSN ; 33
+SEA SURFACE TEMPERATURE ; SSTK ; 34
+SEA ICE COVER ; CI ; 31
+SOIL MOISTURE TOP 20CM ; SM20 ; 228086
+SOIL MOISTURE TOP 100CM ; SM100 ; 228087
+SOIL TEMPERATURE TOP 20CM ; ST20 ; 228095
+SOIL TEMPERATURE TOP 100CM ; ST100 ; 228096
+SOIL TYPE ; SLT ; 43
+SNOW ALBEDO ; ASN ; 228032
+TIME INTEGRATED SURFACE NET SOLAR RADIATION DOWNWARDS ; SSRD ; 169
+TIME INTEGRATED SURFACE NET THERMAL RADIATION DOWNWARDS ; STRD ; 175
*
/
@@ -109,6 +131,7 @@ V VELOCITY ; V ; 132
STREAM
{
ENFO
+ ENFH
DA ; OPER
} = ENFO
@@ -325,6 +348,12 @@ ARCHIVE ; Archives data ; TIGGE
&TIGGEDEF&DATE
} = CURRENT DATE
+ HDATE
+ {
+ &TIGGEDEF&DATE
+ ALL
+ } = OFF
+
TIME
{
*
@@ -520,6 +549,12 @@ LIST ; LIST FDF ENTRIES AND CFS FILES ; TIGGE
ALL
}
+ HDATE
+ {
+ &TIGGEDEF&DATE
+ ALL
+ }
+
MONTH
{
@@ -849,6 +884,11 @@ STAGE ; STAGE FIELDS ; MARS
&TIGGEDEF&DATE
} = CURRENT DATE
+ HDATE
+ {
+ &TIGGEDEF&DATE
+ } = CURRENT DATE
+
TIME
{
*
@@ -1285,6 +1325,17 @@ RETRIEVE_TIGGE ; Retrieval of data ; TIGGE
&TIGGEDEF&DATE
} = YESTERDAY
+ HDATE [ java_control = CHOICE_TEXT_2,
+ java_section = DATE,
+ marsdoc = date/all,
+ mars_interface = text,
+ java_hidden = FALSE ]
+ {
+ &TIGGEDEF&DATE
+ ALL
+ OFF ; OFF
+ } = OFF
+
TIME [ java_control = CHOICE_TEXT_2,
java_section = DATE,
marsdoc = date/all,
@@ -1847,6 +1898,12 @@ READ_TIGGE ; X; TIGGEMETVIEW
&TIGGEDEF&DATE
} = ANY
+ HDATE
+ {
+ ANY ; ANY
+ &TIGGEDEF&DATE
+ } = ANY
+
TIME
{
ANY
diff --git a/share/metview/etc/MarsTiggeRules b/share/metview/etc/MarsTiggeRules
index b7e07f9..1658749 100644
--- a/share/metview/etc/MarsTiggeRules
+++ b/share/metview/etc/MarsTiggeRules
@@ -123,7 +123,9 @@
%if GRID=O %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
%if GRID=AV %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
-%if (RESOL=AUTO %or RESOL=AV) %and (%not GRID) %then %unset RESOL
+# READ_TIGGE can have RESOL=AUTO and GRID=ANY
+%if (RESOL=AUTO %or RESOL=AV) %and ((%not GRID) %or (GRID = ANY)) %then %unset RESOL
+
%if (STYLE = DISSEMINATION) %and (RESOL=AUTO %or (%not RESOL)) %then
%warning "Force RESOL=AV when STYLE=DISSEMINATION"
%set RESOL=AV
@@ -153,6 +155,8 @@
%if USE = STAGE %then %set TARGET="/dev/null" %unset FIELDSET %set EXPECT=0
%if COSTONLY = N %then %unset COSTONLY
+%if (CLASS = EI) %and (GRID = 128 %or GRID=0.75) %then
+ %warning "For full resolution grid, it is recommended to use RESOL=AV to prevent any truncation before transformation"
!
@@ -233,6 +237,7 @@
TYPE <> FCSTDEV %and
TYPE <> SVAR %and
CLASS <> TI %and
+ CLASS <> S2 %and
STREAM <> MOFC %and
STREAM <> WAMF %and
STREAM <> MOFM %and
@@ -570,6 +575,7 @@
%and (CLASS<>E4 %and
CLASS<>EI %and
CLASS<>TI %and
+ CLASS<>S2 %and
CLASS<>ER %and
CLASS<>PV %and
CLASS<>DM %and
@@ -733,10 +739,10 @@
# %unset STEP
#
-%if CLASS = TI %or CLASS = S2 %then %unset DOMAIN
-%if CLASS = TI %and TYPE = CF %then %set NUMBER=0
+%if (CLASS = TI %or CLASS = S2) %then %unset DOMAIN
+%if (CLASS = TI %or CLASS = S2) %and TYPE = CF %then %set NUMBER=0
%if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
-%if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
+%if (CLASS = TI %or CLASS = S2) %and (%not EXPVER) %then %set EXPVER=PROD
%if CLASS = DM %and TYPE = FC %then %set TIME=0
diff --git a/share/metview/etc/ObjectList b/share/metview/etc/ObjectList
index 4339a43..a8b8f17 100644
--- a/share/metview/etc/ObjectList
+++ b/share/metview/etc/ObjectList
@@ -338,7 +338,8 @@ object,
type = Folder,
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/FOLDER.icon',
- doubleclick_method = Examine
+ doubleclick_method = Examine,
+ default_method = Open
object,
class = WASTEBASKET,
@@ -349,7 +350,8 @@ object,
type = Folder,
editor_type = NoEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/WASTEBASKET.icon',
- doubleclick_method = Examine
+ doubleclick_method = Examine,
+ default_method = Open
object,
class = SYSTEM,
@@ -360,7 +362,8 @@ object,
type = Folder,
editor_type = NoEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/SYSTEM.icon',
- doubleclick_method = Examine
+ doubleclick_method = Examine,
+ default_method = Open
object,
class = HOME,
@@ -371,7 +374,8 @@ object,
type = Folder,
editor_type = NoEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/HOME.icon',
- doubleclick_method = Examine
+ doubleclick_method = Examine,
+ default_method = Open
object,
class = PRODUCT,
@@ -382,7 +386,8 @@ object,
type = Folder,
editor_type = NoEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/PRODUCT.icon',
- doubleclick_method = Examine
+ doubleclick_method = Examine,
+ default_method = Open
object,
class = TEMPORARY,
@@ -393,7 +398,8 @@ object,
type = Folder,
editor_type = NoEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/SYSTEM.icon',
- doubleclick_method = Examine
+ doubleclick_method = Examine,
+ default_method = Open
object,
class = GENERAL_PREFERENCES,
@@ -416,7 +422,7 @@ object,
default_name = Notes,
help_page = Notes,
pixmap = '$METVIEW_DIR_SHARE/icons/NOTE.icon'
-
+
object,
class = MACRO,
icon_box = Basic,
@@ -443,7 +449,6 @@ object,
editor_type = QtMacroEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/SHELL.icon'
-
######################################
# Mars / GRIB filter objects
######################################
@@ -501,7 +506,7 @@ object,
editor_type = SimpleEditor,
expand = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
pixmap = '$METVIEW_DIR_SHARE/icons/READ.icon'
-
+
object,
class = READ_G2,
can_be_created = False,
@@ -528,8 +533,6 @@ object,
expand = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
pixmap = '$METVIEW_DIR_SHARE/icons/READ_TIGGE.icon'
-
-
######################################
# Other
######################################
@@ -544,7 +547,8 @@ object,
default_name = Binary,
editor_type = NoEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/BINARY.icon',
- doubleclick_method = Examine
+ doubleclick_method = Examine,
+ default_method = Examine
object,
class = SQL,
@@ -556,7 +560,7 @@ object,
editor_type = QtMacroEditor,
default_name = SQL Query,
pixmap = '$METVIEW_DIR_SHARE/icons/SQL.icon'
-
+
object,
class = NAMELIST,
icon_box = Basic,
@@ -567,7 +571,7 @@ object,
editor_type = QtMacroEditor,
default_name = IFS Namelist,
pixmap = '$METVIEW_DIR_SHARE/icons/NAMELIST.icon'
-
+
######################################
# View objects
######################################
@@ -586,6 +590,7 @@ object,
pixmap = '$METVIEW_DIR_SHARE/icons/MAPVIEW.icon',
expand = 128, #expand, but not the default values
doubleclick_method = Edit
+
object,
class = GEOVIEW,
@@ -601,6 +606,7 @@ object,
pixmap = '$METVIEW_DIR_SHARE/icons/GEOVIEW.icon',
expand = 128, #expand, but not the default values
doubleclick_method = Edit
+
object,
class = CARTESIANVIEW,
@@ -617,6 +623,7 @@ object,
expand = 75, #EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS|EXPAND_LAST_NAME
doubleclick_method = Edit
+
object,
class = ANNOTATIONVIEW,
can_be_created = True,
@@ -631,6 +638,7 @@ object,
pixmap = '$METVIEW_DIR_SHARE/icons/ANNOTATIONVIEW.icon',
expand = 128, #expand, but not the default values
doubleclick_method = Edit
+
######################################
# Visual definition objects
@@ -649,7 +657,7 @@ object,
expand = 128, # EXPAND_NO_DEFAULT
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/PCOAST.icon'
-
+
object,
class = MCOAST,
icon_box = Visual definitions,
@@ -663,20 +671,20 @@ object,
expand = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/MCOAST.icon'
-
-object,
- class = MTEPHI,
- icon_box = Visual definitions,
- can_be_created = True,
- definition_file = '$METVIEW_DIR_SHARE/etc/MTEPHIDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/MTEPHIRules',
- default_name = Tephigram Grid,
- help_page = Tephigram,
- type = Visdef,
- macro = mtephi,
- expand = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/TEPHIVIEW.icon'
+
+object,
+ class = MTHERMOGRID,
+ icon_box = Visual definitions,
+ can_be_created = True,
+ definition_file = '$METVIEW_DIR_SHARE/etc/MTHERMOGRIDDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/MTHERMOGRIDRules',
+ default_name = Thermo Grid,
+ help_page = Thermo_Grid,
+ type = Visdef,
+ macro = mthermogrid,
+ expand = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/MTHERMOGRID.icon'
object,
class = MTAYLOR,
@@ -691,7 +699,7 @@ object,
expand = 144, #EXPAND_SECOND_NAME|EXPAND_NO_DEFAULT
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/MTAYLOR.icon'
-
+
object,
class = PTEXT,
icon_box = Visual definitions,
@@ -705,6 +713,7 @@ object,
expand = 128, # EXPAND_DEFAULT
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/PTEXT.icon'
+
object,
class = MTEXT,
@@ -734,7 +743,6 @@ object,
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/MLEGEND.icon'
-
object,
class = PAXIS,
icon_box = Visual definitions,
@@ -762,49 +770,49 @@ object,
expand = 128, # EXPAND_NO_DEFAULT
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/MAXIS.icon'
-
-object,
- class = PCONT,
- icon_box = Visual definitions,
- can_be_created = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/ContDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/ContRules',
- default_name = MV3 Contour,
- help_page = Contour,
- type = Visdef,
- macro = pcont,
- expand = 128, # EXPAND_NO_DEFAULT
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/PCONT.icon'
-
-object,
- class = MCONT,
- icon_box = Visual definitions,
- can_be_created = True,
- definition_file = '$METVIEW_DIR_SHARE/etc/MCONTDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/MCONTRules',
- default_name = Contouring,
- help_page = Contouring,
- type = Visdef,
- macro = mcont,
- expand = 128, # EXPAND_NO_DEFAULT
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/MCONT.icon'
-
-object,
- class = POBS,
- icon_box = Visual definitions,
- can_be_created = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/ObsDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/ObsRules',
- default_name = Observation Plot,
- help_page = Observation_Plot,
- type = Visdef,
- macro = pobs,
- expand = 144, # EXPAND_NO_DEFAULT, EXPAND_2ND_NAME
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/POBS.icon'
-
+
+object,
+ class = PCONT,
+ icon_box = Visual definitions,
+ can_be_created = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/ContDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/ContRules',
+ default_name = MV3 Contour,
+ help_page = Contour,
+ type = Visdef,
+ macro = pcont,
+ expand = 128, # EXPAND_NO_DEFAULT
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/PCONT.icon'
+
+object,
+ class = MCONT,
+ icon_box = Visual definitions,
+ can_be_created = True,
+ definition_file = '$METVIEW_DIR_SHARE/etc/MCONTDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/MCONTRules',
+ default_name = Contouring,
+ help_page = Contouring,
+ type = Visdef,
+ macro = mcont,
+ expand = 128, # EXPAND_NO_DEFAULT
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/MCONT.icon'
+
+object,
+ class = MOBS,
+ icon_box = Visual definitions,
+ can_be_created = True,
+ definition_file = '$METVIEW_DIR_SHARE/etc/ObsPlottingDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/ObsPlottingRules',
+ default_name = Observation Plotting,
+ help_page = Observation_Plotting,
+ type = Visdef,
+ macro = mobs,
+ expand = 144, # EXPAND_NO_DEFAULT, EXPAND_2ND_NAME
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/MOBS.icon'
+
object,
class = PWIND,
icon_box = Visual definitions,
@@ -818,7 +826,7 @@ object,
expand = 128, # EXPAND_NO_DEFAULT
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/PWIND.icon'
-
+
object,
class = MWIND,
icon_box = Visual definitions,
@@ -895,7 +903,7 @@ object,
object,
class = MBINNING,
- icon_box = Filters,
+ icon_box = Visual definitions,
can_be_created = True,
definition_file = '$METVIEW_DIR_SHARE/etc/BinningObjectDef',
rules_file = '$METVIEW_DIR_SHARE/etc/BinningObjectRules',
@@ -918,14 +926,17 @@ object,
type = File,
pixmap = '$METVIEW_DIR_SHARE/icons/GRIB.icon',
default_name = GRIB File,
- editor_type = NoEditor
+ editor_type = NoEditor,
+ default_method = Examine
object,
- class = GEOPOINTS,
- check = False,
- type = File,
- editor_type = QtMacroEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/GEOPOINTS.icon'
+ class = GEOPOINTS,
+ check = False,
+ type = File,
+ editor_type = QtMacroEditor,
+ default_name = GEOPOINTS File,
+ pixmap = '$METVIEW_DIR_SHARE/icons/GEOPOINTS.icon',
+ default_method = Examine
object,
class = BUFR,
@@ -934,8 +945,9 @@ object,
type = File,
default_name = BUFR File,
pixmap = '$METVIEW_DIR_SHARE/icons/BUFR.icon',
- editor_type = NoEditor
-
+ editor_type = NoEditor,
+ default_method = Examine
+
object,
class = NETCDF,
check = False,
@@ -943,17 +955,21 @@ object,
type = File,
pixmap = '$METVIEW_DIR_SHARE/icons/NETCDF.icon',
default_name = NetCDF File,
- editor_type = NoEditor
-
+ editor_type = NoEditor,
+ default_method = Examine
+
object,
- class = LLMATRIX,
- check = False,
- type = File,
- macro = togrib,
- editor_type = TextEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/LLMATRIX.icon'
+ class = LLMATRIX,
+ check = False,
+ type = File,
+ macro = togrib,
+ editor_type = QtMacroEditor,
+ default_name = LLMATRIX,
+ pixmap = '$METVIEW_DIR_SHARE/icons/LLMATRIX.icon'
+
+
object,
class = TABLE,
check = False,
@@ -964,8 +980,7 @@ object,
macro = table,
editor_type = QtMacroEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/TABLE.icon'
-
-
+
object,
class = TABLE_READER,
check = False,
@@ -978,8 +993,7 @@ object,
# macro = rrread_table,
editor_type = SimpleEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/TABLEREADER.icon'
-
-
+
object,
class = ODB_DB,
check = False,
@@ -987,7 +1001,8 @@ object,
type = File,
default_name = 'ODB File',
pixmap = '$METVIEW_DIR_SHARE/icons/ODB_DB.icon',
- editor_type = NoEditor
+ editor_type = NoEditor,
+ default_method = Examine
##INSTIP:
@@ -1006,7 +1021,7 @@ object,
editor_type = SimpleEditor,
expand = 75,
pixmap = '$METVIEW_DIR_SHARE/icons/ECFS.icon'
-
+
#########################################################
# Modules
#########################################################
@@ -1026,7 +1041,7 @@ object,
check = False,
editor_type = TwoLevelsEditor,
expand = 0 # EXPAND_NO_DEFAULT
-
+
object,
class = COMPUTE,
icon_box = Data processing,
@@ -1039,6 +1054,7 @@ object,
type = Data,
editor_type = ComputeEditor,
pixmap = '$METVIEW_DIR_SHARE/icons/COMPUTE.icon'
+
object,
class = CLEANFILE,
@@ -1053,7 +1069,7 @@ object,
object,
class = GEO_TO_GRIB,
- icon_box = Filters,
+ icon_box = Data processing,
can_be_created = True,
check = True,
type = Data,
@@ -1064,10 +1080,10 @@ object,
default_object = False,
help_page = Geopoints_To_GRIB,
default_name = Geopoints to GRIB
-
+
object,
class = GRIB_TO_GEO,
- icon_box = Filters,
+ icon_box = Data processing,
can_be_created = True,
check = True,
type = Data,
@@ -1080,18 +1096,18 @@ object,
default_name = GRIB to Geopoints
object,
- class = OBSFILTER,
- can_be_created = True,
- icon_box = Filters,
- definition_file = '$METVIEW_DIR_SHARE/etc/ObsFilterDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/ObsFilterRules',
- default_name = Observation Filter,
- help_page = Observation_Filter,
- type = Data,
- expand = 91, # EXPAND_DATE|EXPAND_TIME|expand_2nd_name|EXPAND_LISTS|EXPAND_LAST_NAME
- macro = obsfilter,
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/OBSFILTER.icon'
+ class = OBSFILTER,
+ can_be_created = True,
+ icon_box = Filters,
+ definition_file = '$METVIEW_DIR_SHARE/etc/ObsFilterDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/ObsFilterRules',
+ default_name = Observation Filter,
+ help_page = Observation_Filter,
+ type = Data,
+ expand = 75, # EXPAND_DATE|EXPAND_TIME|EXPAND_LAST_NAME|EXPAND_LISTS
+ macro = obsfilter,
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/OBSFILTER.icon'
object,
class = POTT_FAMILY,
@@ -1103,7 +1119,8 @@ object,
default_name = Potential Temperature,
help_page = Potential_Temperature,
editor_type = FamilyEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/POTTF.icon'
+ pixmap = '$METVIEW_DIR_SHARE/icons/POTTF.icon
+
object,
class = POTT_M,
@@ -1279,87 +1296,116 @@ state,
object,
- class = SIMPLE_FORMULA_FAMILY,
- icon_box = Data processing,
- can_be_created = True,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaRules',
- default_name = Simple Formula,
- help_page = Simple_Formula,
- type = Family,
- editor_type = FamilyEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon'
-
-object,
- can_be_created = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- type = data,
- default_object = False,
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- class = SAMPLE_FORMULA_DOD
-object,
- can_be_created = False,
- default_object = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- type = data,
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- class = SAMPLE_FORMULA_DON
-object,
- can_be_created = False,
- default_object = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- type = data,
- class = SAMPLE_FORMULA_NOD
-object,
- can_be_created = False,
- default_object = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- type = data,
- class = SAMPLE_FORMULA_NON
-object,
- can_be_created = False,
- default_object = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- type = data,
- class = SAMPLE_FORMULA_FD
-object,
- can_be_created = False,
- default_object = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- type = data,
- class = SAMPLE_FORMULA_FN
-object,
- can_be_created = False,
- default_object = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- type = data,
- class = SAMPLE_FORMULA_FDD
-object,
- can_be_created = False,
- default_object = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- type = data,
- class = SAMPLE_FORMULA_FDN
-object,
- can_be_created = False,
- default_object = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- type = data,
- class = SAMPLE_FORMULA_FND
-object,
- default_object = False,
- can_be_created = False,
- pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
- definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
- type = data,
- class = SAMPLE_FORMULA_FNN
+ class = SIMPLE_FORMULA_FAMILY,
+ icon_box = Data processing,
+ can_be_created = True,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaRules',
+ default_name = Simple Formula,
+ help_page = Simple_Formula,
+ type = Family,
+ editor_type = FamilyEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon'
+
+object,
+ can_be_created = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ type = data,
+ default_name = Simple Formula,
+ default_object = False,
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ class = SAMPLE_FORMULA_DOD
+
+object,
+ can_be_created = False,
+ default_object = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ type = data,
+ default_name = Simple Formula,
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ class = SAMPLE_FORMULA_DON
+
+object,
+ can_be_created = False,
+ default_object = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ type = data,
+ editor_type = SimpleEditor,
+ default_name = Simple Formula,
+ class = SAMPLE_FORMULA_NOD
+
+object,
+ can_be_created = False,
+ default_object = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ type = data,
+ editor_type = SimpleEditor,
+ default_name = Simple Formula,
+ class = SAMPLE_FORMULA_NON
+
+object,
+ can_be_created = False,
+ default_object = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ type = data,
+ editor_type = SimpleEditor,
+ default_name = Simple Formula,
+ class = SAMPLE_FORMULA_FD
+
+object,
+ can_be_created = False,
+ default_object = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ type = data,
+ editor_type = SimpleEditor,
+ default_name = Simple Formula,
+ class = SAMPLE_FORMULA_FN
+
+object,
+ can_be_created = False,
+ default_object = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ type = data,
+ editor_type = SimpleEditor,
+ default_name = Simple Formula,
+ class = SAMPLE_FORMULA_FDD
+
+object,
+ can_be_created = False,
+ default_object = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ type = data,
+ editor_type = SimpleEditor,
+ default_name = Simple Formula,
+ class = SAMPLE_FORMULA_FDN
+
+object,
+ can_be_created = False,
+ default_object = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ type = data,
+ editor_type = SimpleEditor,
+ default_name = Simple Formula,
+ class = SAMPLE_FORMULA_FND
+
+object,
+ default_object = False,
+ can_be_created = False,
+ pixmap = '$METVIEW_DIR_SHARE/icons/SIMPLE_FORMULA.icon',
+ definition_file = '$METVIEW_DIR_SHARE/etc/SimpleFormulaDef',
+ type = data,
+ editor_type = SimpleEditor,
+ default_name = Simple Formula,
+ class = SAMPLE_FORMULA_FNN
##INSTIP:
Datacoverage is not normally accessible outside ECMWF!
@@ -1427,7 +1473,8 @@ object,
type = File,
pixmap = '$METVIEW_DIR_SHARE/icons/TAR.icon',
default_name = Tar File,
- editor_type = NoEditor
+ editor_type = NoEditor,
+ default_method = Examine
object,
class = TAR_GZ,
@@ -1436,7 +1483,8 @@ object,
type = File,
pixmap = '$METVIEW_DIR_SHARE/icons/TAR.icon',
default_name = TarGz File,
- editor_type = NoEditor
+ editor_type = NoEditor,
+ default_method = Examine
object,
class = TAR_BZ2,
@@ -1445,7 +1493,8 @@ object,
type = File,
pixmap = '$METVIEW_DIR_SHARE/icons/TAR.icon',
default_name = TarBz2 File,
- editor_type = NoEditor
+ editor_type = NoEditor,
+ default_method = Examine
object,
class = ZIP,
@@ -1454,7 +1503,8 @@ object,
type = File,
pixmap = '$METVIEW_DIR_SHARE/icons/TAR.icon',
default_name = Zip File,
- editor_type = NoEditor
+ editor_type = NoEditor,
+ default_method = Examine
####################################################################
#
@@ -1827,9 +1877,17 @@ interface_tool,
desktop_tool,
name = monitor,
label = Process Monitor...,
+ icon = monitor,
service = MvMonitor,
action = MONITOR
+#desktop_tool,
+# name = marscatalogue,
+# label = MARS Catalogue...,
+# icon = monitor,
+# service = MarsCatalogue,
+# action = MARSCATALOGUE
+
desktop_icon_group_tool,
name = send,
service = MvMailTo,
@@ -2254,67 +2312,67 @@ desktop_icon_group_tool,
## 4th column
#
################# (new) PlotMod tephigram definition ###################
-object,
- class = TEPHIDATA_FAMILY,
- icon_box = To be organised,
- can_be_created = True,
- definition_file = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
- default_name = Tephigram Data,
- help_page = Tephigram_Data,
- type = Family,
- expand = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
- editor_type = FamilyEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
-object,
- class = PM_BUFR_TEPHI,
- can_be_created = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
- default_name = BUFR Tephigram Data,
- type = Data,
- expand = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
- macro = pm_bufr_tephi,
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
-object,
- class = PM_GRIB_TEPHI,
- can_be_created = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
- default_name = GRIB Tephigram Data,
- type = Data,
- expand = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
- macro = pm_grib_tephi,
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
-object,
- class = PM_PRE19950404_GRIB_TEPHI,
- can_be_created = False,
- definition_file = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
- rules_file = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
- default_name = Pre 1995 GRIB Tephigram Data,
- type = Data,
- expand = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
- macro = pre1995gribtephi,
- editor_type = SimpleEditor,
- pixmap = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
-
-state,
- class = TEPHIDATA_FAMILY,
- action = visualise/hardcopy/prepare/drop,
- service = Tephigram
-
-state,
- class = PM_GRIB_TEPHI,
- action = visualise/hardcopy/prepare/drop,
- service = PM_Tephigram
-
-state,
- class = PM_BUFR_TEPHI,
- action = visualise/hardcopy/prepare/drop,
- service = PM_Tephigram
-
+# object,
+# class = TEPHIDATA_FAMILY,
+# icon_box = To be organised,
+# can_be_created = True,
+# definition_file = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
+# rules_file = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
+# default_name = Tephigram Data,
+# help_page = Tephigram_Data,
+# type = Family,
+# expand = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+# editor_type = FamilyEditor,
+# pixmap = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
+# object,
+# class = PM_BUFR_TEPHI,
+# can_be_created = False,
+# definition_file = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
+# rules_file = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
+# default_name = BUFR Tephigram Data,
+# type = Data,
+# expand = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+# macro = pm_bufr_tephi,
+# editor_type = SimpleEditor,
+# pixmap = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
+# object,
+# class = PM_GRIB_TEPHI,
+# can_be_created = False,
+# definition_file = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
+# rules_file = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
+# default_name = GRIB Tephigram Data,
+# type = Data,
+# expand = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+# macro = pm_grib_tephi,
+# editor_type = SimpleEditor,
+# pixmap = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
+# object,
+# class = PM_PRE19950404_GRIB_TEPHI,
+# can_be_created = False,
+# definition_file = '$METVIEW_DIR_SHARE/etc/TephigramDataDef',
+# rules_file = '$METVIEW_DIR_SHARE/etc/TephigramDataRules',
+# default_name = Pre 1995 GRIB Tephigram Data,
+# type = Data,
+# expand = 67, # EXPAND_DATE|EXPAND_TIME|EXPAND_LISTS
+# macro = pre1995gribtephi,
+# editor_type = SimpleEditor,
+# pixmap = '$METVIEW_DIR_SHARE/icons/TEPHIDATA.icon'
+#
+# state,
+# class = TEPHIDATA_FAMILY,
+# action = visualise/hardcopy/prepare/drop,
+# service = Tephigram
+#
+# state,
+# class = PM_GRIB_TEPHI,
+# action = visualise/hardcopy/prepare/drop,
+# service = PM_Tephigram
+#
+# state,
+# class = PM_BUFR_TEPHI,
+# action = visualise/hardcopy/prepare/drop,
+# service = PM_Tephigram
+#
################################### End PM Tephigram ############
#
## added macro function although it does not work if dropped into editor (vk 971209)
diff --git a/share/metview/etc/ObsDef b/share/metview/etc/ObsDef
deleted file mode 100755
index 3ed8a4b..0000000
--- a/share/metview/etc/ObsDef
+++ /dev/null
@@ -1,936 +0,0 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
- ONOFF {
- ON ; ON
- OFF ; OFF
- }
-
- COLOUR {
- %include MagicsColors.h
- }
-
- LINE_STYLE {
- SOLID ; SOLID
- DOT ; DOT
- DASH ; DASH
- CHAIN_DOT ; CHAIN_DOT
- CHAIN_DASH ; CHAIN_DASH
- }
-
- MARKER {
- 1 ; 1
- 2 ; 2
- 3 ; 3
- 4 ; 4
- 5 ; 5
- }
-
- QUALITY {
- LOW ; LOW
- MEDIUM ; MEDIUM
- HIGH ; HIGH
- }
-
- SHADING {
- DOT ; DOT
- HATCH ; HATCH
- AREA_FILL ; AREA_FILL
- }
-
- THICKNESS {
- 1 ; 1
- 2 ; 2
- 3 ; 3
- 4 ; 4
- 5 ; 5
- 6 ; 6
- 7 ; 7
- 8 ; 8
- 9 ; 9
- 10 ; 10
- }
-}
-
-_DUMMY ; DUMMY REQUEST ; DUMMY
-{
- TYPE_LIST {
- SYNOP ; SYNOP
- AIREP ; AIREP
- SATOB ; SATOB
- DRIBU ; DRIBU
- TEMP ; TEMP
- PILOT ; PILOT
- SATEM ; SATEM
- SOILT ; SOILT
- /
- }
-
- SCAT_REJECTION_LIST {
- RAIN ; RAIN
- WSOL ; WSOL
- WSPD ; WSPD
- ICE ; ICE
- /
- }
-
- CODE_TYPE_LIST
- {
- LSD Synop land - S ; 1
- LSD Synop record 2 land - S2 ; 2
- LSD Synop auto land - SA ; 3
- LSD Synop auto record 2 land - SA2; 4
-
- SSD Synop ship abbreviated - SAB ; 9
- SSD Synop ship - SS ; 11
- SSD Synop record 2 ship -SS2 ; 12
- SSD Synop auto ship - SAS ; 13
- SSD Synop auto record 2 ship - SAS2 ; 14
-
- VSNS Pilot land - P ; 91
- VSNS Pilot ship - PS ; 92
- VSNS Temp land - T ; 101
- VSNS Temp ship - TS ; 102
- VSNS Temp drop - TD ; 103
- VSNS Rocob land - R ; 104
- VSNS Rocob ship - RS ; 105
-
- VSS High resolution - HR ; 51
- VSS Satem mean temp - SMT ; 61
- VSS Satem water - SW ; 62
- VSS Satem higher level mean layer temperature - SHL ; 63
- VSS Mean temp - MT ; 71
- VSS Water - W ; 72
- VSS Higher level - HL ; 73
-
- SLS Satob section 2 - SAT2 ; 82
- SLS Satob section 3 - SAT3 ; 83
- SLS Satob section 4 - SAT4 ; 84
- SLS Satob section 5 - SAT5 ; 85
-
- ERS SCAT ; 122
- QuikSCAT non-rainy ; 137
- QuikSCAT rainy ; 139
-
- OD Dribu oceanographic - DO ; 131
- OD Bathy oceanographic - BO ; 132
- OD Tesac oceanographic - TO ; 133
-
- SLNS Codar - COD ; 141
- SLNS Airep - AIR ; 142
- SLNS Colba - COL ; 143
- SLNS AMDAR - AM ; 144
- SLNS ACARS - AC ; 145
-
- DD PAOBS - PA ; 164
- *
- /
- }
-
- SATELLITE_NUMBER_LIST
- {
- 001 ERS-1 SCAT ; 1
- 002 ERS-2 SCAT ; 2
- 003 Meteosat 3 ; 003
- 004 Meteosat 4 ; 004
- 005 Meteosat 5 ; 005
- 025 Meteosat 5 WV ; 025
- 045 Meteosat 5 VIS ; 045
- 055 Meteosat 5 WV EXP ; 055
- 031 Meteosat 5 IR ; 031
- 033 Meteosat 5 VIS ; 033
- 035 Meteosat 5 WV ; 035
- 040 Meteosat 5 HVIS ; 040
- 104 Himawari 4 IR ; 104
- 144 Himawari 4 VIS ; 144
- 105 Himawari 5 IR ; 105
- 125 Himawari 5 WV ; 125
- 145 Himawari 5 VIS ; 145
- 200 Goes ; 200
- 252 Goes 8 IR ; 252
- 253 Goes 9 IR ; 253
- 272 Goes 8 WV ; 272
- 273 Goes 9 WV ; 273
- 280 NSCAT ; 280
- 281 QuikSCAT ; 281
- 282 Goes 8 COMB ; 282
- 283 Goes 9 COMB ; 283
- 292 Goes 8 VIS ; 292
- 293 Goes 9 VIS ; 293
- 480 Insat ; 480
- 420 Insat ; 420
- 460 Insat VIS ; 460
- *
- /
- }
-
- LEVEL
- {
- 1000 ; 1000
- 925 ; 925
- 850 ; 850
- 700 ; 700
- 500 ; 500
- 400 ; 400
- 300 ; 300
- 200 ; 200
- 100 ; 100
- 70 ; 70
- 50 ; 50
- 30 ; 30
- 10 ; 10
- *
- }
-}
-
-POBS ; OBS ; MAGICS
-{
- OBS_TYPE_LIST
- [ help = help_multiple_selection ]
- {
- &_DUMMY&TYPE_LIST
- }
-
- OBS_CODE_TYPE_LIST
- [ help = help_multiple_selection ]
- {
- &_DUMMY&CODE_TYPE_LIST
- }
-
- OBS_IDENTIFIER_LIST
- {
- @
- /
- }
-
- OBS_SATELLITE_NUMBER_LIST
- [ help = help_multiple_selection ]
- {
- &_DUMMY&SATELLITE_NUMBER_LIST
- }
-
- OBS_CONFIDENCE_CHECK
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_CONFIDENCE_PARAMETER
- {
- ANY ; ANY
- DEWPOINT ; DEWPOINT
- HEIGHT ; HEIGHT
- POSITION ; POSITION
- PRESSURE ; PRESSURE
- TEMPERATURE ; TEMPERATURE
- WIND ; WIND
- } = POSITION
-
- OBS_CONFIDENCE_LEVEL
- [ interface = slider, min = 0, max = 100, step = 1,
- exclusive = true, direction = max_on_right ]
- {
- *
- } = 70.0
-
- OBS_DATE_CHECK
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_DATE
- {
- *
- } = 0
-
- OBS_DATE_TOLERANCE
- {
- *
- } = 0
-
- OBS_TIME_CHECK
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_TIME
- {
- *
- } = 1200
-
- OBS_TIME_TOLERANCE
- {
- *
- } = 0
-
- OBS_IDENTIFICATION
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_IDENTIFICATION_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_IDENTIFICATION_TYPE
- {
- STATION_IDENTIFIER ; STATION_IDENTIFIER
- CODE_TYPE ; CODE_TYPE
- OBSERVATION_TYPE ; OBSERVATION_TYPE
- } = STATION_IDENTIFIER
-
- OBS_DISTANCE_APART
- {
- @
- } = 1.0
-
- OBS_SIZE
- {
- @
- } = 0.2
-
- OBS_QUALITY
- {
- &PARAMSHARE&QUALITY
- } = MEDIUM
-
- OBS_ROTATION
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_POSITION_ONLY
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_STATION_RING
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_STATION_RING_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_WIND
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_WIND_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_WIND_FLAG_THICKNESS
- {
- &PARAMSHARE&THICKNESS
- } = 1
-
- OBS_WIND_FLAG_STYLE
- {
- SOLID
- DASH
- DOT
- } = SOLID
-
- OBS_PRESSURE
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_UPPER_AIR_PRESSURE
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_PRESSURE_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_TEMPERATURE
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_TEMPERATURE_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_SEA_SURFACE_TEMPERATURE
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_SEA_SURFACE_TEMP_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_PRESSURE_TENDENCY
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_PRESSURE_TENDENCY_COLOUR
- {
- &PARAMSHARE&COLOUR
- 'BLACK/RED' ; 'BLACK/RED'
- } = 'BLACK/RED'
-
- OBS_PRESENT_WEATHER
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_PRESENT_WEATHER_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_PAST_WEATHER
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_PAST_WEATHER_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = RED
-
- OBS_VISIBILITY
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_VISIBILITY_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_DEWPOINT
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_DEWPOINT_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = RED
-
- OBS_TIME_PLOT
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_TIME_PLOT_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_CLOUD
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_CLOUD_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_LOW_CLOUD
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_LOW_CLOUD_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_MEDIUM_CLOUD
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_MEDIUM_CLOUD_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_HIGH_CLOUD
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_HIGH_CLOUD_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = RED
-
- OBS_CLOUD_8_GROUPS
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_CLOUD_8_GROUPS_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-!BACKGROUND (020125)
-!BLACK
-
- OBS_LEVEL
- [ help = help_multiple_selection, exclusive = True ]
- {
- &_DUMMY&LEVEL
- } = 500
-
- OBS_LEVEL_2
- [ help = help_multiple_selection, exclusive = True ]
- {
- &_DUMMY&LEVEL
- } = 1000
-
- OBS_LEVEL_TOLERANCE
- {
- *
- } = 0
-
- OBS_THERMAL_WIND
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_THERMAL_WIND_LINE_STYLE
- {
- SOLID
- DASH
- DOT
- } = DASH
-
-# OBS_THERMAL_WIND_TYPE
-# {
-# FLAGS
-# ARROWS
-# } = FLAGS
-
- OBS_THETA
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_THETA_TYPE
- {
- RELATIVE_HUMIDITY ; RELATIVE_HUMIDITY
- HUMIDITIY_MIXING_RATIO ; HUMIDITIY_MIXING_RATIO
- POTENTIAL_TEMPERATURE ; POTENTIAL_TEMPERATURE
- WATER_PRECIPITABLE ; WATER_PRECIPITABLE
- PSEUDO_POTENTIAL_TEMPERATURE ; PSEUDO_POTENTIAL_TEMPERATURE
- WET_BULB_POTENTIAL_TEMPERATURE ; WET_BULB_POTENTIAL_TEMPERATURE
- } = RELATIVE_HUMIDITY
-
- OBS_THETA_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_THICKNESS
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_THICKNESS_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_SATEM_TEMPERATURE
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_WATER_PRECIPITABLE
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_WATER_PRECIPITABLE_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_SHIP_DIRECTION
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_SHIP_DIRECTION_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_SHIP_SPEED
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_SHIP_SPEED_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_WAVES
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_WAVES_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_HEIGHT
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_HEIGHT_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_SOIL_TEMPERATURE_LEVEL_1
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_SOIL_TEMPERATURE_LEVEL_2
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_SOIL_TEMPERATURE_LEVEL_3
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_SOIL_TEMPERATURE_LEVEL_4
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_SOIL_TEMPERATURE_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_STATION_HEIGHT
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_STATION_HEIGHT_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BLACK
-
- OBS_FB
- {
- OFF ; OFF
-# OI ; OI
- 3DVAR ; 3DVAR
- 4DVAR ; 4DVAR
- } = OFF
-
- OBS_FB_LEGEND
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_FB_TYPE
- {
- REJECT_REPORT ; REJECT_REPORT
- REJECT_VARIABLES ; REJECT_VARIABLES
- FLAGGED_BUT_USED ; FLAGGED_BUT_USED
- USED ; USED
- NOT_USED ; NOT_USED
- BLACKLIST_REPORT ; BLACKLIST_REPORT
- BLACKLIST_VARIABLES ; BLACKLIST_VARIABLES
- ALL ; ALL
- } = REJECT_REPORT
-
- OBS_FB_STATION_RING_HEIGHT
- {
- @
- } = 0.15
-
- OBS_FB_MIN_ERROR_FLAG
- {
- 1 ; 1
- 2 ; 2
- 3 ; 3
- } = 2
-
- OBS_FB_ERROR_FLAG0_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = GREEN
-
- OBS_FB_ERROR_FLAG1_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = CYAN
-
- OBS_FB_ERROR_FLAG2_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = BROWN
-
- OBS_FB_ERROR_FLAG3_COLOUR
- {
- &PARAMSHARE&COLOUR
- } = RED
-
- OBS_FB_SOURCE
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_SOURCE_TYPE
- {
- RDB ; RDB
- ML ; ML
- FG ; FG
- AN ; AN
- DP ; DP
- 3D ; 3D
- 4D ; 4D
- BL ; BL
- ALL ; ALL
- } = ALL
-
- OBS_FB_LEVEL
- [ help = help_multiple_selection, exclusive = True ]
- {
- &_DUMMY&LEVEL
- } = 500
-
- OBS_FB_LEVEL_2
- [ help = help_multiple_selection, exclusive = True ]
- {
- &_DUMMY&LEVEL
- } = 1000
-
- OBS_FB_LEVEL_TOLERANCE_ABOVE
- {
- *
- } = 0
-
- OBS_FB_LEVEL_TOLERANCE_BELOW
- {
- *
- } = 0
-
- OBS_FB_DEPARTURES
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_FB_DEPARTURES_TYPE [ beautify = false ]
- {
- FG
- AN
- IA
- 'OBS-FG'
- 'OBS-FG2'
- 'OBS-FG3'
- 'OBS-AN'
- } = FG
-
- OBS_FB_SUBSTITUTES
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_FB_HEIGHT
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_PRESSURE
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_FB_RELATIVE_HUMIDITY
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_SPECIFIC_HUMIDITY
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_TEMPERATURE
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_WIND
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_WIND_FLAG_LENGTH
- {
- *
- } = 0.8
-
- OBS_FB_RADIANCES
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_FB_RADIANCES_TYPE
- {
- '1DVAR' ; '1DVAR'
- '3DVAR' ; '3DVAR'
- '4DVAR' ; '4DVAR'
- } = 3DVAR
-
- OBS_FB_RADIANCES_CHANNEL_NUMBER
- {
- 1 ; 1
- 2 ; 2
- 3 ; 3
- 4 ; 4
- 5 ; 5
- 6 ; 6
- 7 ; 7
- 8 ; 8
- 9 ; 9
- 10 ; 10
- 11 ; 11
- 12 ; 12
- 13 ; 13
- 14 ; 14
- 15 ; 15
- 16 ; 16
- 17 ; 17
- 18 ; 18
- 19 ; 19
- 20 ; 20
- 21 ; 21
- 22 ; 22
- 23 ; 23
- 24 ; 24
- 25 ; 25
- 26 ; 26
- 27 ; 27
- } = 1
-
- OBS_FB_RADIANCES_CHANNEL_PLOT
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_FB_RADIANCES_DEPARTURES
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_FB_RADIANCES_DEPARTURES_TYPE [ beautify = false ]
- {
- 'OBS-FG'
- 'OBS-FG2'
- 'OBS-FG3'
- 'OBS-AN'
- ALL
- BIAS
- STDEV
- } = 'OBS-FG'
-
- OBS_FB_SCATTEROMETER_WINDS
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
- OBS_FB_SCAT_CLOSEST_TO
- {
- FG ; FG
- AN ; AN
- } = FG
-
- OBS_FB_SCAT_AMBIGUITIES
- {
- 1 ; 1
- 2 ; 2
- 3 ; 3
- 4 ; 4
- } = 1
-
- OBS_FB_SCAT_THINNED_ONLY
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_SCAT_SWEET_SPOTS_ONLY
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_SCAT_ALT_COLORING
- {
- COLOURED
- GREY
- } = GREY
-
- OBS_FB_SCAT_REJECTION_LIST
- [ help = help_multiple_selection ]
- {
- &_DUMMY&SCAT_REJECTION_LIST
- }
-
- OBS_FB_SSMI_WATER_PRECIPITABLE
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_SSMI_LIQUID_WATER_PATH
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_SSMI_TYPE
- {
- 1DVAR
- REGRESSION
- } = 1DVAR
-
- OBS_FB_SSMI_WIND_STRENGTH
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_FB_SSMI_FAILURE_FLAG
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_BUFR_SECTION2_USE
- {
- &PARAMSHARE&ONOFF
- } = ON
-
- OBS_TEXT
- {
- &PARAMSHARE&ONOFF
- } = OFF
-
-} ! end of POBS
-
diff --git a/share/metview/etc/ObsPlottingDef b/share/metview/etc/ObsPlottingDef
new file mode 100644
index 0000000..a011027
--- /dev/null
+++ b/share/metview/etc/ObsPlottingDef
@@ -0,0 +1,252 @@
+PARAMSHARE ; ParamShare; PARAMSHARE
+{
+ COLOUR {
+ %include MagicsColors.h
+ }
+ STYLE {
+ SOLID; SOLID
+ DASH; DASH
+ DOT; DOT
+ CHAIN_DOT; CHAIN_DOT
+ CHAIN_DASH; CHAIN_DASH
+ }
+}
+
+MOBS; Magics; Automatically generated
+{
+ OBS_DISTANCE_APART[ help_text = 'Minimum distance between the centre of any two observations in cm' ]
+ {
+ *
+ } = 1.0
+
+ OBS_COLOUR [ help = help_colour,interface = colour, help_text='Observation Colour' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = BLACK
+
+ OBS_SIZE[ help_text = 'size of a single onservation in cm' ]
+ {
+ *
+ } = 0.2
+
+ OBS_RING_SIZE[ help_text = 'Size of the station ring in cm' ]
+ {
+ *
+ } = 0.2
+
+ OBS_PRESENT_WEATHER [ help_text = 'Turn On/off the present weather' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_PRESENT_WEATHER_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the present weather' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_PRESSURE [ help_text = 'Turn On/off the pressure' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_PRESSURE_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the pressure' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_UPPER_AIR_PRESSURE [ help_text = 'Turn On/off the upper air pressure level (satob)' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = OFF
+
+ OBS_UPPER_AIR_PRESSURE_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the upper air pressure level' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_PRESSURE_TENDENCY [ help_text = 'Turn On/off the pressure tendency' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_PRESSURE_TENDENCY_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the pressure tendency' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_STATION_RING [ help_text = 'Turn On/off the station ring' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_STATION_RING_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the station ring' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_TEMPERATURE [ help_text = 'Turn On/off the Air temperature' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_TEMPERATURE_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the Air temperature' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_THICKNESS [ help_text = 'Turn On/off the Thickness' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_THICKNESS_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the thickness' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_HEIGHT [ help_text = 'Turn On/off the height (geopotential)' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_HEIGHT_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the height information' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_IDENTIFICATION [ help_text = 'Turn On/off the station identification' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = OFF
+
+ OBS_IDENTIFICATION_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the station identification' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_CLOUD [ help_text = 'Turn On/off the cloud' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_LOW_CLOUD [ help_text = 'Turn On/off the low cloud' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_LOW_CLOUD_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the low cloud' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_MEDIUM_CLOUD [ help_text = 'Turn On/off the medium cloud' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_MEDIUM_CLOUD_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the medium cloud' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_HIGH_CLOUD [ help_text = 'Turn On/off the high cloud' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_HIGH_CLOUD_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the high cloud' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = RED
+
+ OBS_DEWPOINT [ help_text = 'Turn On/off the dewpoint' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_DEWPOINT_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the dewpoint' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = RED
+
+ OBS_SEA_TEMPERATURE [ help_text = 'Turn On/off the sea temperature' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_SEA_TEMPERATURE_COLOUR [ help = help_colour,interface = colour, help_text='Colour sed to display the sea temperature' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = BLACK
+
+ OBS_WAVES [ help_text = 'Turn On/off the waves and swell information' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_WAVES_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the waves and swell' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = BLACK
+
+ OBS_PAST_WEATHER [ help_text = 'Turn On/off the pas Weather level (satob)' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_PAST_WEATHER_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the past weather' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = RED
+
+ OBS_TIME [ help_text = 'Turn On/off the observation time' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = OFF
+
+ OBS_TIME_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the observation time' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_VISIBILITY [ help_text = 'Turn On/off the visibility' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_VISIBILITY_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display the visibility' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+ OBS_WIND [ help_text = 'Turn On/off the wind' ]
+ {
+ ON; ON
+ OFF; OFF
+ } = ON
+
+ OBS_WIND_COLOUR [ help = help_colour,interface = colour, help_text='Colour used to display wind' ]
+ {
+ &PARAMSHARE&COLOUR
+ } = AUTOMATIC
+
+}
diff --git a/share/metview/etc/ObsPlottingRules b/share/metview/etc/ObsPlottingRules
new file mode 100644
index 0000000..84758d3
--- /dev/null
+++ b/share/metview/etc/ObsPlottingRules
@@ -0,0 +1,57 @@
+
+%if OBS_TEMPERATURE <> ON %then
+ %unset OBS_TEMPERATURE_COLOUR
+
+%if OBS_IDENTIFICATION <> ON %then
+ %unset OBS_IDENTIFICATION_COLOUR
+
+%if OBS_PRESSURE_TENDENCY <> ON %then
+ %unset OBS_PRESSURE_TENDENCY_COLOUR
+
+%if OBS_PRESENT_WEATHER <> ON %then
+ %unset OBS_PRESENT_WEATHER_COLOUR
+
+%if OBS_UPPER_AIR_PRESSURE <> ON %then
+ %unset OBS_UPPER_AIR_PRESSURE_COLOUR
+
+%if OBS_SEA_TEMPERATURE <> ON %then
+ %unset OBS_SEA_TEMPERATURE_COLOUR
+
+%if OBS_HIGH_CLOUD <> ON %then
+ %unset OBS_HIGH_CLOUD_COLOUR
+
+%if OBS_PAST_WEATHER <> ON %then
+ %unset OBS_PAST_WEATHER_COLOUR
+
+%if OBS_MEDIUM_CLOUD <> ON %then
+ %unset OBS_MEDIUM_CLOUD_COLOUR
+
+%if OBS_LOW_CLOUD <> ON %then
+ %unset OBS_LOW_CLOUD_COLOUR
+
+%if OBS_THICKNESS <> ON %then
+ %unset OBS_THICKNESS_COLOUR
+
+%if OBS_DEWPOINT <> ON %then
+ %unset OBS_DEWPOINT_COLOUR
+
+%if OBS_HEIGHT <> ON %then
+ %unset OBS_HEIGHT_COLOUR
+
+%if OBS_STATION_RING <> ON %then
+ %unset OBS_STATION_RING_COLOUR
+
+%if OBS_VISIBILITY <> ON %then
+ %unset OBS_VISIBILITY_COLOUR
+
+%if OBS_PRESSURE <> ON %then
+ %unset OBS_PRESSURE_COLOUR
+
+%if OBS_WIND <> ON %then
+ %unset OBS_WIND_COLOUR
+
+%if OBS_TIME <> ON %then
+ %unset OBS_TIME_COLOUR
+
+%if OBS_WAVES <> ON %then
+ %unset OBS_WAVES_COLOUR
diff --git a/share/metview/etc/ObsRules b/share/metview/etc/ObsRules
deleted file mode 100755
index 23f6de9..0000000
--- a/share/metview/etc/ObsRules
+++ /dev/null
@@ -1,315 +0,0 @@
-! This is the magics check file
-!
-! Each request is checked again each rule
-! The rules have the following syntax:
-!
-! RULE ---> if TEST then ACTION
-!
-!
-! TEST ---> PARAMETER = VALUE
-! ---> PARAMETER > VALUE
-! ---> PARAMETER < VALUE
-! ---> PARAMETER >= VALUE
-! ---> PARAMETER <= VALUE
-! ---> PARAMETER <> VALUE
-! ---> PARAMETER in LIST_OF_VALUES
-! ---> not TEST
-! ---> TEST and TEST
-! ---> TEST or TEST
-! ---> ( TEST )
-!
-!
-! ACTION ---> error MESSAGE
-! ---> warning MESSAGE
-! ---> set PARAMETER = VALUE
-! ---> unset PARAMETER
-!
-! B.Raoult
-! Wed Feb 13 15:07:49 GMT 1991
-!
-! J.Daabeck
-! Thu Nov 3
-!
-%if OBS_FB = OFF %and OBS_CONFIDENCE_CHECK = OFF %then
- %unset OBS_CONFIDENCE_PARAMETER
- %unset OBS_CONFIDENCE_LEVEL
-
-%if OBS_DATE_CHECK = OFF %then
- %unset OBS_DATE
- %unset OBS_DATE_TOLERANCE
-
-%if OBS_TIME_CHECK = OFF %then
- %unset OBS_TIME
- %unset OBS_TIME_TOLERANCE
-
-%if OBS_IDENTIFICATION = OFF %then
- %unset OBS_IDENTIFICATION_COLOUR
- %unset OBS_IDENTIFICATION_TYPE
-
-%if OBS_STATION_RING = OFF %then %unset OBS_STATION_RING_COLOUR
-
-%if OBS_WIND = OFF %then
- %unset OBS_WIND_COLOUR
- %unset OBS_WIND_FLAG_STYLE
-
-%if OBS_WIND = OFF %and OBS_THERMAL_WIND = OFF %then
- %unset OBS_WIND_FLAG_THICKNESS
-
-
-%if OBS_PRESSURE = OFF %and OBS_UPPER_AIR_PRESSURE = OFF %then %unset OBS_PRESSURE_COLOUR
-%if OBS_TEMPERATURE = OFF %then %unset OBS_TEMPERATURE_COLOUR
-%if OBS_SEA_SURFACE_TEMPERATURE = OFF %then %unset OBS_SEA_SURFACE_TEMP_COLOUR
-%if OBS_PRESSURE_TENDENCY = OFF %then %unset OBS_PRESSURE_TENDENCY_COLOUR
-%if OBS_PRESENT_WEATHER = OFF %then %unset OBS_PRESENT_WEATHER_COLOUR
-%if OBS_PAST_WEATHER = OFF %then %unset OBS_PAST_WEATHER_COLOUR
-%if OBS_VISIBILITY = OFF %then %unset OBS_VISIBILITY_COLOUR
-%if OBS_DEWPOINT = OFF %then %unset OBS_DEWPOINT_COLOUR
-%if OBS_TIME_PLOT = OFF %then %unset OBS_TIME_PLOT_COLOUR
-%if OBS_CLOUD = OFF %then %unset OBS_CLOUD_COLOUR
-%if OBS_LOW_CLOUD = OFF %then %unset OBS_LOW_CLOUD_COLOUR
-%if OBS_MEDIUM_CLOUD = OFF %then %unset OBS_MEDIUM_CLOUD_COLOUR
-%if OBS_HIGH_CLOUD = OFF %then %unset OBS_HIGH_CLOUD_COLOUR
-%if OBS_CLOUD_8_GROUPS = OFF %then %unset OBS_CLOUD_8_GROUPS_COLOUR
-
-%if OBS_THETA = OFF %then
- %unset OBS_THETA_TYPE
- %unset OBS_THETA_COLOUR
-
-%if OBS_THICKNESS = OFF %then
- %unset OBS_THICKNESS_COLOUR
-
-%if OBS_WATER_PRECIPITABLE = OFF %then %unset OBS_WATER_PRECIPITABLE_COLOUR
-%if OBS_SHIP_DIRECTION = OFF %then %unset OBS_SHIP_DIRECTION_COLOUR
-%if OBS_SHIP_SPEED = OFF %then %unset OBS_SHIP_SPEED_COLOUR
-%if OBS_WAVES = OFF %then %unset OBS_WAVES_COLOUR
-%if OBS_HEIGHT = OFF %then %unset OBS_HEIGHT_COLOUR
-%if OBS_SOIL_TEMPERATURE_LEVEL_1 = OFF %and OBS_SOIL_TEMPERATURE_LEVEL_2 = OFF %and OBS_SOIL_TEMPERATURE_LEVEL_3 = OFF %and OBS_SOIL_TEMPERATURE_LEVEL_4 = OFF %then
- %unset OBS_SOIL_TEMPERATURE_COLOUR
- %unset OBS_STATION_HEIGHT
- %unset OBS_STATION_HEIGHT_COLOUR
-
-%if OBS_STATION_HEIGHT = OFF %then %unset OBS_STATION_HEIGHT_COLOUR
-
-%if OBS_POSITION_ONLY = ON %then
- %unset OBS_STATION_RING
- %unset OBS_WIND
- %unset OBS_PRESSURE
- %unset OBS_UPPER_AIR_PRESSURE
- %unset OBS_TEMPERATURE
- %unset OBS_SEA_SURFACE_TEMPERATURE
- %unset OBS_TIME_PLOT
- %unset OBS_PRESSURE_TENDENCY
- %unset OBS_PRESENT_WEATHER
- %unset OBS_PAST_WEATHER
- %unset OBS_VISIBILITY
- %unset OBS_DEWPOINT
- %unset OBS_CLOUD
- %unset OBS_LOW_CLOUD
- %unset OBS_MEDIUM_CLOUD
- %unset OBS_HIGH_CLOUD
- %unset OBS_CLOUD_8_GROUPS
- %unset OBS_LEVEL
- %unset OBS_LEVEL_TOLERANCE
- %unset OBS_THERMAL_WIND
- %unset OBS_THERMAL_WIND_LINE_STYLE
- %unset OBS_THETA
- %unset OBS_THETA_TYPE
- %unset OBS_THICKNESS
- %unset OBS_LEVEL_2
- %unset OBS_SATEM_TEMPERATURE
- %unset OBS_WATER_PRECIPITABLE
- %unset OBS_SHIP_DIRECTION
- %unset OBS_SHIP_SPEED
- %unset OBS_WAVES
- %unset OBS_HEIGHT
- %unset OBS_STATION_RING_COLOUR
- %unset OBS_WIND_COLOUR
- %unset OBS_WIND_FLAG_THICKNESS
- %unset OBS_WIND_FLAG_STYLE
- %unset OBS_PRESSURE_COLOUR
- %unset OBS_TEMPERATURE_COLOUR
- %unset OBS_SEA_SURFACE_TEMP_COLOUR
- %unset OBS_TIME_PLOT_COLOUR
- %unset OBS_PRESSURE_TENDENCY_COLOUR
- %unset OBS_PRESENT_WEATHER_COLOUR
- %unset OBS_PAST_WEATHER_COLOUR
- %unset OBS_VISIBILITY_COLOUR
- %unset OBS_DEWPOINT_COLOUR
- %unset OBS_CLOUD_COLOUR
- %unset OBS_LOW_CLOUD_COLOUR
- %unset OBS_MEDIUM_CLOUD_COLOUR
- %unset OBS_HIGH_CLOUD_COLOUR
- %unset OBS_CLOUD_8_GROUPS_COLOUR
- %unset OBS_THETA_COLOUR
- %unset OBS_THICKNESS_COLOUR
- %unset OBS_WATER_PRECIPITABLE_COLOUR
- %unset OBS_SHIP_DIRECTION_COLOUR
- %unset OBS_SHIP_SPEED_COLOUR
- %unset OBS_WAVES_COLOUR
- %unset OBS_HEIGHT_COLOUR
- %unset OBS_SOIL_TEMPERATURE_LEVEL_1
- %unset OBS_SOIL_TEMPERATURE_LEVEL_2
- %unset OBS_SOIL_TEMPERATURE_LEVEL_3
- %unset OBS_SOIL_TEMPERATURE_LEVEL_4
- %unset OBS_SOIL_TEMPERATURE_COLOUR
- %unset OBS_STATION_HEIGHT
- %unset OBS_STATION_HEIGHT_COLOUR
-
-%if OBS_FB = OFF %then
- %unset OBS_FB_TYPE
- %unset OBS_FB_LEVEL
- %unset OBS_FB_LEVEL_2
- %unset OBS_FB_LEVEL_TOLERANCE_ABOVE
- %unset OBS_FB_LEVEL_TOLERANCE_BELOW
- %unset OBS_FB_SOURCE
- %unset OBS_FB_SOURCE_TYPE
- %unset OBS_FB_DEPARTURES
- %unset OBS_FB_SUBSTITUTES
- %unset OBS_FB_MIN_ERROR_FLAG
- %unset OBS_FB_ERROR_FLAG0_COLOUR
- %unset OBS_FB_ERROR_FLAG1_COLOUR
- %unset OBS_FB_ERROR_FLAG2_COLOUR
- %unset OBS_FB_ERROR_FLAG3_COLOUR
- %unset OBS_FB_WIND
- %unset OBS_FB_WIND_FLAG_LENGTH
- %unset OBS_FB_TEMPERATURE
- %unset OBS_FB_HEIGHT
- %unset OBS_FB_PRESSURE
- %unset OBS_FB_RELATIVE_HUMIDITY
- %unset OBS_FB_SPECIFIC_HUMIDITY
- %unset OBS_FB_LEGEND
- %unset OBS_FB_DEPARTURES_TYPE
- %unset OBS_FB_RADIANCES
- %unset OBS_FB_STATION_RING_HEIGHT
- %unset OBS_FB_SCATTEROMETER_WINDS
- %unset OBS_FB_SCAT_CLOSEST_TO
-
-%if OBS_FB = OFF %then
- %unset OBS_FB_SSMI_WATER_PRECIPITABLE
- %unset OBS_FB_SSMI_LIQUID_WATER_PATH
- %unset OBS_FB_SSMI_TYPE
- %unset OBS_FB_SSMI_WIND_STRENGTH
- %unset OBS_FB_SSMI_FAILURE_FLAG
-
-%if OBS_FB_SOURCE = OFF %then
- %unset OBS_FB_SOURCE_TYPE
-
-%if OBS_FB_DEPARTURES = OFF %then
- %unset OBS_FB_DEPARTURES_TYPE
-
-%if OBS_FB_WIND = OFF %then
- %unset OBS_FB_FLAG_LENGTH
-
-%if OBS_FB <> OFF %then
- %unset OBS_CONFIDENCE_CHECK
- %unset OBS_CONFIDENCE_PARAMETER
- %unset OBS_CONFIDENCE_LEVEL
- %unset OBS_STATION_RING
- %unset OBS_WIND
- %unset OBS_PRESSURE
- %unset OBS_UPPER_AIR_PRESSURE
- %unset OBS_TEMPERATURE
- %unset OBS_SEA_SURFACE_TEMPERATURE
- %unset OBS_TIME_PLOT
- %unset OBS_PRESSURE_TENDENCY
- %unset OBS_PRESENT_WEATHER
- %unset OBS_PAST_WEATHER
- %unset OBS_VISIBILITY
- %unset OBS_DEWPOINT
- %unset OBS_CLOUD
- %unset OBS_LOW_CLOUD
- %unset OBS_MEDIUM_CLOUD
- %unset OBS_HIGH_CLOUD
- %unset OBS_CLOUD_8_GROUPS
- %unset OBS_LEVEL
- %unset OBS_LEVEL_TOLERANCE
- %unset OBS_THERMAL_WIND
- %unset OBS_THERMAL_WIND_LINE_STYLE
- %unset OBS_THETA
- %unset OBS_THETA_TYPE
- %unset OBS_THICKNESS
- %unset OBS_LEVEL_2
- %unset OBS_SATEM_TEMPERATURE
- %unset OBS_WATER_PRECIPITABLE
- %unset OBS_SHIP_DIRECTION
- %unset OBS_SHIP_SPEED
- %unset OBS_WAVES
- %unset OBS_HEIGHT
- %unset OBS_STATION_RING_COLOUR
- %unset OBS_WIND_COLOUR
- %unset OBS_WIND_FLAG_THICKNESS
- %unset OBS_WIND_FLAG_STYLE
- %unset OBS_PRESSURE_COLOUR
- %unset OBS_TEMPERATURE_COLOUR
- %unset OBS_SEA_SURFACE_TEMP_COLOUR
- %unset OBS_TIME_PLOT_COLOUR
- %unset OBS_PRESSURE_TENDENCY_COLOUR
- %unset OBS_PRESENT_WEATHER_COLOUR
- %unset OBS_PAST_WEATHER_COLOUR
- %unset OBS_VISIBILITY_COLOUR
- %unset OBS_DEWPOINT_COLOUR
- %unset OBS_CLOUD_COLOUR
- %unset OBS_LOW_CLOUD_COLOUR
- %unset OBS_MEDIUM_CLOUD_COLOUR
- %unset OBS_HIGH_CLOUD_COLOUR
- %unset OBS_CLOUD_8_GROUPS_COLOUR
- %unset OBS_THETA_COLOUR
- %unset OBS_THICKNESS_COLOUR
- %unset OBS_WATER_PRECIPITABLE_COLOUR
- %unset OBS_SHIP_DIRECTION_COLOUR
- %unset OBS_SHIP_SPEED_COLOUR
- %unset OBS_WAVES_COLOUR
- %unset OBS_HEIGHT_COLOUR
- %unset OBS_SOIL_TEMPERATURE_LEVEL_1
- %unset OBS_SOIL_TEMPERATURE_LEVEL_2
- %unset OBS_SOIL_TEMPERATURE_LEVEL_3
- %unset OBS_SOIL_TEMPERATURE_LEVEL_4
- %unset OBS_SOIL_TEMPERATURE_COLOUR
- %unset OBS_STATION_HEIGHT
- %unset OBS_STATION_HEIGHT_COLOUR
-
-%if OBS_FB = OFF %or OBS_FB_RADIANCES = OFF %then
- %unset OBS_FB_RADIANCES_TYPE
- %unset OBS_FB_RADIANCES_CHANNEL_NUMBER
- %unset OBS_FB_RADIANCES_CHANNEL_PLOT
- %unset OBS_FB_RADIANCES_DEPARTURES
-
-%if OBS_FB <> OFF %and OBS_FB_RADIANCES = ON %then
- %unset OBS_FB_LEVEL
- %unset OBS_FB_LEVEL_2
- %unset OBS_FB_LEVEL_TOLERANCE_ABOVE
- %unset OBS_FB_LEVEL_TOLERANCE_BELOW
- %unset OBS_FB_DEPARTURES
- %unset OBS_FB_DEPARTURES_TYPE
- %unset OBS_FB_SUBSTITUTES
- %unset OBS_FB_HEIGHT
- %unset OBS_FB_PRESSURE
- %unset OBS_FB_RELATIVE_HUMIDITY
- %unset OBS_FB_SPECIFIC_HUMIDITY
- %unset OBS_FB_TEMPERATURE
- %unset OBS_FB_WIND
- %unset OBS_FB_WIND_FLAG_LENGTH
-
-%if OBS_FB = OFF %or OBS_FB_RADIANCES = OFF %or OBS_FB_RADIANCES_DEPARTURES = OFF %then
- %unset OBS_FB_RADIANCES_DEPARTURES_TYPE
-
-%if OBS_FB_RADIANCES_TYPE = '1DVAR' %and ( OBS_FB_RADIANCES_DEPARTURES_TYPE = 'OBS-FG2' %or OBS_FB_RADIANCES_DEPARTURES_TYPE = 'OBS-FG3' %or OBS_FB_RADIANCES_DEPARTURES_TYPE = 'OBS-3V' ) %then
- %error 'Illegal value for 1DVAR Obs_Fb_Radiances_Departures_Type'
-
-%if OBS_FB_RADIANCES_TYPE = '3DVAR' %and ( OBS_FB_RADIANCES_DEPARTURES_TYPE = BIAS %orOBS_FB_RADIANCES_DEPARTURES_TYPE = STDEV ) %then
- %error 'Illegal value for 3DVAR Obs_Fb_Radiances_Departures_Type'
-
-%if OBS_FB = OFF %or OBS_FB_SCATTEROMETER_WINDS = OFF %then
- %unset OBS_FB_SCAT_CLOSEST_TO
- %unset OBS_FB_SCAT_AMBIGUITIES
- %unset OBS_FB_SCAT_THINNED_ONLY
- %unset OBS_FB_SCAT_SWEET_SPOTS_ONLY
- %unset OBS_FB_SCAT_ALT_COLORING
- %unset OBS_FB_SCAT_REJECTION_LIST
-
-%if OBS_THERMAL_WIND = OFF %then
- %unset OBS_THERMAL_WIND_LINE_STYLE
-# %unset OBS_THERMAL_WIND_TYPE
-
-%if OBS_FB_DEPARTURES = ON %then
- %unset OBS_FB_SCAT_CLOSEST_TO
diff --git a/share/metview/etc/PlotPageDef b/share/metview/etc/PlotPageDef
index 34dcf10..27bea30 100644
--- a/share/metview/etc/PlotPageDef
+++ b/share/metview/etc/PlotPageDef
@@ -110,7 +110,7 @@ PLOT_PAGE ; Page for PlotMod ; Metview
VIEW
[
interface = icon,
- class = MXSECTVIEW/MAPVIEW/GEOVIEW/MVERTPROFVIEW/MAVERAGEVIEW,
+ class = MXSECTVIEW/MXSECTIONVIEW/MAPVIEW/GEOVIEW/MVERTPROFVIEW/MVPROFILEVIEW/MAVERAGEVIEW/MXAVERAGEVIEW/CARTESIANVIEW/ANNOTATIONVIEW/MHOVMOELLERVIEW,
exclusive = true,
help = help_data,
help_directory = '/System/Defaults',
diff --git a/share/metview/etc/Services b/share/metview/etc/Services
index 8ebd3a0..72a72c3 100644
--- a/share/metview/etc/Services
+++ b/share/metview/etc/Services
@@ -38,9 +38,15 @@ service,
service,
name = 'MvMonitor',
fullname = 'Process monitor',
- cmd = '$METVIEW_BIN/MvMonitor'
+ cmd = '$METVIEW_BIN/MvMonitor $METVIEW_QT_APPLICATION_FLAGS'
service,
+ name = 'MarsCatalogue',
+ fullname = 'MARS Catalogue',
+ cmd = '$METVIEW_BIN/MarsCatalogue $METVIEW_QT_APPLICATION_FLAGS'
+
+
+service,
name = 'stbase',
fullname = Station Database,
cmd = '$METVIEW_BIN/stbase'
diff --git a/share/metview/etc/UiSpec.Bookmarks b/share/metview/etc/UiSpec.Bookmarks
index 1c0cef7..bf1de7c 100644
--- a/share/metview/etc/UiSpec.Bookmarks
+++ b/share/metview/etc/UiSpec.Bookmarks
@@ -15,7 +15,7 @@ icon_menu,
icon_menu,
cmd = openInWin,
label = 'Open in new window',
- condition = 'path=!FOLDERGROUP'
+ condition = 'path!=FOLDERGROUP'
icon_menu,
cmd = openGroup,
@@ -33,7 +33,7 @@ icon_menu,
icon_menu,
cmd = editEntry,
- label = '&Edit',
+ label = '&Properties',
shortcut = Ctrl+E,
icon = edit
@@ -58,18 +58,19 @@ icon_menu,
shortcut = 'Ctrl+W',
condition = 'path=wastebasket'
+
#------------------------------------
# Desktop context menu
#------------------------------------
desktop_menu,
cmd = addEntry,
- label = 'Bookmark this folder',
+ label = 'Bookmark current folder',
icon = 'add_bookmark'
desktop_menu,
cmd = addTabs,
- label = 'Bookmark these tabs',
+ label = 'Bookmark current tabs',
icon = 'add_bookmark_group'
desktop_menu,
@@ -80,3 +81,6 @@ desktop_menu,
label = '&New bookmark',
icon = 'add'
+desktop_menu,
+ type = separator
+
diff --git a/share/metview/etc/UiSpec.DetailedFolderView b/share/metview/etc/UiSpec.DetailedFolderView
index 38257c7..e6b3b2d 100644
--- a/share/metview/etc/UiSpec.DetailedFolderView
+++ b/share/metview/etc/UiSpec.DetailedFolderView
@@ -9,59 +9,71 @@
#------------------------------------
desktop_menu,
- id = create,
- type = submenu,
- label = 'Create new ...'
+ cmd = createIcon,
+ label = 'Create new &Icon',
+ icon = 'add_icon',
+ shortcut = 'Ctrl+N'
+
+desktop_menu,
+ type = separator
desktop_menu,
cmd = createFolder,
- label = '&Folder',
- parent_menu = create,
- icon = 'folder'
+ label = 'Create new &Folder',
+ icon = 'create_folder',
+ shortcut = 'Ctrl+Shift+F'
desktop_menu,
- type = separator,
- parent_menu = create
+ cmd = createMacro,
+ label = 'Create new &Macro',
+ icon = 'create_macro',
+ shortcut = 'Ctrl+Shift+M'
desktop_menu,
- cmd = createMacro,
- label = '&Macro',
+ id = create,
+ type = submenu,
+ label = 'Create new ...'
+
+desktop_menu,
+ cmd = createLinkToFile,
+ label = 'Link to F&ile',
parent_menu = create,
- icon = 'macro'
+ icon = 'link'
desktop_menu,
- cmd = createIcon,
- label = '&Icon',
+ cmd = createLinkToFolder,
+ label = 'Link to &Folder',
parent_menu = create,
- icon = 'add'
+ icon = 'link'
desktop_menu,
- type = separator,
- parent_menu = create
+ type = separator
desktop_menu,
- cmd = createLink,
- label = '&Link',
- parent_menu = create,
- icon = 'link'
+ cmd = paste,
+ label = '&Paste',
+ icon = editpaste,
+ shortcut = 'Ctrl+V'
desktop_menu,
type = separator
desktop_menu,
- cmd = showLastAction,
+ cmd = showLastIcon,
label = Show last icon created,
icon = showLastIcon
desktop_menu,
cmd = sizeDown,
label = '&Decrease size',
- shortcut = 'Ctrl+-'
+ shortcut = 'Ctrl+-',
+ icon = size_down
desktop_menu,
cmd = sizeUp,
label = '&Increase size',
- shortcut = 'Ctrl++'
+ shortcut = 'Ctrl++',
+ icon = size_up
desktop_menu,
type = separator
diff --git a/share/metview/etc/UiSpec.FolderView b/share/metview/etc/UiSpec.FolderView
index b4855bc..70fac60 100644
--- a/share/metview/etc/UiSpec.FolderView
+++ b/share/metview/etc/UiSpec.FolderView
@@ -4,13 +4,13 @@
icon_menu,
cmd = execute,
- label = 'E&xecute',
- shortcut = Ctrl+X
+ label = 'E&xecute'
+
icon_menu,
cmd = visualise,
label = '&Visualise',
- shortcut = Ctrl+V,
+ shortcut = Ctrl+I,
icon = visualise
icon_menu,
@@ -37,7 +37,8 @@ icon_menu,
icon_menu,
cmd = open,
- label = Open
+ label = Open,
+ shortcut = Enter
icon_menu,
cmd = openInTab,
@@ -57,12 +58,32 @@ icon_menu,
icon = edit
icon_menu,
+ type = separator
+
+icon_menu,
cmd = duplicate,
label = '&Duplicate',
shortcut = Ctrl+D,
icon = duplicate
icon_menu,
+ id = copy,
+ cmd = copy,
+ label = '&Copy',
+ shortcut = Ctrl+C,
+ icon = editcopy
+
+icon_menu,
+ id = cut,
+ cmd = cut,
+ label = 'Cu&t',
+ shortcut = Ctrl+X,
+ icon = editcut
+
+icon_menu,
+ type = separator
+
+icon_menu,
id = delete,
cmd = delete,
label = 'Move to &wastebin',
@@ -127,11 +148,11 @@ icon_menu,
parent_menu = compress,
service = icon_group_tool
-icon_menu,
- cmd = compress_tzip,
- label = 'TAR/ZI&P',
- parent_menu = compress,
- service = icon_group_tool
+#icon_menu,
+# cmd = compress_tzip,
+# label = 'TAR/ZI&P',
+# parent_menu = compress,
+# service = icon_group_tool
icon_menu,
cmd = compress_tar,
@@ -139,11 +160,11 @@ icon_menu,
parent_menu = compress,
service = icon_group_tool
-icon_menu,
- cmd = compress_zip,
- label = '&ZIP',
- parent_menu = compress,
- service = icon_group_tool
+#icon_menu,
+# cmd = compress_zip,
+# label = '&ZIP',
+# parent_menu = compress,
+# service = icon_group_tool
icon_menu,
@@ -156,6 +177,12 @@ icon_menu,
#------------------------------------
group_menu,
+ icon_menu_id = copy
+
+group_menu,
+ icon_menu_id = cut
+
+group_menu,
icon_menu_id = delete
group_menu,
diff --git a/share/metview/etc/UiSpec.IconFolderView b/share/metview/etc/UiSpec.IconFolderView
index 43c8028..35ea17c 100644
--- a/share/metview/etc/UiSpec.IconFolderView
+++ b/share/metview/etc/UiSpec.IconFolderView
@@ -9,39 +9,41 @@
#------------------------------------
desktop_menu,
- id = create,
- type = submenu,
- label = 'Create new ...'
-
+ cmd = createIcon,
+ label = 'Create new &Icon',
+ icon = 'add_icon',
+ shortcut = 'Ctrl+N'
+
desktop_menu,
- cmd = createFolder,
- label = '&Folder',
- parent_menu = create,
- icon = 'folder'
+ type = separator
desktop_menu,
- type = separator,
- parent_menu = create
+ cmd = createFolder,
+ label = 'Create new &Folder',
+ icon = 'create_folder',
+ shortcut = 'Ctrl+Shift+F'
desktop_menu,
cmd = createMacro,
- label = '&Macro',
- parent_menu = create,
- icon = 'macro'
+ label = 'Create new &Macro',
+ icon = 'create_macro',
+ shortcut = 'Ctrl+Shift+M'
+
desktop_menu,
- cmd = createIcon,
- label = '&Icon',
- parent_menu = create,
- icon = 'add'
+ id = create,
+ type = submenu,
+ label = 'Create new ...'
desktop_menu,
- type = separator,
- parent_menu = create
+ cmd = createLinkToFile,
+ label = 'Link to F&ile',
+ parent_menu = create,
+ icon = 'link'
desktop_menu,
- cmd = createLink,
- label = '&Link',
+ cmd = createLinkToFolder,
+ label = 'Link to &Folder',
parent_menu = create,
icon = 'link'
@@ -49,16 +51,15 @@ desktop_menu,
type = separator
desktop_menu,
+ cmd = toGridByName,
+ label = 'Arrange on grid by &name'
+
+desktop_menu,
id = grid,
type = submenu,
label = 'Arrange on grid by ...'
desktop_menu,
- cmd = toGridByName,
- label = '&Name',
- parent_menu = grid
-
-desktop_menu,
cmd = toGridBySize,
label = '&Size',
parent_menu = grid
@@ -69,19 +70,33 @@ desktop_menu,
parent_menu = grid
desktop_menu,
- cmd = showLastAction,
+ type = separator
+
+desktop_menu,
+ cmd = paste,
+ label = '&Paste',
+ icon = editpaste,
+ shortcut = 'Ctrl+V'
+
+desktop_menu,
+ type = separator
+
+desktop_menu,
+ cmd = showLastIcon,
label = Show last icon created,
icon = showLastIcon
desktop_menu,
cmd = sizeDown,
label = '&Decrease size',
- shortcut = 'Ctrl+-'
+ shortcut = 'Ctrl+-',
+ icon = 'size_down'
desktop_menu,
cmd = sizeUp,
label = '&Increase size',
- shortcut = 'Ctrl++'
+ shortcut = 'Ctrl++',
+ icon = 'size_up'
desktop_menu,
type = separator
@@ -97,6 +112,6 @@ desktop_menu,
desktop_menu,
cmd = reload,
label = '&Reload',
- shortcut = reload,
+ shortcut = 'F5',
icon = reload
diff --git a/share/metview/etc/ecmwf.def b/share/metview/etc/ecmwf.def
index 0f5afb4..7ec682c 100755
--- a/share/metview/etc/ecmwf.def
+++ b/share/metview/etc/ecmwf.def
@@ -236,6 +236,8 @@ NEUTRAL WIND AT 10 M Y-COMPONENT ; V10N ; 228132 ; 132.228
NW-SE OROGRAPHIC VARIANCE ; NEOV ; 193
OBSERVATION COUNT ; OBCT ; 062
OCEAN POTENTIAL TEMPERATURE ; OCPT ; 129
+OCEAN CURRENT ZONAL COMPONENT ; OCU ; 131.151
+OCEAN CURRENT MERIDIONAL COMPONENT ; OCV ; 132.151
OZONE MASS MIXING RATIO ; O3 ; 203 ; 203.128
PEAK DIRECTION ; PD ; 230
PEAK PERIOD ; PP ; 231
@@ -1034,7 +1036,7 @@ GRIB IMAGES #= (0/1/10/20)
# Extractions
-BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/140/142/144/145/147/164)
+BUFR = (1/3/9/11/13/19/21/22/23/28/61/62/63/82/83/84/85/86/87/91/92/95/96/101/102/103/106/110/109/111/140/142/144/145/147/164)
WAVESCAT = (121)
SCAT = (122)
RALT = (123)
@@ -1053,6 +1055,7 @@ ENVISAT_MERIS = (212)
ATMS = (201)
CRIS = (202)
SMOS = (203)
+AMSR2_GC = (60)
# FeedBack
@@ -1105,7 +1108,7 @@ FBWINDSAT = (156)
# Type VSNS (NSD)
-VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/106/107)
+VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/106/107/109/111)
PILOT LAND ; P ; 91
PILOT SHIP ; PS ; 92
@@ -1119,6 +1122,8 @@ VERTICAL SOUNDINGS NOT SATELLITE ; VSNS = (91/92/95/96/97/101/102/103/104/105/10
ROCOB SHIP ; RS ; 105
TEMP MOBILE ; TM ; 106
CLIMATE TEMP ; CT ; 107
+ HIGH RESOLUTION TEMP LAND ; HRT ; 109
+ HIGH RESOLUTION TEMP SHIP ; HRTS ; 111
# Type VSS (SD)
@@ -3046,7 +3051,7 @@ RETRIEVE ; Retrieval of data ; MARS
{
DATASET [ java_hidden = TRUE ,
- visible = false,
+ visible = true,
check = false,
priority = 0]
{
@@ -4313,7 +4318,7 @@ READ ; X; METVIEW
106
*
ANY ; ANY
- } = ANY
+ } = AUTO
ROTATION
{
diff --git a/share/metview/etc/ifsdata/Makefile.in b/share/metview/etc/ifsdata/Makefile.in
index aa20dca..0cb83a8 100644
--- a/share/metview/etc/ifsdata/Makefile.in
+++ b/share/metview/etc/ifsdata/Makefile.in
@@ -39,6 +39,7 @@ subdir = share/metview/etc/ifsdata
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -87,6 +88,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -110,6 +113,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/share/metview/etc/macro_built_in_functions.txt b/share/metview/etc/macro_built_in_functions.txt
index e140a58..fc47ff6 100644
--- a/share/metview/etc/macro_built_in_functions.txt
+++ b/share/metview/etc/macro_built_in_functions.txt
@@ -30,6 +30,7 @@ coslat
count
covar
covar_a
+cptec_access
create_geo
cross_sect
datacoverage
@@ -157,11 +158,12 @@ min
minute
minvalue
mlegend
+mobs
month
msymb
mtaylor
-mtephi
mtext
+mthermogrid
mvert_prof
mvertprofview
mwind
@@ -192,14 +194,10 @@ percentile
pgraph
plot_page
plot_subpage
-pm_bufr_tephi
-pm_grib_tephi
png_output
-pobs
polar_vector
pott_m
pott_p
-pre1995gribtephi
precision
pressure
print
@@ -263,6 +261,8 @@ slider
sort
sort_and_indices
sort_indices
+spec_contour
+spec_graph
sqrt
stations
stdev
@@ -281,6 +281,9 @@ svg_output
table
table_visualiser
tan
+thermo_bufr
+thermo_grib
+thermo_odb
thickness
tmpfile
tmpname
@@ -302,6 +305,7 @@ value
value2
value2s
values
+vapor_prepare
var
var_a
variables
@@ -312,6 +316,7 @@ vert_prof
vertint
vertprofview
waitmode
+wcsclient
webaccess
wmsclient
write
diff --git a/share/metview/etc/macro_icon_function_help.xml b/share/metview/etc/macro_icon_function_help.xml
index c740b3e..357543d 100644
--- a/share/metview/etc/macro_icon_function_help.xml
+++ b/share/metview/etc/macro_icon_function_help.xml
@@ -110,7 +110,7 @@
<param name='Y_AUTOMATIC_REVERSE' values = 'on/off' />
<param name='HORIZONTAL_AXIS' />
<param name='VERTICAL_AXIS' />
- <param name='TEPHIGRAM_GRID' />
+ <param name='THERMO_GRID' />
<param name='TAYLOR_GRID' />
<param name='SUBPAGE_X_POSITION' />
<param name='SUBPAGE_Y_POSITION' />
@@ -166,6 +166,15 @@
<param name='ACCURACY' values = 'NORMAL/REDUCED/LOW/OFF/ARCHIVED VALUE' />
<param name='TARGET' values = 'OFF' />
</function>
+<function name='cptec_access'>
+ <param name='MODEL' values = 'ETA_15Km_1h/ETA_15Km_3h/ETA_20Km/GLOBAL' />
+ <param name='LEVTYPE' values = 'SURFACE/10_METER/PRESSURE_LEVEL/MODEL_LEVEL' />
+ <param name='LEVELIST' />
+ <param name='PARAM' />
+ <param name='DATE' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
+ <param name='TIME' />
+ <param name='STEP' values = 'TO/BY' />
+</function>
<function name='cross_sect'>
</function>
<function name='datacoverage'>
@@ -404,7 +413,7 @@
</function>
<function name='geoview'>
<param name='COASTLINES' />
- <param name='MAP_PROJECTION' values = 'CYLINDRICAL/POLAR_STEREOGRAPHIC/POLAR_NORTH/LAMBERT/LAMBERT_NORTH_ATLANTIC/GEOS/GOODE/COLLIGNON/MOLLWEIDE/ROBINSON/BONNE/EPSG:32661/EPSG:4326' />
+ <param name='MAP_PROJECTION' values = 'CYLINDRICAL/BONNE/COLLIGNON/EPSG:32661/EPSG:4326/GEOS/GOODE/LAMBERT/LAMBERT_NORTH_ATLANTIC/MERCATOR/MOLLWEIDE/POLAR_NORTH/POLAR_STEREOGRAPHIC/ROBINSON' />
<param name='MAP_AREA_DEFINITION' values = 'CORNERS/CENTRE/FULL' />
<param name='AREA' />
<param name='MAP_HEMISPHERE' values = 'NORTH/SOUTH' />
@@ -1010,9 +1019,54 @@
<param name='LEGEND_HISTOGRAM_GRID_LINE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
<param name='LEGEND_HISTOGRAM_GRID_THICKNESS' />
</function>
+<function name='mobs'>
+ <param name='OBS_DISTANCE_APART' />
+ <param name='OBS_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RUST/PEA [...]
+ <param name='OBS_SIZE' />
+ <param name='OBS_RING_SIZE' />
+ <param name='OBS_PRESENT_WEATHER' values = 'ON/OFF' />
+ <param name='OBS_PRESENT_WEATHER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
+ <param name='OBS_PRESSURE' values = 'ON/OFF' />
+ <param name='OBS_PRESSURE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+ <param name='OBS_UPPER_AIR_PRESSURE' values = 'ON/OFF' />
+ <param name='OBS_UPPER_AIR_PRESSURE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
+ <param name='OBS_PRESSURE_TENDENCY' values = 'ON/OFF' />
+ <param name='OBS_PRESSURE_TENDENCY_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDI [...]
+ <param name='OBS_STATION_RING' values = 'ON/OFF' />
+ <param name='OBS_STATION_RING_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
+ <param name='OBS_TEMPERATURE' values = 'ON/OFF' />
+ <param name='OBS_TEMPERATURE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORA [...]
+ <param name='OBS_THICKNESS' values = 'ON/OFF' />
+ <param name='OBS_THICKNESS_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+ <param name='OBS_HEIGHT' values = 'ON/OFF' />
+ <param name='OBS_HEIGHT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
+ <param name='OBS_IDENTIFICATION' values = 'ON/OFF' />
+ <param name='OBS_IDENTIFICATION_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
+ <param name='OBS_CLOUD' values = 'ON/OFF' />
+ <param name='OBS_LOW_CLOUD' values = 'ON/OFF' />
+ <param name='OBS_LOW_CLOUD_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+ <param name='OBS_MEDIUM_CLOUD' values = 'ON/OFF' />
+ <param name='OBS_MEDIUM_CLOUD_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
+ <param name='OBS_HIGH_CLOUD' values = 'ON/OFF' />
+ <param name='OBS_HIGH_CLOUD_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
+ <param name='OBS_DEWPOINT' values = 'ON/OFF' />
+ <param name='OBS_DEWPOINT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
+ <param name='OBS_SEA_TEMPERATURE' values = 'ON/OFF' />
+ <param name='OBS_SEA_TEMPERATURE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
+ <param name='OBS_WAVES' values = 'ON/OFF' />
+ <param name='OBS_WAVES_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
+ <param name='OBS_PAST_WEATHER' values = 'ON/OFF' />
+ <param name='OBS_PAST_WEATHER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
+ <param name='OBS_TIME' values = 'ON/OFF' />
+ <param name='OBS_TIME_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RUS [...]
+ <param name='OBS_VISIBILITY' values = 'ON/OFF' />
+ <param name='OBS_VISIBILITY_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
+ <param name='OBS_WIND' values = 'ON/OFF' />
+ <param name='OBS_WIND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RUS [...]
+</function>
<function name='msymb'>
<param name='LEGEND' values = 'ON/OFF' />
- <param name='SYMBOL_TYPE' values = 'NUMBER/TEXT/MARKER/WIND/BOTH' />
+ <param name='SYMBOL_TYPE' values = 'NUMBER/TEXT/MARKER/WIND' />
<param name='SYMBOL_TABLE_MODE' values = 'OFF/ADVANCED/ON' />
<param name='SYMBOL_FORMAT' />
<param name='SYMBOL_OUTLINE' values = 'ON/OFF' />
@@ -1036,11 +1090,12 @@
<param name='SYMBOL_IMAGE_HEIGHT' />
<param name='SYMBOL_TEXT_LIST' />
<param name='SYMBOL_TEXT_POSITION' values = 'RIGHT/LEFT/BOTTOM/TOP' />
- <param name='SYMBOL_TEXT_FONT_NAME' values = 'SERIF/SANSSERIF' />
+ <param name='SYMBOL_TEXT_FONT_NAME' />
<param name='SYMBOL_TEXT_FONT_SIZE' />
<param name='SYMBOL_TEXT_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
<param name='SYMBOL_TEXT_FONT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
<param name='SYMBOL_TEXT_BLANKING' values = 'ON/OFF' />
+ <param name='SYMBOL_LEGEND_HEIGHT' />
<param name='SYMBOL_MIN_TABLE' />
<param name='SYMBOL_MAX_TABLE' />
<param name='SYMBOL_MARKER_TABLE' />
@@ -1070,7 +1125,7 @@
<param name='SYMBOL_ADVANCED_TABLE_HEIGHT_LIST_POLICY' values = 'LASTONE/CYCLE' />
<param name='SYMBOL_ADVANCED_TABLE_TEXT_LIST' />
<param name='SYMBOL_ADVANCED_TABLE_TEXT_LIST_POLICY' values = 'LASTONE/CYCLE' />
- <param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_NAME' values = 'SERIF/SANSSERIF' />
+ <param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_NAME' />
<param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_SIZE' />
<param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
<param name='SYMBOL_ADVANCED_TABLE_TEXT_FONT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGE [...]
@@ -1102,65 +1157,6 @@
<param name='TAYLOR_SECONDARY_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
<param name='TAYLOR_SECONDARY_LABEL_HEIGHT' />
</function>
-<function name='mtephi'>
- <param name='TEPHIGRAM_ISOTHERM_GRID' values = 'ON/OFF' />
- <param name='TEPHIGRAM_ISOTHERM_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
- <param name='TEPHIGRAM_ISOTHERM_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
- <param name='TEPHIGRAM_ISOTHERM_THICKNESS' />
- <param name='TEPHIGRAM_ISOTHERM_INTERVAL' />
- <param name='TEPHIGRAM_ISOTHERM_REFERENCE' />
- <param name='TEPHIGRAM_ISOTHERM_REFERENCE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERIN [...]
- <param name='TEPHIGRAM_ISOTHERM_REFERENCE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
- <param name='TEPHIGRAM_ISOTHERM_REFERENCE_THICKNESS' />
- <param name='TEPHIGRAM_ISOTHERM_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RE [...]
- <param name='TEPHIGRAM_ISOTHERM_LABEL_FONT_NAME' />
- <param name='TEPHIGRAM_ISOTHERM_LABEL_FONT_STYLE' />
- <param name='TEPHIGRAM_ISOTHERM_LABEL_FONT_SIZE' />
- <param name='TEPHIGRAM_ISOTHERM_LABEL_FREQUENCY' />
- <param name='TEPHIGRAM_ISOBAR_GRID' values = 'ON/OFF' />
- <param name='TEPHIGRAM_ISOBAR_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
- <param name='TEPHIGRAM_ISOBAR_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
- <param name='TEPHIGRAM_ISOBAR_THICKNESS' />
- <param name='TEPHIGRAM_ISOBAR_INTERVAL' />
- <param name='TEPHIGRAM_ISOBAR_REFERENCE' />
- <param name='TEPHIGRAM_ISOBAR_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
- <param name='TEPHIGRAM_ISOBAR_LABEL_FONT_NAME' />
- <param name='TEPHIGRAM_ISOBAR_LABEL_FONT_STYLE' />
- <param name='TEPHIGRAM_ISOBAR_LABEL_FONT_SIZE' />
- <param name='TEPHIGRAM_ISOBAR_LABEL_FREQUENCY' />
- <param name='TEPHIGRAM_DRY_ADIABATIC_GRID' values = 'ON/OFF' />
- <param name='TEPHIGRAM_DRY_ADIABATIC_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/RED [...]
- <param name='TEPHIGRAM_DRY_ADIABATIC_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
- <param name='TEPHIGRAM_DRY_ADIABATIC_THICKNESS' />
- <param name='TEPHIGRAM_DRY_ADIABATIC_REFERENCE' />
- <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERI [...]
- <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_FONT_NAME' />
- <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_FONT_STYLE' />
- <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_FONT_SIZE' />
- <param name='TEPHIGRAM_DRY_ADIABATIC_LABEL_FREQUENCY' />
- <param name='TEPHIGRAM_DRY_ADIABATIC_INTERVAL' />
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_GRID' values = 'ON/OFF' />
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERI [...]
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_THICKNESS' />
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_INTERVAL' />
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_REFERENCE' />
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/T [...]
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_FONT_NAME' />
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_FONT_STYLE' />
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_FONT_SIZE' />
- <param name='TEPHIGRAM_SATURATED_ADIABATIC_LABEL_FREQUENCY' />
- <param name='TEPHIGRAM_MIXING_RATIO_GRID' values = 'ON/OFF' />
- <param name='TEPHIGRAM_MIXING_RATIO_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
- <param name='TEPHIGRAM_MIXING_RATIO_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DASH/CHAIN_DOT' />
- <param name='TEPHIGRAM_MIXING_RATIO_THICKNESS' />
- <param name='TEPHIGRAM_MIXING_RATIO_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERIN [...]
- <param name='TEPHIGRAM_MIXING_RATIO_LABEL_FONT_NAME' />
- <param name='TEPHIGRAM_MIXING_RATIO_LABEL_FONT_STYLE' />
- <param name='TEPHIGRAM_MIXING_RATIO_LABEL_FONT_SIZE' />
- <param name='TEPHIGRAM_MIXING_RATIO_LABEL_FREQUENCY' />
- <param name='TEPHIGRAM_MIXING_RATIO_FREQUENCY' />
-</function>
<function name='mtext'>
<param name='TEXT_LINE_COUNT' />
<param name='TEXT_LINE_1' />
@@ -1190,6 +1186,65 @@
<param name='TEXT_BORDER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/ [...]
<param name='TEXT_BORDER_THICKNESS' />
</function>
+<function name='mthermogrid'>
+ <param name='THERMO_ISOTHERM_GRID' values = 'ON/OFF' />
+ <param name='THERMO_ISOTHERM_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORA [...]
+ <param name='THERMO_ISOTHERM_THICKNESS' />
+ <param name='THERMO_ISOTHERM_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+ <param name='THERMO_ISOTHERM_INTERVAL' />
+ <param name='THERMO_ISOTHERM_REFERENCE' />
+ <param name='THERMO_ISOTHERM_REFERENCE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/R [...]
+ <param name='THERMO_ISOTHERM_REFERENCE_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+ <param name='THERMO_ISOTHERM_REFERENCE_THICKNESS' />
+ <param name='THERMO_ISOTHERM_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDI [...]
+ <param name='THERMO_ISOTHERM_LABEL_FONT_NAME' />
+ <param name='THERMO_ISOTHERM_LABEL_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
+ <param name='THERMO_ISOTHERM_LABEL_FONT_SIZE' />
+ <param name='THERMO_ISOTHERM_LABEL_FREQUENCY' />
+ <param name='THERMO_ISOBAR_GRID' values = 'ON/OFF' />
+ <param name='THERMO_ISOBAR_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
+ <param name='THERMO_ISOBAR_THICKNESS' />
+ <param name='THERMO_ISOBAR_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+ <param name='THERMO_ISOBAR_INTERVAL' />
+ <param name='THERMO_ISOBAR_REFERENCE' />
+ <param name='THERMO_ISOBAR_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
+ <param name='THERMO_ISOBAR_LABEL_FONT_NAME' />
+ <param name='THERMO_ISOBAR_LABEL_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
+ <param name='THERMO_ISOBAR_LABEL_FONT_SIZE' />
+ <param name='THERMO_ISOBAR_LABEL_FREQUENCY' />
+ <param name='THERMO_DRY_ADIABATIC_GRID' values = 'ON/OFF' />
+ <param name='THERMO_DRY_ADIABATIC_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDIS [...]
+ <param name='THERMO_DRY_ADIABATIC_THICKNESS' />
+ <param name='THERMO_DRY_ADIABATIC_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+ <param name='THERMO_DRY_ADIABATIC_INTERVAL' />
+ <param name='THERMO_DRY_ADIABATIC_REFERENCE' />
+ <param name='THERMO_DRY_ADIABATIC_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/ [...]
+ <param name='THERMO_DRY_ADIABATIC_LABEL_FONT_NAME' />
+ <param name='THERMO_DRY_ADIABATIC_LABEL_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
+ <param name='THERMO_DRY_ADIABATIC_LABEL_FONT_SIZE' />
+ <param name='THERMO_DRY_ADIABATIC_LABEL_FREQUENCY' />
+ <param name='THERMO_SATURATED_ADIABATIC_GRID' values = 'ON/OFF' />
+ <param name='THERMO_SATURATED_ADIABATIC_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/ [...]
+ <param name='THERMO_SATURATED_ADIABATIC_THICKNESS' />
+ <param name='THERMO_SATURATED_ADIABATIC_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+ <param name='THERMO_SATURATED_ADIABATIC_INTERVAL' />
+ <param name='THERMO_SATURATED_ADIABATIC_REFERENCE' />
+ <param name='THERMO_SATURATED_ADIABATIC_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANG [...]
+ <param name='THERMO_SATURATED_ADIABATIC_LABEL_FONT_NAME' />
+ <param name='THERMO_SATURATED_ADIABATIC_LABEL_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
+ <param name='THERMO_SATURATED_ADIABATIC_LABEL_FONT_SIZE' />
+ <param name='THERMO_SATURATED_ADIABATIC_LABEL_FREQUENCY' />
+ <param name='THERMO_MIXING_RATIO_GRID' values = 'ON/OFF' />
+ <param name='THERMO_MIXING_RATIO_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
+ <param name='THERMO_MIXING_RATIO_THICKNESS' />
+ <param name='THERMO_MIXING_RATIO_STYLE' values = 'SOLID/DASH/DOT/CHAIN_DOT/CHAIN_DASH' />
+ <param name='THERMO_MIXING_RATIO_FREQUENCY' />
+ <param name='THERMO_MIXING_RATIO_LABEL_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/R [...]
+ <param name='THERMO_MIXING_RATIO_LABEL_FONT_NAME' />
+ <param name='THERMO_MIXING_RATIO_LABEL_FONT_STYLE' values = 'NORMAL/BOLD/ITALIC/BOLDITALIC' />
+ <param name='THERMO_MIXING_RATIO_LABEL_FONT_SIZE' />
+ <param name='THERMO_MIXING_RATIO_LABEL_FREQUENCY' />
+</function>
<function name='mvert_prof'>
<param name='DATA' />
<param name='INPUT_MODE' values = 'POINT/NEAREST_GRIDPOINT/AREA/AREA_2' />
@@ -1334,16 +1389,19 @@
<param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
</function>
<function name='netcdf_visualiser'>
- <param name='NETCDF_PLOT_TYPE' values = 'GEO_POINTS/GEO_VECTORS/GEO_MATRIX/XY_POINTS/XY_MATRIX' />
+ <param name='NETCDF_PLOT_TYPE' values = 'GEO_POINTS/GEO_VECTORS/GEO_MATRIX/XY_POINTS/XY_VECTORS/XY_MATRIX' />
<param name='NETCDF_FILENAME' values = 'OFF' />
<param name='NETCDF_DATA' />
<param name='NETCDF_LATITUDE_VARIABLE' />
<param name='NETCDF_LONGITUDE_VARIABLE' />
<param name='NETCDF_X_VARIABLE' />
<param name='NETCDF_Y_VARIABLE' />
+ <param name='NETCDF_X_POSITION_VARIABLE' />
+ <param name='NETCDF_Y_POSITION_VARIABLE' />
<param name='NETCDF_X2_VARIABLE' />
<param name='NETCDF_Y2_VARIABLE' />
<param name='NETCDF_VALUE_VARIABLE' />
+ <param name='NETCDF_DIMENSION_SETTING_METHOD' values = 'INDEX/VALUE' />
<param name='NETCDF_DIMENSION_SETTING' />
<param name='NETCDF_X_COMPONENT_VARIABLE' />
<param name='NETCDF_Y_COMPONENT_VARIABLE' />
@@ -1755,10 +1813,6 @@
<param name='LEFT' />
<param name='RIGHT' />
</function>
-<function name='pm_bufr_tephi'>
-</function>
-<function name='pm_grib_tephi'>
-</function>
<function name='png_output'>
<param name='OUTPUT_TITLE' />
<param name='OUTPUT_WIDTH' />
@@ -1776,137 +1830,6 @@
<param name='OUTPUT_CAIRO_ANTIALIAS' />
<param name='CLASS' />
</function>
-<function name='pobs'>
- <param name='OBS_TYPE_LIST' values = 'SYNOP/AIREP/SATOB/DRIBU/TEMP/PILOT/SATEM/SOILT' />
- <param name='OBS_CODE_TYPE_LIST' values = 'LSD Synop land - S/LSD Synop record 2 land - S2/LSD Synop auto land - SA/LSD Synop auto record 2 land - SA2/SSD Synop ship abbreviated - SAB/SSD Synop ship - SS/SSD Synop record 2 ship -SS2/SSD Synop auto ship - SAS/SSD Synop auto record 2 ship - SAS2/VSNS Pilot land - P/VSNS Pilot ship - PS/VSNS Temp land - T/VSNS Temp ship - TS/VSNS Temp drop - TD/VSNS Rocob land - R/VSNS Rocob ship - RS/VSS High resolution - HR/VSS Satem mean temp - SMT/VSS [...]
- <param name='OBS_IDENTIFIER_LIST' />
- <param name='OBS_SATELLITE_NUMBER_LIST' values = '001 ERS-1 SCAT/002 ERS-2 SCAT/003 Meteosat 3/004 Meteosat 4/005 Meteosat 5/025 Meteosat 5 WV/045 Meteosat 5 VIS/055 Meteosat 5 WV EXP/031 Meteosat 5 IR/033 Meteosat 5 VIS/035 Meteosat 5 WV/040 Meteosat 5 HVIS/104 Himawari 4 IR/144 Himawari 4 VIS/105 Himawari 5 IR/125 Himawari 5 WV/145 Himawari 5 VIS/200 Goes/252 Goes 8 IR/253 Goes 9 IR/272 Goes 8 WV/273 Goes 9 WV/280 NSCAT/281 QuikSCAT/282 Goes 8 COMB/283 Goes 9 COMB/292 Goes 8 VIS/293 [...]
- <param name='OBS_CONFIDENCE_CHECK' values = 'ON/OFF' />
- <param name='OBS_CONFIDENCE_PARAMETER' values = 'ANY/DEWPOINT/HEIGHT/POSITION/PRESSURE/TEMPERATURE/WIND' />
- <param name='OBS_CONFIDENCE_LEVEL' />
- <param name='OBS_DATE_CHECK' values = 'ON/OFF' />
- <param name='OBS_DATE' />
- <param name='OBS_DATE_TOLERANCE' />
- <param name='OBS_TIME_CHECK' values = 'ON/OFF' />
- <param name='OBS_TIME' />
- <param name='OBS_TIME_TOLERANCE' />
- <param name='OBS_IDENTIFICATION' values = 'ON/OFF' />
- <param name='OBS_IDENTIFICATION_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
- <param name='OBS_IDENTIFICATION_TYPE' values = 'STATION_IDENTIFIER/CODE_TYPE/OBSERVATION_TYPE' />
- <param name='OBS_DISTANCE_APART' />
- <param name='OBS_SIZE' />
- <param name='OBS_QUALITY' values = 'LOW/MEDIUM/HIGH' />
- <param name='OBS_ROTATION' values = 'ON/OFF' />
- <param name='OBS_POSITION_ONLY' values = 'ON/OFF' />
- <param name='OBS_STATION_RING' values = 'ON/OFF' />
- <param name='OBS_STATION_RING_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
- <param name='OBS_WIND' values = 'ON/OFF' />
- <param name='OBS_WIND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RUS [...]
- <param name='OBS_WIND_FLAG_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
- <param name='OBS_WIND_FLAG_STYLE' values = 'SOLID/DASH/DOT' />
- <param name='OBS_PRESSURE' values = 'ON/OFF' />
- <param name='OBS_UPPER_AIR_PRESSURE' values = 'ON/OFF' />
- <param name='OBS_PRESSURE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
- <param name='OBS_TEMPERATURE' values = 'ON/OFF' />
- <param name='OBS_TEMPERATURE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORA [...]
- <param name='OBS_SEA_SURFACE_TEMPERATURE' values = 'ON/OFF' />
- <param name='OBS_SEA_SURFACE_TEMP_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDIS [...]
- <param name='OBS_PRESSURE_TENDENCY' values = 'ON/OFF' />
- <param name='OBS_PRESSURE_TENDENCY_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDI [...]
- <param name='OBS_PRESENT_WEATHER' values = 'ON/OFF' />
- <param name='OBS_PRESENT_WEATHER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH [...]
- <param name='OBS_PAST_WEATHER' values = 'ON/OFF' />
- <param name='OBS_PAST_WEATHER_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
- <param name='OBS_VISIBILITY' values = 'ON/OFF' />
- <param name='OBS_VISIBILITY_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
- <param name='OBS_DEWPOINT' values = 'ON/OFF' />
- <param name='OBS_DEWPOINT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE [...]
- <param name='OBS_TIME_PLOT' values = 'ON/OFF' />
- <param name='OBS_TIME_PLOT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
- <param name='OBS_CLOUD' values = 'ON/OFF' />
- <param name='OBS_CLOUD_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
- <param name='OBS_LOW_CLOUD' values = 'ON/OFF' />
- <param name='OBS_LOW_CLOUD_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
- <param name='OBS_MEDIUM_CLOUD' values = 'ON/OFF' />
- <param name='OBS_MEDIUM_CLOUD_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_OR [...]
- <param name='OBS_HIGH_CLOUD' values = 'ON/OFF' />
- <param name='OBS_HIGH_CLOUD_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
- <param name='OBS_CLOUD_8_GROUPS' values = 'ON/OFF' />
- <param name='OBS_CLOUD_8_GROUPS_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
- <param name='OBS_LEVEL' values = '1000/925/850/700/500/400/300/200/100/70/50/30/10' />
- <param name='OBS_LEVEL_2' values = '1000/925/850/700/500/400/300/200/100/70/50/30/10' />
- <param name='OBS_LEVEL_TOLERANCE' />
- <param name='OBS_THERMAL_WIND' values = 'ON/OFF' />
- <param name='OBS_THERMAL_WIND_LINE_STYLE' values = 'SOLID/DASH/DOT' />
- <param name='OBS_THETA' values = 'ON/OFF' />
- <param name='OBS_THETA_TYPE' values = 'RELATIVE_HUMIDITY/HUMIDITIY_MIXING_RATIO/POTENTIAL_TEMPERATURE/WATER_PRECIPITABLE/PSEUDO_POTENTIAL_TEMPERATURE/WET_BULB_POTENTIAL_TEMPERATURE' />
- <param name='OBS_THETA_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
- <param name='OBS_THICKNESS' values = 'ON/OFF' />
- <param name='OBS_THICKNESS_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANG [...]
- <param name='OBS_SATEM_TEMPERATURE' values = 'ON/OFF' />
- <param name='OBS_WATER_PRECIPITABLE' values = 'ON/OFF' />
- <param name='OBS_WATER_PRECIPITABLE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDD [...]
- <param name='OBS_SHIP_DIRECTION' values = 'ON/OFF' />
- <param name='OBS_SHIP_DIRECTION_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
- <param name='OBS_SHIP_SPEED' values = 'ON/OFF' />
- <param name='OBS_SHIP_SPEED_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORAN [...]
- <param name='OBS_WAVES' values = 'ON/OFF' />
- <param name='OBS_WAVES_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/RU [...]
- <param name='OBS_HEIGHT' values = 'ON/OFF' />
- <param name='OBS_HEIGHT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ORANGE/R [...]
- <param name='OBS_SOIL_TEMPERATURE_LEVEL_1' values = 'ON/OFF' />
- <param name='OBS_SOIL_TEMPERATURE_LEVEL_2' values = 'ON/OFF' />
- <param name='OBS_SOIL_TEMPERATURE_LEVEL_3' values = 'ON/OFF' />
- <param name='OBS_SOIL_TEMPERATURE_LEVEL_4' values = 'ON/OFF' />
- <param name='OBS_SOIL_TEMPERATURE_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDIS [...]
- <param name='OBS_STATION_HEIGHT' values = 'ON/OFF' />
- <param name='OBS_STATION_HEIGHT_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
- <param name='OBS_FB' values = 'OFF/3DVAR/4DVAR' />
- <param name='OBS_FB_LEGEND' values = 'ON/OFF' />
- <param name='OBS_FB_TYPE' values = 'REJECT_REPORT/REJECT_VARIABLES/FLAGGED_BUT_USED/USED/NOT_USED/BLACKLIST_REPORT/BLACKLIST_VARIABLES/ALL' />
- <param name='OBS_FB_STATION_RING_HEIGHT' />
- <param name='OBS_FB_MIN_ERROR_FLAG' values = '1/2/3' />
- <param name='OBS_FB_ERROR_FLAG0_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
- <param name='OBS_FB_ERROR_FLAG1_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
- <param name='OBS_FB_ERROR_FLAG2_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
- <param name='OBS_FB_ERROR_FLAG3_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
- <param name='OBS_FB_SOURCE' values = 'ON/OFF' />
- <param name='OBS_FB_SOURCE_TYPE' values = 'RDB/ML/FG/AN/DP/3D/4D/BL/ALL' />
- <param name='OBS_FB_LEVEL' values = '1000/925/850/700/500/400/300/200/100/70/50/30/10' />
- <param name='OBS_FB_LEVEL_2' values = '1000/925/850/700/500/400/300/200/100/70/50/30/10' />
- <param name='OBS_FB_LEVEL_TOLERANCE_ABOVE' />
- <param name='OBS_FB_LEVEL_TOLERANCE_BELOW' />
- <param name='OBS_FB_DEPARTURES' values = 'ON/OFF' />
- <param name='OBS_FB_DEPARTURES_TYPE' values = 'FG/AN/IA/OBS-FG/OBS-FG2/OBS-FG3/OBS-AN' />
- <param name='OBS_FB_SUBSTITUTES' values = 'ON/OFF' />
- <param name='OBS_FB_HEIGHT' values = 'ON/OFF' />
- <param name='OBS_FB_PRESSURE' values = 'ON/OFF' />
- <param name='OBS_FB_RELATIVE_HUMIDITY' values = 'ON/OFF' />
- <param name='OBS_FB_SPECIFIC_HUMIDITY' values = 'ON/OFF' />
- <param name='OBS_FB_TEMPERATURE' values = 'ON/OFF' />
- <param name='OBS_FB_WIND' values = 'ON/OFF' />
- <param name='OBS_FB_WIND_FLAG_LENGTH' />
- <param name='OBS_FB_RADIANCES' values = 'ON/OFF' />
- <param name='OBS_FB_RADIANCES_TYPE' values = '1DVAR/3DVAR/4DVAR' />
- <param name='OBS_FB_RADIANCES_CHANNEL_NUMBER' values = '1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27' />
- <param name='OBS_FB_RADIANCES_CHANNEL_PLOT' values = 'ON/OFF' />
- <param name='OBS_FB_RADIANCES_DEPARTURES' values = 'ON/OFF' />
- <param name='OBS_FB_RADIANCES_DEPARTURES_TYPE' values = 'OBS-FG/OBS-FG2/OBS-FG3/OBS-AN/ALL/BIAS/STDEV' />
- <param name='OBS_FB_SCATTEROMETER_WINDS' values = 'ON/OFF' />
- <param name='OBS_FB_SCAT_CLOSEST_TO' values = 'FG/AN' />
- <param name='OBS_FB_SCAT_AMBIGUITIES' values = '1/2/3/4' />
- <param name='OBS_FB_SCAT_THINNED_ONLY' values = 'ON/OFF' />
- <param name='OBS_FB_SCAT_SWEET_SPOTS_ONLY' values = 'ON/OFF' />
- <param name='OBS_FB_SCAT_ALT_COLORING' values = 'COLOURED/GREY' />
- <param name='OBS_FB_SCAT_REJECTION_LIST' values = 'RAIN/WSOL/WSPD/ICE' />
- <param name='OBS_FB_SSMI_WATER_PRECIPITABLE' values = 'ON/OFF' />
- <param name='OBS_FB_SSMI_LIQUID_WATER_PATH' values = 'ON/OFF' />
- <param name='OBS_FB_SSMI_TYPE' values = '1DVAR/REGRESSION' />
- <param name='OBS_FB_SSMI_WIND_STRENGTH' values = 'ON/OFF' />
- <param name='OBS_FB_SSMI_FAILURE_FLAG' values = 'ON/OFF' />
- <param name='OBS_BUFR_SECTION2_USE' values = 'ON/OFF' />
- <param name='OBS_TEXT' values = 'ON/OFF' />
-</function>
<function name='pott_m'>
<param name='LNSP' />
<param name='TEMPERATURE' />
@@ -1914,8 +1837,6 @@
<function name='pott_p'>
<param name='TEMPERATURE' />
</function>
-<function name='pre1995gribtephi'>
-</function>
<function name='ps_output'>
<param name='OUTPUT_TITLE' />
<param name='OUTPUT_WIDTH' />
@@ -2104,7 +2025,7 @@
<param name='MODEL' values = 'ANY/OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
<param name='LEVTYPE' values = 'ANY/POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
<param name='LEVELIST' values = 'ANY/TO/BY/OFF' />
- <param name='PARAM' values = 'ANY/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+ <param name='PARAM' values = 'ANY/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
<param name='DATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
<param name='VERIFY' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/OFF' />
<param name='REFDATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
@@ -2169,7 +2090,7 @@
<param name='MODEL' values = 'ANY/OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
<param name='LEVTYPE' values = 'ANY/POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
<param name='LEVELIST' values = 'ANY/TO/BY/OFF' />
- <param name='PARAM' values = 'ANY/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+ <param name='PARAM' values = 'ANY/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
<param name='DATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
<param name='VERIFY' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/OFF' />
<param name='REFDATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
@@ -2229,13 +2150,14 @@
<param name='CFSPATH' values = 'OFF' />
<param name='ORDER' values = 'AS IS/SORTED' />
<param name='CLASS' values = 'TIGGE/S2S/ANY' />
- <param name='STREAM' values = 'ENFO/DA/ANY' />
+ <param name='STREAM' values = 'ENFO/ENFH/DA/ANY' />
<param name='TYPE' values = 'ANY/CONTROL FORECAST/FORECAST/PERTURBED FORECAST/ALL' />
<param name='MODEL' values = 'ANY/GLOB/LAM' />
<param name='LEVTYPE' values = 'ANY/POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/ALL' />
<param name='LEVELIST' values = 'ANY/TO/BY/OFF' />
- <param name='PARAM' values = 'ANY/10 METER U VELOCITY/10 METER V VELOCITY/CONVECTIVE AVAILABLE POTENTIAL ENERGY/CONVECTIVE INHIBITION/GEOPOTENTIAL HEIGHT/LAND SEA MASK/MEAN SEA LEVEL PRESSURE/OROGRAPHY/POTENTIAL TEMPERATURE/POTENTIAL VORTICITY/SKIN TEMPERATURE/SNOW DEPTH WATER EQUIVALENT/SNOW FALL WATER EQUIVALENT/SOIL MOISTURE/SOIL TEMPERATURE/SPECIFIC HUMIDITY/SUNSHINE DURATION/SURFACE AIR DEW POINT TEMPERATURE/SURFACE AIR MAXIMUM TEMPERATURE/SURFACE AIR MINIMUM TEMPERATURE/SURFACE A [...]
+ <param name='PARAM' values = 'ANY/10 METER U VELOCITY/10 METER V VELOCITY/CONVECTIVE AVAILABLE POTENTIAL ENERGY/CONVECTIVE INHIBITION/GEOPOTENTIAL HEIGHT/LAND SEA MASK/LARGE SCALE PRECIPITATION/MEAN SEA LEVEL PRESSURE/OROGRAPHY/POTENTIAL TEMPERATURE/POTENTIAL VORTICITY/SKIN TEMPERATURE/SNOW DEPTH WATER EQUIVALENT/SNOW FALL WATER EQUIVALENT/SOIL MOISTURE/SOIL TEMPERATURE/SPECIFIC HUMIDITY/SUNSHINE DURATION/SURFACE AIR DEW POINT TEMPERATURE/SURFACE AIR MAXIMUM TEMPERATURE/SURFACE AIR MIN [...]
<param name='DATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
+ <param name='HDATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
<param name='TIME' values = 'ANY/TO/BY' />
<param name='STEP' values = 'ANY/TO/BY' />
<param name='ANOFFSET' values = 'ANY/TO/BY/OFF' />
@@ -2267,13 +2189,14 @@
<param name='CFSPATH' values = 'OFF' />
<param name='ORDER' values = 'AS IS/SORTED' />
<param name='CLASS' values = 'TIGGE/S2S/ANY' />
- <param name='STREAM' values = 'ENFO/DA/ANY' />
+ <param name='STREAM' values = 'ENFO/ENFH/DA/ANY' />
<param name='TYPE' values = 'ANY/CONTROL FORECAST/FORECAST/PERTURBED FORECAST/ALL' />
<param name='MODEL' values = 'ANY/GLOB/LAM' />
<param name='LEVTYPE' values = 'ANY/POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/ALL' />
<param name='LEVELIST' values = 'ANY/TO/BY/OFF' />
- <param name='PARAM' values = 'ANY/10 METER U VELOCITY/10 METER V VELOCITY/CONVECTIVE AVAILABLE POTENTIAL ENERGY/CONVECTIVE INHIBITION/GEOPOTENTIAL HEIGHT/LAND SEA MASK/MEAN SEA LEVEL PRESSURE/OROGRAPHY/POTENTIAL TEMPERATURE/POTENTIAL VORTICITY/SKIN TEMPERATURE/SNOW DEPTH WATER EQUIVALENT/SNOW FALL WATER EQUIVALENT/SOIL MOISTURE/SOIL TEMPERATURE/SPECIFIC HUMIDITY/SUNSHINE DURATION/SURFACE AIR DEW POINT TEMPERATURE/SURFACE AIR MAXIMUM TEMPERATURE/SURFACE AIR MINIMUM TEMPERATURE/SURFACE A [...]
+ <param name='PARAM' values = 'ANY/10 METER U VELOCITY/10 METER V VELOCITY/CONVECTIVE AVAILABLE POTENTIAL ENERGY/CONVECTIVE INHIBITION/GEOPOTENTIAL HEIGHT/LAND SEA MASK/LARGE SCALE PRECIPITATION/MEAN SEA LEVEL PRESSURE/OROGRAPHY/POTENTIAL TEMPERATURE/POTENTIAL VORTICITY/SKIN TEMPERATURE/SNOW DEPTH WATER EQUIVALENT/SNOW FALL WATER EQUIVALENT/SOIL MOISTURE/SOIL TEMPERATURE/SPECIFIC HUMIDITY/SUNSHINE DURATION/SURFACE AIR DEW POINT TEMPERATURE/SURFACE AIR MAXIMUM TEMPERATURE/SURFACE AIR MIN [...]
<param name='DATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
+ <param name='HDATE' values = 'ANY/JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
<param name='TIME' values = 'ANY/TO/BY' />
<param name='STEP' values = 'ANY/TO/BY' />
<param name='ANOFFSET' values = 'ANY/TO/BY/OFF' />
@@ -2318,12 +2241,12 @@
<param name='MODEL' values = 'OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
<param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL' />
<param name='OBSGROUP' values = 'SAT/ERS1/TRMM/QSCAT/REO3/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/99/OFF' />
- <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
+ <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
<param name='RDBPREFIX' values = 'OFF' />
- <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/SMOS/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AUTO LAND/S [...]
+ <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/SMOS/AMSR2_GC/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AU [...]
<param name='LEVTYPE' values = 'POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
<param name='LEVELIST' values = 'TO/BY/ALL/OFF' />
- <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+ <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
<param name='YEAR' values = 'TO/BY/ALL' />
<param name='DECADE' values = 'TO/BY/ALL' />
<param name='MONTH' values = 'TO/BY/ALL' />
@@ -2404,12 +2327,12 @@
<param name='MODEL' values = 'OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
<param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL' />
<param name='OBSGROUP' values = 'SAT/ERS1/TRMM/QSCAT/REO3/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/99/OFF' />
- <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
+ <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
<param name='RDBPREFIX' values = 'OFF' />
- <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/SMOS/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AUTO LAND/S [...]
+ <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/SMOS/AMSR2_GC/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AU [...]
<param name='LEVTYPE' values = 'POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
<param name='LEVELIST' values = 'TO/BY/ALL/OFF' />
- <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+ <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
<param name='YEAR' values = 'TO/BY/ALL' />
<param name='DECADE' values = 'TO/BY/ALL' />
<param name='MONTH' values = 'TO/BY/ALL' />
@@ -2485,16 +2408,17 @@
<param name='DATASET' />
<param name='CLASS' values = 'TIGGE/S2S' />
<param name='TYPE' values = 'CONTROL FORECAST/FORECAST/PERTURBED FORECAST/ALL' />
- <param name='STREAM' values = 'ENFO/DA' />
+ <param name='STREAM' values = 'ENFO/ENFH/DA' />
<param name='EXPVER' values = 'PROD/TEST/ALL' />
<param name='MODEL' values = 'GLOB/LAM/OFF' />
<param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL' />
<param name='LEVTYPE' values = 'POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/ALL' />
<param name='LEVELIST' values = 'TO/BY/ALL/OFF' />
- <param name='PARAM' values = 'ALL/10 METER U VELOCITY/10 METER V VELOCITY/CONVECTIVE AVAILABLE POTENTIAL ENERGY/CONVECTIVE INHIBITION/GEOPOTENTIAL HEIGHT/LAND SEA MASK/MEAN SEA LEVEL PRESSURE/OROGRAPHY/POTENTIAL TEMPERATURE/POTENTIAL VORTICITY/SKIN TEMPERATURE/SNOW DEPTH WATER EQUIVALENT/SNOW FALL WATER EQUIVALENT/SOIL MOISTURE/SOIL TEMPERATURE/SPECIFIC HUMIDITY/SUNSHINE DURATION/SURFACE AIR DEW POINT TEMPERATURE/SURFACE AIR MAXIMUM TEMPERATURE/SURFACE AIR MINIMUM TEMPERATURE/SURFACE A [...]
+ <param name='PARAM' values = 'ALL/10 METER U VELOCITY/10 METER V VELOCITY/CONVECTIVE AVAILABLE POTENTIAL ENERGY/CONVECTIVE INHIBITION/GEOPOTENTIAL HEIGHT/LAND SEA MASK/LARGE SCALE PRECIPITATION/MEAN SEA LEVEL PRESSURE/OROGRAPHY/POTENTIAL TEMPERATURE/POTENTIAL VORTICITY/SKIN TEMPERATURE/SNOW DEPTH WATER EQUIVALENT/SNOW FALL WATER EQUIVALENT/SOIL MOISTURE/SOIL TEMPERATURE/SPECIFIC HUMIDITY/SUNSHINE DURATION/SURFACE AIR DEW POINT TEMPERATURE/SURFACE AIR MAXIMUM TEMPERATURE/SURFACE AIR MIN [...]
<param name='YEAR' values = 'TO/BY/ALL' />
<param name='MONTH' values = 'TO/BY/ALL' />
<param name='DATE' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
+ <param name='HDATE' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/ALL/OFF' />
<param name='TIME' values = 'TO/BY/ALL/12' />
<param name='STEP' values = 'ALL/TO/BY' />
<param name='ANOFFSET' values = 'ALL/TO/BY/OFF' />
@@ -2541,12 +2465,12 @@
<param name='MODEL' values = 'OFF/ECMF/EDZW/EGRR/LFPW/KWBC/NONE/HRM/LM/IFS/GLOBAL' />
<param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL' />
<param name='OBSGROUP' values = 'SAT/ERS1/TRMM/QSCAT/REO3/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/99/OFF' />
- <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
+ <param name='REPORTYPE' values = 'TIROS-N HIRS Radiances/NOAA 6 HIRS Radiances/NOAA 7 HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 12 HIRS Radiances/NOAA 14 HIRS Radiances/NOAA 15 HIRS Radiances/NOAA 16 HIRS Radiances/NOAA 17 HIRS Radiances/NOAA 18 HIRS Radiances/NOAA 19 HIRS Radiances/METOP-A HIRS Radiances/NOAA 8 HIRS Radiances/NOAA 9 HIRS Radiances/NOAA 10 HIRS Radiances/NOAA 11 HIRS Radiances/NOAA 6 HIRS Radiances/NOA [...]
<param name='RDBPREFIX' values = 'OFF' />
- <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/SMOS/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AUTO LAND/S [...]
+ <param name='OBSTYPE' values = 'ALL/NON SATELLITE DATA ALL/SATELLITE DATA ALL/ALL/CONVENTIONAL/SD/GRIB IMAGES/FIRST INFRARED BAND/SECOND INFRARED BAND/FIRST VISIBLE BAND/WATER VAPOR BAND/BUFR/WAVESCAT/SCAT/RALT/TOVH/GRAD/ATOV/AIRS/STORM/IMSSNOW/AMSU_EARS/BALTIC_CI/WAVESAR/IASI/OSTIA/ENVISAT_MERIS/ATMS/CRIS/SMOS/AMSR2_GC/FBCONV/FBSCAT/FBSSMI/FBTMI/FBTOVS/FBRAD1C/FBGEOS/FBTRMR/FBREO3/FBAIRS/FBAMSRE/FBSSMIS/FBGPSRO/FBIASI/FBWINDSAT/LAND SURFACE DATA/SYNOP LAND/SYNOP RECORD 2 LAND/SYNOP AU [...]
<param name='LEVTYPE' values = 'POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/DEPTH/OCEAN WAVE/LAYER/CATEGORY/ALL' />
<param name='LEVELIST' values = 'TO/BY/ALL/OFF' />
- <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
+ <param name='PARAM' values = 'ALL/20 DEGREES ISOTHERM DEPTH/ACCUMULATED CLOUD FRACTION TENDENCY/ACCUMULATED ICE WATER TENDENCY/ACCUMULATED LIQUID WATER TENDENCY/ACCUMULATED CARBON DIOXIDE NET ECOSYSTEM EXCHANGE/ACCUMULATED CARBON DIOXIDE GROSS PRIMARY PRODUCTION/ACCUMULATED CARBON DIOXIDE ECOSYSTEM RESPIRATION/ADIABATIC TENDENCY OF HUMIDITY/ADIABATIC TENDENCY OF HUMIDITY - ECMWF/ADIABATIC TENDENCY OF MERIDIONAL WIND/ADIABATIC TENDENCY OF MERIDIONAL WIND - ASTEX/ADIABATIC TENDENCY OF TE [...]
<param name='YEAR' values = 'TO/BY/ALL' />
<param name='DECADE' values = 'TO/BY/ALL' />
<param name='MONTH' values = 'TO/BY/ALL' />
@@ -2622,16 +2546,17 @@
<param name='DATASET' />
<param name='CLASS' values = 'TIGGE/S2S' />
<param name='TYPE' values = 'CONTROL FORECAST/FORECAST/PERTURBED FORECAST/ALL' />
- <param name='STREAM' values = 'ENFO/DA' />
+ <param name='STREAM' values = 'ENFO/ENFH/DA' />
<param name='EXPVER' values = 'PROD/TEST/ALL' />
<param name='MODEL' values = 'GLOB/LAM/OFF' />
<param name='REPRES' values = 'BUFR/SPHERICAL HARMONICS/LAT LONG GRID/GAUSSIAN GRID/SPACE VIEW/OCEAN GRID/ALL' />
<param name='LEVTYPE' values = 'POTENTIAL VORTICITY/POTENTIAL TEMPERATURE/SURFACE/PRESSURE LEVELS/MODEL LEVELS/ALL' />
<param name='LEVELIST' values = 'TO/BY/ALL/OFF' />
- <param name='PARAM' values = 'ALL/10 METER U VELOCITY/10 METER V VELOCITY/CONVECTIVE AVAILABLE POTENTIAL ENERGY/CONVECTIVE INHIBITION/GEOPOTENTIAL HEIGHT/LAND SEA MASK/MEAN SEA LEVEL PRESSURE/OROGRAPHY/POTENTIAL TEMPERATURE/POTENTIAL VORTICITY/SKIN TEMPERATURE/SNOW DEPTH WATER EQUIVALENT/SNOW FALL WATER EQUIVALENT/SOIL MOISTURE/SOIL TEMPERATURE/SPECIFIC HUMIDITY/SUNSHINE DURATION/SURFACE AIR DEW POINT TEMPERATURE/SURFACE AIR MAXIMUM TEMPERATURE/SURFACE AIR MINIMUM TEMPERATURE/SURFACE A [...]
+ <param name='PARAM' values = 'ALL/10 METER U VELOCITY/10 METER V VELOCITY/CONVECTIVE AVAILABLE POTENTIAL ENERGY/CONVECTIVE INHIBITION/GEOPOTENTIAL HEIGHT/LAND SEA MASK/LARGE SCALE PRECIPITATION/MEAN SEA LEVEL PRESSURE/OROGRAPHY/POTENTIAL TEMPERATURE/POTENTIAL VORTICITY/SKIN TEMPERATURE/SNOW DEPTH WATER EQUIVALENT/SNOW FALL WATER EQUIVALENT/SOIL MOISTURE/SOIL TEMPERATURE/SPECIFIC HUMIDITY/SUNSHINE DURATION/SURFACE AIR DEW POINT TEMPERATURE/SURFACE AIR MAXIMUM TEMPERATURE/SURFACE AIR MIN [...]
<param name='YEAR' values = 'TO/BY/ALL' />
<param name='MONTH' values = 'TO/BY/ALL' />
<param name='DATE' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF' />
+ <param name='HDATE' values = 'JANUARY/FEBRUARY/MARCH/APRIL/MAY/JUNE/JULY/AUGUST/SEPTEMBER/OCTOBER/NOVEMBER/DECEMBER/CURRENT DATE/YESTERDAY/TO/BY/OFF/ALL/OFF' />
<param name='TIME' values = 'TO/BY/ALL/12' />
<param name='STEP' values = 'ALL/TO/BY' />
<param name='ANOFFSET' values = 'ALL/TO/BY/OFF' />
@@ -2744,6 +2669,25 @@
<param name='direction' values = 'max_on_left/max_on_right' />
<param name='exclusive' values = 'true' />
</function>
+<function name='spec_contour'>
+ <param name='DATA' />
+ <param name='DIURNAL_CYCLE' values = 'YES/NO' />
+ <param name='TRUNCATION' />
+ <param name='TITLE' />
+ <param name='VERTICAL_AXIS' />
+ <param name='NL24INT' values = 'YES/NO' />
+ <param name='HILORAD' />
+</function>
+<function name='spec_graph'>
+ <param name='DATA' />
+ <param name='DIURNAL_CYCLE' values = 'YES/NO' />
+ <param name='TRUNCATION' />
+ <param name='TITLE' />
+ <param name='VERTICAL_AXIS' />
+ <param name='HORIZONTAL_AXIS' />
+ <param name='SMOOTHING' values = 'YES/NO' />
+ <param name='TENSION' values = 'SPLINE' />
+</function>
<function name='stations'>
<param name='STATION_TYPE' values = 'WMO_STATION/EPS_STATION/LOCATION/NOT_USED' />
<param name='SEARCH_STATIONS_DATABASE' values = 'YES - WMO_STATION/NO - LOCATION' />
@@ -2810,6 +2754,15 @@
<param name='TABLE_DATA_ROW_OFFSET' />
<param name='TABLE_META_DATA_ROWS' />
</function>
+<function name='thermo_bufr'>
+ <param name='DATA_TYPE' values = 'GRIB_THERMO/ODB_THERMO/BUFR_THERMO' />
+</function>
+<function name='thermo_grib'>
+ <param name='DATA_TYPE' values = 'GRIB_THERMO/ODB_THERMO/BUFR_THERMO' />
+</function>
+<function name='thermo_odb'>
+ <param name='DATA_TYPE' values = 'GRIB_THERMO/ODB_THERMO/BUFR_THERMO' />
+</function>
<function name='toggle'>
<param name='name' />
<param name='exclusive' values = 'true' />
@@ -2843,6 +2796,26 @@
<param name='FLTC' />
<param name='MFLTEXP' />
</function>
+<function name='vapor_prepare'>
+ <param name='VAPOR_INPUT_MODE' values = 'ICON' />
+ <param name='VAPOR_INPUT_DATA' />
+ <param name='VAPOR_INPUT_PATH' />
+ <param name='VAPOR_INPUT_NAME_PATTERN' />
+ <param name='VAPOR_2D_PARAMS' />
+ <param name='VAPOR_3D_PARAMS' />
+ <param name='VAPOR_VERTICAL_GRID_TYPE' values = 'REGULAR/LAYERED' />
+ <param name='VAPOR_ELEVATION_PARAM' />
+ <param name='VAPOR_BOTTOM_COORDINATE' />
+ <param name='VAPOR_TOP_COORDINATE' />
+ <param name='VAPOR_AREA_SELECTION' values = 'NATIVE/INTERPOLATE' />
+ <param name='VAPOR_AREA' />
+ <param name='VAPOR_GRID' />
+ <param name='VAPOR_STEP_NUMBER' />
+ <param name='VAPOR_REFINEMENT_LEVEL' values = '0/1/2/3/4' />
+ <param name='VAPOR_VDF_NAME' />
+ <param name='VAPOR_OUTPUT_PATH' />
+ <param name='VAPOR_REUSE_VDF' values = 'ON/OFF' />
+</function>
<function name='velpot'>
<param name='DATA' />
<param name='TRUNCATION' values = 'AV' />
@@ -2893,6 +2866,19 @@
<param name='SUBPAGE_FRAME_THICKNESS' values = '1/2/3/4/5/6/7/8/9/10' />
<param name='SUBPAGE_BACKGROUND_COLOUR' values = 'BACKGROUND/BLACK/CHARCOAL/GREY/WHITE/PINK/PURPLISH_RED/BURGUNDY/ROSE/PURPLE_RED/REDDISH_PURPLE/MAGENTA/PURPLE/BLUISH_PURPLE/VIOLET/BLUE_PURPLE/LAVENDER/PURPLISH_BLUE/BLUE/NAVY/SKY/GREENISH_BLUE/BLUE_GREEN/CYAN/TURQUOISE/EVERGREEN/BLUISH_GREEN/KELLY_GREEN/GREEN/YELLOWISH_GREEN/YELLOW_GREEN/AVOCADO/OLIVE/GREENISH_YELLOW/YELLOW/ORANGISH_YELLOW/ORANGE_YELLOW/GOLD/YELLOWISH_ORANGE/CREAM/MUSTARD/BEIGE/KHAKI/TAN/OCHRE/ORANGE/TANGERINE/REDDISH_ [...]
</function>
+<function name='wcsclient'>
+ <param name='MODE' values = 'EXPERT/INTERACTIVE' />
+ <param name='SERVER' />
+ <param name='VERSION' />
+ <param name='REQUEST' />
+ <param name='EXTRA_GETCAP_PAR' />
+ <param name='EXTRA_GETMAP_PAR' />
+ <param name='HTTP_USER' />
+ <param name='HTTP_PASSWORD' />
+ <param name='LAYER_DESCRIPTION' />
+ <param name='SERVICE_TITLE' />
+ <param name='TIME_DIMENSIONS' />
+</function>
<function name='webaccess'>
<param name='URL' />
</function>
diff --git a/share/metview/etc/mars.chk b/share/metview/etc/mars.chk
index 7a09ed9..4a5f5c8 100755
--- a/share/metview/etc/mars.chk
+++ b/share/metview/etc/mars.chk
@@ -123,7 +123,9 @@
%if GRID=O %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
%if GRID=AV %and (_APPL = mars %or _APPL = marsG2 %or _APPL = msserver %or _APPL = uniserver) %then %unset GRID
-%if (RESOL=AUTO %or RESOL=AV) %and (%not GRID) %then %unset RESOL
+# READ can have RESOL=AUTO and GRID=ANY
+%if (RESOL=AUTO %or RESOL=AV) %and ((%not GRID) %or (GRID = ANY)) %then %unset RESOL
+
%if (STYLE = DISSEMINATION) %and (RESOL=AUTO %or (%not RESOL)) %then
%warning "Force RESOL=AV when STYLE=DISSEMINATION"
%set RESOL=AV
@@ -153,6 +155,8 @@
%if USE = STAGE %then %set TARGET="/dev/null" %unset FIELDSET %set EXPECT=0
%if COSTONLY = N %then %unset COSTONLY
+%if (CLASS = EI) %and (GRID = 128 %or GRID=0.75) %then
+ %warning "For full resolution grid, it is recommended to use RESOL=AV to prevent any truncation before transformation"
!
@@ -233,6 +237,7 @@
TYPE <> FCSTDEV %and
TYPE <> SVAR %and
CLASS <> TI %and
+ CLASS <> S2 %and
STREAM <> MOFC %and
STREAM <> WAMF %and
STREAM <> MOFM %and
@@ -570,6 +575,7 @@
%and (CLASS<>E4 %and
CLASS<>EI %and
CLASS<>TI %and
+ CLASS<>S2 %and
CLASS<>ER %and
CLASS<>PV %and
CLASS<>DM %and
@@ -733,10 +739,10 @@
# %unset STEP
#
-%if CLASS = TI %or CLASS = S2 %then %unset DOMAIN
-%if CLASS = TI %and TYPE = CF %then %set NUMBER=0
+%if (CLASS = TI %or CLASS = S2) %then %unset DOMAIN
+%if (CLASS = TI %or CLASS = S2) %and TYPE = CF %then %set NUMBER=0
%if CLASS = TI %and TYPE = FC %then %set STREAM=OPER
-%if CLASS = TI %and (%not EXPVER) %then %set EXPVER=PROD
+%if (CLASS = TI %or CLASS = S2) %and (%not EXPVER) %then %set EXPVER=PROD
%if CLASS = DM %and TYPE = FC %then %set TIME=0
diff --git a/share/metview/etc/ms_mars.cfg b/share/metview/etc/ms_mars.cfg
new file mode 100644
index 0000000..47c3e5c
--- /dev/null
+++ b/share/metview/etc/ms_mars.cfg
@@ -0,0 +1,26 @@
+#
+# Definition of the data bases
+#
+
+database,
+ class = netbase,
+# Most of the names are aliases, so ECMWF database setup will work at Member States sites
+ name = msproxy/marsod/marsode/marsrd/marser/marsms/marsth/ecmars,
+ ecaccess = 1,
+# These override environment variables
+# eccertport = 443,
+# ecaccesshome = "/home/ma/max/ecaccess", # where your ecaccess software is installed
+# echost = "ecaccess.ecmwf.int", # your ecaccess gateway
+ host = ecmars # Not used, only for debug
+
+
+# This one allows to retrieve data from a file, specifying
+# retrieve,source="my file",database=file
+database,
+ class = flatfilebase,
+ name = file,
+ visit = false,
+ port = 0,
+ host = notused,
+ obs = 1
+
diff --git a/share/metview/etc/ms_mars.cfg.INFO b/share/metview/etc/ms_mars.cfg.INFO
new file mode 100644
index 0000000..9ee518c
--- /dev/null
+++ b/share/metview/etc/ms_mars.cfg.INFO
@@ -0,0 +1,12 @@
+ 061030/vk
+
+ 'ms_mars.cfg' is a link to a MARS configuration file for
+ remote MARS access. The file available in Perforce depo:
+
+ //depot/mars/client/export/msmars/etc/mars.cfg
+
+ This file is needed only for Metview Export version, to
+ allow Member State installers configure and build Metview
+ with remote MARS access.
+
+ This file/link is not needed/used at all at ECMWF.
diff --git a/share/metview/etc/reportypes.def b/share/metview/etc/reportypes.def
index 29bafa3..56369e4 100755
--- a/share/metview/etc/reportypes.def
+++ b/share/metview/etc/reportypes.def
@@ -116,6 +116,7 @@ METEOSAT 10 SEVIRI O3 ; 5058
NPP OMPS TCO ; 5059
NPP OMPS Nadir Profile ; 5060
METOP-B GOME-2 Layer integrated mass density ; 5061
+METOP-B GOME-2 MACC O3 ; 5062
ENVISAT MERIS TCWV ; 6001
METOP-A GPSRO ; 7001
CHAMP GPSRO ; 7002
@@ -291,26 +292,26 @@ NOAA 11 MSU Radiances ; 30012
NOAA 6 MSU Radiances ; 30013
NOAA 7 MSU Radiances ; 30014
TIROS-N MSU Radiances ; 30015
-NOAA 14 MSU Radiances ; 30016
+NOAA 14 MSU TOVS1B Radiances ; 30016
TIROS-N SSU Radiances ; 31001
NOAA 6 SSU Radiances ; 31002
-NOAA 7 MSU Radiances ; 31003
+NOAA 7 SSU Radiances ; 31003
NOAA 8 SSU Radiances ; 31004
NOAA 9 SSU Radiances ; 31005
-NOAA 11 MSU Radiances ; 31006
+NOAA 11 SSU Radiances ; 31006
NOAA 12 SSU Radiances ; 31007
NOAA 14 SSU Radiances ; 31008
NOAA 8 SSU Radiances ; 31009
NOAA 9 SSU Radiances ; 31010
NOAA 11 SSU Radiances ; 31011
NOAA 6 SSU Radiances ; 31012
-NOAA 7 MSU Radiances ; 31013
+NOAA 7 SSU Radiances ; 31013
TIROS-N SSU Radiances ; 31014
-NOAA 14 SSU Radiances ; 31015
+NOAA 14 SSU TOVS1B Radiances ; 31015
NOAA 2 VTPR1 Radiances ; 32001
NOAA 3 VTPR1 Radiances ; 32002
NOAA 4 VTPR1 Radiances ; 32003
-NOAA 2 VTPR1 Radiances ; 32004
+NOAA 5 VTPR1 Radiances ; 32004
NOAA 2 VTPR2 Radiances ; 33001
NOAA 3 VTPR2 Radiances ; 33002
NOAA 4 VTPR2 Radiances ; 33003
diff --git a/share/metview/etc/rt_by_obsgroup.chk b/share/metview/etc/rt_by_obsgroup.chk
index c28f8c6..afebb81 100755
--- a/share/metview/etc/rt_by_obsgroup.chk
+++ b/share/metview/etc/rt_by_obsgroup.chk
@@ -14,7 +14,7 @@
%set REPORTYPE = 4002/4003/4004/4005/4006/4007/4008/4009/4010/4011/4012/4013/4014/4015/4016/4017
%if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP = RESAT ) %and %not REPORTYPE %then
- %set REPORTYPE = 5001/5002/5003/5004/5005/5006/5007/5008/5009/5010/5011/5012/5013/5014/5015/5016/5017/5018/5019/5020/5021/5022/5023/5024/5025/5026/5027/5028/5029/5030/5031/5032/5033/5034/5035/5036/5037/5038/5039/5040/5041/5042/5043/5044/5045/5046/5047/5048/5049/5050/5051/5052/5053/5054/5055/5056/5057/5058/5059/5060/5061
+ %set REPORTYPE = 5001/5002/5003/5004/5005/5006/5007/5008/5009/5010/5011/5012/5013/5014/5015/5016/5017/5018/5019/5020/5021/5022/5023/5024/5025/5026/5027/5028/5029/5030/5031/5032/5033/5034/5035/5036/5037/5038/5039/5040/5041/5042/5043/5044/5045/5046/5047/5048/5049/5050/5051/5052/5053/5054/5055/5056/5057/5058/5059/5060/5061/5062
%if (TYPE = OFB %or TYPE = MFB) %and (OBSGROUP = MERIS ) %and %not REPORTYPE %then
%set REPORTYPE = 6001
diff --git a/share/metview/etc/tigge.def b/share/metview/etc/tigge.def
index 7d45f6e..7e728ed 100755
--- a/share/metview/etc/tigge.def
+++ b/share/metview/etc/tigge.def
@@ -59,6 +59,7 @@ CONVECTIVE AVAILABLE POTENTIAL ENERGY ; CAPE ; 59
CONVECTIVE INHIBITION ; CIN ; 228001
GEOPOTENTIAL HEIGHT ; GH ; 156
LAND SEA MASK ; LSM ; 172
+LARGE SCALE PRECIPITATION ; LSP ; 3062
MEAN SEA LEVEL PRESSURE ; MSL ; 151
OROGRAPHY ; OROG ; 228002
POTENTIAL TEMPERATURE ; PT ; 3
@@ -86,6 +87,27 @@ TOTAL COLUMN WATER ; TCW ; 136
TOTAL PRECIPITATION ; TP ; 228228
U VELOCITY ; U ; 131
V VELOCITY ; V ; 132
+WIND GUST AT 10 METRES IN THE LAST 3 HOURS ; 10FG3 ; 228028
+
+# Additions for S2S
+
+VERTICAL VELOCITY ; W ; 135
+CONVECTIVE PRECIPITATION ; CP ; 228143
+NORTHWARD TURBULENT SURFACE STRESS ; NSSS ; 181
+EASTWARD TURBULENT SURFACE STRESS ; EWSS ; 180
+WATER RUNFOFF AND DRAINAGE ; RO ; 228205
+SURFACE WATER RUNOFF ; SRO ; 8
+SNOW DENSITY ; RSN ; 33
+SEA SURFACE TEMPERATURE ; SSTK ; 34
+SEA ICE COVER ; CI ; 31
+SOIL MOISTURE TOP 20CM ; SM20 ; 228086
+SOIL MOISTURE TOP 100CM ; SM100 ; 228087
+SOIL TEMPERATURE TOP 20CM ; ST20 ; 228095
+SOIL TEMPERATURE TOP 100CM ; ST100 ; 228096
+SOIL TYPE ; SLT ; 43
+SNOW ALBEDO ; ASN ; 228032
+TIME INTEGRATED SURFACE NET SOLAR RADIATION DOWNWARDS ; SSRD ; 169
+TIME INTEGRATED SURFACE NET THERMAL RADIATION DOWNWARDS ; STRD ; 175
*
/
@@ -109,6 +131,7 @@ V VELOCITY ; V ; 132
STREAM
{
ENFO
+ ENFH
DA ; OPER
} = ENFO
@@ -325,6 +348,12 @@ ARCHIVE ; Archives data ; TIGGE
&TIGGEDEF&DATE
} = CURRENT DATE
+ HDATE
+ {
+ &TIGGEDEF&DATE
+ ALL
+ } = OFF
+
TIME
{
*
@@ -520,6 +549,12 @@ LIST ; LIST FDF ENTRIES AND CFS FILES ; TIGGE
ALL
}
+ HDATE
+ {
+ &TIGGEDEF&DATE
+ ALL
+ }
+
MONTH
{
@@ -849,6 +884,11 @@ STAGE ; STAGE FIELDS ; MARS
&TIGGEDEF&DATE
} = CURRENT DATE
+ HDATE
+ {
+ &TIGGEDEF&DATE
+ } = CURRENT DATE
+
TIME
{
*
@@ -1285,6 +1325,17 @@ RETRIEVE ; Retrieval of data ; TIGGE
&TIGGEDEF&DATE
} = YESTERDAY
+ HDATE [ java_control = CHOICE_TEXT_2,
+ java_section = DATE,
+ marsdoc = date/all,
+ mars_interface = text,
+ java_hidden = FALSE ]
+ {
+ &TIGGEDEF&DATE
+ ALL
+ OFF ; OFF
+ } = OFF
+
TIME [ java_control = CHOICE_TEXT_2,
java_section = DATE,
marsdoc = date/all,
@@ -1847,6 +1898,12 @@ READ ; X; TIGGEMETVIEW
&TIGGEDEF&DATE
} = ANY
+ HDATE
+ {
+ ANY ; ANY
+ &TIGGEDEF&DATE
+ } = ANY
+
TIME
{
ANY
diff --git a/share/metview/etc/uPlotTable b/share/metview/etc/uPlotTable
index 25e6244..120386e 100644
--- a/share/metview/etc/uPlotTable
+++ b/share/metview/etc/uPlotTable
@@ -55,39 +55,53 @@ request,
view = GeoView
request,
- class = NETCDF_GEO_POINTS,
- action = Create,
- builder = DataBuilder,
- decoder = SimpleDecoder,
- view = GeoView
+ class = NETCDF_GEO_POINTS,
+ action = Create,
+ builder = DataBuilder,
+ decoder = SimpleDecoder,
+ view = GeoView
request,
- class = NETCDF_GEO_VECTORS,
- action = Create,
- builder = DataBuilder,
- decoder = SimpleDecoder,
- view = GeoView
+ class = NETCDF_GEO_VECTORS,
+ action = Create,
+ builder = DataBuilder,
+ decoder = SimpleDecoder,
+ view = GeoView
request,
- class = NETCDF_GEO_MATRIX,
- action = Create,
- builder = DataBuilder,
- decoder = SimpleDecoder,
- view = GeoView
+ class = NETCDF_GEO_MATRIX,
+ action = Create,
+ builder = DataBuilder,
+ decoder = SimpleDecoder,
+ view = GeoView
request,
- class = NETCDF_XY_MATRIX,
- action = Create,
- builder = DataBuilder,
- decoder = SimpleDecoder,
- view = CartesianView
+ class = NETCDF_XY_MATRIX,
+ action = Create,
+ builder = DataBuilder,
+ decoder = SimpleDecoder,
+ view = CartesianView
+
+request,
+ class = NETCDF_XY_VECTORS,
+ action = Create,
+ builder = DataBuilder,
+ decoder = SimpleDecoder,
+ view = CartesianView
+
+request,
+ class = NETCDF_XY_POINTS,
+ action = Create,
+ builder = DataBuilder,
+ decoder = SimpleDecoder,
+ view = CartesianView
request,
- class = NETCDF_XY_POINTS,
- action = Create,
- builder = DataBuilder,
- decoder = SimpleDecoder,
- view = CartesianView
+ class = NETCDF,
+ action = Create,
+ builder = DataBuilder,
+ decoder = SimpleDecoder,
+ view = CartesianView
request,
class = ODB_DB,
@@ -367,6 +381,11 @@ view,
name = HovmoellerView,
service = Hovmoeller
+view,
+ class = THERMOVIEW,
+ name = ThermoView,
+ service = Thermo
+
# Metview 3 Views for backawards compatibility
# They should be deleted in the future
view,
@@ -394,121 +413,131 @@ view,
#############################################
dataunit,
- class = GRIB,
- defaultVisDef = MCONT/MWIND,
- 1D_VISDEF = MCONT/PCONT,
- 2D_VISDEF = MWIND/PWIND,
- listVisDef = MCONT/MWIND/PWIND/PCONT
+ class = GRIB,
+ defaultVisDef = MCONT/MWIND,
+ 1D_VISDEF = MCONT/PCONT,
+ 2D_VISDEF = MWIND/PWIND,
+ listVisDef = MCONT/MWIND/PWIND/PCONT
dataunit,
- class = GEOPOINTS,
- defaultVisDef = MSYMB,
- listVisDef = MSYMB/MWIND/MGRAPH/PGRAPH/PSYMB
+ class = GEOPOINTS,
+ defaultVisDef = MSYMB,
+ listVisDef = MSYMB/MWIND/MGRAPH/PGRAPH/PSYMB
dataunit,
- class = BUFR,
- defaultVisDef = POBS,
- listVisDef = POBS
+ class = BUFR,
+ defaultVisDef = MOBS,
+ listVisDef = MOBS
dataunit,
- class = NETCDF_GEO_POINTS,
- defaultVisDef = MSYMB,
- listVisDef = MSYMB/MGRAPH/PGRAPH/PSYMB
+ class = NETCDF,
+ defaultVisDef = MSYMB,
+ listVisDef = MSYMB/MGRAPH/MCONT/MWIND/PSYMB/PGRAPH/PCONT/PWIND
dataunit,
- class = NETCDF_GEO_VECTORS,
- defaultVisDef = MWIND,
- listVisDef = MWIND/PWIND
+ class = NETCDF_GEO_POINTS,
+ defaultVisDef = MSYMB,
+ listVisDef = MSYMB/MGRAPH/PGRAPH/PSYMB
dataunit,
- class = NETCDF_GEO_MATRIX,
- defaultVisDef = MCONT,
- listVisDef = MCONT/PCONT
+ class = NETCDF_GEO_VECTORS,
+ defaultVisDef = MWIND,
+ listVisDef = MWIND/PWIND
dataunit,
- class = NETCDF_XY_MATRIX,
- defaultVisDef = MCONT,
- listVisDef = MCONT/PCONT
+ class = NETCDF_GEO_MATRIX,
+ defaultVisDef = MCONT,
+ listVisDef = MCONT/PCONT
dataunit,
- class = NETCDF_XY_POINTS,
- defaultVisDef = MGRAPH,
- listVisDef = MSYMB/MGRAPH/PSYMB/PGRAPH
+ class = NETCDF_XY_MATRIX,
+ defaultVisDef = MCONT,
+ listVisDef = MCONT/PCONT
dataunit,
- class = ODB_DB,
- defaultVisDef = MSYMB,
- listVisDef = MSYMB/PSYMB/MGRAPH/PGRAPH/MWIND/PWIND
+ class = NETCDF_XY_VECTORS,
+ defaultVisDef = MWIND,
+ listVisDef = MWIND/PWIND
dataunit,
- class = ODB_GEO_POINTS,
- defaultVisDef = MSYMB,
- listVisDef = MSYMB/MGRAPH/PSYMB/PGRAPH
+ class = NETCDF_XY_POINTS,
+ defaultVisDef = MGRAPH,
+ listVisDef = MSYMB/MGRAPH/PSYMB/PGRAPH
dataunit,
- class = ODB_GEO_VECTORS,
- defaultVisDef = MWIND,
- listVisDef = MWIND/PWIND
+ class = ODB_DB,
+ defaultVisDef = MSYMB,
+ listVisDef = MSYMB/PSYMB/MGRAPH/PGRAPH/MWIND/PWIND
dataunit,
- class = ODB_XY_POINTS,
- defaultVisDef = MSYMB,
- listVisDef = MSYMB/PSYMB/MGRAPH/PGRAPH
+ class = ODB_GEO_POINTS,
+ defaultVisDef = MSYMB,
+ listVisDef = MSYMB/MGRAPH/PSYMB/PGRAPH
dataunit,
- class = ODB_XY_VECTORS,
- defaultVisDef = MWIND,
- listVisDef = MWIND/PWIND
+ class = ODB_GEO_VECTORS,
+ defaultVisDef = MWIND,
+ listVisDef = MWIND/PWIND
dataunit,
- class = ODB_XY_BINNING,
- defaultVisDef = MCONT,
- listVisDef = MCONT/PCONT
+ class = ODB_XY_POINTS,
+ defaultVisDef = MSYMB,
+ listVisDef = MSYMB/PSYMB/MGRAPH/PGRAPH
dataunit,
- class = STATION,
- defaultVisDef = MSYMB,
- listVisDef = MSYMB/MGRAPH/PSYMB/PGRAPH
+ class = ODB_XY_VECTORS,
+ defaultVisDef = MWIND,
+ listVisDef = MWIND/PWIND
dataunit,
- class = PRASTERLOOP,
- defaultVisDef = PVOID,
- listVisDef = PVOID
+ class = ODB_XY_BINNING,
+ defaultVisDef = MCONT,
+ listVisDef = MCONT/PCONT
dataunit,
- class = TABLE_HISTOGRAM,
- defaultVisDef = MHIST,
- listVisDef = MHIST
+ class = STATION,
+ defaultVisDef = MSYMB,
+ listVisDef = MSYMB/MGRAPH/PSYMB/PGRAPH
dataunit,
- class = TABLE_XY_POINTS,
- defaultVisDef = MSYMB,
- listVisDef = MSYMB/MGRAPH
+ class = PRASTERLOOP,
+ defaultVisDef = PVOID,
+ listVisDef = PVOID
dataunit,
- class = TABLE_GEO_POINTS,
- defaultVisDef = MSYMB,
- listVisDef = MSYMB/MGRAPH
+ class = TABLE_HISTOGRAM,
+ defaultVisDef = MHIST,
+ listVisDef = MHIST
dataunit,
- class = TABLE_XY_VECTORS,
- defaultVisDef = MWIND,
- listVisDef = MWIND
+ class = TABLE_XY_POINTS,
+ defaultVisDef = MSYMB,
+ listVisDef = MSYMB/MGRAPH
dataunit,
- class = TABLE_GEO_VECTORS,
- defaultVisDef = MWIND,
- listVisDef = MWIND
+ class = TABLE_GEO_POINTS,
+ defaultVisDef = MSYMB,
+ listVisDef = MSYMB/MGRAPH
dataunit,
- class = TABLE_XY_BINNING,
- defaultVisDef = MCONT,
- listVisDef = MCONT
+ class = TABLE_XY_VECTORS,
+ defaultVisDef = MWIND,
+ listVisDef = MWIND
dataunit,
- class = TABLE_GEO_BINNING,
- defaultVisDef = MCONT,
- listVisDef = MCONT
+ class = TABLE_GEO_VECTORS,
+ defaultVisDef = MWIND,
+ listVisDef = MWIND
+
+dataunit,
+ class = TABLE_XY_BINNING,
+ defaultVisDef = MCONT,
+ listVisDef = MCONT
+
+dataunit,
+ class = TABLE_GEO_BINNING,
+ defaultVisDef = MCONT,
+ listVisDef = MCONT
dataunit,
class = TABLE_XY_BOXES,
@@ -601,7 +630,7 @@ visdef,
class = MCONT
visdef,
- class = POBS
+ class = MOBS
visdef,
class = PWIND
@@ -639,430 +668,49 @@ visdef,
############################################
companion,
- class = u,
- friend = v
+ class = u,
+ friend = v
companion,
- class = 10u,
- friend = 10v
+ class = 10u,
+ friend = 10v
companion,
- class = ewss,
- friend = nsss
+ class = 100u,
+ friend = 100v
companion,
- class = wind,
- friend = dwi,
- mode = sd
+ class = ewss,
+ friend = nsss
companion,
- class = swh,
- friend = mwd,
- mode = sd
+ class = wind,
+ friend = dwi,
+ mode = sd
companion,
- class = ocu,
- friend = ocv
+ class = swh,
+ friend = mwd,
+ mode = sd
companion,
- class = shww,
- friend = mdww,
- mode = sd
+ class = ocu,
+ friend = ocv
companion,
- class = shts,
- friend = mdts,
- mode = sd
+ class = shww,
+ friend = mdww,
+ mode = sd
+
+companion,
+ class = shts,
+ friend = mdts,
+ mode = sd
############################################
# Graphics Engine list
############################################
graphics_engine,
- class = Default,
- choice = Magics
-
-#########################################################################
-#########################################################################
-#########################################################################
-
-#request,
-# class = CLOSE,
-# action = Close
-#
-#request,
-# class = CLOSE_MAP_EDITOR,
-# action = CloseMap
-#
-#request,
-# class = EDIT_MAP,
-# action = EditMap
-#
-#request,
-# class = NEWPAGE,
-# action = Newpage
-#
-#request,
-# class = MAGICS_PICTURE,
-# action = MagicsPicture
-#
-#request,
-# class = PAGE,
-# action = Create,
-# builder = PageBuilder,
-# view = EmptyView
-#
-#request,
-# class = FLUSHSUPERPAGE,
-# action = Close,
-# builder = None,
-# view = None
-#
-#request,
-# class = PLOTWINDOW,
-# action = Create,
-# builder = PlotWindowBuilder,
-# view = EmptyView
-#
-#request,
-# class = PRASTER,
-# action = Create,
-# builder = DataBuilder,
-# decoder = SimpleDecoder,
-# view = MapView
-#
-#request,
-# class = VECTOR_FIELD,
-# action = Create,
-# builder = DataBuilder,
-# decoder = VectorFieldDecoder,
-# view = MapView
-#request,
-# class = POLAR_FIELD,
-# action = Create,
-# builder = DataBuilder,
-# decoder = PolarFieldDecoder,
-# view = MapView
-#
-#request,
-# class = IMAGE,
-# action = Create,
-# builder = DataBuilder,
-# decoder = ImageDecoder,
-# view = MapView
-#
-#request,
-# class = CURVE,
-# action = Create,
-# builder = DataBuilder,
-# decoder = CurveDecoder,
-# view = CurveView
-#request,
-# class = BAR_GRAPH,
-# action = Create,
-# builder = DataBuilder,
-# decoder = CurveDecoder,
-# view = CurveView
-#request,
-# class = DOUBLE_CURVE,
-# action = Create,
-# builder = DataBuilder,
-# decoder = CurveDecoder,
-# view = CurveView
-#request,
-# class = MATRIX,
-# action = Create,
-# builder = DataBuilder,
-# decoder = MatrixDecoder,
-# view = MapView
-#request,
-# class = NOTE,
-# action = Create,
-# builder = DataBuilder,
-# decoder = SimpleDecoder,
-# view = TextView
-#request,
-# class = STRING,
-# action = Create,
-# builder = DataBuilder,
-# decoder = SimpleDecoder,
-# view = TextView
-#
-#request,
-# class = PSFILE,
-# action = Create,
-# builder = DataBuilder,
-# decoder = SimpleDecoder,
-# view = ImportView
-#
-#request,
-# class = JPEG,
-# action = Create,
-# builder = DataBuilder,
-# decoder = SimpleDecoder,
-# view = ImportView
-#
-#request,
-# class = PNG,
-# action = Create,
-# builder = DataBuilder,
-# decoder = SimpleDecoder,
-# view = ImportView
-#
-#request,
-# class = TEPHIGRAM,
-# action = Drop,
-# builder = ApplicationBuilder,
-# view = TephigramView
-#
-#request,
-# class = DEVICE,
-# action = Device,
-# builder = Default,
-# view = None
-#
-#request,
-# class = DEVICE_DRIVER,
-# action = Device,
-# view = None
-#
-#request,
-# class = INPUT_WINDOW,
-# action = EditMap,
-# builder = None,
-# view = None
-#
-#request,
-# class = MESSAGE,
-# action = Message,
-# builder = None,
-# view = None
-#
-#request,
-# class = MAGICS_PARAMETERS,
-# action = Skip,
-# builder = None,
-# view = None
-#
-#request,
-# class = REGISTER,
-# action = RegisterTool
-#request,
-# class = EXIT,
-# action = ExitTool
-#
-#request,
-# class = WEBCLIENT,
-# view = MAPVIEW
-#
-##request,
-## class = PAXIS,
-## action = Skip,
-## builder = None,
-## view = None
-#########################################################
-##
-## data unit - visdef
-##
-#########################################################
-#
-#dataunit,
-# class = PNG,
-# defaultVisDef = PIMPORT,
-# listVisDef = PIMPORT
-#
-#dataunit,
-# class = JPEG,
-# defaultVisDef = PIMPORT,
-# listVisDef = PIMPORT
-#
-#dataunit,
-# class = PSFILE,
-# defaultVisDef = PIMPORT,
-# listVisDef = PIMPORT
-#
-#dataunit,
-# class = PRASTER,
-# defaultVisDef = PVOID,
-# listVisDef = PVOID
-#
-#dataunit,
-# class = MATRIX,
-# defaultVisDef = PCONT,
-### listVisDef = PCONT/PWIND/PGRAPH ??Why PWIND and PGRAPHY ?
-# listVisDef = PCONT
-#
-#dataunit,
-# class = MATRIX1D,
-# defaultVisDef = PGRAPH,
-# listVisDef = PGRAPH
-#
-#dataunit,
-# class = MATRIX2D,
-# defaultVisDef = PCONT,
-# listVisDef = PCONT
-#
-#dataunit,
-# class = MATRIX3D,
-# defaultVisDef = PWIND,
-# listVisDef = PWIND
-#
-#dataunit,
-# class = CURVE,
-# defaultVisDef = PGRAPH,
-# listVisDef = PGRAPH/PSYMB
-#
-#dataunit,
-# class = BAR_GRAPH,
-# defaultVisDef = PGRAPH,
-# listVisDef = PGRAPH/PSYMB
-#
-#dataunit,
-# class = DOUBLE_CURVE,
-# defaultVisDef = PGRAPH,
-# listVisDef = PGRAPH/PSYMB
-#
-#
-#dataunit,
-# class = POLAR_FIELD,
-# defaultVisDef = PWIND,
-# listVisDef = PWIND/PCONT
-#
-#dataunit,
-# class = LIST_OF_POINTS,
-# defaultVisDef = PGRAPH,
-# listVisDef = PGRAPH/PSYMB
-#
-#dataunit,
-# class = IMAGE,
-# defaultVisDef = PMIMAGE,
-# listVisDef = PMIMAGE
-#
-#dataunit,
-# class = PM_BUFR_TEPHI,
-# defaultVisDef = PGRAPH,
-# listVisDef = PSYMB/PGRAPH
-#
-#dataunit,
-# class = PM_GRIB_TEPHI,
-# defaultVisDef = PGRAPH,
-# listVisDef = PSYMB/PGRAPH
-#
-#dataunit,
-# class = PM_PRE19950404_GRIB_TEPHI,
-# defaultVisDef = PGRAPH,
-# listVisDef = PSYMB/PGRAPH
-#
-#dataunit,
-# class = DUMMYDATA,
-# defaultVisDef = PSYMB,
-# listVisDef = PGRAPH/PSYMB/PWIND/PCONT/POBS
-#
-#dataunit,
-# class = NOTE,
-# defaultVisDef = ANNOTATION,
-# listVisDef = ANNOTATION/PTEXT
-#
-#dataunit,
-# class = STRING,
-# defaultVisDef = ANNOTATION,
-# listVisDef = ANNOTATION/PTEXT
-#
-##########################################################
-##
-## Visdef
-##
-##########################################################
-#
-#visdef,
-# class = PMIMAGE
-#
-#visdef,
-# class = PCURVE
-#
-#visdef,
-# class = PIMPORT
-#
-visdef,
- class = PVOID
-
-##visdef,
-## class = ANNOTATION
-#
-########################################################
-##
-## Default group
-##
-## (here are the defaults for the requests in PlotMod
-##
-########################################################
-#
-#
-#driver,
-# class = XWINDOW,
-# name = OpenGL
-#
-#driver,
-# class = WINDOW,
-# name = OpenGL
-#
-#driver,
-# class = POSTSCRIPT,
-# name = PostScript
-#
-#driver,
-# class = ICON,
-# name = PostScript
-#
-#driver,
-# class = FILE,
-# name = PostScript
-#
-#view,
-# class = SATELLITEVIEW,
-# name = SatelliteView
-#
-#view,
-# class = CURVEVIEW,
-# name = CurveView
-## service = CURVE
-#
-#view,
-# class = TEPHIGRAMVIEW,
-# name = TephigramView,
-# service = PM_Tephigram
-#
-#view,
-# class = TEXTVIEW,
-# name = TextView
-#view,
-# class = IMPORTVIEW,
-# name = ImportView
-#
-#view,
-# class = EMPTYVIEW,
-# name = EmptyView
-#
-
-############################################
-##
-## Background
-##
-############################################
-#
-#background,
-# class = Default,
-# choice = PCONT
-#
-############################################
-##
-## Window
-##
-############################################
-#
-#window,
-# class = PLOT_SUPERPAGE
-#
-#window,
-# class = PLOT_PAGE
-
+ class = Default,
+ choice = Magics
diff --git a/share/metview/icons/CPTECACCESS.xpm b/share/metview/icons/CPTECACCESS.xpm
new file mode 100755
index 0000000..360cd30
--- /dev/null
+++ b/share/metview/icons/CPTECACCESS.xpm
@@ -0,0 +1,244 @@
+/* XPM */
+static char * icone_1_xpm[] = {
+"32 32 209 2",
+" c None",
+". c #FFFFFF",
+"+ c #555555",
+"@ c #B2B2B2",
+"# c #2500FF",
+"$ c #A6A6A6",
+"% c #323232",
+"& c #3D3D3D",
+"* c #434343",
+"= c #4A4A4A",
+"- c #4B4B4B",
+"; c #4E4E4E",
+"> c #1B1349",
+", c #1D154B",
+"' c #292157",
+") c #4F4F4F",
+"! c #ACACAC",
+"~ c #AD9FFF",
+"{ c #BDBDBD",
+"] c #8E8E8E",
+"^ c #AAAAAA",
+"/ c #7B7B7B",
+"( c #737373",
+"_ c #747474",
+": c #767676",
+"< c #6D6D6D",
+"[ c #3B3B3B",
+"} c #7E7E7E",
+"| c #C3C3C3",
+"1 c #A9A9A9",
+"2 c #BCBCBC",
+"3 c #535353",
+"4 c #929292",
+"5 c #AFAFAF",
+"6 c #7F7F7F",
+"7 c #787878",
+"8 c #414141",
+"9 c #8B8B8B",
+"0 c #AEAEAE",
+"a c #8F8F8F",
+"b c #C7C7C7",
+"c c #B5B5B5",
+"d c #545454",
+"e c #C1C1C1",
+"f c #919191",
+"g c #757575",
+"h c #777777",
+"i c #7A7A7A",
+"j c #3A3A3A",
+"k c #ADADAD",
+"l c #CCCCCC",
+"m c #7C7C7C",
+"n c #C6C6C6",
+"o c #B0B0B0",
+"p c #B7B7B7",
+"q c #464646",
+"r c #363636",
+"s c #A5A5A5",
+"t c #B3B3B3",
+"u c #707070",
+"v c #727272",
+"w c #CACACA",
+"x c #858585",
+"y c #C0C0C0",
+"z c #9A9A9A",
+"A c #BEBEBE",
+"B c #999999",
+"C c #A4A4A4",
+"D c #251D53",
+"E c #B6B6B6",
+"F c #C7C6C6",
+"G c #D1D0D0",
+"H c #D2D2D2",
+"I c #CECDCD",
+"J c #C8C8C8",
+"K c #C9C9C9",
+"L c #C5C5C5",
+"M c #BFBFBF",
+"N c #B4B4B4",
+"O c #444444",
+"P c #C2C3C3",
+"Q c #BBB2B2",
+"R c #94979B",
+"S c #515959",
+"T c #515250",
+"U c #767575",
+"V c #A59B9C",
+"W c #999898",
+"X c #929393",
+"Y c #939393",
+"Z c #9D9D9D",
+"` c #494949",
+" . c #BCB3B6",
+".. c #4F7377",
+"+. c #218770",
+"@. c #29C6BB",
+"#. c #1A6F54",
+"$. c #00A194",
+"%. c #20706F",
+"&. c #7A7675",
+"*. c #B1AEAF",
+"=. c #A6A7A6",
+"-. c #A7A7A7",
+";. c #C2C2C2",
+">. c #403B3D",
+",. c #445A4C",
+"'. c #0FB899",
+"). c #52AA50",
+"!. c #8AF2DD",
+"~. c #A8FAF2",
+"{. c #23DEC3",
+"]. c #4EC8B1",
+"^. c #043E21",
+"/. c #878786",
+"(. c #BBBABA",
+"_. c #42474B",
+":. c #1B6F36",
+"<. c #3BA43D",
+"[. c #40AC6B",
+"}. c #6AB67C",
+"|. c #63C18F",
+"1. c #BDFDF5",
+"2. c #188642",
+"3. c #077E57",
+"4. c #305D53",
+"5. c #B3AEB0",
+"6. c #B3B2B2",
+"7. c #26868B",
+"8. c #1CA26C",
+"9. c #1D8D1F",
+"0. c #3BA45E",
+"a. c #26A965",
+"b. c #47BE8B",
+"c. c #C4FFFF",
+"d. c #0CDDC5",
+"e. c #29BDA3",
+"f. c #339E90",
+"g. c #6F7777",
+"h. c #0A6A6F",
+"i. c #21A86E",
+"j. c #258F21",
+"k. c #00801C",
+"l. c #28B071",
+"m. c #E4FFFF",
+"n. c #BCFFFF",
+"o. c #3EE6BD",
+"p. c #0F773C",
+"q. c #004E2A",
+"r. c #585757",
+"s. c #127B7C",
+"t. c #35E7D6",
+"u. c #52AC64",
+"v. c #018627",
+"w. c #66CDA5",
+"x. c #64D0AA",
+"y. c #B1FFFF",
+"z. c #32D1B5",
+"A. c #056A36",
+"B. c #005934",
+"C. c #5D5E5E",
+"D. c #4E8483",
+"E. c #20EFF2",
+"F. c #97F9F5",
+"G. c #41A660",
+"H. c #49BB86",
+"I. c #56B982",
+"J. c #81E5D2",
+"K. c #87FDFF",
+"L. c #18C8B8",
+"M. c #056754",
+"N. c #9B9292",
+"O. c #473939",
+"P. c #15B4B4",
+"Q. c #6BFFFF",
+"R. c #49D8CB",
+"S. c #006A35",
+"T. c #006E39",
+"U. c #1FD8C8",
+"V. c #5EFFFF",
+"W. c #02F1F3",
+"X. c #4D7E81",
+"Y. c #BCB1B1",
+"Z. c #991507",
+"`. c #534F4F",
+" + c #8F8E8E",
+".+ c #1BB2B2",
+"++ c #63EBED",
+"@+ c #1A8A65",
+"#+ c #009573",
+"$+ c #00FFFF",
+"%+ c #00D5D5",
+"&+ c #438282",
+"*+ c #BCADAD",
+"=+ c #CECECE",
+"-+ c #D1D1D1",
+";+ c #B8B8B8",
+">+ c #383838",
+",+ c #868787",
+"'+ c #635F5F",
+")+ c #483A3A",
+"!+ c #548282",
+"~+ c #12483A",
+"{+ c #0A4134",
+"]+ c #2C8787",
+"^+ c #484747",
+"/+ c #473D3D",
+"(+ c #484949",
+"_+ c #505050",
+":+ c #797979",
+". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . + + + + + + + . . . . . . . . . . . . ",
+". . . . . . . . . . + + + @ @ @ @ @ @ @ + + + . . . . . . . . . ",
+". . . . . . . . + + @ @ @ @ . . . . . @ @ @ @ + + . . . . . . . ",
+". . . . . . . + @ @ . . . . . . . . . . . . . @ @ + . . . . . . ",
+". . . . . . + @ . . . . . . . . . . . . . . . . . @ + . . . . . ",
+". . . . . + @ . . . . . . . . . . . . . . . . . . . @ + . . . . ",
+". . . . + @ . . . . . . . . . . . . . . . . . . . . . @ + . . . ",
+". . . + @ . . . . . . . . . . . . . . . . . . . . . . . @ + . . ",
+". . . + @ . . . . . . . . . . . . . . . . . . . . . . . @ + . . ",
+". . + @ . . . . . . . . . . . . . . . . . . . . . . . . . @ + . ",
+". . + @ . . . . . . . . . . # # # # # . . . . . . . . . . @ + . ",
+". . + @ . . . . . . . . . # # # # # # # . . . . . . . . . @ + . ",
+"$ % & * = = = = = - ; - > , ' ) ! . ~ # # . . . . . . . . . @ + ",
+"- { ] ^ / ( _ _ : < [ ; : } | 1 + 2 . # # # . . . . . . . . @ + ",
+"3 | 4 5 6 : 7 7 / 8 9 0 a } b c ! + ^ . # # . . . . . . . . @ + ",
+"d e f 0 } g h h i j k l f m n o p ^ q . # # . . . . . . . . @ + ",
+"d e f 0 } g h h i r s n f m n o t o d . # # . . . . . . . . @ + ",
+"d e a ! i u v v ( 3 2 w x 7 n o t 0 3 # # # . . . . . . . . @ + ",
+") y z A ^ a 4 4 f B 1 C a ! l 5 t 0 D # # . . . . . . . . . @ + ",
+"= A E F G H I J w K L n K w M N t 0 D # . . . . . . . . . @ + . ",
+"O P Q R S T U V W X Y Y Y Y Y Z c 0 D . . . . . . . . . . @ + . ",
+"` ...+. at .#.$.%.&.*.=.-.-.-.C E ;.! 3 . . . . . . . . . . @ + . ",
+">.,.'.).!.~.{.].^./.(.N N N @ ;.| ! 3 . . . . . . . . . @ + . . ",
+"_.:.<.[.}.|.1.2.3.4.5.6.@ @ o y | ! 3 . . . . . . . . . @ + . . ",
+"7.8.9.0.a.b.c.d.e.f.g.(.@ @ o y | ! 3 . . . . . . . . @ + . . . ",
+"h.i.j.k.l.m.n.o.p.q.r.M @ @ o y | ! 3 . . . . . . . @ + . . . . ",
+"s.t.u.v.w.x.y.z.A.B.C.A @ @ o y | ! 3 . . . . . . @ + . . . . . ",
+"D.E.F.G.H.I.J.K.L.M.N.E @ @ o y | ! 3 . . . . @ @ + . . . . . . ",
+"O.P.Q.R.S.T.U.V.W.X.Y.@ @ @ o y | ! 3 . @ @ @ + + Z.Z.Z.Z.Z.Z.Z.",
+"`. +.+++ at +#+$+%+&+*+P M M M { =+-+;+>+@ + + + Z.Z.Z.Z.Z.Z.Z.Z.Z.",
+",+'+)+!+~+{+]+^+/+(+O = ) = ` ) _+= :++ . . . . . . . . . . . . "};
diff --git a/share/metview/icons/POBS.xpm b/share/metview/icons/MOBS.xpm
similarity index 99%
rename from share/metview/icons/POBS.xpm
rename to share/metview/icons/MOBS.xpm
index 40bd8ce..41919ae 100644
--- a/share/metview/icons/POBS.xpm
+++ b/share/metview/icons/MOBS.xpm
@@ -1,5 +1,5 @@
/* XPM */
-static char *POBS[] = {
+static char *MOBS[] = {
/* columns rows colors chars-per-pixel */
"32 32 147 2",
" c #0D0B06",
diff --git a/share/metview/icons/MTHERMOGRID.xpm b/share/metview/icons/MTHERMOGRID.xpm
new file mode 100644
index 0000000..40b31d8
--- /dev/null
+++ b/share/metview/icons/MTHERMOGRID.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char * TEPHIVIEW_xpm[] = {
+"32 32 6 1",
+" c #333333333333",
+". c #FFFFFFFFCCCC",
+"X c #7E7E7E7E7E7E",
+"o c #00000000FFFF",
+"O c #FFFF00000000",
+"+ c #000000006666",
+" ",
+" .............................. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .Xo.................oO....+.X. ",
+" .X.o................OO.....+X. ",
+" .X..o..............OO.o.....X. ",
+" .X...o............OO...o....X. ",
+" .X....o...........O.....o...X. ",
+" .X.....o.........O.......o..X. ",
+" .X......o.......OO........o.X. ",
+" .X.......o......O..........oX. ",
+" .X........o....O............X. ",
+" .X.........o..OO............X. ",
+" .X..........o.O.............X. ",
+" .X...........O..............X. ",
+" .X..........OOo............OX. ",
+" .X..........O..o...........OX. ",
+" .X..........O...o.........O.X. ",
+" .X.........O.....o.......OO.X. ",
+" .X........OO......o......O..X. ",
+" .X........O........o....O...X. ",
+" .Xo.......O.........o..OO...X. ",
+" .X.o.....O...........o.O....X. ",
+" .X..o....O............OO....X. ",
+" .X...o..O.............Oo....X. ",
+" .X....o.O.............O.o...X. ",
+" .X.....O.............O...o..X. ",
+" .X.....Oo............O....o.X. ",
+" .X....OO.o...........O.....oX. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .............................. ",
+" "};
diff --git a/share/metview/icons/Makefile.am b/share/metview/icons/Makefile.am
index 4466851..5bc8fef 100644
--- a/share/metview/icons/Makefile.am
+++ b/share/metview/icons/Makefile.am
@@ -7,19 +7,20 @@ svg_icons = \
GEO_TO_GRIB.svg GRIB_TO_GEO.svg \
INPUTVISUALISER.svg \
KML.svg \
- MCOAST.svg MCONT.svg MGRAPH.svg MLEGEND.svg MSYMB.svg MTEXT.svg MWIND.svg \
+ MCOAST.svg MCONT.svg MGRAPH.svg MLEGEND.svg MOBS.svg \
+ MSYMB.svg MTEXT.svg MWIND.svg \
NAMELIST.svg \
NOTES.svg NETCDF.svg NETCDFPLUS.svg \
NETCDF_RTTOV_INPUT.svg \
OBSFILTER.svg \
ODB_DB.svg ODB_FILTER.svg ODB_VISUALISER.svg \
- POBS.svg \
PDF.svg PNG.svg PSFILE.svg \
READ_TIGGE.svg RETRIEVE_TIGGE.svg \
RTTOV_OUTPUT_FILE.svg RTTOV_RUN.svg RTTOV_VISUALISER.svg \
SCM_INPUT_DATA.svg SCM_OUTPUT_DATA.svg SCM_RUN.svg SCM_VIS.svg \
SQL.svg SVG.svg SYSTEM.svg \
TABLE.svg TABLEREADER.svg TABLEVISUALISER.svg \
+ VAPOR_PREPARE.svg \
WASTEBASKET.svg
icons = ALIGN_BOTTOM.xpm \
@@ -69,8 +70,10 @@ icons = ALIGN_BOTTOM.xpm \
MGRAPH.xpm \
MHOVMOELLERDATA.xpm MHOVMOELLERVIEW.xpm \
MLEGEND.xpm \
- MTEXT.xpm \
+ MOBS.xpm \
MSYMB.xpm \
+ MTEXT.xpm \
+ MTHERMOGRID.xpm \
MXAVERAGE.xpm MXAVERAGEVIEW.xpm \
MVPROFILE.xpm MVPROFILEVIEW.xpm \
MXSECTION.xpm MXSECTIONVIEW.xpm \
@@ -94,7 +97,6 @@ icons = ALIGN_BOTTOM.xpm \
PLOTPAGE.xpm \
PLOTSUBPAGE.xpm \
PNG.xpm \
- POBS.xpm \
POTTF.xpm \
DIVROT.xpm \
PSOUTPUT.xpm \
@@ -112,6 +114,7 @@ icons = ALIGN_BOTTOM.xpm \
SERVICE.xpm \
SHELL.xpm \
SIMPLE_FORMULA.xpm \
+ SPECTRA.xpm \
SQL.xpm \
STATIONS.xpm \
SUBPAGEDETAILS.xpm \
@@ -123,8 +126,10 @@ icons = ALIGN_BOTTOM.xpm \
TABLEREADER.xpm \
TABLEVISUALISER.xpm \
TAR.xpm \
+ THERMODATA.xpm \
MTAYLOR.xpm \
TIFF.xpm \
+ VAPOR_PREPARE.xpm \
VELSTR.xpm \
VPROF.xpm VPROFVIEW.xpm \
XSECT.xpm XSECTVIEW.xpm \
@@ -166,6 +171,10 @@ if METVIEW_GUI
icons += WEBACCESS.xpm
endif
+if METVIEW_INPE
+ icons += CPTECACCESS.xpm
+endif
+
# ---------- end of module-specific icons -------------
diff --git a/share/metview/icons/Makefile.in b/share/metview/icons/Makefile.in
index c825443..bc590fb 100644
--- a/share/metview/icons/Makefile.in
+++ b/share/metview/icons/Makefile.in
@@ -46,10 +46,12 @@ target_triplet = @target@
@METVIEW_OPERA_TRUE at am__append_7 = OPERA_RADAR_FILTER.xpm
@METVIEW_QT_TRUE at am__append_8 = WMS_CLIENT.xpm WCS_CLIENT.xpm
@METVIEW_GUI_TRUE at am__append_9 = WEBACCESS.xpm
+ at METVIEW_INPE_TRUE@am__append_10 = CPTECACCESS.xpm
subdir = share/metview/icons
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -98,6 +100,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -121,6 +125,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -299,15 +304,16 @@ top_srcdir = @top_srcdir@
svg_icons = BINNING.svg BUFR.svg BUFRPICKER.svg FLEXTRA_PREPARE.svg \
FLEXTRA_RUN.svg FLEXTRA_FILE.svg FLEXTRA_VISUALISER.svg \
FOLDER.svg GEO_TO_GRIB.svg GRIB_TO_GEO.svg INPUTVISUALISER.svg \
- KML.svg MCOAST.svg MCONT.svg MGRAPH.svg MLEGEND.svg MSYMB.svg \
- MTEXT.svg MWIND.svg NAMELIST.svg NOTES.svg NETCDF.svg \
- NETCDFPLUS.svg NETCDF_RTTOV_INPUT.svg OBSFILTER.svg ODB_DB.svg \
- ODB_FILTER.svg ODB_VISUALISER.svg POBS.svg PDF.svg PNG.svg \
+ KML.svg MCOAST.svg MCONT.svg MGRAPH.svg MLEGEND.svg MOBS.svg \
+ MSYMB.svg MTEXT.svg MWIND.svg NAMELIST.svg NOTES.svg \
+ NETCDF.svg NETCDFPLUS.svg NETCDF_RTTOV_INPUT.svg OBSFILTER.svg \
+ ODB_DB.svg ODB_FILTER.svg ODB_VISUALISER.svg PDF.svg PNG.svg \
PSFILE.svg READ_TIGGE.svg RETRIEVE_TIGGE.svg \
RTTOV_OUTPUT_FILE.svg RTTOV_RUN.svg RTTOV_VISUALISER.svg \
SCM_INPUT_DATA.svg SCM_OUTPUT_DATA.svg SCM_RUN.svg SCM_VIS.svg \
SQL.svg SVG.svg SYSTEM.svg TABLE.svg TABLEREADER.svg \
- TABLEVISUALISER.svg WASTEBASKET.svg $(am__append_4)
+ TABLEVISUALISER.svg VAPOR_PREPARE.svg WASTEBASKET.svg \
+ $(am__append_4)
icons = ALIGN_BOTTOM.xpm ALIGN_LEFT.xpm ALIGN_RIGHT.xpm ALIGN_TOP.xpm \
ANNOTATIONVIEW.xpm AVERAGE.xpm AVERAGEVIEW.xpm BINARY.xpm \
BINNING.xpm BUFR.xpm CARTESIANVIEW.xpm CLEANFILE.xpm \
@@ -321,27 +327,29 @@ icons = ALIGN_BOTTOM.xpm ALIGN_LEFT.xpm ALIGN_RIGHT.xpm ALIGN_TOP.xpm \
HOVMOELLERDATA.xpm HOVMOELLERVIEW.xpm INPUTVISUALISER.xpm \
JPEG.xpm LLMATRIX.xpm lock_icon.xpm MACRO.xpm MACROPARAM.xpm \
MAGML.xpm MAPVIEW.xpm MCOAST.xpm MCONT.xpm MGRAPH.xpm \
- MHOVMOELLERDATA.xpm MHOVMOELLERVIEW.xpm MLEGEND.xpm MTEXT.xpm \
- MSYMB.xpm MXAVERAGE.xpm MXAVERAGEVIEW.xpm MVPROFILE.xpm \
- MVPROFILEVIEW.xpm MXSECTION.xpm MXSECTIONVIEW.xpm MWIND.xpm \
- NAMELIST.xpm NETCDF.xpm NETCDF_RTTOV_INPUT.xpm NETCDFPLUS.xpm \
- NEWS.xpm NOTE.xpm OBSFILTER.xpm ODB_DB.xpm ODB_FILTER.xpm \
+ MHOVMOELLERDATA.xpm MHOVMOELLERVIEW.xpm MLEGEND.xpm MOBS.xpm \
+ MSYMB.xpm MTEXT.xpm MTHERMOGRID.xpm MXAVERAGE.xpm \
+ MXAVERAGEVIEW.xpm MVPROFILE.xpm MVPROFILEVIEW.xpm \
+ MXSECTION.xpm MXSECTIONVIEW.xpm MWIND.xpm NAMELIST.xpm \
+ NETCDF.xpm NETCDF_RTTOV_INPUT.xpm NETCDFPLUS.xpm NEWS.xpm \
+ NOTE.xpm OBSFILTER.xpm ODB_DB.xpm ODB_FILTER.xpm \
ODB_VISUALISER.xpm BUFRPICKER.xpm OVERLAY_CONTROL.xpm \
PAXIS.xpm MAXIS.xpm PCOAST.xpm PCONT.xpm PDF.xpm \
PERCENTILE.xpm PGRAPH.xpm PLOTPAGE.xpm PLOTSUBPAGE.xpm PNG.xpm \
- POBS.xpm POTTF.xpm DIVROT.xpm PSOUTPUT.xpm PSFILE.xpm \
- PSYMB.xpm PTEXT.xpm PWIND.xpm READ.xpm READ_TIGGE.xpm \
- RELHUM.xpm RETRIEVE.xpm RETRIEVE_TIGGE.xpm \
- RTTOV_OUTPUT_FILE.xpm RTTOV_RUN.xpm RTTOV_VISUALISER.xpm \
- SCM_INPUT_DATA.xpm SCM_OUTPUT_DATA.xpm SCM_RUN.xpm SCM_VIS.xpm \
- SERVICE.xpm SHELL.xpm SIMPLE_FORMULA.xpm SQL.xpm STATIONS.xpm \
+ POTTF.xpm DIVROT.xpm PSOUTPUT.xpm PSFILE.xpm PSYMB.xpm \
+ PTEXT.xpm PWIND.xpm READ.xpm READ_TIGGE.xpm RELHUM.xpm \
+ RETRIEVE.xpm RETRIEVE_TIGGE.xpm RTTOV_OUTPUT_FILE.xpm \
+ RTTOV_RUN.xpm RTTOV_VISUALISER.xpm SCM_INPUT_DATA.xpm \
+ SCM_OUTPUT_DATA.xpm SCM_RUN.xpm SCM_VIS.xpm SERVICE.xpm \
+ SHELL.xpm SIMPLE_FORMULA.xpm SPECTRA.xpm SQL.xpm STATIONS.xpm \
SUBPAGEDETAILS.xpm SUPERPAGE.xpm SVG.xpm SVGOUTPUT.xpm \
SYSTEM.xpm TABLE.xpm TABLEREADER.xpm TABLEVISUALISER.xpm \
- TAR.xpm MTAYLOR.xpm TIFF.xpm VELSTR.xpm VPROF.xpm \
- VPROFVIEW.xpm XSECT.xpm XSECTVIEW.xpm WASTEBASKET.xpm \
- $(am__append_1) $(am__append_2) $(am__append_3) \
- $(am__append_5) $(am__append_6) $(am__append_7) \
- $(am__append_8) $(am__append_9)
+ TAR.xpm THERMODATA.xpm MTAYLOR.xpm TIFF.xpm VAPOR_PREPARE.xpm \
+ VELSTR.xpm VPROF.xpm VPROFVIEW.xpm XSECT.xpm XSECTVIEW.xpm \
+ WASTEBASKET.xpm $(am__append_1) $(am__append_2) \
+ $(am__append_3) $(am__append_5) $(am__append_6) \
+ $(am__append_7) $(am__append_8) $(am__append_9) \
+ $(am__append_10)
# ---------- end of module-specific icons -------------
icons_dot_icon = $(icons:.xpm=.icon) # e.g. FOLDER.xpm -> FOLDER.icon
diff --git a/share/metview/icons/SPECTRA.xpm b/share/metview/icons/SPECTRA.xpm
new file mode 100755
index 0000000..313da52
--- /dev/null
+++ b/share/metview/icons/SPECTRA.xpm
@@ -0,0 +1,40 @@
+/* XPM */
+static char * SPECTRA_xpm[] = {
+"32 32 5 1",
+" c #E5E5E5E5E5E5",
+". c #000000000000",
+"X c #00000000FFFF",
+"o c #FFFF00000000",
+"O c #FFFFFFFFFFFF",
+" . ",
+".. XXX ",
+" . X ",
+" . X ",
+" . XX ",
+" . X ",
+" . X ",
+".. XXX ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ooo ",
+".. oo oo ",
+" . oo o ",
+" . o oo ",
+" . oo o ",
+" . oo o ",
+" . o o ",
+".. o o ",
+" . o oo ",
+" . oo o ",
+" . o o X XXX ",
+" . o oo XOXOOOX ",
+".. o oo OOOXOOOX ",
+" . o oo X OX ",
+" . oo oo X OX ",
+" . o ooo X OX ",
+" . o ooooooooooooo",
+" . ",
+"................................",
+" . . . . . . "};
diff --git a/share/metview/icons/THERMODATA.xpm b/share/metview/icons/THERMODATA.xpm
new file mode 100755
index 0000000..3daddcc
--- /dev/null
+++ b/share/metview/icons/THERMODATA.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * TEPHIDATA_xpm[] = {
+"32 32 13 1",
+" c #000000006666",
+". c #00000000FFFF",
+"X c #FFFFFFFFCCCC",
+"o c #FFFF00000000",
+"O c #25250000FFFF",
+"+ c #B2B2B2B2B2B2",
+"@ c #555555555555",
+"# c #000000000000",
+"$ c #0000FFFFFFFF",
+"% c #000073734B4B",
+"& c #6C6CA6A63131",
+"* c #FFFFFFFFFFFF",
+"= c #00008C8C3030",
+" . ",
+" .XXXXXXXXXXXXXXXXX.XXXoooXXXXX ",
+" X.XXXXXXXXXXXXXXXXX.XXoXX XXXX ",
+" XX.XXXXXXXXXXXXXXXXX.oXXXX XXX ",
+" XXX.XXXXXXXXXXXXXXXXooXXXXX XX ",
+" XXXX.XXXXXXXXXXXXXXooX.XXXXX X ",
+" XXXXX.XXXXXXXXXXXXooXXX.XXXXX ",
+" XXXXXX.XXXXXXXXXXXoXXXXX.XXXXX ",
+" XXXXXXX.XXXXXXXXXXoXXXXXX.XXXX ",
+" XXXXXXXX.XXXXXXXXooXXXXXXX.XXX ",
+" XXXXXXXXX.XXXXXXXoXXXXXXXXX.XX ",
+" XXXXXXXXXX.XXOOOOOXXXXXXXXXX.X ",
+" XXXXXXXXXXX.OOOOOOOXXXXXXXXXX.o",
+" XXXXXXXXXXXOOOXXXOOOXXXXXXXXXoo",
+" XXXX+@####@+OXXXXXOOOXXXXXXXoo ",
+" XXX@#$$%%%$#@XXXXXXOOXXXXXXooX ",
+" XX#$%&*$*%$$%#XXXXXOOXXXXXXoXX ",
+" X#%$&=*$*=$*%%#XXXXOOXXXXXoXXX ",
+".X%&=*==**$*=%%%@XXOOOXXXXooXXX ",
+" #%&===*==**=%%%#+OOOXXXXXoXXXX ",
+" $%&==*===$*$=$*$@OO.X*XXoXXXXX ",
+" $%&====$***$$%%%#OXX.XXooXXXXX ",
+" $%&====**$*$&%%%#XXXX.XoXXXXXX ",
+" $%&====$***$&%%%#XXXXXooXXXXXX ",
+" $$*===*==$*$%%%%#XXXXXo.XXXXXX ",
+" $$$*==*$**$*$%%%@XXXXXoX.XXXXX ",
+" #$*$*=====*$*$$#+XXXXoXXX.XXXX ",
+" @$$*$%%%%%$*$$$@XXXXXoXXXX.XXX ",
+" X#$$*$%%%$$$$$#XXXXXXoXXXXX.XX ",
+" XX#$$*%%%$$$$#XXXXXXoXXXXXXX.X ",
+" XXX@#$%%%$$#@XXXXXXXoXXXXXXXX. ",
+" o o "};
diff --git a/share/metview/icons/VAPOR_PREPARE.xpm b/share/metview/icons/VAPOR_PREPARE.xpm
new file mode 100644
index 0000000..8b239fd
--- /dev/null
+++ b/share/metview/icons/VAPOR_PREPARE.xpm
@@ -0,0 +1,162 @@
+/* XPM */
+static char *VAPOR_PREPARE[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 124 2",
+" c #000000",
+". c #080807",
+"X c #0C0C0B",
+"o c #151513",
+"O c #191714",
+"+ c #1A1A19",
+"@ c #322C1C",
+"# c #252524",
+"$ c #2D2D2C",
+"% c #30302E",
+"& c #343433",
+"* c #3E3E3C",
+"= c #554727",
+"- c #41413F",
+"; c #49453A",
+": c #5A4E32",
+"> c #5F553E",
+", c #60502C",
+"< c #68552D",
+"1 c #74643F",
+"2 c #7E693D",
+"3 c #444443",
+"4 c #494846",
+"5 c #4B4B49",
+"6 c #50504E",
+"7 c #525251",
+"8 c #595957",
+"9 c #5B5B59",
+"0 c #6A6049",
+"q c #61615F",
+"w c #726C5F",
+"e c #656562",
+"r c #696967",
+"t c #6D6D6A",
+"y c #72716D",
+"u c #747471",
+"i c #787875",
+"p c #7E7E7B",
+"a c #8D713C",
+"s c #8A7444",
+"d c #957943",
+"f c #947F4F",
+"g c #BE9135",
+"h c #BC913D",
+"j c #C4963B",
+"k c #D8A038",
+"l c #E3A83D",
+"z c #B18E44",
+"x c #B99043",
+"c c #B9914C",
+"v c #A48951",
+"b c #AB8C50",
+"n c #A98F5B",
+"m c #B49155",
+"M c #B6955B",
+"N c #80807D",
+"B c #AF9767",
+"V c #BE9D64",
+"C c #B39D6C",
+"Z c #BBA676",
+"A c #B8A478",
+"S c #D6A249",
+"D c #D6A352",
+"F c #D6A45A",
+"G c #E1A947",
+"H c #E1AA50",
+"J c #E0AB59",
+"K c #C69D60",
+"L c #CFA76D",
+"P c #D5A563",
+"I c #DFAD6C",
+"U c #C4A672",
+"Y c #C8AF7F",
+"T c #D9AB70",
+"R c #DEB075",
+"E c #D3B07C",
+"W c #DCB37D",
+"Q c #E0AD63",
+"! c #E0AE6D",
+"~ c #858583",
+"^ c #8A8A86",
+"/ c #898989",
+"( c #92928E",
+") c #979793",
+"_ c #999995",
+"` c #9E9E9D",
+"' c #A6A6A2",
+"] c #AAAAA6",
+"[ c #ADADA9",
+"{ c #B0B0AC",
+"} c #B3B3B0",
+"| c #BFBFBA",
+" . c #CBB78E",
+".. c #DAB786",
+"X. c #DAB886",
+"o. c #D4B788",
+"O. c #D8BC8F",
+"+. c #C1B69D",
+"@. c #D4BD93",
+"#. c #D6C097",
+"$. c #D5C19B",
+"%. c #D3C6A9",
+"&. c #D5C9AE",
+"*. c #CCC4B2",
+"=. c #C3C3BF",
+"-. c #D6CAB0",
+";. c #D9CEB7",
+":. c #D2CBB9",
+">. c #C4C4C0",
+",. c #D3D3CE",
+"<. c #DFD8C8",
+"1. c #D2D2D2",
+"2. c #D8D8D3",
+"3. c #E0D8C5",
+"4. c #E6E2D6",
+"5. c #E6E6E6",
+"6. c #EFEBE1",
+"7. c #E8E8E8",
+"8. c #F0ECE3",
+"9. c #F4F1EB",
+"0. c #F6F5F4",
+"q. c #F9F6F0",
+"w. c #FAF9F7",
+"e. c #FFFFFF",
+/* pixels */
+"e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.",
+"e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.",
+"e.e.e.e.e.e.e.e.e.0.5.5.5.5.5.5.7.5.5.5.5.5.5.5.5.7.7.5.5.5.7.e.",
+"e.e.e.e.e.e.e.e.e._ $ $ $ $ $ $ $ # $ $ $ $ $ $ $ # $ $ $ $ 7 7.",
+"e.e.e.e.e.e.e.e.e./ . . . . . . $ 5.",
+"e.e.e.e.e.e.e.e.e./ o p / / ^ ^ ^ ^ ^ ^ ^ / / _ * % 5.",
+"e.e.e.e.e.e.e.e.e./ . i 1.y & & & & & & & & & ~ 2.e % 5.",
+"e.e.e.e.e.e.e.e.e./ e / / 4 - ) ( 9 % 5.",
+"e.e.e.e.e.e.e.e.e./ 5 ( + p 4 % _ & t q $ 5.",
+"e.e.e.e.e.e.e.w.q./ # | ( r } ) r r r r r r y ' 5 t q & 5.",
+"e.e.e.e.e.e.e.8.A w 3 ] q q } / 9 9 e e 9 9 i ] X t q $ 5.",
+"e.e.e.e.e.e.e.6.b a @ 4 p . p 5 # ) X t e $ 5.",
+"e.w.w.0.0.0.0.4.M L d > 9 . . p 4 # _ X t 9 $ 5.",
+"3.Z C C C C C B m W E v : o . ~ 5 # _ X t e & 5.",
+"%.g k k S D F P T W X.o.n = o f 4 # ) X t q $ 5.",
+"%.j l G H J Q I R W X.O. at .B , y * # _ X t q % 5.",
+"&.j l G H J Q I R W ..O.#.$.C 2 $ # ) X t e $ 5.",
+"&.j l G H F Q ! R W ..O.#. .f 0 $ # _ X t q & 5.",
+"-.j l G H J Q ! R W ..O.Y s % i 3 # _ X t e $ 5.",
+";.z j h x c c m K W ..U 2 @ . N 4 # ) X t 9 $ 5.",
+"9.<.:.*.*.*.*.+.m R V 2 ; X p 4 # ) X t e $ 5.",
+"e.e.e.e.e.e.e.6.M m < 4 t ~ 6 . X . X . . $ ` o . u e % 5.",
+"e.e.e.e.e.e.e.4.v 1 O 3 N o [ [ ( ( ) ) ) ( ' ,.) ( =.9 % 5.",
+"e.e.e.e.e.e.e.9.;.p - ~ o N u $ $ $ # $ # # 5 ] & e { $ % 5.",
+"e.e.e.e.e.e.e.e.e./ - ^ y p . # ) % _ - % 5.",
+"e.e.e.e.e.e.e.e.e./ * >.^ o # ] ` 6 $ 5.",
+"e.e.e.e.e.e.e.e.e./ * 2.( u u u u u u u u u / ,.e & 5.",
+"e.e.e.e.e.e.e.e.e./ o 6 8 8 8 8 8 8 8 8 8 8 8 4 . $ 5.",
+"e.e.e.e.e.e.e.e.e./ . . . & 5.",
+"e.e.e.e.e.e.e.e.e.1.` ` ` ` ` ` ` ` ` ' ` ` ' ` ` ` ` ` ` _ } w.",
+"e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.",
+"e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e."
+};
diff --git a/share/metview/icons_mv5/ALIGN_BOTTOM.xpm b/share/metview/icons_mv5/ALIGN_BOTTOM.xpm
deleted file mode 100644
index 6e0c9a5..0000000
--- a/share/metview/icons_mv5/ALIGN_BOTTOM.xpm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */
-static char * ALIGN_BOTTOM_xpm[] = {
-"16 16 4 1",
-" c #FFFFFFFFFFFF",
-". c #000000000000",
-"X c #FFFFCCCC9999",
-"o c #00000000FFFF",
-" ",
-" .... ",
-" .XX. ",
-" .XX. ",
-" .XX. .... ",
-" .XX. .XX. ",
-" .XX. .XX. ",
-" .... .XX. .XX. ",
-" .XX. .XX. .XX. ",
-" .XX. .XX. .XX. ",
-" .XX. .XX. .XX. ",
-" .XX. .XX. .XX. ",
-" .XX. .XX. .XX. ",
-" oooooooooooooo ",
-" oooooooooooooo ",
-" "};
diff --git a/share/metview/icons_mv5/ALIGN_LEFT.xpm b/share/metview/icons_mv5/ALIGN_LEFT.xpm
deleted file mode 100644
index 40efe64..0000000
--- a/share/metview/icons_mv5/ALIGN_LEFT.xpm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */
-static char * ALIGN_LEFT_xpm[] = {
-"16 16 4 1",
-" c #FFFFFFFFFFFF",
-". c #00000000FFFF",
-"X c #000000000000",
-"o c #FFFFCCCC9999",
-" ",
-" ..XXXXXX ",
-" ..oooooX ",
-" ..oooooX ",
-" ..XXXXXX ",
-" .. ",
-" ..XXXXXXXXXXXX ",
-" ..oooooooooooX ",
-" ..oooooooooooX ",
-" ..XXXXXXXXXXXX ",
-" .. ",
-" ..XXXXXXXXX ",
-" ..ooooooooX ",
-" ..ooooooooX ",
-" ..XXXXXXXXX ",
-" "};
diff --git a/share/metview/icons_mv5/ALIGN_RIGHT.xpm b/share/metview/icons_mv5/ALIGN_RIGHT.xpm
deleted file mode 100644
index 16b6140..0000000
--- a/share/metview/icons_mv5/ALIGN_RIGHT.xpm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */
-static char * ALIGN_RIGHT_xpm[] = {
-"16 16 4 1",
-" c #FFFFFFFFFFFF",
-". c #000000000000",
-"X c #00000000FFFF",
-"o c #FFFFCCCC9999",
-" ",
-" ......XX ",
-" .oooooXX ",
-" .oooooXX ",
-" ......XX ",
-" XX ",
-" ............XX ",
-" .oooooooooooXX ",
-" .oooooooooooXX ",
-" ............XX ",
-" XX ",
-" .........XX ",
-" .ooooooooXX ",
-" .ooooooooXX ",
-" .........XX ",
-" "};
diff --git a/share/metview/icons_mv5/ALIGN_TOP.xpm b/share/metview/icons_mv5/ALIGN_TOP.xpm
deleted file mode 100644
index 7fe57ff..0000000
--- a/share/metview/icons_mv5/ALIGN_TOP.xpm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */
-static char * ALIGN_TOP[] = {
-"16 16 4 1",
-" c #FFFFFFFFFFFF",
-". c #00000000FFFF",
-"X c #000000000000",
-"o c #FFFFCCCC9999",
-" ",
-" ",
-" .............. ",
-" .............. ",
-" XooX XooX XooX ",
-" XooX XooX XooX ",
-" XooX XooX XooX ",
-" XooX XooX XooX ",
-" XXXX XooX XooX ",
-" XooX XooX ",
-" XooX XooX ",
-" XooX XXXX ",
-" XooX ",
-" XXXX ",
-" ",
-" "};
diff --git a/share/metview/icons_mv5/DISTR_HCENTER.xpm b/share/metview/icons_mv5/DISTR_HCENTER.xpm
deleted file mode 100644
index efb5555..0000000
--- a/share/metview/icons_mv5/DISTR_HCENTER.xpm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */
-static char * DISTR_HCENTER_xpm[] = {
-"16 16 4 1",
-" c #FFFFFFFFFFFF",
-". c #000000000000",
-"X c #FFFFCCCC9999",
-"o c #00000000FFFF",
-" ",
-".... ....",
-".XX. .XX.",
-".XX. .XX.",
-".XX. .XX.",
-".XX. .XX.",
-".XX. o o .XX.",
-".XX. oo oo .XX.",
-".XX.oooooooo.XX.",
-".XX. oo oo .XX.",
-".XX. o o .XX.",
-".XX. .XX.",
-".XX. .XX.",
-".XX. .XX.",
-".... ....",
-" "};
diff --git a/share/metview/icons_mv5/DISTR_VCENTER.xpm b/share/metview/icons_mv5/DISTR_VCENTER.xpm
deleted file mode 100644
index 1ed0181..0000000
--- a/share/metview/icons_mv5/DISTR_VCENTER.xpm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* XPM */
-static char * DISTR_VCENTER_xpm[] = {
-"16 16 4 1",
-" c #FFFFFFFFFFFF",
-". c #000000000000",
-"X c #FFFFCCCC9999",
-"o c #00000000FFFF",
-" .............. ",
-" .XXXXXXXXXXXX. ",
-" .XXXXXXXXXXXX. ",
-" .............. ",
-" o ",
-" ooo ",
-" ooooo ",
-" o ",
-" o ",
-" ooooo ",
-" ooo ",
-" o ",
-" .............. ",
-" .XXXXXXXXXXXX. ",
-" .XXXXXXXXXXXX. ",
-" .............. "};
diff --git a/share/metview/icons_mv5/FOLDER.svg b/share/metview/icons_mv5/FOLDER.svg
index fb5a7ce..484638b 100644
--- a/share/metview/icons_mv5/FOLDER.svg
+++ b/share/metview/icons_mv5/FOLDER.svg
@@ -14,7 +14,7 @@
height="64px"
id="svg2985"
version="1.1"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="FOLDER.svg"
sodipodi:version="0.32"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
@@ -23,26 +23,97 @@
<defs
id="defs2987">
<linearGradient
- id="linearGradient3753">
+ id="linearGradient5915">
<stop
- style="stop-color:#e2c36e;stop-opacity:1;"
+ id="stop5917"
offset="0"
- id="stop3755" />
+ style="stop-color:#e9a552;stop-opacity:1;" />
<stop
- style="stop-color:#ffef8a;stop-opacity:0.34210527;"
+ id="stop5919"
offset="1"
- id="stop3757" />
+ style="stop-color:#e7d28b;stop-opacity:1;" />
</linearGradient>
<linearGradient
+ id="linearGradient3782">
+ <stop
+ style="stop-color:#6a6d71;stop-opacity:1;"
+ offset="0"
+ id="stop3784" />
+ <stop
+ style="stop-color:#606164;stop-opacity:1;"
+ offset="1"
+ id="stop3786" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3765">
+ <stop
+ style="stop-color:#e8c25e;stop-opacity:1;"
+ offset="0"
+ id="stop3767" />
+ <stop
+ style="stop-color:#f7e198;stop-opacity:1;"
+ offset="1"
+ id="stop3769" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3775">
+ <stop
+ id="stop3777"
+ offset="0"
+ style="stop-color:#f5f5f5;stop-opacity:1;" />
+ <stop
+ id="stop3779"
+ offset="1"
+ style="stop-color:#d3d8da;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3765"
+ id="linearGradient3771"
+ x1="42.063648"
+ y1="53.744427"
+ x2="6.6376882"
+ y2="20.168556"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97402742,0,0,0.98533799,0.9262646,-0.51992866)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3775"
+ id="linearGradient3776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.51031759,0,0,-0.10859702,5.7447143,12.683803)"
+ x1="35.657509"
+ y1="8.7720575"
+ x2="10.400817"
+ y2="59.972881" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3782"
+ id="linearGradient3788"
+ x1="71.889565"
+ y1="61.835026"
+ x2="-7.6111097"
+ y2="20.009457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97402742,0,0,0.98533799,1.0519451,0.22244489)" />
+ <linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3753"
- id="linearGradient3759"
- x1="20.381924"
- y1="25.776665"
- x2="36.550461"
- y2="-0.56834435"
+ xlink:href="#linearGradient5915"
+ id="linearGradient3908"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+ gradientTransform="matrix(0.97812443,0,0,0.96376754,0.26680554,0.27169084)"
+ x1="57.456539"
+ y1="55.657021"
+ x2="21.214657"
+ y2="28.643499" />
+ <filter
+ inkscape:collect="always"
+ id="filter3958">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.52577735"
+ id="feGaussianBlur3960" />
+ </filter>
</defs>
<sodipodi:namedview
id="base"
@@ -51,22 +122,26 @@
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
- inkscape:zoom="10.27"
- inkscape:cx="14.271484"
- inkscape:cy="29.889877"
+ inkscape:zoom="13.078125"
+ inkscape:cx="19.842294"
+ inkscape:cy="31.016187"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
- inkscape:window-width="1672"
- inkscape:window-height="973"
- inkscape:window-x="0"
- inkscape:window-y="0"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:snap-from-guide="false"
objecttolerance="2"
gridtolerance="2"
- guidetolerance="2">
+ guidetolerance="2"
+ inkscape:snap-grids="false"
+ inkscape:snap-to-guides="false"
+ showguides="true"
+ inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid2995"
@@ -83,7 +158,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title>Metview icon</dc:title>
<cc:license
rdf:resource="Apache License 2.0" />
<dc:creator>
@@ -107,20 +182,45 @@
</rdf:RDF>
</metadata>
<g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="bg" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="back"
+ style="display:inline">
+ <path
+ sodipodi:nodetypes="cscsssccscc"
+ inkscape:connector-curvature="0"
+ id="path3773"
+ d="m 14.639003,18.145717 c 0,0 -10.8865307,1.596686 -10.8865307,0.36494 l 0,-10.8387185 C 4.1886774,4.486631 6.9531595,4.9691395 8.6280197,4.9691395 l 12.8291753,0 c 3.723824,0 4.890189,5.0308615 7.51339,5.0308615 l 14.60995,0 13.290761,0 c 2.624204,-0.025138 4.203767,0.05826 4.231965,2.598628 l 0.06562,5.912028 z"
+ style="fill:url(#linearGradient3776);fill-opacity:1;stroke:#67697a;stroke-width:0.97966641000000021;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
- style="fill:url(#linearGradient3759);fill-opacity:1;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
- id="rect2984"
+ style="fill:url(#linearGradient3771);fill-opacity:1;stroke:url(#linearGradient3788);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 2.2227165,15.900209 3,58 61.647623,58.150685 c 0.01089,-0.03484 0.09732,-9.244196 0.186629,-19.082195 0.102615,-11.304034 0.209032,-23.438023 0.209032,-23.438023 z"
+ id="path2995"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccccccc" />
+ sodipodi:nodetypes="cccscc" />
+ <rect
+ style="fill:#939dac;fill-opacity:1;stroke:none"
+ id="rect3780"
+ width="16.300121"
+ height="2.2715573"
+ x="6.0729151"
+ y="7.5083022"
+ rx="0"
+ ry="0" />
<path
- style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
- d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
- id="rect3761"
+ style="fill:url(#linearGradient3908);fill-opacity:1.0;stroke:none;filter:url(#filter3958)"
+ d="m 60.74873,16.781922 -7.969482,0.152927 c 0.811526,2.291673 1.223877,3.868364 1.223877,6.341886 0,15.977042 -17.99942,28.915335 -40.199634,28.915335 -4.0250374,0 -6.1915181,-0.323257 -9.8580012,-1.115606 L 3.9312729,56.898826 60.334674,57.12812 C 59.364188,56.213801 60.748742,16.781922 60.74873,16.781922 z"
+ id="path3893"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
+ sodipodi:nodetypes="ccsscccc" />
</g>
</svg>
diff --git a/share/metview/icons_mv5/GEOPOINTS.svg b/share/metview/icons_mv5/GEOPOINTS.svg
index e50a239..79f4e6c 100644
--- a/share/metview/icons_mv5/GEOPOINTS.svg
+++ b/share/metview/icons_mv5/GEOPOINTS.svg
@@ -385,16 +385,16 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.5625"
- inkscape:cx="23.640775"
+ inkscape:cx="12.743478"
inkscape:cy="34.154381"
- inkscape:current-layer="layer11"
+ inkscape:current-layer="layer3"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1593"
inkscape:window-height="1066"
- inkscape:window-x="2239"
- inkscape:window-y="12"
+ inkscape:window-x="2203"
+ inkscape:window-y="35"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-maximized="0">
@@ -481,79 +481,4 @@
d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
transform="matrix(2.2119815,0.02524672,0,1.3464236,-15.142857,-15.494593)" />
</g>
- <g
- inkscape:groupmode="layer"
- id="layer5"
- inkscape:label="tect"
- style="display:inline">
- <rect
- style="font-size:18px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:43.99999976%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:0.70588235;fill-rule:evenodd;stroke:#1b1d35;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;font-family:Arial;-inkscape-font-specification:Arial Bold"
- id="rect3878"
- width="18.999998"
- height="48"
- x="-61"
- y="8"
- transform="matrix(0,-1,1,0,0,0)" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer11"
- inkscape:label="points"
- style="display:inline">
- <flowRoot
- xml:space="preserve"
- id="flowRoot3919"
- style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
- transform="translate(-26.605469,-29.812823)"><flowRegion
- id="flowRegion3921"><rect
- id="rect3923"
- width="30.010811"
- height="15.394594"
- x="64"
- y="36.583782" /></flowRegion><flowPara
- id="flowPara3925"
- style="font-family:Arial;-inkscape-font-specification:Arial" /></flowRoot> <text
- xml:space="preserve"
- style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
- x="46.702702"
- y="46.270271"
- id="text3938"><tspan
- sodipodi:role="line"
- id="tspan3940"
- x="46.702702"
- y="46.270271" /><tspan
- sodipodi:role="line"
- id="tspan3942"
- x="46.702702"
- y="61.270271" /></text>
- <text
- xml:space="preserve"
- style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
- x="105.08108"
- y="-37.18919"
- id="text3837"><tspan
- sodipodi:role="line"
- id="tspan3839"
- x="105.08108"
- y="-37.18919" /><tspan
- sodipodi:role="line"
- id="tspan3841"
- x="105.08108"
- y="-22.18919" /><tspan
- sodipodi:role="line"
- id="tspan3843"
- x="105.08108"
- y="-7.1891899" /></text>
- <text
- xml:space="preserve"
- style="font-size:9px;font-style:normal;font-weight:bold;fill:#182e45;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Arial Bold"
- x="13"
- y="58"
- id="text5442"><tspan
- sodipodi:role="line"
- id="tspan5444"
- x="13"
- y="58"
- style="font-size:18px;font-weight:bold;fill:#182e45;font-family:Arial;-inkscape-font-specification:Arial Bold">GPT</tspan></text>
- </g>
</svg>
diff --git a/share/metview/icons_mv5/GRIB.svg b/share/metview/icons_mv5/GRIB.svg
index 95acf51..31db5c2 100644
--- a/share/metview/icons_mv5/GRIB.svg
+++ b/share/metview/icons_mv5/GRIB.svg
@@ -36,43 +36,6 @@
style="stop-color:#bfdcb5;stop-opacity:1;" />
</linearGradient>
<linearGradient
- id="linearGradient3841">
- <stop
- id="stop3843"
- offset="0"
- style="stop-color:#ce979b;stop-opacity:1;" />
- <stop
- id="stop3845"
- offset="1"
- style="stop-color:#e4c9cd;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3669">
- <stop
- style="stop-color:#f80a20;stop-opacity:1;"
- offset="0"
- id="stop3671" />
- <stop
- style="stop-color:#d2a7ae;stop-opacity:1;"
- offset="1"
- id="stop3673" />
- </linearGradient>
- <linearGradient
- id="linearGradient4292">
- <stop
- style="stop-color:#e4a312;stop-opacity:1"
- offset="0"
- id="stop4294" />
- <stop
- id="stop4308"
- offset="0.5"
- style="stop-color:#dfae71;stop-opacity:1" />
- <stop
- style="stop-color:#ccd6c8;stop-opacity:1;"
- offset="1"
- id="stop4296" />
- </linearGradient>
- <linearGradient
inkscape:collect="always"
id="linearGradient4275">
<stop
@@ -85,39 +48,6 @@
id="stop4279" />
</linearGradient>
<linearGradient
- id="linearGradient4267">
- <stop
- style="stop-color:#2760b3;stop-opacity:1;"
- offset="0"
- id="stop4269" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop4271" />
- </linearGradient>
- <linearGradient
- id="linearGradient4229">
- <stop
- style="stop-color:#63a1d0;stop-opacity:1;"
- offset="0"
- id="stop4231" />
- <stop
- style="stop-color:#adc1af;stop-opacity:1;"
- offset="1"
- id="stop4233" />
- </linearGradient>
- <linearGradient
- id="linearGradient3678">
- <stop
- style="stop-color:#d9dce6;stop-opacity:1;"
- offset="0"
- id="stop3680" />
- <stop
- style="stop-color:#324060;stop-opacity:1;"
- offset="1"
- id="stop3682" />
- </linearGradient>
- <linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4749"
id="linearGradient3684"
@@ -127,13 +57,6 @@
y2="32.444443"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0003011,0,0,1.02,0.74429032,-1.12)" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="10.11052 : 23.16572 : 1"
- inkscape:vp_y="2578.4206 : 1488.6518 : 0"
- inkscape:vp_z="-97.407027 : 27.144512 : 1"
- inkscape:persp3d-origin="54.253548 : 40.091112 : 1"
- id="perspective3696" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4749"
@@ -164,162 +87,6 @@
y2="34.875"
gradientUnits="userSpaceOnUse" />
<linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4292"
- id="linearGradient4298"
- x1="22.578678"
- y1="19.313492"
- x2="22.57868"
- y2="47.827412"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.6692699,0,0,1.4331683,9.6998665,-1.8254253)" />
- <inkscape:perspective
- id="perspective3647"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3669"
- id="linearGradient3675"
- x1="53.5"
- y1="52"
- x2="38.5"
- y2="53"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-8,1)" />
- <inkscape:perspective
- id="perspective3687"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3669-2"
- id="linearGradient3675-3"
- x1="43"
- y1="51"
- x2="52"
- y2="33"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient3669-2">
- <stop
- style="stop-color:#0e23f7;stop-opacity:1;"
- offset="0"
- id="stop3671-9" />
- <stop
- style="stop-color:#91cadc;stop-opacity:1;"
- offset="1"
- id="stop3673-5" />
- </linearGradient>
- <inkscape:perspective
- id="perspective3735"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3763"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3763-5"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3763-7"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3763-9"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3763-72"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3763-2"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3763-50"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3841"
- id="radialGradient3848"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3497297,-0.00262664,0.0082791,2.1706551,-25.042772,-59.056407)"
- cx="46.368687"
- cy="51.512447"
- fx="46.368687"
- fy="51.512447"
- r="2.7461929" />
- <inkscape:perspective
- id="perspective3982"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective4013"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4229-4"
- id="linearGradient3876"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.26347355,-0.26497911,0.26497911,0.26347355,17.717064,13.161987)"
- x1="7.4365482"
- y1="14.912783"
- x2="17.436548"
- y2="14.912783" />
- <linearGradient
- id="linearGradient4229-4">
- <stop
- style="stop-color:#8866da;stop-opacity:1;"
- offset="0"
- id="stop4231-6" />
- <stop
- style="stop-color:#a7cedb;stop-opacity:1;"
- offset="1"
- id="stop4233-9" />
- </linearGradient>
- <linearGradient
y2="14.912783"
x2="17.436548"
y1="14.912783"
@@ -338,15 +105,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.5625"
- inkscape:cx="6.4162634"
+ inkscape:cx="-4.4810339"
inkscape:cy="29.094922"
- inkscape:current-layer="layer1"
+ inkscape:current-layer="layer3"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1593"
inkscape:window-height="1001"
- inkscape:window-x="2212"
+ inkscape:window-x="2203"
inkscape:window-y="100"
showguides="true"
inkscape:guide-bbox="true"
@@ -434,29 +201,4 @@
d="m 34.875,34.875 a 13.5625,22.28125 0 1 1 -27.125,0 13.5625,22.28125 0 1 1 27.125,0 z"
transform="matrix(2.2119815,0.02524672,0,1.3464236,-15.142857,-15.494593)" />
</g>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="box"
- style="display:inline">
- <rect
- style="font-size:18px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:43.99999976%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:0.70588235;fill-rule:evenodd;stroke:#1b1d35;stroke-width:0.89999992;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;font-family:Arial;-inkscape-font-specification:Arial Bold"
- id="rect3878"
- width="18.999998"
- height="50"
- x="-61"
- y="7.0000005"
- transform="matrix(0,-1,1,0,0,0)" />
- <text
- xml:space="preserve"
- style="font-size:9px;font-style:normal;font-weight:normal;fill:#182e45;fill-opacity:1;stroke:none;font-family:Courier New KOI-8;-inkscape-font-specification:Courier New KOI-8"
- x="10"
- y="58"
- id="text4687"><tspan
- sodipodi:role="line"
- id="tspan4689"
- x="10"
- y="58"
- style="font-size:18px;font-weight:bold;fill:#182e45;font-family:Arial;-inkscape-font-specification:Arial Bold">GRIB</tspan></text>
- </g>
</svg>
diff --git a/share/metview/icons_mv5/HOME.svg b/share/metview/icons_mv5/HOME.svg
index a794454..453ab02 100644
--- a/share/metview/icons_mv5/HOME.svg
+++ b/share/metview/icons_mv5/HOME.svg
@@ -15,10 +15,28 @@
id="svg2"
version="1.1"
inkscape:version="0.47 r22583"
- sodipodi:docname="home.svg"
+ sodipodi:docname="HOME.svg"
style="display:inline">
<defs
id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ id="perspective77" />
+ <linearGradient
+ id="linearGradient4494">
+ <stop
+ style="stop-color:#bfbfbf;stop-opacity:1;"
+ offset="0"
+ id="stop4496" />
+ <stop
+ style="stop-color:#4e4e4e;stop-opacity:1;"
+ offset="1"
+ id="stop4498" />
+ </linearGradient>
<linearGradient
id="linearGradient3753">
<stop
@@ -44,6 +62,287 @@
id="linearGradient2910"
xlink:href="#linearGradient3753"
inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5915"
+ id="linearGradient3908"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97812443,0,0,0.96376754,-22.733194,1017.6339)"
+ x1="57.456539"
+ y1="55.657021"
+ x2="21.214657"
+ y2="28.643499" />
+ <linearGradient
+ id="linearGradient5915">
+ <stop
+ id="stop5917"
+ offset="0"
+ style="stop-color:#0b3591;stop-opacity:1;" />
+ <stop
+ id="stop5919"
+ offset="1"
+ style="stop-color:#81aecf;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3765"
+ id="linearGradient3771"
+ x1="42.063648"
+ y1="53.744427"
+ x2="6.6376882"
+ y2="20.168556"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.48530728,0,0,0.49093759,-47.142318,1039.6734)" />
+ <linearGradient
+ id="linearGradient3765">
+ <stop
+ style="stop-color:#2f56ab;stop-opacity:1;"
+ offset="0"
+ id="stop3767" />
+ <stop
+ style="stop-color:#3c79ab;stop-opacity:1;"
+ offset="1"
+ id="stop3769" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3782"
+ id="linearGradient3788"
+ x1="71.889565"
+ y1="61.835026"
+ x2="-7.6111097"
+ y2="20.009457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.48530728,0,0,0.49093759,-47.079698,1040.0432)" />
+ <linearGradient
+ id="linearGradient3782">
+ <stop
+ style="stop-color:#6a6d71;stop-opacity:1;"
+ offset="0"
+ id="stop3784" />
+ <stop
+ style="stop-color:#606164;stop-opacity:1;"
+ offset="1"
+ id="stop3786" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3775"
+ id="linearGradient3776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.51031759,0,0,-0.10859702,5.7447143,12.683803)"
+ x1="35.657509"
+ y1="8.7720575"
+ x2="10.400817"
+ y2="59.972881" />
+ <linearGradient
+ id="linearGradient3775">
+ <stop
+ id="stop3777"
+ offset="0"
+ style="stop-color:#f5f5f5;stop-opacity:1;" />
+ <stop
+ id="stop3779"
+ offset="1"
+ style="stop-color:#d3d8da;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ y2="59.972881"
+ x2="10.400817"
+ y1="8.7720575"
+ x1="35.657509"
+ gradientTransform="matrix(0.25426475,0,0,-0.05410769,-44.741535,1046.252)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6551"
+ xlink:href="#linearGradient3775"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3753-9"
+ id="linearGradient4500-8"
+ x1="14.476191"
+ y1="1055.2544"
+ x2="16.796991"
+ y2="1033.8058"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29.197995,-11.160401)" />
+ <linearGradient
+ id="linearGradient3753-9">
+ <stop
+ style="stop-color:#539ec0;stop-opacity:1;"
+ offset="0"
+ id="stop3755-8" />
+ <stop
+ id="stop3713-3"
+ offset="0.5"
+ style="stop-color:#6798c4;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5391d7;stop-opacity:1;"
+ offset="1"
+ id="stop3757-5" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3728">
+ <stop
+ style="stop-color:#f1f3fb;stop-opacity:1;"
+ offset="0"
+ id="stop3730" />
+ <stop
+ style="stop-color:#273df9;stop-opacity:0;"
+ offset="1"
+ id="stop3732" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3756">
+ <stop
+ id="stop3758"
+ offset="0"
+ style="stop-color:#519aed;stop-opacity:1;" />
+ <stop
+ id="stop3760"
+ offset="1"
+ style="stop-color:#e9dddd;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3614"
+ id="linearGradient3691"
+ gradientUnits="userSpaceOnUse"
+ x1="15.413333"
+ y1="12.89746"
+ x2="15.413333"
+ y2="31.085577" />
+ <linearGradient
+ id="linearGradient3614">
+ <stop
+ style="stop-color:#2c71d9;stop-opacity:1;"
+ offset="0"
+ id="stop3616" />
+ <stop
+ style="stop-color:#ececec;stop-opacity:1;"
+ offset="1"
+ id="stop3618" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3602"
+ id="linearGradient3693"
+ gradientUnits="userSpaceOnUse"
+ x1="15.413333"
+ y1="2.2337441"
+ x2="15.413333"
+ y2="31.085577" />
+ <linearGradient
+ id="linearGradient3602">
+ <stop
+ style="stop-color:#f5f5f5;stop-opacity:1;"
+ offset="0"
+ id="stop3604" />
+ <stop
+ style="stop-color:#141bc6;stop-opacity:1;"
+ offset="1"
+ id="stop3606" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3728-2"
+ id="linearGradient3710-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1228948,0,0,-1.210218,1.8048354,72.453625)"
+ x1="15.413333"
+ y1="3.4795053"
+ x2="15.941438"
+ y2="18.883736" />
+ <linearGradient
+ id="linearGradient3728-2">
+ <stop
+ style="stop-color:#113684;stop-opacity:1;"
+ offset="0"
+ id="stop3730-3" />
+ <stop
+ style="stop-color:#273df9;stop-opacity:0;"
+ offset="1"
+ id="stop3732-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3756-6"
+ id="linearGradient3720-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1228948,0,0,-1.210218,1.8048354,72.453625)"
+ x1="24.437176"
+ y1="3.4853487"
+ x2="15.941438"
+ y2="18.883736" />
+ <linearGradient
+ id="linearGradient3756-6">
+ <stop
+ id="stop3758-6"
+ offset="0"
+ style="stop-color:#519aed;stop-opacity:1;" />
+ <stop
+ id="stop3760-6"
+ offset="1"
+ style="stop-color:#0c3a87;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ y2="31.085577"
+ x2="15.413333"
+ y1="12.89746"
+ x1="15.413333"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6782-2"
+ xlink:href="#linearGradient3614-9"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3614-9">
+ <stop
+ style="stop-color:#1a52b9;stop-opacity:1;"
+ offset="0"
+ id="stop3616-0" />
+ <stop
+ style="stop-color:#7da0d8;stop-opacity:1;"
+ offset="1"
+ id="stop3618-4" />
+ </linearGradient>
+ <linearGradient
+ y2="31.085577"
+ x2="15.413333"
+ y1="2.2337441"
+ x1="15.413333"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6784-9"
+ xlink:href="#linearGradient3602-3"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3602-3">
+ <stop
+ style="stop-color:#7da0ff;stop-opacity:1;"
+ offset="0"
+ id="stop3604-1" />
+ <stop
+ style="stop-color:#16459c;stop-opacity:1;"
+ offset="1"
+ id="stop3606-1" />
+ </linearGradient>
+ <linearGradient
+ y2="31.015812"
+ x2="15.261118"
+ y1="10.246381"
+ x1="15.413333"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6868"
+ xlink:href="#linearGradient3614-9"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="31.015812"
+ x2="15.261118"
+ y1="2.2337441"
+ x1="15.413333"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6870"
+ xlink:href="#linearGradient3602-3"
+ inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
@@ -53,15 +352,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="12.46875"
- inkscape:cx="1.5704858"
- inkscape:cy="19.139085"
+ inkscape:cx="-2.6714122"
+ inkscape:cy="10.244397"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:window-width="1651"
- inkscape:window-height="1068"
- inkscape:window-x="2159"
- inkscape:window-y="103"
+ inkscape:window-height="967"
+ inkscape:window-x="1920"
+ inkscape:window-y="35"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true"
@@ -107,16 +406,36 @@
</rdf:RDF>
</metadata>
<g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="bg" />
+ <g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1020.3622)"
style="display:inline">
<path
- sodipodi:nodetypes="ccccccccccccccc"
+ style="fill:#4a88c4;fill-opacity:1;stroke:none"
+ d="m -0.09022506,1033.2486 3.19970496,3.5934 12.9992101,-9.7552 13.309483,9.8567 2.672054,-3.6424 -15.981537,-11.5429 z"
+ id="path6943"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:none;stroke:none"
+ d="m -24.701754,1035.9211 -0.0802,10.7469 5.694235,0 -0.0802,-6.4161 4.812029,-0.08 0.0802,6.4963 3.127819,0.08 -0.240601,-10.5063 -6.817043,-6.3358 z"
+ id="path6945"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#4a88c4;fill-opacity:1;stroke:none"
+ d="m 5.7920614,1036.1315 0,13.9199 10.3166286,0 0,-8.8581 6.447891,0 0,8.8581 3.868736,0 0,-13.9199 -10.316627,-7.5926 z"
+ id="path6949"
inkscape:connector-curvature="0"
- id="path3715"
- d="m 5.2413216,1050.9903 0.133129,-18.308 -4.2264311,0 12.5644495,-9.0077 2.228061,-1.5976 6.339645,4.3196 8.765878,6.5227 -3.949479,0 -0.02429,18.0705 -4.91255,5e-4 0,-10.8423 -8.886327,0 0,10.8423 -8.0320799,-5e-4 -1.6e-6,5e-4 z"
- style="fill:#87aade;fill-opacity:1;stroke:#2c2e6d;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ sodipodi:nodetypes="cccccccccc" />
</g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="fg"
+ style="display:inline" />
</svg>
diff --git a/share/metview/icons_mv5/MACRO.svg b/share/metview/icons_mv5/MACRO.svg
index 02c0b57..b4da9b1 100644
--- a/share/metview/icons_mv5/MACRO.svg
+++ b/share/metview/icons_mv5/MACRO.svg
@@ -14,8 +14,8 @@
height="64px"
id="svg2160"
sodipodi:version="0.32"
- inkscape:version="0.47 r22583"
- sodipodi:docname="macro.svg"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="MACRO.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/tmp/cgr/work/icons/metview/macro.png"
inkscape:export-xdpi="45"
@@ -24,26 +24,79 @@
<defs
id="defs2162">
<linearGradient
+ id="linearGradient3909">
+ <stop
+ id="stop3911"
+ offset="0"
+ style="stop-color:#e95b14;stop-opacity:1;" />
+ <stop
+ id="stop3913"
+ offset="1"
+ style="stop-color:#e19b6a;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
id="linearGradient3143">
<stop
- style="stop-color:#ec6a4e;stop-opacity:1"
+ style="stop-color:#ea672b;stop-opacity:1;"
offset="0"
id="stop3145" />
<stop
- style="stop-color:#f1a394;stop-opacity:1"
+ style="stop-color:#dcc5bd;stop-opacity:1;"
offset="1"
id="stop3147" />
</linearGradient>
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3143"
- id="linearGradient3152"
- x1="12.037533"
- y1="15.457104"
- x2="50.160858"
- y2="45.912868"
+ xlink:href="#linearGradient3909"
+ id="linearGradient3854-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0026322,0,0,0.69941857,38.154633,18.143246)"
+ x1="50.89806"
+ y1="34.723392"
+ x2="6.2515035"
+ y2="60.060505" />
+ <linearGradient
+ id="linearGradient3143-7">
+ <stop
+ style="stop-color:#fe8a4d;stop-opacity:1;"
+ offset="0"
+ id="stop3145-4" />
+ <stop
+ style="stop-color:#dcc5bd;stop-opacity:1;"
+ offset="1"
+ id="stop3147-0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3143-7"
+ id="linearGradient3845-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0026322,0,0,0.7350282,-70.343025,4.5059883)"
+ x1="38.319908"
+ y1="34.029804"
+ x2="5.9092412"
+ y2="10.963448" />
+ <linearGradient
+ id="linearGradient3872">
+ <stop
+ style="stop-color:#ea672b;stop-opacity:1;"
+ offset="0"
+ id="stop3874" />
+ <stop
+ style="stop-color:#dcc5bd;stop-opacity:1;"
+ offset="1"
+ id="stop3876" />
+ </linearGradient>
+ <linearGradient
+ y2="-1.058488"
+ x2="-2.0483651"
+ y1="46.168453"
+ x1="31.303526"
+ gradientTransform="matrix(1.0026322,0,0,0.7350282,0.25893914,10.151074)"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0026322,0,0,0.7350282,-8.4226285e-2,8.0357927)" />
+ id="linearGradient3880"
+ xlink:href="#linearGradient3143-7"
+ inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
@@ -53,16 +106,22 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.65625"
- inkscape:cx="32"
- inkscape:cy="33.418031"
+ inkscape:cx="41.457869"
+ inkscape:cy="35.589192"
inkscape:current-layer="layer2"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
- inkscape:window-width="1166"
- inkscape:window-height="956"
- inkscape:window-x="2072"
- inkscape:window-y="0" />
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:snap-grids="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3031" />
+ </sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
@@ -97,136 +156,140 @@
<g
inkscape:groupmode="layer"
id="layer2"
- inkscape:label="bg">
+ inkscape:label="bg"
+ style="display:inline">
<path
- style="fill:url(#linearGradient3152);fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:0.94039041px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 2.4701952,49.529805 L 61.529803,49.529805 L 61.529803,12.470196 L 18.674981,12.619931 L 2.4701952,24.598794 L 2.4701952,49.529805 z "
- id="path2169"
- sodipodi:nodetypes="cccccc" />
+ inkscape:connector-curvature="0"
+ style="fill:url(#linearGradient3880);fill-opacity:1;fill-rule:evenodd;stroke:#575757;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 2.8133601,51.645085 28.7886039,0 30.271004,0 0,-37.059608 -42.854822,0.149735 -16.2047859,11.978863 z"
+ id="path3843-4"
+ sodipodi:nodetypes="ccccccc" />
</g>
<g
id="layer1"
inkscape:label="holes"
- inkscape:groupmode="layer">
+ inkscape:groupmode="layer"
+ style="display:inline"
+ sodipodi:insensitive="true">
<path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3151"
- sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
- sodipodi:rx="3.2727273"
+ transform="matrix(0.4377048,0,0,0.3789124,6.8517948,16.719312)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,6.5395477,15.213011)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3156"
- sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
sodipodi:rx="3.2727273"
- sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,6.5395477,23.773008)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3158"
- sodipodi:cx="17.818182"
sodipodi:cy="29.454546"
- sodipodi:rx="3.2727273"
- sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,25.486737,23.773008)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3160"
sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
- sodipodi:rx="3.2727273"
- sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,6.5395477,32.333006)" />
+ id="path3803"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
<path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3162"
- sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
- sodipodi:rx="3.2727273"
+ transform="matrix(0.4377048,0,0,0.3789124,6.8517948,25.279309)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,36.456161,15.213011)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3164"
- sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
sodipodi:rx="3.2727273"
- sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,45.431144,15.213011)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3166"
- sodipodi:cx="17.818182"
sodipodi:cy="29.454546"
- sodipodi:rx="3.2727273"
- sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,25.486737,32.333006)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3168"
sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
- sodipodi:rx="3.2727273"
- sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,25.486737,7.9427495)" />
+ id="path3805"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
<path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3170"
- sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
- sodipodi:rx="3.2727273"
+ transform="matrix(0.4377048,0,0,0.3789124,25.798984,25.279309)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,16.054581,23.773008)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3172"
- sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
sodipodi:rx="3.2727273"
+ sodipodi:cy="29.454546"
+ sodipodi:cx="17.818182"
+ id="path3807"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.4377048,0,0,0.3789124,6.8517948,33.839307)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,25.486737,15.213011)" />
+ sodipodi:rx="3.2727273"
+ sodipodi:cy="29.454546"
+ sodipodi:cx="17.818182"
+ id="path3809"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
<path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3174"
+ transform="matrix(0.4377048,0,0,0.3789124,36.768408,16.719312)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+ sodipodi:ry="3.090909"
+ sodipodi:rx="3.2727273"
+ sodipodi:cy="29.454546"
sodipodi:cx="17.818182"
+ id="path3811"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.4377048,0,0,0.3789124,45.743391,16.719312)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+ sodipodi:ry="3.090909"
+ sodipodi:rx="3.2727273"
sodipodi:cy="29.454546"
+ sodipodi:cx="17.818182"
+ id="path3813"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.4377048,0,0,0.3789124,25.798984,33.839307)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+ sodipodi:ry="3.090909"
sodipodi:rx="3.2727273"
+ sodipodi:cy="29.454546"
+ sodipodi:cx="17.818182"
+ id="path3815"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.4377048,0,0,0.3789124,25.798984,9.4490503)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,36.456161,32.333006)" />
+ sodipodi:rx="3.2727273"
+ sodipodi:cy="29.454546"
+ sodipodi:cx="17.818182"
+ id="path3817"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
<path
- sodipodi:type="arc"
- style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path3176"
+ transform="matrix(0.4377048,0,0,0.3789124,16.366828,25.279309)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+ sodipodi:ry="3.090909"
+ sodipodi:rx="3.2727273"
+ sodipodi:cy="29.454546"
sodipodi:cx="17.818182"
+ id="path3819"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.4377048,0,0,0.3789124,25.798984,16.719312)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+ sodipodi:ry="3.090909"
+ sodipodi:rx="3.2727273"
sodipodi:cy="29.454546"
+ sodipodi:cx="17.818182"
+ id="path3821"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.4377048,0,0,0.3789124,36.768408,33.839307)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
+ sodipodi:ry="3.090909"
sodipodi:rx="3.2727273"
+ sodipodi:cy="29.454546"
+ sodipodi:cx="17.818182"
+ id="path3823"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.4377048,0,0,0.3789124,45.743391,25.279309)"
+ d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
sodipodi:ry="3.090909"
- d="M 21.090909 29.454546 A 3.2727273 3.090909 0 1 1 14.545455,29.454546 A 3.2727273 3.090909 0 1 1 21.090909 29.454546 z"
- transform="matrix(0.4377048,0,0,0.3789124,45.431144,23.773008)" />
+ sodipodi:rx="3.2727273"
+ sodipodi:cy="29.454546"
+ sodipodi:cx="17.818182"
+ id="path3825"
+ style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
</g>
</svg>
diff --git a/share/metview/icons_mv5/MHOVMOELLERDATA.xpm b/share/metview/icons_mv5/MHOVMOELLERDATA.xpm
new file mode 100755
index 0000000..5fd516b
--- /dev/null
+++ b/share/metview/icons_mv5/MHOVMOELLERDATA.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *HOVMOELLERDATA[]={
+"32 32 7 1",
+"c c #000000",
+"d c #007fff",
+"a c #777777",
+"b c #ccccff",
+"e c #d9b777",
+"# c #ff00ff",
+". c #ffffff",
+"................................",
+"................................",
+"................................",
+"................................",
+".....###........................",
+"......###.......................",
+"........###.....................",
+".........###aaaaaaaaaaa.........",
+".....aaaabb###bbbbbbbbbaaaa.....",
+"..aaabbbbbbbb##bbbbbbbbbbbbaaa..",
+".abbbbbbbbbbbb##bbbbbbbbbbbbbba.",
+"abbbbbbbbbbbbbb##bbbbbbbbbbbbbba",
+"bbbbbbbbbaaaaaaa##aaaaabbbbbbbbb",
+"bbbbbaaaabbbbbbbb##bbbbaaaabbbbb",
+"bbaaabbbbbbbbbbbbb##bbbbbbbaaabb",
+"babbbbbbbbbbbbbbbbb##bbbbbbbbbab",
+"abbbbbbbbbbbbbbbbbbb##bbbbbbbbba",
+"bbbbbbbbbaaaaaaaaaaaa#abbbbbbbbb",
+"bbbbbaaaabbbbbbbbbbbb##aaaabbbbb",
+"bbaaabbbbbbbbbbbbbbbbb##bbbaaabb",
+"babbbbbbbbbbbbbbbbbbbbb##bb#bbab",
+"abbbbbbbbbbbbbbbbbbbbbb##b##bbba",
+"bbbbbbbbbaaaaaaaaaaaaaa#####bbbb",
+"bbbbbaaaabbbbbbbbbbbbbbb####bbbb",
+"bbaaabbbbbbbbbbbbbbbbbb#####aabb",
+"babbbbbbbbbbbbbbbbbbbb######bbab",
+"abbbbbbbbbbbbbbbbbbbb#######bbba",
+"bbbbbbbbbccccccccccccccbbbbbbbbb",
+"bbbbbccccddddddeeeeeeeecccccbbbb",
+"bbcccdddddddddeeeeeeeeeeeeecccbb",
+"bcddddddddddeeeeeeeeeeeeeeeeeecb",
+"cddddddddddeeeeeeeeeeeeeeeeeeeec"};
diff --git a/share/metview/icons_mv5/MHOVMOELLERVIEW.xpm b/share/metview/icons_mv5/MHOVMOELLERVIEW.xpm
new file mode 100755
index 0000000..f29675e
--- /dev/null
+++ b/share/metview/icons_mv5/MHOVMOELLERVIEW.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+static char *test[]={
+"32 32 9 1",
+"e c #000000",
+"f c #007fff",
+". c #333333",
+"c c #777777",
+"a c #7e7e7e",
+"d c #ccccff",
+"g c #d9b777",
+"b c #ff00ff",
+"# c #ffffff",
+"................................",
+".##############################.",
+".#aaaaaaaaaaaaaaaaaaaaaaaaaaaa#.",
+".#a#bbbb#####################a#.",
+".#a###bbb####################a#.",
+".#a#####bbb##################a#.",
+".#a######bbbacccccccccc######a#.",
+".#a##ccccddbbbdddddddddcccc##a#.",
+".#accddddddddbbddddddddddddcca#.",
+".#adddddddddddbbddddddddddddda#.",
+".#addddddddddddbbdddddddddddda#.",
+".#addddddcccccccbbcccccdddddda#.",
+".#addccccddddddddbbddddccccdda#.",
+".#accdddddddddddddbbdddddddcca#.",
+".#addddddddddddddddbbdddddddda#.",
+".#adddddddddddddddddbbddddddda#.",
+".#addddddcccccccccccabcdddddda#.",
+".#addccccddddddddddddbbccccdda#.",
+".#accdddddddddddddddddbbdddcca#.",
+".#addddddddddddddddddddbbddbda#.",
+".#addddddddddddddddddddbbdbbda#.",
+".#addddddccccccccccccccbbbbbda#.",
+".#addccccdddddddddddddddbbbbda#.",
+".#accddddddddddddddddddbbbbbca#.",
+".#adddddddddddddddddddbbbbbbda#.",
+".#addddddddddddddddddbbbbbbbda#.",
+".#addddddeeeeeeeeeeeeeedddddda#.",
+".#addeeeeffffffggggggggeeeeeda#.",
+".#aeefffffffffgggggggggggggeea#.",
+".#aaaaaaaaaaaaaaaaaaaaaaaaaaaa#.",
+".##############################.",
+"................................"};
diff --git a/share/metview/icons_mv5/Makefile.am b/share/metview/icons_mv5/Makefile.am
index 8785b71..0274f5d 100644
--- a/share/metview/icons_mv5/Makefile.am
+++ b/share/metview/icons_mv5/Makefile.am
@@ -49,24 +49,20 @@ svg_icons = \
SVG.svg \
SYSTEM.svg \
TABLE.svg TABLEREADER.svg TABLEVISUALISER.svg \
- VELSTR.svg \
+ TAR.svg \
+ VAPOR_PREPARE.svg \
+ VELSTR.svg \
WASTEBASKET.svg \
WCS_CLIENT.svg \
WMS_CLIENT.svg
-icons = ALIGN_BOTTOM.xpm \
- ALIGN_LEFT.xpm \
- ALIGN_RIGHT.xpm \
- ALIGN_TOP.xpm \
- ANNOTATIONVIEW.xpm\
+icons = ANNOTATIONVIEW.xpm\
AVERAGE.xpm \
AVERAGEVIEW.xpm \
BINARY.xpm \
CLEANFILE.xpm \
COMPUTE.xpm \
DATACOVERAGE.xpm \
- DISTR_HCENTER.xpm \
- DISTR_VCENTER.xpm \
DRAWING_PRIORITY.xpm \
ECFS.xpm \
GDDRIVER.xpm \
@@ -74,11 +70,6 @@ icons = ALIGN_BOTTOM.xpm \
GIF.xpm \
GRIBVECTORS.xpm \
GeoToKML.xpm \
- help_area.xpm \
- help_line.xpm \
- help_map.xpm \
- help_point.xpm \
- help_station.xpm \
HOVMOELLERDATA.xpm \
JPEG.xpm \
LLMATRIX.xpm \
@@ -94,18 +85,17 @@ icons = ALIGN_BOTTOM.xpm \
MVPROFVIEW.xpm \
MXAVERAGE.xpm \
MXAVERAGEVIEW.xpm \
- MXSECTION.xpm \
+ MHOVMOELLERDATA.xpm \
+ MHOVMOELLERVIEW.xpm \
+ MXSECTION.xpm \
MXSECTIONVIEW.xpm \
MXSECTVIEW.xpm \
- NEWS.xpm \
OBSTAT_SCATTER.xpm OBSTAT_CURVE.xpm OBSTAT.xpm \
OVERLAY_CONTROL.xpm \
PAXIS.xpm \
PCOAST.xpm \
PCONT.xpm \
PGRAPH.xpm \
- PLOTPAGE.xpm \
- PLOTSUBPAGE.xpm \
PREFERENCES.xpm \
PSOUTPUT.xpm \
PSYMB.xpm \
@@ -117,10 +107,9 @@ icons = ALIGN_BOTTOM.xpm \
SERVICE.xpm \
SIMPLE_FORMULA.xpm \
STATIONS.xpm \
- SUBPAGEDETAILS.xpm \
SUPERPAGE.xpm \
SVGOUTPUT.xpm \
- TAR.xpm \
+ THERMODATA.xpm \
TIFF.xpm \
VPROF.xpm \
VPROFVIEW.xpm \
diff --git a/share/metview/icons_mv5/Makefile.in b/share/metview/icons_mv5/Makefile.in
index f21d957..f73c2f1 100644
--- a/share/metview/icons_mv5/Makefile.in
+++ b/share/metview/icons_mv5/Makefile.in
@@ -39,6 +39,7 @@ subdir = share/metview/icons_mv5
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -87,6 +88,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -110,6 +113,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -336,24 +340,20 @@ svg_icons = \
SVG.svg \
SYSTEM.svg \
TABLE.svg TABLEREADER.svg TABLEVISUALISER.svg \
- VELSTR.svg \
+ TAR.svg \
+ VAPOR_PREPARE.svg \
+ VELSTR.svg \
WASTEBASKET.svg \
WCS_CLIENT.svg \
WMS_CLIENT.svg
-icons = ALIGN_BOTTOM.xpm \
- ALIGN_LEFT.xpm \
- ALIGN_RIGHT.xpm \
- ALIGN_TOP.xpm \
- ANNOTATIONVIEW.xpm\
+icons = ANNOTATIONVIEW.xpm\
AVERAGE.xpm \
AVERAGEVIEW.xpm \
BINARY.xpm \
CLEANFILE.xpm \
COMPUTE.xpm \
DATACOVERAGE.xpm \
- DISTR_HCENTER.xpm \
- DISTR_VCENTER.xpm \
DRAWING_PRIORITY.xpm \
ECFS.xpm \
GDDRIVER.xpm \
@@ -361,11 +361,6 @@ icons = ALIGN_BOTTOM.xpm \
GIF.xpm \
GRIBVECTORS.xpm \
GeoToKML.xpm \
- help_area.xpm \
- help_line.xpm \
- help_map.xpm \
- help_point.xpm \
- help_station.xpm \
HOVMOELLERDATA.xpm \
JPEG.xpm \
LLMATRIX.xpm \
@@ -381,18 +376,17 @@ icons = ALIGN_BOTTOM.xpm \
MVPROFVIEW.xpm \
MXAVERAGE.xpm \
MXAVERAGEVIEW.xpm \
- MXSECTION.xpm \
+ MHOVMOELLERDATA.xpm \
+ MHOVMOELLERVIEW.xpm \
+ MXSECTION.xpm \
MXSECTIONVIEW.xpm \
MXSECTVIEW.xpm \
- NEWS.xpm \
OBSTAT_SCATTER.xpm OBSTAT_CURVE.xpm OBSTAT.xpm \
OVERLAY_CONTROL.xpm \
PAXIS.xpm \
PCOAST.xpm \
PCONT.xpm \
PGRAPH.xpm \
- PLOTPAGE.xpm \
- PLOTSUBPAGE.xpm \
PREFERENCES.xpm \
PSOUTPUT.xpm \
PSYMB.xpm \
@@ -404,10 +398,9 @@ icons = ALIGN_BOTTOM.xpm \
SERVICE.xpm \
SIMPLE_FORMULA.xpm \
STATIONS.xpm \
- SUBPAGEDETAILS.xpm \
SUPERPAGE.xpm \
SVGOUTPUT.xpm \
- TAR.xpm \
+ THERMODATA.xpm \
TIFF.xpm \
VPROF.xpm \
VPROFVIEW.xpm \
diff --git a/share/metview/icons_mv5/NEWS.xpm b/share/metview/icons_mv5/NEWS.xpm
deleted file mode 100644
index 43398c5..0000000
--- a/share/metview/icons_mv5/NEWS.xpm
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * NEWS_icon[] = {
-"32 32 4 1",
-" c #858585858585",
-". c #FFFFFFFFFFFF",
-"X c #000000000000",
-"o c #CCCCCCCCCCCC",
-" ",
-" .............................. ",
-" XX....XXX..................... ",
-" .XX....X...................... ",
-" .XX....X...................... ",
-" .X.X...X...XX..XXX.XX.XX..XXX. ",
-" .X..X..X..X..X..X..X..X..X..X. ",
-" .X..X..X..XXXX..XX.X.XX..XX... ",
-" .X...X.X..X......X.X.X.....XX. ",
-" .X....XX..XX..X..XX.X....X..X. ",
-" XXX....X...XXX...X..X....XXX.. ",
-" .............................. ",
-" XXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
-" .............................. ",
-" .............. .. . ",
-" .XXX.X..XXX... .. oooooooooo . ",
-" .............. .. ooooooXooo . ",
-" .XXX.XXX..XX.. .. oooooXoXoo . ",
-" .............. .. oooooXoXoo . ",
-" .XX..XX..XXX.. .. ooooooXooo . ",
-" .............. .. oooooXXXoo . ",
-" .XXX.XX.XX.X.. .. ooooXXXXXo . ",
-" .............. .. . ",
-" .XX.XX..XX.X.. ............... ",
-" .............. ..XX.X.XXX..X.. ",
-" .XXX..X.XX.X.. ............... ",
-" .............. ..XXX.X.XXX.X.. ",
-" .XX.XX.X.X.X.. ............... ",
-" .............. ..XXX.X.XX.XX.. ",
-" .X.XXX.XX.XX.. ............... ",
-" .............................. ",
-" "};
diff --git a/share/metview/icons_mv5/PLOTPAGE.xpm b/share/metview/icons_mv5/PLOTPAGE.xpm
deleted file mode 100644
index ace1a4f..0000000
--- a/share/metview/icons_mv5/PLOTPAGE.xpm
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * PLOTPAGE_xpm[] = {
-"32 32 3 1",
-" c #FFFFFFFFFFFF",
-". c #373737373737",
-"X c #808080808080",
-" ........................ ",
-" . . ",
-" . . ",
-" . XXXXXXXXXXXXXXXXXXXX . ",
-" . X X . ",
-" . X X . ",
-" . X X . ",
-" . XXXXXXXXXXXXXXXXXXXX . ",
-" . . ",
-" . XXXXXXXXXX XXXXXXXXX . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . XXXXXXXXXX X X . ",
-" . X X . ",
-" . XXXXXXXXXX X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X X X X . ",
-" . XXXXXXXXXX XXXXXXXXX . ",
-" . . ",
-" ........................ "};
diff --git a/share/metview/icons_mv5/PLOTSUBPAGE.xpm b/share/metview/icons_mv5/PLOTSUBPAGE.xpm
deleted file mode 100644
index 9ae6c44..0000000
--- a/share/metview/icons_mv5/PLOTSUBPAGE.xpm
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * SUBPAGEDETAILS_xpm[] = {
-"32 32 4 1",
-" c #FFFFFFFFFFFF",
-". c #373737373737",
-"X c #808080808080",
-"o c #8F8F8F8F8F8F",
-" ........................ ",
-" . . ",
-" . . ",
-" . XXXXXXXXXXXXXXXXXXXX . ",
-" . X X . ",
-" . X ooooooooooooooo X . ",
-" . X ooooooooooooooo X . ",
-" . XXXXXXXXXXXXXXXXXXXX . ",
-" . . ",
-" . XXXXXXXXXX XXXXXXXXX . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X oooo X X oooo X . ",
-" . X oooo X X oooo X . ",
-" . X oooo X X oooo X . ",
-" . X oooo X X oooo X . ",
-" . X X X oooo X . ",
-" . XXXXXXXXXX X oooo X . ",
-" . X oooo X . ",
-" . XXXXXXXXXX X oooo X . ",
-" . X X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X X . ",
-" . X oooooo X X X . ",
-" . X X X X . ",
-" . XXXXXXXXXX XXXXXXXXX . ",
-" . . ",
-" ........................ "};
diff --git a/share/metview/icons_mv5/SUBPAGEDETAILS.xpm b/share/metview/icons_mv5/SUBPAGEDETAILS.xpm
deleted file mode 100644
index 9ae6c44..0000000
--- a/share/metview/icons_mv5/SUBPAGEDETAILS.xpm
+++ /dev/null
@@ -1,39 +0,0 @@
-/* XPM */
-static char * SUBPAGEDETAILS_xpm[] = {
-"32 32 4 1",
-" c #FFFFFFFFFFFF",
-". c #373737373737",
-"X c #808080808080",
-"o c #8F8F8F8F8F8F",
-" ........................ ",
-" . . ",
-" . . ",
-" . XXXXXXXXXXXXXXXXXXXX . ",
-" . X X . ",
-" . X ooooooooooooooo X . ",
-" . X ooooooooooooooo X . ",
-" . XXXXXXXXXXXXXXXXXXXX . ",
-" . . ",
-" . XXXXXXXXXX XXXXXXXXX . ",
-" . X X X X . ",
-" . X X X X . ",
-" . X oooo X X oooo X . ",
-" . X oooo X X oooo X . ",
-" . X oooo X X oooo X . ",
-" . X oooo X X oooo X . ",
-" . X X X oooo X . ",
-" . XXXXXXXXXX X oooo X . ",
-" . X oooo X . ",
-" . XXXXXXXXXX X oooo X . ",
-" . X X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X oooo X . ",
-" . X oooooo X X X . ",
-" . X oooooo X X X . ",
-" . X X X X . ",
-" . XXXXXXXXXX XXXXXXXXX . ",
-" . . ",
-" ........................ "};
diff --git a/share/metview/icons_mv5/SYSTEM.svg b/share/metview/icons_mv5/SYSTEM.svg
index d02f37e..de8694a 100644
--- a/share/metview/icons_mv5/SYSTEM.svg
+++ b/share/metview/icons_mv5/SYSTEM.svg
@@ -14,57 +14,134 @@
height="64px"
id="svg2985"
version="1.1"
- inkscape:version="0.47 r22583"
- sodipodi:docname="SYSTEM.svg">
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="SYSTEM.svg"
+ sodipodi:version="0.32"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
<title
id="title2993">Metview icon</title>
<defs
id="defs2987">
<linearGradient
- id="linearGradient3753">
+ id="linearGradient5915">
<stop
- style="stop-color:#c53c3c;stop-opacity:1;"
+ id="stop5917"
offset="0"
- id="stop3755" />
+ style="stop-color:#c9231d;stop-opacity:1;" />
<stop
- style="stop-color:#f8b2b2;stop-opacity:1;"
+ id="stop5919"
offset="1"
- id="stop3757" />
+ style="stop-color:#eb9a84;stop-opacity:1;" />
</linearGradient>
<linearGradient
+ id="linearGradient3782">
+ <stop
+ style="stop-color:#6a6d71;stop-opacity:1;"
+ offset="0"
+ id="stop3784" />
+ <stop
+ style="stop-color:#606164;stop-opacity:1;"
+ offset="1"
+ id="stop3786" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3765">
+ <stop
+ style="stop-color:#ea614d;stop-opacity:1;"
+ offset="0"
+ id="stop3767" />
+ <stop
+ style="stop-color:#f7a798;stop-opacity:1;"
+ offset="1"
+ id="stop3769" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3775">
+ <stop
+ id="stop3777"
+ offset="0"
+ style="stop-color:#f5f5f5;stop-opacity:1;" />
+ <stop
+ id="stop3779"
+ offset="1"
+ style="stop-color:#d3d8da;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3765"
+ id="linearGradient3771"
+ x1="42.063648"
+ y1="53.744427"
+ x2="6.6376882"
+ y2="20.168556"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97402742,0,0,0.98533799,0.9262646,-0.51992866)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3775"
+ id="linearGradient3776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.51031759,0,0,-0.10859702,5.7447143,12.683803)"
+ x1="35.657509"
+ y1="8.7720575"
+ x2="10.400817"
+ y2="59.972881" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3782"
+ id="linearGradient3788"
+ x1="71.889565"
+ y1="61.835026"
+ x2="-7.6111097"
+ y2="20.009457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97402742,0,0,0.98533799,1.0519451,0.22244489)" />
+ <linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3753"
- id="linearGradient3759"
- x1="20.381924"
- y1="25.776665"
- x2="36.550461"
- y2="-0.56834435"
+ xlink:href="#linearGradient5915"
+ id="linearGradient3908"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+ gradientTransform="matrix(0.97812443,0,0,0.96376754,0.26680554,0.27169084)"
+ x1="57.456539"
+ y1="55.657021"
+ x2="21.214657"
+ y2="28.643499" />
+ <filter
+ inkscape:collect="always"
+ id="filter3958">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.52577735"
+ id="feGaussianBlur3960" />
+ </filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
- inkscape:pageopacity="0.0"
+ inkscape:pageopacity="1"
inkscape:pageshadow="2"
- inkscape:zoom="10.27"
- inkscape:cx="23.240512"
- inkscape:cy="29.889877"
+ inkscape:zoom="13.078125"
+ inkscape:cx="19.842294"
+ inkscape:cy="31.016187"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
- inkscape:window-width="1920"
- inkscape:window-height="1032"
- inkscape:window-x="-4"
- inkscape:window-y="-3"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:snap-from-guide="false"
objecttolerance="2"
gridtolerance="2"
- guidetolerance="2">
+ guidetolerance="2"
+ inkscape:snap-grids="false"
+ inkscape:snap-to-guides="false"
+ showguides="true"
+ inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid2995"
@@ -81,7 +158,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title>Metview icon</dc:title>
<cc:license
rdf:resource="Apache License 2.0" />
<dc:creator>
@@ -105,20 +182,45 @@
</rdf:RDF>
</metadata>
<g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="bg" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="back"
+ style="display:inline">
+ <path
+ sodipodi:nodetypes="cscsssccscc"
+ inkscape:connector-curvature="0"
+ id="path3773"
+ d="m 14.639003,18.145717 c 0,0 -10.8865307,1.596686 -10.8865307,0.36494 l 0,-10.8387185 C 4.1886774,4.486631 6.9531595,4.9691395 8.6280197,4.9691395 l 12.8291753,0 c 3.723824,0 4.890189,5.0308615 7.51339,5.0308615 l 14.60995,0 13.290761,0 c 2.624204,-0.025138 4.203767,0.05826 4.231965,2.598628 l 0.06562,5.912028 z"
+ style="fill:url(#linearGradient3776);fill-opacity:1;stroke:#67697a;stroke-width:0.97966641000000021;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
- style="fill:url(#linearGradient3759);fill-opacity:1.0;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
- id="rect2984"
+ style="fill:url(#linearGradient3771);fill-opacity:1;stroke:url(#linearGradient3788);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 2.2227165,15.900209 3,58 61.647623,58.150685 c 0.01089,-0.03484 0.09732,-9.244196 0.186629,-19.082195 0.102615,-11.304034 0.209032,-23.438023 0.209032,-23.438023 z"
+ id="path2995"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccccccc" />
+ sodipodi:nodetypes="cccscc" />
+ <rect
+ style="fill:#939dac;fill-opacity:1;stroke:none"
+ id="rect3780"
+ width="16.300121"
+ height="2.2715573"
+ x="6.0729151"
+ y="7.5083022"
+ rx="0"
+ ry="0" />
<path
- style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
- d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
- id="rect3761"
+ style="fill:url(#linearGradient3908);fill-opacity:1.0;stroke:none;filter:url(#filter3958)"
+ d="m 60.74873,16.781922 -7.969482,0.152927 c 0.811526,2.291673 1.223877,3.868364 1.223877,6.341886 0,15.977042 -17.99942,28.915335 -40.199634,28.915335 -4.0250374,0 -6.1915181,-0.323257 -9.8580012,-1.115606 L 3.9312729,56.898826 60.334674,57.12812 C 59.364188,56.213801 60.748742,16.781922 60.74873,16.781922 z"
+ id="path3893"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
+ sodipodi:nodetypes="ccsscccc" />
</g>
</svg>
diff --git a/share/metview/icons_mv5/TAR.svg b/share/metview/icons_mv5/TAR.svg
new file mode 100644
index 0000000..964eee7
--- /dev/null
+++ b/share/metview/icons_mv5/TAR.svg
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="archive.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient4073">
+ <stop
+ style="stop-color:#524630;stop-opacity:1;"
+ offset="0"
+ id="stop4075" />
+ <stop
+ style="stop-color:#563a06;stop-opacity:1;"
+ offset="1"
+ id="stop4077" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4060">
+ <stop
+ style="stop-color:#5e5e5e;stop-opacity:1;"
+ offset="0"
+ id="stop4062" />
+ <stop
+ style="stop-color:#b3b3b3;stop-opacity:1;"
+ offset="1"
+ id="stop4064" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4010">
+ <stop
+ style="stop-color:#d9c18d;stop-opacity:1;"
+ offset="0"
+ id="stop4012" />
+ <stop
+ style="stop-color:#c5a152;stop-opacity:1;"
+ offset="1"
+ id="stop4014" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3939">
+ <stop
+ style="stop-color:#b58232;stop-opacity:1;"
+ offset="0"
+ id="stop3941" />
+ <stop
+ style="stop-color:#dccc8a;stop-opacity:1;"
+ offset="1"
+ id="stop3943" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3931">
+ <stop
+ style="stop-color:#d4c872;stop-opacity:1;"
+ offset="0"
+ id="stop3933" />
+ <stop
+ style="stop-color:#dfd195;stop-opacity:1;"
+ offset="1"
+ id="stop3935" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="38.871195 : 24.877412 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="10.92453 : 27.810746 : 1"
+ inkscape:persp3d-origin="-5.0754711 : 22.477413 : 1"
+ id="perspective3871" />
+ <linearGradient
+ id="linearGradient3789">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop3791" />
+ <stop
+ style="stop-color:#f7f7f7;stop-opacity:1;"
+ offset="1"
+ id="stop3793" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4000">
+ <stop
+ id="stop3783"
+ offset="0"
+ style="stop-color:#adcbdd;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop4004" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3939"
+ id="linearGradient3945"
+ x1="14.750791"
+ y1="26.042974"
+ x2="4.8126822"
+ y2="19.05831"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1667599,0,0,1.3722561,-1.5619115,-11.299549)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4010"
+ id="linearGradient4016"
+ x1="5"
+ y1="12"
+ x2="17"
+ y2="24"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-20,21)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.75"
+ inkscape:cx="14.049912"
+ inkscape:cy="16.5248"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer3"
+ showgrid="true"
+ inkscape:snap-grids="true"
+ inkscape:window-width="1599"
+ inkscape:window-height="990"
+ inkscape:window-x="96"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2816"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="back" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="left" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="Layer">
+ <path
+ style="fill:url(#linearGradient3945);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="m 2.3733333,10.96 20.9999997,0 0,19 c 0,0 -9.333252,0.173333 -9.32,-1.106667 l -3,0 C 11.100003,30.065556 5.6533333,29.96 2.3733333,29.96 c -0.1066667,-3.035556 -0.5866667,-8.693334 0.68,-8.106667 l 0,-3 c -1.32,0.48 -1,-8 -0.68,-7.893333 z"
+ id="rect3806"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:#b28539;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 9.3733333,2.96 C 11.617516,2.9422222 18.108239,2.5377778 18.053333,3.8533333 l 3,0 C 21.001773,2.4666667 26.097778,3 30,3 l -6.626667,7.96 c -3.89109,0.171868 -7.32,-0.106667 -9.32,0.893333 l -3,0 c -1.9999997,-1 -6.4695027,-0.966332 -8.733333,-1.000002 z"
+ id="rect3868"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="right">
+ <path
+ style="fill:#6e5223;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 23.373333,10.96 6.573333,-7.7333333 c 0,0 0.366657,8.5618613 -0.893333,8.6266663 l 0,3 c 1.50996,-1.195844 1.159999,7.04 1.159999,7.04 l -6.84,8.066667 c 0,0 0.426667,-8 -1.32,-8.106667 l 0,-3 c 1.32,-0.48 1.32,-7.893333 1.320001,-7.893333 z"
+ id="rect3808-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="edge" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="strip1">
+ <path
+ sodipodi:nodetypes="ccssscc"
+ inkscape:connector-curvature="0"
+ id="path4039"
+ d="m 11.053333,11.853333 c 1.901035,-3.3682091 3.821518,-5.4410082 7,-7.9999997 0.392901,-0.5892306 3.301572,-0.350017 3,0 0,0 -6.211577,6.2549737 -7,7.9999997 -0.675247,1.494533 -0.492523,13.149644 -0.16,17 0.07536,0.872653 -3.449035,0.106667 -2.786667,0.106667 -0.24284,-4.892354 -0.71596,-11.932156 -0.05333,-17.106667 z"
+ style="fill:#c8c4b7;stroke:#6c3c1a;stroke-width:0.55166680000000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ style="fill:#00112b;stroke:none"
+ d="m 11.319999,11.959999 c 1.901035,-3.3682084 3.768185,-5.3343408 6.946667,-7.8933324 0.392901,-0.5892305 1.541572,-0.510017 1.24,-0.16 0,0 -6.158243,6.4149734 -6.946666,8.1599994 -0.675247,1.494533 -0.43919,12.776312 -0.106663,16.626668 0.07536,0.872653 -1.742369,-0.05333 -1.080001,-0.05333 -0.24284,-4.892354 -0.71596,-11.50549 -0.05334,-16.680002 z"
+ id="path4083"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccssscc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="strip">
+ <path
+ style="fill:#aca793;fill-opacity:1;stroke:#6c3c1a;stroke-width:0.54893386;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 3.105464,21.96 c 6.905659,0.576498 10.645378,0.477304 19.116977,-0.03051 2.003073,-1.150801 5.204447,-4.948645 6.871483,-7.196159 0.419301,-0.565306 0.378061,-3.682807 -0.05393,-2.893334 -0.819792,1.498185 -5.559834,6.767453 -6.884934,7.195893 C 20.525936,18.98784 9.5703946,19.862176 3.1587943,18.96 c -0.619725,0 -0.6700466,2.948515 -0.05333,3 z"
+ id="path4018"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scssccs" />
+ <path
+ sodipodi:nodetypes="scssccs"
+ inkscape:connector-curvature="0"
+ id="path4081"
+ d="m 3.3721307,21.853333 c 6.9056593,0.576498 10.5920443,0.370638 19.0636433,-0.137173 2.003073,-1.150801 4.991114,-4.895312 6.65815,-7.142826 0.419301,-0.565306 0.164728,-1.65614 -0.267263,-0.866667 -0.819792,1.498185 -5.186501,6.607452 -6.511601,7.035892 -1.629127,-0.04805 -12.8513357,0.666286 -19.2629354,-0.23589 -0.619725,0 -0.2967132,1.295182 0.3200061,1.346664 z"
+ style="fill:#00112b;fill-opacity:1;stroke:none" />
+ </g>
+</svg>
diff --git a/share/metview/icons_mv5/TAR.xpm b/share/metview/icons_mv5/TAR.xpm
deleted file mode 100644
index 80ccce8..0000000
--- a/share/metview/icons_mv5/TAR.xpm
+++ /dev/null
@@ -1,474 +0,0 @@
-/* XPM */
-static char * TAR_xpm[] = {
-"32 32 439 2",
-" c None",
-". c #FFFFFF",
-"+ c #CFCFCF",
-"@ c #DBDCDD",
-"# c #DBDBDD",
-"$ c #DADADC",
-"% c #D9DADB",
-"& c #D8D9DB",
-"* c #D8D9DA",
-"= c #D7D8DA",
-"- c #D6D8D9",
-"; c #D6D7D9",
-"> c #D6D7D8",
-", c #D5D6D8",
-"' c #D4D5D7",
-") c #D4D5D6",
-"! c #D3D4D6",
-"~ c #D2D4D6",
-"{ c #D2D3D5",
-"] c #D1D3D5",
-"^ c #D1D2D4",
-"/ c #D0D1D3",
-"( c #CFD1D3",
-"_ c #CED0D2",
-": c #CECFD1",
-"< c #CDCFD1",
-"[ c #BFBFBF",
-"} c #DCDCDE",
-"| c #BACFF9",
-"1 c #C7D8F9",
-"2 c #ABC5F6",
-"3 c #9FBDF3",
-"4 c #B0C9F4",
-"5 c #B2CAF3",
-"6 c #80A8EB",
-"7 c #7BA5E9",
-"8 c #75A1E7",
-"9 c #709EE5",
-"0 c #6A9AE3",
-"a c #6596E1",
-"b c #5F92DF",
-"c c #5A8EDD",
-"d c #548BDB",
-"e c #4F87D9",
-"f c #4A84D7",
-"g c #4480D5",
-"h c #3F7CD3",
-"i c #3978D1",
-"j c #3375CF",
-"k c #2E71CD",
-"l c #296ECB",
-"m c #246BC9",
-"n c #1E67C7",
-"o c #1964C5",
-"p c #C7CED7",
-"q c #A4C0F7",
-"r c #C8D9F9",
-"s c #CEDDF9",
-"t c #CADAF8",
-"u c #CDDDF8",
-"v c #D4E1F9",
-"w c #7DA6EB",
-"x c #76A2E8",
-"y c #709EE6",
-"z c #6B9AE4",
-"A c #6596E2",
-"B c #6093E0",
-"C c #5A8EDE",
-"D c #548ADC",
-"E c #4F87DA",
-"F c #4984D8",
-"G c #4480D6",
-"H c #3E7CD4",
-"I c #3878D2",
-"J c #3374D0",
-"K c #2D70CE",
-"L c #276DCC",
-"M c #226ACA",
-"N c #1C66C8",
-"O c #1762C6",
-"P c #125FC4",
-"Q c #C6CDD7",
-"R c #DBDBDC",
-"S c #A0BDF7",
-"T c #B9CEF8",
-"U c #C0D3F8",
-"V c #BDD2F7",
-"W c #AFC8F3",
-"X c #7EA6EB",
-"Y c #74A0E8",
-"Z c #6E9CE6",
-"` c #6899E4",
-" . c #6294E2",
-".. c #5D91E0",
-"+. c #578CDE",
-"@. c #5188DC",
-"#. c #4C85DA",
-"$. c #4682D8",
-"%. c #407ED5",
-"&. c #3B7AD3",
-"*. c #3576D1",
-"=. c #3072CF",
-"-. c #2A6ECD",
-";. c #246ACB",
-">. c #1E67C9",
-",. c #1964C7",
-"'. c #1360C5",
-"). c #0F5DC3",
-"!. c #C5CDD7",
-"~. c #DCDCDD",
-"{. c #EFF4FE",
-"]. c #EDF3FD",
-"^. c #ECF2FD",
-"/. c #EBF1FC",
-"(. c #EAF1FC",
-"_. c #EAF0FC",
-":. c #E9F0FB",
-"<. c #E8EFFB",
-"[. c #E7EEFB",
-"}. c #E6EEFA",
-"|. c #E5EDF9",
-"1. c #E3ECF8",
-"2. c #E2EAF7",
-"3. c #E0E9F6",
-"4. c #DFE8F5",
-"5. c #DDE7F4",
-"6. c #DCE5F3",
-"7. c #DAE4F2",
-"8. c #D9E3F1",
-"9. c #D7E1F0",
-"0. c #D5E0EF",
-"a. c #D4DFEE",
-"b. c #D2DEED",
-"c. c #D0DCEC",
-"d. c #CFDBEB",
-"e. c #CDDAEA",
-"f. c #DCDCDC",
-"g. c #FEFEFE",
-"h. c #FDFDFD",
-"i. c #FCFBFA",
-"j. c #F4E6D0",
-"k. c #FAFBFB",
-"l. c #FAFAFA",
-"m. c #F9F9F9",
-"n. c #F8F8F8",
-"o. c #F7F7F7",
-"p. c #F6F6F6",
-"q. c #F5F5F5",
-"r. c #F4F4F4",
-"s. c #F3F3F3",
-"t. c #F2F2F2",
-"u. c #EFEFEF",
-"v. c #DBDBDB",
-"w. c #F4E1C4",
-"x. c #E8BC75",
-"y. c #EAC781",
-"z. c #E6C491",
-"A. c #F9F9F8",
-"B. c #ECECEC",
-"C. c #F8ECD9",
-"D. c #EAC07B",
-"E. c #F2D89C",
-"F. c #FFFEDC",
-"G. c #FAEFC2",
-"H. c #F3E2AF",
-"I. c #DEB984",
-"J. c #F7F7F6",
-"K. c #F1F1F1",
-"L. c #EAEAEA",
-"M. c #FBF3E7",
-"N. c #ECC486",
-"O. c #F0D08E",
-"P. c #FEFBD6",
-"Q. c #FFFFDB",
-"R. c #FDF9D2",
-"S. c #F8EEC0",
-"T. c #F4E8BA",
-"U. c #D6AE77",
-"V. c #F4F2EE",
-"W. c #EDEDED",
-"X. c #FDF9F3",
-"Y. c #EECC95",
-"Z. c #EEC67C",
-"`. c #FDF2C5",
-" + c #FFF8CF",
-".+ c #F8E9B9",
-"++ c #F7E9B9",
-"@+ c #CEA56C",
-"#+ c #F1EDE8",
-"$+ c #F0F0F0",
-"%+ c #EBEBEB",
-"&+ c #DADADA",
-"*+ c #F3D9B1",
-"=+ c #EBBC6C",
-"-+ c #F8DFA1",
-";+ c #FBE6AC",
-">+ c #F9E2A6",
-",+ c #F8DE9F",
-"'+ c #F8DE9E",
-")+ c #F6DA99",
-"!+ c #EDCB86",
-"~+ c #F6DC9F",
-"{+ c #FEEFBB",
-"]+ c #FFF0BC",
-"^+ c #F8E7B0",
-"/+ c #C89E65",
-"(+ c #EBE5DD",
-"_+ c #EEEEEE",
-":+ c #ECC27B",
-"<+ c #FEF1BE",
-"[+ c #FEE5A7",
-"}+ c #FFE7A9",
-"|+ c #FFE8AB",
-"1+ c #FFE8AC",
-"2+ c #FDE3A3",
-"3+ c #E2A544",
-"4+ c #DCA54D",
-"5+ c #DEB268",
-"6+ c #E6C584",
-"7+ c #F5DB9E",
-"8+ c #FAE3A5",
-"9+ c #C59B61",
-"0+ c #E5DBD1",
-"a+ c #D9D9D9",
-"b+ c #ECC37B",
-"c+ c #FFF1BB",
-"d+ c #FFEEB6",
-"e+ c #FFDE97",
-"f+ c #FFDE96",
-"g+ c #F6CE7F",
-"h+ c #F0C270",
-"i+ c #EFC577",
-"j+ c #E8BD72",
-"k+ c #DFB36B",
-"l+ c #D5AA66",
-"m+ c #D4AD6C",
-"n+ c #E2C080",
-"o+ c #B7894F",
-"p+ c #EEEDEB",
-"q+ c #ECC27A",
-"r+ c #FFEDB1",
-"s+ c #FFECAD",
-"t+ c #FFE9AB",
-"u+ c #FFD687",
-"v+ c #FFD583",
-"w+ c #EEBC66",
-"x+ c #FED482",
-"y+ c #FFD684",
-"z+ c #FFD785",
-"A+ c #FFD37A",
-"B+ c #C8984E",
-"C+ c #ECE9E7",
-"D+ c #EABF78",
-"E+ c #FFEAA7",
-"F+ c #FFE8A3",
-"G+ c #FFE7A1",
-"H+ c #FFE5A0",
-"I+ c #FFD078",
-"J+ c #FFCC70",
-"K+ c #EEB85D",
-"L+ c #FFCC71",
-"M+ c #FFD077",
-"N+ c #FFCE71",
-"O+ c #FFCC6D",
-"P+ c #FFD176",
-"Q+ c #C69650",
-"R+ c #ECEAE8",
-"S+ c #D8D8D8",
-"T+ c #E7BD77",
-"U+ c #FFE69E",
-"V+ c #FFE49A",
-"W+ c #FFE398",
-"X+ c #FFE295",
-"Y+ c #FFE195",
-"Z+ c #FFC96A",
-"`+ c #FFC35D",
-" @ c #F1B452",
-".@ c #FFC969",
-"+@ c #FFC866",
-"@@ c #FFC561",
-"#@ c #FFCA69",
-"$@ c #FFCF72",
-"%@ c #FFD47B",
-"&@ c #C39653",
-"*@ c #EDEBE9",
-"=@ c #E5BA75",
-"-@ c #FFE091",
-";@ c #FFDF8F",
-">@ c #FFDE8C",
-",@ c #FFDD89",
-"'@ c #FFDD8A",
-")@ c #FAC362",
-"!@ c #FBBF59",
-"~@ c #FFBE54",
-"{@ c #FFC35C",
-"]@ c #FFCD6F",
-"^@ c #FFD277",
-"/@ c #FFD780",
-"(@ c #C19555",
-"_@ c #EEECEA",
-":@ c #D7D7D7",
-"<@ c #FCFCFC",
-"[@ c #E2B773",
-"}@ c #FFDF8C",
-"|@ c #FFDD88",
-"1@ c #FFDC85",
-"2@ c #FFDB82",
-"3@ c #FFDA80",
-"4@ c #FFD87D",
-"5@ c #FEDF8D",
-"6@ c #FFBA4C",
-"7@ c #FFBC50",
-"8@ c #FFC159",
-"9@ c #FFC662",
-"0@ c #FFCB6B",
-"a@ c #FFD074",
-"b@ c #FFD57D",
-"c@ c #FFDA86",
-"d@ c #BF9557",
-"e@ c #EEECEB",
-"f@ c #F4F5F6",
-"g@ c #DDB472",
-"h@ c #FFDB83",
-"i@ c #FFD97F",
-"j@ c #FFD87C",
-"k@ c #FFD77A",
-"l@ c #FFD677",
-"m@ c #FFD574",
-"n@ c #FFBA4D",
-"o@ c #FFBF56",
-"p@ c #FFC45E",
-"q@ c #FFC967",
-"r@ c #FFCE70",
-"s@ c #FFD882",
-"t@ c #FFDD8B",
-"u@ c #BC9458",
-"v@ c #EFEDEC",
-"w@ c #D6D6D6",
-"x@ c #F5F6F7",
-"y@ c #D7AC6C",
-"z@ c #FDD77B",
-"A@ c #FFD676",
-"B@ c #FFD473",
-"C@ c #FFD370",
-"D@ c #FFD26E",
-"E@ c #FFD16B",
-"F@ c #FFD577",
-"G@ c #FFBD52",
-"H@ c #FFC25B",
-"I@ c #FFC764",
-"J@ c #FFCC6C",
-"K@ c #FFD67F",
-"L@ c #FFDB88",
-"M@ c #FFE090",
-"N@ c #BA9358",
-"O@ c #F0EEEC",
-"P@ c #ECE2D4",
-"Q@ c #D3A55D",
-"R@ c #FCD171",
-"S@ c #FFD06A",
-"T@ c #FFCF68",
-"U@ c #FFCE65",
-"V@ c #FFCD62",
-"W@ c #FFC157",
-"X@ c #FFC560",
-"Y@ c #FFD984",
-"Z@ c #FFDE8D",
-"`@ c #FFE192",
-" # c #B89259",
-".# c #F0EEED",
-"+# c #D5D5D5",
-"@# c #EEE7DE",
-"## c #CC9F5F",
-"$# c #F9CA66",
-"%# c #FFCC5F",
-"&# c #FFCA5C",
-"*# c #FFC959",
-"=# c #FFC45D",
-"-# c #FFCD6E",
-";# c #FFD781",
-"># c #FFDC8A",
-",# c #FDE090",
-"'# c #C8A669",
-")# c #A7876C",
-"!# c #F3F2F2",
-"~# c #F1ECE7",
-"{# c #C79D66",
-"]# c #F4C55F",
-"^# c #FFC752",
-"/# c #FFC64F",
-"(# c #FFCE63",
-"_# c #D4B16E",
-":# c #9C7A5A",
-"<# c #B8ACA5",
-"[# c #CDCDCD",
-"}# c #CBCBCB",
-"|# c #CACACA",
-"1# c #AEAEAE",
-"2# c #F3F0ED",
-"3# c #C29C6E",
-"4# c #EEBC58",
-"5# c #FFC246",
-"6# c #FFCC5D",
-"7# c #FFC968",
-"8# c #FFD379",
-"9# c #E1B96E",
-"0# c #AD875F",
-"a# c #D0C1B7",
-"b# c #DDDDDD",
-"c# c #B7B7B7",
-"d# c #F6F5F4",
-"e# c #BF9E79",
-"f# c #E6B453",
-"g# c #FFC957",
-"h# c #ECBF6C",
-"i# c #B48B5A",
-"j# c #C8B4A6",
-"k# c #F6F5F5",
-"l# c #CECECE",
-"m# c #FBFBFB",
-"n# c #B4B4B4",
-"o# c #D4D4D4",
-"p# c #F9F8F8",
-"q# c #BFA286",
-"r# c #D3AB5E",
-"s# c #BA8E54",
-"t# c #BFA693",
-"u# c #F4F2F0",
-"v# c #CCCCCC",
-"w# c #D1BFB1",
-"x# c #EFEBE7",
-"y# c #E8E8E8",
-"z# c #D0D0D0",
-"A# c #E9E9E9",
-"B# c #B2B2B2",
-"C# c #D1D1D1",
-"D# c #C5C5C5",
-"E# c #A3A3A3",
-"F# c #B1B1B1",
-". . + @ # $ % % & * = - ; > , ' ) ! ~ { ] ^ / / ( _ : < < [ . . ",
-". . } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p . . ",
-". . @ q r s t u v w x y z A B C D E F G H I J K L M N O P Q . . ",
-". . R S T U V 4 W X Y Z ` ...+. at .#.$.%.&.*.=.-.;.>.,.'.).!.. . ",
-". . ~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.& . . ",
-". . f.. . . . . . . . . g.g.h.i.j.k.l.m.n.o.p.p.q.r.s.t.u.v.. . ",
-". . f.. . . . . . . . . g.h.w.x.y.z.A.n.n.o.p.q.r.r.s.t.B.v.. . ",
-". . v.. . . . . . . . g.C.D.E.F.G.H.I.J.o.p.p.q.r.s.t.K.L.v.. . ",
-". . v.. . . . . . . M.N.O.P.Q.R.S.Q.T.U.V.p.q.r.s.s.t.W.L.v.. . ",
-". . v.. . . . . X.Y.Z.`. + + +.+.+ + +++ at +#+q.r.s.t.$+%+B.v.. . ",
-". . &+. . . . *+=+-+;+>+,+'+)+!+~+{+]+]+^+/+(+s.s.t._+B.B.v.. . ",
-". . &+. . . . :+<+[+}+|+1+|+|+2+3+4+5+6+7+8+9+0+t.u.W.W._+f.. . ",
-". . a+. . . . b+c+d+e+f+f+f+f+g+h+i+j+k+l+m+n+o+p+_+_+_+_+f.. . ",
-". . a+. . . . q+r+s+t+u+v+v+v+w+x+v+v+v+y+z+A+B+C+u.u.u.u.f.. . ",
-". . a+. . . . D+E+F+G+H+I+J+J+K+J+J+L+M+N+O+P+Q+R+$+$+$+$+f.. . ",
-". . S+. . . . T+U+V+W+X+Y+Z+`+ @`+. at +@@@#@$@%@&@*@K.K.K.K.f.. . ",
-". . S+g.. . g.=@X+-@;@>@,@'@)@!@`+~@{@+@]@^@/@(@_ at t.t.t.t.f.. . ",
-". . :@s.n.<@g.[@}@|@1 at 2@3 at 4@5 at 6@7 at 8@9 at 0@a at b@c at d@e at t.t.t.s.f.. . ",
-". . :@s.r.s.f at g@h at i@j at k@l at m@4 at n@o at p@q at r@A+s at t@u at v@r.r.r.r.f.. . ",
-". . w at r.r.r.x@y at z@A at B@C at D@E at F@G at H@I at J@P+K at L@M at N@O at r.r.r.r.f.. . ",
-". . w at q.q.q.q.P@Q at R@S at T@U at V@C at W@X@#@$@%@Y at Z@`@ #.#q.q.q.q.f.. . ",
-". . +#p.p.p.p.p.@###$#%#&#*#S@=#+ at -#^@;#>#,#'#)#!#q.q.q.q.f.. . ",
-". . +#p.o.o.o.o.o.~#{#]#^#/#(#9 at 0@a at b@c at _#:#<#+ [#}#|#|#|#1#. . ",
-". . +#o.n.n.n.n.n.n.2#3#4#5#6#7#r at 8#9#0#a#+ <@h.g.. . . b#c#. . ",
-". . +#n.n.n.n.n.n.n.n.d#e#f#g#O+h#i#j#k#n.l#n.n.l.m#<@f.n#g.. . ",
-". . o#m.m.m.m.m.m.m.m.m.p#q#r#s#t#u#m.m.l.v#r.s.r.q.:@n#g.. . . ",
-". . o#m.l.l.l.l.l.l.l.l.l.l.w#x#l.l.l.l.l.|#K._+u.o#n#g.. . . . ",
-". . o#l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.m#|#W.y#z#n#g.. . . . . ",
-". . o#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#<@|#A#v#B#g.. . . . . . ",
-". . o#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#m#<@|#C#1#g.. . . . . . . ",
-". . B#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D#E#F#g.. . . . . . . . ",
-". . g.m#m#m#m#o.s.s.s.s.s.s.s.s.s.s.s.s.s.q.. . . . . . . . . . "};
diff --git a/share/metview/icons_mv5/THERMODATA.xpm b/share/metview/icons_mv5/THERMODATA.xpm
new file mode 100755
index 0000000..3daddcc
--- /dev/null
+++ b/share/metview/icons_mv5/THERMODATA.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * TEPHIDATA_xpm[] = {
+"32 32 13 1",
+" c #000000006666",
+". c #00000000FFFF",
+"X c #FFFFFFFFCCCC",
+"o c #FFFF00000000",
+"O c #25250000FFFF",
+"+ c #B2B2B2B2B2B2",
+"@ c #555555555555",
+"# c #000000000000",
+"$ c #0000FFFFFFFF",
+"% c #000073734B4B",
+"& c #6C6CA6A63131",
+"* c #FFFFFFFFFFFF",
+"= c #00008C8C3030",
+" . ",
+" .XXXXXXXXXXXXXXXXX.XXXoooXXXXX ",
+" X.XXXXXXXXXXXXXXXXX.XXoXX XXXX ",
+" XX.XXXXXXXXXXXXXXXXX.oXXXX XXX ",
+" XXX.XXXXXXXXXXXXXXXXooXXXXX XX ",
+" XXXX.XXXXXXXXXXXXXXooX.XXXXX X ",
+" XXXXX.XXXXXXXXXXXXooXXX.XXXXX ",
+" XXXXXX.XXXXXXXXXXXoXXXXX.XXXXX ",
+" XXXXXXX.XXXXXXXXXXoXXXXXX.XXXX ",
+" XXXXXXXX.XXXXXXXXooXXXXXXX.XXX ",
+" XXXXXXXXX.XXXXXXXoXXXXXXXXX.XX ",
+" XXXXXXXXXX.XXOOOOOXXXXXXXXXX.X ",
+" XXXXXXXXXXX.OOOOOOOXXXXXXXXXX.o",
+" XXXXXXXXXXXOOOXXXOOOXXXXXXXXXoo",
+" XXXX+@####@+OXXXXXOOOXXXXXXXoo ",
+" XXX@#$$%%%$#@XXXXXXOOXXXXXXooX ",
+" XX#$%&*$*%$$%#XXXXXOOXXXXXXoXX ",
+" X#%$&=*$*=$*%%#XXXXOOXXXXXoXXX ",
+".X%&=*==**$*=%%%@XXOOOXXXXooXXX ",
+" #%&===*==**=%%%#+OOOXXXXXoXXXX ",
+" $%&==*===$*$=$*$@OO.X*XXoXXXXX ",
+" $%&====$***$$%%%#OXX.XXooXXXXX ",
+" $%&====**$*$&%%%#XXXX.XoXXXXXX ",
+" $%&====$***$&%%%#XXXXXooXXXXXX ",
+" $$*===*==$*$%%%%#XXXXXo.XXXXXX ",
+" $$$*==*$**$*$%%%@XXXXXoX.XXXXX ",
+" #$*$*=====*$*$$#+XXXXoXXX.XXXX ",
+" @$$*$%%%%%$*$$$@XXXXXoXXXX.XXX ",
+" X#$$*$%%%$$$$$#XXXXXXoXXXXX.XX ",
+" XX#$$*%%%$$$$#XXXXXXoXXXXXXX.X ",
+" XXX@#$%%%$$#@XXXXXXXoXXXXXXXX. ",
+" o o "};
diff --git a/share/metview/icons_mv5/VAPOR_PREPARE.svg b/share/metview/icons_mv5/VAPOR_PREPARE.svg
new file mode 100644
index 0000000..b45548c
--- /dev/null
+++ b/share/metview/icons_mv5/VAPOR_PREPARE.svg
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.48.2 r9819"
+ version="1.0"
+ sodipodi:docname="VAPOR_PREPARE.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ style="display:inline">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="37.885505 : 67.157125 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="64 : 32 : 1"
+ inkscape:persp3d-origin="32 : 21.333333 : 1"
+ id="perspective3035" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4292"
+ id="linearGradient4298"
+ x1="22.578678"
+ y1="19.313492"
+ x2="22.57868"
+ y2="47.827412"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.6692699,0,0,1.4331683,9.6998665,-1.8254253)" />
+ <linearGradient
+ id="linearGradient4292">
+ <stop
+ style="stop-color:#e4a312;stop-opacity:1"
+ offset="0"
+ id="stop4294" />
+ <stop
+ id="stop4308"
+ offset="0.5"
+ style="stop-color:#dfae71;stop-opacity:1" />
+ <stop
+ style="stop-color:#ccd6c8;stop-opacity:1;"
+ offset="1"
+ id="stop4296" />
+ </linearGradient>
+ <linearGradient
+ y2="47.827412"
+ x2="22.57868"
+ y1="19.313492"
+ x1="22.578678"
+ gradientTransform="matrix(1.6692699,0,0,1.4331683,43.226048,-10.521052)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3971-5"
+ xlink:href="#linearGradient4292-2"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4292-2">
+ <stop
+ style="stop-color:#e4a312;stop-opacity:1"
+ offset="0"
+ id="stop4294-3" />
+ <stop
+ id="stop4308-1"
+ offset="0.5"
+ style="stop-color:#dfae71;stop-opacity:1" />
+ <stop
+ style="stop-color:#ccd6c8;stop-opacity:1;"
+ offset="1"
+ id="stop4296-6" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4292-2"
+ id="linearGradient4072"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0,-1.6692699,1.4331683,0,-32.114234,71.210006)"
+ x1="22.578678"
+ y1="19.313492"
+ x2="22.57868"
+ y2="47.827412" />
+ <filter
+ inkscape:collect="always"
+ id="filter4098">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.68694398"
+ id="feGaussianBlur4100" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.828125"
+ inkscape:cx="36.51168"
+ inkscape:cy="30.892035"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer4"
+ width="64px"
+ height="64px"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ showgrid="true"
+ inkscape:snap-grids="false"
+ inkscape:window-maximized="1"
+ inkscape:snap-to-guides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2848"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="bg"
+ style="display:inline">
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ id="rect3833"
+ width="42.718632"
+ height="52.54081"
+ x="19.098661"
+ y="6.1583433" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="box"
+ style="display:inline">
+ <path
+ style="fill:none;stroke:#fffff9;stroke-width:1.55870783;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 24.437187,19.92224 0,33.877602 24.291327,0 0,-33.877602 z"
+ id="path3063"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path3835"
+ d="m 31.61417,11.45284 0,33.877602 24.291326,0 0,-33.877602 z"
+ style="fill:none;stroke:#fffff9;stroke-width:1.55870783;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ style="fill:none;stroke:#f6f6ef;stroke-width:1.55870783;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 48.941818,53.930757 7.171641,-8.30978"
+ id="path3839"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path3849"
+ d="m 24.516662,53.220519 7.483452,-8.735922"
+ style="fill:none;stroke:#f6f6ef;stroke-width:1.55870783;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ style="fill:none;stroke:#f6f6ef;stroke-width:1.55870783;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 24.25682,19.768331 7.119673,-8.451827"
+ id="path3851"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path3853"
+ d="m 48.422133,20.052426 7.483452,-8.735922"
+ style="fill:none;stroke:#f6f6ef;stroke-width:1.55870783;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="arrow"
+ style="display:inline">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#2c2c2b;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4098)"
+ d="m 44.880243,16.319314 -0.03192,14.482308 -6.505007,0 12.69083,14.423739 12.741899,-14.423739 -6.453937,0 0,-14.599455 -12.441866,0.117147 z"
+ id="path4290"
+ sodipodi:nodetypes="cccccccc"
+ transform="matrix(0,-1.0488397,1.0144714,0,-12.215484,87.229426)" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path4070"
+ d="m 2.131735,39.699537 14.482308,0.03192 0,6.505007 14.423738,-12.69083 -14.423738,-12.741901 0,6.453939 -14.599455,0 0.117147,12.441866 z"
+ style="fill:url(#linearGradient4072);fill-opacity:1;fill-rule:evenodd;stroke:#8e6f2a;stroke-width:1.34681761px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/share/metview/icons_mv5/WASTEBASKET.svg b/share/metview/icons_mv5/WASTEBASKET.svg
index eaa90d1..bfcbbec 100644
--- a/share/metview/icons_mv5/WASTEBASKET.svg
+++ b/share/metview/icons_mv5/WASTEBASKET.svg
@@ -7,15 +7,16 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2"
sodipodi:version="0.32"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
version="1.0"
- sodipodi:docname="WASTEBASKET.svg"
+ sodipodi:docname="wastebasket.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/WASTEBASKET.png"
inkscape:export-xdpi="45"
@@ -23,6 +24,72 @@
style="display:inline">
<defs
id="defs4">
+ <linearGradient
+ id="linearGradient3982">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3984" />
+ <stop
+ style="stop-color:#646464;stop-opacity:1;"
+ offset="1"
+ id="stop3986" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3976">
+ <stop
+ id="stop3978"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3980"
+ offset="1"
+ style="stop-color:#d2d2d2;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3860">
+ <stop
+ id="stop3862"
+ offset="0"
+ style="stop-color:#dcdcdc;stop-opacity:1;" />
+ <stop
+ id="stop3864"
+ offset="1"
+ style="stop-color:#dcdcdc;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3852">
+ <stop
+ id="stop3854"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3856"
+ offset="1"
+ style="stop-color:#dcdcdc;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3811">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3813" />
+ <stop
+ style="stop-color:#dcdcdc;stop-opacity:1;"
+ offset="1"
+ id="stop3815" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3787">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3789" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3791" />
+ </linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
@@ -30,6 +97,160 @@
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective3243" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3811"
+ id="linearGradient3817"
+ x1="-35"
+ y1="59"
+ x2="-35"
+ y2="84"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(10,-10)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3811"
+ id="linearGradient3825"
+ x1="-35"
+ y1="84"
+ x2="-35"
+ y2="59"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(10,-10)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3852"
+ id="linearGradient3858"
+ gradientUnits="userSpaceOnUse"
+ x1="-35"
+ y1="89"
+ x2="-35"
+ y2="54"
+ gradientTransform="translate(10,-10)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3860"
+ id="linearGradient3866"
+ gradientUnits="userSpaceOnUse"
+ x1="-35"
+ y1="54"
+ x2="-35"
+ y2="89"
+ gradientTransform="translate(10,-10)" />
+ <linearGradient
+ id="linearGradient3860-2">
+ <stop
+ id="stop3862-0"
+ offset="0"
+ style="stop-color:#dcdcdc;stop-opacity:1;" />
+ <stop
+ id="stop3864-8"
+ offset="1"
+ style="stop-color:#dcdcdc;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3852-2">
+ <stop
+ id="stop3854-8"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3856-2"
+ offset="1"
+ style="stop-color:#dcdcdc;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3811-5"
+ id="linearGradient3817-0"
+ x1="-35"
+ y1="59"
+ x2="-35"
+ y2="84"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(10,-10)" />
+ <linearGradient
+ id="linearGradient3811-5">
+ <stop
+ style="stop-color:#303030;stop-opacity:1;"
+ offset="0"
+ id="stop3813-5" />
+ <stop
+ style="stop-color:#9f9f9f;stop-opacity:1;"
+ offset="1"
+ id="stop3815-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3811-5"
+ id="linearGradient3825-7"
+ x1="-35"
+ y1="84"
+ x2="-35"
+ y2="59"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(10,-10)" />
+ <linearGradient
+ id="linearGradient3892">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3894" />
+ <stop
+ style="stop-color:#dcdcdc;stop-opacity:1;"
+ offset="1"
+ id="stop3896" />
+ </linearGradient>
+ <linearGradient
+ y2="102.12186"
+ x2="-15.960573"
+ y1="56.4375"
+ x1="-37.40625"
+ gradientTransform="matrix(1,0,0,0.92527173,65.4085,-29.975543)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3900"
+ xlink:href="#linearGradient3811-5"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="56.4375"
+ x2="-37.40625"
+ y1="102.12186"
+ x1="-15.960573"
+ gradientTransform="matrix(1,0,0,0.92527173,65.4085,-29.975543)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3902"
+ xlink:href="#linearGradient3982"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3982"
+ id="linearGradient3958"
+ x1="57.897251"
+ y1="15"
+ x2="4.8972521"
+ y2="6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99999735,0.00230033,-0.00230033,0.99999735,-0.25205611,1.8843847)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3892"
+ id="linearGradient3966"
+ x1="33"
+ y1="6"
+ x2="33"
+ y2="1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99999735,0.00230033,-0.00230033,0.99999735,-0.77578957,0.91539766)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3892"
+ id="linearGradient3974"
+ x1="23"
+ y1="6"
+ x2="43"
+ y2="16"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99999735,0.00230033,-0.00230033,0.99999735,-0.35250357,0.88415096)" />
</defs>
<sodipodi:namedview
id="base"
@@ -41,19 +262,23 @@
objecttolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
- inkscape:zoom="8.65625"
- inkscape:cx="17.444043"
- inkscape:cy="32"
+ inkscape:zoom="6.3425978"
+ inkscape:cx="1.8510207"
+ inkscape:cy="20.551866"
inkscape:document-units="px"
inkscape:current-layer="layer2"
width="64px"
height="64px"
- inkscape:window-width="947"
- inkscape:window-height="848"
- inkscape:window-x="422"
- inkscape:window-y="74"
- showgrid="false"
- inkscape:window-maximized="0" />
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ showgrid="true"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2989" />
+ </sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
@@ -87,56 +312,50 @@
</metadata>
<g
inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="back">
+ <path
+ sodipodi:nodetypes="ccssssc"
+ inkscape:connector-curvature="0"
+ id="path3807-6"
+ d="M 12.000003,19.063859 52,19.063859 52,57 c 0,2.775979 -4.364268,4.626359 -6.5915,4.626359 l -28.059617,0 c -2.099855,0 -5.359636,-1.956401 -5.34888,-3.701087 z"
+ style="fill:url(#linearGradient3900);fill-opacity:1;stroke:url(#linearGradient3902);stroke-width:0.82832384;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
id="layer2"
inkscape:label="circle">
+ <path
+ style="fill:url(#linearGradient3974);fill-opacity:1;stroke:url(#linearGradient3958);stroke-width:1.05907857;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 15.609847,8.920891 29.629014,8.95314 50,9 c 5.729393,1.013182 5.600549,3.22879 5.717892,6.013169 L 23.242469,14.938465 8.7180158,14.905053 C 8.7057524,11.120913 12.0079,8.9438803 15.609847,8.920891 z"
+ id="rect7069"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path3004"
+ d="M 28.682947,2.983168 36,3 c 1.21836,0.5028039 1.189482,1.6106894 1.212608,3.0027973 L 27.212634,5.9797937 C 27.212487,4.0877373 27.916553,2.9970426 28.682947,2.983168 z"
+ style="fill:#000000;fill-opacity:1;stroke:url(#linearGradient3966);stroke-width:0.34543338;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<rect
- style="fill:#000000;fill-opacity:1;stroke:#b1bac5;stroke-width:0.86799824;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect5123"
- width="38.037666"
- height="48.718452"
- x="12.923405"
- y="13.194147" />
- <rect
- style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#b1bac5;stroke-width:0.94595301;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect6094"
- width="5.3693538"
- height="37.296696"
- x="16.42034"
- y="19.078545"
- ry="3.0583265" />
- <rect
- style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#b1bac5;stroke-width:0.94595301;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect7065"
- width="5.3693538"
- height="37.296696"
- x="28.940695"
- y="19.078545"
- ry="3.0583265" />
- <rect
- style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#b1bac5;stroke-width:0.94595301;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect7067"
- width="5.3693538"
- height="37.296696"
- x="41.461044"
- y="19.078545"
- inkscape:export-xdpi="45"
+ ry="2.8391356"
inkscape:export-ydpi="45"
- ry="3.0583265" />
- <rect
- style="fill:#000000;fill-opacity:1;stroke:#b1bac5;stroke-width:0.98917061;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect7069"
- width="43.87376"
- height="5.784102"
- x="9.8898354"
- y="6.7806787"
- ry="2.892051" />
+ inkscape:export-xdpi="45"
+ y="23.06386"
+ x="20.000004"
+ height="34.623634"
+ width="8"
+ id="rect3775"
+ style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#aaaaaa;stroke-width:1.11251199;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<rect
- style="fill:#000000;fill-opacity:1;stroke:#b1bac5;stroke-width:0.98917061;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect7071"
- width="15.307067"
- height="3.1234152"
- x="24.057661"
- y="2.7310138"
- ry="1.5617076" />
+ ry="2.8391356"
+ inkscape:export-ydpi="45"
+ inkscape:export-xdpi="45"
+ y="23.06386"
+ x="36.000004"
+ height="34.623634"
+ width="8"
+ id="rect3779"
+ style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#aaaaaa;stroke-width:1.11251199;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
</svg>
diff --git a/share/metview/icons_mv5/help_area.xpm b/share/metview/icons_mv5/help_area.xpm
deleted file mode 100755
index e27d00c..0000000
--- a/share/metview/icons_mv5/help_area.xpm
+++ /dev/null
@@ -1,22 +0,0 @@
-/* XPM */
-static char * help_area_icon[] = {
-"16 16 3 1",
-" c #DADAF6F6FFFF",
-". c #7C7CBDBD7676",
-"X c #FFFF00000000",
-" ... ",
-" ... ",
-" ... ",
-"... ... ",
-".XXXXXXXXXXXXXX ",
-".X. ... X.",
-" X ..... ..X.",
-" X .. ....X.",
-" X .....X.",
-" X ........X.",
-" X ..........X.",
-" X ........X.",
-" XXXXXXXXXXXXXX.",
-" ..........",
-" ...............",
-"............... "};
diff --git a/share/metview/icons_mv5/help_line.xpm b/share/metview/icons_mv5/help_line.xpm
deleted file mode 100755
index fb53e06..0000000
--- a/share/metview/icons_mv5/help_line.xpm
+++ /dev/null
@@ -1,22 +0,0 @@
-/* XPM */
-static char * help_line_icon[] = {
-"16 16 3 1",
-" c #DADAF6F6FFFF",
-". c #7C7CBDBD7676",
-"X c #FFFF00000000",
-" ... ",
-" X ... ",
-" XX ... ",
-"...XX ... ",
-"... XX... ",
-"... XX.... . .",
-" .XX.. ....",
-" ...XX ......",
-" XX......",
-" ..XX.....",
-" .....XX....",
-" ....XX...",
-" .....XX..",
-" .......XX.",
-" ...............",
-"............... "};
diff --git a/share/metview/icons_mv5/help_map.xpm b/share/metview/icons_mv5/help_map.xpm
deleted file mode 100755
index e27d00c..0000000
--- a/share/metview/icons_mv5/help_map.xpm
+++ /dev/null
@@ -1,22 +0,0 @@
-/* XPM */
-static char * help_area_icon[] = {
-"16 16 3 1",
-" c #DADAF6F6FFFF",
-". c #7C7CBDBD7676",
-"X c #FFFF00000000",
-" ... ",
-" ... ",
-" ... ",
-"... ... ",
-".XXXXXXXXXXXXXX ",
-".X. ... X.",
-" X ..... ..X.",
-" X .. ....X.",
-" X .....X.",
-" X ........X.",
-" X ..........X.",
-" X ........X.",
-" XXXXXXXXXXXXXX.",
-" ..........",
-" ...............",
-"............... "};
diff --git a/share/metview/icons_mv5/help_point.xpm b/share/metview/icons_mv5/help_point.xpm
deleted file mode 100755
index 8f48883..0000000
--- a/share/metview/icons_mv5/help_point.xpm
+++ /dev/null
@@ -1,22 +0,0 @@
-/* XPM */
-static char * help_point_icon[] = {
-"16 16 3 1",
-" c #DADAF6F6FFFF",
-". c #7C7CBDBD7676",
-"X c #FFFF00000000",
-" ... ",
-" ... ",
-" ... ",
-"... ... ",
-"... ... ",
-"... ...... . .",
-" .XXX. ....",
-" .XXXXX......",
-" XXXXX......",
-" XXXXX......",
-" .XXX.......",
-" .........",
-" .........",
-" ..........",
-" ...............",
-"............... "};
diff --git a/share/metview/icons_mv5/help_station.xpm b/share/metview/icons_mv5/help_station.xpm
deleted file mode 100755
index c2ab228..0000000
--- a/share/metview/icons_mv5/help_station.xpm
+++ /dev/null
@@ -1,46 +0,0 @@
-/* XPM */
-static char *noname[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 23 1",
-/* colors */
-"` c #000000",
-"a c #B23300",
-"b c #BFA468",
-"c c #00FFFF",
-"d c #00FF00",
-"e c #E06C00",
-"f c #333333",
-"g c #6CA632",
-"h c #BEBEBE",
-"i c #681000",
-"j c #00734B",
-"k c #7E7E7E",
-"l c #A76136",
-"m c #000080",
-"n c #D9B777",
-"o c #520300",
-"p c #B8F0B9",
-"q c #FFFFFF",
-"r c #947A4A",
-"s c #1CB8A6",
-"t c #7CBD76",
-"u c #FFE2AB",
-"v c #6C7B8B",
-/* pixels */
-"qqqqqqqqqqqqqqqq",
-"qqqqqqqqqqqqqqqq",
-"qqqqqqqppppqqqqq",
-"qqqqqpttttgqqqqq",
-"kkhqqggddgttqqqq",
-"qqqqqgttdggqqqqq",
-"qkkhqtptnnppqqqq",
-"qqqqqpqtqaqqqqqq",
-"qqqubqqqqnnqqqqq",
-"qqueebqqqqluqqqq",
-"queeeebqqquluqqq",
-"qrqhkqbuqqqalqqq",
-"hfkf`kfkkkkliohq",
-"fk`fkffkff``ffkq",
-"vsvsvsvjvjm``fhq",
-"cccccccccccqqqqq"
-};
diff --git a/src/AppMod/Makefile.in b/src/AppMod/Makefile.in
index 57d275a..c480cd4 100644
--- a/src/AppMod/Makefile.in
+++ b/src/AppMod/Makefile.in
@@ -81,6 +81,7 @@ bin_PROGRAMS = bin/savepool$(EXEEXT) bin/MvMailTo$(EXEEXT) \
subdir = src/AppMod
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -198,6 +199,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -221,6 +224,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/AppMod/MvMailTo.cc b/src/AppMod/MvMailTo.cc
index 87954b9..f448065 100644
--- a/src/AppMod/MvMailTo.cc
+++ b/src/AppMod/MvMailTo.cc
@@ -72,7 +72,7 @@ void MvMail::serve( MvRequest& in, MvRequest& /*out*/)
string compressMethod="tgz";
string compressSuffix="tar.gz";
string fCompress = string(dirname(fDump.c_str())) + "/mv_icons_" +
- userName + "_" +dateStr + compressSuffix;
+ userName + "_" +dateStr + "." + compressSuffix;
string fLog=fDump + ".log";
//Compress command
diff --git a/src/AppMod/savepool.cc b/src/AppMod/savepool.cc
index 819a273..7fca563 100644
--- a/src/AppMod/savepool.cc
+++ b/src/AppMod/savepool.cc
@@ -145,6 +145,8 @@ void save(svcid* id,request* r,void* )
iconName = get_value( r, "_NAME", 0 );
cptr = r->name;
+ printf("icon_name=%s\n",iconName);
+
path=pathStr;
if(!pathStr )
@@ -167,39 +169,23 @@ void save(svcid* id,request* r,void* )
const char* senderAppl = (char*) get_value(r,"_APPL", 0);
//Find out start directory
- string iconDir;
- if(senderAppl && strcmp(senderAppl,"Desktop") == 0)
- {
- const char* buf=dirname(iconName);
- if(buf)
- {
- struct stat iconDirStat;
- if(stat(buf,&iconDirStat) >=0 && iconDirStat.st_mode & S_IFDIR)
- {
- iconDir=string(buf);
- }
- }
- }
- else
- {
- char *mvDir=getenv("METVIEW_USER_DIRECTORY");
- const char* buf=dirname(iconName);
+ string iconDir;
+ char *mvDir=getenv("METVIEW_USER_DIRECTORY");
+ const char* buf=dirname(iconName);
- if(mvDir && buf)
- {
- iconDir=string(mvDir) + "/" + string(buf);
- struct stat iconDirStat;
- if(! (stat(iconDir.c_str(),&iconDirStat) >=0 && iconDirStat.st_mode & S_IFDIR))
- {
- iconDir=string();
- }
+ if(mvDir && buf)
+ {
+ iconDir=string(mvDir) + "/" + string(buf);
+ struct stat iconDirStat;
+ if(! (stat(iconDir.c_str(),&iconDirStat) >=0 && iconDirStat.st_mode & S_IFDIR))
+ {
+ iconDir=string();
}
- if(mvDir && iconDir.empty())
- {
- iconDir=string(mvDir);
- }
- }
-
+ }
+ if(mvDir && iconDir.empty())
+ {
+ iconDir=string(mvDir);
+ }
//Create the qt application
QApplication app(gac, gav);
diff --git a/src/BufrExaminer/Makefile.in b/src/BufrExaminer/Makefile.in
index 10ae0f8..b7593af 100644
--- a/src/BufrExaminer/Makefile.in
+++ b/src/BufrExaminer/Makefile.in
@@ -76,6 +76,7 @@ bin_PROGRAMS = bin/BufrExaminer$(EXEEXT)
subdir = src/BufrExaminer
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -159,6 +160,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -182,6 +185,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/CptecAccess/Makefile.in b/src/CptecAccess/Makefile.in
index 3bb3e5e..3586f19 100644
--- a/src/CptecAccess/Makefile.in
+++ b/src/CptecAccess/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/CptecAccess
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -139,6 +140,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -162,6 +165,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Datacoverage/Makefile.in b/src/Datacoverage/Makefile.in
index 4c342ca..0df3157 100644
--- a/src/Datacoverage/Makefile.in
+++ b/src/Datacoverage/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/Datacoverage
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -114,6 +115,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -137,6 +140,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/DebugTools/Makefile.am b/src/DebugTools/Makefile.am
index a10be1e..e71a084 100644
--- a/src/DebugTools/Makefile.am
+++ b/src/DebugTools/Makefile.am
@@ -27,7 +27,7 @@ AM_LDFLAGS = $(QT_LDFLAGS)
BUILT_SOURCES = bin XServ.moc.cpp XServ.qrc.cpp ProcMonitor.moc.cpp debug.qrc.cpp
-EXTRA_DIST = procInfo.css
+EXTRA_DIST = procInfo.css XServ.qrc debug.qrc
bin:
ln -s ../../bin bin
diff --git a/src/DebugTools/Makefile.in b/src/DebugTools/Makefile.in
index 27d6eed..5ea6f52 100644
--- a/src/DebugTools/Makefile.in
+++ b/src/DebugTools/Makefile.in
@@ -77,6 +77,7 @@ bin_PROGRAMS = bin/mvmon$(EXEEXT) bin/xserv$(EXEEXT) \
subdir = src/DebugTools
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -178,6 +179,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -201,6 +204,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -400,7 +404,7 @@ bin_MvMonitor_LDFLAGS = $(QT_LDFLAGS) $(LDFLAGS) -L../../lib
bin_MvMonitor_LDADD = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(QT_LIBS)
AM_LDFLAGS = $(QT_LDFLAGS)
BUILT_SOURCES = bin XServ.moc.cpp XServ.qrc.cpp ProcMonitor.moc.cpp debug.qrc.cpp
-EXTRA_DIST = procInfo.css
+EXTRA_DIST = procInfo.css XServ.qrc debug.qrc
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
diff --git a/src/DebugTools/MvProcNode.cc b/src/DebugTools/MvProcNode.cc
index d080d12..ae4fb71 100644
--- a/src/DebugTools/MvProcNode.cc
+++ b/src/DebugTools/MvProcNode.cc
@@ -18,7 +18,7 @@
#include <signal.h>
unsigned long MvProcStat::uptime_=0;
-long MvProcStat::pageSize_=0;
+long MvProcStat::pageSize_=0;
vector<MvProcNode*> MvProcNode::items_;
vector<MvProcRequest*> MvProcNode::procRequests_;
@@ -56,12 +56,14 @@ void MvProcStat::readUptime()
//We need to read it only once
FILE *fp;
+ //File uptime tells the secons since the system boot.
+ //Variable uptime_ contains the POSIX time of the boot!
if((fp=fopen("/proc/uptime","r")))
{
float fv;
if(fscanf(fp,"%f",&fv) != EOF)
{
- uptime_=static_cast<long>(fv);
+ uptime_=time(0)-static_cast<long>(fv);
cout << "uptime " << uptime_ << endl;
}
@@ -89,8 +91,8 @@ void MvProcStat::readStartTime()
long lv;
if(fscanf(fp,"%ld",&lv) != EOF)
{
- startTime_=time(0)-(uptime_-lv/sysconf(_SC_CLK_TCK));
- cout << "start time " << startTime_ << " " << lv << endl;
+ startTime_=uptime_+lv/sysconf(_SC_CLK_TCK);
+ cout << "start time " << startTime_ << " " << time(0) << " " << uptime_ << " " << lv << " " << lv/sysconf(_SC_CLK_TCK) << endl;
}
}
@@ -183,12 +185,26 @@ int MvProcStat::updateStats()
string MvProcStat::elapsedTime()
{
time_t t=time(0)-startTime_;
- int h=t/3600;
- int m=(t-h*3600)/60;
+ int d=t/86400;
+ int h=(t-d*86400)/3600;
+ int m=(t-d*86400-h*3600)/60;
- stringstream ss;
- ss << h << "h:" << m << "m";
- lastElapsedTime_=ss.str();
+ char c[14];
+ if(d==0)
+ {
+ if(h==0)
+ sprintf(c,"%02dm",m);
+ else
+ sprintf(c,"%02dh:%02dm",h,m);
+ }
+ else
+ sprintf(c,"%dd:%02dh:%02dm",d,h,m);
+
+
+ //stringstream ss;
+ //ss << h << "h:" << m << "m";
+ //lastElapsedTime_=ss.str();
+ lastElapsedTime_=string(c);
return lastElapsedTime_;
}
@@ -365,9 +381,13 @@ void MvProcNode::remove(long ref,string name)
MvProcNode *proc=find(ref,name);
if(proc)
{
+ cout << "remove " << proc->name() << endl;
+
if(proc->parent())
{
- proc->parent()->removeChild(proc);
+ cout << "remove from parent" << proc->parent()->name() << endl;
+
+ proc->parent()->removeChild(proc);
delete proc;
}
}
@@ -406,7 +426,10 @@ void MvProcNode::removeChild(MvProcNode* item)
{
vector<MvProcNode*>::iterator it=std::find(children_.begin(),children_.end(),item);
if(it != children_.end())
- children_.erase(it);
+ {
+ cout << "remove child " << (*it)->name() << endl;
+ children_.erase(it);
+ }
}
}
diff --git a/src/DebugTools/MvQProcModel.cc b/src/DebugTools/MvQProcModel.cc
index 54bb2aa..08bce3a 100644
--- a/src/DebugTools/MvQProcModel.cc
+++ b/src/DebugTools/MvQProcModel.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -15,14 +15,16 @@
#include "MvProcNode.h"
-MvQProcModel::MvQProcModel() :
- rootItem_(0)
+MvQProcModel::MvQProcModel(QObject *parent) :
+ QAbstractItemModel(parent),
+ rootItem_(0)
{
pm_=new MvQPixmapCache(QPixmap());
cpuYellow_=QColor(255,255,0);
cpuOrange_=QColor(255,188,46);
- cpuRed_=QColor(255,102,102);
+ cpuRed_=QColor(255,102,102);
+ textGrey_=QColor(100,100,100);
}
void MvQProcModel::dataIsAboutToChange()
@@ -48,7 +50,7 @@ void MvQProcModel::updateData()
int MvQProcModel::columnCount( const QModelIndex& /* parent */ ) const
{
- return 4;
+ return 5;
}
int MvQProcModel::rowCount( const QModelIndex& parent) const
@@ -65,7 +67,7 @@ QVariant MvQProcModel::data( const QModelIndex& index, int role ) const
{
if( !index.isValid() ||
(role != Qt::DisplayRole && role != Qt::BackgroundRole &&
- role != Qt::DecorationRole && role != Qt::TextAlignmentRole))
+ role != Qt::DecorationRole && role != Qt::TextAlignmentRole && role != Qt::ForegroundRole ))
{
return QVariant();
}
@@ -83,9 +85,10 @@ QVariant MvQProcModel::data( const QModelIndex& index, int role ) const
switch (index.column())
{
case 0: return QString::fromStdString(item->niceName());
- case 1: return (st->cpu() > 1)?(QString::number(st->cpu()) + " %"):QString();
+ case 1: return (st->cpu() > 1)?(QString::number(st->cpu()) + " %"):"< 1%";
case 2: return QString::fromStdString(st->vmRss());
- case 3: return QString::fromStdString(st->elapsedTime());
+ case 3: return QString::fromStdString(st->elapsedTime());
+ case 4: return " " + QString::number(item->pid());
default: return QString();
}
}
@@ -112,12 +115,16 @@ QVariant MvQProcModel::data( const QModelIndex& index, int role ) const
}
else if(role == Qt::TextAlignmentRole)
{
- if(index.column() == 0 || index.column() == 3)
+ if(index.column() == 0 || index.column() == 4)
return QVariant();
else
return Qt::AlignRight;
}
-
+ else if(role == Qt::ForegroundRole)
+ {
+ if((index.column() == 1 && st->cpu() < 1) || index.column() == 4 )
+ return textGrey_;
+ }
return QVariant();
}
@@ -135,6 +142,7 @@ QVariant MvQProcModel::headerData( const int section, const Qt::Orientation orie
case 1: return QObject::tr("CPU %");
case 2: return QObject::tr("Memory");
case 3: return QObject::tr("Time");
+ case 4: return QObject::tr("PID");
default: return QVariant();
}
}
@@ -146,6 +154,7 @@ QVariant MvQProcModel::headerData( const int section, const Qt::Orientation orie
case 1: return QObject::tr("The current <b>CPU usage</b> of the process <br> per processor core core");
case 2: return QObject::tr("The <b>resident set size</b> of memory <br> used by the process");
case 3: return QObject::tr("The running time of the process");
+ case 4: return QObject::tr("The unique process ID");
default: return QVariant();
}
}
@@ -223,7 +232,35 @@ void MvQProcModel::infoChanged(MvProcNode* proc)
if(!proc)
return;
- emit dataChanged(indexForItem(proc,3),
- indexForItem(proc,6));
+ emit dataChanged(indexForItem(proc,1),
+ indexForItem(proc,3));
+}
+
+//=======================================
+//
+// MvQProcFilterModel:
+//
+//=======================================
+
+MvQProcFilterModel::MvQProcFilterModel(QObject *parent) : QSortFilterProxyModel(parent)
+{
+}
+
+bool MvQProcFilterModel::lessThan(const QModelIndex &left,
+ const QModelIndex &right) const
+{
+ QVariant leftData,rightData;
+ if(left.column() == 2)
+ {
+ leftData = sourceModel()->data(left,Qt::UserRole);
+ rightData = sourceModel()->data(right,Qt::UserRole);
+ return leftData.toLongLong() < rightData.toLongLong();
+ }
+ else
+ return QSortFilterProxyModel::lessThan(left,right);
}
+
+
+
+
diff --git a/src/DebugTools/MvQProcModel.h b/src/DebugTools/MvQProcModel.h
index 80a2f37..1ea6dd7 100644
--- a/src/DebugTools/MvQProcModel.h
+++ b/src/DebugTools/MvQProcModel.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -18,11 +18,20 @@
class MvQPixmapCache;
+
+class MvQProcFilterModel : public QSortFilterProxyModel
+{
+public:
+ MvQProcFilterModel(QObject *parent=0);
+ bool lessThan(const QModelIndex &left,
+ const QModelIndex &right) const;
+};
+
class MvQProcModel : public QAbstractItemModel, public MvProcNodeObserver
{
public:
- MvQProcModel();
+ MvQProcModel(QObject *parent=0);
int columnCount (const QModelIndex& parent = QModelIndex() ) const;
int rowCount (const QModelIndex& parent = QModelIndex() ) const;
@@ -49,6 +58,7 @@ protected:
QColor cpuYellow_;
QColor cpuOrange_;
QColor cpuRed_;
+ QColor textGrey_;
MvQPixmapCache *pm_;
};
diff --git a/src/DebugTools/ProcMonitor.cc b/src/DebugTools/ProcMonitor.cc
index 87b0edf..abadcb8 100644
--- a/src/DebugTools/ProcMonitor.cc
+++ b/src/DebugTools/ProcMonitor.cc
@@ -18,8 +18,10 @@
#include <QSettings>
#include <QString>
#include <QStringList>
+#include <QTabWidget>
#include <QTextEdit>
#include <QTimer>
+#include <QToolButton>
#include <QVBoxLayout>
#include "ProcMonitor.h"
@@ -33,8 +35,17 @@
using namespace std;
+
+QSize ProcViewDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const
+{
+ QSize size=QStyledItemDelegate::sizeHint(option,index);
+ return size+QSize(0,2);
+}
+
+
ProcMonitor::ProcMonitor(svc *service,QWidget*parent) :
- QMainWindow(parent)
+ MvQMainWindow(parent),
+ firstUpdate_(true)
{
service_=service;
@@ -42,13 +53,17 @@ ProcMonitor::ProcMonitor(svc *service,QWidget*parent) :
setWindowTitle("Metview - Process Monitor");
- //---------------------------------------------------include <QTextEdit>--
+ //Initial size
+ setInitialSize(460,400);
+
+ //---------------------------------------------------
// The main layout (the upper part of mainSplitter)
- //-----------------------------------------------------
+ //---------------------------------------------------
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->setObjectName(QString::fromUtf8("vboxLayout"));
mainLayout->setContentsMargins(0,0,0,0);
+ mainLayout->setSpacing(0);
QWidget *w=new QWidget(this);
w->setLayout(mainLayout);
@@ -56,7 +71,7 @@ ProcMonitor::ProcMonitor(svc *service,QWidget*parent) :
mainSplitter_=new QSplitter(this);
mainSplitter_->setOpaqueResize(false);
- //mainSplitter_->setOrientation(Qt::Vertical);
+ mainSplitter_->setOrientation(Qt::Vertical);
mainLayout->addWidget(mainSplitter_);
@@ -71,10 +86,13 @@ ProcMonitor::ProcMonitor(svc *service,QWidget*parent) :
// Process tree to the left
//---------------------------
- procModel_= new MvQProcModel();
-
+ procModel_= new MvQProcModel(this);
loadIcons(procModel_->pixmapCache());
+ filterModel_= new MvQProcFilterModel(this);
+ filterModel_->setSourceModel(procModel_);
+ filterModel_->setDynamicSortFilter(true);
+
/*messageSortModel_= new MvQBufrDumpSortFilterModel;
messageSortModel_->setSourceModel(messageModel_);
messageSortModel_->setDynamicSortFilter(true);
@@ -85,15 +103,21 @@ ProcMonitor::ProcMonitor(svc *service,QWidget*parent) :
procTree_=new MvQTreeView;
procTree_->setObjectName("messageTree");
- procTree_->setProperty("mvStyle",0);
+ procTree_->setProperty("mvStyle","desktop");
procTree_->setSortingEnabled(true);
procTree_->sortByColumn (0,Qt::AscendingOrder);
- procTree_->setAlternatingRowColors(true);
+ //procTree_->setAlternatingRowColors(true);
procTree_->setAllColumnsShowFocus(true);
- procTree_->setModel(procModel_);
+ procTree_->setModel(filterModel_);
procTree_->setActvatedByKeyNavigation(true);
+ //procTree_->setUniformRowHeights(true);
+ procTree_->setItemsExpandable(false);
procTree_->setRootIsDecorated(false);
+ //procTree_->setIconSize(QSize(40,40));
+ ProcViewDelegate *delegate=new ProcViewDelegate;
+ procTree_->setItemDelegate(delegate);
+
mainSplitter_->addWidget(procTree_);
//Add context menu
@@ -110,7 +134,7 @@ ProcMonitor::ProcMonitor(svc *service,QWidget*parent) :
procModel_->setData(MvProcNode::root());
//---------------------------------
- // Process info to right
+ // Process info at the bottom
//---------------------------------
//Read css for the text formatting
@@ -123,15 +147,43 @@ ProcMonitor::ProcMonitor(svc *service,QWidget*parent) :
}
f.close();
- procInfo_=new QTextEdit(this);
+ infoTab_=new QTabWidget(this);
+ mainSplitter_->addWidget(infoTab_);
+
+ //Info
+ procInfo_=new QTextEdit(this);
procInfo_->setReadOnly(true);
- procInfo_->document()->setDefaultStyleSheet(cssDoc);
- procInfo_->setLineWrapMode(QTextEdit::NoWrap);
+ procInfo_->setLineWrapMode(QTextEdit::NoWrap);
+ procInfo_->document()->setDefaultStyleSheet(cssDoc);
+ infoTab_->addTab(procInfo_,tr(" Information"));
+
+ //Request
+ procReq_=new QTextEdit(this);
+ procReq_->setReadOnly(true);
+ procReq_->setLineWrapMode(QTextEdit::NoWrap);
+ procReq_->document()->setDefaultStyleSheet(cssDoc);
+ infoTab_->addTab(procReq_,tr("Request"));
+
+ QToolButton *tbCloseInfo=new QToolButton(this);
+ tbCloseInfo->setIcon(QPixmap(":/debug/close.svg"));
+ tbCloseInfo->setAutoRaise(true);
+ tbCloseInfo->setToolTip(tr("Hide information panel"));
+
+ connect(tbCloseInfo,SIGNAL(clicked()),
+ infoTab_,SLOT(hide()));
+
+ infoTab_->setCornerWidget(tbCloseInfo);
+ infoTab_->hide();
+
+ //procInfo_=new QTextEdit(this);
+ //procInfo_->setReadOnly(true);
+ //procInfo_->document()->setDefaultStyleSheet(cssDoc);
+ //procInfo_->setLineWrapMode(QTextEdit::NoWrap);
//procInfo_->setWordWrapMode(QTextOption::WordWrap);
- mainSplitter_->addWidget(procInfo_);
+ //mainSplitter_->addWidget(procInfo_);
//--------------------------------------
// Buttons
@@ -151,6 +203,7 @@ ProcMonitor::ProcMonitor(svc *service,QWidget*parent) :
//Read settings
readSettings();
+
}
void ProcMonitor::closeEvent(QCloseEvent* event)
@@ -223,6 +276,7 @@ void ProcMonitor::input(svcid *id,request *r)
MvProcNode::add(ref,r);
procModel_->updateData();
procTree_->expandAll();
+ adjustView();
}
else if(mode == "BUSY")
{
@@ -267,6 +321,8 @@ void ProcMonitor::input(svcid *id,request *r)
procModel_->dataIsAboutToChange();
MvProcNode::remove(ref,name.toStdString());
procModel_->updateData();
+ procTree_->expandAll();
+ adjustView();
//Info *p = Info::Find(ref);
//delete p;
@@ -358,20 +414,31 @@ void ProcMonitor::input(svcid *id,request *r)
}
+void ProcMonitor::adjustView()
+{
+ if(firstUpdate_)
+ {
+ MvProcNode::updateInfo();
+
+ //Adjust treeview column size to contents
+ for(int i=0; i < procModel_->columnCount()-1; i++)
+ procTree_->resizeColumnToContents(i);
+
+ procTree_->setCurrentIndex(filterModel_->index(0,0));
+
+ firstUpdate_=false;
+ }
+}
void ProcMonitor::startService()
-{
+{
QTimer *timer= new QTimer(this);
- timer->setInterval(5000);
+ timer->setInterval(3000);
timer->start();
connect(timer,SIGNAL(timeout()),
this,SLOT(slotProcessService()));
- //Adjust treeview column size to contents
- for(int i=0; i < procModel_->columnCount()-1; i++)
- procTree_->resizeColumnToContents(i);
-
}
void ProcMonitor::slotProcessService()
@@ -381,7 +448,7 @@ void ProcMonitor::slotProcessService()
void ProcMonitor::slotContextMenu(const QPoint& position)
{
- MvProcNode *proc=procModel_->itemForIndex(procTree_->indexAt(position));
+ MvProcNode *proc=procModel_->itemForIndex(filterModel_->mapToSource(procTree_->indexAt(position)));
if(proc)
{
QList<QAction*> lst;
@@ -389,6 +456,14 @@ void ProcMonitor::slotContextMenu(const QPoint& position)
QAction *infoAction=new QAction(tr("Information"),this);
lst << infoAction;
+ QAction *reqAction=new QAction(tr("Request"),this);
+ lst << reqAction;
+ MvProcRequest *r=proc->procRequest();
+ if(!r)
+ {
+ reqAction->setEnabled(false);
+ }
+
QAction *abortAction=new QAction(tr("Abort"),this);
abortAction->setShortcut(tr("Del"));
abortAction->setIcon(QPixmap(":/debug/remove.svg"));
@@ -398,7 +473,17 @@ void ProcMonitor::slotContextMenu(const QPoint& position)
QAction *ac=QMenu::exec(lst,procTree_->mapToGlobal(position),infoAction,this);
if(ac == infoAction)
{
- showInfo(proc);
+ infoTab_->show();
+ showInfo(proc);
+ showRequest(proc);
+ infoTab_->setCurrentIndex(0);
+ }
+ else if(ac == reqAction)
+ {
+ infoTab_->show();
+ showInfo(proc);
+ showRequest(proc);
+ infoTab_->setCurrentIndex(1);
}
else if(ac == abortAction)
{
@@ -408,8 +493,10 @@ void ProcMonitor::slotContextMenu(const QPoint& position)
}
void ProcMonitor::slotProcInfo(const QModelIndex& index)
-{
- showInfo(procModel_->itemForIndex(index));
+{
+ MvProcNode *proc=procModel_->itemForIndex(filterModel_->mapToSource(index));
+ showInfo(proc);
+ showRequest(proc);
}
void ProcMonitor::showInfo(MvProcNode *proc)
@@ -426,12 +513,25 @@ void ProcMonitor::showInfo(MvProcNode *proc)
addInfoRow("Host",proc->host(),txt);
addInfoRow("User",proc->user(),txt);
addInfoRow("Pid",proc->pidAsString(),txt);
+
+ txt+="</tr></table>";
+
+ procInfo_->setHtml(txt);
+}
+
+void ProcMonitor::showRequest(MvProcNode *proc)
+{
+ if(!proc)
+ procReq_->clear();
+
+ QString txt;
+ txt+="<table>";
//Request
MvProcRequest *r=proc->procRequest();
if(r)
{
- addTitleInfoRow(tr("Request"),txt,2);
+ //addTitleInfoRow(tr("Request"),txt,2);
addInfoRow("Class",r->className(),txt);
addInfoRow("Name",r->name(),txt);
@@ -442,9 +542,10 @@ void ProcMonitor::showInfo(MvProcNode *proc)
txt+="</tr></table>";
- procInfo_->setHtml(txt);
+ procReq_->setHtml(txt);
}
+
void ProcMonitor::addInfoRow(QString label,const string& val,QString &info)
{
info+="<tr><td class=\"first\">" + label + "</td><td>" + QString::fromStdString(val) + "</td></tr>";
@@ -485,6 +586,7 @@ void ProcMonitor::writeSettings()
settings.beginGroup("main");
settings.setValue("geometry",saveGeometry());
settings.setValue("mainSplitter",mainSplitter_->saveState());
+ settings.setValue("infoTab",infoTab_->isVisible());
settings.endGroup();
}
@@ -495,5 +597,10 @@ void ProcMonitor::readSettings()
settings.beginGroup("main");
restoreGeometry(settings.value("geometry").toByteArray());
mainSplitter_->restoreState(settings.value("mainSplitter").toByteArray());
+ if(settings.contains("infoTab"))
+ infoTab_->setVisible(settings.value("infoTab").toBool());
+ else
+ infoTab_->setVisible(false);
+
settings.endGroup();
}
\ No newline at end of file
diff --git a/src/DebugTools/ProcMonitor.h b/src/DebugTools/ProcMonitor.h
index 2c7a722..b1e73dc 100644
--- a/src/DebugTools/ProcMonitor.h
+++ b/src/DebugTools/ProcMonitor.h
@@ -14,7 +14,9 @@
#include "mars.h"
#include <QList>
-#include <QMainWindow>
+#include <QStyledItemDelegate>
+
+#include "MvQMainWindow.h"
#include <string>
@@ -25,13 +27,23 @@ class QDialogButtonBox;
class QModelIndex;
class QTextEdit;
class QSplitter;
+class QTabWidget;
class MvQPixmapCache;
class MvQProcModel;
+class MvQProcFilterModel;
class MvProcNode;
class MvQTreeView;
-class ProcMonitor : public QMainWindow
+class ProcViewDelegate : public QStyledItemDelegate
+{
+public:
+
+ ProcViewDelegate(QWidget* parent=0) : QStyledItemDelegate(parent) {} ;
+ QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const;
+};
+
+class ProcMonitor : public MvQMainWindow
{
Q_OBJECT
public:
@@ -46,7 +58,9 @@ public slots:
protected:
void closeEvent(QCloseEvent*);
+ void adjustView();
void showInfo(MvProcNode*);
+ void showRequest(MvProcNode*);
void addInfoRow(QString,const string&,QString &);
void addTitleInfoRow(QString,QString &, int);
void loadIcons(MvQPixmapCache *);
@@ -58,8 +72,12 @@ protected:
QSplitter *mainSplitter_;
MvQProcModel* procModel_;
+ MvQProcFilterModel* filterModel_;
MvQTreeView *procTree_;
QTextEdit *procInfo_;
+ QTextEdit *procReq_;
QDialogButtonBox* buttonBox_;
+ QTabWidget* infoTab_;
+ bool firstUpdate_;
};
#endif
diff --git a/src/DebugTools/XServ.qrc b/src/DebugTools/XServ.qrc
new file mode 100644
index 0000000..30f7376
--- /dev/null
+++ b/src/DebugTools/XServ.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="xserv" >
+ <file alias="metview_logo">../images/metview_logo.png</file>
+ </qresource>
+</RCC>
diff --git a/src/DebugTools/XServ.qrc.cpp b/src/DebugTools/XServ.qrc.cpp
index 93d02d6..b47133e 100644
--- a/src/DebugTools/XServ.qrc.cpp
+++ b/src/DebugTools/XServ.qrc.cpp
@@ -10,7 +10,7 @@
#include <QtCore/qglobal.h>
static const unsigned char qt_resource_data[] = {
- // /vol/metview/data/p4/mv4dev_suse113_inst/metview/src/images/metview_logo.png
+ // /var/tmp/cgi/PERFORCE/metview_4/4.4/src/images/metview_logo.png
0x0,0x0,0x5,0x30,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
diff --git a/src/DebugTools/debug.qrc b/src/DebugTools/debug.qrc
index cbbcd5c..2d96fad 100644
--- a/src/DebugTools/debug.qrc
+++ b/src/DebugTools/debug.qrc
@@ -2,6 +2,8 @@
<qresource prefix="debug" >
<file alias="fileInfo.svg">../images/fileInfo.svg</file>
<file alias="remove.svg">../images/remove.svg</file>
+ <file alias="close.svg">../images/close.svg</file>
+ <file alias="exit.svg">../images/exit.svg</file>
<file alias="procInfo.css">procInfo.css</file>
</qresource>
</RCC>
\ No newline at end of file
diff --git a/src/Desktop/Action.h b/src/Desktop/Action.h
index 2b5793c..b781e8b 100644
--- a/src/Desktop/Action.h
+++ b/src/Desktop/Action.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Action.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef Action_H
#define Action_H
diff --git a/src/Desktop/ActionCommand.h b/src/Desktop/ActionCommand.h
index 7a033e2..a95a0a6 100644
--- a/src/Desktop/ActionCommand.h
+++ b/src/Desktop/ActionCommand.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File ActionCommand.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef ActionCommand_H
#define ActionCommand_H
diff --git a/src/Desktop/Command.h b/src/Desktop/Command.h
index 950cf7a..6d471a3 100644
--- a/src/Desktop/Command.h
+++ b/src/Desktop/Command.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Command.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef Command_H
#define Command_H
diff --git a/src/Desktop/ComputeEditor.cc b/src/Desktop/ComputeEditor.cc
index 638a230..3ce926e 100644
--- a/src/Desktop/ComputeEditor.cc
+++ b/src/Desktop/ComputeEditor.cc
@@ -9,9 +9,11 @@
#include "ComputeEditor.h"
-#include <QPlainTextEdit>
+#include <QLabel>
#include <QVBoxLayout>
+#include "MvQLineEdit.h"
+
#include "EditorFactory.h"
#include "IconObject.h"
#include "Request.h"
@@ -19,9 +21,13 @@
ComputeEditor::ComputeEditor(const IconClass& kind,const string& name) :
MvQEditor(kind,name)
{
- te_=new QPlainTextEdit(this);
- te_->setProperty("mvStyle","fileContents");
- centralLayout_->addWidget(te_);
+ QLabel *label=new QLabel(tr("<b>Formula:<b>"),this);
+ centralLayout_->addWidget(label,0);
+
+ te_=new MvQLineEdit(this);
+ //te_->setProperty("mvStyle","fileContents");
+ centralLayout_->addWidget(te_,0);
+ centralLayout_->addStretch(1);
//vector<string> classes;
//classes.push_back(kind.name());
@@ -40,7 +46,7 @@ ComputeEditor::~ComputeEditor()
void ComputeEditor::apply()
{
Request r("COMPUTE");
- r("FORMULA") = te_->toPlainText().toStdString().c_str();
+ r("FORMULA") = te_->text().toStdString().c_str();
r.save(current_->path());
}
@@ -53,7 +59,7 @@ void ComputeEditor::reset()
QString str;
if(f) str=QString(f);
- te_->setPlainText(str);
+ te_->setText(str);
//modified_ = false;
}
diff --git a/src/Desktop/ComputeEditor.h b/src/Desktop/ComputeEditor.h
index bbc2c6a..63a3f5c 100644
--- a/src/Desktop/ComputeEditor.h
+++ b/src/Desktop/ComputeEditor.h
@@ -12,8 +12,7 @@
#include "MvQEditor.h"
-class QPlainTextEdit;
-
+class MvQLineEdit;
class ComputeEditor : public MvQEditor
{
@@ -40,7 +39,7 @@ private:
virtual void merge(IconObjectH);
virtual void replace(IconObjectH);
- QPlainTextEdit *te_;
+ MvQLineEdit *te_;
};
diff --git a/src/Desktop/ConfigLoader.h b/src/Desktop/ConfigLoader.h
index 5e97329..5240615 100644
--- a/src/Desktop/ConfigLoader.h
+++ b/src/Desktop/ConfigLoader.h
@@ -1,14 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File ConfigLoader.h
-// Baudouin Raoult - ECMWF Jul 99
#ifndef ConfigLoader_H
#define ConfigLoader_H
@@ -16,90 +14,20 @@
#include <string>
using std::string;
-#ifndef Metview_H
#include "Metview.h"
-#endif
-
-class ConfigLoader {
+class ConfigLoader
+{
public:
-
-// -- Exceptions
- // None
-
-// -- Contructors
-
ConfigLoader(const string& name,int order);
-
-// -- Destructor
-
virtual ~ConfigLoader(); // Change to virtual if base class
-// -- Convertors
- // None
-
-// -- Operators
- // None
-
-// -- Methods
-
virtual void load(request*) = 0;
-
-// -- Overridden methods
- // None
-
-// -- Class members
- // None
-
-// -- Class methods
-
static bool process(request*,int);
-
-protected:
-
-// -- Members
- // None
-
-// -- Methods
-
- // void print(ostream&) const; // Change to virtual if base class
-
-// -- Overridden methods
- // None
-
-// -- Class members
- // None
-
-// -- Class methods
- // None
-
private:
-
-// No copy allowed
-
+ // No copy allowed
ConfigLoader(const ConfigLoader&);
ConfigLoader& operator=(const ConfigLoader&);
-
-// -- Members
- // None
-
-// -- Methods
- // None
-
-// -- Overridden methods
- // None
-
-// -- Class members
- // None
-
-// -- Class methods
- // None
-
-// -- Friends
-
- //friend ostream& operator<<(ostream& s,const ConfigLoader& p)
- // { p.print(s); return s; }
-
};
template<class T>
@@ -109,5 +37,4 @@ public:
SimpleLoader(const string& name,int order) : ConfigLoader(name,order) {}
};
-
#endif
diff --git a/src/Desktop/Counted.h b/src/Desktop/Counted.h
index 6bf5de9..fb4ff11 100644
--- a/src/Desktop/Counted.h
+++ b/src/Desktop/Counted.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Counted.h
-// Baudouin Raoult - ECMWF Dec 98
-
#ifndef Counted_H
#define Counted_H
diff --git a/src/Desktop/Dependancy.h b/src/Desktop/Dependancy.h
index e3437ab..9ed8e15 100644
--- a/src/Desktop/Dependancy.h
+++ b/src/Desktop/Dependancy.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Dependancy.h
-// Baudouin Raoult - ECMWF Aug 99
-
#ifndef Dependancy_H
#define Dependancy_H
diff --git a/src/Desktop/MvQ.h b/src/Desktop/Desktop.h
similarity index 59%
copy from src/Desktop/MvQ.h
copy to src/Desktop/Desktop.h
index 7e8e40a..cca83e1 100644
--- a/src/Desktop/MvQ.h
+++ b/src/Desktop/Desktop.h
@@ -1,21 +1,21 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-#ifndef _MvQ_H
-#define _MvQ_H
+#ifndef Desktop_H
+#define Desktop_H
-namespace MvQ
+namespace Desktop
{
- enum FolderViewMode {NoViewMode,IconViewMode,DetailedViewMode};
+ enum FolderViewMode {IconViewMode,SimpleViewMode,DetailedViewMode};
enum GridSortMode {GridSortByName,GridSortBySize,GridSortByType};
-
- void emptyWasteBasket();
+ enum DragPolicy {DragShowAllIcons,DragShowDraggedIcon};
+ enum FolderSettingsPolicy {CustomFolderSettings,DefaultFolderSettings};
}
#endif
\ No newline at end of file
diff --git a/src/Desktop/Drop.cc b/src/Desktop/Drop.cc
index 444366d..269221f 100644
--- a/src/Desktop/Drop.cc
+++ b/src/Desktop/Drop.cc
@@ -20,8 +20,8 @@ Drop::Drop(const set<IconObject*>& icons,
request_(request),
service_(service),
mode_(mode),
- waiting_(0),
- error_(false)
+ error_(false),
+ waiting_(0)
{
for(set<IconObject*>::const_iterator j = icons.begin(); j != icons.end() ; ++j)
{
diff --git a/src/Desktop/Drop.h b/src/Desktop/Drop.h
index abd8f2b..349d352 100644
--- a/src/Desktop/Drop.h
+++ b/src/Desktop/Drop.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Drop.h
-// Baudouin Raoult - ECMWF Aug 99
-
#ifndef Drop_H
#define Drop_H
diff --git a/src/Desktop/EditTransaction.h b/src/Desktop/EditTransaction.h
index ca53e97..cf66055 100644
--- a/src/Desktop/EditTransaction.h
+++ b/src/Desktop/EditTransaction.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File EditTransaction.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef EditTransaction_H
#define EditTransaction_H
diff --git a/src/Desktop/Editor.cc b/src/Desktop/Editor.cc
index 2d0e7ad..31f5d84 100644
--- a/src/Desktop/Editor.cc
+++ b/src/Desktop/Editor.cc
@@ -16,9 +16,9 @@
Editor::Editor(const IconClass& c,const string& kind):
class_(c),
kind_(kind),
- temporary_(false),
+ observer_(0),
current_(0),
- observer_(0)
+ temporary_(false)
{
}
@@ -33,7 +33,9 @@ void Editor::open(IconObject* icon)
Editor *e = icon->editor();
if(e == 0) e = EditorFactory::find(icon->editorClass());
if(e)
+ {
e->edit(icon);
+ }
}
const IconClass& Editor::iconClass()
@@ -55,6 +57,7 @@ void Editor::edit(IconObject* icon)
if(current_) {
current_->editor(this);
edit();
+ current_->addObserver(this);
}
}
if(current_)
@@ -68,7 +71,11 @@ void Editor::edit(IconObject* icon)
void Editor::editDone()
{
- if(current_) current_->editor(0);
+ if(current_)
+ {
+ current_->removeObserver(this);
+ current_->editor(0);
+ }
current_ = 0;
}
@@ -91,6 +98,7 @@ void Editor::empty()
{
}
+
string Editor::alternateEditor()
{
return "NoEditor";
diff --git a/src/Desktop/Editor.h b/src/Desktop/Editor.h
index 38d22f5..6e6ff38 100644
--- a/src/Desktop/Editor.h
+++ b/src/Desktop/Editor.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Editor.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef Editor_H
#define Editor_H
@@ -24,8 +21,9 @@ class EditorTool;
class EditorObserver;
#include "IconObject.h"
+#include "IconObserver.h"
-class Editor
+class Editor : public IconObserver
{
public:
virtual ~Editor();
diff --git a/src/Desktop/EditorObserver.h b/src/Desktop/EditorObserver.h
index d84a222..2cb0051 100644
--- a/src/Desktop/EditorObserver.h
+++ b/src/Desktop/EditorObserver.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File EditorObserver.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef EditorObserver_H
#define EditorObserver_H
diff --git a/src/Desktop/FileObject.cc b/src/Desktop/FileObject.cc
index d16b746..41c8ad2 100644
--- a/src/Desktop/FileObject.cc
+++ b/src/Desktop/FileObject.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -47,7 +47,7 @@ Request FileObject::request() const
return r;
}
-void FileObject::request(const Request& r)
+void FileObject::request(const Request& /*r*/)
{
//IconObject::request(r);
}
diff --git a/src/Desktop/Folder.cc b/src/Desktop/Folder.cc
index 14a6f50..d3f719c 100644
--- a/src/Desktop/Folder.cc
+++ b/src/Desktop/Folder.cc
@@ -1,14 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-//#include "Log.h"
-
#include "Folder.h"
#include "IconClass.h"
@@ -16,6 +14,7 @@
#include "RootFolder.h"
#include "Items.h"
#include "FolderInfo.h"
+#include "FolderSettings.h"
#include "FolderObserver.h"
#include "Request.h"
///#include "FolderWindow.h"
@@ -30,17 +29,37 @@ Folder::Folder(Folder *p,const IconClass& kind,
const string& name,IconInfo* info):
IconObject(p,kind,name,info),
ready_(false),
- scanIsOn_(false)
-{
- if(p)
- {
- folderInfo_ = new FolderInfo(path().add(".__metview_icon_").str());
- }
+ scanIsOn_(false),
+ folderInfo_(0),
+ settings_(0)
+
+{
+
}
Folder::~Folder()
{
- saveFolderInfo();
+ if(folderInfo_)
+ delete folderInfo_;
+ if(settings_)
+ delete settings_;
+}
+
+
+FolderInfo* Folder::folderInfo()
+{
+ if(!folderInfo_)
+ folderInfo_= new FolderInfo(this);
+
+ return folderInfo_;
+}
+
+FolderSettings* Folder::settings()
+{
+ if(!settings_)
+ settings_= new FolderSettings(this);
+
+ return settings_;
}
int Folder::numOfIconKids()
@@ -56,7 +75,7 @@ int Folder::numOfIconKids()
void Folder::saveFolderInfo()
{
if(!locked_)
- folderInfo_->write();
+ folderInfo()->write();
}
void Folder::addObserver(FolderObserver* o)
@@ -208,7 +227,6 @@ void Folder::scanForNewFile(const string& name,int x, int y)
if(obj == 0)
{
IconFactory::create(this,name,x,y);
- saveFolderInfo();
}
saveFolderInfo();
@@ -306,8 +324,8 @@ bool Folder::adopt(IconObject* o)
return false;
}
- kids_[o->name()] = o;
- folderInfo_->add(o->name(),&o->info());
+ kids_[o->name()] = o;
+ folderInfo()->add(o->name(),&o->info());
if(f != this)
{
@@ -339,7 +357,7 @@ bool Folder::release(IconObject* o)
}
kids_.erase(o->name());
- folderInfo_->remove(o->name());
+ folderInfo()->remove(o->name());
for(set<FolderObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
(*j)->gone(o);
@@ -399,7 +417,7 @@ string Folder::duplicateName(const string& name)
if(name.find("Copy ") == 0)
{
- int n = name.find(" of ");
+ std::size_t n = name.find(" of ");
if(n != string::npos)
{
string s = name.substr(5,n-5);
@@ -432,8 +450,8 @@ void Folder::renamed(IconObject* o,const string& old_name,const string& new_name
IconObjectH save = o;
kids_.erase(old_name);
kids_[new_name] = o;
-
- folderInfo_->rename(old_name,new_name);
+
+ folderInfo()->rename(old_name,new_name);
for(set<FolderObserver*>::iterator j = observers_.begin(); j != observers_.end(); ++j)
(*j)->renamed(o,old_name);
@@ -681,16 +699,6 @@ void Folder::request(const Request&)
{
}
-void Folder::setIconSizeLock(int size)
-{
- folderInfo_->setIconSizeLock(size);
-}
-
-int Folder::iconSizeLock()
-{
- return folderInfo_->iconSizeLock();
-}
-
//========================================================
//
// Static methods
@@ -775,7 +783,7 @@ Folder* Folder::folder(const string& name1,const string& name2,
return f?folder(f->fullName()+"/"+name3):0;
}
-IconObject* Folder::icon(const string& fullName)
+IconObject* Folder::icon(const string& /*fullName*/)
{
/*Path p(fullName);
Folder *f=Folder::folder(p.directory().str());
diff --git a/src/Desktop/Folder.h b/src/Desktop/Folder.h
index 6177d4b..4e87982 100644
--- a/src/Desktop/Folder.h
+++ b/src/Desktop/Folder.h
@@ -13,6 +13,7 @@
#include "IconObject.h"
class FolderInfo;
+class FolderSettings;
class FolderObserver;
class Request;
@@ -79,12 +80,11 @@ public:
static Folder* folder(const string&,const string&,const string&,bool create = true);
static IconObject* icon(const string&);
- int iconSizeLock();
- void setIconSizeLock(int size=-1);
- FolderInfo* folderInfo() {return folderInfo_;}
+ void saveFolderInfo();
+ FolderInfo* folderInfo();
+ FolderSettings* settings();
-protected:
- void saveFolderInfo();
+protected:
virtual set<string> can();
typedef map<string,IconObjectH> KidMap;
@@ -95,6 +95,7 @@ protected:
bool ready_;
bool scanIsOn_;
FolderInfo* folderInfo_;
+ FolderSettings* settings_;
std::set<FolderObserver*> observers_;
diff --git a/src/Desktop/FolderInfo.cc b/src/Desktop/FolderInfo.cc
index 57101e4..9b604ce 100644
--- a/src/Desktop/FolderInfo.cc
+++ b/src/Desktop/FolderInfo.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -12,40 +12,33 @@
#include <iostream>
#include <fstream>
+#include "Folder.h"
#include "IconInfo.h"
#include "Request.h"
#include "Tokenizer.h"
-FolderInfo::FolderInfo(const string& path) :
- path_(path),
- iconSizeLock_(-1)
+
+FolderInfo::FolderInfo(Folder *folder) :
+ folder_(folder),
+ fileName_("._mv_iconlist_"),
+ checkWasDone_(false)
{
read();
+
}
-
+
void FolderInfo::read()
{
info_.clear(); //need to delete the objects!!!
- ifstream in(path_.str().c_str());
+ std::string path=folder_->path().add(fileName_).str();
+ ifstream in(path.c_str());
+
if(!in.good())
return;
string line;
- if(getline(in,line))
- {
- std::size_t pos=line.find("sizelock: ");
-
- if( pos != string::npos)
- {
- string val=line.substr(pos+10);
- istringstream iss(val);
- iss >> iconSizeLock_;
- }
- }
-
-
//getline(in,line);
Tokenizer parse(",");
@@ -69,12 +62,6 @@ void FolderInfo::read()
info_[name]=new IconInfo(n[2],x,y);
}
- else if(cnt == 0 && (pos=line.find("sizelock: ")) != string::npos)
- {
- string val=line.substr(pos+10);
- istringstream iss(val);
- iss >> iconSizeLock_;
- }
n.clear();
cnt++;
@@ -87,13 +74,15 @@ void FolderInfo::read()
void FolderInfo::write()
{
+ //Remove non-existing icons from info
+ check();
+
+ std::string path=folder_->path().add(fileName_).str();
ofstream out;
- out.open(path_.str().c_str());
+ out.open(path.c_str());
if(!out.good())
return;
- out << "sizelock:" << " " << iconSizeLock_ << endl;
-
for(map<string,IconInfo*>::iterator it=info_.begin(); it != info_.end();it++)
{
out << it->second->x() << "," << it->second->y() << "," << it->second->type() << "," << it->first << endl;
@@ -102,6 +91,31 @@ void FolderInfo::write()
out.close();
}
+
+void FolderInfo::check()
+{
+ //For performance reason we do it only once!
+ if(checkWasDone_)
+ return;
+
+ const std::map<std::string,IconObjectH>& kids=folder_->kids();
+ std::vector<std::string> removeVec;
+ for(map<std::string,IconInfo*>::iterator it=info_.begin(); it != info_.end();it++)
+ {
+ if(kids.find(it->first) == kids.end())
+ {
+ removeVec.push_back(it->first);
+ }
+ }
+
+ for(std::vector<std::string>::const_iterator it=removeVec.begin(); it != removeVec.end(); it++)
+ {
+ remove(*it);
+ }
+
+ checkWasDone_=true;
+}
+
IconInfo* FolderInfo::add(const string &name, IconInfo* info)
{
info_[name]=info;
@@ -155,14 +169,3 @@ void FolderInfo::rename(const string &oldName,const string &newName)
}
}
-void FolderInfo::setIconSizeLock(int v)
-{
- if(iconSizeLock_ != v)
- {
- iconSizeLock_=v;
- write();
- }
-}
-
-
-
diff --git a/src/Desktop/FolderInfo.h b/src/Desktop/FolderInfo.h
index da64b07..b3ebef8 100644
--- a/src/Desktop/FolderInfo.h
+++ b/src/Desktop/FolderInfo.h
@@ -17,15 +17,15 @@
using namespace std;
+class Folder;
class IconInfo;
class Request;
class FolderInfo
{
public:
- FolderInfo(const string&);
-
- void read();
+ FolderInfo(Folder*);
+
void write();
IconInfo* add(const string &, IconInfo*);
IconInfo* add(const string&,const string&);
@@ -33,15 +33,15 @@ public:
IconInfo* find(const string&);
void remove(const string &);
void rename(const string &,const string &);
- int iconSizeLock() const {return iconSizeLock_;}
- void setIconSizeLock(int);
protected:
- Path path_;
+ void read();
+ void check();
+ Folder* folder_;
+ std::string fileName_;
std::map<string,IconInfo*> info_;
- int iconSizeLock_;
+ bool checkWasDone_;
};
-
#endif
\ No newline at end of file
diff --git a/src/Desktop/FolderSearchData.cc b/src/Desktop/FolderSearchData.cc
new file mode 100644
index 0000000..745c9d1
--- /dev/null
+++ b/src/Desktop/FolderSearchData.cc
@@ -0,0 +1,134 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "FolderSearchData.h"
+
+#include <algorithm>
+#include "IconObject.h"
+
+FolderSearchData::FolderSearchData() :
+ observer_(0),
+ owner_(0),
+ current_(0)
+{
+}
+
+void FolderSearchData::setObserver(FolderSearchDataObserver *obs)
+{
+ observer_=obs;
+}
+
+void FolderSearchData::clear()
+{
+ name_.clear();
+ type_.clear();
+ clearMatch();
+}
+
+void FolderSearchData::setSearchTerm(const std::string& name,const std::string& type)
+{
+ name_=name;
+ type_=type;
+ clearMatch();
+}
+
+bool FolderSearchData::isSet()
+{
+ return !name_.empty() || !type_.empty();
+}
+
+bool FolderSearchData::hasMatch()
+{
+ return matchVec_.size() > 0;
+}
+
+void FolderSearchData::clearMatch()
+{
+ matchVec_.clear();
+ current_=0;
+}
+
+bool FolderSearchData::match(IconObject* obj)
+{
+ if(matchVec_.size() > 0)
+ {
+ std::vector<IconObject*>::iterator it=std::find(matchVec_.begin(),matchVec_.end(),obj);
+ if(it != matchVec_.end())
+ return true;
+ else
+ return false;
+ }
+
+ return false;
+}
+
+void FolderSearchData::load(IconObject* obj)
+{
+ if(!name_.empty() || !type_.empty())
+ {
+ if(obj->match(name_,type_))
+ matchVec_.push_back(obj);
+ }
+}
+
+void FolderSearchData::matchChanged()
+{
+ if(observer_)
+ observer_->matchChanged();
+}
+
+void FolderSearchData::resetCurrent()
+{
+ current_=0;
+}
+
+IconObject* FolderSearchData::next()
+{
+ if(matchVec_.size() == 0)
+ return 0;
+
+ current_+=1;
+
+ if(current_ >= static_cast<int>(matchVec_.size()))
+ current_=0;
+ if(current_ <0)
+ current_=matchVec_.size()-1;
+
+ if(current_ >=0 && current_ <static_cast<int>(matchVec_.size()))
+ return matchVec_.at(current_);
+
+ return 0;
+}
+
+IconObject* FolderSearchData::prev()
+{
+ if(matchVec_.size() == 0)
+ return 0;
+
+ current_-=1;
+
+ if(current_ <0)
+ current_=static_cast<int>(matchVec_.size())-1;
+ if(current_ >= static_cast<int>(matchVec_.size()))
+ current_=0;
+
+ if(current_ >=0 && current_ < static_cast<int>(matchVec_.size()))
+ return matchVec_.at(current_);
+
+ return 0;
+}
+
+IconObject* FolderSearchData::first()
+{
+ if(matchVec_.size() == 0)
+ return 0;
+ return matchVec_.at(0);
+}
+
+
diff --git a/src/Desktop/FolderSearchData.h b/src/Desktop/FolderSearchData.h
new file mode 100644
index 0000000..78dba07
--- /dev/null
+++ b/src/Desktop/FolderSearchData.h
@@ -0,0 +1,56 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef FolderSearchData_H
+#define FolderSearchData_H
+
+#include <vector>
+#include <string>
+
+class IconObject;
+
+class FolderSearchDataObserver
+{
+public:
+ FolderSearchDataObserver(){};
+ virtual void matchChanged()=0;
+};
+
+
+class FolderSearchData
+{
+public:
+ FolderSearchData();
+
+ void setObserver(FolderSearchDataObserver*);
+ void setSearchTerm(const std::string&,const std::string&);
+ void clear();
+ bool isSet();
+ bool hasMatch();
+ void clearMatch();
+ bool match(IconObject*);
+ void load(IconObject*);
+ void matchChanged();
+ void setOwner(void* p) {owner_=p;};
+ void* owner() const {return owner_;}
+ void resetCurrent();
+ IconObject* first();
+ IconObject* prev();
+ IconObject* next();
+
+protected:
+ FolderSearchDataObserver* observer_;
+ void* owner_;
+ std::string name_;
+ std::string type_;
+ std::vector<IconObject*> matchVec_;
+ int current_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/FolderSettings.cc b/src/Desktop/FolderSettings.cc
new file mode 100644
index 0000000..fb05372
--- /dev/null
+++ b/src/Desktop/FolderSettings.cc
@@ -0,0 +1,236 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "FolderSettings.h"
+
+#include <iostream>
+#include <fstream>
+
+#include "Folder.h"
+#include "Request.h"
+#include "Tokenizer.h"
+
+FolderSettings::FolderSettings(Folder *folder) :
+ folder_(folder),
+ fileName_("._mv_viewinfo_"),
+ viewMode_(Desktop::IconViewMode),
+ iconSize_(32),
+ halfSizeImported_(false)
+{
+ read();
+}
+
+Desktop::FolderViewMode FolderSettings::viewMode()
+{
+ return viewMode_;
+}
+
+int FolderSettings::iconSize()
+{
+ return iconSize_;
+}
+
+void FolderSettings::setViewModeAndSize(Desktop::FolderViewMode viewMode,int iconSize)
+{
+ viewMode_=viewMode;
+ iconSize_=iconSize;
+ write();
+}
+
+void FolderSettings::setViewMode(Desktop::FolderViewMode v)
+{
+ viewMode_=v;
+ write();
+}
+
+void FolderSettings::setIconSize(int v)
+{
+ iconSize_=v;
+ write();
+}
+
+Desktop::FolderViewMode FolderSettings::toViewMode(int val)
+{
+ Desktop::FolderViewMode vm=static_cast<Desktop::FolderViewMode>(val);
+ if(vm == Desktop::IconViewMode || vm == Desktop::SimpleViewMode ||
+ vm == Desktop::DetailedViewMode)
+ {
+ return vm;
+ }
+
+ return Desktop::IconViewMode;
+}
+
+bool FolderSettings::hasFile()
+{
+ Path p=folder_->path().add(fileName_).str();
+ return (p.exists() && !p.locked());
+}
+
+void FolderSettings::read()
+{
+ std::string path=folder_->path().add(fileName_).str();
+
+ ifstream in(path.c_str());
+
+ //Read the param file
+ if(in.good())
+ {
+ string line;
+
+ Tokenizer parse(" ");
+ vector<string> n;
+
+ if(getline(in,line))
+ {
+ parse(line,n);
+ if(n.size() >= 2)
+ {
+ int vm;
+
+ istringstream issX(n[0]);
+ issX >> vm;
+ viewMode_=FolderSettings::toViewMode(vm);
+
+ istringstream issY(n[1]);
+ issY >> iconSize_;
+ }
+ }
+
+ }
+
+ //If there is no param file we try to read the dot file
+ else
+ {
+ Folder *parent=folder_->parent();
+ if(!parent)
+ return;
+
+ Path parentPath=parent->path();
+ Path dot = parentPath.add("." + folder_->name());
+ Request dotInfo(dot);
+
+ if(!dotInfo)
+ {
+ if(folder_->isLink())
+ {
+ char buf[1024];
+ int count = readlink(folder_->path().str().c_str(), buf, sizeof(buf));
+ if (count > 0)
+ {
+ buf[count] = '\0';
+ Path lnkP(buf);
+ dot=lnkP.directory().add("." + folder_->name());
+ dotInfo=Request(dot);
+ }
+
+ }
+ }
+
+ if(dotInfo)
+ {
+ if(const char* m=dotInfo("SMALL_ICONS"))
+ {
+ if(strcmp(m,"TRUE") == 0)
+ {
+ viewMode_=Desktop::SimpleViewMode;
+ iconSize_=16;
+ halfSizeImported_=true;
+ }
+ }
+
+ //Save the settings
+ write();
+
+ }
+ else
+ {
+ readDefaults();
+ }
+ }
+}
+
+void FolderSettings::write()
+{
+ std::string path=folder_->path().add(fileName_).str();
+ ofstream out;
+ out.open(path.c_str());
+ if(!out.good())
+ return;
+
+ out << static_cast<int>(viewMode_) << " " << iconSize_ << endl;
+ out.close();
+}
+
+void FolderSettings::setDefaults(Desktop::FolderViewMode mode,int iconSize)
+{
+ MvRequest r=MvApplication::getPreferences();
+
+ string str;
+
+ switch(mode)
+ {
+ case Desktop::IconViewMode:
+ str="CLASSIC_ICON_VIEW";
+ break;
+ case Desktop::SimpleViewMode:
+ str="SIMPLE_ICON_VIEW";
+ break;
+ case Desktop::DetailedViewMode:
+ str="DETAILED_ICON_VIEW";
+ break;
+ default:
+ break;
+ }
+
+ r("DEFAULT_VIEW_MODE")=str.c_str();
+ r("DEFAULT_ICON_SIZE")=iconSize;
+
+ MvApplication::setPreferences(r);
+}
+
+void FolderSettings::readDefaults()
+{
+ viewMode_=FolderSettings::defaultViewMode();
+ iconSize_=FolderSettings::defaultIconSize();
+}
+
+Desktop::FolderViewMode FolderSettings::defaultViewMode()
+{
+ MvRequest r=MvApplication::getExpandedPreferences();
+
+ if(const char* c=r("DEFAULT_VIEW_MODE"))
+ {
+ std::string str(c);
+ std::transform(str.begin(), str.end(), str.begin(), ::tolower);
+
+ if(str == "CLASSIC_ICON_VIEW")
+ return Desktop::IconViewMode;
+ else if(str == "SIMPLE_ICON_VIEW")
+ return Desktop::SimpleViewMode;
+ else if(str == "DETAILED_VIEW")
+ return Desktop::DetailedViewMode;
+ }
+
+ return Desktop::IconViewMode;
+}
+
+int FolderSettings::defaultIconSize()
+{
+ MvRequest r=MvApplication::getExpandedPreferences();
+
+ if(const char* c=r("DEFAULT_ICON_SIZE"))
+ {
+ int v=atoi(c);
+ if(v>0 && v < 200)
+ return v;
+ }
+
+ return 32;
+}
diff --git a/src/Desktop/FolderSettings.h b/src/Desktop/FolderSettings.h
new file mode 100644
index 0000000..f08d31a
--- /dev/null
+++ b/src/Desktop/FolderSettings.h
@@ -0,0 +1,52 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef FolderSettings_H
+#define FolderSettings_H
+
+#include <string>
+
+#include "Desktop.h"
+#include "Path.h"
+
+using namespace std;
+
+class Folder;
+
+class FolderSettings
+{
+public:
+ FolderSettings(Folder *);
+
+ Desktop::FolderViewMode viewMode();
+ int iconSize();
+ void setViewModeAndSize(Desktop::FolderViewMode,int);
+ void setViewMode(Desktop::FolderViewMode);
+ void setIconSize(int);
+ bool hasFile();
+ void readDefaults();
+ bool halfSizeImported() const {return halfSizeImported_;}
+ void halfSizeImportUsed() {halfSizeImported_=false;}
+ static Desktop::FolderViewMode toViewMode(int);
+ static void setDefaults(Desktop::FolderViewMode mode,int iconSize);
+ static Desktop::FolderViewMode defaultViewMode();
+ static int defaultIconSize();
+
+protected:
+ void read();
+ void write();
+
+ Folder* folder_;
+ std::string fileName_;
+ Desktop::FolderViewMode viewMode_;
+ int iconSize_;
+ bool halfSizeImported_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/HelpFactory.h b/src/Desktop/HelpFactory.h
index 16c8ea9..3d8d5d4 100644
--- a/src/Desktop/HelpFactory.h
+++ b/src/Desktop/HelpFactory.h
@@ -1,14 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef HelpFactory_H
#define HelpFactory_H
diff --git a/src/Desktop/IconClass.cc b/src/Desktop/IconClass.cc
index 7a4277f..9484522 100644
--- a/src/Desktop/IconClass.cc
+++ b/src/Desktop/IconClass.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -29,9 +29,9 @@ static IconClass super("*",0);
static set<string> allActions;
IconClass::IconClass(const string& name,request* r,const IconClass* sup):
- request_(r),
+ super_(sup),
name_(name),
- super_(sup)
+ request_(r)
{
classes[name] = this;
if(!super_ && this != &super)
@@ -144,33 +144,107 @@ bool IconClass::canBecome(const IconClass& other) const
return false;
}
+//The list of supported actions (can_) is now cached! We rely on the fact that when can() is
+//called for the first time all the initailisation has been done! we also suppose that there is
+//at list one action defined for any of the classes so can_ after the first call of can() cannot be
+//empty!
set<string> IconClass::can() const
{
+ if(can_.empty())
+ can_=generateCan();
+
+ return can_;
+}
+//Generate a list of the supported actions (can_)
+set<string> IconClass::generateCan() const
+{
+ set<string> c;
+
+ //First check if all the actions are allowed for the class
static Action all("*","*");
if(services_.find(all) != services_.end())
- return allActions;
-
- set<string> c;
- if(super_) c = super_->can();
-
- for(map<Action,Service*>::const_iterator j = services_.begin();
- j != services_.end(); ++j)
- c.insert((*j).first.name());
-
- for(set<const IconClass*>::const_iterator k = outputs_.begin();
- k != outputs_.end(); ++k)
{
- // cout << name_ << " can, adding " << (*k)->name_ << endl;
- set<string> oc = (*k)->can();
- c.insert(oc.begin(),oc.end());
+ c=allActions;
+
+ //Now we need to remove some actions if they are not defined explicitely for this
+ //class or its output classes in OnjectList
+ static std::set<string> nonAllActions;
+ if(nonAllActions.empty())
+ {
+ nonAllActions.insert("extract");
+ nonAllActions.insert("analyse");
+ nonAllActions.insert("save");
+ nonAllActions.insert("clear");
+ nonAllActions.insert("visualise");
+ nonAllActions.insert("examine");
+ }
+
+ //Loop for the actions to be checked
+ for(set<string>::const_iterator it = nonAllActions.begin(); it != nonAllActions.end(); it++)
+ {
+ bool need=false;
+
+ //Flag the action if it is not present in the services!
+ Action nonAllAc(*it,"*");
+ map<Action,Service*>::const_iterator itS=services_.find(nonAllAc);
+ if(itS != services_.end())
+ {
+ need=true;
+ continue;
+ }
+
+ //Flag the action if it is not present in the otput classes
+ for(set<const IconClass*>::const_iterator k = outputs_.begin();
+ k != outputs_.end(); ++k)
+ {
+ // cout << name_ << " can, adding " << (*k)->name_ << endl;
+ set<string> oc = (*k)->can();
+ set<string>::const_iterator itIcs=oc.find(*it);
+ if(itIcs != oc.end())
+ {
+ need=true;
+ break;
+ }
+ }
+
+ //If the action is flagged we remove it
+ if(!need)
+ c.erase(*it);
+
+ }
+ }
+
+ //Otherwise compiles a set of action from services and outpusts etc.
+ else
+ {
+ if(super_)
+ {
+ c = super_->can();
+ }
+
+ for(map<Action,Service*>::const_iterator j = services_.begin();
+ j != services_.end(); ++j)
+ {
+ c.insert((*j).first.name());
+ }
+
+
+ for(set<const IconClass*>::const_iterator k = outputs_.begin();
+ k != outputs_.end(); ++k)
+ {
+ // cout << name_ << " can, adding " << (*k)->name_ << endl;
+ set<string> oc = (*k)->can();
+ c.insert(oc.begin(),oc.end());
+ }
}
+ //Check editor
if(editor() == "NoEditor")
c.erase("edit");
else
c.insert("edit");
-
+
return c;
}
@@ -526,6 +600,18 @@ string IconClass::doubleClickMethod() const
return def ? string(def) : string();
}
+string IconClass::defaultMethod() const
+{
+ const char* def = get_value(request_,"default_method",0);
+ return def ? string(def) : "edit";
+}
+
+bool IconClass::skipDepandancies(const string& action) const
+{
+ const char* def = get_value(request_,"skip_dependancies",0);
+ return def ? (strcmp(def,action.c_str()) == 0) : false;
+}
+
Path IconClass::pixmap() const
{
const char* def = get_value(request_,"pixmap",0);
diff --git a/src/Desktop/IconClass.h b/src/Desktop/IconClass.h
index 842004a..a3f8232 100644
--- a/src/Desktop/IconClass.h
+++ b/src/Desktop/IconClass.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File IconClass.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef IconClass_H
#define IconClass_H
@@ -45,6 +42,8 @@ public:
virtual string iconBox() const;
virtual string helpPage() const;
virtual string doubleClickMethod() const;
+ virtual string defaultMethod() const;
+ virtual bool skipDepandancies(const string& action) const;
virtual Path pixmap() const;
virtual bool canBeCreated() const;
virtual Path definitionFile() const;
@@ -78,12 +77,12 @@ public:
// Uncomment for persistent, remove otherwise
// static os_typespec* get_os_typespec();
-
private:
// No copy allowed
IconClass(const IconClass&);
IconClass& operator=(const IconClass&);
+ set<string> generateCan() const;
const IconClass* super_;
string name_;
@@ -91,6 +90,7 @@ private:
map<Action,Service*> services_;
set<const IconClass*> outputs_;
+ mutable set<string> can_;
//friend ostream& operator<<(ostream& s,const IconClass& p)
// { p.print(s); return s; }
diff --git a/src/Desktop/IconFactory.cc b/src/Desktop/IconFactory.cc
index 3b719dd..2a4d58c 100644
--- a/src/Desktop/IconFactory.cc
+++ b/src/Desktop/IconFactory.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -208,8 +208,8 @@ IconObject* IconFactory::create(Folder* parent,const string& name, int x, int y)
//dotfile to get the type and the positions
else
{
- Path path(dirName);
- Path dot = path.add(string(".") + name);
+ Path actPath(dirName);
+ Path dot = actPath.add(string(".") + name);
Request dotInfo(dot);
//If there is no dotfile we guess the file type
@@ -254,8 +254,8 @@ IconObject* IconFactory::create(const string& name,const IconClass& kind)
return f?create(f,base,kind):0;
}
-IconObject* IconFactory::create(IconObject* o,const Request& r,
- const IconClass* c)
+IconObject* IconFactory::create(IconObject* /*o*/,const Request& /*r*/,
+ const IconClass* /*c*/)
{
assert(0);
diff --git a/src/Desktop/IconInfo.cc b/src/Desktop/IconInfo.cc
index cd773b3..c27cc33 100644
--- a/src/Desktop/IconInfo.cc
+++ b/src/Desktop/IconInfo.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -9,7 +9,6 @@
#include "IconInfo.h"
#include "Path.h"
-// 04 50 53 25 42
IconInfo::IconInfo(const Request& r):
info_(r)
@@ -20,14 +19,25 @@ IconInfo::IconInfo(const Request& r):
{
type_=string(info_("ICON_CLASS"));
}
+
+ int crd=0;
+
+ const char* x=info_("X");
+ if(!x) info_("X")=crd;
+
+ const char* y=info_("Y");
+ if(!y) info_("Y") = crd;
}
-
IconInfo::IconInfo(const string& type) :
type_(type)
{
info_ = Request("USER_INTERFACE");
info_("ICON_CLASS") = type.c_str();
+
+ int crd=0;
+ info_("X")=crd;
+ info_("Y")=crd;
}
@@ -48,12 +58,17 @@ IconInfo::~IconInfo()
int IconInfo::x() const
{
- return info_("X");
+ int x=0;
+ info_.getValue(x,"X");
+ return x;
}
+
int IconInfo::y() const
{
- return info_("Y");
+ int y=0;
+ info_.getValue(y,"Y");
+ return y;
}
void IconInfo::position(int x,int y)
diff --git a/src/Desktop/IconInfo.h b/src/Desktop/IconInfo.h
index 973692d..9dbad32 100644
--- a/src/Desktop/IconInfo.h
+++ b/src/Desktop/IconInfo.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File IconInfo.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef IconInfo_H
#define IconInfo_H
@@ -37,9 +34,9 @@ private:
bool modified_;
Request info_;
+ string type_;
int x_;
int y_;
- string type_;
};
inline void destroy(IconInfo**) {}
diff --git a/src/Desktop/IconObject.cc b/src/Desktop/IconObject.cc
index d3d1629..d604a5d 100644
--- a/src/Desktop/IconObject.cc
+++ b/src/Desktop/IconObject.cc
@@ -419,7 +419,7 @@ set<string> IconObject::can()
else
c.erase("destroy");
- if(locked())
+ if(locked() && !isLink())
{
c.erase("cut");
c.erase("delete");
@@ -675,12 +675,14 @@ void IconObject::notifyClosed()
void IconObject::addObserver(IconObserver* o)
{
- observers_.insert(o);
+ if(observers_.find(o) == observers_.end())
+ observers_.insert(o);
}
void IconObject::removeObserver(IconObserver* o)
{
- observers_.erase(o);
+ if(observers_.find(o) != observers_.end())
+ observers_.erase(o);
}
//-------------------------------------------------------------------------
@@ -887,3 +889,50 @@ void IconObject::drop(IconObject*)
{
}
+bool IconObject::match(const std::string& namePattern,const std::string& typePattern)
+{
+ std::string s;
+ bool nameOk=false;
+ bool typeOk=false;
+
+ if(namePattern.empty())
+ {
+ nameOk=true;
+ }
+ else
+ {
+ s=name_;
+ std::transform(s.begin(), s.end(), s.begin(), ::tolower);
+ if(s.find(namePattern) != string::npos)
+ nameOk=true;
+ }
+
+ if(typePattern.empty())
+ {
+ typeOk=true;
+ }
+ else
+ {
+ s=class_.name();
+ std::transform(s.begin(), s.end(), s.begin(), ::tolower);
+ if(s.find(typePattern) != string::npos)
+ typeOk=true;
+ if(!typeOk)
+ {
+ s=class_.type();
+ std::transform(s.begin(), s.end(), s.begin(), ::tolower);
+ if(s.find(typePattern) != string::npos)
+ typeOk=true;
+ }
+ if(!typeOk)
+ {
+ s=class_.iconBox();
+ std::transform(s.begin(), s.end(), s.begin(), ::tolower);
+ if(s.find(typePattern) != string::npos)
+ typeOk=true;
+ }
+ }
+
+
+ return nameOk && typeOk;
+}
diff --git a/src/Desktop/IconObject.h b/src/Desktop/IconObject.h
index 5c86247..95efb2d 100644
--- a/src/Desktop/IconObject.h
+++ b/src/Desktop/IconObject.h
@@ -197,6 +197,7 @@ public:
IconStatus status() const {return status_;}
+ bool match(const std::string&,const std::string&);
static vector<IconObject*> objects() {return objects_;}
diff --git a/src/Desktop/IconObserver.h b/src/Desktop/IconObserver.h
index 1c5cfab..9fbadd2 100644
--- a/src/Desktop/IconObserver.h
+++ b/src/Desktop/IconObserver.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File IconObserver.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef IconObserver_H
#define IconObserver_H
diff --git a/src/Desktop/InternalService.h b/src/Desktop/InternalService.h
index 41328a3..0b27fbd 100644
--- a/src/Desktop/InternalService.h
+++ b/src/Desktop/InternalService.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File InternalService.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef InternalService_H
#define InternalService_H
diff --git a/src/Desktop/InternalTask.h b/src/Desktop/InternalTask.h
index 27e9d72..ec5d94c 100644
--- a/src/Desktop/InternalTask.h
+++ b/src/Desktop/InternalTask.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File InternalTask.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef InternalTask_H
#define InternalTask_H
diff --git a/src/Desktop/Items.cc b/src/Desktop/Items.cc
index efcf8b7..cc8e954 100644
--- a/src/Desktop/Items.cc
+++ b/src/Desktop/Items.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -69,8 +69,8 @@ IconObject* Items::object()
const char *kind = get_value(r_,"class",0);
const char *full = get_value(r_,"full_name",0);
- const char *x = get_value(r_,"x",0);
- const char *y = get_value(r_,"y",0);
+ //const char *x = get_value(r_,"x",0);
+ //const char *y = get_value(r_,"y",0);
const char *link = get_value(r_,"linked_to",0);
object_ = IconObject::search(full);
diff --git a/src/Desktop/Language.cc b/src/Desktop/Language.cc
index ffa489b..b642508 100644
--- a/src/Desktop/Language.cc
+++ b/src/Desktop/Language.cc
@@ -1,28 +1,17 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-#ifndef Language_H
#include "Language.h"
-#endif
-#ifndef Path_H
#include "Path.h"
-#endif
-
-#ifndef IconClass_H
#include "IconClass.h"
-#endif
-
-#ifndef Parameter_H
#include "Parameter.h"
-#endif
-
typedef map<string,Language*> Map;
static Map languages;
@@ -35,8 +24,8 @@ Language::Language(const IconClass* c):
inited_(false),
lang_(0),
rule_(0),
- class_(c),
- flags_(0)
+ flags_(0),
+ class_(c)
{
languages[c->name()] = this;
if(languages.size() == 1)
@@ -69,18 +58,16 @@ Language& Language::find(const IconClass* c)
void Language::init()
{
if(inited_) return;
-
-
+
inited_ = true;
-
string langs = class_->definitionFile().str();
map<string,request*>::iterator j = lang_cache.find(langs);
if(j != lang_cache.end())
lang_ = (*j).second;
else
{
- cout << "read " << langs << endl;
+ //cout << "read " << langs << endl;
lang_ = read_language_file(langs.c_str());
lang_cache[langs] = lang_;
}
@@ -91,7 +78,7 @@ void Language::init()
rule_ = (*k).second;
else
{
- cout << "read " << rules << endl;
+ //cout << "read " << rules << endl;
rule_ = read_check_file(rules.c_str());
rule_cache[rules] = rule_;
}
diff --git a/src/Desktop/Language.h b/src/Desktop/Language.h
index 769914a..8f587e6 100644
--- a/src/Desktop/Language.h
+++ b/src/Desktop/Language.h
@@ -1,25 +1,17 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Language.h
-// Baudouin Raoult - ECMWF Aug 99
-
#ifndef Language_H
#define Language_H
-#ifndef Path_H
#include "Path.h"
-#endif
-
-#ifndef Request_H
#include "Request.h"
-#endif
class IconClass;
class Parameter;
@@ -30,28 +22,14 @@ public:
};
-class Language {
+class Language
+{
public:
-// -- Exceptions
- // None
-
-// -- Contructors
-
Language(const IconClass*);
Language(const IconClass*, const Request&);
-
-// -- Destructor
-
~Language(); // Change to virtual if base class
-// -- Convertors
- // None
-
-// -- Operators
- // None
-
-// -- Methods
const char* getInfo() const;
const char* getKind() const;
@@ -60,43 +38,15 @@ public:
void scan(LanguageScanner&);
vector<string> interfaces(const char*);
Request interfaceRequest(const char*);
-
-// -- Overridden methods
- // None
-
-// -- Class members
- // None
-
-// -- Class methods
static Language& find(const IconClass*);
-protected:
-
-// -- Members
- // None
-
-// -- Methods
-
- // void print(ostream&) const; // Change to virtual if base class
-
-// -- Overridden methods
- // None
-
-// -- Class members
- // None
-
-// -- Class methods
- // None
-
private:
-
-// No copy allowed
-
+ // No copy allowed
Language(const Language&);
Language& operator=(const Language&);
-// -- Members
+ void init();
bool inited_;
request* lang_;
@@ -105,24 +55,6 @@ private:
const IconClass* class_;
vector<Parameter*> params_;
-// -- Methods
-
- void init();
-
-// -- Overridden methods
- // None
-
-// -- Class members
- // None
-
-// -- Class methods
- // None
-
-// -- Friends
-
- //friend ostream& operator<<(ostream& s,const Language& p)
- // { p.print(s); return s; }
-
};
inline void destroy(Language**) {}
diff --git a/src/Desktop/LineFactory.h b/src/Desktop/LineFactory.h
index afe45f9..c391e4d 100644
--- a/src/Desktop/LineFactory.h
+++ b/src/Desktop/LineFactory.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File LineFactory.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef LineFactory_H
#define LineFactory_H
diff --git a/src/Desktop/Log.cc b/src/Desktop/Log.cc
index 90ba3be..43708c4 100644
--- a/src/Desktop/Log.cc
+++ b/src/Desktop/Log.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -13,6 +13,7 @@
#include <errno.h>
#include <inc_iostream.h>
+#include <time.h>
#include "TeeStream.h"
#include "IconObject.h"
@@ -24,6 +25,7 @@
//extern char *sys_errlist[];
extern int sys_nerr;
+//static std::string logTimeStamp();
Log::Log(IconObject* o):
path_(::marstmp()),
@@ -63,7 +65,10 @@ Log::operator ostream&()
}
- global() << '[' << object_->name() << "] ";
+ //Add time stamp
+ //*out_ << logTimeStamp();
+
+ global() << "[" << object_->name() << "] ";
return *tee_;
}
@@ -86,23 +91,25 @@ ostream& Log::syserr(ostream& s)
ostream& Log::error(IconObject* o)
{
- return info(o);
+ return find(o);
}
ostream& Log::info(IconObject* o)
{
- if(o == 0) o = Folder::top();
- return o->log();
+ return find(o);
+
+ //if(o == 0) o = Folder::top();
+ //return o->log() << "A";
}
ostream& Log::warning(IconObject* o)
{
- return info(o);
+ return find(o);
}
ostream& Log::info(const string& p)
{
- return global() << '[' << p << "] ";
+ return global() << "[" << p << "] ";
}
ostream& Log::warning(const string& p)
@@ -114,3 +121,21 @@ ostream& Log::error(const string& p)
{
return info(p);
}
+
+ostream& Log::find(IconObject* o)
+{
+ if(o == 0) o = Folder::top();
+ return o->log();
+}
+
+/*std::string logTimeStamp()
+{
+ time_t t = time(0);
+ struct tm* now = localtime(&t);
+ char buf[7];
+ strftime(buf, sizeof(buf),"%H:%M",now);
+
+ string str;
+ str=string(buf);
+ return str;
+}*/
\ No newline at end of file
diff --git a/src/Desktop/Log.h b/src/Desktop/Log.h
index b1f45c2..a6893c3 100644
--- a/src/Desktop/Log.h
+++ b/src/Desktop/Log.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -46,6 +46,7 @@ private:
IconObject* object_;
static ostream& global();
+ static ostream& find(IconObject*);
};
diff --git a/src/Desktop/MacroParamEditor.cc b/src/Desktop/MacroParamEditor.cc
index 8a23063..d30cbbb 100644
--- a/src/Desktop/MacroParamEditor.cc
+++ b/src/Desktop/MacroParamEditor.cc
@@ -34,7 +34,7 @@ MvQMacroParamDropWidget::MvQMacroParamDropWidget(MacroParamEditor* owner,const v
model_=new MvQIconHolderModel(classes,this);
view_ = new MvQIconHolderView(model_,0,this);
-
+
QString title(tr("Icons: "));
for(vector<string>::const_iterator it = classes.begin(); it != classes.end(); ++it)
{
@@ -142,7 +142,7 @@ MacroParamObject* MacroParamEditor::macroParamObject() const
return static_cast<MacroParamObject*>(cur);
}
-IconObject* MacroParamEditor::copy(const string& name)
+IconObject* MacroParamEditor::copy(const string& /*name*/)
{
/*IconObject* o = IconFactory::create(name, class_);
panel_->apply();
@@ -205,12 +205,12 @@ void MacroParamEditor::editMacro(IconObjectH macro)
}
-void MacroParamEditor::replace(IconObjectH obj)
+void MacroParamEditor::replace(IconObjectH /*obj*/)
{
//panel_->replace(obj);
}
-void MacroParamEditor::merge(IconObjectH obj)
+void MacroParamEditor::merge(IconObjectH /*obj*/)
{
//panel_->merge(obj);
}
@@ -220,27 +220,24 @@ void MacroParamEditor::slotIconDropped(IconObject* obj)
merge(obj);
}
-void MacroParamEditor::iconEdited(IconObject* o)
+void MacroParamEditor::iconEdited(IconObject* /*o*/)
{
- qDebug() << "edited";
//macroArea_.openIcon(o);
}
void MacroParamEditor::iconChanged(IconObject* o)
{
- qDebug() << "changed";
+ MvQEditor::iconChanged(o);
//editMacro(o);
}
-void MacroParamEditor::iconDestroyed(IconObject* o)
+void MacroParamEditor::iconDestroyed(IconObject* /*o*/)
{
- qDebug() << "destroyed";
//editMacro(0);
}
-void MacroParamEditor::iconClosed(IconObject* o)
+void MacroParamEditor::iconClosed(IconObject* /*o*/)
{
- qDebug() << "closed";
//macroArea_.closeIcon(o);
}
diff --git a/src/Desktop/MacroParamEditor.h b/src/Desktop/MacroParamEditor.h
index dd79006..8239890 100644
--- a/src/Desktop/MacroParamEditor.h
+++ b/src/Desktop/MacroParamEditor.h
@@ -45,7 +45,7 @@ protected:
MvQIconHolderView* view_;
};
-class MacroParamEditor : public MvQEditor, public IconObserver
+class MacroParamEditor : public MvQEditor
{
Q_OBJECT
@@ -80,6 +80,7 @@ private:
virtual IconObject* copy(const string&);
+ //Iconobserver methods
virtual void iconEdited(IconObject*);
virtual void iconClosed(IconObject*);
virtual void iconChanged(IconObject*);
diff --git a/src/Desktop/MacroParamState.h b/src/Desktop/MacroParamState.h
index df827f3..617b849 100644
--- a/src/Desktop/MacroParamState.h
+++ b/src/Desktop/MacroParamState.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File MacroParamState.h
-// Baudouin Raoult - ECMWF Jun 00
-
#ifndef MacroParamState_H
#define MacroParamState_H
diff --git a/src/Desktop/Makefile.am b/src/Desktop/Makefile.am
index 5c2ef45..3e40723 100644
--- a/src/Desktop/Makefile.am
+++ b/src/Desktop/Makefile.am
@@ -4,10 +4,10 @@ bin_PROGRAMS = bin/Desktop
bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQ.cc \
- MvQIconFolderViewBase.cc \
+ MvQActionList.cc \
+ MvQAdvancedSearch.cc \
MvQBookmarks.cc \
MvQBoolLine.cc \
- MvQClassBrowser.cc \
MvQColourHelp.cc \
MvQColourLine.cc \
MvQColourListLine.cc \
@@ -18,10 +18,10 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQDetailedFolderView.cc \
MvQDrawerPanel.cc \
MvQDrawerView.cc \
+ MvQDropTarget.cc \
MvQEditor.cc \
MvQExternalHelp.cc \
MvQFileBrowser.cc \
- MvQFileSystemModel.cc \
MvQFileWatcher.cc \
MvQFolderDrawerPanel.cc \
MvQFolderHistory.cc \
@@ -45,27 +45,30 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQIconObjectModel.cc \
MvQIconProvider.cc \
MvQListHelp.cc \
+ MvQListFolderViewBase.cc \
MvQLogDialog.cc \
MvQMessageBox.cc \
MvQNewIconWidget.cc \
MvQNoneLine.cc \
- MvQObjectBrowser.cc \
MvQPageView.cc \
MvQPalette.cc \
MvQPathWidget.cc \
MvQProductBrowser.cc \
+ MvQRecentIcons.cc \
MvQRequestPanelHelp.cc \
MvQRequestPanelLine.cc \
MvQRequestPanelWidget.cc \
MvQScriptHelp.cc \
MvQScrolledTextLine.cc \
+ MvQSearchPanel.cc \
MvQSliderLine.cc \
MvQStationsHelp.cc \
MvQStringLine.cc \
MvQTemplateDrawer.cc \
MvQTemporaryEditor.cc \
MvQTextLine.cc \
- MvQTools.cc \
+ MvQTheme.cc \
+ MvQTools.cc \
MvQViewDrawer.cc \
Action.cc \
ActionCommand.cc \
@@ -86,6 +89,8 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
Folder.cc \
FolderDatabase.cc \
FolderInfo.cc \
+ FolderSearchData.cc \
+ FolderSettings.cc \
HelpFactory.cc \
IconClass.cc \
IconFactory.cc \
@@ -117,7 +122,8 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
RequestPanel.cc \
RequestPanelItem.cc \
ReplyObserver.cc \
- RootFolder.cc \
+ ResolveTransaction.cc \
+ RootFolder.cc \
Runnable.cc \
ShellService.cc \
ShellTask.cc \
@@ -131,16 +137,17 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
TeeBuffer.cc \
TeeStream.cc \
TemporaryEditor.cc \
+ TemporaryFolder.cc \
TemporaryObject.cc \
Tools.cc \
Transaction.cc \
ViewEditor.cc \
Wastebasket.cc \
MvQ.h \
- MvQIconFolderViewBase.h \
+ MvQActionList.h \
+ MvQAdvancedSearch.h \
MvQBookmarks.h \
MvQBoolLine.h \
- MvQClassBrowser.h \
MvQColourHelp.h \
MvQColourLine.h \
MvQColourListLine.h \
@@ -151,11 +158,11 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQDetailedFolderView.h \
MvQDrawerPanel.h \
MvQDrawerView.h \
+ MvQDropTarget.h \
MvQEditor.h \
MvQEditorDrawerPanel.h \
MvQExternalHelp.h \
MvQFileBrowser.h \
- MvQFileSystemModel.h \
MvQFileWatcher.h \
MvQFolderDrawerPanel.h \
MvQFolderHistory.h \
@@ -179,27 +186,30 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQIconObjectModel.h \
MvQIconProvider.h \
MvQListHelp.h \
+ MvQListFolderViewBase.h \
MvQLogDialog.h \
MvQMessageBox.h \
MvQNewIconWidget.h \
MvQNoneLine.h \
- MvQObjectBrowser.h \
MvQPageView.h \
MvQPalette.h \
MvQPathWidget.h \
MvQProductBrowser.h \
- MvQRequestPanelHelp.h \
+ MvQRecentIcons.h \
+ MvQRequestPanelHelp.h \
MvQRequestPanelLine.h \
MvQRequestPanelWidget.h \
MvQScriptHelp.h \
MvQScrolledTextLine.h \
+ MvQSearchPanel.h \
MvQSliderLine.h \
MvQStationsHelp.h \
MvQStringLine.h \
MvQTemplateDrawer.h \
MvQTemporaryEditor.h \
MvQTextLine.h \
- MvQTools.h \
+ MvQTheme.h \
+ MvQTools.h \
MvQViewDrawer.h \
MvQIconStripView.cc \
MvQIconStripView.h \
@@ -210,6 +220,7 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
ConfigLoader.h \
Counted.h \
Dependancy.h \
+ Desktop.h \
Drop.h \
Editor.h \
EditorDrawer.h \
@@ -226,6 +237,8 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
FolderInfo.h \
FolderObserver.h \
FolderPresenter.h \
+ FolderSearchData.h \
+ FolderSettings.h \
HelpFactory.h \
IconClass.h \
IconFactory.h \
@@ -258,7 +271,8 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
RequestPanel.h \
RequestPanelItem.h \
ReplyObserver.h \
- RootFolder.h \
+ ResolveTransaction.h \
+ RootFolder.h \
Runnable.h \
ShellService.h \
ShellTask.h\
@@ -273,6 +287,7 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
TeeBuffer.h \
TeeStream.h \
TemporaryEditor.h \
+ TemporaryFolder.h \
TemporaryObject.h \
Tools.h \
Transaction.h \
@@ -280,12 +295,11 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
ViewEditor.h \
desktop.qrc
-nodist_bin_Desktop_SOURCES = MvQIconFolderViewBase.moc.cpp \
-MvQBookmarks.moc.cpp \
+nodist_bin_Desktop_SOURCES = MvQBookmarks.moc.cpp \
+MvQAdvancedSearch.moc.cpp \
MvQEditor.moc.cpp \
MvQFileBrowser.moc.cpp \
MvQDetailedFolderView.moc.cpp MvQIconMimeData.moc.cpp \
-MvQClassBrowser.moc.cpp \
MvQColourListLine.moc.cpp \
MvQDrawerPanel.moc.cpp \
MvQPathWidget.moc.cpp Runnable.moc.cpp \
@@ -303,12 +317,13 @@ MvQIconHolder.moc.cpp \
MvQIconLine.moc.cpp MvQScrolledTextLine.moc.cpp MvQStringLine.moc.cpp MvQTextLine.moc.cpp \
MvQRequestPanelHelp.moc.cpp MvQColourHelp.moc.cpp MvQListHelp.moc.cpp \
MvQIconHelp.moc.cpp \
+MvQListFolderViewBase.moc.cpp \
MvQLogDialog.moc.cpp \
-MvQObjectBrowser.moc.cpp \
MvQPageView.moc.cpp \
MvQProductBrowser.moc.cpp \
MvQRequestPanelWidget.moc.cpp \
MvQScriptHelp.moc.cpp \
+MvQSearchPanel.moc.cpp \
MvQSliderLine.moc.cpp \
MvQStationsHelp.moc.cpp \
MvQTemplateDrawer.moc.cpp \
@@ -324,9 +339,9 @@ Input.moc.cpp
bin_Desktop_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
bin_Desktop_LDFLAGS = $(QT_LDFLAGS)$(QT_LIBS) $(LDFLAGS) -L../../lib
-bin_Desktop_LDADD = $(QT_LIBS) $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) -lMvQtGui -lMvQtUtil -lMetview -lUtil -lMars $(DBMLIB)
+bin_Desktop_LDADD = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(FLIBS) $(DBMLIB) $(QT_LIBS)
bin_Desktop_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
-AM_LDFLAGS = $(QT_LIBS)
+
BUILT_SOURCES = bin \
desktop.qrc.cpp
diff --git a/src/Desktop/Makefile.in b/src/Desktop/Makefile.in
index 785214b..84af9db 100644
--- a/src/Desktop/Makefile.in
+++ b/src/Desktop/Makefile.in
@@ -76,6 +76,7 @@ bin_PROGRAMS = bin/Desktop$(EXEEXT)
subdir = src/Desktop
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -86,11 +87,10 @@ CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
am_bin_Desktop_OBJECTS = bin_Desktop-MvMainQtBrowser.$(OBJEXT) \
- bin_Desktop-MvQ.$(OBJEXT) \
- bin_Desktop-MvQIconFolderViewBase.$(OBJEXT) \
+ bin_Desktop-MvQ.$(OBJEXT) bin_Desktop-MvQActionList.$(OBJEXT) \
+ bin_Desktop-MvQAdvancedSearch.$(OBJEXT) \
bin_Desktop-MvQBookmarks.$(OBJEXT) \
bin_Desktop-MvQBoolLine.$(OBJEXT) \
- bin_Desktop-MvQClassBrowser.$(OBJEXT) \
bin_Desktop-MvQColourHelp.$(OBJEXT) \
bin_Desktop-MvQColourLine.$(OBJEXT) \
bin_Desktop-MvQColourListLine.$(OBJEXT) \
@@ -101,10 +101,10 @@ am_bin_Desktop_OBJECTS = bin_Desktop-MvMainQtBrowser.$(OBJEXT) \
bin_Desktop-MvQDetailedFolderView.$(OBJEXT) \
bin_Desktop-MvQDrawerPanel.$(OBJEXT) \
bin_Desktop-MvQDrawerView.$(OBJEXT) \
+ bin_Desktop-MvQDropTarget.$(OBJEXT) \
bin_Desktop-MvQEditor.$(OBJEXT) \
bin_Desktop-MvQExternalHelp.$(OBJEXT) \
bin_Desktop-MvQFileBrowser.$(OBJEXT) \
- bin_Desktop-MvQFileSystemModel.$(OBJEXT) \
bin_Desktop-MvQFileWatcher.$(OBJEXT) \
bin_Desktop-MvQFolderDrawerPanel.$(OBJEXT) \
bin_Desktop-MvQFolderHistory.$(OBJEXT) \
@@ -128,27 +128,29 @@ am_bin_Desktop_OBJECTS = bin_Desktop-MvMainQtBrowser.$(OBJEXT) \
bin_Desktop-MvQIconObjectModel.$(OBJEXT) \
bin_Desktop-MvQIconProvider.$(OBJEXT) \
bin_Desktop-MvQListHelp.$(OBJEXT) \
+ bin_Desktop-MvQListFolderViewBase.$(OBJEXT) \
bin_Desktop-MvQLogDialog.$(OBJEXT) \
bin_Desktop-MvQMessageBox.$(OBJEXT) \
bin_Desktop-MvQNewIconWidget.$(OBJEXT) \
bin_Desktop-MvQNoneLine.$(OBJEXT) \
- bin_Desktop-MvQObjectBrowser.$(OBJEXT) \
bin_Desktop-MvQPageView.$(OBJEXT) \
bin_Desktop-MvQPalette.$(OBJEXT) \
bin_Desktop-MvQPathWidget.$(OBJEXT) \
bin_Desktop-MvQProductBrowser.$(OBJEXT) \
+ bin_Desktop-MvQRecentIcons.$(OBJEXT) \
bin_Desktop-MvQRequestPanelHelp.$(OBJEXT) \
bin_Desktop-MvQRequestPanelLine.$(OBJEXT) \
bin_Desktop-MvQRequestPanelWidget.$(OBJEXT) \
bin_Desktop-MvQScriptHelp.$(OBJEXT) \
bin_Desktop-MvQScrolledTextLine.$(OBJEXT) \
+ bin_Desktop-MvQSearchPanel.$(OBJEXT) \
bin_Desktop-MvQSliderLine.$(OBJEXT) \
bin_Desktop-MvQStationsHelp.$(OBJEXT) \
bin_Desktop-MvQStringLine.$(OBJEXT) \
bin_Desktop-MvQTemplateDrawer.$(OBJEXT) \
bin_Desktop-MvQTemporaryEditor.$(OBJEXT) \
bin_Desktop-MvQTextLine.$(OBJEXT) \
- bin_Desktop-MvQTools.$(OBJEXT) \
+ bin_Desktop-MvQTheme.$(OBJEXT) bin_Desktop-MvQTools.$(OBJEXT) \
bin_Desktop-MvQViewDrawer.$(OBJEXT) \
bin_Desktop-Action.$(OBJEXT) \
bin_Desktop-ActionCommand.$(OBJEXT) \
@@ -166,6 +168,8 @@ am_bin_Desktop_OBJECTS = bin_Desktop-MvMainQtBrowser.$(OBJEXT) \
bin_Desktop-FileObject.$(OBJEXT) bin_Desktop-Folder.$(OBJEXT) \
bin_Desktop-FolderDatabase.$(OBJEXT) \
bin_Desktop-FolderInfo.$(OBJEXT) \
+ bin_Desktop-FolderSearchData.$(OBJEXT) \
+ bin_Desktop-FolderSettings.$(OBJEXT) \
bin_Desktop-HelpFactory.$(OBJEXT) \
bin_Desktop-IconClass.$(OBJEXT) \
bin_Desktop-IconFactory.$(OBJEXT) \
@@ -192,6 +196,7 @@ am_bin_Desktop_OBJECTS = bin_Desktop-MvMainQtBrowser.$(OBJEXT) \
bin_Desktop-RequestPanel.$(OBJEXT) \
bin_Desktop-RequestPanelItem.$(OBJEXT) \
bin_Desktop-ReplyObserver.$(OBJEXT) \
+ bin_Desktop-ResolveTransaction.$(OBJEXT) \
bin_Desktop-RootFolder.$(OBJEXT) \
bin_Desktop-Runnable.$(OBJEXT) \
bin_Desktop-ShellService.$(OBJEXT) \
@@ -203,19 +208,18 @@ am_bin_Desktop_OBJECTS = bin_Desktop-MvMainQtBrowser.$(OBJEXT) \
bin_Desktop-Task.$(OBJEXT) bin_Desktop-TeeBuffer.$(OBJEXT) \
bin_Desktop-TeeStream.$(OBJEXT) \
bin_Desktop-TemporaryEditor.$(OBJEXT) \
+ bin_Desktop-TemporaryFolder.$(OBJEXT) \
bin_Desktop-TemporaryObject.$(OBJEXT) \
bin_Desktop-Tools.$(OBJEXT) bin_Desktop-Transaction.$(OBJEXT) \
bin_Desktop-ViewEditor.$(OBJEXT) \
bin_Desktop-Wastebasket.$(OBJEXT) \
bin_Desktop-MvQIconStripView.$(OBJEXT)
-nodist_bin_Desktop_OBJECTS = \
- bin_Desktop-MvQIconFolderViewBase.moc.$(OBJEXT) \
- bin_Desktop-MvQBookmarks.moc.$(OBJEXT) \
+nodist_bin_Desktop_OBJECTS = bin_Desktop-MvQBookmarks.moc.$(OBJEXT) \
+ bin_Desktop-MvQAdvancedSearch.moc.$(OBJEXT) \
bin_Desktop-MvQEditor.moc.$(OBJEXT) \
bin_Desktop-MvQFileBrowser.moc.$(OBJEXT) \
bin_Desktop-MvQDetailedFolderView.moc.$(OBJEXT) \
bin_Desktop-MvQIconMimeData.moc.$(OBJEXT) \
- bin_Desktop-MvQClassBrowser.moc.$(OBJEXT) \
bin_Desktop-MvQColourListLine.moc.$(OBJEXT) \
bin_Desktop-MvQDrawerPanel.moc.$(OBJEXT) \
bin_Desktop-MvQPathWidget.moc.$(OBJEXT) \
@@ -244,12 +248,13 @@ nodist_bin_Desktop_OBJECTS = \
bin_Desktop-MvQColourHelp.moc.$(OBJEXT) \
bin_Desktop-MvQListHelp.moc.$(OBJEXT) \
bin_Desktop-MvQIconHelp.moc.$(OBJEXT) \
+ bin_Desktop-MvQListFolderViewBase.moc.$(OBJEXT) \
bin_Desktop-MvQLogDialog.moc.$(OBJEXT) \
- bin_Desktop-MvQObjectBrowser.moc.$(OBJEXT) \
bin_Desktop-MvQPageView.moc.$(OBJEXT) \
bin_Desktop-MvQProductBrowser.moc.$(OBJEXT) \
bin_Desktop-MvQRequestPanelWidget.moc.$(OBJEXT) \
bin_Desktop-MvQScriptHelp.moc.$(OBJEXT) \
+ bin_Desktop-MvQSearchPanel.moc.$(OBJEXT) \
bin_Desktop-MvQSliderLine.moc.$(OBJEXT) \
bin_Desktop-MvQStationsHelp.moc.$(OBJEXT) \
bin_Desktop-MvQTemplateDrawer.moc.$(OBJEXT) \
@@ -330,6 +335,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -353,6 +360,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -537,10 +545,10 @@ SUFFIXES = .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp \
DISTCLEANFILES = $(BUILT_SOURCES)
bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQ.cc \
- MvQIconFolderViewBase.cc \
+ MvQActionList.cc \
+ MvQAdvancedSearch.cc \
MvQBookmarks.cc \
MvQBoolLine.cc \
- MvQClassBrowser.cc \
MvQColourHelp.cc \
MvQColourLine.cc \
MvQColourListLine.cc \
@@ -551,10 +559,10 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQDetailedFolderView.cc \
MvQDrawerPanel.cc \
MvQDrawerView.cc \
+ MvQDropTarget.cc \
MvQEditor.cc \
MvQExternalHelp.cc \
MvQFileBrowser.cc \
- MvQFileSystemModel.cc \
MvQFileWatcher.cc \
MvQFolderDrawerPanel.cc \
MvQFolderHistory.cc \
@@ -578,27 +586,30 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQIconObjectModel.cc \
MvQIconProvider.cc \
MvQListHelp.cc \
+ MvQListFolderViewBase.cc \
MvQLogDialog.cc \
MvQMessageBox.cc \
MvQNewIconWidget.cc \
MvQNoneLine.cc \
- MvQObjectBrowser.cc \
MvQPageView.cc \
MvQPalette.cc \
MvQPathWidget.cc \
MvQProductBrowser.cc \
+ MvQRecentIcons.cc \
MvQRequestPanelHelp.cc \
MvQRequestPanelLine.cc \
MvQRequestPanelWidget.cc \
MvQScriptHelp.cc \
MvQScrolledTextLine.cc \
+ MvQSearchPanel.cc \
MvQSliderLine.cc \
MvQStationsHelp.cc \
MvQStringLine.cc \
MvQTemplateDrawer.cc \
MvQTemporaryEditor.cc \
MvQTextLine.cc \
- MvQTools.cc \
+ MvQTheme.cc \
+ MvQTools.cc \
MvQViewDrawer.cc \
Action.cc \
ActionCommand.cc \
@@ -619,6 +630,8 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
Folder.cc \
FolderDatabase.cc \
FolderInfo.cc \
+ FolderSearchData.cc \
+ FolderSettings.cc \
HelpFactory.cc \
IconClass.cc \
IconFactory.cc \
@@ -650,7 +663,8 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
RequestPanel.cc \
RequestPanelItem.cc \
ReplyObserver.cc \
- RootFolder.cc \
+ ResolveTransaction.cc \
+ RootFolder.cc \
Runnable.cc \
ShellService.cc \
ShellTask.cc \
@@ -664,16 +678,17 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
TeeBuffer.cc \
TeeStream.cc \
TemporaryEditor.cc \
+ TemporaryFolder.cc \
TemporaryObject.cc \
Tools.cc \
Transaction.cc \
ViewEditor.cc \
Wastebasket.cc \
MvQ.h \
- MvQIconFolderViewBase.h \
+ MvQActionList.h \
+ MvQAdvancedSearch.h \
MvQBookmarks.h \
MvQBoolLine.h \
- MvQClassBrowser.h \
MvQColourHelp.h \
MvQColourLine.h \
MvQColourListLine.h \
@@ -684,11 +699,11 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQDetailedFolderView.h \
MvQDrawerPanel.h \
MvQDrawerView.h \
+ MvQDropTarget.h \
MvQEditor.h \
MvQEditorDrawerPanel.h \
MvQExternalHelp.h \
MvQFileBrowser.h \
- MvQFileSystemModel.h \
MvQFileWatcher.h \
MvQFolderDrawerPanel.h \
MvQFolderHistory.h \
@@ -712,27 +727,30 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
MvQIconObjectModel.h \
MvQIconProvider.h \
MvQListHelp.h \
+ MvQListFolderViewBase.h \
MvQLogDialog.h \
MvQMessageBox.h \
MvQNewIconWidget.h \
MvQNoneLine.h \
- MvQObjectBrowser.h \
MvQPageView.h \
MvQPalette.h \
MvQPathWidget.h \
MvQProductBrowser.h \
- MvQRequestPanelHelp.h \
+ MvQRecentIcons.h \
+ MvQRequestPanelHelp.h \
MvQRequestPanelLine.h \
MvQRequestPanelWidget.h \
MvQScriptHelp.h \
MvQScrolledTextLine.h \
+ MvQSearchPanel.h \
MvQSliderLine.h \
MvQStationsHelp.h \
MvQStringLine.h \
MvQTemplateDrawer.h \
MvQTemporaryEditor.h \
MvQTextLine.h \
- MvQTools.h \
+ MvQTheme.h \
+ MvQTools.h \
MvQViewDrawer.h \
MvQIconStripView.cc \
MvQIconStripView.h \
@@ -743,6 +761,7 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
ConfigLoader.h \
Counted.h \
Dependancy.h \
+ Desktop.h \
Drop.h \
Editor.h \
EditorDrawer.h \
@@ -759,6 +778,8 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
FolderInfo.h \
FolderObserver.h \
FolderPresenter.h \
+ FolderSearchData.h \
+ FolderSettings.h \
HelpFactory.h \
IconClass.h \
IconFactory.h \
@@ -791,7 +812,8 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
RequestPanel.h \
RequestPanelItem.h \
ReplyObserver.h \
- RootFolder.h \
+ ResolveTransaction.h \
+ RootFolder.h \
Runnable.h \
ShellService.h \
ShellTask.h\
@@ -806,6 +828,7 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
TeeBuffer.h \
TeeStream.h \
TemporaryEditor.h \
+ TemporaryFolder.h \
TemporaryObject.h \
Tools.h \
Transaction.h \
@@ -813,12 +836,11 @@ bin_Desktop_SOURCES = MvMainQtBrowser.cc \
ViewEditor.h \
desktop.qrc
-nodist_bin_Desktop_SOURCES = MvQIconFolderViewBase.moc.cpp \
-MvQBookmarks.moc.cpp \
+nodist_bin_Desktop_SOURCES = MvQBookmarks.moc.cpp \
+MvQAdvancedSearch.moc.cpp \
MvQEditor.moc.cpp \
MvQFileBrowser.moc.cpp \
MvQDetailedFolderView.moc.cpp MvQIconMimeData.moc.cpp \
-MvQClassBrowser.moc.cpp \
MvQColourListLine.moc.cpp \
MvQDrawerPanel.moc.cpp \
MvQPathWidget.moc.cpp Runnable.moc.cpp \
@@ -836,12 +858,13 @@ MvQIconHolder.moc.cpp \
MvQIconLine.moc.cpp MvQScrolledTextLine.moc.cpp MvQStringLine.moc.cpp MvQTextLine.moc.cpp \
MvQRequestPanelHelp.moc.cpp MvQColourHelp.moc.cpp MvQListHelp.moc.cpp \
MvQIconHelp.moc.cpp \
+MvQListFolderViewBase.moc.cpp \
MvQLogDialog.moc.cpp \
-MvQObjectBrowser.moc.cpp \
MvQPageView.moc.cpp \
MvQProductBrowser.moc.cpp \
MvQRequestPanelWidget.moc.cpp \
MvQScriptHelp.moc.cpp \
+MvQSearchPanel.moc.cpp \
MvQSliderLine.moc.cpp \
MvQStationsHelp.moc.cpp \
MvQTemplateDrawer.moc.cpp \
@@ -857,9 +880,8 @@ Input.moc.cpp
bin_Desktop_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
bin_Desktop_LDFLAGS = $(QT_LDFLAGS)$(QT_LIBS) $(LDFLAGS) -L../../lib
-bin_Desktop_LDADD = $(QT_LIBS) $(LDADD) $(STANDARD_METVIEW_LIBS) $(FLIBS) -lMvQtGui -lMvQtUtil -lMetview -lUtil -lMars $(DBMLIB)
+bin_Desktop_LDADD = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(FLIBS) $(DBMLIB) $(QT_LIBS)
bin_Desktop_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
-AM_LDFLAGS = $(QT_LIBS)
BUILT_SOURCES = bin \
desktop.qrc.cpp
@@ -976,6 +998,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Folder.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FolderDatabase.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FolderInfo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FolderSearchData.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-FolderSettings.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-HelpFactory.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-IconClass.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-IconFactory.Po at am__quote@
@@ -1002,12 +1026,13 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MetviewTask.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvMainQtBrowser.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQ.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQActionList.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQAdvancedSearch.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQAdvancedSearch.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQBookmarks.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQBoolLine.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQBoolLine.moc.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQClassBrowser.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQColourHelp.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQColourHelp.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQColourLine.Po at am__quote@
@@ -1024,12 +1049,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDrawerPanel.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDrawerPanel.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDrawerView.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQDropTarget.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQEditor.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQEditor.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQExternalHelp.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileBrowser.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileBrowser.moc.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileSystemModel.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileWatcher.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFileWatcher.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQFolderDrawerPanel.Po at am__quote@
@@ -1055,8 +1080,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQHelpBrowser.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconFolderView.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconFolderView.moc.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconHelp.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconHelp.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconHelpView.Po at am__quote@
@@ -1069,6 +1092,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconObjectModel.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconProvider.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQIconStripView.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQListFolderViewBase.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQListFolderViewBase.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQListHelp.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQListHelp.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQLogDialog.Po at am__quote@
@@ -1077,8 +1102,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQNewIconWidget.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQNewIconWidget.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQNoneLine.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQObjectBrowser.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQPageView.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQPageView.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQPalette.Po at am__quote@
@@ -1086,6 +1109,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQPathWidget.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQProductBrowser.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQProductBrowser.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRecentIcons.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQRequestPanelLine.Po at am__quote@
@@ -1096,6 +1120,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQScriptHelp.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQScrolledTextLine.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQScrolledTextLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQSearchPanel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQSearchPanel.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQSliderLine.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQStationsHelp.Po at am__quote@
@@ -1108,6 +1134,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTemporaryEditor.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTextLine.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTextLine.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTheme.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTools.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQTools.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-MvQViewDrawer.Po at am__quote@
@@ -1121,6 +1148,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ReplyObserver.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-RequestPanel.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-RequestPanelItem.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-ResolveTransaction.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-RootFolder.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Runnable.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Runnable.moc.Po at am__quote@
@@ -1137,6 +1165,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-TeeBuffer.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-TeeStream.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-TemporaryEditor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-TemporaryFolder.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-TemporaryObject.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Tools.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Desktop-Tools.moc.Po at am__quote@
@@ -1202,21 +1231,37 @@ bin_Desktop-MvQ.obj: MvQ.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQ.obj `if test -f 'MvQ.cc'; then $(CYGPATH_W) 'MvQ.cc'; else $(CYGPATH_W) '$(srcdir)/MvQ.cc'; fi`
-bin_Desktop-MvQIconFolderViewBase.o: MvQIconFolderViewBase.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderViewBase.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Tpo -c -o bin_Desktop-MvQIconFolderViewBase.o `test -f 'MvQIconFolderViewBase.cc' || echo '$(srcdir)/'`MvQIconFolderViewBase.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Po
+bin_Desktop-MvQActionList.o: MvQActionList.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQActionList.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQActionList.Tpo -c -o bin_Desktop-MvQActionList.o `test -f 'MvQActionList.cc' || echo '$(srcdir)/'`MvQActionList.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQActionList.Tpo $(DEPDIR)/bin_Desktop-MvQActionList.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQIconFolderViewBase.cc' object='bin_Desktop-MvQIconFolderViewBase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQActionList.cc' object='bin_Desktop-MvQActionList.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderViewBase.o `test -f 'MvQIconFolderViewBase.cc' || echo '$(srcdir)/'`MvQIconFolderViewBase.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQActionList.o `test -f 'MvQActionList.cc' || echo '$(srcdir)/'`MvQActionList.cc
-bin_Desktop-MvQIconFolderViewBase.obj: MvQIconFolderViewBase.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderViewBase.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Tpo -c -o bin_Desktop-MvQIconFolderViewBase.obj `if test -f 'MvQIconFolderViewBase.cc'; then $(CYGPATH_W) 'MvQIconFolderViewBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderViewBase.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.Po
+bin_Desktop-MvQActionList.obj: MvQActionList.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQActionList.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQActionList.Tpo -c -o bin_Desktop-MvQActionList.obj `if test -f 'MvQActionList.cc'; then $(CYGPATH_W) 'MvQActionList.cc'; else $(CYGPATH_W) '$(srcdir)/MvQActionList.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQActionList.Tpo $(DEPDIR)/bin_Desktop-MvQActionList.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQIconFolderViewBase.cc' object='bin_Desktop-MvQIconFolderViewBase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQActionList.cc' object='bin_Desktop-MvQActionList.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderViewBase.obj `if test -f 'MvQIconFolderViewBase.cc'; then $(CYGPATH_W) 'MvQIconFolderViewBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderViewBase.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQActionList.obj `if test -f 'MvQActionList.cc'; then $(CYGPATH_W) 'MvQActionList.cc'; else $(CYGPATH_W) '$(srcdir)/MvQActionList.cc'; fi`
+
+bin_Desktop-MvQAdvancedSearch.o: MvQAdvancedSearch.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQAdvancedSearch.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.Tpo -c -o bin_Desktop-MvQAdvancedSearch.o `test -f 'MvQAdvancedSearch.cc' || echo '$(srcdir)/'`MvQAdvancedSearch.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.Tpo $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQAdvancedSearch.cc' object='bin_Desktop-MvQAdvancedSearch.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQAdvancedSearch.o `test -f 'MvQAdvancedSearch.cc' || echo '$(srcdir)/'`MvQAdvancedSearch.cc
+
+bin_Desktop-MvQAdvancedSearch.obj: MvQAdvancedSearch.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQAdvancedSearch.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.Tpo -c -o bin_Desktop-MvQAdvancedSearch.obj `if test -f 'MvQAdvancedSearch.cc'; then $(CYGPATH_W) 'MvQAdvancedSearch.cc'; else $(CYGPATH_W) '$(srcdir)/MvQAdvancedSearch.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.Tpo $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQAdvancedSearch.cc' object='bin_Desktop-MvQAdvancedSearch.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQAdvancedSearch.obj `if test -f 'MvQAdvancedSearch.cc'; then $(CYGPATH_W) 'MvQAdvancedSearch.cc'; else $(CYGPATH_W) '$(srcdir)/MvQAdvancedSearch.cc'; fi`
bin_Desktop-MvQBookmarks.o: MvQBookmarks.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBookmarks.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBookmarks.Tpo -c -o bin_Desktop-MvQBookmarks.o `test -f 'MvQBookmarks.cc' || echo '$(srcdir)/'`MvQBookmarks.cc
@@ -1250,22 +1295,6 @@ bin_Desktop-MvQBoolLine.obj: MvQBoolLine.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBoolLine.obj `if test -f 'MvQBoolLine.cc'; then $(CYGPATH_W) 'MvQBoolLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQBoolLine.cc'; fi`
-bin_Desktop-MvQClassBrowser.o: MvQClassBrowser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQClassBrowser.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQClassBrowser.Tpo -c -o bin_Desktop-MvQClassBrowser.o `test -f 'MvQClassBrowser.cc' || echo '$(srcdir)/'`MvQClassBrowser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQClassBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQClassBrowser.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQClassBrowser.cc' object='bin_Desktop-MvQClassBrowser.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQClassBrowser.o `test -f 'MvQClassBrowser.cc' || echo '$(srcdir)/'`MvQClassBrowser.cc
-
-bin_Desktop-MvQClassBrowser.obj: MvQClassBrowser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQClassBrowser.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQClassBrowser.Tpo -c -o bin_Desktop-MvQClassBrowser.obj `if test -f 'MvQClassBrowser.cc'; then $(CYGPATH_W) 'MvQClassBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQClassBrowser.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQClassBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQClassBrowser.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQClassBrowser.cc' object='bin_Desktop-MvQClassBrowser.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQClassBrowser.obj `if test -f 'MvQClassBrowser.cc'; then $(CYGPATH_W) 'MvQClassBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQClassBrowser.cc'; fi`
-
bin_Desktop-MvQColourHelp.o: MvQColourHelp.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourHelp.Tpo -c -o bin_Desktop-MvQColourHelp.o `test -f 'MvQColourHelp.cc' || echo '$(srcdir)/'`MvQColourHelp.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourHelp.Tpo $(DEPDIR)/bin_Desktop-MvQColourHelp.Po
@@ -1426,6 +1455,22 @@ bin_Desktop-MvQDrawerView.obj: MvQDrawerView.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDrawerView.obj `if test -f 'MvQDrawerView.cc'; then $(CYGPATH_W) 'MvQDrawerView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDrawerView.cc'; fi`
+bin_Desktop-MvQDropTarget.o: MvQDropTarget.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDropTarget.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDropTarget.Tpo -c -o bin_Desktop-MvQDropTarget.o `test -f 'MvQDropTarget.cc' || echo '$(srcdir)/'`MvQDropTarget.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDropTarget.Tpo $(DEPDIR)/bin_Desktop-MvQDropTarget.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQDropTarget.cc' object='bin_Desktop-MvQDropTarget.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDropTarget.o `test -f 'MvQDropTarget.cc' || echo '$(srcdir)/'`MvQDropTarget.cc
+
+bin_Desktop-MvQDropTarget.obj: MvQDropTarget.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQDropTarget.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQDropTarget.Tpo -c -o bin_Desktop-MvQDropTarget.obj `if test -f 'MvQDropTarget.cc'; then $(CYGPATH_W) 'MvQDropTarget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDropTarget.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQDropTarget.Tpo $(DEPDIR)/bin_Desktop-MvQDropTarget.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQDropTarget.cc' object='bin_Desktop-MvQDropTarget.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQDropTarget.obj `if test -f 'MvQDropTarget.cc'; then $(CYGPATH_W) 'MvQDropTarget.cc'; else $(CYGPATH_W) '$(srcdir)/MvQDropTarget.cc'; fi`
+
bin_Desktop-MvQEditor.o: MvQEditor.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQEditor.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQEditor.Tpo -c -o bin_Desktop-MvQEditor.o `test -f 'MvQEditor.cc' || echo '$(srcdir)/'`MvQEditor.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQEditor.Tpo $(DEPDIR)/bin_Desktop-MvQEditor.Po
@@ -1474,22 +1519,6 @@ bin_Desktop-MvQFileBrowser.obj: MvQFileBrowser.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileBrowser.obj `if test -f 'MvQFileBrowser.cc'; then $(CYGPATH_W) 'MvQFileBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileBrowser.cc'; fi`
-bin_Desktop-MvQFileSystemModel.o: MvQFileSystemModel.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileSystemModel.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Tpo -c -o bin_Desktop-MvQFileSystemModel.o `test -f 'MvQFileSystemModel.cc' || echo '$(srcdir)/'`MvQFileSystemModel.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Tpo $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQFileSystemModel.cc' object='bin_Desktop-MvQFileSystemModel.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileSystemModel.o `test -f 'MvQFileSystemModel.cc' || echo '$(srcdir)/'`MvQFileSystemModel.cc
-
-bin_Desktop-MvQFileSystemModel.obj: MvQFileSystemModel.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileSystemModel.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Tpo -c -o bin_Desktop-MvQFileSystemModel.obj `if test -f 'MvQFileSystemModel.cc'; then $(CYGPATH_W) 'MvQFileSystemModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileSystemModel.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Tpo $(DEPDIR)/bin_Desktop-MvQFileSystemModel.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQFileSystemModel.cc' object='bin_Desktop-MvQFileSystemModel.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQFileSystemModel.obj `if test -f 'MvQFileSystemModel.cc'; then $(CYGPATH_W) 'MvQFileSystemModel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQFileSystemModel.cc'; fi`
-
bin_Desktop-MvQFileWatcher.o: MvQFileWatcher.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQFileWatcher.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQFileWatcher.Tpo -c -o bin_Desktop-MvQFileWatcher.o `test -f 'MvQFileWatcher.cc' || echo '$(srcdir)/'`MvQFileWatcher.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQFileWatcher.Tpo $(DEPDIR)/bin_Desktop-MvQFileWatcher.Po
@@ -1858,6 +1887,22 @@ bin_Desktop-MvQListHelp.obj: MvQListHelp.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQListHelp.obj `if test -f 'MvQListHelp.cc'; then $(CYGPATH_W) 'MvQListHelp.cc'; else $(CYGPATH_W) '$(srcdir)/MvQListHelp.cc'; fi`
+bin_Desktop-MvQListFolderViewBase.o: MvQListFolderViewBase.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQListFolderViewBase.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.Tpo -c -o bin_Desktop-MvQListFolderViewBase.o `test -f 'MvQListFolderViewBase.cc' || echo '$(srcdir)/'`MvQListFolderViewBase.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.Tpo $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQListFolderViewBase.cc' object='bin_Desktop-MvQListFolderViewBase.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQListFolderViewBase.o `test -f 'MvQListFolderViewBase.cc' || echo '$(srcdir)/'`MvQListFolderViewBase.cc
+
+bin_Desktop-MvQListFolderViewBase.obj: MvQListFolderViewBase.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQListFolderViewBase.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.Tpo -c -o bin_Desktop-MvQListFolderViewBase.obj `if test -f 'MvQListFolderViewBase.cc'; then $(CYGPATH_W) 'MvQListFolderViewBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQListFolderViewBase.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.Tpo $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQListFolderViewBase.cc' object='bin_Desktop-MvQListFolderViewBase.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQListFolderViewBase.obj `if test -f 'MvQListFolderViewBase.cc'; then $(CYGPATH_W) 'MvQListFolderViewBase.cc'; else $(CYGPATH_W) '$(srcdir)/MvQListFolderViewBase.cc'; fi`
+
bin_Desktop-MvQLogDialog.o: MvQLogDialog.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQLogDialog.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQLogDialog.Tpo -c -o bin_Desktop-MvQLogDialog.o `test -f 'MvQLogDialog.cc' || echo '$(srcdir)/'`MvQLogDialog.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQLogDialog.Tpo $(DEPDIR)/bin_Desktop-MvQLogDialog.Po
@@ -1922,22 +1967,6 @@ bin_Desktop-MvQNoneLine.obj: MvQNoneLine.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQNoneLine.obj `if test -f 'MvQNoneLine.cc'; then $(CYGPATH_W) 'MvQNoneLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQNoneLine.cc'; fi`
-bin_Desktop-MvQObjectBrowser.o: MvQObjectBrowser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQObjectBrowser.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Tpo -c -o bin_Desktop-MvQObjectBrowser.o `test -f 'MvQObjectBrowser.cc' || echo '$(srcdir)/'`MvQObjectBrowser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQObjectBrowser.cc' object='bin_Desktop-MvQObjectBrowser.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQObjectBrowser.o `test -f 'MvQObjectBrowser.cc' || echo '$(srcdir)/'`MvQObjectBrowser.cc
-
-bin_Desktop-MvQObjectBrowser.obj: MvQObjectBrowser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQObjectBrowser.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Tpo -c -o bin_Desktop-MvQObjectBrowser.obj `if test -f 'MvQObjectBrowser.cc'; then $(CYGPATH_W) 'MvQObjectBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQObjectBrowser.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Tpo $(DEPDIR)/bin_Desktop-MvQObjectBrowser.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQObjectBrowser.cc' object='bin_Desktop-MvQObjectBrowser.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQObjectBrowser.obj `if test -f 'MvQObjectBrowser.cc'; then $(CYGPATH_W) 'MvQObjectBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQObjectBrowser.cc'; fi`
-
bin_Desktop-MvQPageView.o: MvQPageView.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPageView.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPageView.Tpo -c -o bin_Desktop-MvQPageView.o `test -f 'MvQPageView.cc' || echo '$(srcdir)/'`MvQPageView.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPageView.Tpo $(DEPDIR)/bin_Desktop-MvQPageView.Po
@@ -2002,6 +2031,22 @@ bin_Desktop-MvQProductBrowser.obj: MvQProductBrowser.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQProductBrowser.obj `if test -f 'MvQProductBrowser.cc'; then $(CYGPATH_W) 'MvQProductBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQProductBrowser.cc'; fi`
+bin_Desktop-MvQRecentIcons.o: MvQRecentIcons.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRecentIcons.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRecentIcons.Tpo -c -o bin_Desktop-MvQRecentIcons.o `test -f 'MvQRecentIcons.cc' || echo '$(srcdir)/'`MvQRecentIcons.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRecentIcons.Tpo $(DEPDIR)/bin_Desktop-MvQRecentIcons.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQRecentIcons.cc' object='bin_Desktop-MvQRecentIcons.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRecentIcons.o `test -f 'MvQRecentIcons.cc' || echo '$(srcdir)/'`MvQRecentIcons.cc
+
+bin_Desktop-MvQRecentIcons.obj: MvQRecentIcons.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRecentIcons.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRecentIcons.Tpo -c -o bin_Desktop-MvQRecentIcons.obj `if test -f 'MvQRecentIcons.cc'; then $(CYGPATH_W) 'MvQRecentIcons.cc'; else $(CYGPATH_W) '$(srcdir)/MvQRecentIcons.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRecentIcons.Tpo $(DEPDIR)/bin_Desktop-MvQRecentIcons.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQRecentIcons.cc' object='bin_Desktop-MvQRecentIcons.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQRecentIcons.obj `if test -f 'MvQRecentIcons.cc'; then $(CYGPATH_W) 'MvQRecentIcons.cc'; else $(CYGPATH_W) '$(srcdir)/MvQRecentIcons.cc'; fi`
+
bin_Desktop-MvQRequestPanelHelp.o: MvQRequestPanelHelp.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQRequestPanelHelp.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Tpo -c -o bin_Desktop-MvQRequestPanelHelp.o `test -f 'MvQRequestPanelHelp.cc' || echo '$(srcdir)/'`MvQRequestPanelHelp.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Tpo $(DEPDIR)/bin_Desktop-MvQRequestPanelHelp.Po
@@ -2082,6 +2127,22 @@ bin_Desktop-MvQScrolledTextLine.obj: MvQScrolledTextLine.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScrolledTextLine.obj `if test -f 'MvQScrolledTextLine.cc'; then $(CYGPATH_W) 'MvQScrolledTextLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQScrolledTextLine.cc'; fi`
+bin_Desktop-MvQSearchPanel.o: MvQSearchPanel.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSearchPanel.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSearchPanel.Tpo -c -o bin_Desktop-MvQSearchPanel.o `test -f 'MvQSearchPanel.cc' || echo '$(srcdir)/'`MvQSearchPanel.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSearchPanel.Tpo $(DEPDIR)/bin_Desktop-MvQSearchPanel.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQSearchPanel.cc' object='bin_Desktop-MvQSearchPanel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQSearchPanel.o `test -f 'MvQSearchPanel.cc' || echo '$(srcdir)/'`MvQSearchPanel.cc
+
+bin_Desktop-MvQSearchPanel.obj: MvQSearchPanel.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSearchPanel.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSearchPanel.Tpo -c -o bin_Desktop-MvQSearchPanel.obj `if test -f 'MvQSearchPanel.cc'; then $(CYGPATH_W) 'MvQSearchPanel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQSearchPanel.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSearchPanel.Tpo $(DEPDIR)/bin_Desktop-MvQSearchPanel.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQSearchPanel.cc' object='bin_Desktop-MvQSearchPanel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQSearchPanel.obj `if test -f 'MvQSearchPanel.cc'; then $(CYGPATH_W) 'MvQSearchPanel.cc'; else $(CYGPATH_W) '$(srcdir)/MvQSearchPanel.cc'; fi`
+
bin_Desktop-MvQSliderLine.o: MvQSliderLine.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSliderLine.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSliderLine.Tpo -c -o bin_Desktop-MvQSliderLine.o `test -f 'MvQSliderLine.cc' || echo '$(srcdir)/'`MvQSliderLine.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSliderLine.Tpo $(DEPDIR)/bin_Desktop-MvQSliderLine.Po
@@ -2178,6 +2239,22 @@ bin_Desktop-MvQTextLine.obj: MvQTextLine.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTextLine.obj `if test -f 'MvQTextLine.cc'; then $(CYGPATH_W) 'MvQTextLine.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTextLine.cc'; fi`
+bin_Desktop-MvQTheme.o: MvQTheme.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTheme.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTheme.Tpo -c -o bin_Desktop-MvQTheme.o `test -f 'MvQTheme.cc' || echo '$(srcdir)/'`MvQTheme.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTheme.Tpo $(DEPDIR)/bin_Desktop-MvQTheme.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQTheme.cc' object='bin_Desktop-MvQTheme.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTheme.o `test -f 'MvQTheme.cc' || echo '$(srcdir)/'`MvQTheme.cc
+
+bin_Desktop-MvQTheme.obj: MvQTheme.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTheme.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTheme.Tpo -c -o bin_Desktop-MvQTheme.obj `if test -f 'MvQTheme.cc'; then $(CYGPATH_W) 'MvQTheme.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTheme.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTheme.Tpo $(DEPDIR)/bin_Desktop-MvQTheme.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQTheme.cc' object='bin_Desktop-MvQTheme.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQTheme.obj `if test -f 'MvQTheme.cc'; then $(CYGPATH_W) 'MvQTheme.cc'; else $(CYGPATH_W) '$(srcdir)/MvQTheme.cc'; fi`
+
bin_Desktop-MvQTools.o: MvQTools.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQTools.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQTools.Tpo -c -o bin_Desktop-MvQTools.o `test -f 'MvQTools.cc' || echo '$(srcdir)/'`MvQTools.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQTools.Tpo $(DEPDIR)/bin_Desktop-MvQTools.Po
@@ -2514,6 +2591,38 @@ bin_Desktop-FolderInfo.obj: FolderInfo.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FolderInfo.obj `if test -f 'FolderInfo.cc'; then $(CYGPATH_W) 'FolderInfo.cc'; else $(CYGPATH_W) '$(srcdir)/FolderInfo.cc'; fi`
+bin_Desktop-FolderSearchData.o: FolderSearchData.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FolderSearchData.o -MD -MP -MF $(DEPDIR)/bin_Desktop-FolderSearchData.Tpo -c -o bin_Desktop-FolderSearchData.o `test -f 'FolderSearchData.cc' || echo '$(srcdir)/'`FolderSearchData.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FolderSearchData.Tpo $(DEPDIR)/bin_Desktop-FolderSearchData.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FolderSearchData.cc' object='bin_Desktop-FolderSearchData.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FolderSearchData.o `test -f 'FolderSearchData.cc' || echo '$(srcdir)/'`FolderSearchData.cc
+
+bin_Desktop-FolderSearchData.obj: FolderSearchData.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FolderSearchData.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-FolderSearchData.Tpo -c -o bin_Desktop-FolderSearchData.obj `if test -f 'FolderSearchData.cc'; then $(CYGPATH_W) 'FolderSearchData.cc'; else $(CYGPATH_W) '$(srcdir)/FolderSearchData.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FolderSearchData.Tpo $(DEPDIR)/bin_Desktop-FolderSearchData.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FolderSearchData.cc' object='bin_Desktop-FolderSearchData.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FolderSearchData.obj `if test -f 'FolderSearchData.cc'; then $(CYGPATH_W) 'FolderSearchData.cc'; else $(CYGPATH_W) '$(srcdir)/FolderSearchData.cc'; fi`
+
+bin_Desktop-FolderSettings.o: FolderSettings.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FolderSettings.o -MD -MP -MF $(DEPDIR)/bin_Desktop-FolderSettings.Tpo -c -o bin_Desktop-FolderSettings.o `test -f 'FolderSettings.cc' || echo '$(srcdir)/'`FolderSettings.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FolderSettings.Tpo $(DEPDIR)/bin_Desktop-FolderSettings.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FolderSettings.cc' object='bin_Desktop-FolderSettings.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FolderSettings.o `test -f 'FolderSettings.cc' || echo '$(srcdir)/'`FolderSettings.cc
+
+bin_Desktop-FolderSettings.obj: FolderSettings.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-FolderSettings.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-FolderSettings.Tpo -c -o bin_Desktop-FolderSettings.obj `if test -f 'FolderSettings.cc'; then $(CYGPATH_W) 'FolderSettings.cc'; else $(CYGPATH_W) '$(srcdir)/FolderSettings.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-FolderSettings.Tpo $(DEPDIR)/bin_Desktop-FolderSettings.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='FolderSettings.cc' object='bin_Desktop-FolderSettings.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-FolderSettings.obj `if test -f 'FolderSettings.cc'; then $(CYGPATH_W) 'FolderSettings.cc'; else $(CYGPATH_W) '$(srcdir)/FolderSettings.cc'; fi`
+
bin_Desktop-HelpFactory.o: HelpFactory.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-HelpFactory.o -MD -MP -MF $(DEPDIR)/bin_Desktop-HelpFactory.Tpo -c -o bin_Desktop-HelpFactory.o `test -f 'HelpFactory.cc' || echo '$(srcdir)/'`HelpFactory.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-HelpFactory.Tpo $(DEPDIR)/bin_Desktop-HelpFactory.Po
@@ -3010,6 +3119,22 @@ bin_Desktop-ReplyObserver.obj: ReplyObserver.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ReplyObserver.obj `if test -f 'ReplyObserver.cc'; then $(CYGPATH_W) 'ReplyObserver.cc'; else $(CYGPATH_W) '$(srcdir)/ReplyObserver.cc'; fi`
+bin_Desktop-ResolveTransaction.o: ResolveTransaction.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ResolveTransaction.o -MD -MP -MF $(DEPDIR)/bin_Desktop-ResolveTransaction.Tpo -c -o bin_Desktop-ResolveTransaction.o `test -f 'ResolveTransaction.cc' || echo '$(srcdir)/'`ResolveTransaction.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ResolveTransaction.Tpo $(DEPDIR)/bin_Desktop-ResolveTransaction.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ResolveTransaction.cc' object='bin_Desktop-ResolveTransaction.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ResolveTransaction.o `test -f 'ResolveTransaction.cc' || echo '$(srcdir)/'`ResolveTransaction.cc
+
+bin_Desktop-ResolveTransaction.obj: ResolveTransaction.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-ResolveTransaction.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-ResolveTransaction.Tpo -c -o bin_Desktop-ResolveTransaction.obj `if test -f 'ResolveTransaction.cc'; then $(CYGPATH_W) 'ResolveTransaction.cc'; else $(CYGPATH_W) '$(srcdir)/ResolveTransaction.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-ResolveTransaction.Tpo $(DEPDIR)/bin_Desktop-ResolveTransaction.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ResolveTransaction.cc' object='bin_Desktop-ResolveTransaction.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-ResolveTransaction.obj `if test -f 'ResolveTransaction.cc'; then $(CYGPATH_W) 'ResolveTransaction.cc'; else $(CYGPATH_W) '$(srcdir)/ResolveTransaction.cc'; fi`
+
bin_Desktop-RootFolder.o: RootFolder.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-RootFolder.o -MD -MP -MF $(DEPDIR)/bin_Desktop-RootFolder.Tpo -c -o bin_Desktop-RootFolder.o `test -f 'RootFolder.cc' || echo '$(srcdir)/'`RootFolder.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-RootFolder.Tpo $(DEPDIR)/bin_Desktop-RootFolder.Po
@@ -3234,6 +3359,22 @@ bin_Desktop-TemporaryEditor.obj: TemporaryEditor.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TemporaryEditor.obj `if test -f 'TemporaryEditor.cc'; then $(CYGPATH_W) 'TemporaryEditor.cc'; else $(CYGPATH_W) '$(srcdir)/TemporaryEditor.cc'; fi`
+bin_Desktop-TemporaryFolder.o: TemporaryFolder.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TemporaryFolder.o -MD -MP -MF $(DEPDIR)/bin_Desktop-TemporaryFolder.Tpo -c -o bin_Desktop-TemporaryFolder.o `test -f 'TemporaryFolder.cc' || echo '$(srcdir)/'`TemporaryFolder.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TemporaryFolder.Tpo $(DEPDIR)/bin_Desktop-TemporaryFolder.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='TemporaryFolder.cc' object='bin_Desktop-TemporaryFolder.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TemporaryFolder.o `test -f 'TemporaryFolder.cc' || echo '$(srcdir)/'`TemporaryFolder.cc
+
+bin_Desktop-TemporaryFolder.obj: TemporaryFolder.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TemporaryFolder.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-TemporaryFolder.Tpo -c -o bin_Desktop-TemporaryFolder.obj `if test -f 'TemporaryFolder.cc'; then $(CYGPATH_W) 'TemporaryFolder.cc'; else $(CYGPATH_W) '$(srcdir)/TemporaryFolder.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TemporaryFolder.Tpo $(DEPDIR)/bin_Desktop-TemporaryFolder.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='TemporaryFolder.cc' object='bin_Desktop-TemporaryFolder.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-TemporaryFolder.obj `if test -f 'TemporaryFolder.cc'; then $(CYGPATH_W) 'TemporaryFolder.cc'; else $(CYGPATH_W) '$(srcdir)/TemporaryFolder.cc'; fi`
+
bin_Desktop-TemporaryObject.o: TemporaryObject.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-TemporaryObject.o -MD -MP -MF $(DEPDIR)/bin_Desktop-TemporaryObject.Tpo -c -o bin_Desktop-TemporaryObject.o `test -f 'TemporaryObject.cc' || echo '$(srcdir)/'`TemporaryObject.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-TemporaryObject.Tpo $(DEPDIR)/bin_Desktop-TemporaryObject.Po
@@ -3330,22 +3471,6 @@ bin_Desktop-MvQIconStripView.obj: MvQIconStripView.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconStripView.obj `if test -f 'MvQIconStripView.cc'; then $(CYGPATH_W) 'MvQIconStripView.cc'; else $(CYGPATH_W) '$(srcdir)/MvQIconStripView.cc'; fi`
-bin_Desktop-MvQIconFolderViewBase.moc.o: MvQIconFolderViewBase.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderViewBase.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Tpo -c -o bin_Desktop-MvQIconFolderViewBase.moc.o `test -f 'MvQIconFolderViewBase.moc.cpp' || echo '$(srcdir)/'`MvQIconFolderViewBase.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQIconFolderViewBase.moc.cpp' object='bin_Desktop-MvQIconFolderViewBase.moc.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderViewBase.moc.o `test -f 'MvQIconFolderViewBase.moc.cpp' || echo '$(srcdir)/'`MvQIconFolderViewBase.moc.cpp
-
-bin_Desktop-MvQIconFolderViewBase.moc.obj: MvQIconFolderViewBase.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQIconFolderViewBase.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Tpo -c -o bin_Desktop-MvQIconFolderViewBase.moc.obj `if test -f 'MvQIconFolderViewBase.moc.cpp'; then $(CYGPATH_W) 'MvQIconFolderViewBase.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderViewBase.moc.cpp'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Tpo $(DEPDIR)/bin_Desktop-MvQIconFolderViewBase.moc.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQIconFolderViewBase.moc.cpp' object='bin_Desktop-MvQIconFolderViewBase.moc.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconFolderViewBase.moc.obj `if test -f 'MvQIconFolderViewBase.moc.cpp'; then $(CYGPATH_W) 'MvQIconFolderViewBase.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconFolderViewBase.moc.cpp'; fi`
-
bin_Desktop-MvQBookmarks.moc.o: MvQBookmarks.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQBookmarks.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Tpo -c -o bin_Desktop-MvQBookmarks.moc.o `test -f 'MvQBookmarks.moc.cpp' || echo '$(srcdir)/'`MvQBookmarks.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Tpo $(DEPDIR)/bin_Desktop-MvQBookmarks.moc.Po
@@ -3362,6 +3487,22 @@ bin_Desktop-MvQBookmarks.moc.obj: MvQBookmarks.moc.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQBookmarks.moc.obj `if test -f 'MvQBookmarks.moc.cpp'; then $(CYGPATH_W) 'MvQBookmarks.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQBookmarks.moc.cpp'; fi`
+bin_Desktop-MvQAdvancedSearch.moc.o: MvQAdvancedSearch.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQAdvancedSearch.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.moc.Tpo -c -o bin_Desktop-MvQAdvancedSearch.moc.o `test -f 'MvQAdvancedSearch.moc.cpp' || echo '$(srcdir)/'`MvQAdvancedSearch.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.moc.Tpo $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQAdvancedSearch.moc.cpp' object='bin_Desktop-MvQAdvancedSearch.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQAdvancedSearch.moc.o `test -f 'MvQAdvancedSearch.moc.cpp' || echo '$(srcdir)/'`MvQAdvancedSearch.moc.cpp
+
+bin_Desktop-MvQAdvancedSearch.moc.obj: MvQAdvancedSearch.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQAdvancedSearch.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.moc.Tpo -c -o bin_Desktop-MvQAdvancedSearch.moc.obj `if test -f 'MvQAdvancedSearch.moc.cpp'; then $(CYGPATH_W) 'MvQAdvancedSearch.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQAdvancedSearch.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.moc.Tpo $(DEPDIR)/bin_Desktop-MvQAdvancedSearch.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQAdvancedSearch.moc.cpp' object='bin_Desktop-MvQAdvancedSearch.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQAdvancedSearch.moc.obj `if test -f 'MvQAdvancedSearch.moc.cpp'; then $(CYGPATH_W) 'MvQAdvancedSearch.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQAdvancedSearch.moc.cpp'; fi`
+
bin_Desktop-MvQEditor.moc.o: MvQEditor.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQEditor.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQEditor.moc.Tpo -c -o bin_Desktop-MvQEditor.moc.o `test -f 'MvQEditor.moc.cpp' || echo '$(srcdir)/'`MvQEditor.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQEditor.moc.Tpo $(DEPDIR)/bin_Desktop-MvQEditor.moc.Po
@@ -3426,22 +3567,6 @@ bin_Desktop-MvQIconMimeData.moc.obj: MvQIconMimeData.moc.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconMimeData.moc.obj `if test -f 'MvQIconMimeData.moc.cpp'; then $(CYGPATH_W) 'MvQIconMimeData.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconMimeData.moc.cpp'; fi`
-bin_Desktop-MvQClassBrowser.moc.o: MvQClassBrowser.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQClassBrowser.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Tpo -c -o bin_Desktop-MvQClassBrowser.moc.o `test -f 'MvQClassBrowser.moc.cpp' || echo '$(srcdir)/'`MvQClassBrowser.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQClassBrowser.moc.cpp' object='bin_Desktop-MvQClassBrowser.moc.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQClassBrowser.moc.o `test -f 'MvQClassBrowser.moc.cpp' || echo '$(srcdir)/'`MvQClassBrowser.moc.cpp
-
-bin_Desktop-MvQClassBrowser.moc.obj: MvQClassBrowser.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQClassBrowser.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Tpo -c -o bin_Desktop-MvQClassBrowser.moc.obj `if test -f 'MvQClassBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQClassBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQClassBrowser.moc.cpp'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQClassBrowser.moc.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQClassBrowser.moc.cpp' object='bin_Desktop-MvQClassBrowser.moc.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQClassBrowser.moc.obj `if test -f 'MvQClassBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQClassBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQClassBrowser.moc.cpp'; fi`
-
bin_Desktop-MvQColourListLine.moc.o: MvQColourListLine.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQColourListLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Tpo -c -o bin_Desktop-MvQColourListLine.moc.o `test -f 'MvQColourListLine.moc.cpp' || echo '$(srcdir)/'`MvQColourListLine.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQColourListLine.moc.Po
@@ -3890,6 +4015,22 @@ bin_Desktop-MvQIconHelp.moc.obj: MvQIconHelp.moc.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQIconHelp.moc.obj `if test -f 'MvQIconHelp.moc.cpp'; then $(CYGPATH_W) 'MvQIconHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQIconHelp.moc.cpp'; fi`
+bin_Desktop-MvQListFolderViewBase.moc.o: MvQListFolderViewBase.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQListFolderViewBase.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.moc.Tpo -c -o bin_Desktop-MvQListFolderViewBase.moc.o `test -f 'MvQListFolderViewBase.moc.cpp' || echo '$(srcdir)/'`MvQListFolderViewBase.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.moc.Tpo $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQListFolderViewBase.moc.cpp' object='bin_Desktop-MvQListFolderViewBase.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQListFolderViewBase.moc.o `test -f 'MvQListFolderViewBase.moc.cpp' || echo '$(srcdir)/'`MvQListFolderViewBase.moc.cpp
+
+bin_Desktop-MvQListFolderViewBase.moc.obj: MvQListFolderViewBase.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQListFolderViewBase.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.moc.Tpo -c -o bin_Desktop-MvQListFolderViewBase.moc.obj `if test -f 'MvQListFolderViewBase.moc.cpp'; then $(CYGPATH_W) 'MvQListFolderViewBase.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQListFolderViewBase.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.moc.Tpo $(DEPDIR)/bin_Desktop-MvQListFolderViewBase.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQListFolderViewBase.moc.cpp' object='bin_Desktop-MvQListFolderViewBase.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQListFolderViewBase.moc.obj `if test -f 'MvQListFolderViewBase.moc.cpp'; then $(CYGPATH_W) 'MvQListFolderViewBase.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQListFolderViewBase.moc.cpp'; fi`
+
bin_Desktop-MvQLogDialog.moc.o: MvQLogDialog.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQLogDialog.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Tpo -c -o bin_Desktop-MvQLogDialog.moc.o `test -f 'MvQLogDialog.moc.cpp' || echo '$(srcdir)/'`MvQLogDialog.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Tpo $(DEPDIR)/bin_Desktop-MvQLogDialog.moc.Po
@@ -3906,22 +4047,6 @@ bin_Desktop-MvQLogDialog.moc.obj: MvQLogDialog.moc.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQLogDialog.moc.obj `if test -f 'MvQLogDialog.moc.cpp'; then $(CYGPATH_W) 'MvQLogDialog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQLogDialog.moc.cpp'; fi`
-bin_Desktop-MvQObjectBrowser.moc.o: MvQObjectBrowser.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQObjectBrowser.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Tpo -c -o bin_Desktop-MvQObjectBrowser.moc.o `test -f 'MvQObjectBrowser.moc.cpp' || echo '$(srcdir)/'`MvQObjectBrowser.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQObjectBrowser.moc.cpp' object='bin_Desktop-MvQObjectBrowser.moc.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQObjectBrowser.moc.o `test -f 'MvQObjectBrowser.moc.cpp' || echo '$(srcdir)/'`MvQObjectBrowser.moc.cpp
-
-bin_Desktop-MvQObjectBrowser.moc.obj: MvQObjectBrowser.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQObjectBrowser.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Tpo -c -o bin_Desktop-MvQObjectBrowser.moc.obj `if test -f 'MvQObjectBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQObjectBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQObjectBrowser.moc.cpp'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Tpo $(DEPDIR)/bin_Desktop-MvQObjectBrowser.moc.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQObjectBrowser.moc.cpp' object='bin_Desktop-MvQObjectBrowser.moc.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQObjectBrowser.moc.obj `if test -f 'MvQObjectBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQObjectBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQObjectBrowser.moc.cpp'; fi`
-
bin_Desktop-MvQPageView.moc.o: MvQPageView.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQPageView.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQPageView.moc.Tpo -c -o bin_Desktop-MvQPageView.moc.o `test -f 'MvQPageView.moc.cpp' || echo '$(srcdir)/'`MvQPageView.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQPageView.moc.Tpo $(DEPDIR)/bin_Desktop-MvQPageView.moc.Po
@@ -3986,6 +4111,22 @@ bin_Desktop-MvQScriptHelp.moc.obj: MvQScriptHelp.moc.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQScriptHelp.moc.obj `if test -f 'MvQScriptHelp.moc.cpp'; then $(CYGPATH_W) 'MvQScriptHelp.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQScriptHelp.moc.cpp'; fi`
+bin_Desktop-MvQSearchPanel.moc.o: MvQSearchPanel.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSearchPanel.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSearchPanel.moc.Tpo -c -o bin_Desktop-MvQSearchPanel.moc.o `test -f 'MvQSearchPanel.moc.cpp' || echo '$(srcdir)/'`MvQSearchPanel.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSearchPanel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQSearchPanel.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQSearchPanel.moc.cpp' object='bin_Desktop-MvQSearchPanel.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQSearchPanel.moc.o `test -f 'MvQSearchPanel.moc.cpp' || echo '$(srcdir)/'`MvQSearchPanel.moc.cpp
+
+bin_Desktop-MvQSearchPanel.moc.obj: MvQSearchPanel.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSearchPanel.moc.obj -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSearchPanel.moc.Tpo -c -o bin_Desktop-MvQSearchPanel.moc.obj `if test -f 'MvQSearchPanel.moc.cpp'; then $(CYGPATH_W) 'MvQSearchPanel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQSearchPanel.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSearchPanel.moc.Tpo $(DEPDIR)/bin_Desktop-MvQSearchPanel.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQSearchPanel.moc.cpp' object='bin_Desktop-MvQSearchPanel.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Desktop-MvQSearchPanel.moc.obj `if test -f 'MvQSearchPanel.moc.cpp'; then $(CYGPATH_W) 'MvQSearchPanel.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQSearchPanel.moc.cpp'; fi`
+
bin_Desktop-MvQSliderLine.moc.o: MvQSliderLine.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Desktop_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Desktop-MvQSliderLine.moc.o -MD -MP -MF $(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Tpo -c -o bin_Desktop-MvQSliderLine.moc.o `test -f 'MvQSliderLine.moc.cpp' || echo '$(srcdir)/'`MvQSliderLine.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Tpo $(DEPDIR)/bin_Desktop-MvQSliderLine.moc.Po
diff --git a/src/Desktop/MessageObserver.h b/src/Desktop/MessageObserver.h
index 8d9370e..819dad8 100644
--- a/src/Desktop/MessageObserver.h
+++ b/src/Desktop/MessageObserver.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File MessageObserver.h
-// Baudouin Raoult - ECMWF Aug 99
-
#ifndef MessageObserver_H
#define MessageObserver_H
diff --git a/src/Desktop/MethodCommand.cc b/src/Desktop/MethodCommand.cc
index 85ab736..663af79 100644
--- a/src/Desktop/MethodCommand.cc
+++ b/src/Desktop/MethodCommand.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -27,8 +27,8 @@ void MethodCommand::execute(IconObject* o)
}
static MethodCommand editCmd("edit",&IconObject::edit);
-static MethodCommand copyCmd("copy",&IconObject::duplicate);
-static MethodCommand cutCmd("cut",&IconObject::duplicate);
+//static MethodCommand copyCmd("copy",&IconObject::duplicate);
+//static MethodCommand cutCmd("cut",&IconObject::duplicate);
static MethodCommand duplicateCmd("duplicate",&IconObject::duplicate);
static MethodCommand deleteCmd("delete",&IconObject::toWastebasket);
static MethodCommand infoCmd("log",&IconObject::showLog);
diff --git a/src/Desktop/MethodCommand.h b/src/Desktop/MethodCommand.h
index 4f0556a..2ec378f 100644
--- a/src/Desktop/MethodCommand.h
+++ b/src/Desktop/MethodCommand.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File MethodCommand.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef MethodCommand_H
#define MethodCommand_H
diff --git a/src/Desktop/MetviewService.h b/src/Desktop/MetviewService.h
index 2392d7c..37423ef 100644
--- a/src/Desktop/MetviewService.h
+++ b/src/Desktop/MetviewService.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File MetviewService.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef MetviewService_H
#define MetviewService_H
diff --git a/src/Desktop/MetviewTask.cc b/src/Desktop/MetviewTask.cc
index 044a6dc..e24c6b0 100644
--- a/src/Desktop/MetviewTask.cc
+++ b/src/Desktop/MetviewTask.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -21,11 +21,11 @@
//=================================================================
MetviewTask::MetviewTask(const string& service,const Action& action,IconObject* o):
+ service_(service),
action_(action),
object_(o),
- service_(service),
- waiting_(0),
- error_(false)
+ error_(false),
+ waiting_(0)
{
}
@@ -36,21 +36,24 @@ MetviewTask::~MetviewTask()
void MetviewTask::start()
{
- const set<DependancyH>& dep = object_->dependancies();
+ if(!object_->iconClass().skipDepandancies(action_.name()))
+ {
+ const set<DependancyH>& dep = object_->dependancies();
- Action action("prepare","*");
+ Action action("prepare","*");
- for(set<DependancyH>::const_iterator j = dep.begin(); j != dep.end(); ++j)
- {
- Task* t = (*j)->action(action);
- if(t) {
- tasks_[t] = *j;
- waiting_++;
- t->add(this);
- }
+ for(set<DependancyH>::const_iterator j = dep.begin(); j != dep.end(); ++j)
+ {
+ Task* t = (*j)->action(action);
+ if(t) {
+ tasks_[t] = *j;
+ waiting_++;
+ t->add(this);
+ }
+ }
}
-
+
check();
}
@@ -86,7 +89,7 @@ void MetviewTask::check()
cout << " <--- send " << *this << endl;
}
-void MetviewTask::progress(const Request& r)
+void MetviewTask::progress(const Request& /*r*/)
{
}
diff --git a/src/Desktop/MetviewTask.h b/src/Desktop/MetviewTask.h
index 8451a57..f9aa877 100644
--- a/src/Desktop/MetviewTask.h
+++ b/src/Desktop/MetviewTask.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File MetviewTask.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef MetviewTask_H
#define MetviewTask_H
diff --git a/src/Desktop/MvQ.h b/src/Desktop/MvQ.h
index 7e8e40a..e871646 100644
--- a/src/Desktop/MvQ.h
+++ b/src/Desktop/MvQ.h
@@ -12,8 +12,9 @@
namespace MvQ
{
- enum FolderViewMode {NoViewMode,IconViewMode,DetailedViewMode};
- enum GridSortMode {GridSortByName,GridSortBySize,GridSortByType};
+ //enum FolderViewMode {NoViewMode,IconViewMode,SimpleViewMode,DetailedViewMode};
+ //enum GridSortMode {GridSortByName,GridSortBySize,GridSortByType};
+ //enum DragPolicy {DragShowAllIcons,DragShowDraggedIcon};
void emptyWasteBasket();
}
diff --git a/src/Desktop/MvQActionList.cc b/src/Desktop/MvQActionList.cc
new file mode 100644
index 0000000..17c3633
--- /dev/null
+++ b/src/Desktop/MvQActionList.cc
@@ -0,0 +1,45 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "MvQActionList.h"
+
+#include <QAction>
+
+bool MvQActionList::trigger(QString name)
+{
+ foreach(QAction* ac, lst_)
+ {
+ if(ac->data().toString() == name)
+ {
+ ac->trigger();
+ return true;
+ }
+ }
+ return false;
+}
+
+QAction* MvQActionList::action(QString name)
+{
+ foreach(QAction* ac, lst_)
+ {
+ if(ac->data().toString() == name)
+ return ac;
+ }
+ return 0;
+}
+
+bool MvQActionList::shortCutDefined(QString scName)
+{
+ foreach(QAction* ac, lst_)
+ {
+ if(ac->shortcut().toString() == scName)
+ return true;
+ }
+ return false;
+}
\ No newline at end of file
diff --git a/src/Desktop/EditorObserver.h b/src/Desktop/MvQActionList.h
similarity index 54%
copy from src/Desktop/EditorObserver.h
copy to src/Desktop/MvQActionList.h
index d84a222..5568223 100644
--- a/src/Desktop/EditorObserver.h
+++ b/src/Desktop/MvQActionList.h
@@ -1,27 +1,30 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File EditorObserver.h
-// Baudouin Raoult - ECMWF Jul 99
+#ifndef MvQActionList_H
+#define MvQActionList_H
+
+#include <QList>
-#ifndef EditorObserver_H
-#define EditorObserver_H
+class QAction;
-class IconObject;
-
-class EditorObserver {
+class MvQActionList
+{
public:
-
- virtual void apply(IconObject*) = 0;
- virtual void close(IconObject*) = 0;
-
-};
-
+ MvQActionList() {}
+ void add(QAction* ac) {lst_ << ac;}
+ bool trigger(QString);
+ QAction *action(QString);
+ bool shortCutDefined(QString);
+
+protected:
+ QList<QAction*> lst_;
+};
#endif
diff --git a/src/Desktop/MvQAdvancedSearch.cc b/src/Desktop/MvQAdvancedSearch.cc
new file mode 100644
index 0000000..e1db1cf
--- /dev/null
+++ b/src/Desktop/MvQAdvancedSearch.cc
@@ -0,0 +1,134 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "MvQAdvancedSearch.h"
+
+#include <QCheckBox>
+#include <QDialogButtonBox>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QPushButton>
+#include <QTabWidget>
+#include <QToolButton>
+#include <QTreeWidget>
+#include <QVBoxLayout>
+
+#include "MvQLineEdit.h"
+
+//================================================
+//
+// MvQAdvancedSearchDialog
+//
+//================================================
+
+MvQAdvancedSearchDialog::MvQAdvancedSearchDialog(QWidget *parent) :
+ QDialog(parent)
+{
+ QVBoxLayout *vb=new QVBoxLayout;
+ vb->setSpacing(2);
+ vb->setContentsMargins(4,4,4,4);
+ setLayout(vb);
+
+ QTabWidget *tab=new QTabWidget(this);
+ vb->addWidget(tab);
+
+ //------------------
+ // Main tab
+ //------------------
+
+ QGridLayout *gridLayout=new QGridLayout;
+
+ QWidget *w=new QWidget;
+ w->setLayout(gridLayout);
+ tab->addTab(w,tr("&Name"));
+
+ int row=0;
+
+ //Name
+ QLabel *label=new QLabel(tr("&Folder:"));
+ folderLe_=new MvQLineEdit(this);
+ label->setBuddy(folderLe_);
+ gridLayout->addWidget(label,row,0);
+ gridLayout->addWidget(folderLe_,row,1);
+ row++;
+
+ subFolderCheck_=new QCheckBox(tr("Include &subfolders"));
+ gridLayout->addWidget(subFolderCheck_,row,1);
+ row++;
+
+ //Name
+ label=new QLabel(tr("&Name:"));
+ nameLe_=new MvQLineEdit(this);
+ label->setBuddy(nameLe_);
+ gridLayout->addWidget(label,row,0);
+ gridLayout->addWidget(nameLe_,row,1);
+ row++;
+
+ //Type
+ label=new QLabel(tr("&Type:"));
+ typeLe_=new MvQLineEdit(this);
+ label->setBuddy(typeLe_);
+ gridLayout->addWidget(label,row,0);
+ gridLayout->addWidget(typeLe_,row,1);
+ row++;
+
+ //Contains
+ label=new QLabel(tr("&Containing text:"));
+ contLe_=new MvQLineEdit(this);
+ label->setBuddy(contLe_);
+ gridLayout->addWidget(label,row,0);
+ gridLayout->addWidget(contLe_,row,1);
+ row++;
+
+ //------------------
+ // Properties tab
+ //------------------
+
+ QGridLayout *propLayout=new QGridLayout;
+
+ w=new QWidget;
+ w->setLayout(propLayout);
+ tab->addTab(w,tr("&Properties"));
+
+ //Results view
+ resTree_=new QTreeWidget(this);
+ vb->addWidget(resTree_);
+
+ //-------------------
+ //Buttonbox
+ //-------------------
+
+ QDialogButtonBox *buttonBox= new QDialogButtonBox(this);
+ vb->addWidget(buttonBox);
+
+ buttonBox->addButton(QDialogButtonBox::Close);
+ connect(buttonBox,SIGNAL(rejected()),
+ this,SLOT(reject()));
+
+
+ //connect(filterList_,SIGNAL(itemActivated(QListWidgetItem*)),
+ // this,SLOT(slotIconSelected(QListWidgetItem*)));
+
+ /*connect(nameLe_,SIGNAL(textChanged(QString)),
+ filterModel_,SLOT(slotFilterName(QString)));
+
+ connect(typeLe_,SIGNAL(textChanged(QString)),
+ filterModel_,SLOT(slotFilterType(QString)));
+
+ connect(typeLe_,SIGNAL(textChanged(QString)),
+ filterModel_,SLOT(slotFilterType(QString)));
+
+ connect(resView_,SIGNAL(clicked(const QModelIndex&)),
+ this,SLOT(slotSelected(const QModelIndex&))); */
+
+}
+
+void MvQAdvancedSearchDialog::slotFind()
+{
+}
diff --git a/src/Desktop/MvQAdvancedSearch.h b/src/Desktop/MvQAdvancedSearch.h
new file mode 100644
index 0000000..8f99ade
--- /dev/null
+++ b/src/Desktop/MvQAdvancedSearch.h
@@ -0,0 +1,41 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef MvQAdvancedSearch_H
+#define MvQAdvancedSearch_H
+
+#include <QDialog>
+
+class QCheckBox;
+class QTreeWidget;
+class MvQLineEdit;
+class IconObject;
+
+class MvQAdvancedSearchDialog : public QDialog
+{
+Q_OBJECT
+
+public:
+ MvQAdvancedSearchDialog(QWidget *parent=0);
+
+public slots:
+ void slotFind();
+
+
+protected:
+ MvQLineEdit *folderLe_;
+ MvQLineEdit *nameLe_;
+ MvQLineEdit *typeLe_;
+ MvQLineEdit *contLe_;
+ QCheckBox* subFolderCheck_;
+ QTreeWidget *resTree_;
+};
+
+#endif
+
diff --git a/src/Desktop/MvQBookmarks.cc b/src/Desktop/MvQBookmarks.cc
index d3596f7..3f86a42 100644
--- a/src/Desktop/MvQBookmarks.cc
+++ b/src/Desktop/MvQBookmarks.cc
@@ -16,9 +16,9 @@
#include <QLabel>
#include <QLineEdit>
-#include <QListView>
#include <QMenu>
#include <QMessageBox>
+#include <QPainter>
#include <QPair>
#include <QPlainTextEdit>
#include <QToolButton>
@@ -28,7 +28,9 @@
#include "MvQ.h"
#include "MvQContextMenu.h"
+#include "MvQDropTarget.h"
#include "MvQFileBrowser.h"
+#include "MvQFolderViewBase.h"
#include "MvQKeyManager.h"
#include "MvQKeyModel.h"
#include "MvQIconProvider.h"
@@ -44,6 +46,43 @@ MvQKeyManager* MvQBookmarks::manager_=0;
MvQBookmarksModel* MvQBookmarks::model_=0;
MvKeyProfile* MvQBookmarks::prof_=0;
+//==============================
+//
+// MvQBookmarksDelegate
+//
+//==============================
+
+MvQBookmarksDelegate::MvQBookmarksDelegate(QWidget *parent) : QStyledItemDelegate(parent)
+{
+}
+
+void MvQBookmarksDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,
+ const QModelIndex& index) const
+{
+ if(index.column() == 0)
+ {
+ QStyleOptionViewItemV4 vopt(option);
+ initStyleOption(&vopt, index);
+
+ const QStyle *style = vopt.widget ? vopt.widget->style() : QApplication::style();
+ const QWidget* widget = vopt.widget;
+
+ //painter->fillRect(option.rect,QColor(238,238,238));
+
+ //We render everything with the default method
+ style->drawControl(QStyle::CE_ItemViewItem, &vopt, painter, widget);
+
+ //Draw separator line
+ painter->save();
+ painter->setPen(QColor(200,200,200));
+ painter->drawLine(option.rect.x(),option.rect.bottom()+1,
+ option.rect.right(),option.rect.bottom()+1);
+ painter->restore();
+ }
+ else
+ QStyledItemDelegate::paint(painter,option,index);
+}
+
//=============================================
//
// MvQBookmarksModel
@@ -54,7 +93,7 @@ QVariant MvQBookmarksModel::data( const QModelIndex& index, int role ) const
{
if( !index.isValid() || index.column() !=0 ||
(role != Qt::DisplayRole && role != Qt::ToolTipRole &&
- role != Qt::DecorationRole))
+ role != Qt::DecorationRole && role != Qt::UserRole))
{
return QVariant();
}
@@ -65,8 +104,7 @@ QVariant MvQBookmarksModel::data( const QModelIndex& index, int role ) const
return QString::fromStdString(key->shortName());
}
else if(role == Qt::ToolTipRole)
- {
-
+ {
string cntStr=key->metaData("path_count");
if(!cntStr.empty())
return "Bookmark for a <b>group of folders</b>";
@@ -83,9 +121,17 @@ QVariant MvQBookmarksModel::data( const QModelIndex& index, int role ) const
}
else if(role == Qt::DecorationRole)
{
- return MvQIconProvider::bookmarkPixmap(key->name(),24);
- }
-
+ return MvQIconProvider::bookmarkPixmap(key->name(),18);
+ }
+ else if(role == Qt::UserRole)
+ {
+ string cntStr=key->metaData("path_count");
+ if(!cntStr.empty())
+ return QVariant();
+ else
+ return QString::fromStdString(key->name());
+ }
+
return QVariant();
}
@@ -130,48 +176,28 @@ MvQContextItemSet* MvQBookmarks::cmSet()
return &cm;
}
-
-/*void MvQBookmarks::setupContextMenu()
-{
- if(cmIconItems_.count() != 0)
- return;
-
- QString wbPath;
- IconObject *wbo=Folder::folder("wastebasket");
- if(wbo) wbPath=QString::fromStdString(wbo->fullName());
-
- static MvQContextAction openBk(tr("Open"),"","open","","!FOLDERGROUP");
- static MvQContextAction openInTab(tr("Open in new tab"),"","openInTab","","!FOLDERGROUP");
- static MvQContextAction openInWin(tr("Open in new window"),"","openInWin","","!FOLDERGROUP");
- static MvQContextAction loadTabs(tr("Open tabs"),"","openGroup","","FOLDERGROUP");
- static MvQContextAction loadTabsInWin(tr("Open tabs in new window"),"","openGroupInWin","","FOLDERGROUP");
- static MvQContextSeparator sep;
- static MvQContextAction editEntry(tr("&Edit"),tr("Ctrl+E"),"editEntry",":/desktop/edit.svg");
- static MvQContextAction dupEntry(tr("&Duplicate"),tr("Ctrl+D"),"duplicateEntry",":/desktop/duplicate.svg");
- static MvQContextAction removeEntry(tr("&Remove"),tr("Del"),"removeEntry",":/desktop/remove.svg");
- static MvQContextSeparator sep1;
- static MvQContextAction empty(tr("Empty &wastebin"),tr("Ctrl+W"),"empty","",wbPath);
-
- cmIconItems_ << &openBk << &openInTab << &openInWin << &loadTabs << &loadTabsInWin <<
- &sep <<
- &editEntry << &dupEntry << &removeEntry <<
- &sep1 <<
- ∅
-
- static MvQContextAction addEntry("Bookmark this folder","","addEntry",":/desktop/add_bookmark.svg");
- static MvQContextAction addTab("&Bookmark these tabs","","addTabs",":/desktop/add_bookmark_group.svg");
- static MvQContextSeparator sepDesk;
- static MvQContextAction addBookmark("New bookmark","","addBookmark",":/desktop/add.svg");
-
- cmDesktopItems_ << &addEntry << &addTab << &sepDesk << &addBookmark;
-}*/
-
//Static
void MvQBookmarks::save()
{
manager_->saveProfiles();
}
+bool MvQBookmarks::isBookmark(QString path)
+{
+ MvKeyProfile *prof=model_->profile();
+ if(!prof)
+ return false;
+
+ string p=path.toStdString();
+
+ for(unsigned int i=0; i < prof->size(); i++)
+ {
+ if(prof->at(i)->name() == p)
+ return true;
+ }
+ return false;
+}
+
void MvQBookmarks::defaultCommand(const QModelIndex &index)
{
MvKeyProfile *prof=model_->profile();
@@ -355,19 +381,34 @@ void MvQBookmarks::addItem(QList<Folder*> folderLst)
{
delete key;
}
-}
+}
-void MvQBookmarks::editItem(const QModelIndex& index)
+//static
+void MvQBookmarks::editItem(QString path)
{
- MvKeyProfile *prof=model_->profile();
- MvKey *key=0;
- if(prof && index.isValid() && index.row() <= static_cast<int>(prof->size()-1))
- {
- key=prof->at(index.row());
- }
- else
+ MvKeyProfile *prof=model_->profile();
+ if(!prof)
return;
-
+
+ string p=path.toStdString();
+ QModelIndex index;
+
+ for(unsigned int i=0; i < prof->size(); i++)
+ {
+ if(prof->at(i)->name() == p)
+ {
+ editItem(prof->at(i));
+
+ }
+ }
+}
+
+//static
+void MvQBookmarks::editItem(MvKey *key)
+{
+ if(!key)
+ return;
+
bool accepted=false;
if(key->name() == "FOLDERGROUP" && !key->metaData("path_count").empty())
{
@@ -390,8 +431,23 @@ void MvQBookmarks::editItem(const QModelIndex& index)
{
//Not too efficient
model_->profileIsAboutToChange();
- model_->setKeyProfile(prof);
+ model_->setKeyProfile(prof_);
+ }
+}
+
+
+void MvQBookmarks::editItem(const QModelIndex& index)
+{
+ MvKeyProfile *prof=model_->profile();
+ MvKey *key=0;
+ if(prof && index.isValid() && index.row() <= static_cast<int>(prof->size()-1))
+ {
+ key=prof->at(index.row());
}
+ else
+ return;
+
+ MvQBookmarks::editItem(key);
}
void MvQBookmarks::duplicateItem(const QModelIndex& index)
@@ -505,6 +561,7 @@ bool MvQBookmarks::isFolderGroup(MvKey *key)
return (key->name() == "FOLDERGROUP" && key->metaData("path_count").empty() == false);
}
+
//================================================
//
// MvQBookmarksMenu
@@ -517,14 +574,14 @@ MvQBookmarksMenu::MvQBookmarksMenu(QWidget *parent,QMenu *menu) :
{
actionFolder_ = new QAction(menu_);
actionFolder_->setIcon(QPixmap(":/desktop/add_bookmark.svg"));
- actionFolder_->setText(tr("Bookmark &folder"));
- actionFolder_->setShortcut(tr("Ctrl+D"));
+ actionFolder_->setText(tr("Bookmark current &folder"));
+ //actionFolder_->setShortcut(tr("Ctrl+D"));
menu_->addAction(actionFolder_);
actionTabs_ = new QAction(menu_);
actionTabs_->setIcon(QPixmap(":/desktop/add_bookmark_group.svg"));
- actionTabs_->setText(tr("Bookmark &tabs"));
- actionTabs_->setShortcut(tr("Ctrl+T"));
+ actionTabs_->setText(tr("Bookmark current &tabs"));
+ //actionTabs_->setShortcut(tr("Ctrl+T"));
menu_->addAction(actionTabs_);
QAction *sep1=new QAction(this);
@@ -662,6 +719,151 @@ QModelIndex MvQBookmarksMenu::getIndex(QAction *ac)
//================================================
//
+// MvQBookmarksView
+//
+//================================================
+
+MvQBookmarksView::MvQBookmarksView(QWidget *parent) :
+ QListView(parent)
+{
+ //view_->setModel(model_);
+ setDragEnabled(true);
+ setAcceptDrops(true);
+
+ setSpacing(0);
+ setProperty("sidebarView","true");
+}
+
+
+void MvQBookmarksView::checkDropTarget(QDropEvent *event)
+{
+ if(!event->mimeData()->hasFormat("metview/icon"))
+ {
+ removeDropTarget();
+ }
+
+ QModelIndex index=indexAt(event->pos());
+ QString s=model()->data(index,Qt::UserRole).toString();
+
+ if(!s.isEmpty())
+ {
+ Folder *f=Folder::folder(s.toStdString(),false);
+ if(f && !f->locked())
+ {
+ Qt::DropAction dropAction=event->proposedAction();
+ MvQDropTarget::Instance()->reset(QString::fromStdString(f->name()),
+ (dropAction == Qt::MoveAction),"folder");
+
+ if(window())
+ {
+ MvQDropTarget::Instance()->move(mapToGlobal(event->pos())+QPoint(20,20));
+ }
+ return;
+ }
+ }
+
+ removeDropTarget();
+}
+
+void MvQBookmarksView::removeDropTarget()
+{
+ MvQDropTarget::Instance()->hide();
+}
+
+void MvQBookmarksView::dragEnterEvent(QDragEnterEvent *event)
+{
+ if(event->source() != this)
+ {
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ event->accept();
+
+ }
+ else
+ event->ignore();
+ }
+ else
+ QListView::dragEnterEvent(event);
+}
+
+void MvQBookmarksView::dragMoveEvent(QDragMoveEvent *event)
+{
+ if(event->source() != this)
+ {
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ checkDropTarget(event);
+ event->accept();
+ }
+ else
+ {
+ removeDropTarget();
+ event->ignore();
+ }
+ }
+ else
+ QListView::dragMoveEvent(event);
+}
+
+void MvQBookmarksView::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ removeDropTarget();
+ event->accept();
+}
+
+void MvQBookmarksView::dropEvent(QDropEvent *event)
+{
+ if(event->source() != this)
+ {
+ removeDropTarget();
+
+ if(!event->source())
+ {
+ event->ignore();
+ return;
+ }
+
+ if(event->proposedAction() != Qt::CopyAction &&
+ event->proposedAction() != Qt::MoveAction)
+ {
+ event->ignore();
+ return;
+ }
+
+ QModelIndex index=indexAt(event->pos());
+ QString s=model()->data(index,Qt::UserRole).toString();
+
+ if(!s.isEmpty())
+ {
+ Folder *f=Folder::folder(s.toStdString(),false);
+ MvQFolderViewBase::dropToFolder(f,event);
+ }
+
+ }
+
+ else
+ QListView::dropEvent(event);
+}
+
+void MvQBookmarksView::paintEvent(QPaintEvent *event)
+{
+ QListView::paintEvent(event);
+
+ //QPainter painter(viewport());
+ //painter.setRenderHint(QPainter::Antialiasing);
+
+ //Render ring pixmap
+ //painter.drawPixmap(15,50,MvQIconProvider::dropTargetPixmap("Defaults",true));
+
+}
+
+
+//================================================
+//
// MvQBookmarksPanel
//
//================================================
@@ -670,10 +872,11 @@ MvQBookmarksPanel::MvQBookmarksPanel(QWidget *parent) :
MvQBookmarks(parent)
{
widget_=new QWidget(parent);
+ widget_->setProperty("sidebar","true");
QVBoxLayout *vb=new QVBoxLayout;
vb->setSpacing(0);
- vb->setContentsMargins(1,1,1,1);
+ vb->setContentsMargins(0,0,0,0);
widget_->setLayout(vb);
QHBoxLayout *hb=new QHBoxLayout;
@@ -684,24 +887,38 @@ MvQBookmarksPanel::MvQBookmarksPanel(QWidget *parent) :
QLabel *label=new QLabel("<b>" + tr("Bookmarks") + "</b>",widget_);
hb->addWidget(label);
- QToolButton *addTb=new QToolButton(widget_);
- addTb->setAutoRaise(true);
- addTb->setIcon(QPixmap(":/desktop/add_bookmark.svg"));
- addTb->setToolTip(tr("Add folder to bookmarks"));
- hb->addWidget(addTb);
+ //QToolButton *addTb=new QToolButton(widget_);
+ //addTb->setAutoRaise(true);
+ //addTb->setIcon(QPixmap(":/desktop/add_bookmark.svg"));
+ //addTb->setToolTip(tr("Add current folder to bookmarks"));
+ //hb->addWidget(addTb);
- connect(addTb,SIGNAL(clicked(bool)),
- this,SLOT(slotAddItem(bool)));
-
- view_=new QListView(widget_);
+ //connect(addTb,SIGNAL(clicked(bool)),
+ // this,SLOT(slotAddItem(bool)));
+
+ QToolButton *closeTb=new QToolButton(widget_);
+ closeTb->setAutoRaise(true);
+ closeTb->setIcon(QPixmap(":/desktop/remove.svg"));
+ closeTb->setToolTip(tr("Close sidebar"));
+ hb->addWidget(closeTb);
+
+ connect(closeTb,SIGNAL(clicked(bool)),
+ this,SIGNAL(closePanel(bool)));
+
+ view_=new MvQBookmarksView(widget_);
vb->addWidget(view_);
view_->setModel(model_);
- view_->setDragEnabled(true);
- view_->setAcceptDrops(true);
+ //view_->setDragEnabled(true);
+ //view_->setAcceptDrops(true);
+
+ //view_->setSpacing(0);
+ //view_->setProperty("mvStyle","bookmarks");
view_->setContextMenuPolicy(Qt::CustomContextMenu);
- //view_->setProperty("mvStyle","bookmarks");
+
+ //MvQBookmarksDelegate* delegate=new MvQBookmarksDelegate(view_);
+ //view_->setItemDelegate(delegate);
connect(view_,SIGNAL(doubleClicked(const QModelIndex&)),
@@ -747,7 +964,10 @@ void MvQBookmarksPanel::slotContextMenu(const QPoint& pos)
void MvQBookmarksPanel::slotAddItem(bool)
{
command("addEntry");
-}
+}
+
+
+
//================================================
//
diff --git a/src/Desktop/MvQBookmarks.h b/src/Desktop/MvQBookmarks.h
index cfd144c..f804609 100644
--- a/src/Desktop/MvQBookmarks.h
+++ b/src/Desktop/MvQBookmarks.h
@@ -11,13 +11,18 @@
#define MvQBookmarks_H
#include <QDialog>
+#include <QListView>
#include <QMap>
+#include <QStyledItemDelegate>
#include "MvQKeyModel.h"
+#include <string>
+using namespace std;
+
+
class QAction;
class QLineEdit;
-class QListView;
class QMenu;
class QModelIndex;
class QPlainTextEdit;
@@ -33,6 +38,14 @@ class MvKeyProfile;
class MvQBookmarksPanel;
+class MvQBookmarksDelegate : public QStyledItemDelegate
+{
+public:
+ MvQBookmarksDelegate(QWidget *parent=0);
+ void paint(QPainter *painter,const QStyleOptionViewItem &option,
+ const QModelIndex& index) const;
+};
+
class MvQBookmarksModel : public MvQKeyModel
{
public:
@@ -54,6 +67,9 @@ public:
static void addItem(IconObject*);
static void addItem(QString);
static void addItem(QList<Folder*>);
+ static void editItem(QString);
+ static void editItem(MvKey*);
+ static bool isBookmark(QString);
signals:
void openInBrowser(QString);
@@ -107,6 +123,22 @@ protected:
QAction* actionAdd_;
};
+
+class MvQBookmarksView : public QListView
+{
+public:
+ MvQBookmarksView(QWidget *parent=0);
+protected:
+ void checkDropTarget(QDropEvent *event);
+ void removeDropTarget();
+
+ void dragEnterEvent(QDragEnterEvent *event);
+ void dragMoveEvent(QDragMoveEvent *event);
+ void dragLeaveEvent(QDragLeaveEvent *event);
+ void dropEvent(QDropEvent *event);
+ void paintEvent(QPaintEvent *);
+};
+
class MvQBookmarksPanel : public MvQBookmarks
{
Q_OBJECT
@@ -121,10 +153,13 @@ public slots:
void slotDoubleClickItem(const QModelIndex&);
void slotContextMenu(const QPoint&);
void slotAddItem(bool);
+
+signals:
+ void closePanel(bool b=true);
protected:
QWidget* widget_;
- QListView* view_;
+ MvQBookmarksView* view_;
};
diff --git a/src/Desktop/MvQClassBrowser.cc b/src/Desktop/MvQClassBrowser.cc
deleted file mode 100644
index ef60661..0000000
--- a/src/Desktop/MvQClassBrowser.cc
+++ /dev/null
@@ -1,230 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-#include "MvQClassBrowser.h"
-
-#include <QAction>
-#include <QApplication>
-#include <QCloseEvent>
-#include <QDialogButtonBox>
-#include <QDebug>
-#include <QHBoxLayout>
-#include <QPushButton>
-#include <QSortFilterProxyModel>
-#include <QTreeView>
-#include <QVBoxLayout>
-
-#include "MvQIconProvider.h"
-
-//====================================
-//
-// MvQClassModel
-//
-//====================================
-
-MvQClassModel::MvQClassModel(QObject *parent) :
- QAbstractItemModel(parent)
-{
- IconClass::scan(*this);
-}
-
-void MvQClassModel::next(const IconClass& c)
-{
- classes_ << &c;
-}
-
-int MvQClassModel::columnCount( const QModelIndex& parent) const
-{
- return parent.isValid() ? 0 : 6;
-}
-
-int MvQClassModel::rowCount( const QModelIndex& index) const
-{
- if (!index.isValid() )
- {
- return classes_.count();
- }
- else
- {
- return 0;
- }
-}
-
-QVariant MvQClassModel::data( const QModelIndex& index, int role ) const
-{
- if (role != Qt::DisplayRole && role != Qt::DecorationRole)
- {
- return QVariant();
- }
-
- if(!index.isValid())
- return QVariant();
-
-
- if(index.row() < 0 || index.row() >= classes_.count())
- return QVariant();
-
- const IconClass *kind=classes_[index.row()];
-
- if(role == Qt::DisplayRole)
- {
- switch(index.column())
- {
- case 0:
- return QString::fromStdString(kind->name());
- case 1:
- return QString::fromStdString(kind->type());
- case 2:
- return QString::fromStdString(kind->iconBox());
- case 3:
- return (kind->canBeCreated())?"yes":"no";
- case 4:
- return QString::fromStdString(kind->editor());
- case 5:
- return QString::number(kind->expandFlags());
- default:
- break;
- }
-
- }
- else if(role == Qt::DecorationRole)
- {
- if(index.column() == 0)
- return MvQIconProvider::pixmap(*kind,32);
- }
-
- return QVariant();
-}
-
-QModelIndex MvQClassModel::index( int row, int column, const QModelIndex & /*parent */) const
-{
- return createIndex(row,column,0);
-}
-
-
-QModelIndex MvQClassModel::parent( const QModelIndex & /*index*/ ) const
-{
- return QModelIndex();
-}
-
-QVariant MvQClassModel::headerData(const int section, const Qt::Orientation orient , const int role ) const
-{
- if (orient != Qt::Horizontal || role != Qt::DisplayRole)
- return QVariant();
-
- switch(section)
- {
- case 0:
- return tr("Name");
- case 1:
- return tr("Type");
- case 2:
- return tr("Group");
- case 3:
- return tr("Can be created?");
- case 4:
- return tr("Editor");
- case 5:
- return tr("Flags");
- default:
- break;
- }
-
- return QVariant();
-}
-
-MvQClassBrowser::MvQClassBrowser(QWidget *parent) :
- QDialog(parent)
-{
- //setAttribute(Qt::WA_DeleteOnClose);
-
- setWindowTitle("Metview - Icon classes");
-
- //Initial size
- resize(QSize(1100,800));
-
- //----------------------------------
- // Create the class model
- //----------------------------------
-
- MvQClassModel *classModel=new MvQClassModel(this);
-
- QSortFilterProxyModel* sortModel=new QSortFilterProxyModel(this);
- sortModel->setSourceModel(classModel);
-
- //-----------------------------
- // Layout
- //-----------------------------
-
- QVBoxLayout *mainLayout = new QVBoxLayout(this);
- mainLayout->setSpacing(0);
- mainLayout->setContentsMargins(1,1,1,1);
-
- //--------------------
- // Icon view
- //--------------------
-
- classView_= new QTreeView(this);
- classView_->setRootIsDecorated(false);
- classView_->setSortingEnabled(true);
- classView_->sortByColumn(0,Qt::AscendingOrder);
- classView_->setAlternatingRowColors(true);
- classView_->setAllColumnsShowFocus(true);
- classView_->setModel(sortModel);
-
- classView_->setProperty("mvStyle","0");
- classView_->sortByColumn(3,Qt::DescendingOrder);
- classView_->resizeColumnToContents(0);
-
- mainLayout->addWidget(classView_,1);
-
- //--------------------------------------
- // Buttons
- //--------------------------------------
-
- buttonBox_= new QDialogButtonBox(this);
-
- buttonBox_->addButton(QDialogButtonBox::Close);
-
- connect(buttonBox_, SIGNAL(clicked(QAbstractButton*)),
- this, SLOT(slotButtonClicked(QAbstractButton*)));
-
- mainLayout->addWidget(buttonBox_);
-}
-
-MvQClassBrowser::~MvQClassBrowser()
-{
-}
-
-void MvQClassBrowser::closeEvent(QCloseEvent* event)
-{
- //emit aboutToClose(this);
- close();
- event->accept();
-}
-
-void MvQClassBrowser::slotButtonClicked(QAbstractButton* button)
-{
- if(!button) return;
-
- if(buttonBox_->standardButton(button) == QDialogButtonBox::Close)
- {
- close();
- accept();
- }
-
-}
-
-void MvQClassBrowser::writeSettings(QSettings &settings)
-{
-}
-
-void MvQClassBrowser::readSettings(QSettings &settings)
-{
-}
diff --git a/src/Desktop/MvQClassBrowser.h b/src/Desktop/MvQClassBrowser.h
deleted file mode 100644
index 4564fe1..0000000
--- a/src/Desktop/MvQClassBrowser.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-#ifndef MvQClassBrowser_H
-#define MvQClassBrowser_H
-
-#include <QAbstractItemModel>
-#include <QDialog>
-#include <QSettings>
-
-#include "IconClass.h"
-
-class IconClass;
-
-class QAbstractButton;
-class QCloseEvent;
-class QDialogButtonBox;
-class QTreeView;
-
-using namespace std;
-
-class MvQClassModel : public QAbstractItemModel, public ClassScanner
-{
-public:
- MvQClassModel(QObject *parent=0);
-
- int columnCount( const QModelIndex&) const;
- int rowCount (const QModelIndex& parent = QModelIndex() ) const;
- QVariant data (const QModelIndex& , int role = Qt::DisplayRole ) const;
- QModelIndex index (int, int, const QModelIndex& parent = QModelIndex() ) const;
- QModelIndex parent (const QModelIndex & ) const;
- QVariant headerData(const int section, const Qt::Orientation orient , const int role ) const;
-
- void next(const IconClass&);
-
-protected:
- QList<const IconClass*> classes_;
-};
-
-class MvQClassBrowser : public QDialog
-{
- Q_OBJECT
-
-public:
- MvQClassBrowser(QWidget* parent=0);
- ~MvQClassBrowser();
-
- void writeSettings(QSettings &);
- void readSettings(QSettings &);
-
-public slots:
- void slotButtonClicked(QAbstractButton*);
-
-protected:
- void closeEvent(QCloseEvent*);
-
- QTreeView* classView_;
- QDialogButtonBox* buttonBox_;
-};
-
-#endif
diff --git a/src/Desktop/MvQColourLine.cc b/src/Desktop/MvQColourLine.cc
index d9d5f33..9f00d54 100644
--- a/src/Desktop/MvQColourLine.cc
+++ b/src/Desktop/MvQColourLine.cc
@@ -18,6 +18,8 @@
#include "LineFactory.h"
#include "RequestPanel.h"
+QList<QString> MvQColourLine::specialColourNames_;
+
/*void MvQColourComboBox::insertColor(int index, const QColor &color, const QString &name)
{
@@ -40,6 +42,14 @@
MvQColourLine::MvQColourLine(RequestPanel& owner,const Parameter& param) :
MvQRequestPanelLine(owner,param)
{
+
+ // populate our list of 'special' colour names
+ if (specialColourNames_.empty())
+ {
+ specialColourNames_ << "AUTOMATIC" << "CONTOUR_LINE_COLOUR";
+ }
+
+
colCb_ = new QComboBox(parentWidget_);
QFont font;
@@ -49,7 +59,32 @@ MvQColourLine::MvQColourLine(RequestPanel& owner,const Parameter& param) :
colCb_->setIconSize(QSize(w,h));
param_.scan(*this);
-
+
+ //The AUTOMATIC colour needs to be handled separately
+ bool hasAuto=false;
+ for(int i=0; i < colCb_->count(); i++)
+ {
+ QString colourName(colCb_->itemData(i).toString());
+ if(specialColourNames_.contains(colourName))
+ {
+ hasAuto=true;
+ break;
+ }
+ }
+
+ if(hasAuto == false)
+ {
+ const vector<string>& def=param_.defaults();
+ if(def.size() == 1)
+ {
+ QString defColour(QString::fromStdString(def.at(0)));
+ if (specialColourNames_.contains(defColour))
+ {
+ addColour(Qt::white,defColour,defColour);
+ }
+ }
+ }
+
owner_.addWidget(colCb_,row_,3);
connect(colCb_,SIGNAL(currentIndexChanged(int)),
@@ -58,26 +93,38 @@ MvQColourLine::MvQColourLine(RequestPanel& owner,const Parameter& param) :
void MvQColourLine::next(const Parameter&, const char* first,const char* /*second*/)
{
- addColour(MvQPalette::magics(first),QString::fromStdString(param_.beautifiedName(first)),QString(first));
-}
+ if(!specialColourNames_.contains(first))
+ {
+ addColour(MvQPalette::magics(first),QString::fromStdString(param_.beautifiedName(first)),QString(first));
+ }
+ else
+ {
+ addColour(Qt::white,first,first);
+ }
+}
-void MvQColourLine::addColour(QColor color,QString name, QString realName)
+void MvQColourLine::addColour(QColor color,QString name, QString realName,bool setCurrent)
{
if(!color.isValid())
return;
+ bool realCol = (!specialColourNames_.contains(name));
+
int w=colCb_->iconSize().width();
int h=colCb_->iconSize().height();
- QPixmap pixmap(w, h);
- QPainter painter(&pixmap);
- painter.setPen(Qt::black);
- painter.setBrush(QBrush(color));
- painter.drawRect(0, 0, w-1, h-1);
-
QIcon icon;
- icon.addPixmap(pixmap);
-
+ if(realCol)
+ {
+ QPixmap pixmap(w, h);
+ QPainter painter(&pixmap);
+ painter.setPen(Qt::black);
+ painter.setBrush(QBrush(color));
+ painter.drawRect(0, 0, w-1, h-1);
+
+ icon.addPixmap(pixmap);
+ }
+
if(colCb_->count() == 0)
colCb_->addItem(icon,name,realName);
else
@@ -86,6 +133,8 @@ void MvQColourLine::addColour(QColor color,QString name, QString realName)
while(i < colCb_->count() && colCb_->itemText(i) < name)
i++;
colCb_->insertItem(i,icon,name,realName);
+ if(setCurrent)
+ colCb_->setCurrentIndex(i);
}
}
@@ -104,8 +153,8 @@ void MvQColourLine::refresh(const vector<string>& values)
}
QString name=QString::fromStdString(values[0]);
- addColour(MvQPalette::magics(values[0]),name,name);
- colCb_->setCurrentIndex(colCb_->count()-1);
+ //This sets the current index as well
+ addColour(MvQPalette::magics(values[0]),name,name,true);
}
//changed_ = false;
@@ -115,8 +164,19 @@ void MvQColourLine::slotCurrentChanged(int index)
{
if(index >=0 && index < colCb_->count())
{
- owner_.set(param_.name(),colCb_->itemData(index).toString().toStdString());
- updateHelper();
+ QString name=colCb_->itemData(index).toString();
+ owner_.set(param_.name(),name.toStdString());
+ if(!specialColourNames_.contains(name))
+ {
+ if(helper_ && helper_->widget())
+ helper_->widget()->setEnabled(true);
+ updateHelper();
+ }
+ else
+ {
+ if(helper_ && helper_->widget())
+ helper_->widget()->setEnabled(false);
+ }
}
}
@@ -126,8 +186,7 @@ void MvQColourLine::slotHelperEdited(const vector<string>& vals)
return;
QString name=QString::fromStdString(vals[0]);
- addColour(MvQPalette::magics(vals[0]),name,name);
- colCb_->setCurrentIndex(colCb_->count()-1);
+ addColour(MvQPalette::magics(vals[0]),name,name,true);
}
void MvQColourLine::updateHelper()
diff --git a/src/Desktop/MvQColourLine.h b/src/Desktop/MvQColourLine.h
index 52d2cef..f8afa87 100644
--- a/src/Desktop/MvQColourLine.h
+++ b/src/Desktop/MvQColourLine.h
@@ -39,12 +39,14 @@ public slots:
void slotHelperEdited(const vector<string>&);
protected:
- void next(const Parameter&, const char* first,const char* second);
- void addColour(QColor,QString,QString);
- void updateHelper();
+ void next(const Parameter&, const char* first,const char* second);
+ void addColour(QColor,QString,QString,bool setCurrent=false);
+ void updateHelper();
- QComboBox *colCb_;
-
+ QComboBox *colCb_;
+ static QList<QString> specialColourNames_;
+
+
};
#endif
diff --git a/src/Desktop/MvQComboBoxLine.cc b/src/Desktop/MvQComboBoxLine.cc
index 018825c..382a289 100644
--- a/src/Desktop/MvQComboBoxLine.cc
+++ b/src/Desktop/MvQComboBoxLine.cc
@@ -16,7 +16,8 @@
#include "RequestPanel.h"
MvQComboBoxLine::MvQComboBoxLine(RequestPanel& owner,const Parameter& param) :
- MvQRequestPanelLine(owner,param)
+ MvQRequestPanelLine(owner,param),
+ reportChange_(true)
{
cbEdit_ = new QComboBox(parentWidget_);
owner_.addWidget(cbEdit_,row_,3);
@@ -44,7 +45,11 @@ void MvQComboBoxLine::refresh(const vector<string>& values)
for(int i=0; i < cbEdit_->count(); i++)
{
if(cbEdit_->itemData(i).toString().toStdString() == values[0])
- cbEdit_->setCurrentIndex(i);
+ {
+ reportChange_=false;
+ cbEdit_->setCurrentIndex(i);
+ reportChange_=true;
+ }
}
}
@@ -53,7 +58,7 @@ void MvQComboBoxLine::refresh(const vector<string>& values)
void MvQComboBoxLine::slotCurrentChanged(int index)
{
- if(index >=0 && index < cbEdit_->count())
+ if(reportChange_ && index >=0 && index < cbEdit_->count())
owner_.set(param_.name(),cbEdit_->itemData(index).toString().toStdString());
}
diff --git a/src/Desktop/MvQComboBoxLine.h b/src/Desktop/MvQComboBoxLine.h
index e473442..2846422 100644
--- a/src/Desktop/MvQComboBoxLine.h
+++ b/src/Desktop/MvQComboBoxLine.h
@@ -38,7 +38,8 @@ public slots:
protected:
void next(const Parameter&, const char* first,const char* second);
- QComboBox *cbEdit_;
+ QComboBox *cbEdit_;
+ bool reportChange_;
};
diff --git a/src/Desktop/MvQContextMenu.cc b/src/Desktop/MvQContextMenu.cc
index 2e274ba..071cf88 100644
--- a/src/Desktop/MvQContextMenu.cc
+++ b/src/Desktop/MvQContextMenu.cc
@@ -13,6 +13,7 @@
#include "MvQContextMenu.h"
#include "Command.h"
+#include "IconClass.h"
#include "Folder.h"
#include "IconObject.h"
#include "MvRequest.h"
@@ -63,8 +64,27 @@ void MvQContextItemSet::add(const MvRequest& r)
if((item=MvQContextItem::build(r,desktop_))!=0)
desktop_ << item;
}
+
+ else if(strcmp(verb,"container_menu") ==0)
+ {
+ if((item=MvQContextItem::build(r,container_))!=0)
+ container_ << item;
+ }
}
+QShortcut* MvQContextItemSet::makeDefaultIconShortCut(QWidget* w)
+{
+ foreach(MvQContextItem* item, icon_)
+ {
+ if(item->hasShortCut("Return"))
+ return 0;
+ }
+
+ QShortcut *sc=new QShortcut(Qt::Key_Return,w);
+ sc->setContext(Qt::WidgetShortcut);
+ return sc;
+}
+
//======================================
//
// MvQContextItemCondition
@@ -184,6 +204,7 @@ MvQContextItem::MvQContextItem(const MvRequest& r) :
id_=QString(r("id"));
command_=QString(r("cmd"));
service_=QString(r("service"));
+ shortCut_=QString(r("shortcut"));
}
bool MvQContextItem::checkCondition(QString txt)
@@ -197,6 +218,11 @@ QString MvQContextItem::iconPath(const MvRequest& r)
return QString();
}
+bool MvQContextItem::hasShortCut(QString s)
+{
+ return (shortCut_ == s);
+}
+
//======================================
//
// MvQContextSubMenu
@@ -250,7 +276,7 @@ MvQContextAction::MvQContextAction(QMenu *menu,const MvRequest& r) :
init(text,shortcut,data,ic);
if(menu)
- menu->addAction(this);
+ menu->addAction(this);
}
void MvQContextAction::init(QString text,QString shortcut,QString data,QString iconPath)
@@ -276,7 +302,7 @@ QShortcut *MvQContextAction::makeShortCut(QWidget *parent)
{
QShortcut *sc=new QShortcut(shortcut(),parent);
sc->setContext(Qt::WidgetShortcut);
- sc->setProperty("cmd",id());
+ sc->setProperty("cmd",command_);
return sc;
}
return 0;
@@ -325,6 +351,8 @@ QString MvQContextMenu::exec(QList<MvQContextItem*> lst,IconObject *obj,QPoint p
{
QMenu *menu=new QMenu(parent);
QString retVal;
+ QAction *defaultAction=0;
+ QString defaultMethod=QString::fromStdString(obj->iconClass().defaultMethod()).toLower();
std::set<string> iconCommands=obj->can();
@@ -333,6 +361,17 @@ QString MvQContextMenu::exec(QList<MvQContextItem*> lst,IconObject *obj,QPoint p
if(item->command().isEmpty() || iconCommands.find(item->command().toStdString()) != iconCommands.end())
{
item->addToMenu(menu);
+ qDebug() << defaultMethod << item->command();
+
+ if(!defaultMethod.isEmpty() &&
+ defaultMethod == item->command())
+ {
+ QFont font;
+ font.setBold(true);
+ defaultAction=menu->actions().back();
+ defaultAction->setFont(font);
+ }
+
}
}
@@ -350,6 +389,10 @@ QString MvQContextMenu::exec(QList<MvQContextItem*> lst,IconObject *obj,QPoint p
delete menu;
+ //Reset font for the default action
+ if(defaultAction)
+ defaultAction->setFont(QFont());
+
return retVal;
}
diff --git a/src/Desktop/MvQContextMenu.h b/src/Desktop/MvQContextMenu.h
index 44ca788..33ff95b 100644
--- a/src/Desktop/MvQContextMenu.h
+++ b/src/Desktop/MvQContextMenu.h
@@ -36,12 +36,15 @@ public:
QList<MvQContextItem*> icon() const {return icon_;}
QList<MvQContextItem*> multiIcon() const {return multiIcon_;}
QList<MvQContextItem*> desktop() const {return desktop_;}
+ QList<MvQContextItem*> container() const {return container_;}
+ QShortcut* makeDefaultIconShortCut(QWidget*);
private:
void add(const MvRequest&);
QList<MvQContextItem*> icon_;
QList<MvQContextItem*> multiIcon_;
QList<MvQContextItem*> desktop_;
+ QList<MvQContextItem*> container_;
};
class MvQContextItemCondition
@@ -72,10 +75,12 @@ public:
QString id() const {return id_;};
QString command() const {return command_;};
QString service() const {return service_;};
+ QString shortCut() const {return shortCut_;};
virtual void addToMenu(QMenu*)=0;
virtual QShortcut* makeShortCut(QWidget*)=0;
bool checkCondition(QString);
static MvQContextItem* build(const MvRequest& r,QList<MvQContextItem*> items);
+ bool hasShortCut(QString);
protected:
QString iconPath(const MvRequest& r);
@@ -84,6 +89,7 @@ protected:
QString id_;
QString command_;
QString service_;
+ QString shortCut_;
};
class MvQContextSubMenu : public QMenu, public MvQContextItem
diff --git a/src/Desktop/MvQDesktop.cc b/src/Desktop/MvQDesktop.cc
index a979756..24be76a 100644
--- a/src/Desktop/MvQDesktop.cc
+++ b/src/Desktop/MvQDesktop.cc
@@ -8,6 +8,8 @@
***************************** LICENSE END *************************************/
#include <QDebug>
+#include <QPalette>
+#include <QSettings>
#include "MvQDesktop.h"
@@ -15,6 +17,8 @@
#include "MvQDrawerPanel.h"
#include "MvQFileBrowser.h"
#include "MvQMessageBox.h"
+#include "MvQRecentIcons.h"
+#include "MvQTheme.h"
#include "ConfigLoader.h"
#include "Drop.h"
@@ -25,7 +29,6 @@
#include "Path.h"
#include "Protocol.h"
#include "MvRequest.h"
-//#include "PmContext.h"
#include "MvTemplates.h"
static void drop_request(svcid *id,request *r,void *data);
@@ -41,6 +44,34 @@ MvQDesktop::MvQDesktop(int &argc, char **argv,string appName) :
Q_INIT_RESOURCE(window);
Q_INIT_RESOURCE(find);
+
+ //---------------------------
+ // Set QSettings location
+ //---------------------------
+
+ //Set a custom location inside the metview home directory for qsettings
+
+ string sp(getenv("METVIEW_USER_DIRECTORY"));
+ sp+="/System/Preferences/._mv_desktop_config_";
+
+ qDebug() << "QSettings path is set to:" << QString::fromStdString(sp);
+
+ QSettings::setPath(QSettings::NativeFormat,QSettings::UserScope,
+ QString::fromStdString(sp));
+
+ //---------------------------
+ // Load theme
+ //---------------------------
+
+ MvQTheme theme;
+ if(const char *themeF=getenv("MV_GUI_THEME"))
+ {
+ theme.load(this,QString(themeF));
+ }
+ else
+ {
+ theme.load(this,"Desktop");
+ }
}
MvQDesktop::~MvQDesktop()
@@ -49,10 +80,6 @@ MvQDesktop::~MvQDesktop()
void MvQDesktop::init()
{
- //QPalette pal=QApplication::palette();
- //pal.setBrush(QPalette::Window,QColor(190,216,238));
- //QApplication::setPalette(pal);
-
//---------------------------
// Load resources
//---------------------------
@@ -103,6 +130,12 @@ void MvQDesktop::init()
MvQBookmarks::init();
+ //-------------------------------------
+ // Most recent icons list
+ //-------------------------------------
+
+ MvQRecentIcons::init();
+
//------------------------------
// Start browsers
//------------------------------
@@ -170,7 +203,7 @@ static void drop_request(svcid *id,request *r,void */*data*/)
}
}
-static void reply_request(svcid *id,request *r,void */*data*/)
+static void reply_request(svcid* /*id*/,request *r,void */*data*/)
{
cout << "reply" << endl;
@@ -210,4 +243,3 @@ void MvQDesktop::showBrowsers()
{
MvQFileBrowser::showBrowsers();
}
-
diff --git a/src/Desktop/MvQDesktopSettings.cc b/src/Desktop/MvQDesktopSettings.cc
index 2e7e524..e05d996 100644
--- a/src/Desktop/MvQDesktopSettings.cc
+++ b/src/Desktop/MvQDesktopSettings.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -11,16 +11,35 @@
#include <QStringList>
-MvQ::FolderViewMode MvQDesktopSettings::viewMode_=MvQ::IconViewMode;
-int MvQDesktopSettings::iconSize_=32;
+#include "MvApplication.h"
+
QList<bool> MvQDesktopSettings::headerVisible_;
QList<int> MvQDesktopSettings::headerIndex_;
+MvQDesktopSettings::MvQDesktopSettings()
+{
+}
+
+Desktop::DragPolicy MvQDesktopSettings::dragPolicy()
+{
+ MvRequest r=MvApplication::getPreferences();
+
+ if(const char* c=r("ICON_DRAG_POLICY"))
+ {
+ if(strcmp(c,"SHOW_ALL") ==0)
+ return Desktop::DragShowAllIcons;
+ else if(strcmp(c,"SHOW_DRAGGED") ==0)
+ return Desktop::DragShowDraggedIcon;
+ }
+
+ return Desktop::DragShowDraggedIcon;
+}
+
//Writing/reading QLists for QSettings did not work whatever we
//tried with Q_DECLARE_METATYPE and qRegisterMetaType
//(got error: QVariant::load: unable to load type 257).
//So instead we need to use QStringlist here.
-
+
void MvQDesktopSettings::writeSettings(QSettings& settings)
{
settings.beginGroup("detailedView");
diff --git a/src/Desktop/MvQDesktopSettings.h b/src/Desktop/MvQDesktopSettings.h
index 2091b85..e520cfa 100644
--- a/src/Desktop/MvQDesktopSettings.h
+++ b/src/Desktop/MvQDesktopSettings.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -10,21 +10,19 @@
#ifndef MvQDesktopSettings_H
#define MvQDesktopSettings_H
-#include <QList>
#include <QSettings>
-#include "MvQ.h"
+#include "Desktop.h"
class MvQDesktopSettings
{
public:
- MvQDesktopSettings(){};
-
- static MvQ::FolderViewMode viewMode_;
- static int iconSize_;
+ MvQDesktopSettings();
+
+ static Desktop::DragPolicy dragPolicy();
static QList<bool> headerVisible_;
static QList<int> headerIndex_;
-
+
static void writeSettings(QSettings&);
static void readSettings(QSettings&);
};
diff --git a/src/Desktop/MvQDetailedFolderView.cc b/src/Desktop/MvQDetailedFolderView.cc
index eb8ca71..658be9f 100644
--- a/src/Desktop/MvQDetailedFolderView.cc
+++ b/src/Desktop/MvQDetailedFolderView.cc
@@ -21,7 +21,9 @@
#include "MvQDetailedFolderView.h"
+#include "MvQActionList.h"
#include "MvQContextMenu.h"
+#include "MvQDropTarget.h"
#include "MvQFolderViewDelegate.h"
#include "MvQFolderModel.h"
#include "MvQDesktopSettings.h"
@@ -33,10 +35,15 @@
static QList<MvQDetailedFolderView*> views;
-MvQDetailedFolderView::MvQDetailedFolderView(MvQFolderModel *folderModel,QWidget *parent) :
+MvQDetailedFolderView::MvQDetailedFolderView(MvQFolderModel *folderModel,
+ MvQActionList* iconActions,
+ MvQActionList* desktopActions,QWidget *parent) :
QTreeView(parent),
- MvQFolderViewBase(folderModel),
- moveActionEnabled_(true)
+ MvQFolderViewBase(folderModel,parent),
+ moveActionEnabled_(true),
+ defaultShortCut_(0),
+ appIconActions_(iconActions),
+ appDesktopActions_(desktopActions)
{
views << this;
@@ -94,16 +101,19 @@ MvQDetailedFolderView::MvQDetailedFolderView(MvQFolderModel *folderModel,QWidget
connect(header(),SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(slotHeaderContextMenu(const QPoint &)));
- //init header
+ //Init header
updateHeader();
-
-
+
for(int i=0; i < folderModel_->columnCount(QModelIndex())-1; i++)
resizeColumnToContents(i);
-
-
+
/*connect(header(),SIGNAL(sectionMoved(int,int,int)),
this, SLOT(slotMessageTreeColumnMoved(int,int,int)));*/
+
+ setProperty("mvStyle","DetailedFolderView");
+
+ //We set up the shortcuts here!!
+ setupShortCut();
}
MvQDetailedFolderView::~MvQDetailedFolderView()
@@ -111,13 +121,31 @@ MvQDetailedFolderView::~MvQDetailedFolderView()
views.removeOne(this);
}
+void MvQDetailedFolderView::doReset()
+{
+ reset();
+}
+
+QWidget* MvQDetailedFolderView::concreteWidget()
+{
+ return this;
+}
+
MvQContextItemSet* MvQDetailedFolderView::cmSet()
{
static MvQContextItemSet cmItems("DetailedFolderView");
return &cmItems;
}
-
+QModelIndexList MvQDetailedFolderView::selectedList()
+{
+ QModelIndexList lst;
+ foreach(QModelIndex idx,selectedIndexes())
+ if(idx.column() == 0)
+ lst << idx;
+ return lst;
+}
+
void MvQDetailedFolderView::slotSelectItem(const QModelIndex& /*index*/)
{
/*if(isFolder(index,FilterModelIndex))
@@ -130,44 +158,52 @@ void MvQDetailedFolderView::slotSelectItem(const QModelIndex& /*index*/)
void MvQDetailedFolderView::slotDoubleClickItem(const QModelIndex& index)
{
- handleDoubleClick(index);
-}
-
-void MvQDetailedFolderView::slotEntered(const QModelIndex& index)
-{
- emit itemEntered(itemInfo(index,FilterModelIndex));
+ QModelIndexList lst=selectedList();
+ if(lst.count() == 1 && lst.at(0) == index)
+ handleDoubleClick(index);
}
void MvQDetailedFolderView::setupShortCut()
{
- if(shortCutInit_)
+ if(shortCutInit_)
return;
else
shortCutInit_=true;
- /*foreach(MvQContextItem *cm,cmIconItems_)
+ if(MvQContextItemSet *cms=cmSet())
{
- QShortcut *sc=cm->makeShortCut(this);
+ foreach(MvQContextItem *cm,cms->icon())
+ {
+ if(!appIconActions_ || !appIconActions_->shortCutDefined(cm->shortCut()))
+ {
+ if(QShortcut *sc=cm->makeShortCut(this))
+ {
+ connect(sc,SIGNAL(activated()),
+ this,SLOT(slotIconShortCut()));
+ }
+ }
+ }
- if(sc)
+ foreach(MvQContextItem *cm,cms->desktop())
{
- connect(sc,SIGNAL(activated()),
- this,SLOT(slotIconShortCut()));
+
+ if(!appDesktopActions_ || !appDesktopActions_->shortCutDefined(cm->shortCut()))
+ {
+ if(QShortcut *sc=cm->makeShortCut(this))
+ {
+ connect(sc,SIGNAL(activated()),
+ this,SLOT(slotDesktopShortCut()));
+ }
+ }
}
- }*/
-
- if(MvQContextItemSet *cms=cmSet())
- {
- foreach(MvQContextItem *cm,cms->icon())
+
+ if(QShortcut* sc=cms->makeDefaultIconShortCut(this))
{
- QShortcut *sc=cm->makeShortCut(this);
+ defaultShortCut_=sc;
+ connect(defaultShortCut_,SIGNAL(activated()),
+ this,SLOT(slotDefaultShortCut()));
+ }
- if(sc)
- {
- connect(sc,SIGNAL(activated()),
- this,SLOT(slotIconShortCut()));
- }
- }
}
}
@@ -175,25 +211,48 @@ void MvQDetailedFolderView::slotIconShortCut()
{
QShortcut *sc=static_cast<QShortcut*>(QObject::sender());
if(sc)
- { QModelIndexList lst=selectedIndexes();
+ { QModelIndexList lst=selectedList();
if(lst.count() > 0)
- handleIconShortCut(sc,lst.at(0));
+ handleIconShortCut(sc,lst);
}
}
-void MvQDetailedFolderView::slotContextMenu(const QPoint &position)
+void MvQDetailedFolderView::slotDefaultShortCut()
{
- QModelIndexList lst;
- foreach(QModelIndex idx,selectedIndexes())
- if(idx.column() == 0)
- lst << idx;
+ if(defaultShortCut_)
+ { QModelIndexList lst=selectedList();
+ qDebug() << "default shortcut" << lst;
+ if(lst.count() == 1)
+ handleDoubleClick(lst.at(0));
+ }
+}
+
+void MvQDetailedFolderView::slotDesktopShortCut()
+{
+ QShortcut *sc=static_cast<QShortcut*>(QObject::sender());
+ if(sc)
+ {
+ //QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+ //handleContextMenu(index,lst,mapToGlobal(position),position+scrollOffset,this);
+ handleDesktopShortCut(sc,QPoint(0,0),this);
+ }
+}
+
+void MvQDetailedFolderView::slotContextMenu(const QPoint &position)
+{
+ QModelIndexList lst=selectedList();
//QModelIndex index=indexAt(position);
QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
handleContextMenu(indexAt(position),lst,mapToGlobal(position),position+scrollOffset,this);
}
+void MvQDetailedFolderView::iconCommandFromMain(QString name)
+{
+ handleIconCommand(selectedList(),name);
+}
+
void MvQDetailedFolderView::folderChanged()
{
emit currentFolderChanged(currentFolder());
@@ -204,12 +263,77 @@ void MvQDetailedFolderView::iconCommand(QString name,IconObjectH obj)
emit iconCommandRequested(name,obj);
}
+void MvQDetailedFolderView::desktopCommand(QString name,QPoint pos)
+{
+ emit desktopCommandRequested(name,pos);
+}
+
void MvQDetailedFolderView::slotObjectRenamed(const QModelIndex& sourceIndex,QString /*oriName*/)
{
QModelIndex index=filterModel_->mapFromSource(sourceIndex);
dataChanged(index,index);
}
+//------------------------------------------
+// Item info. See also mousemove event!
+//------------------------------------------
+
+void MvQDetailedFolderView::slotEntered(const QModelIndex& index)
+{
+ itemInfo_=itemInfo(index,FilterModelIndex);
+ emit itemEntered(itemInfo_);
+}
+
+void MvQDetailedFolderView::leaveEvent(QEvent *event)
+{
+ itemInfo_=QString();
+ emit itemEntered(itemInfo_);
+ QWidget::leaveEvent(event);
+}
+
+
+//=================================================
+//
+// Icon positions
+//
+//==================================================
+
+QRect MvQDetailedFolderView::itemRect(QList<IconObject*> objLst)
+{
+ QRect bbox;
+ foreach(IconObject* obj,objLst)
+ {
+ bbox=bbox.united(visualRect(filterModel_->mapFromSource(folderModel_->indexFromObject(obj))));
+ }
+
+ return bbox;
+}
+
+QRect MvQDetailedFolderView::itemRect(IconObject *obj)
+{
+ return visualRect(filterModel_->mapFromSource(folderModel_->indexFromObject(obj)));
+}
+
+
+QRect MvQDetailedFolderView::pixmapRect(QList<IconObject*> objLst)
+{
+ QRect bbox;
+ foreach(IconObject* obj,objLst)
+ {
+ bbox=bbox.united(pixmapRect(obj));
+ }
+
+ return bbox;
+}
+
+
+QRect MvQDetailedFolderView::pixmapRect(IconObject *obj)
+{
+ QRect r=visualRect(filterModel_->mapFromSource(folderModel_->indexFromObject(obj)));
+ r.setSize(QSize(getIconSize(),getIconSize()));
+ return r;
+}
+
//=================================================
//
// Drag and drop. We need this cutom implementation
@@ -234,7 +358,13 @@ void MvQDetailedFolderView::mousePressEvent(QMouseEvent *event)
void MvQDetailedFolderView::mouseMoveEvent(QMouseEvent *event)
{
- if(event->buttons() & (Qt::LeftButton | Qt::MidButton))
+ if(!itemInfo_.isEmpty() && !indexAt(event->pos()).isValid())
+ {
+ itemInfo_=QString();
+ emit itemEntered(itemInfo_);
+ }
+
+ if(event->buttons() & (Qt::LeftButton | Qt::MidButton))
{
int distance = (event->pos() - startPos_).manhattanLength();
if(distance >= QApplication::startDragDistance())
@@ -258,143 +388,83 @@ void MvQDetailedFolderView::mouseMoveEvent(QMouseEvent *event)
void MvQDetailedFolderView::performDrag(Qt::DropAction dropAction,QPoint pos)
{
- //We need only one index (the first column) for each row
- QModelIndexList lstSel=selectedIndexes();
- QModelIndexList lst;
+ QModelIndex viewIndex=indexAt(pos);
+ QModelIndex index=filterModel_->mapToSource(viewIndex);
+
+ //The object that was dragged
+ IconObject* dragObj=folderModel_->objectFromIndex(index);
+
+ //List of objects to drag
+ //We need only one index (the first column) for each row
+ QList<IconObject*> objLst;
QSet<int> rows;
- foreach(QModelIndex index,lstSel)
+ foreach(QModelIndex index,selectedIndexes())
{
if(!rows.contains(index.row()))
{
rows << index.row();
- lst << filterModel_->index(index.row(),0);
+ QModelIndex idx=filterModel_->index(index.row(),0);
+ objLst << folderModel_->objectFromIndex(filterModel_->mapToSource(idx));
}
}
-
- QModelIndex viewIndex=indexAt(pos);
- QModelIndex index=filterModel_->mapToSource(viewIndex);
-
- if(lst.contains(viewIndex) && index.isValid())
- {
- IconObject* dragObj=folderModel_->objectFromIndex(index);
-
- //No drag for edited icons
- if(dragObj && !dragObj->editor())
- {
- qDebug() << "drag" << dragObj->name().c_str();
-
- //Create drag object
- QDrag *drag = new QDrag(this);
-
- //List of object to drag
- QList<IconObject*> objLst;
- foreach(QModelIndex idx,lst)
- {
- objLst << folderModel_->objectFromIndex(idx);
- }
-
- //Create and set the drag pixmap and set hotspot
- QPoint hotSpotInRect;
- if(lst.count() > 1)
- {
- //Find bounding box for selected visrects
- QRect bbox;
- foreach(QModelIndex idx,lst)
- {
- QRect vr=visualRect(idx);
- vr.setWidth(getIconSize());
- bbox=bbox.united(vr);
- }
-
- //Render the drag pixmap
- QPixmap pix(bbox.size());
- pix.fill(Qt::transparent);
- QPainter painter(&pix);
- for(int i=0; i < objLst.count(); i++)
- {
- QRect vr=visualRect(lst[i]);
- vr.setWidth(getIconSize());
- painter.drawPixmap(vr.topLeft()-bbox.topLeft(),
- MvQIconProvider::pixmap(objLst.at(i)->iconClass(),getIconSize()));
- }
-
- drag->setPixmap(pix);
-
- //Find the hotspot
- QRect rect=visualRect(viewIndex);
- rect.setWidth(getIconSize());
- hotSpotInRect=pos-rect.topLeft();
- QPoint hotSpot(pos.x()-rect.center().x()+getIconSize()/2,pos.y()-rect.top());
- hotSpot=rect.topLeft()-bbox.topLeft()+hotSpot;
- drag->setHotSpot(hotSpot);
- }
- else
- {
- drag->setPixmap(MvQIconProvider::pixmap(dragObj->iconClass(),getIconSize()));
-
- QRect rect=visualRect(viewIndex);
- rect.setWidth(getIconSize());
- hotSpotInRect=pos-rect.topLeft();
- QPoint hotSpot(pos.x()-rect.center().x()+getIconSize()/2,pos.y()-rect.top());
- drag->setHotSpot(hotSpot);
- }
-
-
- //Create and set drag mime data
- MvQIconMimeData *mimeData= new MvQIconMimeData(folderModel_,
- dragObj,hotSpotInRect,
- objLst);
- drag->setMimeData(mimeData);
-
- if(drag->exec(dropAction) == dropAction)
- {
- }
- }
- }
-}
-
-/*
-QModelIndex index=filterModel_->mapToSource(indexAt(pos));
+ //It cannot be a helper!
+ bool fromHelper=false;
- if(index.isValid())
+ QDrag *drag=buildDrag(dragObj,objLst,fromHelper,this);
+ if(drag)
{
- IconObject* obj=folderModel_->objectFromIndex(index);
- if(obj)
- {
- //No drag for edited icons
- //if(obj->editor())
- // return;
-
- QRect rect=visualRect(currentIndex());
- QPoint hotSpot(getIconSize()/2,getIconSize()/2);
- QPoint centeredHotSpot(getIconSize()/2,getIconSize()/2);
-
- MvQIconMimeData *mimeData= new MvQIconMimeData(folderModel_,obj,rect,centeredHotSpot);
- //mimeData->setFromHelper(helper_);
-
- QDrag *drag = new QDrag(this);
- drag->setPixmap(MvQPixmapProvider::find(getIconSize())->pixmap(obj->iconClass()));
- drag->setHotSpot(hotSpot);
- drag->setMimeData(mimeData);
-
- qDebug() << "drag" << rect << pos << hotSpot;
-
- qDebug() << "drag" << mimeData->path() << mimeData->className();
-
- if(drag->exec(dropAction) == dropAction)
- {
- }
- }
+ drag->exec(Qt::CopyAction | Qt::MoveAction,dropAction);
}
}
-*/
-
//===========================
// Drop
//===========================
+void MvQDetailedFolderView::checkDropTarget(QDropEvent *event)
+{
+ IconObject* dragObj=0;
+ if(event->mimeData()->hasFormat("metview/icon"))
+ {
+ const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+
+ if(mimeData)
+ dragObj=mimeData->dragObject();
+ }
+
+
+ if(!dragObj)
+ {
+ removeDropTarget();
+ return;
+ }
+
+ Qt::DropAction dropAction=event->proposedAction();
+
+ QModelIndex index=indexAt(event->pos());
+ IconObject* obj=folderModel_->objectFromIndex(filterModel_->mapToSource(index));
+
+ if(obj != dragObj && obj && obj->isFolder() && !obj->locked())
+ {
+ MvQDropTarget::Instance()->reset(QString::fromStdString(obj->name()),(dropAction == Qt::MoveAction));
+ if(window())
+ {
+ MvQDropTarget::Instance()->move(mapToGlobal(event->pos())+QPoint(20,20));
+ }
+ return;
+ }
+ else
+ {
+ removeDropTarget();
+ }
+}
+
+void MvQDetailedFolderView::removeDropTarget()
+{
+ MvQDropTarget::Instance()->hide();
+}
+
void MvQDetailedFolderView::dragEnterEvent(QDragEnterEvent *event)
{
//qDebug() << event->mimeData()->formats();
@@ -405,7 +475,6 @@ void MvQDetailedFolderView::dragEnterEvent(QDragEnterEvent *event)
(event->proposedAction() == Qt::CopyAction ||
event->proposedAction() == Qt::MoveAction))
{
- //event->setDropAction(Qt::CopyAction);
event->accept();
}
else
@@ -418,16 +487,28 @@ void MvQDetailedFolderView::dragMoveEvent(QDragMoveEvent *event)
(event->proposedAction() == Qt::CopyAction ||
event->proposedAction() == Qt::MoveAction))
{
+ checkDropTarget(event);
event->accept();
}
else
+ {
+ removeDropTarget();
event->ignore();
+ }
}
+void MvQDetailedFolderView::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ removeDropTarget();
+ event->accept();
+}
+
void MvQDetailedFolderView::dropEvent(QDropEvent *event)
{
qDebug() << "dropEvent" << folderModel_->fullName();
+ removeDropTarget();
+
if(folderModel_->folder()->locked())
{
event->ignore();
@@ -463,40 +544,88 @@ void MvQDetailedFolderView::dropEvent(QDropEvent *event)
event->ignore();
return;
}
-
+
IconObject* dragObj=mimeData->dragObject();
- QList<IconObject*> objLst=mimeData->objects();
MvQFolderModel *model=mimeData->model();
+ if(dragObj && model)
+ {
+ bool fromSameView=(model == folderModel_ || model->folder() == folderModel_->folder());
+ performDrop(event->proposedAction(),mimeData,event->pos(),fromSameView);
+
+ event->accept();
+ return;
+ }
+ }
+
+ //--------------------------------------
+ // Drag and drop from create icon panel
+ //--------------------------------------
+
+ else if(event->mimeData()->hasFormat("metview/new_icon"))
+ {
+ const MvQNewIconMimeData* mimeData=qobject_cast<const MvQNewIconMimeData*>(event->mimeData());
- //Drop from another view/model --> copy or move
- if(model && dragObj &&
- model != folderModel_ && model->folder() != folderModel_->folder())
- {
- foreach(IconObject* obj, objLst)
- {
- //Cannot move/copy edited icons into another folder!!!
- if(!obj->editor() && isAccepted(obj))
- {
- if(event->proposedAction() == Qt::CopyAction || moveActionEnabled_== false)
- {
- obj->clone(folderModel_->folder(),false);
- }
-
- else if(event->proposedAction() == Qt::MoveAction)
- {
- folderModel_->folder()->adopt(obj);
- }
- }
- }
+ if(!mimeData)
+ {
+ event->ignore();
+ return;
+ }
+
+ if(mimeData->iconDefType() == MvQNewIconMimeData::UserDef)
+ {
+ const IconClass &kind=IconClass::find(mimeData->className().toStdString());
+ kind.createOne(folderModel_->folder());
+
+ event->accept();
+ return;
}
-
- event->accept();
- return;
}
event->ignore();
}
+void MvQDetailedFolderView::performDrop(Qt::DropAction dropAction,const MvQIconMimeData* data,
+ QPoint pos,bool fromSameView)
+{
+ bool toSameFolder=true;
+ Folder *folder=folderModel_->folder();
+ IconObject *objAt=folderModel_->objectFromIndex(filterModel_->mapToSource(indexAt(pos)));
+
+ //See if we drop the icons onto a folder icons. We do not allow dropping a folder into itself!!
+ if(objAt && objAt->isFolder() && !data->objects().contains(objAt))
+ {
+ folder=static_cast<Folder*>(objAt);
+ toSameFolder=false;
+ }
+
+ foreach(IconObject* obj, data->objects())
+ {
+ if(!isAccepted(obj))
+ continue;
+
+ //We set the object position to zero. This will instuct the icon folder view
+ //(when the folder is next open in it) to find meaningful positions to the
+ //icons.
+
+ if(dropAction == Qt::CopyAction || moveActionEnabled_== false)
+ {
+ obj->clone(folder,false,0,0);
+ }
+ else if((!fromSameView || !toSameFolder) &&
+ dropAction == Qt::MoveAction && folder)
+ {
+ obj->position(0,0);
+ folder->adopt(obj);
+ }
+ }
+}
+
+
+void MvQDetailedFolderView::keyPressEvent(QKeyEvent* event)
+{
+ QTreeView::keyPressEvent(event);
+}
+
//=========================================
// Icons
//=========================================
@@ -514,6 +643,13 @@ void MvQDetailedFolderView::blink(const QModelIndex& index)
delegate_->blink(index);
}
+
+void MvQDetailedFolderView::showIcon(const QModelIndex& index)
+{
+ scrollTo(index);
+ setCurrentIndex(index);
+}
+
//=========================================
// Header
//=========================================
@@ -586,4 +722,4 @@ void MvQDetailedFolderView::broadcastHeaderChange()
{
foreach(MvQDetailedFolderView *v,views)
v->updateHeader();
-}
\ No newline at end of file
+}
diff --git a/src/Desktop/MvQDetailedFolderView.h b/src/Desktop/MvQDetailedFolderView.h
index 9c98301..c7b107c 100644
--- a/src/Desktop/MvQDetailedFolderView.h
+++ b/src/Desktop/MvQDetailedFolderView.h
@@ -15,9 +15,10 @@
#include "MvQFolderViewBase.h"
+class MvQActionList;
class MvQContextItemSet;
class MvQDetailedViewDelegate;
-
+class MvQIconMimeData;
class Folder;
#include "IconObject.h"
@@ -27,13 +28,17 @@ class MvQDetailedFolderView : public QTreeView, public MvQFolderViewBase
Q_OBJECT
public:
- MvQDetailedFolderView(MvQFolderModel *,QWidget *parent=0);
+ MvQDetailedFolderView(MvQFolderModel *,MvQActionList*,MvQActionList*,QWidget *parent=0);
~MvQDetailedFolderView();
static void writeGlobalSettings(QSettings&);
static void readGlobalSettings(QSettings&);
+ QWidget* concreteWidget();
+ void doReset();
public slots:
void slotIconShortCut();
+ void slotDefaultShortCut();
+ void slotDesktopShortCut();
void slotContextMenu(const QPoint &);
void slotSelectItem(const QModelIndex&);
void slotEntered(const QModelIndex&);
@@ -53,17 +58,33 @@ protected:
void setupShortCut();
void setPositions() {};
void blink(const QModelIndex&);
+ void showIcon(const QModelIndex&);
+ void leaveEvent(QEvent *event);
void mousePressEvent(QMouseEvent*);
void mouseMoveEvent(QMouseEvent*);
void performDrag(Qt::DropAction,QPoint);
+ void checkDropTarget(QDropEvent *event);
+ void removeDropTarget();
void dragEnterEvent(QDragEnterEvent*);
void dragMoveEvent(QDragMoveEvent*);
+ void dragLeaveEvent(QDragLeaveEvent*);
void dropEvent(QDropEvent*);
+ void performDrop(Qt::DropAction dropAction,const MvQIconMimeData* data,
+ QPoint cursorScenePos,bool fromSameView);
+
+ void keyPressEvent(QKeyEvent* event);
+
+ QModelIndexList selectedList();
+ QRect itemRect(IconObject*);
+ QRect itemRect(QList<IconObject*>);
+ QRect pixmapRect(QList<IconObject*>);
+ QRect pixmapRect(IconObject*);
void folderChanged();
+ void iconCommandFromMain(QString name);
virtual void iconCommand(QString,IconObjectH);
- virtual void desktopCommand(QString,QPoint) {};
+ virtual void desktopCommand(QString,QPoint);
static void broadcastHeaderChange();
void updateHeader();
@@ -71,6 +92,10 @@ protected:
QPoint startPos_;
bool moveActionEnabled_;
MvQDetailedViewDelegate* delegate_;
+ QShortcut* defaultShortCut_;
+ MvQActionList* appIconActions_;
+ MvQActionList* appDesktopActions_;
+ QString itemInfo_;
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQDrawerPanel.cc b/src/Desktop/MvQDrawerPanel.cc
index 838c8c0..8429ddc 100644
--- a/src/Desktop/MvQDrawerPanel.cc
+++ b/src/Desktop/MvQDrawerPanel.cc
@@ -10,8 +10,10 @@
#include <QDebug>
#include <QHBoxLayout>
#include <QMouseEvent>
+#include <QPainter>
#include <QStackedWidget>
#include <QStyle>
+#include <QStyleOption>
#include <QTabBar>
#include <QToolButton>
#include <QVBoxLayout>
@@ -28,6 +30,7 @@
MvQDrawerTabBar::MvQDrawerTabBar(QWidget *parent) : QTabBar(parent)
{
+ setProperty("drawer","true");
}
void MvQDrawerTabBar::mousePressEvent(QMouseEvent *event)
@@ -52,7 +55,9 @@ MvQDrawerPanel::MvQDrawerPanel(QWidget* parent) :
QWidget(parent),
sorted_(true)
{
-
+ setProperty("helper","true");
+
+
QVBoxLayout *layout=new QVBoxLayout(this);
layout->setSpacing(0);
layout->setContentsMargins(0,0,0,0);
@@ -60,17 +65,20 @@ MvQDrawerPanel::MvQDrawerPanel(QWidget* parent) :
barLayout_=new QHBoxLayout;
barLayout_->setSpacing(0);
barLayout_->setContentsMargins(0,0,0,0);
- layout->addLayout(barLayout_);
+ layout->addLayout(barLayout_,Qt::AlignBottom);
bar_=new MvQDrawerTabBar(this);
//bar_->setDrawBase(false);
- bar_->setDocumentMode(true);
+ //bar_->setDocumentMode(true);
bar_->setExpanding(true);
barLayout_->addWidget(bar_);
+ QFont f;
+ QFontMetrics fm(f);
+
stacked_=new QStackedWidget(this);
- stacked_->setFixedHeight(80);
+ stacked_->setFixedHeight(2+6+20+5+fm.height()+6+20);
stacked_->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
layout->addWidget(stacked_);
@@ -86,6 +94,11 @@ MvQDrawerPanel::MvQDrawerPanel(QWidget* parent) :
connect(bar_, SIGNAL(customContextMenuRequested(const QPoint &)),
this,SLOT(slotContextMenu(const QPoint &)));
+
+ openIcon_=QIcon(QPixmap(":/desktop/drawer_open.svg"));
+ closeIcon_=QIcon(QPixmap(":/desktop/drawer_close.svg"));
+ noIcon_=QIcon();
+
}
MvQDrawerPanel::~MvQDrawerPanel()
@@ -106,6 +119,17 @@ void MvQDrawerPanel::addDrawer(QWidget* w,QString name)
bar_->addTab(name);
stacked_->addWidget(w);
+ //Add tool button
+ QToolButton *tb=new QToolButton(this);
+ tb->setToolButtonStyle(Qt::ToolButtonIconOnly);
+ tb->setAutoRaise(true);
+ tb->setIconSize(QSize(12,12));
+ tb->setObjectName("drawerTabTb");
+ bar_->setTabButton(bar_->count()-1,QTabBar::RightSide,tb);
+
+ connect(tb,SIGNAL(clicked()),
+ this,SLOT(slotTabButton()));
+
if(sorted_)
sortDrawers();
@@ -183,6 +207,7 @@ void MvQDrawerPanel::setCurrent(QString name)
if(bar_->tabText(i) == name)
{
bar_->setCurrentIndex(i);
+ updateTabButtonStatus();
return;
}
}
@@ -214,19 +239,27 @@ void MvQDrawerPanel::slotTabClicked(int index)
if(index != bar_->currentIndex())
{
- bar_->setCurrentIndex(index);
+ bar_->setCurrentIndex(index);
changed=true;
}
if(changed)
+ {
stacked_->show();
+ }
else
{
if(!stacked_->isVisible())
+ {
stacked_->show();
+ }
else
+ {
stacked_->hide();
+ }
}
+
+ updateTabButtonStatus();
}
void MvQDrawerPanel::shrink()
@@ -234,6 +267,49 @@ void MvQDrawerPanel::shrink()
stacked_->hide();
}
+void MvQDrawerPanel::updateTabButtonStatus()
+{
+ if(stacked_->isVisible())
+ {
+ for(int i=0; i < bar_->count(); i++)
+ {
+ if(i == bar_->currentIndex())
+ setTabButtonStatus(i,closeIcon_,tr("Close drawer"));
+ else
+ setTabButtonStatus(i,noIcon_,"");
+ }
+ }
+ else
+ {
+ for(int i=0; i < bar_->count(); i++)
+ setTabButtonStatus(i,openIcon_,tr("Open drawer"));
+ }
+}
+
+void MvQDrawerPanel::slotTabButton()
+{
+ if(QWidget* w=static_cast<QWidget*>(sender()))
+ {
+ for(int i=0; i < bar_->count(); i++)
+ if(w == bar_->tabButton(i,QTabBar::RightSide))
+ {
+ slotTabClicked(i);
+ break;
+ }
+ }
+}
+
+void MvQDrawerPanel::setTabButtonStatus(int index,const QIcon& icon,QString txt)
+{
+ if(QWidget *w=bar_->tabButton(index,QTabBar::RightSide))
+ if(QToolButton* tb=static_cast<QToolButton*>(w))
+ {
+ tb->setIcon(icon);
+ tb->setToolTip(txt);
+ }
+}
+
+
//----------------------------------------------
// Context menu
//----------------------------------------------
@@ -251,5 +327,14 @@ void MvQDrawerPanel::slotContextMenu(const QPoint& pos)
QString selected=MvQContextMenu::instance()->exec(cms->icon(),mapToGlobal(pos),this);
if(!selected.isEmpty())
- command(selected,index);
+
+ command(selected,index);
}
+
+void MvQDrawerPanel::paintEvent(QPaintEvent *)
+ {
+ QStyleOption opt;
+ opt.init(this);
+ QPainter p(this);
+ style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
+ }
\ No newline at end of file
diff --git a/src/Desktop/MvQDrawerPanel.h b/src/Desktop/MvQDrawerPanel.h
index 6eb502a..a7135e2 100644
--- a/src/Desktop/MvQDrawerPanel.h
+++ b/src/Desktop/MvQDrawerPanel.h
@@ -10,6 +10,7 @@
#ifndef MvQDrawerPanel_H
#define MvQDrawerPanel_H
+#include <QIcon>
#include <QTabBar>
#include <string>
@@ -53,6 +54,7 @@ public:
public slots:
void slotTabClicked(int);
void slotContextMenu(const QPoint &);
+ void slotTabButton();
protected:
virtual void command(QString,int)=0;
@@ -62,14 +64,20 @@ protected:
void renameDrawer(int,QString);
void deleteDrawer(int);
void sortDrawers();
+ void paintEvent(QPaintEvent *);
private:
void setCurrent(QString);
+ void updateTabButtonStatus();
+ void setTabButtonStatus(int index,const QIcon& icon,QString);
QHBoxLayout *barLayout_;
MvQDrawerTabBar *bar_;
QStackedWidget *stacked_;
bool sorted_;
+ QIcon openIcon_;
+ QIcon closeIcon_;
+ QIcon noIcon_;
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQDropTarget.cc b/src/Desktop/MvQDropTarget.cc
new file mode 100644
index 0000000..e7d69f0
--- /dev/null
+++ b/src/Desktop/MvQDropTarget.cc
@@ -0,0 +1,98 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "MvQDropTarget.h"
+
+#include <QDebug>
+#include <QPainter>
+
+MvQDropTarget* MvQDropTarget::instance_=0;
+
+MvQDropTarget* MvQDropTarget::Instance()
+{
+ if(!instance_)
+ instance_=new MvQDropTarget;
+ return instance_;
+}
+
+MvQDropTarget::MvQDropTarget() :
+ QLabel(0),
+ move_(true),
+ xPadding_(4),
+ yPadding_(4)
+{
+ setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
+ setFocusPolicy(Qt::NoFocus);
+
+ QLinearGradient hoverGrad;
+ hoverGrad.setCoordinateMode(QGradient::ObjectBoundingMode);
+ hoverGrad.setStart(0,0);
+ hoverGrad.setFinalStop(0,1);
+ hoverGrad.setColorAt(0, QColor(254,254,254));
+ hoverGrad.setColorAt(1, QColor(240,240,240));
+ bgBrush_=QBrush(hoverGrad);
+ bgPen_=QPen(QColor(127,154,191));
+
+ QFontMetrics fm(font_);
+
+ int size=fm.height();
+ decorPix_=QPixmap::fromImage(QPixmap(":/desktop/arrow_drop_target.svg").toImage().scaled(QSize(size,size),Qt::IgnoreAspectRatio,Qt::SmoothTransformation));
+}
+
+void MvQDropTarget::reset(QString target,bool move,QString prefix)
+{
+ if(pix_.isNull() || target_ != target || move_ != move)
+ {
+ target_=target;
+ move_=move;
+ createPixmap(prefix);
+ setPixmap(pix_);
+ }
+
+ show();
+}
+
+void MvQDropTarget::createPixmap(QString prefix)
+{
+ QString text1=(move_)?"Move to ":"Copy to ";
+ QString text2=target_;
+
+ if(!prefix.isEmpty())
+ text1+=prefix + " ";
+
+ int textOffset=decorPix_.width()+4;
+
+ QFontMetrics fm(font_);
+ QRect textRect(0,0,fm.width(text1+text2),fm.height());
+ QRect rect(0,0,2*xPadding_+textOffset+textRect.width(),2*yPadding_+textRect.height());
+
+ pix_=QPixmap(rect.size());
+
+ QPainter painter(&pix_);
+
+ painter.setPen(bgPen_);
+ painter.setBrush(bgBrush_);
+ //painter.drawRoundedRect(rect,2,2);
+ painter.drawRect(rect.adjusted(0,0,-1,-1));
+ painter.setBrush(Qt::NoBrush);
+
+ painter.drawPixmap(QPointF(xPadding_,yPadding_),decorPix_);
+
+ QRect tRect(xPadding_+textOffset,yPadding_,fm.width(text1),fm.height());
+ painter.setPen(Qt::blue);
+ painter.drawText(tRect,Qt::AlignLeft,text1);
+
+ tRect=QRect(xPadding_+textOffset+fm.width(text1),yPadding_,fm.width(text2),fm.height());
+ painter.setPen(Qt::black);
+ painter.drawText(tRect,Qt::AlignLeft,text2);
+
+ //
+ resize(pix_.size());
+}
+
\ No newline at end of file
diff --git a/src/Desktop/MvQDropTarget.h b/src/Desktop/MvQDropTarget.h
new file mode 100644
index 0000000..eff14ab
--- /dev/null
+++ b/src/Desktop/MvQDropTarget.h
@@ -0,0 +1,42 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef MvQDropTarget_H
+#define MvQDropTarget_H
+
+#include <QFont>
+#include <QLabel>
+#include <QPen>
+#include <QPixmap>
+
+class MvQDropTarget : public QLabel
+{
+public:
+ void reset(QString,bool,QString prefix=QString());
+ static MvQDropTarget* Instance();
+
+protected:
+ MvQDropTarget();
+ void createPixmap(QString);
+
+ static MvQDropTarget* instance_;
+
+ bool move_;
+ QString target_;
+ int xPadding_;
+ int yPadding_;
+ QPen bgPen_;
+ QBrush bgBrush_;
+ QPixmap decorPix_;
+ QPixmap pix_;
+ QFont font_;
+};
+
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQEditor.cc b/src/Desktop/MvQEditor.cc
index af46ba4..230ee80 100644
--- a/src/Desktop/MvQEditor.cc
+++ b/src/Desktop/MvQEditor.cc
@@ -18,10 +18,12 @@
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
+#include <QPainter>
#include <QPlainTextEdit>
#include <QPushButton>
#include <QSettings>
#include <QStyle>
+#include <QStyleOption>
#include <QStackedLayout>
#include <QStackedWidget>
#include <QToolBar>
@@ -39,6 +41,7 @@
#include "MvQFolderModel.h"
#include "MvQTemplateDrawer.h"
#include "MvQIconProvider.h"
+#include "MvQTheme.h"
//================================================
//
@@ -52,7 +55,7 @@ MvQEditorHeader::MvQEditorHeader(MvQEditor *owner,QPixmap pix) :
{
QHBoxLayout *hb=new QHBoxLayout(this);
hb->setSpacing(0);
- hb->setContentsMargins(1,1,1,1);
+ hb->setContentsMargins(0,0,0,0);
QFont font;
font.setBold(true);
@@ -65,7 +68,7 @@ MvQEditorHeader::MvQEditorHeader(MvQEditor *owner,QPixmap pix) :
pixLabel->setPixmap(pix);
pixLabel->setFrameShape(QFrame::Box);
pixLabel->setFrameShape(QFrame::StyledPanel);
- pixLabel->setObjectName(QString::fromUtf8("editorHeaderLabel"));
+ pixLabel->setObjectName(QString::fromUtf8("editorHeaderIcon"));
pixLabel->setMaximumHeight(txth);
hb->addWidget(pixLabel);
@@ -126,7 +129,9 @@ MvQEditorHeader::MvQEditorHeader(MvQEditor *owner,QPixmap pix) :
this,SLOT(slotAcceptEdit(bool)));
connect(cancelTb,SIGNAL(clicked(bool)),
- this,SLOT(slotCancelEdit(bool)));
+ this,SLOT(slotCancelEdit(bool)));
+
+ setProperty("editor","true");
}
@@ -165,14 +170,14 @@ void MvQEditorHeader::updateLabel(IconObject* obj)
{
if(!obj)
return;
-
- QString str=tr("<b><font color=#505050> Icon name: </font>");
- str+="<font color=#084cb3>" + QString::fromStdString(obj->name()) + "</font></b><br>";
- str+="<font color=#505050>";
+ QString str="<b><font color=" + MvQTheme::colour("editor","header_text").name() + tr("> Icon name: </font>");
+ str+="<font color=" + MvQTheme::colour("editor","header_icon_name").name() + ">" + QString::fromStdString(obj->name()) + "</font></b><br>";
+
+ str+="<font color=" + MvQTheme::colour("editor","header_text").name() + ">";
str+=tr("<b>Folder: </b>");
- str+="mv:" + QString::fromStdString(obj->parent()->fullName()) + "<br>";
+ str+=QString::fromStdString(obj->parent()->fullName()) + "<br>";
str+=tr("<b>Type: </b> ");
str+=QString::fromStdString(obj->className());
@@ -196,6 +201,14 @@ void MvQEditorHeader::lock(bool b)
renameTb_->setEnabled(!b);
}
+void MvQEditorHeader::paintEvent(QPaintEvent *)
+ {
+ QStyleOption opt;
+ opt.init(this);
+ QPainter p(this);
+ style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
+ }
+
//================================================
//
// MvQEditorTextPanel
@@ -387,7 +400,7 @@ MvQEditor::MvQEditor(const IconClass& name,const string& kind, QWidget *parent)
{
QVBoxLayout *vb=new QVBoxLayout;
vb->setSpacing(0);
- vb->setContentsMargins(1,1,1,1);
+ vb->setContentsMargins(0,0,0,0);
setLayout(vb);
//Header
@@ -398,19 +411,32 @@ MvQEditor::MvQEditor(const IconClass& name,const string& kind, QWidget *parent)
// Toolbar
//-------------------
- toolBarLayout_=new QHBoxLayout;
- vb->addLayout(toolBarLayout_);
-
- toolbarLeft_=new QToolBar(this);
- toolbarLeft_->setIconSize(QSize(20,20));
+ toolBarLayout_=new QHBoxLayout();
+ toolBarLayout_->setSpacing(0);
+ toolBarLayout_->setContentsMargins(0,0,0,0);
+
+ //vb->addLayout(toolBarLayout_);
+
+ //Widget to provide bg for the toolbars
+ QWidget *w=new QWidget(this);
+ w->setProperty("editor","true");
+ w->setLayout(toolBarLayout_);
+ vb->addWidget(w);
+
+ //toolbarLeft_=new QToolBar(this);
+ //toolbarLeft_->setIconSize(QSize(20,20));
- toolbarRight_=new QToolBar(this);
- toolbarRight_->setIconSize(QSize(20,20));
+ toolbarRight_=new QToolBar(w);
+ //toolbarRight_->setIconSize(QSize(18,18));
- toolBarLayout_->addWidget(toolbarLeft_);
- toolBarLayout_->addStretch(1);
+ //toolBarLayout_->addWidget(toolbarLeft_,1);
+ //toolBarLayout_->addStretch(1);
toolBarLayout_->addWidget(toolbarRight_);
+ QWidget *spacer = new QWidget(this);
+ spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ sepAc_=toolbarRight_->addWidget(spacer);
+
//Gui edit
guiAc_ =new QAction(this);
guiAc_->setIcon(QPixmap(":/desktop/gui_edit.svg"));
@@ -450,7 +476,7 @@ MvQEditor::MvQEditor(const IconClass& name,const string& kind, QWidget *parent)
vb->addWidget(viewSw_,1);
//Panel layout
- QWidget *w= new QWidget(this);
+ w= new QWidget(this);
centralLayout_=new QVBoxLayout;
centralLayout_->setSpacing(0);
centralLayout_->setContentsMargins(1,1,1,1);
@@ -522,9 +548,17 @@ void MvQEditor::showIt()
void MvQEditor::addToToolBar(QList<QAction*> lst)
{
- toolbarLeft_->addActions(lst);
+ toolbarRight_->insertActions(sepAc_,lst);
+}
+
+//Iocnobserver method
+void MvQEditor::iconChanged(IconObject* obj)
+{
+ if(obj==current_)
+ headerPanel_->updateLabel(current_);
}
+
void MvQEditor::changed()
{
if(!temporary_ && !ignoreChange_)
diff --git a/src/Desktop/MvQEditor.h b/src/Desktop/MvQEditor.h
index 7f4a8f8..50434da 100644
--- a/src/Desktop/MvQEditor.h
+++ b/src/Desktop/MvQEditor.h
@@ -53,6 +53,8 @@ public slots:
void slotCancelEdit(bool);
protected:
+ void paintEvent(QPaintEvent *);
+
MvQEditor* owner_;
QStackedLayout *stackLayout_;
QLabel* label_;
@@ -99,7 +101,10 @@ public:
void changed();
virtual void merge(IconObjectH)=0;
virtual void replace(IconObjectH)=0;
- void rename(QString);
+ void rename(QString);
+
+ //Observer method
+ void iconChanged(IconObject*);
public slots:
void slotChangeView(QAction*);
@@ -131,6 +136,7 @@ protected:
QLineEdit* headerEdit_;
MvQEditorHeader* headerPanel_;
//QToolButton* viewTb_;
+ QAction *sepAc_;
QAction *guiAc_;
QAction *textAc_;
QActionGroup* viewAg_;
diff --git a/src/Desktop/MvQExternalHelp.cc b/src/Desktop/MvQExternalHelp.cc
index 7290d5c..bbd2194 100644
--- a/src/Desktop/MvQExternalHelp.cc
+++ b/src/Desktop/MvQExternalHelp.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -29,7 +29,7 @@ void MvQExternalHelp::start()
callService((const char*) info("help_module"), request);
}
-void MvQExternalHelp::refresh(const vector<string>& values)
+void MvQExternalHelp::refresh(const vector<string>& /*values*/)
{
}
@@ -42,21 +42,21 @@ void MvQExternalHelp::set(Request& r)
void MvQExternalHelp::reply(const Request& reply, int error)
{
- cout << "ExternalHelp::reply" << endl;
+ //cout << "ExternalHelp::reply" << endl;
if ( error == 0 ) reply.print();
}
void MvQExternalHelp::progress(const Request& progress)
{
- cout << "ExternalHelp::progress" << endl;
+ //cout << "ExternalHelp::progress" << endl;
progress.print();
request_ = progress;
//owner_.changed(*this);
}
-void MvQExternalHelp::message(const string& msg)
+void MvQExternalHelp::message(const string& /*msg*/)
{
- cout << "MvQExternalHelp::message" << msg << endl;
+ //cout << "MvQExternalHelp::message" << msg << endl;
}
/*void MvQExternalHelp::message(const Request& msg)
diff --git a/src/Desktop/MvQFileBrowser.cc b/src/Desktop/MvQFileBrowser.cc
index c3c24d4..578dece 100644
--- a/src/Desktop/MvQFileBrowser.cc
+++ b/src/Desktop/MvQFileBrowser.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -14,18 +14,23 @@
#include <QApplication>
#include <QCloseEvent>
#include <QDebug>
+#include <QDockWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QMenu>
#include <QMenuBar>
#include <QMessageBox>
#include <QSplitter>
+#include <QStackedWidget>
#include <QStatusBar>
#include <QToolBar>
#include <QToolButton>
#include <QVBoxLayout>
+#include "MvQAbout.h"
+#include "MvQAdvancedSearch.h"
#include "MvQBookmarks.h"
+#include "MvQContextMenu.h"
#include "MvQFolderDrawerPanel.h"
#include "MvQFileDialog.h"
#include "MvQFolderHistory.h"
@@ -35,10 +40,14 @@
#include "MvQNewIconWidget.h"
#include "MvQIconProvider.h"
#include "MvQPathWidget.h"
+#include "MvQRecentIcons.h"
+#include "MvQSearchPanel.h"
#include "MvQSlider.h"
#include "MvQTools.h"
#include "MvApplication.h"
+#include "MvRequest.h"
+#include "FolderSettings.h"
#include "IconClass.h"
#include "Items.h"
#include "Path.h"
@@ -50,7 +59,8 @@ QList<MvQFileBrowser*> MvQFileBrowser::browsers_;
MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) :
MvQMainWindow(parent),
- ignoreIconSizeSlider_(false)
+ ignoreSidebarAction_(false),
+ ignoreIconSizeSlider_(false)
{
setAttribute(Qt::WA_DeleteOnClose);
@@ -59,13 +69,15 @@ MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) :
//Initial size
setInitialSize(1100,800);
+ setMovableToolBars(false);
+
//-----------------------------
// Layout
//-----------------------------
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->setSpacing(0);
- mainLayout->setContentsMargins(1,1,1,1);
+ mainLayout->setContentsMargins(0,0,0,0);
QWidget *w=new QWidget;
w->setLayout(mainLayout);
@@ -85,12 +97,16 @@ MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) :
// Left side
//------------------------------
+ sidebar_=new QStackedWidget(this);
+
+ mainSplitter_->addWidget(sidebar_);
+ mainSplitter_->setCollapsible(0,false);
+
//User bookmarks
bookmarksPanel_=new MvQBookmarksPanel(this);
- mainSplitter_->addWidget(bookmarksPanel_->widget());
- mainSplitter_->setCollapsible(0,false);
- connectBookmarksObject(bookmarksPanel_);
- bookmarksPanel_->widget()->hide();
+ sidebar_->addWidget(bookmarksPanel_->widget());
+
+ sidebar_->hide();
//------------------------------
// Central part
@@ -98,13 +114,13 @@ MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) :
QVBoxLayout *centralVb=new QVBoxLayout;
centralVb->setSpacing(0);
- centralVb->setContentsMargins(1,1,1,1);
+ centralVb->setContentsMargins(0,0,0,0);
w=new QWidget;
w->setLayout(centralVb);
mainSplitter_->addWidget(w);
mainSplitter_->setStretchFactor(1,1);
-
+
//Folder panel to store all the widgets
folderPanel_=new MvQFolderPanel(this);
centralVb->addWidget(folderPanel_);
@@ -112,12 +128,22 @@ MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) :
connect(folderPanel_,SIGNAL(currentWidgetChanged()),
this,SLOT(slotCurrentFolderChanged()));
- connect(folderPanel_,SIGNAL(pathChanged(MvQFolderNavigation*)),
- this,SLOT(slotUpdateNavigationActions(MvQFolderNavigation*)));
+ connect(folderPanel_,SIGNAL(pathChanged()),
+ this,SLOT(slotPathChanged()));
connect(folderPanel_,SIGNAL(itemInfoChanged(QString)),
this,SLOT(slotItemInfo(QString)));
+
+ //Search panel below the folders
+ searchPanel_=new MvQFolderSearchPanel(this);
+ centralVb->addWidget(searchPanel_);
+
+ connect(searchPanel_,SIGNAL(find(FolderSearchData*)),
+ folderPanel_,SLOT(slotFindIcons(FolderSearchData*)));
+
+ searchPanel_->hide();
+
//Init splitters
mainSplitter_->setCollapsible(1,false);
@@ -130,6 +156,7 @@ MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) :
mainSplitter_->setSizes(spSize);
}
+
//-----------------------------
// Bottom part -- drawers
//-----------------------------
@@ -145,12 +172,13 @@ MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) :
//--------------------------------------
setupFileActions();
+ setupEditActions();
setupNavigateActions();
setupViewActions();
setupBookmarksActions();
setupHistoryActions();
- setupSettingsActions();
setupToolsActions();
+ setupHelpActions();
setupMenus(menuItems_);
@@ -162,8 +190,12 @@ MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) :
folderPanel_->setHistoryMenu(findMenu(MvQMainWindow::HistoryMenu));
MvQBookmarksMenu *bookmarksMenu=new MvQBookmarksMenu(this,findMenu(MvQMainWindow::BookmarksMenu));
- connectBookmarksObject(bookmarksMenu);
+ connectBookmarksObject(bookmarksMenu);
+ connectBookmarksObject(bookmarksPanel_);
+ connect(searchPanel_,SIGNAL(iconSelected(IconObject*)),
+ folderPanel_,SLOT(slotShowIcon(IconObject*)));
+
//Setup
//updateNavigationActionState();
@@ -178,13 +210,6 @@ MvQFileBrowser::MvQFileBrowser(QStringList relPathLst,QWidget *parent) :
if(relPathLst.count() > 0)
folderPanel_->resetWidgets(relPathLst);
-
- //IMPORTANT!!!
- //We need to call it here because if the -stylesheet command line option is used
- //Qt changes icon positions in the listview and arrange them on a grid. By calling
- //this function the original icon positions are regained in the view.
- //iconView_->slotSetPositions();
- //drawerPanel_->setIconPositions();
}
MvQFileBrowser::~MvQFileBrowser()
@@ -208,7 +233,7 @@ void MvQFileBrowser::showIt()
void MvQFileBrowser::closeEvent(QCloseEvent* event)
{
- if(MvQFileBrowser::aboutToClose(this))
+ if(MvQFileBrowser::aboutToClose(this))
{
browsers_.removeOne(this);
saveFolderInfo();
@@ -235,7 +260,25 @@ void MvQFileBrowser::slotQuit()
void MvQFileBrowser::setupFileActions()
{
- //Close
+ QAction* ac=new QAction(this);
+ ac->setToolTip(tr("Open a new tab"));
+ ac->setText(tr("New &tab"));
+ ac->setShortcut(tr("Ctrl+T"));
+ QAction *newTabAction=ac;
+
+ connect(newTabAction,SIGNAL(triggered(bool)),
+ folderPanel_,SLOT(slotNewTab(bool)));
+
+ ac=new QAction(this);
+ ac->setToolTip(tr("Open a new window"));
+ ac->setText(tr("New &window"));
+ //ac->setShortcut(tr("Ctrl+N"));
+ QAction *newWinAction=ac;
+
+ connect(newWinAction,SIGNAL(triggered(bool)),
+ folderPanel_,SLOT(slotNewWindow(bool)));
+
+ //Close
QAction *closeAction=createAction(MvQMainWindow::CloseAction,this);
connect(closeAction,SIGNAL(triggered()),
this,SLOT(close()));
@@ -244,20 +287,67 @@ void MvQFileBrowser::setupFileActions()
QAction *quitAction=createAction(MvQMainWindow::QuitAction,this);
connect(quitAction,SIGNAL(triggered()),
this,SLOT(slotQuit()));
-
+
+
MvQMainWindow::MenuType menuType=MvQMainWindow::FileMenu;
+
+ QAction *sep=new QAction(this);
+ sep->setSeparator(true);
+ menuItems_[menuType].push_back(new MvQMenuItem(newTabAction,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(newWinAction,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(sep,MvQMenuItem::MenuTarget));
menuItems_[menuType].push_back(new MvQMenuItem(closeAction,MvQMenuItem::MenuTarget));
menuItems_[menuType].push_back(new MvQMenuItem(quitAction,MvQMenuItem::MenuTarget));
}
+
+void MvQFileBrowser::setupEditActions()
+{
+ QAction *actionSearch=MvQMainWindow::createAction(MvQMainWindow::FindAction,this);
+ connect(actionSearch,SIGNAL(triggered(bool)),
+ searchPanel_,SLOT(openPanel(bool)));
+
+ QAction *actionSearchNext=MvQMainWindow::createAction(MvQMainWindow::FindNextAction,this);
+ connect(actionSearchNext,SIGNAL(triggered()),
+ searchPanel_,SLOT(slotFindNext()));
+
+ QAction *actionSearchPrev=MvQMainWindow::createAction(MvQMainWindow::FindPreviousAction,this);
+ connect(actionSearchPrev,SIGNAL(triggered()),
+ searchPanel_,SLOT(slotFindPrev()));
+
+ //Add actions to menu and toolbar
+ MvQMainWindow::MenuType menuType=MvQMainWindow::EditMenu;
+
+ menuItems_[menuType].push_back(new MvQMenuItem(actionSearch,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(actionSearchNext,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(actionSearchPrev,MvQMenuItem::MenuTarget));
+
+ //Icon object actions
+ /*MvQContextItemSet set("DesktopMain");
+ QActionGroup *iconObjAg=new QActionGroup(this);
+
+ foreach(MvQContextItem *item,set.icon())
+ {
+ if(QAction *ac=static_cast<QAction*>(item))
+ {
+ iconObjAg->addAction(ac);
+ folderPanel_->addIconAction(ac);
+ menuItems_[menuType].push_back(new MvQMenuItem(ac,MvQMenuItem::MenuTarget));
+ }
+ }
+
+ connect(iconObjAg,SIGNAL(triggered(QAction*)),
+ folderPanel_,SLOT(slotIconCommand(QAction*)));*/
+}
+
void MvQFileBrowser::setupNavigateActions()
{
//Back
actionBack_ = new QAction(this);
actionBack_->setIcon(QPixmap(QString::fromUtf8(":/desktop/big_arrow_left.svg")));
actionBack_->setToolTip(tr("Back"));
- actionBack_->setText(tr("Back"));
+ actionBack_->setText(tr("&Back"));
actionBack_->setShortcut(tr("Alt+Left"));
connect(actionBack_,SIGNAL(triggered()),
@@ -267,7 +357,7 @@ void MvQFileBrowser::setupNavigateActions()
actionForward_ = new QAction(this);
actionForward_->setIcon(QPixmap(QString::fromUtf8(":/desktop/big_arrow_right.svg")));
actionForward_->setToolTip(tr("Forward"));
- actionForward_->setText(tr("Forward"));
+ actionForward_->setText(tr("&Forward"));
actionForward_->setShortcut(tr("Alt+Right"));
connect(actionForward_,SIGNAL(triggered()),
@@ -277,7 +367,7 @@ void MvQFileBrowser::setupNavigateActions()
actionParent_= new QAction(this);
actionParent_->setIcon(QPixmap(QString::fromUtf8(":/desktop/big_arrow_up.svg")));
actionParent_->setToolTip(tr("Up"));
- actionParent_->setText(tr("Up"));
+ actionParent_->setText(tr("&Up"));
actionParent_->setIconText(tr("Up"));
actionParent_->setShortcut(tr("Alt+Up"));
@@ -288,7 +378,7 @@ void MvQFileBrowser::setupNavigateActions()
actionMvHome_= new QAction(this);
actionMvHome_->setIcon(QPixmap(QString::fromUtf8(":/desktop/home.svg")));
actionMvHome_->setToolTip(tr("Metview home"));
- actionMvHome_->setText(tr("Mv home"));
+ actionMvHome_->setText(tr("Mv &home"));
actionMvHome_->setIconText(tr("home"));
actionMvHome_->setShortcut(tr("Alt+Home"));
@@ -298,7 +388,7 @@ void MvQFileBrowser::setupNavigateActions()
//Wastebin
actionWastebasket_= new QAction(this);
actionWastebasket_->setIcon(QPixmap(QString::fromUtf8(":/desktop/wastebasket.svg")));
- actionWastebasket_->setToolTip(tr("Wastebasket"));
+ actionWastebasket_->setToolTip(tr("&Wastebasket"));
actionWastebasket_->setText(tr("Wastebasket"));
actionWastebasket_->setIconText(tr("Wastebasket"));
actionWastebasket_->setShortcut(tr("Alt+W"));
@@ -368,21 +458,31 @@ void MvQFileBrowser::setupViewActions()
action->setObjectName(QString::fromUtf8("actionIconView"));
action->setCheckable(true);
action->setIcon(QPixmap(":/desktop/icon_view.svg"));
- action->setText(tr("&Icons"));
- action->setToolTip(tr("Icons view mode"));
+ action->setText(tr("&Classic icon"));
+ action->setToolTip(tr("Classic icon view"));
action->setShortcut(tr("Ctrl+1"));
- actionViewMode_[MvQ::IconViewMode]=action;
+ actionViewMode_[Desktop::IconViewMode]=action;
+ action = new QAction(this);
+ action->setObjectName(QString::fromUtf8("actionSimpleView"));
+ action->setCheckable(true);
+ action->setIcon(QPixmap(":/desktop/simple_view.svg"));
+ action->setText(tr("&Simple icon"));
+ action->setToolTip(tr("Simple icon view"));
+ action->setShortcut(tr("Ctrl+2"));
+
+ actionViewMode_[Desktop::SimpleViewMode]=action;
+
action=new QAction(this);
action->setObjectName(QString::fromUtf8("actionDetailedView"));
action->setCheckable(true);
action->setIcon(QPixmap(":/desktop/detailed_view.svg"));
- action->setText(tr("&Details"));
- action->setToolTip(tr("Details view mode"));
- action->setShortcut(tr("Ctrl+2"));
+ action->setText(tr("&Detailed"));
+ action->setToolTip(tr("Detailed view"));
+ action->setShortcut(tr("Ctrl+3"));
- actionViewMode_[MvQ::DetailedViewMode]=action;
+ actionViewMode_[Desktop::DetailedViewMode]=action;
//-------------
// Sorting
@@ -438,7 +538,7 @@ void MvQFileBrowser::setupViewActions()
action = new QAction(this);
action->setObjectName(QString::fromUtf8("actionShowlast"));
- action->setText(tr("&Show last icon created"));
+ action->setText(tr("Show &last icon created"));
//action->setIcon(QPixmap(QString::fromUtf8(":/desktop/reload.svg")));
//action->setShortcut(tr("F5"));
action->setData("showLastIcon");
@@ -448,22 +548,60 @@ void MvQFileBrowser::setupViewActions()
connect(actionLastIcon, SIGNAL(triggered(bool)),
folderPanel_, SLOT(slotShowLastCreated(bool)));
- //-------------------------
- // Sidebar
- //-------------------------
-
- //Sidebar
- actionSidebar_ = new QAction(this);
- actionSidebar_->setObjectName(QString::fromUtf8("actionSidebar"));
- actionSidebar_->setCheckable(true);
- actionSidebar_->setChecked(false); //!!!
- actionSidebar_->setText(tr("&Bookmarks"));
- actionSidebar_->setIcon(QPixmap(QString::fromUtf8(":/desktop/bookmark.svg")));
- actionSidebar_->setShortcut(tr("Ctrl+B"));
-
- connect(actionSidebar_,SIGNAL(toggled(bool)),
- bookmarksPanel_->widget(),SLOT(setVisible(bool)));
+ //Add reload action to the breadcrumbs
+ breadcrumbs_->setReloadAction(actionReload);
+ //-----------------------------------
+ // Sidebars. The order matters!!!!!
+ //-----------------------------------
+
+ sidebarAg_=new QActionGroup(this);
+ sidebarAg_->setExclusive(false);
+
+ //Bookmarks
+ action = new QAction(this);
+ action->setObjectName(QString::fromUtf8("actionSidebar"));
+ action->setCheckable(true);
+ action->setChecked(false); //!!!
+ action->setText(tr("&Bookmarks"));
+ action->setIcon(QPixmap(QString::fromUtf8(":/desktop/bookmark.svg")));
+ action->setShortcut(tr("Ctrl+B"));
+ sidebarAg_->addAction(action);
+
+ connect(bookmarksPanel_,SIGNAL(closePanel()),
+ this,SLOT(slotCloseSidebar()));
+
+ connect(sidebarAg_,SIGNAL(triggered(QAction*)),
+ this,SLOT(slotSidebar(QAction*)));
+
+ //-------------------------------
+ // Bottom part
+ //-------------------------------
+
+ //Drawers
+ actionDrawers_ = new QAction(this);
+ actionDrawers_->setObjectName(QString::fromUtf8("actionDrawers"));
+ actionDrawers_->setCheckable(true);
+ actionDrawers_->setChecked(true); //!!!
+ actionDrawers_->setText(tr("&Drawers"));
+ actionDrawers_->setIcon(QPixmap(QString::fromUtf8(":/desktop/drawer.svg")));
+ //actionDrawers_->setShortcut(tr("Ctrl+"));
+
+ connect(actionDrawers_,SIGNAL(toggled(bool)),
+ drawerPanel_,SLOT(setVisible(bool)));
+
+ //Statusbar
+ actionStatusbar_ = new QAction(this);
+ actionStatusbar_->setObjectName(QString::fromUtf8("actionStatusbar"));
+ actionStatusbar_->setCheckable(true);
+ actionStatusbar_->setChecked(true); //!!!
+ actionStatusbar_->setText(tr("S&tatusbar"));
+ actionStatusbar_->setIcon(QPixmap(QString::fromUtf8(":/desktop/statusbar.svg")));
+ //actionStatusbar_->setShortcut(tr("Ctrl+"));
+
+ connect(actionStatusbar_,SIGNAL(toggled(bool)),
+ statusBar(),SLOT(setVisible(bool)));
+
//-------------------------
// Icon resize
//-------------------------
@@ -473,11 +611,9 @@ void MvQFileBrowser::setupViewActions()
{
iconSizes_ << *it;
}
-
- //currentIconSize_=MvQPixmapProvider::defaultSize();
-
+
action=new QAction(this);
- action->setText(tr("Decrease size"));
+ action->setText(tr("De&crease size"));
action->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/size_down.svg"))));
action->setShortcut(tr("Ctrl+-"));
action->setData("sizeDown");
@@ -485,23 +621,39 @@ void MvQFileBrowser::setupViewActions()
actionIconSizeDown_=action;
action=new QAction(this);
- action->setText(tr("Increase size"));
+ action->setText(tr("&Increase size"));
action->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/size_up.svg"))));
action->setShortcut(tr("Ctrl++"));
action->setData("sizeUp");
folderPanel_->addDesktopAction(action);
actionIconSizeUp_=action;
+ //Folder settings
+
action=new QAction(this);
- action->setText(tr("Lock size"));
- action->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/padlock.svg"))));
- //action->setShortcut(tr("Ctrl++"));
- action->setToolTip(tr("Use unique icon size for this folder!"));
- action->setData("sizeLock");
- action->setCheckable(true);
- action->setChecked(false);
+ action->setText(tr("Apply icon size to all open folders"));
+ action->setToolTip(tr("Apply icon size to all open folders"));
+ action->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/use_global_iconsize.svg"))));
+ action->setData("sizeGlobal");
+ action->setCheckable(false);
folderPanel_->addDesktopAction(action);
- actionIconSizeLock_=action;
+ actionGlobalIconSize_=action;
+
+ action=new QAction(this);
+ action->setText(tr("Save view settings as default"));
+ action->setToolTip(tr("Save view settings as default"));
+ action->setData("saveView");
+ action->setCheckable(false);
+ folderPanel_->addDesktopAction(action);
+ actionSaveViewAsDefault_=action;
+
+ action=new QAction(this);
+ action->setText(tr("Revert view settings to default"));
+ action->setToolTip(tr("Revert view settings to default"));
+ action->setData("revertView");
+ action->setCheckable(false);
+ folderPanel_->addDesktopAction(action);
+ actionRevertViewToDefault_=action;
connect(actionIconSizeDown_,SIGNAL(triggered()),
this,SLOT(slotIconSizeDown()));
@@ -509,10 +661,17 @@ void MvQFileBrowser::setupViewActions()
connect(actionIconSizeUp_,SIGNAL(triggered()),
this,SLOT(slotIconSizeUp()));
- connect(actionIconSizeLock_,SIGNAL(toggled(bool)),
- this,SLOT(slotIconSizeLock(bool)));
+ //It is important to use triggered because it will not emit a signal if
+ //setChecked is called!
+ connect(actionGlobalIconSize_,SIGNAL(triggered()),
+ this,SLOT(slotGlobalIconSize()));
+
+ connect(actionSaveViewAsDefault_,SIGNAL(triggered()),
+ this,SLOT(slotSaveViewAsDefault()));
+
+ connect(actionRevertViewToDefault_,SIGNAL(triggered()),
+ this,SLOT(slotRevertViewToDefault()));
-
QAction *sep=new QAction(this);
sep->setSeparator(true);
@@ -522,6 +681,12 @@ void MvQFileBrowser::setupViewActions()
QAction *sep2=new QAction(this);
sep2->setSeparator(true);
+ QAction *sep3=new QAction(this);
+ sep3->setSeparator(true);
+
+ //Build menuitems
+
+
MvQMainWindow::MenuType menuType=MvQMainWindow::ViewMenu;
menuItems_[menuType].push_back(new MvQMenuItem(viewModeMenu));
@@ -537,17 +702,42 @@ void MvQFileBrowser::setupViewActions()
menuItems_[menuType].push_back(new MvQMenuItem(actionGridByType,MvQMenuItem::SubMenuTarget));
menuItems_[menuType].push_back(new MvQMenuItem(sep));
- menuItems_[menuType].push_back(new MvQMenuItem(actionSidebar_));
- //menuItems_[menuType].push_back(new MvQMenuItem(actionDrawers_));
+
+ menuItems_[menuType].push_back(new MvQMenuItem(actionReload,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(actionLastIcon,MvQMenuItem::MenuTarget));
menuItems_[menuType].push_back(new MvQMenuItem(sep1));
- menuItems_[menuType].push_back(new MvQMenuItem(actionReload));
- menuItems_[menuType].push_back(new MvQMenuItem(actionLastIcon,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(actionGlobalIconSize_,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(actionSaveViewAsDefault_,MvQMenuItem::MenuTarget));
menuItems_[menuType].push_back(new MvQMenuItem(sep2,MvQMenuItem::MenuTarget));
menuItems_[menuType].push_back(new MvQMenuItem(actionIconSizeDown_,MvQMenuItem::MenuTarget));
menuItems_[menuType].push_back(new MvQMenuItem(actionIconSizeUp_,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(sep3,MvQMenuItem::MenuTarget));
+
+ if(sidebarAg_->actions().count() > 1)
+ {
+ QMenu* sidebarMenu=new QMenu(this);
+ sidebarMenu->setObjectName(QString::fromUtf8("sidebarSubMenu"));
+ sidebarMenu->setTitle(tr("Side&bar"));
+
+ menuItems_[menuType].push_back(new MvQMenuItem(sidebarMenu));
+ foreach(QAction* ac,sidebarAg_->actions())
+ {
+ menuItems_[menuType].push_back(new MvQMenuItem(ac,MvQMenuItem::SubMenuTarget));
+ }
+ }
+ else
+ {
+ menuItems_[menuType].push_back(new MvQMenuItem(sidebarAg_->actions().at(0)));
+ }
+
+ menuItems_[menuType].push_back(new MvQMenuItem(actionDrawers_,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(actionStatusbar_,MvQMenuItem::MenuTarget));
+
+ //Viewmode action group
+
viewModeAg_=new QActionGroup(this);
viewModeAg_->setExclusive(true);
foreach(QAction* ac,actionViewMode_.values())
@@ -557,40 +747,78 @@ void MvQFileBrowser::setupViewActions()
connect(viewModeAg_,SIGNAL(triggered(QAction*)),
this,SLOT(slotChangeViewMode(QAction*)));
+
}
-void MvQFileBrowser::setupSettingsActions()
-{
+void MvQFileBrowser::setupToolsActions()
+{
+ QAction *actionLog = new QAction(this);
+ actionLog->setIcon(QPixmap(":/desktop/log.svg"));
+ actionLog->setToolTip(tr("Log"));
+ actionLog->setText(tr("Log"));
+
+ connect(actionLog,SIGNAL(triggered()),
+ this,SLOT(slotLog()));
+
+ QList<QAction*> lst;
+ Tools::make(lst,this);
+
+ //Preferences
+ QAction *sep=new QAction(this);
+ sep->setSeparator(true);
+
QAction *actionPref = new QAction(this);
- //actionPref->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowLeft));
+ actionPref->setIcon(QPixmap(":/desktop/configure.svg"));
actionPref->setToolTip(tr("Preferences"));
actionPref->setText(tr("Preferences"));
- //actionPref->setShortcut(tr("Alt+P"));
connect(actionPref,SIGNAL(triggered()),
this,SLOT(slotPreferences()));
-
- MvQMainWindow::MenuType menuType=MvQMainWindow::SettingsMenu;
- menuItems_[menuType].push_back(new MvQMenuItem(actionPref,MvQMenuItem::MenuTarget));
-}
-
-void MvQFileBrowser::setupToolsActions()
-{
- QList<QAction*> lst;
- Tools::make(lst,this);
- QList<QAction*> lst1;
- MvQTools::instance()->make(lst1,this);
-
+#if 0
+ //Find
+ QAction *actionFind = new QAction(this);
+ actionFind->setIcon(QPixmap(":/desktop/find.svg"));
+ actionFind->setToolTip(tr("Advanced search"));
+ actionFind->setText(tr("Advanced search"));
+
+ connect(actionFind,SIGNAL(triggered()),
+ this,SLOT(slotAdvancedSearch()));
+#endif
+
MvQMainWindow::MenuType menuType=MvQMainWindow::ToolsMenu;
+ menuItems_[menuType].push_back(new MvQMenuItem(actionLog,MvQMenuItem::MenuTarget));
+
foreach(QAction* ac,lst)
- menuItems_[menuType].push_back(new MvQMenuItem(ac,MvQMenuItem::MenuTarget));
+ {
+ menuItems_[menuType].push_back(new MvQMenuItem(ac,MvQMenuItem::MenuTarget));
+ }
- foreach(QAction* ac,lst1)
- menuItems_[menuType].push_back(new MvQMenuItem(ac,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(sep,MvQMenuItem::MenuTarget));
+ menuItems_[menuType].push_back(new MvQMenuItem(actionPref,MvQMenuItem::MenuTarget));
+#if 0
+ menuItems_[menuType].push_back(new MvQMenuItem(actionFind,MvQMenuItem::MenuTarget));
+#endif
}
+void MvQFileBrowser::setupHelpActions()
+{
+ // About
+ QAction *actionAbout = new QAction(this);
+ actionAbout->setObjectName(QString::fromUtf8("actionAbout"));
+ QIcon icon;
+ icon.addPixmap(QPixmap(QString::fromUtf8(":/window/metview_logo")), QIcon::Normal, QIcon::Off);
+ actionAbout->setIcon(icon);
+ actionAbout->setText(tr("&About ") + "Desktop");
+
+ connect(actionAbout, SIGNAL(triggered()), this, SLOT(slotShowAboutBox()));
+
+ MvQMainWindow::MenuType menuType=MvQMainWindow::HelpMenu;
+ menuItems_[menuType].push_back(new MvQMenuItem(actionAbout,MvQMenuItem::MenuTarget));
+}
+
+
void MvQFileBrowser::setupIconSizeWidget()
{
//Descrease size
@@ -616,22 +844,34 @@ void MvQFileBrowser::setupIconSizeWidget()
tb->setDefaultAction(actionIconSizeUp_);
tb->setAutoRaise(true);
statusBar()->addPermanentWidget(tb);
-
- //Lock size
- tb=new QToolButton(this);
- tb->setDefaultAction(actionIconSizeLock_);
+
+ //Global size
+ tb=new QToolButton(this);
tb->setAutoRaise(true);
+ tb->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/configure.svg"))));
+ tb->setPopupMode(QToolButton::InstantPopup);
+ tb->addAction(actionGlobalIconSize_);
+ tb->addAction(actionSaveViewAsDefault_);
+ tb->addAction(actionRevertViewToDefault_);
statusBar()->addPermanentWidget(tb);
-
}
-
void MvQFileBrowser::slotCurrentFolderChanged()
{
breadcrumbs_->setPath(folderPanel_->currentFolder());
slotUpdateNavigationActions(folderPanel_->folderNavigation());
updateViewModeStatus(folderPanel_->viewMode());
updateIconSizeActionState();
+ updateSearchPanel();
+}
+
+void MvQFileBrowser::slotPathChanged()
+{
+ breadcrumbs_->setPath(folderPanel_->currentFolder());
+ slotUpdateNavigationActions(folderPanel_->folderNavigation());
+ updateViewModeStatus(folderPanel_->viewMode());
+ updateIconSizeActionState();
+ //updateSearchPanel();
}
void MvQFileBrowser::slotUpdateNavigationActions(MvQFolderNavigation *nav)
@@ -671,32 +911,17 @@ void MvQFileBrowser::slotUpdateNavigationActions(MvQFolderNavigation *nav)
}
nav->print();
-
}
void MvQFileBrowser::slotChangeViewMode(QAction* action)
{
- MvQ::FolderViewMode mode=actionViewMode_.key(action);
+ Desktop::FolderViewMode mode=actionViewMode_.key(action);
folderPanel_->setViewMode(mode);
gridMenu_->setEnabled(folderPanel_->viewModeGrid());
-
- /*switch(mode)
- {
- case MvQ::IconViewMode:
- folderPanel_->setViewMode(mode);
- gridMenu_->setEnabled(true);
- break;
- case MvQ::DetailedViewMode:
- folderPanel_->setViewMode(mode);
- gridMenu_->setEnabled(false);
- break;
- default:
- break;
- }*/
}
-void MvQFileBrowser::updateViewModeStatus(MvQ::FolderViewMode mode)
+void MvQFileBrowser::updateViewModeStatus(Desktop::FolderViewMode mode)
{
if(actionViewMode_.find(mode) != actionViewMode_.end())
{
@@ -716,6 +941,17 @@ void MvQFileBrowser::slotPreferences()
if(obj) obj->edit();
}
+void MvQFileBrowser::slotLog()
+{
+ Folder::top()->showLog();
+}
+
+void MvQFileBrowser::slotAdvancedSearch()
+{
+ MvQAdvancedSearchDialog *d=new MvQAdvancedSearchDialog(this);
+ d->show();
+}
+
//=============================================
//
// Bookmarks
@@ -781,6 +1017,89 @@ void MvQFileBrowser::slotBookmarkTabs()
MvQBookmarks::addItem(folderPanel_->currentFolders());
}
+//---------------------------------------FolderSettings::setDefaults(folderPanel_->viewMode(),folderPanel_->iconSize());
+// Sidebar
+//---------------------------------------
+
+void MvQFileBrowser::slotSidebar(QAction *action)
+{
+ if(ignoreSidebarAction_) return;
+
+ if(action->isChecked())
+ {
+ int index=sidebarAg_->actions().indexOf(action);
+ if(index >=0 && index < sidebar_->count())
+ {
+ sidebar_->setCurrentIndex(index);
+ }
+ sidebar_->show();
+
+ updateSidebarStatus();
+ }
+ else
+ {
+ slotCloseSidebar();
+ }
+}
+
+void MvQFileBrowser::slotCloseSidebar()
+{
+ if(ignoreSidebarAction_==true)
+ return;
+
+ sidebar_->hide();
+ updateSidebarStatus();
+}
+
+void MvQFileBrowser::updateSidebarStatus()
+{
+ ignoreSidebarAction_=true;
+
+ qDebug() << sidebarAg_->checkedAction();
+
+ if(sidebar_->isVisible() ||
+ (!isVisible() && sidebarEnabled()))
+ {
+ int index=sidebar_->currentIndex();
+ for(int i=0; i < sidebarAg_->actions().count(); i++)
+ {
+ if(i == index)
+ sidebarAg_->actions().at(i)->setChecked(true);
+ else
+ sidebarAg_->actions().at(i)->setChecked(false);
+ }
+ }
+ else
+ {
+ foreach(QAction *ac, sidebarAg_->actions())
+ ac->setChecked(false);
+ }
+
+ ignoreSidebarAction_=false;
+}
+
+bool MvQFileBrowser::sidebarEnabled()
+{
+ qDebug() << sidebarAg_->checkedAction();
+
+ bool hasChecked=false;
+ foreach(QAction *ac, sidebarAg_->actions())
+ {
+ if(ac->isChecked())
+ {
+ hasChecked=true;
+ break;
+ }
+ }
+
+ return hasChecked;
+}
+
+void MvQFileBrowser::updateSearchPanel(bool)
+{
+ searchPanel_->targetChanged();
+}
+
//=============================================
//
// Icon size
@@ -808,50 +1127,29 @@ void MvQFileBrowser::updateIconSizeActionState()
ignoreIconSizeSlider_=true;
iconSizeSlider_->setValue(index);
- ignoreIconSizeSlider_=false;
-
- actionIconSizeLock_->setChecked(folderPanel_->iconSizeLock());
-
+ ignoreIconSizeSlider_=false;
}
void MvQFileBrowser::slotIconSizeDown()
{
int index=iconSizes_.indexOf(folderPanel_->iconSize());
- if(index > 0) index--;
-
+ if(index > 0) index--;
int size=iconSizes_[index];
- if(useGlobalIconSize())
- {
- broadcastIconSize(size);
- if(folderPanel_->iconSizeLock())
- folderPanel_->setIconSize(size);
- }
- else
- {
- folderPanel_->setIconSize(size);
- updateIconSizeActionState();
- }
+ folderPanel_->setIconSize(size);
+ updateIconSizeActionState();
}
void MvQFileBrowser::slotIconSizeUp()
{
int index=iconSizes_.indexOf(folderPanel_->iconSize());
- if(index < iconSizes_.count()-1) index++;
-
+ if(index < iconSizes_.count()-1) index++;
int size=iconSizes_[index];
- if(useGlobalIconSize())
- {
- broadcastIconSize(size);
- if(folderPanel_->iconSizeLock())
- folderPanel_->setIconSize(size);
- }
- else
- {
- folderPanel_->setIconSize(size);
- updateIconSizeActionState();
- }
+
+ folderPanel_->setIconSize(size);
+ updateIconSizeActionState();
}
+
//Callback from the slider
void MvQFileBrowser::slotSetIconSizeByIndex(int index)
{
@@ -861,29 +1159,47 @@ void MvQFileBrowser::slotSetIconSizeByIndex(int index)
if(index >=0 && index <= iconSizes_.count()-1)
{
int size=iconSizes_[index];
- if(useGlobalIconSize())
- {
- broadcastIconSize(size);
- if(folderPanel_->iconSizeLock())
- folderPanel_->setIconSize(size);
- }
- else
- {
- folderPanel_->setIconSize(size);
- updateIconSizeActionState();
- }
+
+ folderPanel_->setIconSize(size);
+ updateIconSizeActionState();
}
}
-
+
void MvQFileBrowser::forceIconSize(int size)
{
folderPanel_->forceIconSize(size);
updateIconSizeActionState();
}
-void MvQFileBrowser::slotIconSizeLock(bool b)
-{
- folderPanel_->setIconSizeLock(b);
+void MvQFileBrowser::slotGlobalIconSize()
+{
+ /*if(QMessageBox::warning(this,tr("Use global icon size"),"You are about to enter a mode when all the folders has the <b>same icon size</b> and all changes to the iconsize is automatically broadcast to all the open folders. Do you want to proceed?",QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Cancel)
+ {
+ return;
+ }*/
+
+ int index=iconSizes_.indexOf(folderPanel_->iconSize());
+ if(index>=0 && index < iconSizes_.count()-1)
+ {
+ broadcastIconSize(iconSizes_[index]);
+ }
+}
+
+void MvQFileBrowser::slotSaveViewAsDefault()
+{
+ /*if(QMessageBox::warning(this,tr("Save view settings as default"),"You are about to save the current view mode and iconsize as defaults. These will be applied for all unvisited folders in the future. Do you want to proceed?",QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Cancel)
+ return;*/
+
+ FolderSettings::setDefaults(folderPanel_->viewMode(),folderPanel_->iconSize());
+}
+
+void MvQFileBrowser::slotRevertViewToDefault()
+{
+ folderPanel_->setViewMode(FolderSettings::defaultViewMode());
+ folderPanel_->setIconSize(FolderSettings::defaultIconSize());
+
+ updateViewModeStatus(folderPanel_->viewMode());
+ updateIconSizeActionState();
}
//========================================
@@ -892,10 +1208,47 @@ void MvQFileBrowser::slotIconSizeLock(bool b)
//
//========================================
+void MvQFileBrowser::slotShowAboutBox()
+{
+ MvQAbout about("Desktop","",MvQAbout::MetviewVersion);
+ about.exec();
+}
+
+
void MvQFileBrowser::saveFolderInfo()
{
- folderPanel_->saveFolderInfo();
-}
+ folderPanel_->saveFolderInfo();
+}
+
+void MvQFileBrowser::slotLoadMetviewUIFolders()
+{
+ if(QMessageBox::warning(this,tr("Load MetviewUI folders"),"You are about to open all the folders from your latest <b>MetviewUI</b> (this is the former Metview desktop) session. If you proceed all these folders will be open in a new window as a set tabs. Do you want to continue?",QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Cancel)
+ return;
+
+ MvQFileBrowser::loadMetviewUIFolders();
+}
+
+//========================================
+//
+//Init
+//
+//========================================
+
+void MvQFileBrowser::init(MvQFileBrowser *browser)
+{
+ if(!browser)
+ return;
+
+ //actionIconSidebar_->setChecked(browser->actionIconSidebar_->isChecked());
+ if(QAction *ac=browser->sidebarAg_->checkedAction())
+ { int index=browser->sidebarAg_->actions().indexOf(ac);
+ sidebarAg_->actions().at(index)->setChecked(true);
+ }
+
+ actionDrawers_->setChecked(browser->actionDrawers_->isChecked());
+ actionStatusbar_->setChecked(browser->actionStatusbar_->isChecked());
+}
+
//====================================================
//
@@ -911,8 +1264,19 @@ void MvQFileBrowser::writeSettings(QSettings &settings)
settings.setValue("mainSplitter",mainSplitter_->saveState());
settings.setValue("minimized",(windowState() & Qt::WindowMinimized)?1:0);
- settings.setValue("sidebarStatus",actionSidebar_->isChecked());
- //settings.setValue("drawersStatus",actionDrawers_->isChecked());
+ int sidebarIndex=-1;
+ for(int i=0; i < sidebarAg_->actions().count(); i++)
+ {
+ if(sidebarAg_->actions().at(i)->isChecked())
+ {
+ sidebarIndex=i;
+ break;
+ }
+ }
+
+ settings.setValue("sidebar",sidebarIndex);
+ settings.setValue("drawersStatus",actionDrawers_->isChecked());
+ settings.setValue("statusbar",actionStatusbar_->isChecked());
folderPanel_->writeSettings(settings);
}
@@ -941,28 +1305,40 @@ void MvQFileBrowser::readSettings(QSettings &settings)
slotSetIconSizeByIndex(iconSizes_.indexOf(var.toInt()));
}
- if(settings.value("sidebarStatus").isNull())
+ //By default sidebar actions are uncheked
+ if(!settings.value("sidebar").isNull())
+ {
+ int index=settings.value("sidebar").toInt();
+ if(index>=0 && index < sidebarAg_->actions().count())
+ {
+ QAction *ac=sidebarAg_->actions().at(index);
+ ac->setChecked(true);
+ slotSidebar(ac);
+
+ }
+ }
+
+ if(settings.value("drawersStatus").isNull())
{
- actionSidebar_->setChecked(false);
+ actionDrawers_->setChecked(true);
}
else
{
- actionSidebar_->setChecked(settings.value("sidebarStatus").toBool());
+ actionDrawers_->setChecked(settings.value("drawersStatus").toBool());
}
- /*if(settings.value("drawersStatus").isNull())
+ if(settings.value("statusbar").isNull())
{
- actionDrawers_->setChecked(false);
+ actionStatusbar_->setChecked(true);
}
else
{
- actionDrawers_->setChecked(settings.value("drawersStatus").toBool());
- }*/
-
+ actionStatusbar_->setChecked(settings.value("statusbar").toBool());
+ }
+
folderPanel_->readSettings(settings);
}
-
//====================================================
//
// Static methods
@@ -999,15 +1375,17 @@ MvQFileBrowser* MvQFileBrowser::makeBrowser(QStringList pathLst)
}
-void MvQFileBrowser::openBrowser(QString fullName)
+void MvQFileBrowser::openBrowser(QString fullName,QWidget *fromW)
{
- MvQFileBrowser* browser=MvQFileBrowser::makeBrowser(fullName);
+ MvQFileBrowser* browser=MvQFileBrowser::makeBrowser(fullName);
+ browser->init(findBrowser(fromW));
browser->showIt();
}
-void MvQFileBrowser::openBrowser(QStringList pathLst)
+void MvQFileBrowser::openBrowser(QStringList pathLst,QWidget *fromW)
{
- MvQFileBrowser* browser=MvQFileBrowser::makeBrowser( pathLst);
+ MvQFileBrowser* browser=MvQFileBrowser::makeBrowser(pathLst);
+ browser->init(findBrowser(fromW));
browser->showIt();
}
@@ -1030,7 +1408,19 @@ bool MvQFileBrowser::aboutToClose(MvQFileBrowser* browser)
//Otherwise
else
{
- if(browsers_.count() == 1)
+ if(browsers_.count() > 1)
+ {
+ int tabCnt=browser->folderPanel_->count();
+ if(tabCnt > 1)
+ {
+ if(QMessageBox::question(0,tr("Confirm close"),tr("You are about to close <b>") + QString::number(tabCnt) + tr("</b> tabs. Are you sure you want to continue?"),
+ QMessageBox::Yes | QMessageBox::Cancel,QMessageBox::Cancel) == QMessageBox::Cancel)
+ {
+ return false;
+ }
+ }
+ }
+ else if(browsers_.count() == 1)
{
return MvQFileBrowser::aboutToQuit(browser);
}
@@ -1040,7 +1430,7 @@ bool MvQFileBrowser::aboutToClose(MvQFileBrowser* browser)
bool MvQFileBrowser::aboutToQuit(MvQFileBrowser* topBrowser)
{
- if(QMessageBox::question(0,tr("Quit Metview"),tr("Do you want to quit Metview?"),
+ if(QMessageBox::question(0,tr("Confirm quit"),tr("Do you want to quit Metview?"),
QMessageBox::Yes | QMessageBox::Cancel,QMessageBox::Cancel) == QMessageBox::Yes)
{
quitStarted_=true;
@@ -1048,6 +1438,9 @@ bool MvQFileBrowser::aboutToQuit(MvQFileBrowser* topBrowser)
//Save bookmarks
MvQBookmarks::save();
+ //Save most recent icons list
+ MvQRecentIcons::save();
+
//Save browser settings
MvQFileBrowser::save(topBrowser);
@@ -1060,54 +1453,84 @@ bool MvQFileBrowser::aboutToQuit(MvQFileBrowser* topBrowser)
void MvQFileBrowser::init()
{
- //Set a custom location inside the metview home directory for qsettings
- string sp(getenv("METVIEW_USER_DIRECTORY"));
- sp+="/System/Preferences/.__config";
-
- qDebug() << "QSettings path is set to:" << QString::fromStdString(sp);
-
-
- QSettings::setPath(QSettings::NativeFormat,QSettings::UserScope,
- QString::fromStdString(sp));
-
- //Now read the settings
+ //Read the settings
QSettings settings("ECMWF","MV4-Desktop");
settings.beginGroup("main");
- int cnt=settings.value("browserCount").toInt();
- int topBrowserId=settings.value("topBrowserId").toInt();
- settings.endGroup();
+
+ if(settings.contains("browserCount"))
+ {
+ int cnt=settings.value("browserCount").toInt();
+ int topBrowserId=settings.value("topBrowserId").toInt();
+ MvQFolderHistory::init(settings.value("history").toStringList());
+ settings.endGroup();
- MvQDesktopSettings::readSettings(settings);
+ MvQDesktopSettings::readSettings(settings);
- if(cnt <0 || cnt > 100)
- return;
+ if(cnt <0 || cnt > 100)
+ return;
- for(int i=0; i < cnt; i++)
- {
- if(i != topBrowserId)
+ for(int i=0; i < cnt; i++)
+ {
+ if(i != topBrowserId)
+ {
+ settings.beginGroup("browser_" + QString::number(i));
+ MvQFileBrowser::makeBrowser(settings);
+ settings.endGroup();
+ }
+ }
+
+ if(topBrowserId >=0 && topBrowserId < cnt)
{
- settings.beginGroup("browser_" + QString::number(i));
- MvQFileBrowser::makeBrowser(settings);
- settings.endGroup();
+ settings.beginGroup("browser_" + QString::number(topBrowserId));
+ MvQFileBrowser::makeBrowser(settings);
+ settings.endGroup();
}
}
- if(topBrowserId != -1)
+ //Try to read the resource file from MetviewUI
+ else
{
- settings.beginGroup("browser_" + QString::number(topBrowserId));
- MvQFileBrowser::makeBrowser(settings);
- settings.endGroup();
+ loadMetviewUIFolders();
}
-
+
+ //If nothing has been found we open the home folder
if(browsers_.count() == 0)
{
MvQFileBrowser::makeBrowser(QString::fromStdString(Folder::top()->fullName()));
- }
-
-}
-
+ }
+}
+void MvQFileBrowser::loadMetviewUIFolders()
+{
+ //Try to read the resource file from MetviewUI
+ Path p=Folder::top()->path().add(".MainWindowResources");
+ MvRequest req(p.loadRequest());
+
+ if(req)
+ {
+ QStringList pathLst;
+ int cnt = req.iterInit("OPEN");
+ for( int i=0; i<cnt; ++i )
+ {
+ const char *c=0;
+ req.iterGetNextValue(c);
+ if(c)
+ {
+ QString str(c);
+ if(str.isEmpty()) str="/";
+ pathLst << str;
+ }
+ }
+
+ if(!pathLst.isEmpty())
+ {
+ MvQFileBrowser::openBrowser(pathLst);
+ }
+ }
+}
+
+
void MvQFileBrowser::save(MvQFileBrowser *topBrowser)
{
//Save folder info for all the open browsers
@@ -1122,8 +1545,10 @@ void MvQFileBrowser::save(MvQFileBrowser *topBrowser)
settings.clear();
settings.beginGroup("main");
+
settings.setValue("browserCount",browsers_.count());
settings.setValue("topBrowserId",browsers_.indexOf(topBrowser));
+ settings.setValue("history",MvQFolderHistory::items());
settings.endGroup();
MvQDesktopSettings::writeSettings(settings);
@@ -1144,16 +1569,16 @@ void MvQFileBrowser::broadcastIconSize(int size)
}
}
-bool MvQFileBrowser::useGlobalIconSize()
+MvQFileBrowser* MvQFileBrowser::findBrowser(QWidget *childW)
{
- MvRequest r=MvApplication::getPreferences();
-
- r.print();
+ if(!childW)
+ return 0;
- if(const char* c=r("FOLDER_ICON_SIZE_POLICY"))
- return (strcmp(c,"UNIQUE") != 0);
+ foreach(MvQFileBrowser *b,browsers_)
+ {
+ if(static_cast<QWidget*>(b) == childW->window())
+ return b;
+ }
- return true;
-}
-
-
+ return 0;
+}
diff --git a/src/Desktop/MvQFileBrowser.h b/src/Desktop/MvQFileBrowser.h
index ed42d50..6111a7a 100644
--- a/src/Desktop/MvQFileBrowser.h
+++ b/src/Desktop/MvQFileBrowser.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -20,7 +20,7 @@
#include "IconObject.h"
-#include "MvQ.h"
+#include "Desktop.h"
#include "MvQMainWindow.h"
class Folder;
@@ -34,6 +34,7 @@ class QCloseEvent;
class QLabel;
class QListView;
class QMenu;
+class QStackedWidget;
class QSplitter;
class QVBoxLayout;
@@ -45,8 +46,10 @@ class MvQFileBrowserWidget;
class MvQFolderHistory;
class MvQFolderNavigation;
class MvQFolderPanel;
+class MvQNewIconPanel;
class MvQNewIconWidget;
class MvQPathWidget;
+class MvQFolderSearchPanel;
class MvQSlider;
using namespace std;
@@ -61,8 +64,8 @@ public:
static void init();
static void showBrowsers();
- static void openBrowser(QString path);
- static void openBrowser(QStringList);
+ static void openBrowser(QString path,QWidget *fromW=0);
+ static void openBrowser(QStringList,QWidget *fromW=0);
public slots:
void slotQuit();
@@ -77,28 +80,41 @@ public slots:
void slotChangeViewMode(QAction*);
void slotIconSizeDown();
void slotIconSizeUp();
- void slotIconSizeLock(bool);
+ void slotGlobalIconSize();
+ void slotSaveViewAsDefault();
+ void slotRevertViewToDefault();
void slotSetIconSizeByIndex(int);
void slotPreferences();
+ void slotLog();
+ void slotAdvancedSearch();
void slotCurrentFolderChanged();
+ void slotPathChanged();
void slotUpdateNavigationActions(MvQFolderNavigation *);
+ void slotSidebar(QAction*);
+ void slotCloseSidebar();
+ void slotLoadMetviewUIFolders();
+ void slotShowAboutBox();
protected:
void showIt();
void closeEvent(QCloseEvent*);
void setupFileActions();
+ void setupEditActions();
void setupNavigateActions();
void setupBookmarksActions();
void setupHistoryActions();
void setupViewActions();
- void setupSettingsActions();
void setupToolsActions();
+ void setupHelpActions();
+ void updateSidebarStatus();
+ bool sidebarEnabled();
void connectBookmarksObject(MvQBookmarks*);
- void updateViewModeStatus(MvQ::FolderViewMode);
+ void updateViewModeStatus(Desktop::FolderViewMode);
void setupIconSizeWidget();
void updateIconSizeActionState();
+ void updateSearchPanel(bool forced=false);
void forceIconSize(int);
void saveFolderInfo();
@@ -111,43 +127,54 @@ protected:
static MvQFileBrowser *makeBrowser(QStringList);
static bool aboutToClose(MvQFileBrowser*);
static bool aboutToQuit(MvQFileBrowser*);
+ static void loadMetviewUIFolders();
static void save(MvQFileBrowser *);
static void broadcastIconSize(int);
- static bool useGlobalIconSize();
-
+ static MvQFileBrowser* findBrowser(QWidget *childW);
+
+ void init(MvQFileBrowser *);
+
+
static bool quitStarted_;
static QList<MvQFileBrowser*> browsers_;
MvQMainWindow::MenuItemMap menuItems_;
QActionGroup* viewModeAg_;
- QMap<MvQ::FolderViewMode,QAction*> actionViewMode_;
+ QMap<Desktop::FolderViewMode,QAction*> actionViewMode_;
QAction* actionBack_;
QAction* actionForward_;
QAction* actionParent_;
QAction* actionMvHome_;
QAction* actionWastebasket_;
- QAction* actionSidebar_;
+ QAction* actionDrawers_;
+ QAction* actionStatusbar_;
QMenu* gridMenu_;
QSplitter* folderSplitter_;
QSplitter* mainSplitter_;
QSplitter* drawerSplitter_;
+ QActionGroup* sidebarAg_;
+ QStackedWidget* sidebar_;
MvQBookmarksPanel* bookmarksPanel_;
-
MvQFolderPanel* folderPanel_;
+ MvQFolderSearchPanel* searchPanel_;
+ bool ignoreSidebarAction_;
MvQDrawerPanel* drawerPanel_;
QAction* actionIconSizeDown_;
QAction* actionIconSizeUp_;
- QAction* actionIconSizeLock_;
+ QAction* actionGlobalIconSize_;
+ QAction* actionSaveViewAsDefault_;
+ QAction* actionRevertViewToDefault_;
QList<int> iconSizes_;
MvQSlider* iconSizeSlider_;
bool ignoreIconSizeSlider_;
QLabel *itemInfoLabel_;
+
MvQPathWidget* breadcrumbs_;
};
diff --git a/src/Desktop/MvQFileSystemModel.cc b/src/Desktop/MvQFileSystemModel.cc
deleted file mode 100644
index 32e0e6d..0000000
--- a/src/Desktop/MvQFileSystemModel.cc
+++ /dev/null
@@ -1,241 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-#include "MvQFileSystemModel.h"
-
-#include <QDebug>
-
-#include "IconClass.h"
-#include "Path.h"
-
-/*MvQFileIconProvider::MvQFileIconProvider()
-{
- char *mvhome=getenv("METVIEW_DIR_SHARE");
-
- if (mvhome == 0)
- {
- return;
- }
-
- path_= QString(mvhome);
- path_.append("/icons/");
-}
-
-QIcon MvQFileIconProvider::icon(const QFileInfo& info) const
-{
- const IconClass &ic=IconClass::guess(info.absoluteFilePath().toStdString());
-
- QPixmap p(ic.pixmap().str().c_str());
- return QIcon(p);
-
- //QString suffix = info.suffix();
- //if(suffix == "grb")
- //{
- // QPixmap p("/var/tmp/cgr/PERFORCE/metview_4/share/metview/icons/GRIB.png");
- // p.scaled(QSize(16,16));
- // return QIcon(p);
- //}
- //if(info.isFile() == true && suffix == "mc")
- //{
- // QString str(path_);
- // str.append("MACRO.xpm");
- // QPixmap p(str);
- // p.scaled(QSize(16,16));
- // return QIcon(p);
- //}
- //else
- // return QFileIconProvider::icon(info);
-}*/
-
-
-
-MvQFileSystemModel::MvQFileSystemModel()
-{
-}
-
-MvQFileSystemModel::~MvQFileSystemModel()
-{
-}
-
-int MvQFileSystemModel::columnCount( const QModelIndex& parent) const
-{
- return QFileSystemModel::columnCount(parent);
-}
-
-QVariant MvQFileSystemModel::data( const QModelIndex& index, int role ) const
-{
- if(role == Qt::DecorationRole && index.column() == 0)
- {
- QString fname=fileName(index);
- if(!class_.contains(fname))
- {
- class_[fname]=new MvQFileIconData(fname,IconClass::guess(filePath(index).toStdString()));
- }
- return QPixmap(class_[fname]->iconClass().pixmap().str().c_str());
- }
- else
- {
- return QFileSystemModel::data(index,role);
- }
-
- /*if(role != Qt::ToolTipRole)
- {
- return QFileSystemModel::data(index,role);
- }
- else
- {
- QFileInfo info=fileInfo(index);
- //if(info.suffix() == "grb")
- // return QString("GRIB file");
- if(info.isFile() == true && info.suffix() == "mc")
- {
- return getMacroHeader(info);
- //return QString("Macro");
- }
- else
- return QVariant();
- }*/
-}
-
-
-QString MvQFileSystemModel::getMacroHeader(QFileInfo& info)
-{
- //qDebug() << info.absoluteFilePath();
-
-/* QFile file(info.absoluteFilePath());
- if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
- return QString();
-
- bool newItem=false;
-
- QString res;
-
- QStringList keys;
- keys << "Function" << "Syntax" << "Category" << "Parameters";
-
- //MvQMacroHeader header(keys);
-
- QString key("Description");
-
- QTextStream in(&file);
- while (!in.atEnd())
- {
- QString line = in.readLine().simplified();
- if(line.startsWith("#") == true)
- {
- QString expr("(^#\\s*");
- expr.append(key);
- expr.append("\\s*: )(\\S.*)");
-
- QRegExp rx(expr);
-MvQFileSystemModel
- if(rx.indexIn(line) > -1)
- {
- newItem = true;
- res.append(rx.cap(2));
- }
- else if(newItem)
- {
- if(line.contains(QRegExp("(^# \\S.*\\s*: )")))
- {
- newItem = false;
- return res;
- }
- else
- {
- res.append("\n");
- QRegExp rx("(^#\\s*)(\\S.*)");
- if(rx.indexIn(line) > -1)
- {
- res.append(rx.cap(2));
- }
- else
- {
- res.append("\n");
- }
- }
- }
- }
- }
-
- file.close();
-
- return res;*/
-
- return QString();
-}
-
-/*MvQDirFilterModel::MvQDirFilterModel(QObject *parent) : QSortFilterProxyModel(parent)
-{
-}
-
-void MvQDirFilterModel::setSourceModel(QAbstractItemModel* sourceModel)
-{
- fsModel_=static_cast<MvQFileSystemModel*>(sourceModel);
- QSortFilterProxyModel::setSourceModel(sourceModel);
-}
-
-bool MvQDirFilterModel::filterAcceptsRow(int sourceRow,
- const QModelIndex &sourceParent) const
-{
- QModelIndex index=fsModel_->index(sourceRow,0,sourceParent);
- if(fsModel_->isDir(index))
- {
- if(!fsModel_->fileName(index).endsWith("#"))
- return true;
- }
-
- return false;
-}
-*/
-
-MvQCurrentDirFilterModel::MvQCurrentDirFilterModel(QObject *parent) : QSortFilterProxyModel(parent)
-{
-}
-
-void MvQCurrentDirFilterModel::setSourceModel(QAbstractItemModel* sourceModel)
-{
- fsModel_=static_cast<MvQFileSystemModel*>(sourceModel);
- QSortFilterProxyModel::setSourceModel(sourceModel);
-}
-
-bool MvQCurrentDirFilterModel::filterAcceptsRow(int sourceRow,
- const QModelIndex &sourceParent) const
-{
- QModelIndex index=fsModel_->index(sourceRow,0,sourceParent);
-
- //qDebug() << "filter:" << fsModel_->fileName(index);
-
- QString fileName=fsModel_->fileName(index);
-
- if(fsModel_->isDir(index) == true)
- {
- if(fileName.endsWith("#") == false)
- return true;
- else
- return false;
- }
-
- if(fileName.startsWith(".") == false &&
- fileName.startsWith("..") == false)
- {
- return true;
- }
-
- return false;
-}
-
-bool MvQCurrentDirFilterModel::filterAcceptsColumn(int source_column, const QModelIndex & source_parent ) const
-{
- //qDebug() << "column index" << source_parent.column() << fsModel_->columnCount(QModelIndex());
-
- return true;
-}
-
-
diff --git a/src/Desktop/MvQFileSystemModel.h b/src/Desktop/MvQFileSystemModel.h
deleted file mode 100644
index 2b088f7..0000000
--- a/src/Desktop/MvQFileSystemModel.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-#ifndef MvQFileSystemModel_H
-#define MvQFileSystemModel_H
-
-#include <QFileIconProvider>
-#include <QFileSystemModel>
-#include <QSortFilterProxyModel>
-
-class IconClass;
-
-/*class MvQFileIconProvider : public QFileIconProvider
-{
-public:
- MvQFileIconProvider();
- QIcon icon(const QFileInfo&) const;
-private:
- QString path_;
-};*/
-
-class MvQFileIconData
-{
-public:
- MvQFileIconData(QString name,const IconClass& iconClass) :
- name_(name), iconClass_(iconClass) {};
- const IconClass& iconClass() {return iconClass_;}
- protected:
- QString name_;
- const IconClass& iconClass_;
-};
-
-
-class MvQFileSystemModel : public QFileSystemModel
-{
-public:
- MvQFileSystemModel();
- ~MvQFileSystemModel();
- int columnCount( const QModelIndex&) const;
- QVariant data( const QModelIndex&, int) const;
-
- static QString getMacroHeader(QFileInfo&);
-
-protected:
- mutable QMap<QString,MvQFileIconData*> class_;
-};
-
-/*class MvQDirFilterModel : public QSortFilterProxyModel
-{
-public:
- MvQDirFilterModel(QObject *parent=0);
- void setSourceModel(QAbstractItemModel*);
- bool filterAcceptsRow(int,const QModelIndex &) const;
-
-protected:
- MvQFileSystemModel *fsModel_;
-};*/
-
-class MvQCurrentDirFilterModel : public QSortFilterProxyModel
-{
-public:
- MvQCurrentDirFilterModel(QObject *parent=0);
- void setSourceModel(QAbstractItemModel*);
- bool filterAcceptsRow(int,const QModelIndex &) const;
- bool filterAcceptsColumn(int,const QModelIndex &) const;
-
-protected:
- MvQFileSystemModel *fsModel_;
-};
-
-#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFileWatcher.cc b/src/Desktop/MvQFileWatcher.cc
index c82cdad..e7e7c34 100644
--- a/src/Desktop/MvQFileWatcher.cc
+++ b/src/Desktop/MvQFileWatcher.cc
@@ -45,7 +45,7 @@ void MvQFileWatcher::start(FILE* f,const string& path)
{
file_ = f;
- int n=fileno(f);
+ //int n=fileno(f);
if(!watcher_)
{
@@ -63,6 +63,8 @@ void MvQFileWatcher::slotInput(const QString&)
{
char buf[1024];
+ fflush(file_);
+
if(fgets(buf,sizeof(buf),file_))
{
if(buf[0]) buf[strlen(buf)-1] = 0;
diff --git a/src/Desktop/MvQFolderDrawerPanel.cc b/src/Desktop/MvQFolderDrawerPanel.cc
index 202180b..4a32dcf 100644
--- a/src/Desktop/MvQFolderDrawerPanel.cc
+++ b/src/Desktop/MvQFolderDrawerPanel.cc
@@ -50,7 +50,7 @@ MvQFolderDrawerPanel::MvQFolderDrawerPanel(QWidget *parent) : MvQDrawerPanel(par
//Add cornerbutton
QToolButton *tb=new QToolButton(this);
- tb->setIcon(QPixmap(QString::fromUtf8(":/desktop/add.svg")));
+ tb->setIcon(QPixmap(QString::fromUtf8(":/desktop/add_drawer.svg")));
tb->setAutoRaise(true);
tb->setToolTip(tr("Add new drawer"));
addCornerButton(tb);
diff --git a/src/Desktop/MvQFolderHistory.cc b/src/Desktop/MvQFolderHistory.cc
index f7da5f3..0871fa8 100644
--- a/src/Desktop/MvQFolderHistory.cc
+++ b/src/Desktop/MvQFolderHistory.cc
@@ -17,7 +17,10 @@
#include "Folder.h"
-MvQFolderHistory::MvQFolderHistory(QMenu *menu) : maxNum_(20), menu_(menu)
+QList<MvQFolderHistory*> MvQFolderHistory::fhLst_;
+QStringList MvQFolderHistory::items_;
+
+MvQFolderHistory::MvQFolderHistory(QMenu *menu) : maxNum_(30), menu_(menu), prefix_("mv:")
{
if(!menu_)
return;
@@ -28,71 +31,90 @@ MvQFolderHistory::MvQFolderHistory(QMenu *menu) : maxNum_(20), menu_(menu)
menu_->setContextMenuPolicy(Qt::CustomContextMenu);
connect(menu_,SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(slotContextMenu(const QPoint &)));
+
+ init();
+
+ fhLst_ << this;
+
}
-QAction* MvQFolderHistory::add(QString fullName)
+MvQFolderHistory::~MvQFolderHistory()
{
- foreach(QAction* action,actions_)
+ fhLst_.removeOne(this);
+}
+
+void MvQFolderHistory::init()
+{
+ updateMenu();
+}
+
+void MvQFolderHistory::init(QStringList lst)
+{
+ items_=lst;
+ foreach(MvQFolderHistory *f,fhLst_)
{
- if(action->text() == fullName)
- {
- return 0;
- }
- }
-
- if(actions_.count() < maxNum_)
- {
- QAction *action=createAction(fullName);
-
- if(menu_->actions().count() == 0)
+ f->init();
+ }
+}
+
+void MvQFolderHistory::add(QString fullName)
+{
+ if(items_.contains(fullName))
+ return;
+
+ if(items_.count() < maxNum_)
+ {
+ if(items_.count() == 0)
{
- menu_->addAction(action);
+ items_ << fullName;
}
else
{
- menu_->insertAction(actions_.front(),action);
+ items_.prepend(fullName);
}
-
- actions_.prepend(action);
- return action;
}
else
{
- QAction *action;
- while(actions_.count() >= maxNum_)
+ while(items_.count() >= maxNum_)
{
- action=actions_.back();
- menu_->removeAction(action);
- actions_.takeLast();
- delete action;
- }
-
- action=createAction(fullName);
- menu_->insertAction(actions_.front(),action);
- actions_.prepend(action);
- return action;
+ items_.removeLast();
+ }
+
+ items_.prepend(fullName);
}
- return 0;
-}
+ foreach(MvQFolderHistory *f,fhLst_)
+ {
+ f->updateMenu();
+ }
+}
+
+void MvQFolderHistory::updateMenu()
+{
+ menu_->clear();
+ foreach(QString s,items_)
+ {
+ menu_->addAction(createAction(s));
+ }
+}
+
QString MvQFolderHistory::path(QAction* action)
{
if(!action)
return QString();
-
- int index=actions_.indexOf(action);
- if(index != -1)
- return actions_.at(index)->text();
-
- return QString();
+
+ return action->data().toString();
}
QAction* MvQFolderHistory::createAction(QString fullName)
{
//Home
QAction *action = new QAction(menu_);
+ //action->setText("<font color=\"#b4bbb2\">" + prefix_ +"</font>" + fullName);
+ //action->setText(prefix_ + fullName);
action->setText(fullName);
+ action->setData(fullName);
Folder* folder=Folder::folder(fullName.toStdString(),false);
if(folder)
diff --git a/src/Desktop/MvQFolderHistory.h b/src/Desktop/MvQFolderHistory.h
index 8b0a5b8..8675edf 100644
--- a/src/Desktop/MvQFolderHistory.h
+++ b/src/Desktop/MvQFolderHistory.h
@@ -14,6 +14,7 @@
#include <QObject>
#include <QPoint>
#include <QString>
+#include <QStringList>
class QAction;
class QMenu;
@@ -25,9 +26,11 @@ Q_OBJECT
public:
MvQFolderHistory(QMenu*);
- ~MvQFolderHistory() {}
+ ~MvQFolderHistory();
- QAction* add(QString);
+ void add(QString);
+ static QStringList items() {return items_;}
+ static void init(QStringList);
protected slots:
void slotSelected(QAction*);
@@ -38,12 +41,19 @@ signals:
void commandRequested(QString,QString);
protected:
- QAction* createAction(QString);
+ void init();
+ void updateMenu();
+ QAction* createAction(QString);
QString path(QAction*);
QList<QAction*> actions_;
const int maxNum_;
QMenu* menu_;
+ QString prefix_;
+
+ static QList<MvQFolderHistory*> fhLst_;
+ static QStringList items_;
+
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderItemProperty.cc b/src/Desktop/MvQFolderItemProperty.cc
index 6f4a7af..bdbbfb9 100644
--- a/src/Desktop/MvQFolderItemProperty.cc
+++ b/src/Desktop/MvQFolderItemProperty.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -11,32 +11,51 @@
#include <QApplication>
-MvQFolderItemProperty::MvQFolderItemProperty() :
- fm_(QApplication::font()),
- refFm_(fm_)
-
-{
- iconSize_=32;
- refIconSize_=32;
+//========================================
+//
+// MvQAbstractIconItemProperty
+//
+//========================================
+
+MvQAbstractIconItemProperty::MvQAbstractIconItemProperty() :
+ refIconSize_(32),
+ fm_(QApplication::font()),
+ refFm_(QApplication::font())
+{
+ iconSize_=refIconSize_;
scaling_=1.;
-
- font_=QApplication::font();
- fm_=QFontMetrics(font_);
- height_=iconSize_+5+fm_.height();
-
+ font_=QApplication::font();
refFont_=QApplication::font();
- refFm_=QFontMetrics(font_);
- refHeight_=height_;
+ refFm_=QFontMetrics(font_);
}
-
-bool MvQFolderItemProperty::setIconSize(int size)
+bool MvQAbstractIconItemProperty::setIconSize(int size)
{
if(iconSize_ == size)
return false;
iconSize_=size;
- if(iconSize_ != 32)
+ update();
+
+ return true;
+}
+
+//========================================
+//
+// MvQClassicIconItemProperty
+//
+//========================================
+
+MvQClassicIconItemProperty::MvQClassicIconItemProperty()
+{
+ textOffset_=5;
+ height_=iconSize_+textOffset_+fm_.height();
+ refHeight_=height_;
+}
+
+void MvQClassicIconItemProperty::update()
+{
+ if(iconSize_ != refIconSize_)
{
if(iconSize_ > 32)
{
@@ -44,26 +63,29 @@ bool MvQFolderItemProperty::setIconSize(int size)
int h=refFont_.pointSize();
font_.setPointSize(2*(static_cast<int>(h*dScale)/2));
}
+ else
+ {
+ font_=refFont_;
+ }
- fm_=QFontMetrics(font_);
- height_=iconSize_+5+fm_.height();
+ fm_=QFontMetrics(font_);
+ height_=iconSize_+textOffset_+fm_.height();
scaling_=static_cast<float>(height_)/static_cast<float>(refHeight_);
}
else
{
font_=refFont_;
fm_=refFm_;
- height_=refHeight_;
+ height_=refHeight_;
scaling_=1.;
- }
-
- return true;
+ }
}
-QPoint MvQFolderItemProperty::position(QString name, QPoint refPos)
+
+QPoint MvQClassicIconItemProperty::position(QString name, QPoint refPos)
{
- if(iconSize_ != 32)
- {
+ if(iconSize_ != refIconSize_)
+ {
//Ref centre
int refTextW=refFm_.width(name);
int refW=(refTextW < 32)?32:refTextW;
@@ -74,24 +96,41 @@ QPoint MvQFolderItemProperty::position(QString name, QPoint refPos)
int textW=fm_.width(name);
int w=(textW < iconSize_)?iconSize_:textW;
- int x=cx-w/2;
+ int x=cx*((iconSize_>32)?(scaling_+1)*0.5:1)-w/2;
int y=refPos.y()*scaling_; //cy*scaling_-height_/2;
- return QPoint(x,y);
+ return QPoint(x,y);
}
return refPos;
}
-QPoint MvQFolderItemProperty::referencePosition(QString name,QPoint pos)
+QPoint MvQClassicIconItemProperty::positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos)
{
- if(iconSize_ != 32)
+ //hotSpotAtPos is the relative position inside the icon pixmap
+ QSize s=size(name);
+ QPoint d(iconSize_*hotSpotAtPos.x(),iconSize_*hotSpotAtPos.y());
+ return QPoint(pos.x()-d.x()-(s.width()-iconSize_)/2,pos.y()-d.y());
+}
+
+
+QSize MvQClassicIconItemProperty::size(QString name)
+{
+ int textW=fm_.width(name);
+ int w=(textW < iconSize_)?iconSize_:textW;
+ return QSize(w,height_);
+}
+
+
+QPoint MvQClassicIconItemProperty::referencePosition(QString name,QPoint pos)
+{
+ if(iconSize_ != refIconSize_)
{
- //Item width
+ //Item width
int textW=fm_.width(name);
int w=(textW < iconSize_)?iconSize_:textW;
//Item centre
- int cx=pos.x()+w/2;
+ int cx=(pos.x()+w/2)/((iconSize_>32)?(scaling_+1)*0.5:1);
//int cy=pos.y()+height_/2;
//Ref width
@@ -108,7 +147,7 @@ QPoint MvQFolderItemProperty::referencePosition(QString name,QPoint pos)
return pos;
}
-QPoint MvQFolderItemProperty::adjsutReferencePosition(QString name,QString oriName,QPoint pos)
+QPoint MvQClassicIconItemProperty::adjsutReferencePosition(QString name,QString oriName,QPoint pos)
{
//Ref width
int oriW=refFm_.width(oriName);
@@ -118,3 +157,499 @@ QPoint MvQFolderItemProperty::adjsutReferencePosition(QString name,QString oriNa
return QPoint(pos.x()-(w-oriW)/2.,pos.y());
}
+
+//========================================
+//
+// MvQSimpleIconItemProperty
+//
+//========================================
+
+MvQSimpleIconItemProperty::MvQSimpleIconItemProperty()
+{
+ textOffset_=5;
+ height_=iconSize_;
+ refHeight_=height_;
+}
+
+
+void MvQSimpleIconItemProperty::update()
+{
+ if(iconSize_ != refIconSize_)
+ {
+ if(iconSize_ > 32)
+ {
+ float dScale=static_cast<float>(iconSize_)/32.;
+ int h=refFont_.pointSize();
+ font_.setPointSize(2*(static_cast<int>(h*dScale)/2));
+ }
+ else
+ {
+ font_=refFont_;
+ }
+
+ fm_=QFontMetrics(font_);
+ height_=iconSize_;
+ scaling_=static_cast<float>(height_)/static_cast<float>(refHeight_);
+ }
+ else
+ {
+ font_=refFont_;
+ fm_=refFm_;
+ height_=refHeight_;
+ scaling_=1.;
+ }
+}
+
+
+QPoint MvQSimpleIconItemProperty::position(QString, QPoint refPos)
+{
+ if(iconSize_ != refIconSize_)
+ {
+ int x=refPos.x()*((iconSize_>32)?(scaling_+1)*0.5:1);
+ int y=refPos.y()*scaling_;
+ return QPoint(x,y);
+ }
+
+ return refPos;
+}
+
+QPoint MvQSimpleIconItemProperty::positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos)
+{
+ //hotSpotAtPos is the relative position inside the icon pixmap
+ QSize s=size(name);
+ QPoint d(iconSize_*hotSpotAtPos.x(),iconSize_*hotSpotAtPos.y());
+ return QPoint(pos.x()-d.x(),pos.y()-d.y());
+}
+
+
+QSize MvQSimpleIconItemProperty::size(QString name)
+{
+ int textW=fm_.width(name);
+ int w=iconSize_+textOffset_+textW;
+ return QSize(w,height_);
+}
+
+
+QPoint MvQSimpleIconItemProperty::referencePosition(QString,QPoint pos)
+{
+ if(iconSize_ != refIconSize_)
+ {
+ //Ref
+ int refX=pos.x()/((iconSize_>32)?(scaling_+1)*0.5:1);
+ int refY=pos.y()/scaling_;
+ return QPoint(refX,refY);
+ }
+
+ return pos;
+}
+
+QPoint MvQSimpleIconItemProperty::adjsutReferencePosition(QString /*name*/,QString /*oriName*/,QPoint /*pos*/)
+{
+ return QPoint();
+}
+//========================================
+//
+// MvQDetailedIconItemProperty
+//
+//========================================
+
+MvQDetailedIconItemProperty::MvQDetailedIconItemProperty()
+{
+ textOffset_=5;
+ height_=iconSize_;
+ refHeight_=height_;
+}
+
+void MvQDetailedIconItemProperty::update()
+{
+ if(iconSize_ != refIconSize_)
+ {
+ if(iconSize_ > 32)
+ {
+ float dScale=static_cast<float>(iconSize_)/32.;
+ int h=refFont_.pointSize();
+ font_.setPointSize(2*(static_cast<int>(h*dScale)/2));
+ }
+ else
+ {
+ font_=refFont_;
+ }
+
+ fm_=QFontMetrics(font_);
+ height_=iconSize_+textOffset_+fm_.height();
+ scaling_=static_cast<float>(height_)/static_cast<float>(refHeight_);
+ }
+ else
+ {
+ font_=refFont_;
+ fm_=refFm_;
+ height_=refHeight_;
+ scaling_=1.;
+ }
+}
+
+
+QPoint MvQDetailedIconItemProperty::position(QString /*name*/, QPoint refPos)
+{
+ return refPos;
+}
+
+QPoint MvQDetailedIconItemProperty::positionFromHotSpot(QString /*name*/, QPoint pos,QPointF /*hotSpotAtPos*/)
+{
+ return pos;
+}
+
+
+QSize MvQDetailedIconItemProperty::size(QString name)
+{
+ int textW=fm_.width(name);
+ int w=iconSize_+textOffset_+textW;
+ return QSize(w,height_);
+}
+
+QPoint MvQDetailedIconItemProperty::referencePosition(QString /*name*/,QPoint pos)
+{
+ return pos;
+}
+
+QPoint MvQDetailedIconItemProperty::adjsutReferencePosition(QString /*name*/,QString /*oriName*/,QPoint pos)
+{
+ return pos;
+}
+
+
+//============================================
+//
+// MvQFolderItemProperty
+//
+//============================================
+
+MvQFolderItemProperty::MvQFolderItemProperty() :
+ viewMode_(Desktop::IconViewMode),
+ current_(0)
+
+{
+ prop_[Desktop::IconViewMode]=new MvQClassicIconItemProperty;
+ prop_[Desktop::SimpleViewMode]=new MvQSimpleIconItemProperty;
+ prop_[Desktop::DetailedViewMode]=new MvQDetailedIconItemProperty;
+ current_=prop_[viewMode_];
+ iconSize_=current_->iconSize();
+}
+
+MvQFolderItemProperty::~MvQFolderItemProperty()
+{
+ QMap<Desktop::FolderViewMode,MvQAbstractIconItemProperty*>::iterator it = prop_.begin();
+ while(it != prop_.end())
+ {
+ delete it.value();
+ ++it;
+ }
+}
+
+int MvQFolderItemProperty::iconSize()
+{
+ return iconSize_;
+}
+
+float MvQFolderItemProperty::scaling()
+{
+ return current_->scaling();
+}
+
+QFont MvQFolderItemProperty::font()
+{
+ return current_->font();
+}
+
+int MvQFolderItemProperty::textHeight()
+{
+ return current_->textHeight();
+}
+
+int MvQFolderItemProperty::textOffset()
+{
+ return current_->textOffset();
+}
+
+void MvQFolderItemProperty::setViewMode(Desktop::FolderViewMode mode)
+{
+ viewMode_=mode;
+ QMap<Desktop::FolderViewMode,MvQAbstractIconItemProperty*>::iterator it=prop_.find(mode);
+ if( it != prop_.end())
+ {
+ current_=it.value();
+ current_->setIconSize(iconSize_);
+ }
+}
+
+/*void MvQFolderItemProperty::setTextPosMode(TextPosMode tp)
+{
+ textPosMode_=tp;
+ QMap<TextPosMode,MvQAbstractIconItemProperty*>::iterator it=prop_.find(tp);
+ if( it != prop_.end())
+ {
+ current_=it.value();
+ }
+} */
+
+bool MvQFolderItemProperty::setIconSize(int size)
+{
+ if(iconSize_ == size)
+ return false;
+
+ iconSize_=size;
+ current_->setIconSize(iconSize_);
+
+ return true;
+}
+
+/* retVal=it.value()->setIconSize(size);
+
+ QMap<TextPosMode,MvQAbstractIconItemProperty*>::iterator it = prop_.begin();
+ while(it != prop_.end())
+ {
+ if(it.value() == current_)
+ {
+ retVal=it.value()->setIconSize(size);
+ }
+ else
+ {
+ it.value()->setIconSize(size);
+ }
+ ++it;
+ }
+
+ return retVal;
+} */
+
+QPoint MvQFolderItemProperty::position(QString name, QPoint refPos)
+{
+ return current_->position(name,refPos);
+}
+
+QPoint MvQFolderItemProperty::positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos)
+{
+ return current_->positionFromHotSpot(name,pos,hotSpotAtPos);
+}
+
+QSize MvQFolderItemProperty::size(QString name)
+{
+ return current_->size(name);
+}
+
+QPoint MvQFolderItemProperty::referencePosition(QString name,QPoint pos)
+{
+ return current_->referencePosition(name,pos);
+}
+
+QPoint MvQFolderItemProperty::adjsutReferencePosition(QString name,QString oriName,QPoint pos)
+{
+ return current_->adjsutReferencePosition(name,oriName,pos);
+}
+
+
+
+
+
+/*
+
+
+MvQFolderItemProperty::MvQFolderItemProperty() :
+ fm_(QApplication::font()),
+ refFm_(fm_),
+ textOffset_(5),
+ textPosMode_(TextBelow)
+
+{
+ iconSize_=32;
+
+ refIconSize_=32;
+ scaling_=1.;
+
+ font_=QApplication::font();
+ fm_=QFontMetrics(font_);
+
+ height_[TextBelow]=iconSize_+5+fm_.height();
+ height_[TextBeside]=iconSize_;
+
+ refFont_=QApplication::font();
+ refFm_=QFontMetrics(font_);
+
+ refHeight_[TextBelow]=height_[TextBelow];
+ refHeight_[TextBeside]=height_[TextBeside];
+}
+
+void MvQFolderItemProperty::update()
+{
+ if(iconSize_ != 32)
+ {
+ if(iconSize_ > 32)
+ {
+ float dScale=static_cast<float>(iconSize_)/32.;
+ int h=refFont_.pointSize();
+ font_.setPointSize(2*(static_cast<int>(h*dScale)/2));
+ }
+
+ fm_=QFontMetrics(font_);
+
+ height_[TextBelow]=iconSize_+textOffset_+fm_.height();
+ height_[TextBeside]=iconSize_;
+
+ scaling_=static_cast<float>(height_[TextBelow])/static_cast<float>(refHeight_[TextBelow]);
+ }
+ else
+ {
+ font_=refFont_;
+ fm_=refFm_;
+ height_[TextBelow]=refHeight_[TextBelow];
+ height_[TextBeside]=refHeight_[TextBeside];
+ scaling_=1.;
+ }
+}
+
+
+void MvQFolderItemProperty::setTextPosMode(TextPosMode tp)
+{
+ textPosMode_=tp;
+ update();
+}
+
+bool MvQFolderItemProperty::setIconSize(int size)
+{
+ if(iconSize_ == size)
+ return false;
+
+ iconSize_=size;
+ update();
+
+ return true;
+}
+
+QPoint MvQFolderItemProperty::position(QString name, QPoint refPos)
+{
+ if(iconSize_ != 32)
+ {
+ if(textPosMode_ == TextBelow)
+ {
+ //Ref centre
+ int refTextW=refFm_.width(name);
+ int refW=(refTextW < 32)?32:refTextW;
+ int cx=refPos.x()+refW/2;
+ //int cy=refPos.y()+refHeight_/2;
+
+ //Item width
+ int textW=fm_.width(name);
+ int w=(textW < iconSize_)?iconSize_:textW;
+
+ int x=cx*((iconSize_>32)?(scaling_+1)*0.5:1)-w/2;
+ int y=refPos.y()*scaling_; //cy*scaling_-height_/2;
+ return QPoint(x,y);
+ }
+ else if(textPosMode_ == TextBeside)
+ {
+ int x=refPos.x()*((iconSize_>32)?(scaling_+1)*0.5:1);
+ int y=refPos.y()*scaling_;
+ return QPoint(x,y);
+ }
+ }
+
+ return refPos;
+}
+
+QPoint MvQFolderItemProperty::positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos)
+{
+ //hotSpotAtPos is the relative position inside the icon pixmap
+ if(textPosMode_ == TextBelow)
+ {
+ QSize s=size(name);
+ QPoint d(iconSize_*hotSpotAtPos.x(),iconSize_*hotSpotAtPos.y());
+ return QPoint(pos.x()-d.x()-(s.width()-iconSize_)/2,pos.y()-d.y());
+ }
+ else if(textPosMode_ == TextBeside)
+ {
+ QSize s=size(name);
+ QPoint d(iconSize_*hotSpotAtPos.x(),iconSize_*hotSpotAtPos.y());
+ return QPoint(pos.x()-d.x(),pos.y()-d.y());
+ }
+
+ return QPoint();
+}
+
+
+QSize MvQFolderItemProperty::size(QString name)
+{
+ if(textPosMode_ == TextBelow)
+ {
+ int textW=fm_.width(name);
+ int w=(textW < iconSize_)?iconSize_:textW;
+ return QSize(w,height_[TextBelow]);
+ }
+ else if(textPosMode_ == TextBeside)
+ {
+ int textW=fm_.width(name);
+ int w=iconSize_+textOffset_+textW;
+ return QSize(w,height_[TextBeside]);
+ }
+
+ return QSize();
+}
+
+
+QPoint MvQFolderItemProperty::referencePosition(QString name,QPoint pos)
+{
+ if(iconSize_ != 32)
+ {
+ if(textPosMode_ == TextBelow)
+ {
+ //Item width
+ int textW=fm_.width(name);
+ int w=(textW < iconSize_)?iconSize_:textW;
+
+ //Item centre
+ int cx=pos.x()/((iconSize_>32)?(scaling_+1)*0.5:1)+w/2;
+ //int cy=pos.y()+height_/2;
+
+ //Ref width
+ int refTextW=refFm_.width(name);
+ int refW=(refTextW < 32)?32:refTextW;
+
+ //Ref
+ int refX=cx-refW/2;
+ int refY=pos.y()/scaling_; //cy/scaling_-refHeight_/2;
+
+ return QPoint(refX,refY);
+ }
+ else if(textPosMode_ == TextBeside)
+ {
+ //Ref
+ int refX=pos.x()/((iconSize_>32)?(scaling_+1)*0.5:1);
+ int refY=pos.y()/scaling_;
+ return QPoint(refX,refY);
+
+ }
+ }
+
+ return pos;
+}
+
+QPoint MvQFolderItemProperty::adjsutReferencePosition(QString name,QString oriName,QPoint pos)
+{
+ if(textPosMode_ == TextBelow)
+ {
+ //Ref width
+ int oriW=refFm_.width(oriName);
+ if(oriW < 32) oriW=32;
+ int w=refFm_.width(name);
+ if(w < 32) w=32;
+
+ return QPoint(pos.x()-(w-oriW)/2.,pos.y());
+ }
+ else if(textPosMode_ == TextBeside)
+ {
+
+ }
+
+ return QPoint();
+}
+*/
+
diff --git a/src/Desktop/MvQFolderItemProperty.h b/src/Desktop/MvQFolderItemProperty.h
index 845d8e2..28dbe34 100644
--- a/src/Desktop/MvQFolderItemProperty.h
+++ b/src/Desktop/MvQFolderItemProperty.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -11,23 +11,34 @@
#define MvQFolderItemProperty_H
#include <QFont>
+#include <QMap>
#include <QFontMetrics>
-class MvQFolderItemProperty
+#include "Desktop.h"
+
+class MvQAbstractIconItemProperty
{
-public:
- MvQFolderItemProperty();
+public:
+ MvQAbstractIconItemProperty();
+
int iconSize() const {return iconSize_;}
QFont font() const {return font_;}
- bool setIconSize(int);
- QPoint position(QString,QPoint);
- QPoint referencePosition(QString,QPoint);
- QPoint adjsutReferencePosition(QString,QString,QPoint);
float scaling() const {return scaling_;}
-
+ int textHeight() const {return fm_.height();}
+ int textOffset() const {return textOffset_;}
+ bool setIconSize(int);
+
+ virtual QPoint position(QString,QPoint)=0;
+ virtual QPoint positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos)=0;
+ virtual QPoint referencePosition(QString,QPoint)=0;
+ virtual QPoint adjsutReferencePosition(QString,QString,QPoint)=0;
+ virtual QSize size(QString)=0;
+
protected:
+ virtual void update()=0;
+
int iconSize_;
- int refIconSize_;
+ const int refIconSize_;
float scaling_;
QFont font_;
@@ -36,6 +47,81 @@ protected:
QFontMetrics refFm_;
int height_;
int refHeight_;
+ int textOffset_;
+};
+
+class MvQClassicIconItemProperty : public MvQAbstractIconItemProperty
+{
+public:
+ MvQClassicIconItemProperty();
+
+ QPoint position(QString,QPoint);
+ QPoint positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos);
+ QPoint referencePosition(QString,QPoint);
+ QPoint adjsutReferencePosition(QString,QString,QPoint);
+ QSize size(QString);
+protected:
+ void update();
+};
+
+class MvQSimpleIconItemProperty : public MvQAbstractIconItemProperty
+{
+public:
+ MvQSimpleIconItemProperty();
+
+ QPoint position(QString,QPoint);
+ QPoint positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos);
+ QPoint referencePosition(QString,QPoint);
+ QPoint adjsutReferencePosition(QString,QString,QPoint);
+ QSize size(QString);
+protected:
+ void update();
+};
+
+class MvQDetailedIconItemProperty : public MvQAbstractIconItemProperty
+{
+public:
+ MvQDetailedIconItemProperty();
+
+ QPoint position(QString,QPoint);
+ QPoint positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos);
+ QPoint referencePosition(QString,QPoint);
+ QPoint adjsutReferencePosition(QString,QString,QPoint);
+ QSize size(QString);
+protected:
+ void update();
+};
+
+
+class MvQFolderItemProperty
+{
+public:
+ //enum TextPosMode {TextBelow,TextBeside};
+
+ MvQFolderItemProperty();
+ ~MvQFolderItemProperty();
+ int iconSize();
+ float scaling();
+ QFont font();
+ QSize size(QString);
+ int textHeight();
+ int textOffset();
+
+ bool setIconSize(int);
+ QPoint position(QString,QPoint);
+ QPoint positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos);
+ QPoint referencePosition(QString,QPoint);
+ QPoint adjsutReferencePosition(QString,QString,QPoint);
+ void setViewMode(Desktop::FolderViewMode);
+ Desktop::FolderViewMode viewMode() const {return viewMode_;}
+
+protected:
+ int iconSize_;
+ Desktop::FolderViewMode viewMode_;
+ QMap<Desktop::FolderViewMode,MvQAbstractIconItemProperty*> prop_;
+ MvQAbstractIconItemProperty* current_;
+
+
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderModel.cc b/src/Desktop/MvQFolderModel.cc
index 126c4f4..784f809 100644
--- a/src/Desktop/MvQFolderModel.cc
+++ b/src/Desktop/MvQFolderModel.cc
@@ -24,17 +24,24 @@
#include "Folder.h"
#include "FolderInfo.h"
+#include "FolderSearchData.h"
#include "IconFactory.h"
#include "MvQFolderItemProperty.h"
#include "MvQIconProvider.h"
+#include "MvQTheme.h"
#include <assert.h>
#include <map>
-QMap<IconObject::IconStatus,QColor> MvQFolderModel::statusColour_;
-
+QHash<IconObject::IconStatus,QColor> MvQFolderModel::statusColour_;
+QColor MvQFolderModel::fadedColour_;
+QString MvQFolderModel::infoNameColour_;
+QString MvQFolderModel::infoTypeColour_;
+QString MvQFolderModel::infoSizeColour_;
+QString MvQFolderModel::infoTimeColour_;
+
MvQFolderModel::MvQFolderModel(QObject *parent) :
QAbstractItemModel(parent)
{
@@ -50,19 +57,28 @@ MvQFolderModel::MvQFolderModel(int iconSize,QObject *parent) :
}
void MvQFolderModel::init()
-{
+{
+ searchData_=0;
folder_=0 ,
initialScanIsOn_=false,
lastArrived_=0;
itemProp_=new MvQFolderItemProperty();
-
+
if(statusColour_.empty())
{
- statusColour_[IconObject::DefaultStatus]=Qt::black;
+ //statusColour_[IconObject::DefaultStatus]=QColor(0,0,90);
+ statusColour_[IconObject::DefaultStatus]=MvQTheme::colour("itemview_main","text"); // QColor(30,30,30);
statusColour_[IconObject::ReadyStatus]=QColor(0,205,0);
statusColour_[IconObject::WaitingStatus]=QColor(255,188,46);
statusColour_[IconObject::ErrorStatus]=QColor(255,0,0);
+
+ fadedColour_=MvQTheme::colour("itemview_main","faded_text");
+
+ infoNameColour_=MvQTheme::colour("icon_info","name").name();
+ infoTypeColour_=MvQTheme::colour("icon_info","type").name();
+ infoSizeColour_=MvQTheme::colour("icon_info","size").name();
+ infoTimeColour_=MvQTheme::colour("icon_info","time").name();
}
}
@@ -88,7 +104,7 @@ void MvQFolderModel::folderIsAboutToChange()
beginResetModel();
}
-bool MvQFolderModel::setFolder(Folder *folder)
+bool MvQFolderModel::setFolder(Folder *folder,int iconSize)
{
bool retVal=false;
@@ -120,36 +136,39 @@ bool MvQFolderModel::setFolder(Folder *folder)
//Load items_ from folder
loadItems();
- //Ask the view to compute/adjust icon positions!!
- emit updateObjectPositions();
-
//Now we become an observer. Any changes afterwards will end up
//in arrived(), gone() etc. observer methods!
folder_->addObserver(this);
((IconObject*)folder_)->addObserver((IconObserver*)this);
+ if(iconSize != -1)
+ itemProp_->setIconSize(iconSize);
+
retVal=true;
}
+ //Update the search status
+ updateSearchData(false);
+
endResetModel();
return retVal;
}
-bool MvQFolderModel::setFolder(QString fullName)
+bool MvQFolderModel::setFolder(QString fullName,int iconSize)
{
if(folder_ && QString::fromStdString(folder_->fullName()) == fullName)
return false;
- return setFolder(Folder::folder(fullName.toStdString(),false));
+ return setFolder(Folder::folder(fullName.toStdString(),false),iconSize);
}
-bool MvQFolderModel::setFolder(const QModelIndex& index )
+bool MvQFolderModel::setFolder(const QModelIndex& index,int iconSize)
{
IconObject* obj=objectFromIndex(index);
if(obj && obj->isFolder())
{
- setFolder(static_cast<Folder*>(obj));
+ setFolder(static_cast<Folder*>(obj),iconSize);
return true;
}
@@ -157,14 +176,14 @@ bool MvQFolderModel::setFolder(const QModelIndex& index )
}
-bool MvQFolderModel::setFolderToParent()
+bool MvQFolderModel::setFolderToParent(int iconSize)
{
if(!folder_) return false;
IconObject* obj=folder_->parent();
if(obj && obj->isFolder())
{
- return setFolder(static_cast<Folder*>(obj));
+ return setFolder(static_cast<Folder*>(obj),iconSize);
}
return false;
@@ -220,20 +239,36 @@ QVariant MvQFolderModel::data( const QModelIndex& index, int role ) const
{
case Qt::DecorationRole:
{
- return MvQIconProvider::pixmap(obj,itemProp_->iconSize());
+ if(!hasSearchData() || !searchData_->isSet() || searchData_->match(obj))
+ {
+ return MvQIconProvider::pixmap(obj,itemProp_->iconSize());
+ }
+ else
+ {
+ return MvQIconProvider::greyedOutPixmap(obj,itemProp_->iconSize());
+ }
}
-
+
case Qt::DisplayRole:
case Qt::EditRole:
return QString::fromStdString(obj->name());
case Qt::ForegroundRole:
{
- QMap<IconObject::IconStatus,QColor>::const_iterator it=statusColour_.find(obj->status());
- if(it != statusColour_.end())
- return it.value();
+ if(!hasSearchData() || !searchData_->isSet() || searchData_->match(obj))
+ {
+ QHash<IconObject::IconStatus,QColor>::const_iterator it=statusColour_.find(obj->status());
+ if(it != statusColour_.end())
+ return it.value();
+ else
+ return QColor();
+ }
else
- return QColor();
+ {
+ return fadedColour_;
+ }
+
+
}
break;
@@ -256,8 +291,7 @@ QVariant MvQFolderModel::data( const QModelIndex& index, int role ) const
}
else
return itemProp_->font();
- }
-
+ }
default:
return QString();
}
@@ -297,15 +331,17 @@ QVariant MvQFolderModel::data( const QModelIndex& index, int role ) const
}
- if(index.column() >=1 && index.column() <=3)
+ if(index.column() >=1 && index.column() <=5)
{
if(role == Qt::ForegroundRole)
{
- QMap<IconObject::IconStatus,QColor>::const_iterator it=statusColour_.find(obj->status());
+ return QColor(70,70,70);
+
+ /*QMap<IconObject::IconStatus,QColor>::const_iterator it=statusColour_.find(obj->status());
if(it != statusColour_.end())
return it.value();
else
- return QColor();
+ return QColor(100,100,100);*/
}
else if(role ==Qt::FontRole)
return itemProp_->font();
@@ -358,7 +394,7 @@ QVariant MvQFolderModel::headerData(const int section, const Qt::Orientation ori
if(section == 0)
return "Name";
else if(section == 1)
- return "Class";
+ return "Type";
else if(section == 2)
return "Size";
else if(section == 3)
@@ -488,7 +524,7 @@ bool MvQFolderModel::isAccepted(IconObject *obj) const
void MvQFolderModel::saveFolderInfo()
{
if(folder_)
- folder_->folderInfo()->write();
+ folder_->saveFolderInfo();
}
@@ -568,9 +604,12 @@ void MvQFolderModel::arrived(IconObject* obj)
}
posHint_.clear();
+ //Update saerch data
+ updateSearchData(false);
+
endResetModel();
- emit objectArrived(indexFromObject(obj));
+ //emit objectArrived(indexFromObject(obj));
}
}
@@ -581,6 +620,10 @@ void MvQFolderModel::gone(IconObject* obj)
{
beginResetModel();
items_.removeOne(obj);
+
+ //Update saerch data
+ updateSearchData(false);
+
endResetModel();
}
}
@@ -596,6 +639,9 @@ void MvQFolderModel::renamed(IconObject* obj,const string& oriName)
if(isAccepted(obj))
{
+ //Update saerch data
+ updateSearchData(false);
+
//We notify the view about the renaming
emit objectRenamed(indexFromObject(obj),QString::fromStdString(oriName));
}
@@ -662,20 +708,20 @@ void MvQFolderModel::createNewFolder()
}
QString MvQFolderModel::objectInfo( const QModelIndex & index)
-{
+{
IconObject* obj=objectFromIndex(index);
if(obj)
{
- QString txt="<b>" + QString::fromStdString(obj->name());
+ QString txt="<b><font color=\"" + infoNameColour_ + "\">" + QString::fromStdString(obj->name()) + "</font> ";
- txt+=" <font color=\"#5a5a5a\">(" +QString::fromStdString(obj->editorClass().name()) + ") </font> ";
+ txt+=" <font color=\"" + infoTypeColour_ + "\">(" +QString::fromStdString(obj->editorClass().name()) + ") </font> ";
if(!obj->isFolder())
{
- txt+="<font color=\"#084cb3\">" + formatFileSize(obj->path().sizeInBytes()) + " </font> ";
+ txt+="<font color=\"" + infoSizeColour_ + "\">" + formatFileSize(obj->path().sizeInBytes()) + " </font> ";
}
- txt+=" " + formatFileDate(obj->path().lastModified());
+ txt+=" <font color=\"" + infoTimeColour_ + "\">" + formatFileDate(obj->path().lastModified()) + " </font> ";
txt+="</b";
return txt;
@@ -704,6 +750,100 @@ QString MvQFolderModel::formatFileDate(time_t t) const
return dt.toString("yyyy-MM-dd hh:mm");
}
+
+//---------------------------------------------------------
+//
+// Filter/search
+//
+//---------------------------------------------------------
+
+void MvQFolderModel::setSearchData(FolderSearchData *data)
+{
+ searchData_=data;
+
+ //Register owner
+ searchData_->setOwner(this);
+
+ updateSearchData(true);
+}
+
+void MvQFolderModel::updateSearchData(bool doReset)
+{
+ if(!hasSearchData())
+ {
+ if(doReset)
+ reset();
+ return;
+ }
+
+ //Clear search results
+ searchData_->clearMatch();
+
+ if(searchData_->isSet())
+ {
+ for(int i=0; i< rowCount(); i++)
+ {
+ QModelIndex idx=index(i,0);
+ searchData_->load(objectFromIndex(idx));
+ }
+ }
+
+ //Notify changes
+ searchData_->matchChanged();
+
+ if(doReset)
+ reset();
+}
+
+bool MvQFolderModel::hasSearchData() const
+{
+ if(!searchData_)
+ {
+ return false;
+ }
+
+ if(searchData_->owner() != this)
+ {
+ searchData_=0;
+ return false;
+ }
+
+ return true;
+}
+
+
+/*
+
+ bool found=false;
+
+ if(filterName_ == name.toStdString() && filterType_ == type.toStdString())
+ return found;
+
+ filterName_=name.toStdString();
+ filterType_=type.toStdString();
+
+ filterMatchLst_.clear();
+
+ if(!filterName_.empty() || !filterType_.empty())
+ {
+ for(int i=0; i< rowCount(); i++)
+ {
+ QModelIndex idx=index(i,0);
+ if(IconObject *obj=objectFromIndex(idx))
+ {
+ if(obj->match(filterName_,filterType_))
+ {
+ filterMatchLst_ << obj;
+ }
+ }
+ }
+ }
+
+ reset();
+ return found;
+}*/
+
+
//=======================================
//
// MvQFolderFilterModel:
@@ -739,4 +879,58 @@ bool MvQFolderFilterModel::lessThan(const QModelIndex &left,
}
else
return QSortFilterProxyModel::lessThan(left,right);
-}
+}
+
+/*QVariant MvQFolderFilterModel::data(const QModelIndex& index, int role ) const
+{
+ if(role == Qt::DecorationRole && matchLst_.count() > 0 )
+ {
+ if(MvQFolderModel *md=static_cast<MvQFolderModel*>(sourceModel()))
+ {
+ if(IconObject *obj=md->objectFromIndex(mapToSource(index)))
+ {
+ if(!matchLst_.contains(obj))
+ {
+ return md->data(mapToSource(index),MvQFolderModel::GreyedOutRole);
+ }
+ }
+ }
+ }
+
+ return sourceModel()->data(mapToSource(index),role);
+} */
+/*
+bool MvQFolderFilterModel::setFilter(QString name,QString type)
+{
+ bool found=false;
+
+ if(name_ == name.toStdString() && type_ == type.toStdString())
+ return found;
+
+ name_=name.toStdString();
+ type_=type.toStdString();
+
+ matchLst_.clear();
+
+ MvQFolderModel *md=static_cast<MvQFolderModel*>(sourceModel());
+ if(!md)
+ return found;
+
+ if(!name_.empty() || !type_.empty())
+ {
+ for(int i=0; i< rowCount(); i++)
+ {
+ QModelIndex idx=index(i,0);
+ if(IconObject *obj=md->objectFromIndex(mapToSource(idx)))
+ {
+ if(obj->match(name_,type_))
+ matchLst_ << obj;
+ }
+ }
+ }
+
+ reset();
+
+ return found;
+}
+*/
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderModel.h b/src/Desktop/MvQFolderModel.h
index 3926981..e1f8bab 100644
--- a/src/Desktop/MvQFolderModel.h
+++ b/src/Desktop/MvQFolderModel.h
@@ -12,6 +12,7 @@
#include <QAbstractItemModel>
#include <QAbstractListModel>
+#include <QHash>
#include <QFont>
#include <QFontMetrics>
#include <QSortFilterProxyModel>
@@ -25,6 +26,8 @@ class Folder;
class IconClass;
class IconObject;
class MvQFolderItemProperty;
+class FolderSearchData;
+
class PositionHint
{
@@ -64,10 +67,10 @@ public:
void folderIsAboutToChange();
Folder* folder() {return folder_;}
- bool setFolder(Folder*);
- bool setFolder(QString);
- bool setFolder(const QModelIndex &);
- bool setFolderToParent();
+ bool setFolder(Folder*,int iconSize=-1);
+ bool setFolder(QString,int iconSize=-1);
+ bool setFolder(const QModelIndex &,int iconSize=-1);
+ bool setFolderToParent(int iconSize=-1);
IconObject* objectFromIndex(const QModelIndex &) const;
QModelIndex indexFromObject(IconObject *);
@@ -104,10 +107,12 @@ public:
void setAcceptedClasses(const vector<string>&);
bool isAccepted(const IconClass&) const;
void setPositionHint(const string&,int,int);
+
+ void setSearchData(FolderSearchData*);
+ void removeSearchData();
signals:
void iconSizeChanged();
- void updateObjectPositions();
void folderChanged(Folder*);
void objectArrived(const QModelIndex&);
void objectRenamed(const QModelIndex&,QString);
@@ -119,6 +124,8 @@ protected:
QString formatFileDate(time_t) const;
bool isAccepted(IconObject*) const;
void objectChanged(IconObject*);
+ void updateSearchData(bool doReset);
+ bool hasSearchData() const;
Folder* folder_;
QList<IconObject*> items_;
@@ -126,9 +133,17 @@ protected:
vector<string> classes_;
IconObject* lastArrived_;
MvQFolderItemProperty* itemProp_;
- static QMap<IconObject::IconStatus,QColor> statusColour_;
PositionHint posHint_;
+ static QHash<IconObject::IconStatus,QColor> statusColour_;
+ static QColor fadedColour_;
+ static QString infoNameColour_;
+ static QString infoTypeColour_;
+ static QString infoSizeColour_;
+ static QString infoTimeColour_;
+
+ mutable FolderSearchData* searchData_;
+
private:
void init();
};
@@ -143,9 +158,15 @@ public:
bool filterAcceptsRow(int,const QModelIndex &) const;
bool lessThan(const QModelIndex &left,
const QModelIndex &right) const;
+
+ //QVariant data(const QModelIndex& index, int role ) const;
+ //bool setFilter(QString,QString);
protected:
MvQFolderModel *folderModel_;
+ std::string name_;
+ std::string type_;
+ QList<IconObject*> matchLst_;
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderPanel.cc b/src/Desktop/MvQFolderPanel.cc
index f72fba1..cb8f686 100644
--- a/src/Desktop/MvQFolderPanel.cc
+++ b/src/Desktop/MvQFolderPanel.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -11,46 +11,37 @@
#include <QAction>
#include <QDebug>
+#include <QDragEnterEvent>
+#include <QDragMoveEvent>
#include <QMenu>
#include <QMessageBox>
+#include <QPainter>
#include <QTabBar>
#include <QStackedWidget>
+#include <QStyle>
+#include <QStyleOption>
+#include <QToolButton>
#include <QVBoxLayout>
#include "MvQ.h"
#include "MvQBookmarks.h"
#include "MvQContextMenu.h"
+#include "MvQDropTarget.h"
#include "MvQFileBrowser.h"
#include "MvQFolderHistory.h"
#include "MvQFolderNavigation.h"
+#include "MvQFolderViewBase.h"
#include "MvQFolderWidget.h"
#include "MvQIconProvider.h"
#include "MvQDesktopSettings.h"
#include "Folder.h"
+#include "FolderSettings.h"
#include "IconClass.h"
#include "IconObject.h"
#include "Path.h"
#include "MvRequest.h"
-//=============================================
-//
-// MvQActionList
-//
-//=============================================
-
-bool MvQActionList::trigger(QString name)
-{
- foreach(QAction* ac, lst_)
- {
- if(ac->data().toString() == name)
- {
- ac->trigger();
- return true;
- }
- }
- return false;
-}
//=============================================
//
@@ -65,17 +56,36 @@ MvQTabWidget::MvQTabWidget(QWidget* parent) :
QVBoxLayout* layout=new QVBoxLayout(this);
layout->setSpacing(0);
layout->setContentsMargins(0,0,0,0);
-
+
+ QHBoxLayout* hb=new QHBoxLayout();
+ hb->setSpacing(0);
+ hb->setContentsMargins(0,0,0,0);
+ layout->addLayout(hb);
+
bar_=new QTabBar(this);
- layout->addWidget(bar_);
-
+ hb->addWidget(bar_,1,Qt::AlignBottom);
+
bar_->setProperty("mvStyle","folder");
bar_->setMovable(true);
bar_->setExpanding(true);
-
+
+ //Add tab button
+ addTb_=new QToolButton(this);
+ addTb_->setAutoRaise(true);
+ addTb_->setIcon(QPixmap(":/desktop/add_tab.svg"));
+ addTb_->setToolTip(tr("Open a new tab"));
+ hb->addWidget(addTb_);
+
+ //Tab list menu
+ tabListTb_=new QToolButton(this);
+ tabListTb_->setAutoRaise(true);
+ tabListTb_->setIcon(QPixmap(":/desktop/menu_arrow_down.svg"));
+ tabListTb_->setToolTip(tr("List all tabs"));
+ hb->addWidget(tabListTb_);
+
stacked_=new QStackedWidget(this);
- stacked_->setMinimumHeight(1);
- stacked_->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Minimum);
+ //stacked_->setMinimumHeight(1);
+ //stacked_->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Minimum);
layout->addWidget(stacked_);
//Context menu
@@ -93,6 +103,15 @@ MvQTabWidget::MvQTabWidget(QWidget* parent) :
connect(bar_,SIGNAL(tabCloseRequested(int)),
this,SLOT(removeTab(int)));
+ connect(addTb_,SIGNAL(clicked(bool)),
+ this,SIGNAL(newTabRequested(bool)));
+
+ connect(tabListTb_,SIGNAL(clicked()),
+ this,SLOT(slotTabList()));
+
+ setAcceptDrops(true);
+
+ setProperty("panel","true");
}
void MvQTabWidget::slotContextMenu(const QPoint& pos)
@@ -213,6 +232,8 @@ void MvQTabWidget::currentTabChanged(int index)
{
stacked_->setCurrentIndex(index);
emit currentIndexChanged(index);
+
+ checkTabStatus();
}
}
@@ -242,21 +263,183 @@ void MvQTabWidget::setTabIcon(int index,QPixmap pix)
}
}
+void MvQTabWidget::setTabToolTip(int index,QString txt)
+{
+ if(index >=0 && index < bar_->count())
+ {
+ bar_->setTabToolTip(index,txt);
+ }
+}
+
+void MvQTabWidget::setTabData(int index,QString txt)
+{
+ if(index >=0 && index < bar_->count())
+ {
+ bar_->setTabData(index,txt);
+ }
+}
+
+void MvQTabWidget::slotTabList()
+{
+ QMenu* menu=new QMenu(tabListTb_);
+
+ for(int i=0; i < bar_->count(); i++)
+ {
+ QAction *ac=new QAction(menu);
+ ac->setText(bar_->tabData(i).toString());
+ ac->setIcon(bar_->tabIcon(i));
+ ac->setData(i);
+ if(i==bar_->currentIndex())
+ {
+ QFont font;
+ font.setBold(true);
+ ac->setFont(font);
+ }
+
+ menu->addAction(ac);
+ }
+
+ if(QAction *ac=menu->exec(QCursor::pos()))
+ {
+ int index=ac->data().toInt();
+ if(index >=0 && index < count())
+ {
+ setCurrentIndex(index);
+ }
+ }
+
+ menu->clear();
+ menu->deleteLater();
+}
+
void MvQTabWidget::checkTabStatus()
{
if(bar_->count()> 1)
{
bar_->show();
bar_->setTabsClosable(true);
+ addTb_->show();
+ tabListTb_->show();
}
else
{ bar_->hide();
bar_->setTabsClosable(false);
+ addTb_->hide();
+ tabListTb_->hide();
+ }
+
+ qDebug() << "current" << bar_->currentIndex();
+
+ for(int i=0; i < bar_->count(); i++)
+ {
+ if(QWidget *w=bar_->tabButton(i,QTabBar::RightSide))
+ {
+ if(i == bar_->currentIndex())
+ w->show();
+ else
+ w->hide();
+ }
}
+
}
+void MvQTabWidget::checkDropTarget(QDropEvent *event)
+{
+ if(!event->mimeData()->hasFormat("metview/icon"))
+ {
+ removeDropTarget();
+ }
+
+ int index=bar_->tabAt(event->pos());
+ QString s=bar_->tabText(index);
+
+ if(!s.isEmpty())
+ {
+ //Folder *f=Folder::folder(s.toStdString(),false);
+ //if(f && !f->locked())
+ //{
+ Qt::DropAction dropAction=event->proposedAction();
+ MvQDropTarget::Instance()->reset(s,(dropAction == Qt::MoveAction));
+ if(window())
+ {
+ MvQDropTarget::Instance()->move(mapToGlobal(event->pos())+QPoint(20,20));
+ }
+ return;
+ //}
+ }
+
+ removeDropTarget();
+}
+
+void MvQTabWidget::removeDropTarget()
+{
+ MvQDropTarget::Instance()->hide();
+}
+
+void MvQTabWidget::dragEnterEvent(QDragEnterEvent *event)
+{
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ event->accept();
+
+ }
+ else
+ event->ignore();
+}
+
+void MvQTabWidget::dragMoveEvent(QDragMoveEvent *event)
+{
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ checkDropTarget(event);
+ event->accept();
+ }
+ else
+ {
+ removeDropTarget();
+ event->ignore();
+ }
+}
+void MvQTabWidget::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ removeDropTarget();
+ event->accept();
+}
+void MvQTabWidget::dropEvent(QDropEvent *event)
+{
+ removeDropTarget();
+
+ if(!event->source())
+ {
+ event->ignore();
+ return;
+ }
+
+ if(event->proposedAction() != Qt::CopyAction &&
+ event->proposedAction() != Qt::MoveAction)
+ {
+ event->ignore();
+ return;
+ }
+
+ int index=bar_->tabAt(event->pos());
+ emit iconDropped(index,event);
+}
+
+void MvQTabWidget::paintEvent(QPaintEvent *)
+ {
+ QStyleOption opt;
+ opt.init(this);
+ QPainter p(this);
+ style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
+ }
+
//=============================================
//
// MvQFolderPanel
@@ -271,11 +454,19 @@ MvQFolderPanel::MvQFolderPanel(QWidget* parent) :
connect(this,SIGNAL(currentIndexChanged(int)),
this,SLOT(slotCurrentWidgetChanged(int)));
+
+ connect(this,SIGNAL(newTabRequested(bool)),
+ this,SLOT(slotNewTab(bool)));
+
+ connect(this,SIGNAL(iconDropped(int,QDropEvent*)),
+ this,SLOT(slotIconDroppedToTab(int,QDropEvent*)));
}
MvQFolderPanel::~MvQFolderPanel()
{
+ if(folderHistory_)
+ delete folderHistory_;
}
Folder* MvQFolderPanel::currentFolder()
@@ -333,13 +524,16 @@ MvQFolderWidget *MvQFolderPanel::addWidget(QString path)
//if(path.isEmpty())
// return 0;
- MvQFolderWidget *fw=new MvQFolderWidget(path,folderHistory_,this);
+ MvQFolderWidget *fw=new MvQFolderWidget(path,folderHistory_,&iconActions_,&desktopActions_,this);
QString name=fw->currentFolderName();
QPixmap pix=MvQIconProvider::pixmap(fw->currentFolder(),24);
addTab(fw,pix,name);
-
+
+ setTabToolTip(count()-1,path);
+ setTabData(count()-1,path);
+
connect(fw,SIGNAL(pathChanged()),
this,SLOT(slotPathChanged()));
@@ -352,14 +546,6 @@ MvQFolderWidget *MvQFolderPanel::addWidget(QString path)
connect(fw,SIGNAL(itemInfoChanged(QString)),
this,SIGNAL(itemInfoChanged(QString)));
- //IMPORTANT!!!
- //We need to call it here because if the -stylesheet command-line option is used
- //Qt changes icon positions in the listview and arrange them on a grid. By calling
- //this function the original icon positions are regained in the view.
- fw->initIconPositions();
-
- setDefaults(this);
-
return fw;
}
@@ -431,9 +617,43 @@ MvQFolderWidget *MvQFolderPanel::currentFolderWidget()
void MvQFolderPanel::slotCurrentWidgetChanged(int /*index*/)
{
emit currentWidgetChanged();
- setDefaults(this);
}
+void MvQFolderPanel::slotNewTab(bool)
+{
+ if(Folder *f=currentFolder())
+ {
+ QString p=QString::fromStdString(f->fullName());
+ addWidget(p);
+ }
+}
+
+void MvQFolderPanel::slotNewWindow(bool)
+{
+ if(Folder* f=currentFolder())
+ {
+ QString p=QString::fromStdString(f->fullName());
+ MvQFileBrowser::openBrowser(p,this);
+ }
+}
+
+void MvQFolderPanel::slotIconDroppedToTab(int index,QDropEvent* event)
+{
+ if(MvQFolderWidget *w=folderWidget(index))
+ {
+ MvQFolderViewBase::dropToFolder(w->currentFolder(),event);
+ }
+}
+
+void MvQFolderPanel::slotFindIcons(FolderSearchData* data)
+{
+ MvQFolderWidget *w=currentFolderWidget();
+ if(w)
+ {
+ w->findIcons(data);
+ }
+}
+
//====================================================
// Navigation
//===================================================
@@ -516,17 +736,16 @@ void MvQFolderPanel::slotChFolderFromBreadcrumbs(QString p)
if(w) w->chFolderFromBreadcrumbs(p);
}
-void MvQFolderPanel::setViewMode(MvQ::FolderViewMode mode)
+void MvQFolderPanel::setViewMode(Desktop::FolderViewMode mode)
{
MvQFolderWidget *w=currentFolderWidget();
if(w) w->setViewMode(mode);
- setDefaults(this);
}
-MvQ::FolderViewMode MvQFolderPanel::viewMode()
+Desktop::FolderViewMode MvQFolderPanel::viewMode()
{
MvQFolderWidget *w=currentFolderWidget();
- return (w)?w->viewMode():MvQ::NoViewMode;
+ return (w)?w->viewMode():FolderSettings::defaultViewMode();
}
bool MvQFolderPanel::viewModeGrid()
@@ -546,14 +765,16 @@ void MvQFolderPanel::slotPathChanged()
if(index >=0)
{ setTabText(index,fw->currentFolderName());
QPixmap pix=MvQIconProvider::pixmap(fw->currentFolder(),24);
- setTabIcon(index,pix);
+ setTabIcon(index,pix);
+ setTabToolTip(index,fw->currentFolderPath());
+ setTabData(index,fw->currentFolderPath());
}
}
if(fw)
- emit pathChanged(fw->folderNavigation());
-
- setDefaults(this);
+ {
+ emit pathChanged();
+ }
}
@@ -562,7 +783,14 @@ void MvQFolderPanel::slotIconCommand(QString name,IconObjectH obj)
if(!obj)
return;
- setDefaults(this);
+ if(name == "open")
+ {
+ MvQFolderWidget *w=currentFolderWidget();
+ if(w)
+ {
+ w->chFolder(QString::fromStdString(obj->fullName()));
+ }
+ }
if(name == "openInTab")
{
@@ -584,7 +812,7 @@ void MvQFolderPanel::slotPathCommand(QString name,QString path)
}
else if(name == "openInWin")
{
- MvQFileBrowser::openBrowser(path);
+ MvQFileBrowser::openBrowser(path,this);
}
else if(name == "bookmark")
{
@@ -601,6 +829,23 @@ void MvQFolderPanel::slotDesktopCommand(QString name, QPoint)
desktopActions_.trigger(name);
}
+void MvQFolderPanel::slotIconCommandFromMain(QAction* ac)
+{
+ if(ac && !ac->data().toString().isEmpty())
+ {
+ MvQFolderWidget *w=currentFolderWidget();
+ if(w)
+ {
+ w->iconCommandFromMain(ac->data().toString());
+ }
+ }
+}
+
+void MvQFolderPanel::addIconAction(QAction* ac)
+{
+ iconActions_.add(ac);
+}
+
void MvQFolderPanel::addDesktopAction(QAction* ac)
{
desktopActions_.add(ac);
@@ -615,19 +860,19 @@ void MvQFolderPanel::addDesktopAction(QAction* ac)
void MvQFolderPanel::slotGridByName(bool)
{
MvQFolderWidget *w=currentFolderWidget();
- if(w) w->toGrid(MvQ::GridSortByName);
+ if(w) w->toGrid(Desktop::GridSortByName);
}
void MvQFolderPanel::slotGridBySize(bool)
{
MvQFolderWidget *w=currentFolderWidget();
- if(w) w->toGrid(MvQ::GridSortBySize);
+ if(w) w->toGrid(Desktop::GridSortBySize);
}
void MvQFolderPanel::slotGridByType(bool)
{
MvQFolderWidget *w=currentFolderWidget();
- if(w) w->toGrid(MvQ::GridSortByType);
+ if(w) w->toGrid(Desktop::GridSortByType);
}
void MvQFolderPanel::slotShowLastCreated(bool)
@@ -638,15 +883,17 @@ void MvQFolderPanel::slotShowLastCreated(bool)
void MvQFolderPanel::saveFolderInfo()
{
- MvQFolderWidget *w=currentFolderWidget();
- if(w) w->saveFolderInfo();
+ for(int i=0; i < count(); i++)
+ {
+ if(MvQFolderWidget* w=folderWidget(i))
+ w->saveFolderInfo();
+ }
}
void MvQFolderPanel::setIconSize(int iconSize)
{
MvQFolderWidget *w=currentFolderWidget();
if(w) w->setIconSize(iconSize);
- setDefaults(this);
}
void MvQFolderPanel::forceIconSize(int iconSize)
@@ -655,31 +902,11 @@ void MvQFolderPanel::forceIconSize(int iconSize)
{
if(MvQFolderWidget* w=folderWidget(i))
{
- Folder *f=w->currentFolder();
- qDebug() << "LOCK" << QString::fromStdString(f->name()) << f->iconSizeLock();
- if(f && f->iconSizeLock() == -1)
- {
- qDebug() << "SET";
- w->setIconSize(iconSize);
- }
+ w->setIconSize(iconSize);
}
}
- setDefaults(this);
}
-bool MvQFolderPanel::iconSizeLock()
-{
- MvQFolderWidget *w=currentFolderWidget();
- return (w)?w->iconSizeLock():false;
-}
-
-void MvQFolderPanel::setIconSizeLock(bool b)
-{
- MvQFolderWidget *w=currentFolderWidget();
- if(w) w->setIconSizeLock(b);
-}
-
-
int MvQFolderPanel::iconSize()
{
MvQFolderWidget *w=currentFolderWidget();
@@ -698,27 +925,27 @@ MvQFolderNavigation* MvQFolderPanel::folderNavigation()
//==========================================================
//
-// Rescan
+// Show an icon
//
//==========================================================
-void MvQFolderPanel::slotReload(bool)
+void MvQFolderPanel::slotShowIcon(IconObject* obj)
{
- MvQFolderWidget *w=currentFolderWidget();
- if(w) w->reload();
-}
+ MvQFolderWidget *w=currentFolderWidget();
+ if(w) w->showIcon(obj);
+}
//==========================================================
//
-// Static methods
+// Rescan
//
//==========================================================
-void MvQFolderPanel::setDefaults(MvQFolderPanel* panel)
+void MvQFolderPanel::slotReload(bool)
{
- MvQDesktopSettings::viewMode_=panel->viewMode();
- MvQDesktopSettings::iconSize_=panel->iconSize();
-}
+ MvQFolderWidget *w=currentFolderWidget();
+ if(w) w->reload();
+}
//==========================================================
//
@@ -779,5 +1006,6 @@ void MvQFolderPanel::readSettings(QSettings &settings)
addWidget(mvHomePath_);
}
- setDefaults(this);
-}
\ No newline at end of file
+ if(QWidget *w=currentFolderWidget())
+ w->setFocus();
+}
diff --git a/src/Desktop/MvQFolderPanel.h b/src/Desktop/MvQFolderPanel.h
index 3237afc..3a064f7 100644
--- a/src/Desktop/MvQFolderPanel.h
+++ b/src/Desktop/MvQFolderPanel.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -15,13 +15,17 @@
#include <QString>
#include <QWidget>
-#include "MvQ.h"
+#include "Desktop.h"
+#include "MvQActionList.h"
class QMenu;
class QStackedWidget;
class QTabBar;
+class QToolButton;
class QVBoxLayout;
+class FolderSearchData;
+
class MvQContextItemSet;
class MvQFolderHistory;
class MvQFolderNavigation;
@@ -33,18 +37,6 @@ class Folder;
using namespace std;
-class MvQActionList
-{
-public:
- MvQActionList() {}
- void add(QAction* ac) {lst_ << ac;}
- bool trigger(QString);
-
-protected:
- QList<QAction*> lst_;
-};
-
-
class MvQTabWidget : public QWidget
{
Q_OBJECT
@@ -60,13 +52,16 @@ public:
void addTab(QWidget *,QPixmap,QString);
void setTabText(int,QString);
void setTabIcon(int,QPixmap);
+ void setTabToolTip(int index,QString txt);
+ void setTabData(int index,QString txt);
int count() const;
- void clear();
+ void clear();
public slots:
void removeTab(int);
void removeOtherTabs(int);
void setCurrentIndex(int);
+ void slotTabList();
private slots:
void slotContextMenu(const QPoint&);
@@ -75,15 +70,27 @@ private slots:
signals:
void currentIndexChanged(int);
+ void newTabRequested(bool);
+ void iconDropped(int,QDropEvent*);
protected:
virtual MvQContextItemSet* cmSet()=0;
virtual void tabBarCommand(QString,int)=0;
virtual QString folderPath(int)=0;
+
+ void checkDropTarget(QDropEvent *event);
+ void removeDropTarget();
+ void dragEnterEvent(QDragEnterEvent *event);
+ void dragMoveEvent(QDragMoveEvent *event);
+ void dragLeaveEvent(QDragLeaveEvent *event);
+ void dropEvent(QDropEvent *event);
+ void paintEvent(QPaintEvent *);
private:
QTabBar *bar_;
- QStackedWidget *stacked_;
+ QStackedWidget *stacked_;
+ QToolButton* addTb_;
+ QToolButton* tabListTb_;
};
class MvQFolderPanel : public MvQTabWidget
@@ -97,20 +104,18 @@ public:
Folder* currentFolder();
QList<Folder*> currentFolders();
void setHistoryMenu(QMenu*);
- void setViewMode(MvQ::FolderViewMode);
- MvQ::FolderViewMode viewMode();
+ void setViewMode(Desktop::FolderViewMode);
+ Desktop::FolderViewMode viewMode();
bool viewModeGrid();
void setIconSize(int);
int iconSize();
void forceIconSize(int);
- void setIconSizeLock(bool);
- bool iconSizeLock();
MvQFolderNavigation* folderNavigation();
void saveFolderInfo();
MvQFolderWidget* addWidget(QString);
void resetWidgets(QStringList);
+ void addIconAction(QAction*);
void addDesktopAction(QAction*);
- void setDefaults() {setDefaults(this);}
void writeSettings(QSettings &);
void readSettings(QSettings &);
@@ -134,10 +139,16 @@ public slots:
void slotReload(bool);
void slotPathChanged();
void slotShowLastCreated(bool);
+ void slotNewTab(bool);
+ void slotNewWindow(bool);
+ void slotIconDroppedToTab(int,QDropEvent*);
+ void slotShowIcon(IconObject*);
+ void slotFindIcons(FolderSearchData*);
+ void slotIconCommandFromMain(QAction* ac);
signals:
void itemInfoChanged(QString);
- void pathChanged(MvQFolderNavigation*);
+ void pathChanged();
void currentWidgetChanged();
protected:
@@ -150,10 +161,9 @@ protected:
QString mvHomePath_;
MvQFolderHistory* folderHistory_;
+ MvQActionList iconActions_;
MvQActionList desktopActions_;
-private:
- static void setDefaults(MvQFolderPanel*);
};
#endif
diff --git a/src/Desktop/MvQFolderViewBase.cc b/src/Desktop/MvQFolderViewBase.cc
index 5dda269..dd6eeee 100644
--- a/src/Desktop/MvQFolderViewBase.cc
+++ b/src/Desktop/MvQFolderViewBase.cc
@@ -1,26 +1,33 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
+#include <QApplication>
+#include <QClipboard>
#include <QDebug>
+#include <QDrag>
+#include <QDropEvent>
#include <QMessageBox>
#include <QObject>
+#include <QPainter>
#include <QShortcut>
#include "MvQFolderViewBase.h"
#include "MvQBookmarks.h"
#include "MvQContextMenu.h"
+#include "MvQDesktopSettings.h"
#include "MvQFileBrowser.h"
#include "MvQFileDialog.h"
-#include "MvQFileSystemModel.h"
#include "MvQFolderItemProperty.h"
#include "MvQFolderModel.h"
+#include "MvQIconMimeData.h"
+#include "MvQIconProvider.h"
#include "MvQNewIconWidget.h"
#include "Command.h"
@@ -30,11 +37,9 @@
#include "IconInfo.h"
#include "IconObject.h"
-
-
-MvQFolderViewBase::MvQFolderViewBase(MvQFolderModel *folderModel) :
+MvQFolderViewBase::MvQFolderViewBase(MvQFolderModel *folderModel,QWidget *view) :
folderModel_(folderModel),
- //cmInit_(false),
+ view_(view),
shortCutInit_(false)
{
filterModel_= new MvQFolderFilterModel;
@@ -67,7 +72,6 @@ Folder* MvQFolderViewBase::currentFolder()
bool MvQFolderViewBase::changeFolderToParent()
{
bool retVal=folderModel_->setFolderToParent();
- setPositions();
return retVal;
}
@@ -76,21 +80,18 @@ bool MvQFolderViewBase::changeFolder(const QModelIndex& index,IndexType indexTyp
QModelIndex folderIndex=(indexType == FilterModelIndex)?filterModel_->mapToSource(index):index;
bool retVal=folderModel_->setFolder(folderIndex);
- setPositions();
return retVal;
}
-bool MvQFolderViewBase::changeFolder(QString fullName)
+bool MvQFolderViewBase::changeFolder(QString fullName,int iconSize)
{
- bool retVal=folderModel_->setFolder(fullName);
- setPositions();
+ bool retVal=folderModel_->setFolder(fullName,iconSize);
return retVal;
}
-bool MvQFolderViewBase::changeFolder(Folder *folder)
+bool MvQFolderViewBase::changeFolder(Folder *folder,int iconSize)
{
- bool retVal=folderModel_->setFolder(folder);
- setPositions();
+ bool retVal=folderModel_->setFolder(folder,iconSize);
return retVal;
}
@@ -106,14 +107,11 @@ void MvQFolderViewBase::handleDoubleClick(const QModelIndex& index)
IconObject *obj=folderModel_->objectFromIndex(filterModel_->mapToSource(index));
if(obj)
{
- QString method=QString::fromStdString(obj->iconClass().doubleClickMethod()).toLower();
+ QString method=QString::fromStdString(obj->iconClass().defaultMethod()).toLower();
if(obj->isFolder())
{
- if(changeFolder(index,FilterModelIndex))
- {
- folderChanged();
- }
+ iconCommand("open",obj);
return;
}
else if(!method.isEmpty())
@@ -180,34 +178,78 @@ void MvQFolderViewBase::handleContextMenu(QModelIndex indexClicked,QModelIndexLi
}
-void MvQFolderViewBase::handleIconShortCut(QShortcut* sc,const QModelIndex& index)
+void MvQFolderViewBase::handleIconShortCut(QShortcut* sc,QModelIndexList indexLst)
{
if(!sc)
return;
- //Icon actions
- if(index.isValid() && index.column() == 0)
+ vector<IconObject*> objLst;
+ for(int i=0; i < indexLst.count(); i++)
{
- IconObject* obj=folderModel_->objectFromIndex(filterModel_->mapToSource(index));
- //icon command
- if(obj)
- {
- QString selection=sc->property("cmd").toString();
- qDebug() << "selection" << selection;
- if(!selection.isEmpty())
- {
- handleIconCommand(obj,selection);
- }
- }
+ IconObject* obj=folderModel_->objectFromIndex(filterModel_->mapToSource(indexLst[i]));
+ if(obj)
+ objLst.push_back(obj);
}
+
+ if(objLst.size() > 0)
+ {
+ QString selection=sc->property("cmd").toString();
+ qDebug() << "icon shortcut selection" << selection;
+ if(!selection.isEmpty())
+ {
+ handleIconCommand(objLst,selection);
+ }
+ }
}
+void MvQFolderViewBase::handleDesktopShortCut(QShortcut* sc,QPoint pos,QWidget *widget)
+{
+ if(!sc)
+ return;
+
+ QString selection=sc->property("cmd").toString();
+ if(!selection.isEmpty())
+ handleDesktopCommand(selection,pos,widget);
+}
-void MvQFolderViewBase::handleIconCommand(const vector<IconObject*>& objLst,QString name)
+void MvQFolderViewBase::handleIconCommand(QModelIndexList indexLst,QString name)
{
+ vector<IconObject*> objLst;
+ for(int i=0; i < indexLst.count(); i++)
+ {
+ IconObject* obj=folderModel_->objectFromIndex(filterModel_->mapToSource(indexLst[i]));
+ if(obj) objLst.push_back(obj);
+ }
+
+ if(objLst.size() > 0)
+ {
+ handleIconCommand(objLst,name);
+ }
+}
+
+void MvQFolderViewBase::handleIconCommand(const vector<IconObject*>& objLstIn,QString name)
+{
+ //Selects the iconobjects for that the command is valid
+ vector<IconObject*> objLst;
+ for(vector<IconObject*>::const_iterator it=objLstIn.begin(); it!=objLstIn.end(); it++)
+ {
+ if(*it)
+ {
+ std::set<string> cmdSet=(*it)->can();
+ QString canCmd=name;
+ if(name.startsWith("compress_"))
+ canCmd="compress";
+
+ if(cmdSet.find(canCmd.toStdString()) != cmdSet.end())
+ {
+ objLst.push_back(*it);
+ }
+ }
+ }
+
if(IconGroupTools::can(name.toStdString()))
{
- if(objLst.size() > 0)
+ if(objLst.size() > 0)
{
folderModel_->setPositionHint("",objLst[0]->info().x()+32,
objLst[0]->info().y()+32);
@@ -223,18 +265,48 @@ void MvQFolderViewBase::handleIconCommand(const vector<IconObject*>& objLst,QStr
(*it)->command(name.toStdString());
}
}
+ else if(name == "copy")
+ {
+ if(objLst.size() > 0)
+ {
+ QList<IconObject*> lst;
+ for(vector<IconObject*>::const_iterator it=objLst.begin(); it!=objLst.end(); it++)
+ lst << *it;
+
+ copyToClipboard(lst.at(0),lst);
+ }
+ }
+ else if(name == "cut")
+ {
+ if(objLst.size() > 0)
+ {
+ QList<IconObject*> lst;
+ for(vector<IconObject*>::const_iterator it=objLst.begin(); it!=objLst.end(); it++)
+ {
+ //(*it)->notifyCutBegin();
+ lst << *it;
+ }
+
+ cutToClipboard(lst.at(0),lst);
+ }
+ }
else
{
for(vector<IconObject*>::const_iterator it=objLst.begin(); it!=objLst.end(); it++)
handleIconCommand(*it,name);
}
}
-
+
void MvQFolderViewBase::handleIconCommand(IconObject* obj,QString name)
{
if(!obj)
return;
+ //Check if the command is valid for the object
+ std::set<string> cmdSet=obj->can();
+ if(cmdSet.find(name.toStdString()) == cmdSet.end())
+ return;
+
//Delete icon (permanently)
if(name == "destroy")
{
@@ -247,23 +319,28 @@ void MvQFolderViewBase::handleIconCommand(IconObject* obj,QString name)
//Other actions
else if(Command::isValid(name.toStdString()))
{
+ if(name == "save")
+ {
+ folderModel_->setPositionHint("",obj->info().x()+32,
+ obj->info().y()+32);
+ }
+
obj->command(name.toStdString());
}
- else if(name == "open")
- {
- if(obj->isFolder() && changeFolder(folderModel_->indexFromObject(obj)))
- {
- folderChanged();
- }
- }
else if(name == "openInWin")
{
- MvQFileBrowser::openBrowser(QString::fromStdString(obj->fullName()));
+ MvQFileBrowser::openBrowser(QString::fromStdString(obj->fullName()),view_);
}
else if(name == "bookmark")
{
MvQBookmarks::addItem(obj);
}
+ else if(name == "copy")
+ {
+ QList<IconObject*> lst;
+ lst << obj;
+ copyToClipboard(obj,lst);
+ }
else
{
iconCommand(name,obj);
@@ -291,15 +368,23 @@ void MvQFolderViewBase::handleDesktopCommand(QString name,QPoint pos,QWidget *wi
if(dialog.exec() == QDialog::Accepted)
{
const IconClass &kind=dialog.selected();
- kind.createOne(folder,pos.x(),pos.y());
- showLastCreated();
+ QPoint refPos=itemProp_->referencePosition(QString::fromStdString(kind.name()),pos);
+ kind.createOne(folder,refPos.x(),refPos.y());
+ //showLastCreated();
}
}
- else if(name == "createLink")
+ else if(name == "createLinkToFile" || name == "createLinkToFolder")
{
MvQFileDialog dialog(QString::fromStdString(folder->path().str()),QObject::tr("Create symbolic link"),widget);
dialog.setAcceptMode(QFileDialog::AcceptOpen);
+ if(name == "createLinkToFile" )
+ dialog.setFileMode(QFileDialog::ExistingFile);
+ else
+ dialog.setFileMode(QFileDialog::Directory);
+
+ dialog.setLabelText(QFileDialog::Accept,"Ok");
+
if(dialog.exec() == QDialog::Accepted)
{
QStringList lst=dialog.selectedFiles();
@@ -324,10 +409,40 @@ void MvQFolderViewBase::handleDesktopCommand(QString name,QPoint pos,QWidget *wi
{
MvQBookmarks::addItem(folder);
}
+ else if(name == "paste")
+ {
+ fromClipboard(pos);
+ }
else
desktopCommand(name,pos);
}
-
+
+void MvQFolderViewBase::copyToClipboard(IconObject *obj,QList<IconObject*> lst)
+{
+ MvQIconMimeData* data=buildClipboardData(obj,lst,false,true);
+ QApplication::clipboard()->setMimeData(data);
+}
+
+
+void MvQFolderViewBase::cutToClipboard(IconObject *obj,QList<IconObject*> lst)
+{
+ MvQIconMimeData* data=buildClipboardData(obj,lst,false,false);
+ QApplication::clipboard()->setMimeData(data);
+}
+
+void MvQFolderViewBase::fromClipboard(QPoint pos)
+{
+ const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(QApplication::clipboard()->mimeData());
+ //If there is data we simulate drop
+ if(mimeData)
+ {
+ if(mimeData->clipboardAction() == MvQIconMimeData::CopyAction)
+ performDrop(Qt::CopyAction,mimeData,pos,false);
+ else if(mimeData->clipboardAction() == MvQIconMimeData::CutAction)
+ performDrop(Qt::MoveAction,mimeData,pos,false);
+ }
+}
+
bool MvQFolderViewBase::confirmDelete(int count)
{
QString txt1, txt2;
@@ -416,3 +531,346 @@ void MvQFolderViewBase::showLastCreated()
QModelIndex index=filterModel_->mapFromSource(folderModel_->lastArrived());
blink(index);
}
+
+
+QPixmap MvQFolderViewBase::dragPixmapWithCount(IconObject *dragObj,int cnt,QRect& iconPix)
+{
+ QFont f("Courier");
+ f.setStyleHint(QFont::TypeWriter);
+ f.setFixedPitch(true);
+ f.setPointSize(9);
+ f.setBold(true);
+
+ QFontMetrics fm(f);
+ QRect textRect(0,0,fm.width(QString::number(cnt)),fm.height());
+ int padding=2;
+ int overlapx=4;
+ int overlapy=10;
+
+ QPixmap pix(getIconSize()+textRect.width()+2*padding+2+1-overlapx,
+ getIconSize()+textRect.height()+2*padding+2+1-overlapy);
+
+ pix.fill(Qt::transparent);
+
+ QPainter painter(&pix);
+
+ painter.drawPixmap(0,pix.height()-getIconSize(),
+ MvQIconProvider::pixmap(dragObj->iconClass(),getIconSize()));
+
+ iconPix=QRect(0,pix.height()-getIconSize(),getIconSize(),getIconSize());
+
+ //Item count indicator
+ QPen pen(Qt::black);
+ QBrush brush(QColor(255,230,191));
+ painter.setPen(pen);
+ painter.setBrush(brush);
+ painter.setFont(f);
+
+ //painter.setRenderHint(QPainter::Antialiasing,true);
+
+ QRect cntRect(getIconSize()-overlapx+2,1,textRect.width()+2*padding,textRect.height()+2*padding);
+ painter.drawRoundedRect(cntRect,2,2);
+
+ cntRect.adjust(-2,2,-2,2);
+ painter.drawRoundedRect(cntRect,2,2);
+
+ painter.setPen(Qt::black);
+ painter.drawText(cntRect,Qt::AlignVCenter | Qt::AlignHCenter,QString::number(cnt));
+
+ QPoint hotSpot(getIconSize(),pix.height());
+
+ return pix;
+}
+
+
+MvQIconMimeData *MvQFolderViewBase::buildClipboardData(IconObject *dragObj,QList<IconObject*> objLst,bool fromHelper,bool copy)
+{
+ if(dragObj && objLst.contains(dragObj))
+ {
+ //Hotspot is the bottom right corner of the dragged object's pixmap
+ QPoint hotSpotInPix(1,1);
+
+ //It has to as many elements as there are in objLst
+ QList<QPoint> pixDistanceLst; //It has
+
+ //Multiple items
+ if(objLst.count() > 1)
+ {
+ //Pixmap rect of the drag object
+ QRect rect=pixmapRect(dragObj);
+
+ //Find bounding box for selected pixmap rects
+ QRect bbox=pixmapRect(objLst);
+
+ for(int i=0; i < objLst.count(); i++)
+ {
+ QRect vr=pixmapRect(objLst[i]);
+
+ //Normalised distance of the pixmap's bottom right corner from the
+ //bottom right corner of the dragged object's pixmap
+ pixDistanceLst << (vr.bottomRight()-rect.bottomRight())/getIconSize();
+ }
+ }
+
+ //Single item
+ else
+ {
+ pixDistanceLst << QPoint(0,0);
+ }
+
+ MvQIconMimeData::ClipboardAction ca;
+ if(copy)
+ ca=MvQIconMimeData::CopyAction;
+ else
+ ca=MvQIconMimeData::CutAction;
+
+ //Create and set drag mime data
+ MvQIconMimeData *mimeData= new MvQIconMimeData(folderModel_,
+ dragObj,hotSpotInPix,
+ objLst,pixDistanceLst,ca);
+ mimeData->setFromHelper(fromHelper);
+
+ return mimeData;
+ }
+
+ return 0;
+}
+
+QDrag* MvQFolderViewBase::buildDrag(IconObject *dragObj,QList<IconObject*> objLst,bool fromHelper,QWidget* dragParent,QPoint dragPos)
+{
+ if(dragObj && objLst.contains(dragObj))
+ {
+ QDrag *drag=new QDrag(dragParent);
+
+ //Hotspot is the bottom right corner of the dragged object's pixmap
+ //we overwrite it if dragPos is null!!
+ QPointF hotSpotInPix(1,1);
+
+ //It has to have as many elements as there are in objLst
+ QList<QPoint> pixDistanceLst;
+
+ //Multiple items
+ if(objLst.count() > 1)
+ {
+ if(MvQDesktopSettings::dragPolicy() == Desktop::DragShowAllIcons)
+ {
+ //Pixmap rect of the drag object
+ QRect rect=pixmapRect(dragObj);
+
+ //Find bounding box for selected pixmap rects
+ QRect bbox=pixmapRect(objLst);
+
+ //Render the drag pixmap --> will contain all the icons pixmaps!
+ QPixmap pix(bbox.size());
+ pix.fill(Qt::transparent);
+ QPainter painter(&pix);
+
+ for(int i=0; i < objLst.count(); i++)
+ {
+ QRect vr=pixmapRect(objLst[i]);
+ painter.drawPixmap(vr.topLeft()-bbox.topLeft(),
+ MvQIconProvider::pixmap(objLst.at(i)->iconClass(),getIconSize()));
+
+ //Normalised distance of the pixmap's bottom right corner from the
+ //bottom right corner of the dragged object's pixmap
+ pixDistanceLst << (vr.bottomRight()-rect.bottomRight())/getIconSize();
+ }
+
+ drag->setPixmap(pix);
+
+ QPoint hotSpot;
+
+ //Hotspot is the bottom right corner of the dragged object's pixmap
+ if(dragPos.isNull())
+ {
+ hotSpot=rect.bottomRight()-bbox.topLeft();
+ hotSpotInPix=QPointF(1,1);
+ }
+ //We use the real drag position if dragPos in not present
+ else
+ {
+ hotSpot=dragPos-bbox.topLeft();
+ hotSpotInPix=QPointF(dragPos.x()-(rect.center().x()-getIconSize()/2),
+ dragPos.y()-rect.top());
+ hotSpotInPix/=getIconSize();
+ }
+
+ drag->setHotSpot(hotSpot);
+ }
+ else
+ {
+ //Pixmap rect of the drag object
+ QRect rect=pixmapRect(dragObj);
+
+ for(int i=0; i < objLst.count(); i++)
+ {
+ QRect vr=pixmapRect(objLst[i]);
+
+ //Normalised distance of the pixmap's bottom right corner from the
+ //bottom right corner of the dragged object's pixmap
+ pixDistanceLst << (vr.bottomRight()-rect.bottomRight())/getIconSize();
+ }
+
+ QRect iconPix;
+ QPixmap pix=dragPixmapWithCount(dragObj,objLst.count(),iconPix);
+ drag->setPixmap(pix);
+
+ //Hotspot is the bottom right corner of the dragged object's pixmap
+ QPoint hotSpot(iconPix.bottomRight());
+ hotSpotInPix=QPointF(1,1);
+ drag->setHotSpot(hotSpot);
+ }
+ }
+
+ //Single item
+ else
+ {
+ drag->setPixmap(MvQIconProvider::pixmap(dragObj->iconClass(),getIconSize()));
+
+ QPoint hotSpot;
+ if(dragPos.isNull())
+ {
+ hotSpot=QPoint(getIconSize(),getIconSize());
+ hotSpotInPix=QPointF(1,1);
+ }
+ //We use the real drag position
+ else
+ {
+ //Pixmap rect of the drag object
+ QRect rect=pixmapRect(dragObj);
+
+ hotSpot=QPoint(dragPos.x()-(rect.center().x()-getIconSize()/2),
+ dragPos.y()-rect.top());
+
+ hotSpotInPix=hotSpot;
+ hotSpotInPix/=getIconSize();
+ }
+
+ drag->setHotSpot(hotSpot);
+
+ pixDistanceLst << QPoint(0,0);
+
+ }
+
+
+ //Create and set drag mime data
+ MvQIconMimeData *mimeData= new MvQIconMimeData(folderModel_,
+ dragObj,hotSpotInPix,
+ objLst,pixDistanceLst);
+
+ mimeData->setFromHelper(fromHelper);
+
+ drag->setMimeData(mimeData);
+
+ return drag;
+ }
+
+ return 0;
+}
+
+void MvQFolderViewBase::dropToFolder(Folder *folder,QDropEvent* event)
+{
+ if(!folder || folder->locked())
+ {
+ event->ignore();
+ return;
+ }
+
+ if(!event->source())
+ {
+ event->ignore();
+ return;
+ }
+
+ if(event->proposedAction() != Qt::CopyAction &&
+ event->proposedAction() != Qt::MoveAction)
+ {
+ event->ignore();
+ return;
+ }
+
+ //--------------------------------------
+ // Drag and drop from another Metview folder
+ //--------------------------------------
+
+ if(event->mimeData()->hasFormat("metview/icon"))
+ {
+ const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+
+ if(!mimeData)
+ {
+ event->ignore();
+ return;
+ }
+
+ IconObject* dragObj=mimeData->dragObject();
+ MvQFolderModel *model=mimeData->model();
+
+ //Ignore drops from the same folder
+ if(dragObj && dragObj->parent() == folder)
+ {
+ event->ignore();
+ return;
+ }
+
+ //Drop from another view/model or from the clipboard --> copy or move
+ if(model && dragObj)
+ {
+
+ for(int i=0; i < mimeData->objects().count(); i++)
+ {
+ IconObject *obj=mimeData->objects().at(i);
+
+ //We set the object position to zero. This will instuct the icon folder view
+ //(when the folder is next open in it) to find meaningful positions to the
+ //icons.
+
+ //Copy
+ if(event->proposedAction() == Qt::CopyAction)
+ {
+ obj->clone(folder,false,0,0);
+ }
+
+ //Move
+ else if(event->proposedAction() == Qt::MoveAction)
+ {
+ obj->position(0,0);
+ folder->adopt(obj);
+ }
+ }
+
+ event->accept();
+ return;
+ }
+ }
+ else if(event->mimeData()->hasFormat("metview/new_icon"))
+ {
+ const MvQNewIconMimeData* mimeData=qobject_cast<const MvQNewIconMimeData*>(event->mimeData());
+
+ if(!mimeData)
+ {
+ event->ignore();
+ return;
+ }
+
+ if(mimeData->iconDefType() == MvQNewIconMimeData::UserDef)
+ {
+ const IconClass &kind=IconClass::find(mimeData->className().toStdString());
+ kind.createOne(folder);
+ event->accept();
+ return;
+ }
+ }
+
+
+ event->ignore();
+}
+
+void MvQFolderViewBase::showIcon(IconObject *obj)
+{
+ if(!obj) return;
+
+ QModelIndex index=filterModel_->mapFromSource(folderModel_->indexFromObject(obj));
+ if(index.isValid())
+ showIcon(index);
+}
diff --git a/src/Desktop/MvQFolderViewBase.h b/src/Desktop/MvQFolderViewBase.h
index 1a10b28..1dc8bfe 100644
--- a/src/Desktop/MvQFolderViewBase.h
+++ b/src/Desktop/MvQFolderViewBase.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -13,10 +13,11 @@
#include <QDebug>
#include <QFile>
#include <QModelIndexList>
+#include <QPixmap>
#include <QPoint>
#include <QStringList>
-#include "MvQ.h"
+#include "Desktop.h"
#include <vector>
#include <string>
@@ -26,15 +27,16 @@
using std::string;
using std::vector;
+class QDrag;
class QModelIndex;
class QShortcut;
class QWidget;
class MvQContextItemSet;
-class MvQFileSystemModel;
class MvQFolderFilterModel;
class MvQFolderItemProperty;
class MvQFolderModel;
+class MvQIconMimeData;
class IconClass;
class IconObject;
@@ -47,31 +49,39 @@ class MvQFolderViewBase
public:
enum IndexType {FsModelIndex, FilterModelIndex};
- MvQFolderViewBase(MvQFolderModel*);
+ MvQFolderViewBase(MvQFolderModel*,QWidget*);
virtual ~MvQFolderViewBase();
Folder* currentFolder();
bool changeFolderToParent();
- bool changeFolder(QString);
- bool changeFolder(Folder*);
+ bool changeFolder(QString,int iconSize=-1);
+ bool changeFolder(Folder*,int iconSize=-1);
bool isFolder(const QModelIndex&,IndexType indexType=FsModelIndex);
QString fullName(const QModelIndex&,IndexType indexType=FsModelIndex);
MvQFolderModel* folderModel() const {return folderModel_;}
void showLastCreated();
+ virtual void doReset()=0;
+ virtual void iconCommandFromMain(QString)=0;
int getIconSize();
- virtual void toGrid(MvQ::GridSortMode) {};
+ virtual void toGrid(Desktop::GridSortMode) {};
+ void showIcon(IconObject *);
+
+ virtual QWidget* concreteWidget()=0;
+
+ static void dropToFolder(Folder*,QDropEvent*);
protected:
bool changeFolder(const QModelIndex&,IndexType indexType=FsModelIndex);
virtual void folderChanged()=0;
- virtual void setPositions()=0;
virtual void blink(const QModelIndex&)=0;
+ virtual void showIcon(const QModelIndex&)=0;
virtual void iconSizeChanged() {};
void handleDoubleClick(const QModelIndex&);
void handleContextMenu(QModelIndex,QModelIndexList,QPoint,QPoint,QWidget*);
- void handleIconShortCut(QShortcut*,const QModelIndex&);
+ void handleIconShortCut(QShortcut*,QModelIndexList);
+ void handleDesktopShortCut(QShortcut* sc,QPoint pos,QWidget *widget);
virtual void iconCommand(QString,IconObjectH)=0;
virtual void desktopCommand(QString,QPoint)=0;
@@ -82,14 +92,32 @@ protected:
bool isAccepted(const IconClass&);
bool isAccepted(IconObject*);
+ void handleIconCommand(QModelIndexList indexLst,QString name);
+
virtual MvQContextItemSet* cmSet()=0;
+ virtual void setupShortCut()=0;
+
+ //Drag and drop
+ virtual QRect itemRect(IconObject*)=0;
+ virtual QRect itemRect(QList<IconObject*>)=0;
+ virtual QRect pixmapRect(IconObject*)=0;
+ virtual QRect pixmapRect(QList<IconObject*>)=0;
+ virtual void performDrop(Qt::DropAction,const MvQIconMimeData*,QPoint,bool)=0;
+ QPixmap dragPixmapWithCount(IconObject *,int cnt,QRect&);
+ QDrag* buildDrag(IconObject *dragObj,QList<IconObject*> objLst,bool,QWidget*,QPoint dragPos=QPoint());
+
+ //Clipboard
+ void copyToClipboard(IconObject*,QList<IconObject*>);
+ void cutToClipboard(IconObject*,QList<IconObject*>);
+ void fromClipboard(QPoint);
+ MvQIconMimeData *buildClipboardData(IconObject *dragObj,QList<IconObject*> objLst,bool fromHelper,bool copy);
- MvQFileSystemModel *fsModel_;
MvQFolderFilterModel *filterModel_;
- MvQFolderModel *folderModel_;
- bool shortCutInit_;
+ MvQFolderModel *folderModel_;
+ QWidget* view_;
int iconSize_;
MvQFolderItemProperty* itemProp_;
+ bool shortCutInit_;
private:
void handleIconCommand(const vector<IconObject*>&,QString);
diff --git a/src/Desktop/MvQFolderViewDelegate.cc b/src/Desktop/MvQFolderViewDelegate.cc
index 294e079..6cdd6bf 100644
--- a/src/Desktop/MvQFolderViewDelegate.cc
+++ b/src/Desktop/MvQFolderViewDelegate.cc
@@ -18,14 +18,7 @@
#include <QTimer>
#include "MvQFolderModel.h"
-
-QBrush MvQFolderViewDelegate::editBrush_;
-QPen MvQFolderViewDelegate::editPen_;
-QBrush MvQFolderViewDelegate::selectBrush_;
-QPen MvQFolderViewDelegate::selectPen_;
-QBrush MvQFolderViewDelegate::hoverBrush_;
-QPen MvQFolderViewDelegate::hoverPen_;
-bool MvQFolderViewDelegate::init_=false;
+#include "MvQTheme.h"
//===========================================
//
@@ -37,38 +30,21 @@ MvQFolderViewDelegate::MvQFolderViewDelegate(QWidget *parent) :
QStyledItemDelegate(parent),
timer_(0),
blinkCnt_(-1),
- blinkNum_(3),
+ blinkNum_(5),
enablePaint_(true)
+{
+ setColours("itemview_main");
+}
+
+void MvQFolderViewDelegate::setColours(QString group)
{
- if(init_)
- return;
- else
- init_=true;
-
- editPen_=QPen(QColor(170,170,170));
- editBrush_=QBrush(QColor(200,200,200,90));
+ editPen_=QPen(MvQTheme::colour(group,"edit_pen"));
+ editBrush_=MvQTheme::brush(group,"edit_brush");
+ hoverPen_=QPen(MvQTheme::colour(group,"hover_pen"));
+ hoverBrush_=MvQTheme::brush(group,"hover_brush");
+ selectPen_=QPen(MvQTheme::colour(group,"select_pen"));
+ selectBrush_=MvQTheme::brush(group,"select_brush");
- editPen_=QPen(QColor(170,170,170));
- editBrush_=QBrush(QColor(200,200,200));
-
- QLinearGradient hoverGrad;
- hoverGrad.setCoordinateMode(QGradient::ObjectBoundingMode);
- hoverGrad.setStart(0,0);
- hoverGrad.setFinalStop(0,1);
- hoverGrad.setColorAt(0, QColor(250,250,250));
- //hoverGrad.setColorAt(1, QColor(220,230,244));
- hoverGrad.setColorAt(1, QColor(240,240,240));
- hoverBrush_=QBrush(hoverGrad);
- hoverPen_=QPen(QColor(127,154,191));
-
- QLinearGradient selectGrad;
- selectGrad.setCoordinateMode(QGradient::ObjectBoundingMode);
- selectGrad.setStart(0,0);
- selectGrad.setFinalStop(0,1);
- selectGrad.setColorAt(0, QColor(220,235,252));
- selectGrad.setColorAt(1, QColor(193,220,252));
- selectBrush_=QBrush(selectGrad);
- selectPen_=QPen(QColor(127,154,191));
}
void MvQFolderViewDelegate::blink(const QModelIndex &index)
@@ -82,7 +58,7 @@ void MvQFolderViewDelegate::blink(const QModelIndex &index)
}
blinkCnt_=0;
- timer_->start(200);
+ timer_->start(150);
}
void MvQFolderViewDelegate::slotBlink()
@@ -186,6 +162,13 @@ MvQIconDelegate::MvQIconDelegate(QWidget *parent) : MvQFolderViewDelegate(parent
{
}
+void MvQIconDelegate::setStripeMode(bool b)
+{
+ stripeMode_=b;
+ if(stripeMode_)
+ setColours("itemview_helper");
+}
+
void MvQIconDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,
const QModelIndex& index) const
{
@@ -196,6 +179,8 @@ void MvQIconDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option
if(index.column() == 0)
{
+ bool blink=(blinkCnt_ != -1 && (index == blinkIndex_ && blinkCnt_ % 2 ==0));
+
QStyleOptionViewItemV4 vopt(option);
initStyleOption(&vopt, index);
@@ -207,22 +192,19 @@ void MvQIconDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option
//Save painter state
painter->save();
-
- if(stripeMode_)
- {
- if(index.row() % 2 == 0)
- painter->fillRect(QRect(option.rect.left()-5,0,option.rect.width()+10,painter->device()->height()),
- QColor(235,235,235));
-
- }
+
QString text=index.data(Qt::DisplayRole).toString();
QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &vopt, widget);
//Background
- //If the icon editor is open we render a transparent rect above the item
- if(index.data(MvQFolderModel::EditorRole).toBool())
+ if(blink)
+ {
+ QRect fillRect=option.rect.adjusted(0,1,-1,-1);
+ painter->fillRect(fillRect,Qt::black);
+ }
+ else if(index.data(MvQFolderModel::EditorRole).toBool())
{
QRect fillRect=option.rect.adjusted(0,1,-1,-1);
painter->fillRect(fillRect,editBrush_);
@@ -247,48 +229,18 @@ void MvQIconDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option
//Pixmap
QRect iconRect = style->subElementRect(QStyle::SE_ItemViewItemDecoration, &vopt, widget);
-
- //qDebug() << "icon rect size" << iconRect.size();
-
-
- if(blinkCnt_ != -1 && (index == blinkIndex_ && blinkCnt_ % 2 ==0) )
- {
- QImage img=pixmap.toImage();
- img.invertPixels();
- painter->drawImage(iconRect,img);
- }
- else
- {
- painter->drawPixmap(iconRect,pixmap);
- }
-
+ painter->drawPixmap(iconRect,pixmap);
+
//Text rect
QFont font = index.data(Qt::FontRole).value<QFont>();
painter->setFont(font);
- painter->setPen(index.data(Qt::ForegroundRole).value<QColor>());
- /*if(option.state & QStyle::State_Editing)
- {
- painter->setPen(Qt::black);
- painter->drawRect(textRect);
- }
- else if(option.state & QStyle::State_Selected)
- {
- painter->fillRect(textRect, index.data(Qt::ForegroundRole).value<QColor>());
- painter->setPen(Qt::white);
- }
+ if(blink)
+ painter->setPen(Qt::white);
else
- {
- painter->setPen(index.data(Qt::ForegroundRole).value<QColor>());
- }*/
-
+ painter->setPen(index.data(Qt::ForegroundRole).value<QColor>());
+
painter->drawText(textRect,Qt::AlignLeft,text);
-
- if(stripeMode_)
- {
- painter->setPen(QPen(QColor(210,210,210),1));
- painter->drawLine(option.rect.topRight().x()+5,0,option.rect.topRight().x()+5,painter->device()->height());
- }
painter->restore();
}
@@ -322,6 +274,8 @@ void MvQDetailedViewDelegate::paint(QPainter *painter,const QStyleOptionViewItem
{
if(index.column() <= 5)
{
+ bool blink=(blinkCnt_ != -1 && (index == blinkIndex_ && blinkCnt_ % 2 ==0));
+
QStyleOptionViewItemV4 vopt(option);
initStyleOption(&vopt, index);
@@ -339,11 +293,12 @@ void MvQDetailedViewDelegate::paint(QPainter *painter,const QStyleOptionViewItem
if(index.column()==0)
{
QRect fillRect=QRect(option.rect.x(),option.rect.y(),painter->device()->width(),option.rect.height());
-
- //If the icon editor is open we render a transparent rect above the item
- //QRect fillRect=option.rect.adjusted(0,1,-1,-1);
-
- if(index.data(MvQFolderModel::EditorRole).toBool())
+
+ if(blink)
+ {
+ painter->fillRect(option.rect,Qt::black);
+ }
+ else if(index.data(MvQFolderModel::EditorRole).toBool())
{
painter->fillRect(fillRect,editBrush_);
painter->setPen(editPen_);
@@ -374,41 +329,19 @@ void MvQDetailedViewDelegate::paint(QPainter *painter,const QStyleOptionViewItem
{
QPixmap pixmap=index.data(Qt::DecorationRole).value<QPixmap>();
QRect iconRect = style->subElementRect(QStyle::SE_ItemViewItemDecoration, &vopt, widget);
- //iconRect.adjust(2,2,-2,-2);
-
- if(blinkCnt_ != -1 && (index == blinkIndex_ && blinkCnt_ % 2 ==0) )
- {
- QImage img=pixmap.toImage();
- img.invertPixels();
- painter->drawImage(iconRect,img);
- }
- else
- {
- painter->drawPixmap(iconRect,pixmap);
- }
+ //iconRect.adjust(2,2,-2,-2);
+ painter->drawPixmap(iconRect,pixmap);
}
//Text rect
QFont font = index.data(Qt::FontRole).value<QFont>();
painter->setFont(font);
- painter->setPen(index.data(Qt::ForegroundRole).value<QColor>());
-
- /*if(option.state & QStyle::State_Editing)
- {
- painter->setPen(Qt::black);
- painter->drawRect(textRect);
- }
- else if(option.state & QStyle::State_Selected)
- {
- painter->fillRect(textRect, index.data(Qt::ForegroundRole).value<QColor>());
+ if(blink)
painter->setPen(Qt::white);
- }
else
- {
painter->setPen(index.data(Qt::ForegroundRole).value<QColor>());
- }*/
-
+
painter->drawText(textRect,Qt::AlignLeft | Qt::AlignVCenter,text);
//restore painter state
diff --git a/src/Desktop/MvQFolderViewDelegate.h b/src/Desktop/MvQFolderViewDelegate.h
index 7d04f7a..5c2551f 100644
--- a/src/Desktop/MvQFolderViewDelegate.h
+++ b/src/Desktop/MvQFolderViewDelegate.h
@@ -10,9 +10,11 @@
#ifndef MvQFolderViewDelegate_H
#define MvQFolderViewDelegate_H
+#include <QBrush>
#include <QPen>
#include <QStyledItemDelegate>
+
class QStyleOptionViewItem;
class QTimer;
@@ -38,18 +40,19 @@ signals:
void repaintIt(const QModelIndex&);
protected:
- static QPen editPen_;
- static QBrush editBrush_;
- static QPen hoverPen_;
- static QBrush hoverBrush_;
- static QPen selectPen_;
- static QBrush selectBrush_;
- static bool init_;
+ void setColours(QString group);
+
QTimer *timer_;
int blinkCnt_;
QModelIndex blinkIndex_;
int blinkNum_;
bool enablePaint_;
+ QPen editPen_;
+ QBrush editBrush_;
+ QPen hoverPen_;
+ QBrush hoverBrush_;
+ QPen selectPen_;
+ QBrush selectBrush_;
};
@@ -61,7 +64,7 @@ public:
void paint(QPainter *painter,const QStyleOptionViewItem &option,
const QModelIndex& index) const;
QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const;
- void setStripeMode(bool b) {stripeMode_=b;}
+ void setStripeMode(bool b);
protected:
bool stripeMode_;
diff --git a/src/Desktop/MvQFolderViewHandler.cc b/src/Desktop/MvQFolderViewHandler.cc
index c0a5e04..e5df799 100644
--- a/src/Desktop/MvQFolderViewHandler.cc
+++ b/src/Desktop/MvQFolderViewHandler.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -12,81 +12,169 @@
#include <QStackedLayout>
#include <QWidget>
+#include "Folder.h"
+#include "FolderSettings.h"
#include "MvQFolderViewBase.h"
+#include "MvQFolderItemProperty.h"
-map<MvQ::FolderViewMode,QString> MvQFolderViewHandler::modeIds_;
-
-MvQFolderViewHandler::MvQFolderViewHandler(QStackedLayout* p) : stacked_(p)
+MvQFolderViewHandler::MvQFolderViewHandler(QStackedLayout* p,MvQFolderItemProperty* itemProp) :
+ stacked_(p),
+ itemProp_(itemProp)
{
- modeIds_[MvQ::NoViewMode]="";
- modeIds_[MvQ::IconViewMode]="icon";
- modeIds_[MvQ::DetailedViewMode]="detailed";
- currentMode_=MvQ::NoViewMode;
+ currentMode_=FolderSettings::defaultViewMode();
}
-void MvQFolderViewHandler::add(MvQ::FolderViewMode mode,MvQFolderViewBase* b,QWidget* w)
+void MvQFolderViewHandler::add(Desktop::FolderViewMode mode,MvQFolderViewBase* b)
{
+ //Check if the same widget/base has been already set for another mode
+ Desktop::FolderViewMode parentMode=mode;
+ for(map<Desktop::FolderViewMode,MvQFolderViewBase*>::const_iterator it=bases_.begin(); it != bases_.end() ; it++)
+ if(it->second == b)
+ {
+ parentMode=it->first;
+ break;
+ }
+
bases_[mode]=b;
+ QWidget *w=b->concreteWidget();
widgets_[mode]=w;
- stacked_->addWidget(w);
+
+ int cnt=stacked_->count();
+ if(parentMode == mode)
+ {
+ stacked_->addWidget(w);
+ indexes_[mode]=cnt;
+ }
+ //If the widget is already in the stack we just register its layout index
+ else
+ {
+ indexes_[mode]=indexes_[parentMode];
+ }
}
-MvQFolderViewBase* MvQFolderViewHandler::base(MvQ::FolderViewMode mode) const
+MvQFolderViewBase* MvQFolderViewHandler::base(Desktop::FolderViewMode mode) const
{
- map<MvQ::FolderViewMode,MvQFolderViewBase*>::const_iterator it=bases_.find(mode);
+ map<Desktop::FolderViewMode,MvQFolderViewBase*>::const_iterator it=bases_.find(mode);
return (it != bases_.end())?it->second:0;
}
-QWidget* MvQFolderViewHandler::widget(MvQ::FolderViewMode mode)
+QWidget* MvQFolderViewHandler::widget(Desktop::FolderViewMode mode)
{
- map<MvQ::FolderViewMode,QWidget*>::iterator it=widgets_.find(mode);
+ map<Desktop::FolderViewMode,QWidget*>::iterator it=widgets_.find(mode);
return (it != widgets_.end())?it->second:0;
}
-void MvQFolderViewHandler::setCurrentMode(MvQ::FolderViewMode mode)
+bool MvQFolderViewHandler::setCurrentMode(Desktop::FolderViewMode mode, Folder* folder,int iconSize)
{
- if(mode==MvQ::NoViewMode)
- mode=MvQ::IconViewMode;
+ bool retVal=false;
+
+ //Check if currentMode is valid
+ if(bases_.find(currentMode_) == bases_.end())
+ {
+ //If the currentMode is invalid we set it to icon view
+ currentMode_=Desktop::IconViewMode;
- if(mode == currentMode_)
- return;
+ //Check if there is icon view
+ if(bases_.find(currentMode_) == bases_.end())
+ {
+ //If there area any views defined we set current to the first
+ if(bases_.size() > 0)
+ currentMode_=bases_.begin()->first;
+ //Otherwise something really bad happened!
+ else
+ return false;
+ }
+ }
- MvQFolderViewBase* b=base(currentMode_);
- QWidget* w=widget(currentMode_);
+ if(mode != currentMode_ && bases_.find(mode) != bases_.end())
+ {
+ QWidget* wNew=widget(mode);
- MvQFolderViewBase* bNew=base(mode);
- QWidget* wNew=widget(mode);
+ //Set the mode
+ currentMode_=mode;
+
+ //Update the view
+ if(wNew)
+ {
+ wNew->setEnabled(true);
+ }
+ }
- //Set the mode
- currentMode_=mode;
- //Update the view
- if(wNew && bNew)
- {
- wNew->setEnabled(true);
- if(b) bNew->changeFolder(b->currentFolder());
+ //Set the folder view rendering properties
+ itemProp_->setViewMode(currentMode_);
- //Set layout
- stacked_->setCurrentWidget(wNew);
+ //Update the folder in the current view
+ if(MvQFolderViewBase* b=base(currentMode_))
+ {
+ //If changing the folder is successfull it calls reset and returns true
+ retVal=b->changeFolder(folder,iconSize);
+
+ //We need to reset if the
+ //folder change was not successful (we stayed in the same folder)
+ if(!retVal)
+ {
+ b->doReset();
+ }
}
+ //Set the layout
+ stacked_->setCurrentIndex(indexes_[currentMode_]);
+
//Disable the other views
- for(map<MvQ::FolderViewMode,QWidget*>::iterator it=widgets_.begin(); it != widgets_.end(); it++)
- if(it->first != currentMode_ && it->second)
+ QWidget *currentWidget=widget(currentMode_);
+ for(map<Desktop::FolderViewMode,QWidget*>::iterator it=widgets_.begin(); it != widgets_.end(); it++)
+ if(it->first != currentMode_ && it->second && it->second != currentWidget)
it->second->setEnabled(false);
+
+ return retVal;
}
-void MvQFolderViewHandler::setCurrentMode(QString name)
+void MvQFolderViewHandler::setCurrentMode(Desktop::FolderViewMode mode)
{
- for(map<MvQ::FolderViewMode,QString>::iterator it=modeIds_.begin(); it != modeIds_.end(); it++)
- if(it->second == name)
- setCurrentMode(it->first);
-}
-
-QString MvQFolderViewHandler::currentModeId() const
+ if(MvQFolderViewBase* b=base(mode))
+ {
+ setCurrentMode(mode,b->currentFolder());
+ }
+
+
+}
+
+void MvQFolderViewHandler::setCurrentMode(int id)
{
- map<MvQ::FolderViewMode,QString>::iterator it=modeIds_.find(currentMode_);
- return (it != modeIds_.end())?it->second:"";
+ Desktop::FolderViewMode m=FolderSettings::toViewMode(id);
+ setCurrentMode(m);
}
+QList<QWidget*> MvQFolderViewHandler::uniqueWidgets()
+{
+ QList<QWidget*> lst;
+ for(map<Desktop::FolderViewMode,QWidget*>::iterator it=widgets_.begin(); it != widgets_.end(); it++)
+ {
+ if(lst.indexOf(it->second) == -1)
+ lst << it->second;
+ }
+ return lst;
+}
+
+bool MvQFolderViewHandler::changeFolder(Folder *f)
+{
+ if(f)
+ {
+ FolderSettings *fi=f->settings();
+ return setCurrentMode(fi->viewMode(),f,fi->iconSize());
+ }
+
+ return false;
+}
+
+bool MvQFolderViewHandler::changeFolder(QString path)
+{
+ if(Folder *f=Folder::folder(path.toStdString(),false))
+ {
+ return changeFolder(f);
+ }
+ return false;
+}
+
diff --git a/src/Desktop/MvQFolderViewHandler.h b/src/Desktop/MvQFolderViewHandler.h
index 70907be..9eeec68 100644
--- a/src/Desktop/MvQFolderViewHandler.h
+++ b/src/Desktop/MvQFolderViewHandler.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -13,10 +13,9 @@
#include <map>
#include <QString>
-#include "IconObject.h"
-
-#include "MvQ.h"
+#include "Desktop.h"
#include "FolderPresenter.h"
+#include "IconObject.h"
class Folder;
class MvQFolderModel;
@@ -28,31 +27,35 @@ class QStackedLayout;
class QWidget;
class MvQFolderViewBase;
+class MvQFolderItemProperty;
using namespace std;
class MvQFolderViewHandler
{
public:
- MvQFolderViewHandler(QStackedLayout*);
+ MvQFolderViewHandler(QStackedLayout*,MvQFolderItemProperty*);
- void add(MvQ::FolderViewMode,MvQFolderViewBase*,QWidget*);
- MvQ::FolderViewMode currentMode() const {return currentMode_;}
- void setCurrentMode(MvQ::FolderViewMode);
- void setCurrentMode(QString);
+ void add(Desktop::FolderViewMode,MvQFolderViewBase*);
+ Desktop::FolderViewMode currentMode() const {return currentMode_;}
+ void setCurrentMode(int);
+ void setCurrentMode(Desktop::FolderViewMode);
MvQFolderViewBase* currentBase() const {return base(currentMode_);}
- QString currentModeId() const;
+ QList<QWidget*> uniqueWidgets();
+ bool changeFolder(QString path);
+ bool changeFolder(Folder*);
private:
- MvQFolderViewBase* base(MvQ::FolderViewMode) const;
- QWidget* widget(MvQ::FolderViewMode);
+ MvQFolderViewBase* base(Desktop::FolderViewMode) const;
+ QWidget* widget(Desktop::FolderViewMode);
+ bool setCurrentMode(Desktop::FolderViewMode mode, Folder* folder,int iconSize=-1);
- MvQ::FolderViewMode currentMode_;
- map<MvQ::FolderViewMode,MvQFolderViewBase*> bases_;
- map<MvQ::FolderViewMode,QWidget*> widgets_;
+ Desktop::FolderViewMode currentMode_;
+ map<Desktop::FolderViewMode,MvQFolderViewBase*> bases_;
+ map<Desktop::FolderViewMode,QWidget*> widgets_;
+ map<Desktop::FolderViewMode,int> indexes_;
QStackedLayout* stacked_;
-
- static map<MvQ::FolderViewMode,QString> modeIds_;
+ MvQFolderItemProperty* itemProp_;
};
#endif
diff --git a/src/Desktop/MvQFolderWidget.cc b/src/Desktop/MvQFolderWidget.cc
index 00b3dc6..1f252fa 100644
--- a/src/Desktop/MvQFolderWidget.cc
+++ b/src/Desktop/MvQFolderWidget.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -11,41 +11,48 @@
#include <QAction>
#include <QDebug>
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QMenu>
#include <QStackedLayout>
-#include <QToolButton>
#include <QVBoxLayout>
#include "MvQDetailedFolderView.h"
#include "MvQFolderHistory.h"
+#include "MvQFolderModel.h"
#include "MvQFolderNavigation.h"
#include "MvQFolderViewBase.h"
#include "MvQFolderViewHandler.h"
#include "MvQFolderWatcher.h"
#include "MvQIconFolderView.h"
-#include "MvQDesktopSettings.h"
#include "IconClass.h"
+#include "Folder.h"
+#include "FolderSettings.h"
#include "Path.h"
#include "MvRequest.h"
-#include "MvQFolderModel.h"
-#include "Folder.h"
-
MvQFolderWidget::MvQFolderWidget(QString rootFolder,MvQFolderHistory *folderHistory,
+ MvQActionList* iconActions,
+ MvQActionList* desktopActions,
QWidget *parent) :
QWidget(parent),
folderHistory_(folderHistory)
{
- //----------------------------------
- // Create folder model
- //----------------------------------
-
- folderModel_=new MvQFolderModel(MvQDesktopSettings::iconSize_,this);
- folderModel_->setFolder(rootFolder);
-
+ //Read folder settings
+ int iconSize=FolderSettings::defaultIconSize();
+ Desktop::FolderViewMode viewMode=FolderSettings::defaultViewMode();
+ if(Folder *f=Folder::folder(rootFolder.toStdString(),false))
+ {
+ FolderSettings *fi=f->settings();
+ viewMode=fi->viewMode();
+ iconSize=fi->iconSize();
+ }
+
+ //--------------------------------------------
+ // Create folder model - to speed up things we
+ // set the correct iconsize
+ //--------------------------------------------
+
+ folderModel_=new MvQFolderModel(iconSize,this);
+
connect(folderModel_,SIGNAL(folderChanged(Folder*)),
this,SLOT(slotFolderChanged(Folder*)));
@@ -57,14 +64,6 @@ MvQFolderWidget::MvQFolderWidget(QString rootFolder,MvQFolderHistory *folderHist
mainLayout->setSpacing(0);
mainLayout->setContentsMargins(1,1,1,1);
- //-----------------------------
- // Top part
- //-----------------------------
-
- folderNavigation_=new MvQFolderNavigation;
- if(folderModel_->folder())
- folderNavigation_->add(rootFolder);
-
//------------------------------
// Central part
//------------------------------
@@ -74,89 +73,43 @@ MvQFolderWidget::MvQFolderWidget(QString rootFolder,MvQFolderHistory *folderHist
mainLayout->addLayout(centralLayout_,1);
//View handler
- views_=new MvQFolderViewHandler(centralLayout_);
+ views_=new MvQFolderViewHandler(centralLayout_,folderModel_->itemProp());
- // Icon view
- iconView_= new MvQIconFolderView(folderModel_,this);
- views_->add(MvQ::IconViewMode,iconView_,iconView_);
+ //Icon view
+ MvQIconFolderView* iconView= new MvQIconFolderView(folderModel_,iconActions,desktopActions,this);
+ views_->add(Desktop::IconViewMode,iconView);
- connect(iconView_,SIGNAL(currentFolderChanged(Folder*)),
- this,SLOT(slotFolderReplacedInView(Folder*)));
-
- connect(iconView_,SIGNAL(iconCommandRequested(QString,IconObjectH)),
- this,SIGNAL(iconCommandRequested(QString,IconObjectH)));
-
- connect(iconView_,SIGNAL(desktopCommandRequested(QString,QPoint)),
- this,SIGNAL(desktopCommandRequested(QString,QPoint)));
+ //Simple view - the same object as icon view!!
+ views_->add(Desktop::SimpleViewMode,iconView);
- connect(iconView_,SIGNAL(itemEntered(QString)),
- this, SIGNAL(itemInfoChanged(QString)));
-
- // Detailed view
+ //Detailed view
+ MvQDetailedFolderView* detailedView= new MvQDetailedFolderView(folderModel_,iconActions,desktopActions,this);
+ views_->add(Desktop::DetailedViewMode,detailedView);
- detailedView_= new MvQDetailedFolderView(folderModel_,this);
- views_->add(MvQ::DetailedViewMode,detailedView_,detailedView_);
-
- connect(detailedView_,SIGNAL(currentFolderChanged(Folder*)),
- this,SLOT(slotFolderReplacedInView(Folder*)));
-
- connect(detailedView_,SIGNAL(iconCommandRequested(QString,IconObjectH)),
- this,SIGNAL(iconCommandRequested(QString,IconObjectH)));
-
- connect(detailedView_,SIGNAL(desktopCommandRequested(QString,QPoint)),
- this,SIGNAL(desktopCommandRequested(QString,QPoint)));
-
- connect(detailedView_,SIGNAL(itemEntered(QString)),
- this,SIGNAL(itemInfoChanged(QString)));
+ foreach(QWidget* v,views_->uniqueWidgets())
+ {
+ connect(v,SIGNAL(currentFolderChanged(Folder*)),
+ this,SLOT(slotFolderReplacedInView(Folder*)));
+
+ connect(v,SIGNAL(iconCommandRequested(QString,IconObjectH)),
+ this,SIGNAL(iconCommandRequested(QString,IconObjectH)));
+ connect(v,SIGNAL(desktopCommandRequested(QString,QPoint)),
+ this,SIGNAL(desktopCommandRequested(QString,QPoint)));
- //Init view mode
- views_->setCurrentMode(MvQDesktopSettings::viewMode_);
-
-
- /*
- views_->populate(centralLayout_);
- centralLayout_->setCurrentWidget(views_)
-
- views_=new MvQFolderViewHandler();
-
- //Init view mode
- views_->currentBase()=it->second;
- views_->setCurrent(mode);
-
-
- //View mode stacked widget
- centralLayout_=new QStackedLayout;
- mainLayout->addLayout(centralLayout_,1);
-
- ///Init stacked widget
- views_->populate(centralLayout_);
- centralLayout_->setCurrentWidget(views_)
+ connect(v,SIGNAL(itemEntered(QString)),
+ this, SIGNAL(itemInfoChanged(QString)));
+ }
//Init view mode
- map<ViewMode,MvQFolderViewBase*>::iterator it=views_.find(mode);
- if(it != views_.end())
- {
- views_->currentBase()=it->second;
- }
-
- //Init stacked widget
- (map<ViewMode,QWidget*>::iterator itW=viewWidgets_.find(mode);
- if(it != viewWidgets_.end())
- {
- centralLayout_->setCurrentWidget(it->second());
- }*/
-
- /*views_->currentBase()=iconView_;
-
- //Stacked layout
+ views_->setCurrentMode(viewMode);
- centralLayout_=new QStackedLayout;
- mainLayout->addLayout(centralLayout_,1);
+ //Set the folder
+ folderModel_->setFolder(rootFolder);
+ folderNavigation_=new MvQFolderNavigation;
+ if(folderModel_->folder())
+ folderNavigation_->add(rootFolder);
- centralLayout_->addWidget(iconView_);
- centralLayout_->addWidget(detailedView_);
- centralLayout_->setCurrentIndex(0);*/
MvQFolderWatcher::add(this);
@@ -168,9 +121,7 @@ MvQFolderWidget::~MvQFolderWidget()
{
MvQFolderWatcher::remove(this);
- //delete iconView_;
- //delete detailedView_;
- //delete folderModel_;
+ delete views_;
}
Folder* MvQFolderWidget::currentFolder()
@@ -186,6 +137,13 @@ QString MvQFolderWidget::currentFolderName()
return QString();
}
+QString MvQFolderWidget::currentFolderPath()
+{
+ if(folderModel_->folder())
+ return QString::fromStdString(folderModel_->folder()->fullName());
+
+ return QString();
+}
//----------------------------------
// Navigation
//----------------------------------
@@ -193,9 +151,9 @@ QString MvQFolderWidget::currentFolderName()
void MvQFolderWidget::chFolderBack()
{
QString fullName=folderNavigation_->prev();
- if(views_->currentBase()->changeFolder(fullName))
+ if(views_->changeFolder(fullName))
{
- Folder* folder=views_->currentBase()->currentFolder();
+ Folder* folder=folderModel_->folder();
if(!folder)
return;
folderHistory_->add(fullName);
@@ -207,9 +165,9 @@ void MvQFolderWidget::chFolderBack()
void MvQFolderWidget::chFolderForward()
{
QString fullName=folderNavigation_->next();
- if(views_->currentBase()->changeFolder(fullName))
+ if(views_->changeFolder(fullName))
{
- Folder* folder=views_->currentBase()->currentFolder();
+ Folder* folder=folderModel_->folder();
if(!folder)
return;
@@ -221,9 +179,11 @@ void MvQFolderWidget::chFolderForward()
void MvQFolderWidget::chFolderParent()
{
- if(views_->currentBase()->changeFolderToParent())
+ Folder* folderCurrent=folderModel_->folder();
+ Folder* folder=folderCurrent->parent();
+ if(folder && views_->changeFolder(folder))
{
- Folder* folder=views_->currentBase()->currentFolder();
+ folder=folderModel_->folder();
if(!folder)
return;
@@ -251,11 +211,29 @@ void MvQFolderWidget::slotFolderReplacedInView(Folder* folder)
emit pathChanged();
}
+void MvQFolderWidget::chFolder(QString fullName)
+{
+ if(views_->changeFolder(fullName))
+ {
+ Folder *folder=folderModel_->folder();
+ if(!folder)
+ return;
+
+ QString fullName=QString::fromStdString(folder->fullName());
+
+ folderNavigation_->removeAfterCurrent();
+ folderNavigation_->add(fullName);
+ folderHistory_->add(fullName);
+
+ emit pathChanged();
+ }
+}
+
void MvQFolderWidget::chFolderFromHistory(QString fullName)
{
- if(views_->currentBase()->changeFolder(fullName))
+ if(views_->changeFolder(fullName))
{
- Folder* folder=views_->currentBase()->currentFolder();
+ Folder* folder=folderModel_->folder();
if(!folder)
return;
@@ -269,9 +247,9 @@ void MvQFolderWidget::chFolderFromHistory(QString fullName)
void MvQFolderWidget::chFolderFromBookmarks(QString fullName)
{
- if(views_->currentBase()->changeFolder(fullName))
+ if(views_->changeFolder(fullName))
{
- Folder* folder=views_->currentBase()->currentFolder();
+ Folder* folder=folderModel_->folder();
if(!folder)
return;
@@ -285,23 +263,23 @@ void MvQFolderWidget::chFolderFromBookmarks(QString fullName)
}
void MvQFolderWidget::chFolderFromBreadcrumbs(QString fullName)
-{
- if(views_->currentBase()->changeFolder(fullName))
+{
+ if(views_->changeFolder(fullName))
{
folderNavigation_->removeAfterCurrent();
folderNavigation_->add(fullName);
folderHistory_->add(fullName);
-
+
emit pathChanged();
}
}
-//When the folder object itself is changed (e.g. renamed)
+//When the folder object itself is changed (e.g. renamed). It is a callback from the model!
void MvQFolderWidget::slotFolderChanged(Folder* folder)
{
slotFolderReplacedInView(folder);
}
-
+
//------------------------
// IconSize
//------------------------
@@ -313,30 +291,21 @@ int MvQFolderWidget::iconSize() const
void MvQFolderWidget::setIconSize(int iconSize)
{
- folderModel_->setIconSize(iconSize);
+ folderModel_->setIconSize(iconSize);
+ if(Folder *f=folderModel_->folder())
+ {
+ FolderSettings *fi=f->settings();
+ fi->setIconSize(iconSize);
+ }
}
-bool MvQFolderWidget::iconSizeLock()
-{
- Folder *f=folderModel_->folder();
- return (f)?(f->iconSizeLock() > 0):false;
-}
-void MvQFolderWidget::setIconSizeLock(bool b)
-{
- Folder *f=folderModel_->folder();
- if(f)
- {
- if(b) f->setIconSizeLock(folderModel_->iconSize());
- else f->setIconSizeLock(-1);
- }
-}
//------------------------
// Snap to grid
//------------------------
-void MvQFolderWidget::toGrid(MvQ::GridSortMode type)
+void MvQFolderWidget::toGrid(Desktop::GridSortMode type)
{
views_->currentBase()->toGrid(type);
}
@@ -359,103 +328,49 @@ void MvQFolderWidget::reload()
// ViewMode
//------------------------
-MvQ::FolderViewMode MvQFolderWidget::viewMode()
+Desktop::FolderViewMode MvQFolderWidget::viewMode()
{
return views_->currentMode();
-
- /*if(views_->currentBase()== iconView_)
- return MvQ::IconViewMode;
-
- else if(views_->currentBase()== detailedView_)
- return MvQ::DetailedViewMode;
-
- return MvQ::NoViewMode;*/
}
-void MvQFolderWidget::setViewMode(MvQ::FolderViewMode mode)
+void MvQFolderWidget::setViewMode(Desktop::FolderViewMode mode)
{
views_->setCurrentMode(mode);
+ if(Folder *f=folderModel_->folder())
+ {
+ FolderSettings *fi=f->settings();
+ fi->setViewMode(mode);
+ }
}
-
-/* if(views_->current() == mode)
- return;
-
- MvQFolderViewBase* b=views_->currentBase();
- QWidget* w=views_->currentWidget();
-
- MvQFolderViewBase* bNew=views_->currentBase();
- QWidget* wNew=views_->currentWidget();
-
- //Set the mode
- views_->setCurrentMode(mode);
-
- //Update the view
- wNew->setEnabled(true);
- bMew->changeFolder(b->currentFolder());
-
- //Make it visible
- centralLayout_->setCurrentWidget(wNew);
-
- //Disable the other views
- b->setEnabled(false);
-
-
- if(!views_->currentBase())
- return;
-
- if(viewMode() == mode)
- return;
-
- if(mode == MvQ::IconViewMode)
- {
- //Update the view
- iconView_->setEnabled(true);
- iconView_->changeFolder(views_->currentBase()->currentFolder());
-
- //Make it visible
- centralLayout_->setCurrentIndex(0);
- views_->currentBase()=iconView_;
-
- //Disable the other views
- detailedView_->setEnabled(false);
- }
- else if(mode == MvQ::DetailedViewMode)
- {
- //Update the view
- detailedView_->setEnabled(true);
- detailedView_->changeFolder(views_->currentBase()->currentFolder());
-
- //Make it visible
- centralLayout_->setCurrentIndex(1);
- views_->currentBase()=detailedView_;
-
- //Disable the other views
- iconView_->setEnabled(false);
- }
-}*/
-QString MvQFolderWidget::viewModeId()
+bool MvQFolderWidget::viewModeGrid()
{
- return views_->currentModeId();
-
- /*if(views_->currentBase()==iconView_)
- return viewModeIds_[MvQ::IconViewMode];
- else if( views_->currentBase()==detailedView_)
- return viewModeIds_[MvQ::DetailedViewMode];
- else
- return viewModeIds_[MvQ::NoViewMode];*/
+ return true;
}
-bool MvQFolderWidget::viewModeGrid()
+void MvQFolderWidget::iconCommandFromMain(QString name)
{
- return true;
-}
+ views_->currentBase()->iconCommandFromMain(name);
+}
-void MvQFolderWidget::initIconPositions()
+//---------------------------------------
+// Find icons
+//---------------------------------------
+
+void MvQFolderWidget::findIcons(FolderSearchData* data)
{
- iconView_->slotSetPositions();
-}
+ folderModel_->setSearchData(data);
+}
+
+//---------------------------------------
+// Highlight one icon in the view
+//---------------------------------------
+
+void MvQFolderWidget::showIcon(IconObject* obj)
+{
+ views_->currentBase()->showIcon(obj);
+}
//------------------------
// Save icon positions
@@ -474,30 +389,27 @@ void MvQFolderWidget::writeSettings(QSettings &settings)
{
Folder *folder=currentFolder();
settings.setValue("path",(folder)?QString::fromStdString(folder->fullName()):"");
- settings.setValue("viewMode",views_->currentModeId());
+ settings.setValue("viewMode",static_cast<int>(views_->currentMode()));
settings.setValue("iconSize",folderModel_->iconSize());
}
void MvQFolderWidget::readSettings(QSettings &settings)
{
- QString viewMode=settings.value("viewMode").toString();
- int iconSize=settings.value("iconSize").toInt();
-
-
-
- views_->setCurrentMode(viewMode);
-
- /*QMapIterator<MvQ::FolderViewMode,QString> it(viewModeIds_);
- while (it.hasNext())
+ if(settings.contains("viewMode") && settings.contains("iconSize"))
{
- it.next();
- if(it.value() == viewMode)
+ Desktop::FolderViewMode viewMode=FolderSettings::toViewMode(settings.value("viewMode").toInt());
+ int iconSize=settings.value("iconSize").toInt();
+
+ if(Folder *f=folderModel_->folder())
{
- setViewMode(it.key());
- break;
+ FolderSettings *fi=f->settings();
+ if(fi && fi->hasFile())
+ {
+ if(viewMode != fi->viewMode())
+ views_->setCurrentMode(viewMode);
+ if(iconSize != fi->iconSize())
+ setIconSize(iconSize);
+ }
}
- }*/
-
- setIconSize(iconSize);
-
+ }
}
\ No newline at end of file
diff --git a/src/Desktop/MvQFolderWidget.h b/src/Desktop/MvQFolderWidget.h
index 6d5e873..62bc6a3 100644
--- a/src/Desktop/MvQFolderWidget.h
+++ b/src/Desktop/MvQFolderWidget.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -10,60 +10,27 @@
#ifndef MvQFolderWidget_H
#define MvQFolderWidget_H
-#include <QFileIconProvider>
-#include <QFileInfo>
-#include <QFileSystemModel>
-#include <QList>
-#include <QMap>
-#include <QMainWindow>
#include <QModelIndex>
-#include <QList>
#include <QSettings>
-#include <QSortFilterProxyModel>
-#include <QString>
+#include <QWidget>
-#include "IconObject.h"
-
-#include "MvQ.h"
+#include "Desktop.h"
#include "FolderPresenter.h"
+#include "IconObject.h"
class Folder;
-class MvQFolderModel;
-
+class FolderSearchData;
class IconClass;
class IconObject;
-class QAction;
-class QActionGroup;
-class QCloseEvent;
-class QComboBox;
-class QLabel;
-class QListView;
-class QMenu;
-class QSplitter;
class QStackedLayout;
-class QStackedWidget;
-class QTabWidget;
-class QTextBrowser;
-class QToolBox;
-class QTreeView;
-class MvQBookmarks;
-class MvQBookmarksWidget;
-class MvQDesktop;
-class MvQDrawerPanel;
-class MvQFolderFilterModel;
+class MvQActionList;
class MvQFolderHistory;
+class MvQFolderModel;
class MvQFolderNavigation;
class MvQFolderViewBase;
class MvQFolderViewHandler;
-class MvQFileSystemModel;
-class MvQDetailedFolderView;
-class MvQIconFolderView;
-class MvQKeyModel;
-class MvQNewIconWidget;
-class MvQPathWidget;
-class MvQSlider;
using namespace std;
@@ -73,36 +40,37 @@ class MvQFolderWidget : public QWidget, public FolderPresenter
Q_OBJECT
public:
- MvQFolderWidget(QString,MvQFolderHistory*,QWidget* parent=0);
+ MvQFolderWidget(QString,MvQFolderHistory*,MvQActionList*,MvQActionList*,QWidget* parent=0);
~MvQFolderWidget();
//From FolderPresenter
Folder* currentFolder();
- QString currentFolderName();
+ QString currentFolderName();
+ QString currentFolderPath();
void saveFolderInfo();
MvQFolderNavigation* folderNavigation() const {return folderNavigation_;}
int iconSize() const;
void setIconSize(int);
- bool iconSizeLock();
- void setIconSizeLock(bool);
void chFolderBack();
void chFolderForward();
void chFolderParent();
+ void chFolder(QString);
void chFolderFromHistory(QString);
void chFolderFromBookmarks(QString);
void chFolderFromBreadcrumbs(QString);
- void toGrid(MvQ::GridSortMode);
+ void toGrid(Desktop::GridSortMode);
void reload();
void showLastCreated();
+ void showIcon(IconObject*);
+ void findIcons(FolderSearchData*);
+ void iconCommandFromMain(QString);
- MvQ::FolderViewMode viewMode();
- void setViewMode(MvQ::FolderViewMode);
- QString viewModeId();
+ Desktop::FolderViewMode viewMode();
+ void setViewMode(Desktop::FolderViewMode);
bool viewModeGrid();
- void initIconPositions();
void writeSettings(QSettings &);
void readSettings(QSettings &);
@@ -122,8 +90,6 @@ private:
QStackedLayout* centralLayout_;
MvQFolderViewHandler* views_;
- MvQIconFolderView* iconView_;
- MvQDetailedFolderView* detailedView_;
MvQFolderHistory* folderHistory_;
MvQFolderNavigation* folderNavigation_;
MvQFolderModel *folderModel_;
diff --git a/src/Desktop/MvQGeoHelp.cc b/src/Desktop/MvQGeoHelp.cc
index aac8aa1..726a646 100644
--- a/src/Desktop/MvQGeoHelp.cc
+++ b/src/Desktop/MvQGeoHelp.cc
@@ -45,7 +45,7 @@ void MvQGeoHelp::start()
}
-void MvQGeoHelp::refresh(const vector<string>& values)
+void MvQGeoHelp::refresh(const vector<string>& /*values*/)
{
}
diff --git a/src/Desktop/MvQIconFolderView.cc b/src/Desktop/MvQIconFolderView.cc
index 9dc0093..b6c48a4 100644
--- a/src/Desktop/MvQIconFolderView.cc
+++ b/src/Desktop/MvQIconFolderView.cc
@@ -1,349 +1,1951 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
+
#include "MvQIconFolderView.h"
-#include "ConfigLoader.h"
+#include "Desktop.h"
+#include "IconClass.h"
#include "IconObject.h"
#include "IconInfo.h"
#include "Folder.h"
+#include "FolderSettings.h"
-#include "MvQ.h"
+#include "MvQActionList.h"
#include "MvQContextMenu.h"
+#include "MvQDesktopSettings.h"
+#include "MvQDropTarget.h"
#include "MvQFolderViewDelegate.h"
#include "MvQFolderItemProperty.h"
#include "MvQFolderModel.h"
+#include "MvQIconProvider.h"
+#include "MvQIconMimeData.h"
+#include "MvQTheme.h"
+#include <QApplication>
+#include <QClipboard>
#include <QDropEvent>
+#include <QLinearGradient>
+#include <QLineEdit>
#include <QScrollBar>
+#include <QShortcut>
#include <QTimer>
-MvQIconFolderView::MvQIconFolderView(MvQFolderModel *folderModel,QWidget *parent) :
- MvQIconFolderViewBase(folderModel,parent),
- prevScrollPos_(0,0),
- paintEnabled_(true)
-{
- setContextMenuPolicy(Qt::CustomContextMenu);
- setViewMode(QListView::IconMode);
- setFlow(QListView::LeftToRight);
- setMovement(QListView::Free);
- setResizeMode(QListView::Fixed);
-
- setAllowMoveAction(true);
- setEnterFolders(true);
-
- //We need to call it here because
- //slotUpdateObjectPositions has not been called so far!
- computePositions();
-
- connect(folderModel_,SIGNAL(iconSizeChanged()),
- this,SLOT(slotIconSizeChanged()));
-
- connect(folderModel_,SIGNAL(updateObjectPositions()),
- this,SLOT(slotUpdateObjectPositions()));
-
- connect(folderModel_,SIGNAL(objectArrived(const QModelIndex&)),
- this,SLOT(slotObjectArrived(const QModelIndex&)));
+
+QPen MvQIconItem::editPen_=QColor(Qt::yellow);
+QBrush MvQIconItem::editBrush_;
+QPen MvQIconItem::MvQIconItem::hoverPen_;
+QBrush MvQIconItem::hoverBrush_;
+QPen MvQIconItem::selectPen_;
+QBrush MvQIconItem::selectBrush_;
- connect(folderModel_,SIGNAL(objectRenamed(const QModelIndex&,QString)),
- this,SLOT(slotObjectRenamed(const QModelIndex& ,QString)));
-
-}
+//================================================================
+//
+// MvQIconItemTimer
+//
+//================================================================
-MvQIconFolderView::~MvQIconFolderView()
-{
-}
+MvQIconItemTimer::MvQIconItemTimer(MvQIconItem *item,QObject *parent) :
+ QTimer(parent),
+ item_(item),
+ cnt_(0),
+ maxCnt_(10)
+{
+ connect(this, SIGNAL(timeout()),
+ this, SLOT(slotTimeout()));
+}
-MvQContextItemSet* MvQIconFolderView::cmSet()
+void MvQIconItemTimer::setItem(MvQIconItem *item)
{
- static MvQContextItemSet cmItems("IconFolderView");
- return &cmItems;
+ stop();
+ if(item_)
+ item->setBlinkState(MvQIconItem::NoBlink);
+ item_=item;
+ cnt_=0;
+}
+
+void MvQIconItemTimer::blink()
+{
+ if(item_)
+ {
+ cnt_=0;
+ start(150);
+ }
}
-void MvQIconFolderView::performDrop(QDropEvent* event,IconObject* dragObj,QList<IconObject*> objLst,QPoint pos,bool fromSameView)
-{
- //The object position - ignoring the scaling
- //QPoint objPos=referencePosition(QString::fromStdString(dragObj->name()),pos);
- QPoint objPos=itemProp_->referencePosition(QString::fromStdString(dragObj->name()),pos);
- QPoint deltaPos=objPos-QPoint(dragObj->info().x(),dragObj->info().y());
-
- qDebug() << "DROP" << fromSameView;
-
- //Drop from the same view/model --> copy
- if(fromSameView)
+void MvQIconItemTimer::slotTimeout()
+{
+ if(item_ && cnt_ < maxCnt_)
{
- foreach(IconObject* obj, objLst)
- {
- qDebug() << "DROP check";
-
- if(!obj || !isAccepted(obj))
- continue;
-
- qDebug() << "DROP accept";
-
- QString name=QString::fromStdString(obj->name());
- QPoint oriPos(obj->info().x(),obj->info().y());
- QPoint newPos=oriPos+deltaPos;
- obj->position(newPos.x(),newPos.y());
- QModelIndex index=filterModel_->mapFromSource(folderModel_->indexFromObject(obj));
- setPositionForIndex(itemProp_->position(name,newPos),index);
- }
+ item_->setBlinkState((cnt_%2 ==0)?MvQIconItem::BlinkOn:MvQIconItem::BlinkOff);
+ //item_->update();
+ cnt_++;
}
-
- //Drop from another view/model --> copy or move
else
- {
- foreach(IconObject* obj, objLst)
- {
- //Cannot move/copy edited icons into another folder!!!
- if(!obj->editor() && isAccepted(obj))
- {
- QPoint oriPos(obj->info().x(),obj->info().y());
- QPoint newPos=oriPos+deltaPos;
-
- if(event->proposedAction() == Qt::CopyAction)
- {
- obj->clone(folderModel_->folder(),false,newPos.x(),newPos.y());
- }
-
- else if(event->proposedAction() == Qt::MoveAction)
- {
- obj->position(newPos.x(),newPos.y());
- folderModel_->folder()->adopt(obj);
- }
- }
- }
-
- }
-}
-
-void MvQIconFolderView::reset()
+ {
+ stop();
+ cnt_=0;
+ if(item_)
+ item_->setBlinkState(MvQIconItem::NoBlink);
+ item_=0;
+ }
+}
+
+//================================================================
+//
+// MvQEditorProxy
+//
+//================================================================
+
+MvQEditorProxy::MvQEditorProxy(MvQIconItem *item,QGraphicsItem *parent) :
+ QGraphicsProxyWidget(parent),
+ item_(item)
{
- //Disable painting
- paintEnabled_=false;
+ QString text=item->text();
+ QFont f=item->font();
+ QFontMetrics fm(f);
- //Save current scrollbar pos
- prevScrollPos_=QPoint(horizontalScrollBar()->value(),verticalScrollBar()->value());
+ editor_=new QLineEdit(text);
+ editor_->setFont(item->font());
+ editor_->setMinimumWidth(fm.width(text)+16);
+ editor_->setMaximumWidth(fm.width(text)+fm.width("AAAAAAA"));
+ editor_->setCursorPosition(0);
+ //editor_->deselect();
- QListView::reset();
-
- //Change the item positions in a delayed mode.
- doDelayedPositioning();
-}
+ setWidget(editor_);
+}
-
-void MvQIconFolderView::paintEvent(QPaintEvent *e)
+QLineEdit* MvQEditorProxy::editor()
{
- if(paintEnabled_)
- QListView::paintEvent(e);
-}
+ return editor_;
+}
-void MvQIconFolderView::slotObjectArrived(const QModelIndex&)
+MvQIconItem* MvQEditorProxy::item()
{
- showLastCreated();
+ return item_;
}
-//===============================================
-// Icon positions
-//===============================================
-
-void MvQIconFolderView::toGrid(MvQ::GridSortMode mode)
-{
- computeGrid(mode);
- setPositions();
-}
+//================================================================
+//
+// MvQDropTargetItem
+//
+//================================================================
-void MvQIconFolderView::slotIconSizeChanged()
-{
- MvQIconFolderView::reset();
+/*MvQDropTargetItem::MvQDropTargetItem(MvQIconItem* target,bool move) :
+ target_(target),
+ xPadding_(4),
+ yPadding_(4),
+ textOffset_(10)
+{
+ adjust(move);
+
+ QLinearGradient hoverGrad;
+ hoverGrad.setCoordinateMode(QGradient::ObjectBoundingMode);
+ hoverGrad.setStart(0,0);
+ hoverGrad.setFinalStop(0,1);
+ hoverGrad.setColorAt(0, QColor(254,254,254));
+ hoverGrad.setColorAt(1, QColor(240,240,240));
+ bgBrush_=QBrush(hoverGrad);
+ bgPen_=QPen(QColor(127,154,191));
+
+ int size=bRect_.height()-2*yPadding_;
+ pix_=QPixmap::fromImage(QPixmap(":/desktop/arrow_drop_target.svg").toImage().scaled(QSize(size,size),Qt::IgnoreAspectRatio,Qt::SmoothTransformation));
}
-void MvQIconFolderView::doDelayedPositioning()
+QRectF MvQDropTargetItem::boundingRect() const
+{
+ return bRect_;
+}
+
+void MvQDropTargetItem::paint(QPainter* painter, const QStyleOptionGraphicsItem*,QWidget*)
{
- QTimer::singleShot(0,this,SLOT(slotSetPositions()));
+ if(!target_)
+ return;
+
+ //Save painter state
+ painter->save();
+
+ painter->setPen(bgPen_);
+ painter->setBrush(bgBrush_);
+ painter->drawRoundedRect(bRect_,2,2);
+ painter->setBrush(Qt::NoBrush);
+
+ painter->drawPixmap(QPointF(xPadding_,yPadding_),pix_);
+
+ QFont f;
+ QFontMetrics fm(f);
+
+ int pixSize=fm.height();
+ textOffset_=pixSize+4;
+
+ QRectF tRect(xPadding_+textOffset_,yPadding_,fm.width(text1_),fm.height());
+ painter->setPen(Qt::blue);
+ painter->drawText(tRect,Qt::AlignLeft,text1_);
+
+ tRect.moveTo(tRect.topRight());
+ painter->setPen(Qt::black);
+ painter->drawText(tRect,Qt::AlignLeft,text2_);
+
+ //Restore painter state
+ painter->restore();
}
-void MvQIconFolderView::setPositions()
+void MvQDropTargetItem::adjust(bool move)
{
- for(int i=0; i < filterModel_->rowCount(); i++)
- {
- QModelIndex index=filterModel_->index(i,0,QModelIndex());
- QString name=filterModel_->data(index,Qt::DisplayRole).toString();
- QPoint refPos=filterModel_->data(index,MvQFolderModel::PositionRole).toPoint();
- setPositionForIndex(itemProp_->position(name,refPos),index);
- }
+ text1_=(move)?"Move to ":"Copy to ";
+ text2_=target_->text();
+ QFont f;
+ QFontMetrics fm(f);
+ QRectF textRect(0,0,fm.width(text1_+text2_),fm.height());
+ //textRect.moveTo(xPadding_+textOffset_,yPadding_);
+ bRect_=QRectF(0,0,2*xPadding_+textOffset_+textRect.width(),2*yPadding_+textRect.height());
}
-void MvQIconFolderView::slotUpdateObjectPositions()
+void MvQDropTargetItem::setTarget(MvQIconItem* target,bool move)
{
- computePositions();
+ prepareGeometryChange();
+ target_=target;
+ adjust(move);
+ update();
}
-
-void MvQIconFolderView::slotSetPositions()
+*/
+
+//================================================================
+//
+// MvQIconItem
+//
+//================================================================
+
+MvQIconItem::MvQIconItem(const QModelIndex& index,MvQFolderItemProperty* itemProp,MvQIconFolderView* view,QGraphicsItem* parent) :
+ QGraphicsItem(parent),
+ view_(view),
+ itemProp_(itemProp),
+ index_(index),
+ hover_(false),
+ dropTarget_(false),
+ blinkState_(NoBlink)
{
- paintEnabled_=true;
+ //Setup colours - static memebers
+ if(editPen_.color() == Qt::yellow)
+ {
+ QString group="itemview_main";
+ editPen_=QPen(MvQTheme::colour(group,"edit_pen"));
+ editBrush_=MvQTheme::brush(group,"edit_brush");
+ hoverPen_=QPen(MvQTheme::colour(group,"hover_pen"));
+ hoverBrush_=MvQTheme::brush(group,"hover_brush");
+ selectPen_=QPen(MvQTheme::colour(group,"select_pen"));
+ selectBrush_=MvQTheme::brush(group,"select_brush");
+ }
- setPositions();
+ setAcceptHoverEvents(true);
- executeDelayedItemsLayout();
+ setFlag(QGraphicsItem::ItemIsSelectable,true);
- //Restore scrollbar postions
- horizontalScrollBar()->setValue(prevScrollPos_.x());
- verticalScrollBar()->setValue(prevScrollPos_.y());
+ index_=index;
+
+ adjust();
+
}
-void MvQIconFolderView::slotObjectRenamed(const QModelIndex& sourceIndex,QString oriName)
+QRectF MvQIconItem::boundingRect() const
{
- QModelIndex index=filterModel_->mapFromSource(sourceIndex);
-
- //Find and set adjusted reference position
- QString name=filterModel_->data(index,Qt::DisplayRole).toString();
- QPoint pos=filterModel_->data(index,MvQFolderModel::PositionRole).toPoint();
- QPoint newPos=itemProp_->adjsutReferencePosition(name,oriName,pos);
- filterModel_->setData(index,newPos,MvQFolderModel::PositionRole);
-
- setPositionForIndex(itemProp_->position(name,newPos),index);
- dataChanged(index,index);
-}
+ return bRect_;
+}
-void MvQIconFolderView::computeGrid(MvQ::GridSortMode sortMode)
-{
- if(!folderModel_->folder())
- return;
+void MvQIconItem::paint(QPainter* painter, const QStyleOptionGraphicsItem*,QWidget*)
+{
+ QPixmap pixmap=index_.data(Qt::DecorationRole).value<QPixmap>();
+
+ //Save painter state
+ painter->save();
+
+ QString text=index_.data(Qt::DisplayRole).toString();
+
+ //Background
+ QRectF fillRect=bRect_;
- //Find the grid cell size
- int h=0;
- int maxWidth=itemProp_->iconSize();
+ if(blinkState_ == BlinkOn)
+ {
+ painter->fillRect(fillRect,Qt::black);
+ }
+ //If the icon editor is open we render a transparent rect above the item
+ else if(index_.data(MvQFolderModel::EditorRole).toBool())
+ {
+ painter->fillRect(fillRect,editBrush_);
+ painter->setPen(editPen_);
+ painter->drawRect(fillRect);
+ }
+ else if(isSelected())
+ {
+ painter->fillRect(fillRect,selectBrush_);
+ painter->setPen(selectPen_);
+ painter->drawRect(fillRect);
+ }
+ else if(hover_)
+ {
+ painter->fillRect(fillRect,hoverBrush_);
+ painter->setPen(hoverPen_);
+ painter->drawRect(fillRect);
+ }
+ else if(dropTarget_)
+ {
+ painter->fillRect(fillRect,selectBrush_);
+ painter->setPen(hoverPen_);
+ painter->drawRect(fillRect);
+ }
- for(int i=0; i < filterModel_->rowCount(); i++)
+ //Pixmap
+ QRect iconRect;
+ if(itemProp_->viewMode() == Desktop::IconViewMode)
+ {
+ iconRect=QRect(bRect_.center().x()-itemProp_->iconSize()/2,bRect_.y(),itemProp_->iconSize(),itemProp_->iconSize());
+ }
+ else
{
- QModelIndex idx=filterModel_->index(i,0);
- QSize s=visualRect(idx).size();
- if(s.width() > maxWidth) maxWidth=s.width();
- if(i==0) h=s.height();
+ iconRect=QRect(bRect_.x(),bRect_.y(),itemProp_->iconSize(),itemProp_->iconSize());
}
+
+ painter->drawPixmap(iconRect,pixmap);
- int dx=maxWidth+5;
- int colNum=static_cast<int>(round(static_cast<float>(viewport()->size().width())/static_cast<float>(dx)));
- if(colNum==0) colNum=1;
- int dy=h+12*itemProp_->scaling();
+ QRectF textRect;
+ if(itemProp_->viewMode() == Desktop::IconViewMode)
+ {
+ textRect=QRectF(0,itemProp_->iconSize()+itemProp_->textOffset(),
+ bRect_.width(),bRect_.height()-itemProp_->iconSize()-5);
+ }
+ else
+ {
+ textRect=QRectF(itemProp_->iconSize()+itemProp_->textOffset(),
+ (bRect_.height()-itemProp_->textHeight())/2,
+ bRect_.width()-(itemProp_->iconSize()+itemProp_->textOffset()),
+ (bRect_.height()+itemProp_->textHeight())/2);
+ }
- int x=5;
- int y=5;
-
- std::multimap<QString,QModelIndex> items;
+
+ QFont font = index_.data(Qt::FontRole).value<QFont>();
+ painter->setFont(font);
- if(sortMode == MvQ::GridSortByName)
- {
- for(int i=0; i < filterModel_->rowCount(); i++)
- {
- QModelIndex idx=filterModel_->index(i,0);
- items.insert(std::pair<QString,QModelIndex>(filterModel_->data(idx,Qt::DisplayRole).toString(),filterModel_->index(i,0)));
- }
- }
- else if(sortMode == MvQ::GridSortByType)
+ if(blinkState_ == BlinkOn)
+ painter->setPen(Qt::white);
+ else
+ painter->setPen(index_.data(Qt::ForegroundRole).value<QColor>());
+
+ painter->drawText(textRect,Qt::AlignLeft,text);
+
+ painter->restore();
+}
+
+void MvQIconItem::adjust()
+{
+ prepareGeometryChange();
+
+ QString name=index_.data(Qt::DisplayRole).toString();
+ bRect_=QRectF(QPointF(0,0),itemProp_->size(name));
+ QPoint refPos=index_.data(MvQFolderModel::PositionRole).toPoint();
+ setPos(itemProp_->position(name,refPos));
+}
+
+bool MvQIconItem::textContains(QPointF pos)
+{
+ if(itemProp_->viewMode() == Desktop::IconViewMode)
+ {
+ return (pos.x() > bRect_.x() && pos.x() < bRect_.right() &&
+ pos.y() < bRect_.bottom() &&
+ pos.y() > bRect_.top()+itemProp_->iconSize()+itemProp_->textOffset());
+
+ }
+ else
{
- for(int i=0; i < filterModel_->rowCount(); i++)
- {
- QModelIndex idx=filterModel_->index(i,1);
- items.insert(std::pair<QString,QModelIndex>(filterModel_->data(idx,Qt::DisplayRole).toString(),filterModel_->index(i,0)));
- }
+ return (pos.x() > bRect_.x()+itemProp_->iconSize()+itemProp_->textOffset() && pos.x() < bRect_.right() &&
+ pos.y() < (bRect_.bottom()+itemProp_->textHeight())/2 &&
+ pos.y() > (bRect_.bottom()-itemProp_->textHeight())/2);
+ }
+
+ return false;
+}
+
+QPointF MvQIconItem::textPos()
+{
+ QPointF p;
+ if(itemProp_->viewMode() == Desktop::IconViewMode)
+ {
+ p=QPointF(pos().x(),pos().y()+itemProp_->iconSize()+5);
}
- else if(sortMode == MvQ::GridSortBySize)
- {
- std::multimap<qint64,QModelIndex> sizeItems;
- for(int i=0; i < filterModel_->rowCount(); i++)
- {
- QModelIndex idx=filterModel_->index(i,2);
- sizeItems.insert(std::pair<qint64,QModelIndex>(filterModel_->data(idx,Qt::UserRole).toLongLong(),filterModel_->index(i,0)));
- }
- int cntS=0;
- for(std::multimap<qint64,QModelIndex>::const_iterator it=sizeItems.begin(); it != sizeItems.end(); it++, cntS++)
- {
- items.insert(std::pair<QString,QModelIndex>(QString::number(cntS),it->second));
- }
+ else
+ {
+ p=QPointF(pos().x()+itemProp_->iconSize()+itemProp_->textOffset(),
+ pos().y()+(bRect_.height()-itemProp_->textHeight())/2);
}
+ return p;
+}
- int cnt=0;
- for(std::multimap<QString,QModelIndex>::const_iterator it=items.begin(); it != items.end(); it++, cnt++)
+QRect MvQIconItem::pixmapRect()
+{
+ QRect r;
+ if(itemProp_->viewMode() == Desktop::IconViewMode)
{
- int w=visualRect(it->second).width();
- QPoint pos(x+(dx-w)/2,y);
-
- QString name=filterModel_->data(it->second,Qt::DisplayRole).toString();
- filterModel_->setData(it->second,itemProp_->referencePosition(name,pos),MvQFolderModel::PositionRole);
-
- x+=dx;
- if(cnt >0 && cnt%colNum == colNum-1)
- {
- x=5;
- y+=dy;
- }
+ r=QRect(bRect_.center().x()-itemProp_->iconSize()/2,
+ bRect_.y(),
+ itemProp_->iconSize(),
+ itemProp_->iconSize());
}
+ else
+ {
+ r=QRect(bRect_.x(),
+ bRect_.y(),
+ itemProp_->iconSize(),
+ itemProp_->iconSize());
+ }
+
+ return r;
+}
+
+const QModelIndex& MvQIconItem::index()
+{
+ return index_;
+}
+
+QString MvQIconItem::text()
+{
+ return index_.data(Qt::DisplayRole).toString();
+}
+
+QFont MvQIconItem::font()
+{
+ return index_.data(Qt::FontRole).value<QFont>();
+}
+
+void MvQIconItem::hoverEnterEvent(QGraphicsSceneHoverEvent *)
+{
+ hover_=true;
+ update();
+ view_->itemEntered(this);
+}
+
+void MvQIconItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *)
+{
+ hover_=false;
+ update();
+ view_->itemLeft(this);
+}
+
+void MvQIconItem::setDropTarget(bool t)
+{
+ dropTarget_=t;
+ update();
}
-void MvQIconFolderView::computePositions()
+void MvQIconItem::setBlinkState(BlinkState b)
{
- if(!folderModel_->folder())
- return;
-
- QList<QModelIndex> needPos;
-
- int h=0;
- int maxWidth=itemProp_->iconSize();
- int maxX=0;
- int maxY=0;
-
- for(int i=0; i < filterModel_->rowCount(); i++)
- {
- QModelIndex idx=filterModel_->index(i,0);
- QPointF pos=filterModel_->data(idx,MvQFolderModel::PositionRole).toPoint();
- if(!pos.isNull())
- {
- if(pos.x() > maxX) maxX=pos.x();
- if(pos.y() > maxY) maxY=pos.y();
- }
- else
- {
- needPos << idx;
- QSize s=visualRect(idx).size();
- if(s.width() > maxWidth) maxWidth=s.width();
- if(h == 0) h=s.height();
- }
- }
+ blinkState_=b;
+ update();
+}
+
+//=================================================================
+//
+// MvQIconFolderView
+//
+//=================================================================
+
+MvQIconFolderView::MvQIconFolderView(MvQFolderModel *folderModel,
+ MvQActionList* iconActions,
+ MvQActionList* desktopActions,QWidget *parent) :
+ QGraphicsView(parent),
+ MvQFolderViewBase(folderModel,parent),
+ allowMoveAction_(true),
+ enterFolders_(true),
+ mousePos_(0,0),
+ canDrag_(false),
+ editor_(0),
+ timer_(0),
+ defaultShortCut_(0),
+ appIconActions_(iconActions),
+ appDesktopActions_(desktopActions)
+{
+ //setBackgroundBrush(QColor(125,124,123));
- int dx=maxWidth+5;
+ setAlignment(Qt::AlignLeft | Qt::AlignTop);
+ setDragMode(QGraphicsView::RubberBandDrag);
- qDebug() << viewport()->size();
- int colNum=(viewport()->size().width()>200)?(viewport()->size().width()/dx):((maxX+maxWidth)/dx);
- if(colNum==0) colNum=1;
- int dy=h+12*itemProp_->scaling();
+ QGraphicsScene* scene_=new QGraphicsScene(this);
+ setScene(scene_);
- int x=5;
- int y=maxY+((maxY==0)?10:dy);
+ //connect(this,SIGNAL(entered(const QModelIndex&)),
+ // this,SLOT(slotEntered(const QModelIndex&)));
+
+ //Standard signals from the model
- for(int i=0; i < needPos.count(); i++)
- {
- int w=visualRect(needPos[i]).width();
- QPoint pos(x+(dx-w)/2,y);
+ connect(filterModel_,SIGNAL(modelReset()),
+ this,SLOT(reset()));
+
+ connect(filterModel_,SIGNAL(dataChanged(const QModelIndex&,const QModelIndex&)),
+ this,SLOT(slotDataChanged(const QModelIndex&,const QModelIndex&)));
- QString name=filterModel_->data(needPos[i],Qt::DisplayRole).toString();
- filterModel_->setData(needPos[i],itemProp_->referencePosition(name,pos),MvQFolderModel::PositionRole);
+ //Custom signals from the model
+ connect(folderModel_,SIGNAL(iconSizeChanged()),
+ this,SLOT(slotIconSizeChanged()));
- x+=dx;
- if(i >0 && i%colNum == colNum-1)
- {
- x=5;
- y+=dy;
- }
- }
+ connect(folderModel_,SIGNAL(objectRenamed(const QModelIndex&,QString)),
+ this,SLOT(slotObjectRenamed(const QModelIndex& ,QString)));
+
+ qDebug() << maximumViewportSize() << items().count();
+ qDebug() << "scenerect" << sceneRect();
+
+ setContextMenuPolicy(Qt::CustomContextMenu);
+
+ //Context menu
+ connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+ this, SLOT(slotContextMenu(const QPoint &)));
+
+ //Set the style
+ setProperty("mvStyle","IconFolderView");
+
+ //We set up the shortcuts here!!
+ setupShortCut();
+}
+
+MvQIconFolderView::~MvQIconFolderView()
+{
}
+void MvQIconFolderView::doReset()
+{
+ reset();
+}
+
+QWidget* MvQIconFolderView::concreteWidget()
+{
+ return this;
+}
+//-----------------------------------------
+// Event
+//-----------------------------------------
+bool MvQIconFolderView::event(QEvent* event)
+{
+ //qDebug() << "TYPE" << event->type();
+ return QGraphicsView::event(event);
+}
+
+
+//-----------------------------------------
+// Accessing indexes, objects or items
+//-----------------------------------------
+
+QModelIndex MvQIconFolderView::indexAt(QPointF scenePos)
+{
+ QGraphicsItem *item=scene()->itemAt(scenePos);
+ if(item)
+ {
+ MvQIconItem* icItem=static_cast<MvQIconItem*>(item);
+ return icItem->index();
+ }
+
+ return QModelIndex();
+}
+
+IconObject* MvQIconFolderView::iconObjectAt(QPointF scenePos)
+{
+ QGraphicsItem *item=scene()->itemAt(scenePos);
+ if(item)
+ {
+ MvQIconItem* icItem=static_cast<MvQIconItem*>(item);
+ return folderModel_->objectFromIndex(icItem->index());
+ }
+
+ return 0;
+}
+
+MvQIconItem* MvQIconFolderView::objectToItem(IconObject* obj)
+{
+ QPersistentModelIndex idx(filterModel_->mapFromSource(folderModel_->indexFromObject(obj)));
+
+ QHash<QPersistentModelIndex,MvQIconItem*>::iterator it =items_.find(idx);
+ return (it != items_.end())?it.value():0;
+}
+
+MvQIconItem* MvQIconFolderView::indexToItem(const QModelIndex& index)
+{
+ QPersistentModelIndex idx(index);
+ QHash<QPersistentModelIndex,MvQIconItem*>::iterator it =items_.find(idx);
+ return (it != items_.end())?it.value():0;
+}
+
+QModelIndex MvQIconFolderView::itemToIndex(QGraphicsItem *item)
+{
+ if(item)
+ {
+ MvQIconItem* icItem=static_cast<MvQIconItem*>(item);
+ return icItem->index();
+ }
+ return QModelIndex();
+}
+
+IconObject* MvQIconFolderView::itemToObject(QGraphicsItem *item)
+{
+ if(item)
+ {
+ MvQIconItem* icItem=static_cast<MvQIconItem*>(item);
+ return folderModel_->objectFromIndex(icItem->index());
+ }
+ return 0;
+}
+
+QRect MvQIconFolderView::pixmapRect(QList<IconObject*> objLst)
+{
+ QRect bbox;
+ foreach(IconObject* obj,objLst)
+ {
+ QRect b=pixmapRect(obj);
+ if(!b.isNull())
+ bbox=bbox.united(b);
+ }
+
+ return bbox;
+}
+
+QRect MvQIconFolderView::pixmapRect(IconObject *obj)
+{
+ if(MvQIconItem* item=objectToItem(obj))
+ {
+ return item->mapToScene(item->pixmapRect()).boundingRect().toRect();
+ }
+
+ return QRect();
+}
+
+
+QRect MvQIconFolderView::itemRect(QList<IconObject*> objLst)
+{
+ QRect bbox;
+ foreach(IconObject* obj,objLst)
+ {
+ if(MvQIconItem* item=objectToItem(obj))
+ bbox=bbox.united(itemRect(item).toRect());
+ }
+
+ return bbox;
+}
+
+QRect MvQIconFolderView::itemRect(IconObject *obj)
+{
+ if(MvQIconItem* item=objectToItem(obj))
+ {
+ return item->mapToScene(item->boundingRect()).boundingRect().toRect();
+ }
+
+ return QRect();
+}
+
+QRectF MvQIconFolderView::itemRect(QGraphicsItem*item)
+{
+ if(item)
+ {
+ return item->mapToScene(item->boundingRect()).boundingRect();
+ }
+
+ return QRectF();
+}
+
+QModelIndexList MvQIconFolderView::selectedIndexes()
+{
+ QModelIndexList lst;
+
+ foreach(QGraphicsItem* item,items())
+ {
+ if(item->isSelected())
+ {
+ QModelIndex index=itemToIndex(item);
+ if(index.isValid())
+ lst << index;
+ }
+ }
+
+ return lst;
+}
+
+void MvQIconFolderView::selectOnlyOneItem(QGraphicsItem *item)
+{
+ if(item)
+ {
+ if(!item->isSelected())
+ {
+ scene()->clearSelection();
+ item->setSelected(true);
+ }
+ }
+}
+
+//-----------------------------------------
+// Keypress, shortcut and context menu
+//-----------------------------------------
+
+void MvQIconFolderView::itemEntered(MvQIconItem *item)
+{
+ emit itemEntered(itemInfo(item->index(),FilterModelIndex));
+}
+
+void MvQIconFolderView::itemLeft(MvQIconItem */*item*/)
+{
+ emit itemEntered(QString());
+}
+
+MvQContextItemSet* MvQIconFolderView::cmSet()
+{
+ static MvQContextItemSet cmItems("IconFolderView");
+ return &cmItems;
+}
+
+void MvQIconFolderView::slotContextMenu(const QPoint& position)
+{
+ //QGraphicsItem *item=itemAt(position);
+
+ QModelIndexList lst=selectedIndexes();
+ qDebug() << "selected" << lst;
+
+ QModelIndex index=indexAt(mapToScene(position));
+
+ QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+ handleContextMenu(index,lst,mapToGlobal(position),position+scrollOffset,this);
+
+ /*QModelIndexList lst=selectedIndexes();
+ QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+ handleContextMenu(indexAt(position),lst,mapToGlobal(position),position+scrollOffset,this);*/
+
+ /*if(lst.count() == 1)
+ {
+ QModelIndex index=indexAt(position);
+ QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+
+ handleContextMenu(index,mapToGlobal(position),position+scrollOffset,this);
+ }
+ else if(lst.count() > 1)
+ {
+ handleContextMenu(lst,mapToGlobal(position),position+scrollOffset,this);
+ } */
+}
+
+void MvQIconFolderView::mouseDoubleClickEvent(QMouseEvent* event)
+{
+ QModelIndexList lst=selectedIndexes();
+ QModelIndex index=indexAt(mapToScene(event->pos()));
+ if(lst.count() == 1 && lst.at(0) == index)
+ handleDoubleClick(index);
+}
+
+
+void MvQIconFolderView::iconCommandFromMain(QString name)
+{
+ handleIconCommand(selectedIndexes(),name);
+}
+
+//-------------------------
+//
+//-------------------------
+
+void MvQIconFolderView::folderChanged()
+{
+ emit currentFolderChanged(currentFolder());
+}
+
+void MvQIconFolderView::iconCommand(QString name,IconObjectH obj)
+{
+ emit iconCommandRequested(name,obj);
+}
+
+void MvQIconFolderView::desktopCommand(QString name,QPoint pos)
+{
+ emit desktopCommandRequested(name,pos);
+}
+
+void MvQIconFolderView::initImportedHalfSizeItems()
+{
+ if(filterModel_->rowCount() ==0)
+ return;
+
+ if(Folder *f=folderModel_->folder())
+ {
+ FolderSettings *fs=f->settings();
+ if(fs->halfSizeImported() &&
+ itemProp_->viewMode() == Desktop::SimpleViewMode &&
+ itemProp_->iconSize() == 16)
+ {
+ for(int i=0; i < filterModel_->rowCount(); i++)
+ {
+ QModelIndex idx=filterModel_->index(i,0);
+ QString name=filterModel_->data(idx,Qt::DisplayRole).toString();
+
+ //Get the original pos taken from MetviewUI. It is valid for 16px icon size!
+ QPoint refPos=filterModel_->data(idx,MvQFolderModel::PositionRole).toPoint();
+
+ //We need to scale it up to the reference position and set it as the real position!!
+ filterModel_->setData(idx,itemProp_->referencePosition(name,refPos),
+ MvQFolderModel::PositionRole);
+ }
+
+ fs->halfSizeImportUsed();
+
+ }
+ }
+}
+
+
+
+//------------------------------------------
+// Reflecting changes in the model
+//------------------------------------------
+
+void MvQIconFolderView::reset()
+{
+ removeEditor();
+ removeDropTarget();
+ scene()->clear();
+ items_.clear();
+
+ initImportedHalfSizeItems();
+
+ for(int i=0; i < filterModel_->rowCount(); i++)
+ {
+ QModelIndex idx=filterModel_->index(i,0);
+
+ MvQIconItem* item=new MvQIconItem(idx,itemProp_,this);
+ scene()->addItem(item);
+
+ QPersistentModelIndex idxP(idx);
+ items_[idxP]=item;
+ }
+
+ //Checks if there are icons with (0,0) positions and layout them
+ //nicely
+ checkPositions();
+
+ adjustSceneRect();
+}
+
+void MvQIconFolderView::slotDataChanged(const QModelIndex& from,const QModelIndex&)
+{
+ if(from.isValid())
+ {
+ if(MvQIconItem *item=indexToItem(from))
+ item->update();
+ }
+}
+
+void MvQIconFolderView::slotObjectArrived(const QModelIndex&)
+{
+ //showLastCreated();
+}
+
+//===============================================
+// Icon positions
+//===============================================
+
+void MvQIconFolderView::adjustSceneRect()
+{
+ QRectF r=scene()->itemsBoundingRect();
+ r.setTopLeft(QPointF(0,0));
+ r.setBottom(r.bottom()+10);
+ scene()->setSceneRect(r);
+}
+
+void MvQIconFolderView::adjustItems()
+{
+ QHash<QPersistentModelIndex,MvQIconItem*>::const_iterator it = items_.constBegin();
+ while(it != items_.constEnd())
+ {
+ it.value()->adjust();
+ it++;
+ }
+}
+
+void MvQIconFolderView::toGrid(Desktop::GridSortMode mode)
+{
+ computeGrid(mode);
+ adjustSceneRect();
+}
+
+void MvQIconFolderView::slotIconSizeChanged()
+{
+ adjustItems();
+ adjustSceneRect();
+}
+
+QSize MvQIconFolderView::maxItemSize()
+{
+ int h=0;
+ int w=itemProp_->iconSize();
+
+ foreach(QGraphicsItem *item,items())
+ {
+ QSize s=item->boundingRect().size().toSize();
+ if(s.width() > w) w=s.width();
+ if(h==0) h=s.height();
+ }
+
+ return QSize(w,h);
+}
+
+void MvQIconFolderView::computeGrid(Desktop::GridSortMode sortMode)
+{
+ if(!folderModel_->folder())
+ return;
+
+ QSize itemSize=maxItemSize();
+
+ int dx=itemSize.width()+5;
+ int colNum=static_cast<int>(round(static_cast<float>(viewport()->size().width())/static_cast<float>(dx)));
+ if(colNum==0) colNum=1;
+ int dy=itemSize.height()+12*itemProp_->scaling();
+
+ int x=5;
+ int y=5;
+
+ std::multimap<QString,QModelIndex> items;
+
+ if(sortMode == Desktop::GridSortByName)
+ {
+ for(int i=0; i < filterModel_->rowCount(); i++)
+ {
+ QModelIndex idx=filterModel_->index(i,0);
+ items.insert(std::pair<QString,QModelIndex>(filterModel_->data(idx,Qt::DisplayRole).toString(),filterModel_->index(i,0)));
+ }
+ }
+ else if(sortMode == Desktop::GridSortByType)
+ {
+ for(int i=0; i < filterModel_->rowCount(); i++)
+ {
+ QModelIndex idx=filterModel_->index(i,1);
+ items.insert(std::pair<QString,QModelIndex>(filterModel_->data(idx,Qt::DisplayRole).toString(),filterModel_->index(i,0)));
+ }
+ }
+ else if(sortMode == Desktop::GridSortBySize)
+ {
+ std::multimap<qint64,QModelIndex> sizeItems;
+ for(int i=0; i < filterModel_->rowCount(); i++)
+ {
+ QModelIndex idx=filterModel_->index(i,2);
+ sizeItems.insert(std::pair<qint64,QModelIndex>(filterModel_->data(idx,Qt::UserRole).toLongLong(),filterModel_->index(i,0)));
+ }
+ int cntS=0;
+ for(std::multimap<qint64,QModelIndex>::const_iterator it=sizeItems.begin(); it != sizeItems.end(); it++, cntS++)
+ {
+ items.insert(std::pair<QString,QModelIndex>(QString::number(cntS),it->second));
+ }
+ }
+
+ int cnt=0;
+ for(std::multimap<QString,QModelIndex>::const_iterator it=items.begin(); it != items.end(); it++, cnt++)
+ {
+ MvQIconItem *item=indexToItem(it->second);
+
+ QPoint pos;
+ if(itemProp_->viewMode() == Desktop::IconViewMode)
+ {
+ int w=item->boundingRect().width();
+ pos=QPoint(x+(dx-w)/2,y);
+ }
+ else
+ {
+ pos=QPoint(x,y);
+ }
+
+ QString name=filterModel_->data(it->second,Qt::DisplayRole).toString();
+ filterModel_->setData(it->second,itemProp_->referencePosition(name,pos),MvQFolderModel::PositionRole);
+ item->adjust();
+
+ x+=dx;
+ if(cnt >0 && cnt%colNum == colNum-1)
+ {
+ x=5;
+ y+=dy;
+ }
+ }
+}
+
+void MvQIconFolderView::checkPositions()
+{
+ if(!folderModel_->folder())
+ return;
+
+ QList<QModelIndex> needPos;
+ MvQIconItem* bottomItem=0;
+
+ int h=0;
+ int maxWidth=itemProp_->iconSize();
+ int maxX=0;
+ int maxY=0;
+
+ QHash<QPersistentModelIndex,MvQIconItem*>::const_iterator it = items_.constBegin();
+ while(it != items_.constEnd())
+ {
+ //Reference pos
+ QPointF refPos=it.key().data(MvQFolderModel::PositionRole).toPoint();
+
+ if(refPos.x() >= 0 && refPos.y() >=0 &&
+ (refPos.x() != 0 || refPos.y() != 0))
+ {
+ QPointF pos=it.value()->pos();
+ if(pos.x() > maxX) maxX=pos.x();
+ if(pos.y() > maxY)
+ {
+ maxY=pos.y();
+ bottomItem=it.value();
+ }
+ }
+ else
+ {
+ needPos << it.value()->index();
+ }
+
+ QSize s=it.value()->boundingRect().size().toSize();
+ if(s.width() > maxWidth) maxWidth=s.width();
+ if(h == 0) h=s.height();
+
+ it++;
+ }
+
+ if(needPos.count() ==0)
+ return;
+
+ int dx=maxWidth+5;
+
+ qDebug() << viewport()->size();
+
+ int colNum=(viewport()->size().width()>200)?(viewport()->size().width()/dx):((maxX+maxWidth)/dx);
+ if(colNum==0) colNum=1;
+ int dy=h+12*itemProp_->scaling();
+
+
+ //Find the staring pos of the new items
+ int x=5;
+ int y=maxY+((maxY==0)?10:dy);
+ int sceneWidth = sceneRect().size().width();
+
+ if(sceneWidth< 20)
+ {
+ sceneWidth = maxX+maxWidth+20;
+ }
+
+ //Try to find a starting postion in the last "row" of the "old" items
+ if(bottomItem)
+ {
+ //See if other items intersect the bottom item's row
+ QRectF bottomRect=bottomItem->boundingRect();
+ bottomRect.moveTo(bottomItem->pos());
+ QRectF r(QPointF(sceneWidth-bottomRect.width(),bottomRect.y()),bottomRect.size());
+
+ while(r.x() > 0 && r.width() >0)
+ {
+ r.translate(-r.width(), 0);
+ QList<QGraphicsItem*> intersectVector = scene()->items(r,Qt::IntersectsItemShape,Qt::AscendingOrder);
+ if(!intersectVector.isEmpty())
+ {
+ QRectF endRect=intersectVector.at(0)->boundingRect();
+ endRect.moveTo(intersectVector.at(0)->pos());
+
+ if(intersectVector.count()==1)
+ {
+ if(intersectVector.at(0)== bottomItem)
+ {
+ x=bottomRect.x()-(dx-bottomRect.width())/2+dx;
+ y=bottomRect.y();
+ }
+ else if(fabs(endRect.y() - bottomRect.y()) < 2)
+ {
+ x=endRect.x()-(dx-endRect.width())/2+dx;
+ y=bottomRect.y();
+ }
+ else
+ {
+ x=endRect.x()-(dx-endRect.width())/2+dx;
+ y=r.y();
+ }
+ }
+ else
+ {
+ x=endRect.x()-(dx-endRect.width())/2+dx;
+ y=r.y();
+
+ }
+
+ break;
+ }
+ }
+ }
+
+ for(int i=0; i < needPos.count(); i++)
+ {
+ MvQIconItem *item=indexToItem(needPos[i]);
+ int w=item->boundingRect().size().toSize().width();
+ QPoint pos(x+(dx-w)/2,y);
+ if(pos.x()+w > sceneWidth)
+ {
+ x=5;
+ y+=dy;
+ }
+ pos=QPoint(x+(dx-w)/2,y);
+
+
+ QString name=filterModel_->data(needPos[i],Qt::DisplayRole).toString();
+ filterModel_->setData(needPos[i],itemProp_->referencePosition(name,pos),MvQFolderModel::PositionRole);
+ item->adjust();
+ x+=dx;
+ }
+}
+
+//===========================
+// Drag
+//===========================
+
+void MvQIconFolderView::mousePressEvent(QMouseEvent *event)
+{
+ canDrag_=false;
+
+ mousePos_=event->pos();
+
+ QPointF scenePos=mapToScene(event->pos());
+
+ if(editor_)
+ {
+ if(!editor_->contains(editor_->mapFromScene(scenePos)))
+ removeEditor();
+ else
+ {
+ QGraphicsView::mousePressEvent(event);
+ return;
+ }
+ }
+
+ //At this point the item cannot be the editor!!!
+ if(event->button() == Qt::LeftButton || event->button() == Qt::MidButton)
+ {
+ MvQIconItem *item=static_cast<MvQIconItem*>(itemAt(event->pos()));
+ if(item)
+ {
+ //check if editor is needed
+ if(item->textContains(item->mapFromScene(scenePos)))
+ {
+ selectOnlyOneItem(item);
+ edit(item);
+ return;
+ }
+
+ //Set startpos in Viewport coordinates and enable drag
+ startPos_=event->pos();
+ canDrag_=true;
+
+ if(event->button() == Qt::MidButton)
+ {
+ selectOnlyOneItem(item);
+ event->accept();
+ return;
+ }
+ }
+ }
+ else if(event->button() == Qt::RightButton)
+ {
+ QGraphicsItem *item=itemAt(event->pos());
+ selectOnlyOneItem(item);
+ event->accept();
+ return;
+ }
+
+ QGraphicsView::mousePressEvent(event);
+}
+
+void MvQIconFolderView::mouseMoveEvent(QMouseEvent *event)
+{
+ if(canDrag_ && event->buttons() & (Qt::LeftButton | Qt::MidButton))
+ {
+ int distance = (event->pos() - startPos_).manhattanLength();
+ if(distance >= QApplication::startDragDistance())
+ {
+ canDrag_=false;
+
+ QPoint scenePos=mapToScene(startPos_).toPoint();
+
+ if(allowMoveAction_)
+ {
+ if(event->buttons() & Qt::LeftButton)
+ performDrag(Qt::MoveAction,scenePos);
+ else if(event->buttons() & Qt::MidButton)
+ performDrag(Qt::CopyAction,scenePos);
+ }
+ else
+ {
+ performDrag(Qt::CopyAction,scenePos);
+ }
+ }
+
+ return;
+ }
+
+ QGraphicsView::mouseMoveEvent(event);
+}
+
+void MvQIconFolderView::performDrag(Qt::DropAction dropAction,QPoint scenePos)
+{
+ //The object that was dragged
+ //IconObject* dragObj=iconObjectAt(mapFromScene(scenePos));
+ IconObject* dragObj=iconObjectAt(scenePos);
+
+
+ //List of object to drag
+ QList<IconObject*> objLst;
+ foreach(QGraphicsItem* gt,scene()->selectedItems())
+ objLst << itemToObject(gt);
+
+ //Need a solution!!!!!!!!!!!!!!!!!1
+ bool fromHelper=(!allowMoveAction_);
+
+ QDrag *drag=buildDrag(dragObj,objLst,fromHelper,this,scenePos);
+
+ if(drag)
+ {
+ //We always initiate a copy or move action
+ drag->exec(Qt::CopyAction | Qt::MoveAction,dropAction);
+ }
+ else
+ {
+ qDebug() << "Could not build drag object!!!";
+ }
+}
+
+//===========================
+// Drop
+//===========================
+
+void MvQIconFolderView::checkDropTarget(QDropEvent *event)
+{
+ IconObject* dragObj=0;
+ if(event->mimeData()->hasFormat("metview/icon"))
+ {
+ const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+
+ if(mimeData)
+ dragObj=mimeData->dragObject();
+ }
+
+
+ if(!dragObj)
+ {
+ removeDropTarget();
+ return;
+ }
+
+ QPointF scenePos=mapToScene(event->pos());
+ Qt::DropAction dropAction=event->proposedAction();
+
+ IconObject *obj=iconObjectAt(scenePos);
+
+ if(obj != dragObj && obj && obj->isFolder() && !obj->locked())
+ {
+
+ MvQDropTarget::Instance()->reset(QString::fromStdString(obj->name()),(dropAction == Qt::MoveAction));
+ if(window())
+ {
+ MvQDropTarget::Instance()->move(mapToGlobal(event->pos())+QPoint(20,20));
+ }
+ return;
+ }
+ else
+ {
+ removeDropTarget();
+ }
+}
+
+void MvQIconFolderView::removeDropTarget()
+{
+ MvQDropTarget::Instance()->hide();
+}
+
+void MvQIconFolderView::dragEnterEvent(QDragEnterEvent *event)
+{
+ //qDebug() << event->mimeData()->formats();
+ //qDebug() << event->mimeData()->text();
+ //qDebug() << event->proposedAction();
+
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ event->accept();
+ }
+ else
+ event->ignore();
+}
+
+void MvQIconFolderView::dragMoveEvent(QDragMoveEvent *event)
+{
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ checkDropTarget(event);
+ event->accept();
+ }
+ else
+ {
+ removeDropTarget();
+ event->ignore();
+ }
+}
+
+void MvQIconFolderView::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ removeDropTarget();
+ event->accept();
+}
+
+void MvQIconFolderView::dropEvent(QDropEvent *event)
+{
+ removeDropTarget();
+
+ if(!event->source())
+ {
+ event->ignore();
+ return;
+ }
+
+ if(event->proposedAction() != Qt::CopyAction &&
+ event->proposedAction() != Qt::MoveAction)
+ {
+ event->ignore();
+ return;
+ }
+
+ QPoint pos=mapToScene(event->pos()).toPoint();
+
+ //--------------------------------------
+ // Drag and drop from another Metview folder
+ //--------------------------------------
+
+ if(event->mimeData()->hasFormat("metview/icon"))
+ {
+ const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+
+ if(!mimeData)
+ {
+ event->ignore();
+ return;
+ }
+
+ IconObject* dragObj=mimeData->dragObject();
+ MvQFolderModel *model=mimeData->model();
+
+ //We cannot drop icons into a locked folder!
+ if(model != folderModel_ && folderModel_->folder()->locked())
+ {
+ event->ignore();
+ return;
+ }
+
+ if(model && dragObj)
+ {
+ performDrop(event->proposedAction(),mimeData,pos,(model == folderModel_));
+ event->accept();
+ return;
+ }
+ }
+ else if(event->mimeData()->hasFormat("metview/new_icon"))
+ {
+ //We cannot drop icons into a locked folder!
+ if(folderModel_->folder()->locked())
+ {
+ event->ignore();
+ return;
+ }
+
+ const MvQNewIconMimeData* mimeData=qobject_cast<const MvQNewIconMimeData*>(event->mimeData());
+
+ if(!mimeData)
+ {
+ event->ignore();
+ return;
+ }
+
+ if(mimeData->iconDefType() == MvQNewIconMimeData::UserDef)
+ {
+ const IconClass &kind=IconClass::find(mimeData->className().toStdString());
+
+ QString cname=QString::fromStdString(kind.defaultName());
+
+ QPoint bottomRight(1,1);
+ QPoint newPos=itemProp_->positionFromHotSpot(cname,pos,bottomRight);
+ QPoint refPos=itemProp_->referencePosition(cname,newPos);
+ kind.createOne(folderModel_->folder(),refPos.x(),refPos.y());
+
+ event->accept();
+ return;
+ }
+ }
+
+
+ event->ignore();
+}
+
+void MvQIconFolderView::performDrop(Qt::DropAction dropAction,const MvQIconMimeData* data,
+ QPoint cursorScenePos,bool fromSameView)
+{
+ IconObject* dragObj=data->dragObject();
+
+ //Find out the itemRect topleft point in scene (scaled)
+ QPoint scenePos=itemProp_->positionFromHotSpot(QString::fromStdString(dragObj->name()),
+ cursorScenePos,data->hotSpotInVisRect());
+
+ //The object position - ignoring the scaling
+ QPoint refPos=itemProp_->referencePosition(QString::fromStdString(dragObj->name()),scenePos);
+ QPoint deltaPos=refPos-QPoint(dragObj->info().x(),dragObj->info().y());
+
+ bool toSameFolder=true;
+ Folder *folder=folderModel_->folder();
+ IconObject *objAt=iconObjectAt(cursorScenePos);
+
+ //See if we drop the icons onto a folder icons. We do not allow dropping a folder into itself!!
+ if(objAt && objAt->isFolder() && !data->objects().contains(objAt))
+ {
+ folder=static_cast<Folder*>(objAt);
+ toSameFolder=false;
+ }
+
+ bool doAdjustScene=false;
+ QRectF scRect=scene()->sceneRect();
+ float rightEdge=scRect.left();
+ float bottomEdge=scRect.bottom();
+
+ QPoint bottomRight(1,1);
+ for(int i=0; i < data->objects().count(); i++)
+ {
+ IconObject *obj=data->objects().at(i);
+
+ if(!obj || !isAccepted(obj))
+ continue;
+
+ //Find new reference position
+ QPoint newRefPos;
+
+ //If the drop target is a folder icon in the current folder we zero out the
+ //coordinates. This will instruct the view to find maningful new positions to the icons,
+ if(toSameFolder == false && folder)
+ {
+ newRefPos=QPoint(0,0);
+ }
+ //Otherwise we compute the possible new positions according to the position of the drag object
+ else
+ {
+ QPoint newPos;
+
+ if(obj == dragObj)
+ {
+ newRefPos=refPos;
+ newPos=scenePos;
+ }
+ else
+ {
+ QPoint dp=data->pixDistances().at(i);
+ newPos=itemProp_->positionFromHotSpot(QString::fromStdString(obj->name()),
+ cursorScenePos+dp*getIconSize(),
+ bottomRight);
+
+ newRefPos=itemProp_->referencePosition(QString::fromStdString(obj->name()),newPos);
+
+ //Icons can be off screen vertically or horizontally so we need to
+ //adjust their positions
+ if(newRefPos.y() < 0)
+ newRefPos.setY(0);
+ if(newRefPos.x() < 0)
+ newRefPos.setX(0);
+
+ }
+
+ if(!doAdjustScene)
+ {
+ QSize objSize=itemProp_->size(QString::fromStdString(obj->name()));
+ if(newPos.x()+objSize.width()+2 > rightEdge ||
+ newPos.y()+objSize.height()+2 > bottomEdge)
+ doAdjustScene=true;
+ }
+
+ }
+
+
+ //Copy
+ if(dropAction == Qt::CopyAction)
+ {
+ obj->clone(folder,false,newRefPos.x(),newRefPos.y());
+ }
+ //Move
+ else if(dropAction == Qt::MoveAction)
+ {
+ //Drag from the same view/model
+ if(fromSameView)
+ {
+ //Not into a folder icon
+ if(toSameFolder)
+ {
+ QString name=QString::fromStdString(obj->name());
+ QPoint oriPos(obj->info().x(),obj->info().y());
+ QPoint newPos=oriPos+deltaPos;
+
+ //Icons can be off screen vertically or horizontally so we need to
+ //adjust their positions
+ if(newPos.y() < 0)
+ newPos.setY(0);
+ if(newPos.x() < 0)
+ newPos.setX(0);
+
+ obj->position(newPos.x(),newPos.y());
+ if(MvQIconItem *item=objectToItem(obj))
+ {
+ item->setPos(itemProp_->position(name,newPos));
+ }
+ }
+ //Into a folder icon
+ else
+ {
+ if(!obj->locked())
+ {
+ obj->position(newRefPos.x(),newRefPos.y());
+ folder->adopt(obj);
+ }
+ }
+ }
+ //Drop from another view/model
+ else
+ {
+ if(!obj->locked())
+ {
+ obj->position(newRefPos.x(),newRefPos.y());
+ folder->adopt(obj);
+ }
+ }
+ }
+ }
+ if(doAdjustScene)
+ adjustSceneRect();
+}
+
+//===============================================
+// Renaming
+//===============================================
+
+void MvQIconFolderView::slotRename()
+{
+ if(editor_)
+ {
+ folderModel_->setData(editor_->item()->index(),editor_->editor()->text(),Qt::EditRole);
+ removeEditor();
+ }
+}
+
+//Called from the source model when the item was renamed!
+void MvQIconFolderView::slotObjectRenamed(const QModelIndex& sourceIndex,QString oriName)
+{
+ QModelIndex index=filterModel_->mapFromSource(sourceIndex);
+ MvQIconItem *item=indexToItem(index);
+ if(item)
+ {
+ if(itemProp_->viewMode() == Desktop::IconViewMode)
+ {
+ QString name=filterModel_->data(index,Qt::DisplayRole).toString();
+ QPoint pos=filterModel_->data(index,MvQFolderModel::PositionRole).toPoint();
+ QPoint newPos=itemProp_->adjsutReferencePosition(name,oriName,pos);
+ filterModel_->setData(index,newPos,MvQFolderModel::PositionRole);
+ }
+ item->adjust();
+ }
+}
+
+
+void MvQIconFolderView::edit(QGraphicsItem *item)
+{
+ if(item && !editor_)
+ {
+ qDebug() << "create editor";
+
+ MvQIconItem *ic=static_cast<MvQIconItem*>(item);
+ editor_=new MvQEditorProxy(ic);
+
+ //Warning: editingFinished is emitted twice !!! It is known qt bug!!
+ //So we needed to use returnPressed here.
+ connect(editor_->editor(),SIGNAL(returnPressed()),
+ this,SLOT(slotRename()));
+
+ scene()->addItem(editor_);
+ //editor_->setPos(item->pos().x(),item->pos().y()+getIconSize()+5);
+ editor_->setPos(ic->textPos());
+ scene()->setFocusItem(editor_,Qt::MouseFocusReason);
+ editor_->editor()->setFocus(Qt::MouseFocusReason);
+
+ if(defaultShortCut_)
+ defaultShortCut_->setEnabled(false);
+ }
+}
+
+void MvQIconFolderView::removeEditor()
+{
+ if(editor_)
+ {
+ scene()->removeItem(editor_);
+ editor_->deleteLater();
+ editor_=0;
+
+ if(defaultShortCut_)
+ defaultShortCut_->setEnabled(true);
+ }
+}
+
+//==============================================================
+// Keys
+//==============================================================
+
+void MvQIconFolderView::setupShortCut()
+{
+ if(shortCutInit_)
+ return;
+ else
+ shortCutInit_=true;
+
+ if(MvQContextItemSet *cms=cmSet())
+ {
+ foreach(MvQContextItem *cm,cms->icon())
+ {
+ if(!appIconActions_ || !appIconActions_->shortCutDefined(cm->shortCut()))
+ {
+ if(QShortcut *sc=cm->makeShortCut(this))
+ {
+ connect(sc,SIGNAL(activated()),
+ this,SLOT(slotIconShortCut()));
+ }
+ }
+ }
+
+ foreach(MvQContextItem *cm,cms->desktop())
+ {
+ if(!appDesktopActions_ || !appDesktopActions_->shortCutDefined(cm->shortCut()))
+ {
+ if(QShortcut *sc=cm->makeShortCut(this))
+ {
+ connect(sc,SIGNAL(activated()),
+ this,SLOT(slotDesktopShortCut()));
+ }
+ }
+ }
+
+ if(QShortcut* sc=cms->makeDefaultIconShortCut(this))
+ {
+ defaultShortCut_=sc;
+ connect(defaultShortCut_,SIGNAL(activated()),
+ this,SLOT(slotDefaultShortCut()));
+ }
+
+ }
+}
+
+void MvQIconFolderView::slotIconShortCut()
+{
+ QShortcut *sc=static_cast<QShortcut*>(QObject::sender());
+ if(sc)
+ { QModelIndexList lst=selectedIndexes();
+
+ qDebug() << "shortcuts" << sc << lst;
+ if(lst.count() > 0)
+ handleIconShortCut(sc,lst);
+ }
+}
+
+void MvQIconFolderView::slotDefaultShortCut()
+{
+ if(defaultShortCut_)
+ { QModelIndexList lst=selectedIndexes();
+
+ qDebug() << "default shortcut" << lst;
+ if(lst.count() == 1)
+ handleDoubleClick(lst.at(0));
+ }
+}
+
+void MvQIconFolderView::slotDesktopShortCut()
+{
+ QShortcut *sc=static_cast<QShortcut*>(QObject::sender());
+ if(sc)
+ {
+ QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+ handleDesktopShortCut(sc,mousePos_+scrollOffset,this);
+ }
+}
+
+
+void MvQIconFolderView::keyPressEvent(QKeyEvent* event)
+{
+ QGraphicsItem *current=0;
+
+ qDebug() << "KEY" << event->key();
+
+ if(editor_)
+ {
+ QGraphicsView::keyPressEvent(event);
+ return;
+ }
+
+ switch(event->key())
+ {
+ case Qt::Key_Left:
+ case Qt::Key_Right:
+ case Qt::Key_Up:
+ case Qt::Key_Down:
+ case Qt::Key_Home:
+ case Qt::Key_End:
+ {
+ current=findByKey(event->key());
+ if(current)
+ {
+ if(!current->isSelected())
+ {
+ scene()->clearSelection();
+ current->setSelected(true);
+ ensureVisible(current);
+ }
+ }
+ event->accept();
+ }
+ break;
+ default:
+ bool modified = (event->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier));
+ if(!event->text().isEmpty() && !modified)
+ {
+ current=findByText(event->text());
+ if(current)
+ {
+ if(!current->isSelected())
+ {
+ scene()->clearSelection();
+ current->setSelected(true);
+ ensureVisible(current);
+ }
+ }
+ event->accept();
+ }
+ else
+ {
+ event->ignore();
+ }
+ break;
+ }
+
+ //QGraphicsView::keyPressEvent(event);
+}
+
+
+//---------------------------------
+// Keypad navigation
+//---------------------------------
+
+QGraphicsItem *MvQIconFolderView::findByKey(int key)
+{
+ if(items().count()==0)
+ return 0;
+
+ QGraphicsItem *current=items().at(0);
+ QList<QGraphicsItem*> sLst=scene()->selectedItems();
+ if(sLst.size()>0) current=sLst.at(0);
+
+ QRectF rect=current->boundingRect();
+ rect.moveTo(current->pos());
+ QRectF initialRect = rect;
+
+ QSizeF contents = sceneRect().size();
+ QList<QGraphicsItem*> intersectVector;
+
+ switch(key)
+ {
+ case Qt::Key_Left:
+ while (intersectVector.isEmpty())
+ {
+ rect.translate(-rect.width(), 0);
+ if (rect.right() <= 0)
+ {
+ rect.moveTo(contents.width()-rect.width(),rect.y()-rect.height());
+ if (rect.bottom() <= 0)
+ return current;
+ if (rect.top() < 0)
+ rect.setTop(0);
+ }
+ if (rect.left() < 0)
+ rect.setLeft(0);
+
+ intersectVector = scene()->items(rect,Qt::IntersectsItemShape,Qt::AscendingOrder);
+ intersectVector.removeAll(current);
+ }
+ return intersectVector.at(0);
+ case Qt::Key_Right:
+ while (intersectVector.isEmpty())
+ {
+ rect.translate(rect.width(), 0);
+ if (rect.left() >= contents.width())
+ {
+ rect.moveTo(0,rect.y()+rect.height());
+ if (rect.top() >= contents.height())
+ return current;
+ if (rect.bottom() > contents.height())
+ rect.setBottom(contents.height());
+ }
+ if (rect.right() > contents.width())
+ rect.setRight(contents.width());
+
+ intersectVector = scene()->items(rect,Qt::IntersectsItemShape,Qt::AscendingOrder);
+ intersectVector.removeAll(current);
+ }
+ return intersectVector.at(0);
+
+ case Qt::Key_Up:
+ while (intersectVector.isEmpty())
+ {
+ rect.translate(0, -rect.height());
+ if (rect.bottom() <= 0)
+ return current;
+ if (rect.top() < 0)
+ rect.setTop(0);
+
+ intersectVector = scene()->items(rect,Qt::IntersectsItemShape,Qt::AscendingOrder);
+ intersectVector.removeAll(current);
+ }
+ return intersectVector.at(0);
+
+ case Qt::Key_Down:
+ while (intersectVector.isEmpty())
+ {
+ rect.translate(0, rect.height());
+ if (rect.top() >= contents.height())
+ return current;
+ if (rect.bottom() > contents.height())
+ rect.setBottom(contents.height());
+ intersectVector = scene()->items(rect,Qt::IntersectsItemShape,Qt::AscendingOrder);
+ intersectVector.removeAll(current);
+ }
+ return intersectVector.at(0);
+
+ case Qt::Key_Home:
+ rect.moveTo(-rect.width(),0);
+ while (intersectVector.isEmpty())
+ {
+ rect.translate(rect.width(), 0);
+ if (rect.left() >= contents.width())
+ {
+ rect.moveTo(0,rect.y()+rect.height());
+ if (rect.top() >= contents.height())
+ return current;
+ if (rect.bottom() > contents.height())
+ rect.setBottom(contents.height());
+ }
+ if (rect.right() > contents.width())
+ rect.setRight(contents.width());
+
+ intersectVector = scene()->items(rect,Qt::IntersectsItemShape,Qt::AscendingOrder);
+ intersectVector.removeAll(current);
+ }
+ return intersectVector.at(0);
+
+ case Qt::Key_End:
+ rect.moveTo(contents.width()-1,contents.height()-rect.height());
+ while (intersectVector.isEmpty())
+ {
+ rect.translate(-rect.width(), 0);
+ if (rect.right() <= 0)
+ {
+ rect.moveTo(contents.width()-rect.width(),rect.y()-rect.height());
+ if (rect.bottom() <= 0)
+ return current;
+ if (rect.top() < 0)
+ rect.setTop(0);
+ }
+ if (rect.left() < 0)
+ rect.setLeft(0);
+
+ intersectVector = scene()->items(rect,Qt::IntersectsItemShape,Qt::AscendingOrder);
+ intersectVector.removeAll(current);
+ }
+ return intersectVector.at(0);
+
+ default:
+ return current;
+ }
+}
+
+QGraphicsItem* MvQIconFolderView::findByText(QString search)
+{
+ if(!folderModel_->folder() || items().count()==0)
+ return 0;
+
+ //Get current item and index
+ QGraphicsItem *currentItem=items().at(0);
+ QList<QGraphicsItem*> sLst=scene()->selectedItems();
+ if(sLst.size()>0) currentItem=sLst.at(0);
+ QModelIndex current = itemToIndex(currentItem);
+
+ QTime now(QTime::currentTime());
+ if (search.isEmpty()
+ || (keyboardInputTime_.msecsTo(now) > QApplication::keyboardInputInterval()))
+ {
+ keyboardInput_ = search;
+ }
+ else
+ {
+ keyboardInput_ += search;
+ }
+ keyboardInputTime_ = now;
+
+
+ bool sameKey = false;
+ if(keyboardInput_.length() > 1)
+ {
+ int c = keyboardInput_.count(keyboardInput_.at(keyboardInput_.length() - 1));
+ sameKey = (c == keyboardInput_.length());
+
+ }
+
+ const QString searchString = sameKey ? QString(keyboardInput_.at(0)) : keyboardInput_;
+ QModelIndexList match = filterModel_->match(current, Qt::DisplayRole, searchString,-1,
+ Qt::MatchStartsWith | Qt::MatchWrap);
+
+ match.removeOne(current);
+ return (match.count() > 0)?indexToItem(match.at(0)):currentItem;
+}
+
+//==============================================
+// Effects
+//==============================================
+
+void MvQIconFolderView::blink(const QModelIndex& index)
+{
+ if(MvQIconItem *item=indexToItem(index))
+ {
+ ensureVisible(item);
+ if(!timer_)
+ {
+ timer_=new MvQIconItemTimer(item,this);
+ }
+ else
+ {
+ timer_->setItem(item);
+ }
+
+ timer_->blink();
+ }
+}
+
+void MvQIconFolderView::showIcon(const QModelIndex& index)
+{
+ if(MvQIconItem *item=indexToItem(index))
+ {
+ ensureVisible(item);
+ selectOnlyOneItem(item);
+ }
+}
\ No newline at end of file
diff --git a/src/Desktop/MvQIconFolderView.h b/src/Desktop/MvQIconFolderView.h
index 8ffea93..98cf1d6 100644
--- a/src/Desktop/MvQIconFolderView.h
+++ b/src/Desktop/MvQIconFolderView.h
@@ -10,41 +10,229 @@
#ifndef MvQIconFolderView_H
#define MvQIconFolderView_H
-#include "MvQIconFolderViewBase.h"
+#include <QGraphicsItem>
+#include <QGraphicsProxyWidget>
+#include <QGraphicsScene>
+#include <QGraphicsView>
+#include <QHash>
+#include <QPersistentModelIndex>
+#include <QTime>
+#include <QTimer>
-class MvQIconFolderView : public MvQIconFolderViewBase
+#include "MvQFolderViewBase.h"
+
+#include "IconObject.h"
+
+class QLineEdit;
+class MvQActionList;
+class MvQIconItem;
+class MvQIconFolderView;
+class MvQIconMimeData;
+
+class MvQIconItemTimer : public QTimer
+{
+Q_OBJECT
+
+public:
+ MvQIconItemTimer(MvQIconItem *,QObject *parent=0);
+ void setItem(MvQIconItem *);
+ void blink();
+
+public slots:
+ void slotTimeout();
+
+protected:
+ MvQIconItem *item_;
+ int cnt_;
+ const int maxCnt_;
+};
+
+
+class MvQEditorProxy : public QGraphicsProxyWidget
+{
+public:
+ MvQEditorProxy(MvQIconItem *item,QGraphicsItem *parent=0);
+ QLineEdit* editor();
+ MvQIconItem* item();
+
+protected:
+ MvQIconItem* item_;
+ QLineEdit* editor_;
+};
+
+/*class MvQDropTargetItem : public QGraphicsItem
+{
+public:
+ MvQDropTargetItem(MvQIconItem*,bool);
+ QRectF boundingRect() const;
+ void paint(QPainter*, const QStyleOptionGraphicsItem *,QWidget*);
+ void setTarget(MvQIconItem*,bool);
+
+protected:
+ void adjust(bool);
+
+ MvQIconItem* target_;
+ QRectF bRect_;
+ QString text1_;
+ QString text2_;
+ int xPadding_;
+ int yPadding_;
+ int textOffset_;
+ QPen bgPen_;
+ QBrush bgBrush_;
+ QPixmap pix_;
+};*/
+
+
+class MvQIconItem : public QGraphicsItem
{
+public:
+ MvQIconItem(const QModelIndex& index,MvQFolderItemProperty* itemProp,MvQIconFolderView*,QGraphicsItem* parent=0);
+ QRectF boundingRect() const;
+ void paint(QPainter*, const QStyleOptionGraphicsItem *,QWidget*);
+ const QModelIndex& index();
+ QRect pixmapRect();
+ QString text();
+ QFont font();
+ void adjust();
+ bool textContains(QPointF);
+ void setDropTarget(bool);
+ enum BlinkState {NoBlink,BlinkOn,BlinkOff};
+ void setBlinkState(BlinkState);
+ QPointF textPos();
+
+protected:
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *);
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent *);
+
+ MvQIconFolderView* view_;
+ MvQFolderItemProperty* itemProp_;
+ QPersistentModelIndex index_;
+ QRectF bRect_;
+ bool hover_;
+ bool dropTarget_;
+ BlinkState blinkState_;
+
+ //We make these static members because they are the same for all instances
+ static QPen editPen_;
+ static QBrush editBrush_;
+ static QPen hoverPen_;
+ static QBrush hoverBrush_;
+ static QPen selectPen_;
+ static QBrush selectBrush_;
+};
+
+class MvQIconFolderView : public QGraphicsView, public MvQFolderViewBase
+{
+ friend class MvQIconItem;
+
Q_OBJECT
public:
- MvQIconFolderView(MvQFolderModel *,QWidget *parent=0);
+ MvQIconFolderView(MvQFolderModel *,MvQActionList*, MvQActionList*, QWidget *parent=0);
~MvQIconFolderView();
- void toGrid(MvQ::GridSortMode);
+ void toGrid(Desktop::GridSortMode);
static void load(request* r);
+ QWidget* concreteWidget();
+ void doReset();
public slots:
- void slotSetPositions();
void slotIconSizeChanged();
- void slotUpdateObjectPositions();
void slotObjectArrived(const QModelIndex&);
void slotObjectRenamed(const QModelIndex&,QString);
void reset();
-
+ void slotContextMenu(const QPoint&);
+ void slotDataChanged(const QModelIndex& from,const QModelIndex& to);
+ void slotIconShortCut();
+ void slotDefaultShortCut();
+ void slotDesktopShortCut();
+ void slotRename();
+
+signals:
+ void currentFolderChanged(Folder*);
+ void folderDoubleCliked(QString);
+ void itemEntered(QString);
+ void iconCommandRequested(QString,IconObjectH);
+ void desktopCommandRequested(QString,QPoint);
+
protected:
- void setPositions();
- void doDelayedPositioning();
- void paintEvent(QPaintEvent *);
+ void initImportedHalfSizeItems();
+ QModelIndex indexAt(QPointF);
+ IconObject* iconObjectAt(QPointF);
+ MvQIconItem* objectToItem(IconObject* obj);
+ MvQIconItem* indexToItem(const QModelIndex& index);
+ QModelIndex itemToIndex(QGraphicsItem *);
+ IconObject* itemToObject(QGraphicsItem *);
+ QRectF itemRect(QGraphicsItem*);
+ QRect itemRect(QList<IconObject*>);
+ QRect itemRect(IconObject*);
+ QRect pixmapRect(QList<IconObject*>);
+ QRect pixmapRect(IconObject*);
+ QModelIndexList selectedIndexes();
+ void selectOnlyOneItem(QGraphicsItem *);
- void performDrop(QDropEvent*,IconObject*,QList<IconObject*>,QPoint,bool);
- void computeGrid(MvQ::GridSortMode mode=MvQ::GridSortByName);
- void computePositions();
+ void adjustSceneRect();
+ void adjustItems();
+ QSize maxItemSize();
+ void computeGrid(Desktop::GridSortMode mode=Desktop::GridSortByName);
+ void checkPositions();
MvQContextItemSet* cmSet();
+ void setupShortCut();
+
+ bool event(QEvent* event);
+ void itemEntered(MvQIconItem *item);
+ void itemLeft(MvQIconItem *item);
+ void mouseDoubleClickEvent(QMouseEvent*);
+ void keyPressEvent(QKeyEvent*);
+ void mousePressEvent(QMouseEvent*);
+ void mouseMoveEvent(QMouseEvent*);
+ void performDrag(Qt::DropAction,QPoint);
+ void dragEnterEvent(QDragEnterEvent*);
+ void dragMoveEvent(QDragMoveEvent*);
+ void dragLeaveEvent(QDragLeaveEvent*);
+ void dropEvent(QDropEvent*);
+ //void performDrop(Qt::DropAction,IconObject*,QList<IconObject*>,QPoint,QPoint,bool);
+
+ void performDrop(Qt::DropAction dropAction,const MvQIconMimeData* data,
+ QPoint cursorScenePos,bool fromSameView);
+
+
+ void checkDropTarget(QDropEvent*);
+ void removeDropTarget();
+
+ void edit(QGraphicsItem *);
+ void removeEditor();
+
+ QGraphicsItem *findByKey(int);
+ QGraphicsItem *findByText(QString);
+
+ void folderChanged();
+ void blink(const QModelIndex&);
+ void showIcon(const QModelIndex&);
+ void iconCommandFromMain(QString name);
+ void iconCommand(QString, IconObjectH);
+ void desktopCommand(QString, QPoint);
QPoint prevScrollPos_;
bool paintEnabled_;
+ QString keyboardInput_;
+ QTime keyboardInputTime_;
+
+ private:
+ bool allowMoveAction_;
+ bool enterFolders_;
+ QPoint mousePos_;
+ QPoint startPos_;
+ bool canDrag_;
+ QHash<QPersistentModelIndex,MvQIconItem*> items_;
+ MvQEditorProxy *editor_;
+ MvQIconItemTimer *timer_;
+ QShortcut* defaultShortCut_;
+ MvQActionList* appIconActions_;
+ MvQActionList* appDesktopActions_;
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQIconFolderViewBase.cc b/src/Desktop/MvQIconFolderViewBase.cc
deleted file mode 100644
index e6d1a75..0000000
--- a/src/Desktop/MvQIconFolderViewBase.cc
+++ /dev/null
@@ -1,924 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-#include <QApplication>
-#include <QDataStream>
-#include <QDropEvent>
-#include <QDebug>
-#include <QMouseEvent>
-#include <QMenu>
-#include <QPainter>
-#include <QScrollBar>
-#include <QShortcut>
-#include <QTimer>
-
-#include "MvQIconFolderViewBase.h"
-
-#include "IconClass.h"
-#include "IconInfo.h"
-#include "IconObject.h"
-#include "Folder.h"
-
-#include "MvQFolderViewDelegate.h"
-#include "MvQContextMenu.h"
-#include "MvQIconMimeData.h"
-#include "MvQIconProvider.h"
-
-MvQIconFolderViewBase::MvQIconFolderViewBase(MvQFolderModel *folderModel,QWidget *parent) :
- QListView(parent),
- MvQFolderViewBase(folderModel),
- allowMoveAction_(true),
- enterFolders_(true),
- canDrag_(false)
-{
- //setProperty("mvStyle","IconFolderView");
-
- setContextMenuPolicy(Qt::CustomContextMenu);
-
- //Drag and drop
- setDragEnabled(true);
- setAcceptDrops(true);
- setDropIndicatorShown(true);
- setDragDropMode(QAbstractItemView::DragDrop);
-
- //Delegate
- delegate_=new MvQIconDelegate(this);
- setItemDelegate(delegate_);
-
- connect(delegate_,SIGNAL(repaintIt(const QModelIndex&)),
- this,SLOT(update(const QModelIndex&)));
-
-
- //We need to call it here because
- //slotUpdateObjectPositions has not been called so far!
- //computePositions();
-
- //Set the model. This will call reset on the view. Reset assigns the correct
- //positions to items.
- setModel(filterModel_);
-
- setMouseTracking(true);
-
- setEditTriggers(QAbstractItemView::NoEditTriggers);
- setSelectionMode(QAbstractItemView::ExtendedSelection);
-
- //Context menu
- connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
- this, SLOT(slotContextMenu(const QPoint &)));
-
- //Selection in the view
- connect(this,SIGNAL(doubleClicked(const QModelIndex&)),
- this,SLOT(slotDoubleClickItem(const QModelIndex)));
-
- connect(this,SIGNAL(entered(const QModelIndex&)),
- this,SLOT(slotEntered(const QModelIndex&)));
-
- //From model
- //connect(folderModel_,SIGNAL(setPositions()),
- // this,SLOT(slotSetPositions()));
-
- /*connect(folderModel_,SIGNAL(iconSizeChanged()),
- this,SLOT(slotIconSizeChanged()));
-
- connect(folderModel_,SIGNAL(updateObjectPositions()),
- this,SLOT(slotUpdateObjectPositions()));
-
- connect(folderModel_,SIGNAL(objectRenamed(const QModelIndex&,QString)),
- this,SLOT(slotObjectRenamed(const QModelIndex& ,QString)));*/
-
-
- //We need to call it here because
- //slotUpdateObjectPositions has not been called so far!
- //computePositions();
-
- //We let the delegate to paint the items
- delegate_->setEnablePaint(true);
-
- //We need to tell the view the new positions
- //setPositions();
-}
-
-
-MvQIconFolderViewBase::~MvQIconFolderViewBase()
-{
- //delete filterModel_;
-}
-
-void MvQIconFolderViewBase::slotSelectItem(const QModelIndex& /*index*/)
-{
- /*if(changeFolder(index,FilterModelIndex))
- {
- changeFolder(index,FilterModelIndex);
- emit currentFolderChanged(currentFolder());
- }*/
-}
-
-void MvQIconFolderViewBase::slotDoubleClickItem(const QModelIndex& index)
-{
- handleDoubleClick(index);
-}
-
-void MvQIconFolderViewBase::slotEntered(const QModelIndex& index)
-{
- emit itemEntered(itemInfo(index,FilterModelIndex));
-}
-
-void MvQIconFolderViewBase::setupShortCut()
-{
- if(shortCutInit_)
- return;
- else
- shortCutInit_=true;
-
- if(MvQContextItemSet *cms=cmSet())
- {
- foreach(MvQContextItem *cm,cms->icon())
- {
- QShortcut *sc=cm->makeShortCut(this);
-
- if(sc)
- {
- connect(sc,SIGNAL(activated()),
- this,SLOT(slotIconShortCut()));
- }
- }
- }
-}
-
-void MvQIconFolderViewBase::slotIconShortCut()
-{
- QShortcut *sc=static_cast<QShortcut*>(QObject::sender());
- if(sc)
- { QModelIndexList lst=selectedIndexes();
- if(lst.count() > 0)
- handleIconShortCut(sc,lst.at(0));
- }
-}
-
-void MvQIconFolderViewBase::slotContextMenu(const QPoint& position)
-{
- QModelIndexList lst=selectedIndexes();
- QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
- handleContextMenu(indexAt(position),lst,mapToGlobal(position),position+scrollOffset,this);
-
- /*if(lst.count() == 1)
- {
- QModelIndex index=indexAt(position);
- QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
-
- handleContextMenu(index,mapToGlobal(position),position+scrollOffset,this);
- }
- else if(lst.count() > 1)
- {
- handleContextMenu(lst,mapToGlobal(position),position+scrollOffset,this);
- } */
-}
-
-void MvQIconFolderViewBase::folderChanged()
-{
- emit currentFolderChanged(currentFolder());
-}
-
-void MvQIconFolderViewBase::iconCommand(QString name,IconObjectH obj)
-{
- emit iconCommandRequested(name,obj);
-}
-
-void MvQIconFolderViewBase::desktopCommand(QString name,QPoint pos)
-{
- emit desktopCommandRequested(name,pos);
-}
-
-void MvQIconFolderViewBase::keyPressEvent(QKeyEvent * event)
-{
- setupShortCut();
- QAbstractItemView::keyPressEvent(event);
-}
-
-//=================================================
-//
-// Drag and drop. We need this cutom implementation
-// because the solution offered by the model-view
-// framework was not satisfactory.
-//
-//=================================================
-
-//===========================
-// Drag
-//===========================
-
-void MvQIconFolderViewBase::mousePressEvent(QMouseEvent *event)
-{
- canDrag_=false;
-
- if(event->button() == Qt::LeftButton || event->button() == Qt::MidButton)
- {
- startPos_=event->pos();
-
- QModelIndex index=indexAt(event->pos());
- if(index.isValid())
- {
- QModelIndexList lst=selectedIndexes();
-
- if(lst.count() <= 1 || !lst.contains(index))
- {
- setCurrentIndex(index);
- QRect rect=visualRect(index);
- if(event->pos().y() > rect.top()+getIconSize())
- {
- edit(index);
- return;
- }
- }
-
- canDrag_=true;
-
- //This prevents rubberband selection
- setState(NoState);
- //return;
- }
- }
-
- QListView::mousePressEvent(event);
-}
-
-void MvQIconFolderViewBase::mouseMoveEvent(QMouseEvent *event)
-{
-
- if(canDrag_ && event->buttons() & (Qt::LeftButton | Qt::MidButton))
- {
- //qDebug() << "should start drag" << event->pos() << startPos_;
-
- int distance = (event->pos() - startPos_).manhattanLength();
- if(distance >= QApplication::startDragDistance())
- {
- canDrag_=false;
- setState(DraggingState);
-
- QModelIndexList lst=selectedIndexes();
-
- ///qDebug() << "selected" << lst.count();
-
- if(allowMoveAction_)
- {
- if(event->buttons() & Qt::LeftButton)
- performDrag(Qt::MoveAction,event->pos());
- else if(event->buttons() & Qt::MidButton)
- performDrag(Qt::CopyAction,event->pos());
- }
- else
- {
- performDrag(Qt::CopyAction,event->pos());
- }
-
- setState(NoState);
- }
-
- return;
- }
-
- QListView::mouseMoveEvent(event);
-}
-
-void MvQIconFolderViewBase::performDrag(Qt::DropAction dropAction,QPoint pos)
-{
- QModelIndexList lst=selectedIndexes();
- QModelIndex viewIndex=indexAt(pos);
- QModelIndex index=filterModel_->mapToSource(viewIndex);
-
- qDebug() << lst;
- qDebug() << index << filterModel_->mapFromSource(index);
-
- if(lst.contains(viewIndex) && index.isValid())
- {
- IconObject* dragObj=folderModel_->objectFromIndex(index);
- if(dragObj)
- {
-
- //qDebug() << "drag" << dragObj->name().c_str();
-
- //No drag for edited icons
- //if(obj->editor())
- // return;
-
- //Create drag object
- QDrag *drag = new QDrag(this);
-
- //List of object to drag
- QList<IconObject*> objLst;
- foreach(QModelIndex idx,lst)
- {
- objLst << folderModel_->objectFromIndex(idx);
- }
-
- //Create and set the drag pixmap and set hotspot
- QPoint hotSpotInRect;
- if(lst.count() > 1)
- {
- //Find bounding box for selected visrects
- QRect bbox;
- foreach(QModelIndex idx,lst)
- {
- bbox=bbox.united(visualRect(idx));
- }
-
- //Render the drag pixmap
- QPixmap pix(bbox.size());
- pix.fill(Qt::transparent);
- QPainter painter(&pix);
-
- for(int i=0; i < objLst.count(); i++)
- {
- QRect vr=visualRect(lst[i]);
- painter.drawPixmap(vr.topLeft()-bbox.topLeft(),
- MvQIconProvider::pixmap(objLst.at(i)->iconClass(),getIconSize()));
- }
-
- drag->setPixmap(pix);
-
- //Find the hotspot
- QRect rect=visualRect(viewIndex);
- hotSpotInRect=pos-rect.topLeft();
- QPoint hotSpot(pos.x()-rect.center().x()+getIconSize()/2,pos.y()-rect.top());
- hotSpot=rect.topLeft()-bbox.topLeft()+hotSpot;
- drag->setHotSpot(hotSpot);
- }
- else
- {
- drag->setPixmap(MvQIconProvider::pixmap(dragObj->iconClass(),getIconSize()));
-
- QRect rect=visualRect(viewIndex);
- hotSpotInRect=pos-rect.topLeft();
- QPoint hotSpot(pos.x()-rect.center().x()+getIconSize()/2,pos.y()-rect.top());
- drag->setHotSpot(hotSpot);
- }
-
-
- //Create and set drag mime data
- MvQIconMimeData *mimeData= new MvQIconMimeData(folderModel_,
- dragObj,hotSpotInRect,
- objLst);
-
-
- //Need a solution!!!!!!!!!!!!!!!!!1
- mimeData->setFromHelper(!allowMoveAction_);
-
- drag->setMimeData(mimeData);
-
-
- //qDebug() << "drag" << rect << pos;
-
- //qDebug() << "drag" << mimeData->path() << mimeData->className();
-
- if(drag->exec(dropAction) == dropAction)
- {
- }
- }
- }
-}
-
-//===========================
-// Drop
-//===========================
-
-void MvQIconFolderViewBase::dragEnterEvent(QDragEnterEvent *event)
-{
- //qDebug() << event->mimeData()->formats();
- //qDebug() << event->mimeData()->text();
- //qDebug() << event->proposedAction();
-
- if(event->source() &&
- (event->proposedAction() == Qt::CopyAction ||
- event->proposedAction() == Qt::MoveAction))
- {
- //event->setDropAction(Qt::CopyAction);
- event->accept();
- }
- else
- event->ignore();
-}
-
-void MvQIconFolderViewBase::dragMoveEvent(QDragMoveEvent *event)
-{
- if(event->source() &&
- (event->proposedAction() == Qt::CopyAction ||
- event->proposedAction() == Qt::MoveAction))
- {
- event->accept();
- }
- else
- event->ignore();
-}
-
-void MvQIconFolderViewBase::dropEvent(QDropEvent *event)
-{
- //qDebug() << "dropEvent" << folderModel_->fullName();
-
- if(folderModel_->folder()->locked())
- {
- event->ignore();
- return;
- }
-
- if(!event->source())
- {
- event->ignore();
- return;
- }
-
- if(event->proposedAction() != Qt::CopyAction &&
- event->proposedAction() != Qt::MoveAction)
- {
- event->ignore();
- return;
- }
-
- QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
- QPoint pos=event->pos()+scrollOffset;
-
- //--------------------------------------
- // Drag and drop from another folder
- //--------------------------------------
-
- if(event->mimeData()->hasFormat("metview/icon"))
- {
- const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
-
- if(!mimeData)
- {
- event->ignore();
- return;
- }
-
- IconObject* dragObj=mimeData->dragObject();
- QList<IconObject*> objLst=mimeData->objects();
- MvQFolderModel *model=mimeData->model();
-
- if(model && dragObj)
- {
- QPoint hotSpot=mimeData->hotSpotInVisRect();
- pos-=QPoint(hotSpot.x(),hotSpot.y());
- if(pos.x() < 1) pos.setX(1);
-
- performDrop(event,dragObj,objLst,pos,(model == folderModel_));
-
- /*
- //The object position - ignoring the scaling
- QPoint objPos=referencePosition(QString::fromStdString(dragObj->name()),pos);
- QPoint deltaPos=objPos-QPoint(dragObj->info().x(),dragObj->info().y());
-
- //Drop from the same view/model --> copy
- if(model == folderModel_)
- {
- if(helper_)
- {
- toGrid(MvQ::GridSortByName);
- }
- else
- {
- foreach(IconObject* obj, objLst)
- {
- if(!obj || !isAccepted(obj))
- continue;
-
- QModelIndex index=folderModel_->indexFromObject(obj);
- QPoint oriPos(obj->info().x(),obj->info().y());
- QPoint newPos=oriPos+deltaPos;
- obj->position(newPos.x(),newPos.y());
- setPositionForIndex(newPos,filterModel_->mapFromSource(index));
- }
- }
- }
- //Drop from another view/model --> copy or move
- else
- {
- foreach(IconObject* obj, objLst)
- {
- //Cannot move/copy edited icons into another folder!!!
- if(!obj->editor() && isAccepted(obj))
- {
- QPoint oriPos(obj->info().x(),obj->info().y());
- QPoint newPos=oriPos+deltaPos;
-
- if(event->proposedAction() == Qt::CopyAction || allowMoveAction_== false)
- {
- obj->clone(folderModel_->folder(),false,newPos.x(),newPos.y());
- }
-
- else if(event->proposedAction() == Qt::MoveAction)
- {
- obj->position(newPos.x(),newPos.y());
- folderModel_->folder()->adopt(obj);
- }
- }
- }
-
- if(helper_)
- {
- toGrid(MvQ::GridSortByName);
- }
- }
- */
-
- event->accept();
- return;
- }
- }
-
- event->ignore();
-}
-
-/*void MvQIconFolderViewBase::reset()
-{
- //
- //if(delegate_)
- // delegate_->setEnablePaint(false);
-
- int x=horizontalScrollBar()->value();
- int y=verticalScrollBar()->value();
-
- QListView::reset();
-
- horizontalScrollBar()->setValue(x);
- verticalScrollBar()->setValue(y);
-
- executeDelayedItemsLayout();
-
- //Change item positions. This will enable the painting in the delegte.
- //Currently it causes a flickering!!!!
- //doDelayedPositioning();
-
-}*/
-
-/*void MvQIconFolderViewBase::toGrid(MvQ::GridSortMode mode)
-{
- //computeGrid(mode);
- setPositions();
-} */
-
-//----------------------------------------
-// Helper
-//----------------------------------------
-
-/*void MvQIconFolderViewBase::setHelper(bool b)
-{
- helper_=b;
- if(helper_)
- {
- slotUpdateObjectPositions();
- slotSetPositions();
- }
-}
-*/
-/*
-//===============================================
-// Icon positions
-//===============================================
-
-bool MvQIconFolderViewBase::isIconDistanceScaled()
-{
- return (getIconSize() > 32)?true:false;
-}
-
-void MvQIconFolderViewBase::slotIconSizeChanged()
-{
- if(getIconSize() > 32)
- {
- iconDistanceScale_=static_cast<float>(getIconSize())/32.;
- }
- else
- {
- iconDistanceScale_=1.;
- }
-
- QListView::setIconSize(QSize(getIconSize(),getIconSize()));
-
- //Reset the view
- reset();
-
- //Change item positions
- //setPositions();
-
-
-
-}
-
-void MvQIconFolderViewBase::doDelayedPositioning()
-{
- QTimer::singleShot(0,this,SLOT(slotSetPositions()));
-}
-
-void MvQIconFolderViewBase::setPositions()
-{
- for(int i=0; i < filterModel_->rowCount(); i++)
- {
- QModelIndex index=filterModel_->index(i,0,QModelIndex());
- QModelIndex sourceIndex=filterModel_->mapToSource(index);
- QPoint pos=scaledPosition(sourceIndex);
- setPositionForIndex(pos,index);
- }
-}
-
-void MvQIconFolderViewBase::slotUpdateObjectPositions()
-{
- if(helper_)
- {
- toGrid(MvQ::GridSortByName);
- }
- else
- {
- computePositions();
- }
-}
-
-void MvQIconFolderViewBase::slotSetPositions()
-{
- if(delegate_)
- delegate_->setEnablePaint(true);
-
- //int x=horizontalScrollBar()->value();
- //int y=verticalScrollBar()->value();
- setPositions();
- //horizontalScrollBar()->setValue(x);
- //verticalScrollBar()->setValue(y);
-}
-
-void MvQIconFolderViewBase::slotObjectRenamed(const QModelIndex& sourceIndex,QString oriName)
-{
- adjustRenamedObject(sourceIndex,oriName);
- QPoint pos=scaledPosition(sourceIndex);
- QModelIndex index=filterModel_->mapFromSource(sourceIndex);
- setPositionForIndex(pos,index);
- dataChanged(index,index);
-}
-
-void MvQIconFolderViewBase::computeGrid(MvQ::GridSortMode sortMode)
-{
- if(!folderModel_->folder())
- return;
-
- QList<IconObjectH> needPos;
- int maxY=0;
- int maxWidth=refIconSize_;
- QFont font;
- QFontMetrics fm(font);
-
- const map<string,IconObjectH>& kids=folderModel_->folder()->kids();
- for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
- {
- if(it->second->visible())
- {
- int w=fm.width(QString::fromStdString(it->second->name()));
- if(w > maxWidth)
- maxWidth=w;
- }
- }
-
- int dx=maxWidth;
- int colNum=viewport()->size().width()/dx;
- if(colNum==0) colNum=1;
- int dy=refIconSize_+fm.height()+5+20;
- int x=5;
- int y=maxY+((maxY==0)?10:dy);
- int i=0;
-
- if(sortMode == MvQ::GridSortByName)
- {
- for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
- {
- if(it->second->visible())
- {
- int w=fm.width(QString::fromStdString(it->second->name()));
- if(refIconSize_ > w) w=refIconSize_;
- it->second->info().position(x+(dx-w)/2,y);
-
- //qDebug() << QString::fromStdString(it->second->name()) <<
- // w << x+(dx-w)/2 << x+dx/2;
-
- x+=dx;
- if(i >0 && i%colNum == colNum-1)
- {
- x=5;
- y+=dy;
- }
- i++;
- }
- }
- }
- if(sortMode == MvQ::GridSortByType)
- {
- multimap<string,IconObjectH> items;
-
- for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
- {
- if(it->second->visible())
- items.insert(std::pair<string,IconObjectH>(it->second->className(),it->second));
- }
-
- for(multimap<string,IconObjectH>::const_iterator it=items.begin(); it != items.end(); it++)
- {
- int w=fm.width(QString::fromStdString(it->second->name()));
- it->second->info().position(x+dx/2-w/2,y);
- x+=dx;
- if(i >0 && i%colNum == colNum-1)
- {
- x=5;
- y+=dy;
- }
- i++;
- }
- }
-
- else if(sortMode == MvQ::GridSortBySize)
- {
- multimap<off_t,IconObjectH> items;
-
- for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
- {
- if(it->second->visible())
- items.insert(std::pair<off_t,IconObjectH>(it->second->path().sizeInBytes(),it->second));
- }
-
- for(multimap<off_t,IconObjectH>::const_iterator it=items.begin(); it != items.end(); it++)
- {
- int w=fm.width(QString::fromStdString(it->second->name()));
- it->second->info().position(x+dx/2-w/2,y);
- x+=dx;
- if(i >0 && i%colNum == colNum-1)
- {
- x=5;
- y+=dy;
- }
- i++;
- }
- }
-}
-
-void MvQIconFolderViewBase::computePositions()
-{
- if(!folderModel_->folder())
- return;
-
- //Compute positions using the reference icon size
-
- QList<IconObjectH> needPos;
- int maxY=0;
- int maxWidth=refIconSize_;
- QFont font;
- QFontMetrics fm(font);
-
- const map<string,IconObjectH>& kids=folderModel_->folder()->kids();
- for(map<string,IconObjectH>::const_iterator it=kids.begin(); it != kids.end(); it++)
- {
- if(it->second->visible())
- {
- if(it->second->info().x() !=0 && it->second->info().y() !=0)
- {
- if(it->second->info().y() > maxY)
- maxY=it->second->info().y();
- }
- else
- needPos << it->second;
-
- int w=fm.width(QString::fromStdString(it->second->name()));
- if(w > maxWidth)
- maxWidth=w;
- }
- }
-
- int dx=maxWidth;
- int dy=refIconSize_+fm.height()+5+20;
- int x=5;
- int y=maxY+((maxY==0)?10:dy);
- for(int i=0; i < needPos.count(); i++)
- {
- int w=fm.width(QString::fromStdString(needPos[i]->name()));
- needPos[i]->info().position(x+dx/2-w/2,y);
- x+=dx;
- if(i >0 && i%5 == 0)
- {
- x=5;
- y+=dy;
- }
- }
-}
-
-QPoint MvQIconFolderViewBase::scaledPosition(const QModelIndex &index)
-{
- IconObject* obj=folderModel_->objectFromIndex(index);
-
- if(!obj || !obj->visible())
- return QPoint(0,0);
-
- int x=obj->info().x();
- int y=obj->info().y();
-
- if(isIconDistanceScaled())
- {
- QFont font;
- QFontMetrics fm(font);
-
- //Text size
- int textW=fm.width(QString::fromStdString(obj->name()));
- int textH=fm.height();
-
- //Compute centre using the refsize
- int refW=(textW < refIconSize_)?refIconSize_:textW;
- int refH= refIconSize_ + textH + 5;
- QPoint cpos(x+refW/2,y+refH/2);
-
- //Scaled size
- int scaledW=(textW < getIconSize())?getIconSize():textW;
- int scaledH=getIconSize() + textH + 5;
-
- //int deltaW=(scaledW-refW)/2;
- //int deltaH=(scaledH-refH)/2;
-
- //Apply scaling
- cpos*=iconDistanceScale_;
-
- cpos+=QPoint(-scaledW/2,-scaledH/2);
-
- return cpos;
- }
-
- return QPoint(x,y);
-}
-
-QPoint MvQIconFolderViewBase::referencePosition(QString name,const QPoint& pos)
-{
- int x=pos.x();
- int y=pos.y();
-
- if(isIconDistanceScaled())
- {
- QFont font;
- QFontMetrics fm(font);
-
- //Text size
- int textW=fm.width(name);
- int textH=fm.height();
-
- //Scaled size
- int scaledW=(textW < getIconSize())?getIconSize():textW;
- int scaledH=getIconSize()+ textH + 5;
-
- //Compute centre using the scaled size
- QPoint cpos(x+scaledW/2,y+scaledH/2);
-
- //Apply inverse scaling
- cpos/=iconDistanceScale_;
-
- //Compute position using the refsize
- int refW=(textW < refIconSize_)?refIconSize_:textW;
- int refH= refIconSize_ + textH + 5;
-
- cpos-=QPoint(-refW/2,-refH/2);
-
- return cpos;
- }
-
- return QPoint(x,y);
-}
-
-void MvQIconFolderViewBase::adjustRenamedObject(const QModelIndex& index,QString oriName)
-{
- IconObject* obj=folderModel_->objectFromIndex(index);
-
- if(!obj)
- return;
-
- qDebug() << "rename adjustment" << index << obj->name().c_str();
-
- int x=obj->info().x();
- int y=obj->info().y();
-
- QFont font;
- QFontMetrics fm(font);
-
- int w=fm.width(QString::fromStdString(obj->name()));
- int wOri=fm.width(oriName);
-
- if(w < refIconSize_)
- w=refIconSize_;
-
- qDebug() << " " << x << x-(w-wOri)/2.;
-
- x-=(w-wOri)/2.;
-
- obj->info().position(x,y);
-}
-
-*/
-
-void MvQIconFolderViewBase::blink(const QModelIndex& index)
-{
- scrollTo(index);
- delegate_->blink(index);
-}
\ No newline at end of file
diff --git a/src/Desktop/MvQIconHolder.cc b/src/Desktop/MvQIconHolder.cc
index 3dfe664..f8fbcf8 100644
--- a/src/Desktop/MvQIconHolder.cc
+++ b/src/Desktop/MvQIconHolder.cc
@@ -211,7 +211,11 @@ MvQIconHolderView::MvQIconHolderView(MvQIconHolderModel* model,RequestPanelItem
QFont font;
QFontMetrics fm(font);
setMaximumHeight(fm.size(Qt::TextExpandTabs,"A").height()+32+10+5+10);
-
+
+ //Double click
+ connect(this,SIGNAL(doubleClicked(const QModelIndex&)),
+ this,SLOT(slotDoubleClickItem(const QModelIndex)));
+
setContextMenuPolicy(Qt::CustomContextMenu);
//Context menu
@@ -234,6 +238,30 @@ MvQIconHolderView::~MvQIconHolderView()
}
+void MvQIconHolderView::slotDoubleClickItem(const QModelIndex& index)
+{
+ if(index.isValid())
+ {
+ if(IconObjectH obj=model_->iconObject(index))
+ {
+ QString method=QString::fromStdString(obj->iconClass().doubleClickMethod()).toLower();
+ if(obj->isFolder())
+ {
+ return;
+ }
+ else if(!method.isEmpty())
+ {
+ obj->command(method.toStdString());
+ }
+ else
+ {
+ obj->doubleClick();
+ }
+ }
+ }
+}
+
+
void MvQIconHolderView::slotContextMenu(const QPoint &pos)
{
static MvQContextItemSet cmItems("IconHolderView");
diff --git a/src/Desktop/MvQIconHolder.h b/src/Desktop/MvQIconHolder.h
index 096d0ca..3c7e78e 100644
--- a/src/Desktop/MvQIconHolder.h
+++ b/src/Desktop/MvQIconHolder.h
@@ -58,6 +58,7 @@ public:
~MvQIconHolderView();
public slots:
+ void slotDoubleClickItem(const QModelIndex& index);
void slotContextMenu(const QPoint &);
signals:
diff --git a/src/Desktop/MvQIconMimeData.cc b/src/Desktop/MvQIconMimeData.cc
index 5fbc03c..9a3e2a6 100644
--- a/src/Desktop/MvQIconMimeData.cc
+++ b/src/Desktop/MvQIconMimeData.cc
@@ -33,7 +33,7 @@ QStringList MvQNewIconMimeData::formats () const
return formats_;
}
-QVariant MvQNewIconMimeData::retrieveData(const QString & format,QVariant::Type type) const
+QVariant MvQNewIconMimeData::retrieveData(const QString& /*format*/,QVariant::Type /*type*/) const
{
return QVariant();
@@ -47,12 +47,15 @@ QVariant MvQNewIconMimeData::retrieveData(const QString & format,QVariant::Type
//=================================
MvQIconMimeData::MvQIconMimeData(MvQFolderModel* model,IconObject* dragObj,
- QPoint hotSpot,QList<IconObject*> objects) :
+ QPointF hotSpot,QList<IconObject*> objects,
+ QList<QPoint> pixDistances,ClipboardAction clipboardAction) :
model_(model),
dragObject_(dragObj),
hotSpotInVisRect_(hotSpot),
objects_(objects),
- fromHelper_(false)
+ pixDistances_(pixDistances),
+ fromHelper_(false),
+ clipboardAction_(clipboardAction)
{
formats_ << "metview/icon";
formats_ << "text/plain" << "text/html";
@@ -63,7 +66,6 @@ QStringList MvQIconMimeData::formats () const
return formats_;
}
-
QVariant MvQIconMimeData::retrieveData(const QString & format,QVariant::Type type) const
{
if(format == "metview/icon")
@@ -82,7 +84,8 @@ QVariant MvQIconMimeData::retrieveData(const QString & format,QVariant::Type typ
}
else if(format == "text/plain")
{
- //return "file://" + path_;
+ QString s= "file://" + QString::fromStdString(objects_.at(0)->path().str());
+ return s;
}
else if(format == "text/html")
{
@@ -90,8 +93,10 @@ QVariant MvQIconMimeData::retrieveData(const QString & format,QVariant::Type typ
}
else if(format == "image/png")
{
- //return "file://" + path_;
+ QString s= "file://" + QString::fromStdString(objects_.at(0)->path().str());
+ qDebug() << "PNG" << s;
+ return s;
}
- return retrieveData(format,type);
+ return QMimeData::retrieveData(format,type);
}
diff --git a/src/Desktop/MvQIconMimeData.h b/src/Desktop/MvQIconMimeData.h
index 66c02c3..4cd4430 100644
--- a/src/Desktop/MvQIconMimeData.h
+++ b/src/Desktop/MvQIconMimeData.h
@@ -47,15 +47,19 @@ class MvQIconMimeData : public QMimeData
Q_OBJECT
public:
- MvQIconMimeData(MvQFolderModel*,IconObject*,QPoint,QList<IconObject*>);
-
+ enum ClipboardAction {NoAction,CopyAction,CutAction};
+
+ MvQIconMimeData(MvQFolderModel*,IconObject*,QPointF,QList<IconObject*>,QList<QPoint>,ClipboardAction clipboardAction=NoAction);
+
QStringList formats () const;
MvQFolderModel* model() const {return model_;}
IconObject* dragObject() const {return dragObject_;}
- QPoint hotSpotInVisRect() const {return hotSpotInVisRect_;}
- QList<IconObject*> objects() const {return objects_;}
+ QPointF hotSpotInVisRect() const {return hotSpotInVisRect_;}
+ QList<IconObject*> objects() const {return objects_;}
+ QList<QPoint> pixDistances() const {return pixDistances_;}
void setFromHelper(bool b) {fromHelper_=b;}
bool fromHelper() const {return fromHelper_;}
+ ClipboardAction clipboardAction() const {return clipboardAction_;}
protected:
QVariant retrieveData( const QString & mimeType, QVariant::Type type ) const;
@@ -63,9 +67,11 @@ protected:
QStringList formats_;
MvQFolderModel* model_;
IconObject *dragObject_;
- QPoint hotSpotInVisRect_;
- QList<IconObject*> objects_;
+ QPointF hotSpotInVisRect_;
+ QList<IconObject*> objects_;
+ QList<QPoint> pixDistances_;
bool fromHelper_;
+ ClipboardAction clipboardAction_;
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQIconProvider.cc b/src/Desktop/MvQIconProvider.cc
index b5ff0d0..181fb98 100644
--- a/src/Desktop/MvQIconProvider.cc
+++ b/src/Desktop/MvQIconProvider.cc
@@ -17,6 +17,7 @@
#include "Folder.h"
#include "IconClass.h"
#include "IconObject.h"
+#include "MvQTheme.h"
#include <algorithm>
@@ -74,25 +75,40 @@ QPixmap MvQIcon::pixmap(int size)
return QPixmap();
}
-
+/*QPixmap MvQIcon::fadedPixmap(int size)
+{
+ map<int,QPixmap>::iterator it=fadedPixmaps_.find(size);
+ if(it != fadedPixmaps_.end())
+ return it->second;
+ else
+ {
+ QPixmap pix=pixmap(size);
+ QImage img=pix.toImage();
+ greyOut(img);
+ pix=QPixmap::fromImage(img);
+ fadedPixmaps_[size]=pix;
+ return pix;
+ }
+ return QPixmap();
+}*/
+
+
QPixmap MvQIcon::pixmap(IconObject *obj,int size,bool checkEmbedded)
{
QPixmap pix=pixmap(size);
-
+
if(obj->temporary())
{
QImage img=pix.toImage();
img.invertPixels();
return QPixmap::fromImage(img);
}
-
- int subSize=size/2;
if(obj->isLink())
{
QImage img=pix.toImage();
QPainter p(&img);
- int subSize=size/2;
+ int subSize=(size<=32)?(size/2):static_cast<int>((static_cast<float>(size*0.4)));
if(obj->isBrokenLink())
{
@@ -114,7 +130,8 @@ QPixmap MvQIcon::pixmap(IconObject *obj,int size,bool checkEmbedded)
{
QImage img=pix.toImage();
QPainter p(&img);
- int subSize=size/2;
+ int subSize=(size<=32)?(size/2):static_cast<int>((static_cast<float>(size*0.4)));
+
QRect r(0,0,subSize,subSize);
p.drawPixmap(QPoint(size-subSize,size-subSize),
lockIcon.pixmap(subSize),r);
@@ -123,6 +140,7 @@ QPixmap MvQIcon::pixmap(IconObject *obj,int size,bool checkEmbedded)
}
if(checkEmbedded && obj->isEmbedded())
{
+ int subSize=size/2;
QPixmap emb(size+subSize/2,size);
emb.fill(Qt::transparent);
QPainter p(&emb);
@@ -139,19 +157,33 @@ QPixmap MvQIcon::pixmap(IconObject *obj,int size,bool checkEmbedded)
return pix;
}
+
+QPixmap MvQIcon::greyedOutPixmap(IconObject *obj,int size)
+{
+ QPixmap pix=pixmap(obj,size,false);
+ QImage img=pix.toImage();
+ greyOut(img);
+ return QPixmap::fromImage(img);
+}
+
void MvQIcon::greyOut(QImage &img)
{
int w=img.width();
int h=img.height();
QRgb c;
int g;
+ int gBase=MvQTheme::colour("itemview_main","faded_base").red();
+ float gFactor=(255.-gBase)/255.;
+
for(int i=0; i < w; i++)
for(int j=0; j < h; j++)
{
c=img.pixel(i,j);
if(qAlpha(c) != 0)
{
- g=qGray(c);
+ //g=qGray(c);
+ g=(qRed(c)+qGreen(c)+qBlue(c))/3;
+ g=gBase+gFactor*static_cast<float>(g);
img.setPixel(i,j,qRgb(g,g,g));
}
}
@@ -188,6 +220,11 @@ QPixmap MvQIconProvider::pixmap(IconObject *obj,int size,bool checkEmbedded)
return (obj)?icon(obj->iconClass())->pixmap(obj,size,checkEmbedded):unknownIcon.pixmap(size);
}
+QPixmap MvQIconProvider::greyedOutPixmap(IconObject *obj,int size)
+{
+ return (obj)?icon(obj->iconClass())->greyedOutPixmap(obj,size):unknownIcon.pixmap(size);
+}
+
QPixmap MvQIconProvider::bookmarkPixmap(string fullName,int size)
{
if(fullName == "FOLDERGROUP")
diff --git a/src/Desktop/MvQIconProvider.h b/src/Desktop/MvQIconProvider.h
index a60e5ad..1993add 100644
--- a/src/Desktop/MvQIconProvider.h
+++ b/src/Desktop/MvQIconProvider.h
@@ -32,12 +32,14 @@ public:
MvQIcon(QString);
QPixmap pixmap(int);
QPixmap pixmap(IconObject*,int,bool checkEmbedded=false);
+ QPixmap greyedOutPixmap(IconObject*,int);
protected:
static void greyOut(QImage &);
QString path_;
std::map<int,QPixmap> pixmaps_;
+ std::map<int,QPixmap> fadedPixmaps_;
};
@@ -46,8 +48,9 @@ class MvQIconProvider
public:
MvQIconProvider();
- static QPixmap pixmap(IconObject*,int,bool checkEmbedded=false);
+ static QPixmap pixmap(IconObject*,int,bool checkEmbedded=false);
static QPixmap pixmap(const IconClass&,int);
+ static QPixmap greyedOutPixmap(IconObject*,int);
static QPixmap bookmarkPixmap(string,int);
static QPixmap lockPixmap(int);
diff --git a/src/Desktop/MvQIconStripView.cc b/src/Desktop/MvQIconStripView.cc
index 278d8ab..35fe471 100644
--- a/src/Desktop/MvQIconStripView.cc
+++ b/src/Desktop/MvQIconStripView.cc
@@ -31,7 +31,7 @@
#include "MvQIconMimeData.h"
MvQIconStripView::MvQIconStripView(MvQFolderModel *folderModel,QWidget *parent) :
- MvQIconFolderViewBase(folderModel,parent)
+ MvQListFolderViewBase(folderModel,parent)
{
setContextMenuPolicy(Qt::CustomContextMenu);
setViewMode(QListView::IconMode);
@@ -39,28 +39,27 @@ MvQIconStripView::MvQIconStripView(MvQFolderModel *folderModel,QWidget *parent)
setMovement(QListView::Static);
setResizeMode(QListView::Fixed);
+ //Need to set all these again because setting movement
+ //to static disables the whole drag and drop in the view
+ //and even in the viewport!!!
+ setDragEnabled(true);
+ setAcceptDrops(true);
+ setDropIndicatorShown(true);
+ setDragDropMode(QAbstractItemView::DragDrop);
+ viewport()->setAcceptDrops(true);
+
+ //Icons can be moved to/from these folders
setAllowMoveAction(false);
setEnterFolders(false);
- setSpacing(10);
+ setSpacing(6);
delegate_->setStripeMode(true);
setWrapping(false);
- //refIconSize_(32),
- //iconDistanceScale_(1.),
- //helper_=true;
- //canDrag_(false)
-
- folderModel_->setIconSize(24);
+ folderModel_->setIconSize(20);
setProperty("mvStyle","helper");
-
- //MvQFolderViewBase::setIconSize(24);
-
- //MvQFolderViewBase::setIconSize(24);
-
- //setProperty("mvStyle","IconFolderView");
}
@@ -68,36 +67,13 @@ MvQIconStripView::~MvQIconStripView()
{
}
-/*void MvQIconStripView::reset()
-{
- //
- if(delegate_)
- delegate_->setEnablePaint(false);
-
- int x=horizontalScrollBar()->value();
- int y=verticalScrollBar()->value();
-
- qDebug() << "scrollbar" << x << y;
-
- QListView::reset();
-
- //horizontalScrollBar()->setValue(x);
- //verticalScrollBar()->setValue(y);
-
- qDebug() << " --->" << x << y;
-
- //Change item positions. This will enable the painting in the delegte.
- //Currently it causes a flickering!!!!
- doDelayedPositioning();
-
-}*/
-
-void MvQIconStripView::performDrop(QDropEvent*,IconObject*, QList<IconObject*> objLst, QPoint, bool fromSameView)
+void MvQIconStripView::performDrop(Qt::DropAction,const MvQIconMimeData* data,
+ QPoint,bool fromSameView)
{
- //Drop from another view/model --> copy or move
+ //Drop from another view/model --> always copy!!!
if(!fromSameView)
{
- foreach(IconObject* obj, objLst)
+ foreach(IconObject* obj, data->objects())
{
//Cannot move/copy edited icons into another folder!!!
if(!obj->editor() && isAccepted(obj))
diff --git a/src/Desktop/MvQIconStripView.h b/src/Desktop/MvQIconStripView.h
index 2e0925c..76054a3 100644
--- a/src/Desktop/MvQIconStripView.h
+++ b/src/Desktop/MvQIconStripView.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -10,16 +10,19 @@
#ifndef MvQIconStripView_H
#define MvQIconStripView_H
-#include "MvQIconFolderViewBase.h"
+#include "MvQListFolderViewBase.h"
-class MvQIconStripView : public MvQIconFolderViewBase
+class MvQIconMimeData;
+
+class MvQIconStripView : public MvQListFolderViewBase
{
public:
MvQIconStripView(MvQFolderModel *,QWidget *parent=0);
~MvQIconStripView();
protected:
- void performDrop(QDropEvent*,IconObject*,QList<IconObject*>,QPoint,bool);
+ void performDrop(Qt::DropAction,const MvQIconMimeData*,QPoint,bool);
+
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQListFolderViewBase.cc b/src/Desktop/MvQListFolderViewBase.cc
new file mode 100644
index 0000000..a49f8c0
--- /dev/null
+++ b/src/Desktop/MvQListFolderViewBase.cc
@@ -0,0 +1,497 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include <QApplication>
+#include <QDataStream>
+#include <QDropEvent>
+#include <QDebug>
+#include <QMouseEvent>
+#include <QMenu>
+#include <QPainter>
+#include <QScrollBar>
+#include <QShortcut>
+#include <QTimer>
+
+#include "MvQListFolderViewBase.h"
+
+#include "IconClass.h"
+#include "IconInfo.h"
+#include "IconObject.h"
+#include "Folder.h"
+
+#include "MvQFolderViewDelegate.h"
+#include "MvQContextMenu.h"
+#include "MvQIconMimeData.h"
+#include "MvQIconProvider.h"
+
+MvQListFolderViewBase::MvQListFolderViewBase(MvQFolderModel *folderModel,QWidget *parent) :
+ QListView(parent),
+ MvQFolderViewBase(folderModel,parent),
+ allowMoveAction_(true),
+ enterFolders_(true),
+ canDrag_(false),
+ defaultShortCut_(0)
+{
+ setContextMenuPolicy(Qt::CustomContextMenu);
+
+ //Drag and drop
+ setDragEnabled(true);
+ setAcceptDrops(true);
+ setDropIndicatorShown(true);
+ setDragDropMode(QAbstractItemView::DragDrop);
+
+ //Delegate
+ delegate_=new MvQIconDelegate(this);
+ setItemDelegate(delegate_);
+
+ connect(delegate_,SIGNAL(repaintIt(const QModelIndex&)),
+ this,SLOT(update(const QModelIndex&)));
+
+
+ //Set the model. This will call reset on the view.
+ setModel(filterModel_);
+
+ setMouseTracking(true);
+
+ setEditTriggers(QAbstractItemView::NoEditTriggers);
+ setSelectionMode(QAbstractItemView::ExtendedSelection);
+
+ //Context menu
+ connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+ this, SLOT(slotContextMenu(const QPoint &)));
+
+ //Selection in the view
+ connect(this,SIGNAL(doubleClicked(const QModelIndex&)),
+ this,SLOT(slotDoubleClickItem(const QModelIndex)));
+
+ connect(this,SIGNAL(entered(const QModelIndex&)),
+ this,SLOT(slotEntered(const QModelIndex&)));
+
+ //We let the delegate to paint the items
+ delegate_->setEnablePaint(true);
+
+ //
+ setProperty("helper","true");
+}
+
+
+MvQListFolderViewBase::~MvQListFolderViewBase()
+{
+ //delete filterModel_;
+}
+
+void MvQListFolderViewBase::doReset()
+{
+ reset();
+}
+
+QWidget* MvQListFolderViewBase::concreteWidget()
+{
+ return this;
+}
+
+//-----------------------------------------
+// Event
+//-----------------------------------------
+
+bool MvQListFolderViewBase::event(QEvent* event)
+{
+ //We cannot call shortcut setup in the constructor beacuse it calls a pure virtual function! So we
+ //call it the first time it is possible.
+ if(isVisible())
+ setupShortCut();
+
+ return QListView::event(event);
+}
+
+//------------------------------------------
+// Item info. See also mousemove event!
+//------------------------------------------
+
+void MvQListFolderViewBase::slotEntered(const QModelIndex& index)
+{
+ itemInfo_=itemInfo(index,FilterModelIndex);
+ emit itemEntered(itemInfo_);
+}
+
+void MvQListFolderViewBase::leaveEvent(QEvent *event)
+{
+ itemInfo_=QString();
+ emit itemEntered(itemInfo_);
+ QWidget::leaveEvent(event);
+}
+
+
+void MvQListFolderViewBase::slotSelectItem(const QModelIndex& /*index*/)
+{
+ /*if(changeFolder(index,FilterModelIndex))
+ {
+ changeFolder(index,FilterModelIndex);
+ emit currentFolderChanged(currentFolder());
+ }*/
+}
+
+void MvQListFolderViewBase::slotDoubleClickItem(const QModelIndex& index)
+{
+ QModelIndexList lst=selectedIndexes();
+ if(lst.count() == 1 && lst.at(0) == index)
+ handleDoubleClick(index);
+}
+
+void MvQListFolderViewBase::setupShortCut()
+{
+ if(shortCutInit_)
+ return;
+ else
+ shortCutInit_=true;
+
+ if(MvQContextItemSet *cms=cmSet())
+ {
+ foreach(MvQContextItem *cm,cms->icon())
+ {
+ if(QShortcut *sc=cm->makeShortCut(this))
+ {
+ connect(sc,SIGNAL(activated()),
+ this,SLOT(slotIconShortCut()));
+ }
+ }
+
+ if(QShortcut* sc=cms->makeDefaultIconShortCut(this))
+ {
+ defaultShortCut_=sc;
+ connect(defaultShortCut_,SIGNAL(activated()),
+ this,SLOT(slotDefaultShortCut()));
+ }
+ }
+}
+
+
+void MvQListFolderViewBase::slotIconShortCut()
+{
+ QShortcut *sc=static_cast<QShortcut*>(QObject::sender());
+ if(sc)
+ { QModelIndexList lst=selectedIndexes();
+ if(lst.count() > 0)
+ handleIconShortCut(sc,lst);
+ }
+}
+
+void MvQListFolderViewBase::slotDefaultShortCut()
+{
+ if(defaultShortCut_)
+ {
+ QModelIndexList lst=selectedIndexes();
+ if(lst.count() == 1)
+ handleDoubleClick(lst.at(0));
+ }
+}
+
+void MvQListFolderViewBase::slotContextMenu(const QPoint& position)
+{
+ QModelIndexList lst=selectedIndexes();
+ QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+ handleContextMenu(indexAt(position),lst,mapToGlobal(position),position+scrollOffset,this);
+
+ /*if(lst.count() == 1)
+ {
+ QModelIndex index=indexAt(position);
+ QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+
+ handleContextMenu(index,mapToGlobal(position),position+scrollOffset,this);
+ }
+ else if(lst.count() > 1)
+ {
+ handleContextMenu(lst,mapToGlobal(position),position+scrollOffset,this);
+ } */
+}
+
+void MvQListFolderViewBase::folderChanged()
+{
+ emit currentFolderChanged(currentFolder());
+}
+
+void MvQListFolderViewBase::iconCommand(QString name,IconObjectH obj)
+{
+ emit iconCommandRequested(name,obj);
+}
+
+void MvQListFolderViewBase::desktopCommand(QString name,QPoint pos)
+{
+ emit desktopCommandRequested(name,pos);
+}
+
+void MvQListFolderViewBase::keyPressEvent(QKeyEvent * event)
+{
+ setupShortCut();
+ QAbstractItemView::keyPressEvent(event);
+}
+
+void MvQListFolderViewBase::reset()
+{
+ QListView::reset();
+ if(filterModel_)
+ filterModel_->sort(0);
+}
+
+//=================================================
+//
+// Icon positions
+//
+//==================================================
+
+QRect MvQListFolderViewBase::itemRect(QList<IconObject*> objLst)
+{
+ QRect bbox;
+ foreach(IconObject* obj,objLst)
+ {
+ bbox=bbox.united(visualRect(filterModel_->mapFromSource(folderModel_->indexFromObject(obj))));
+ }
+
+ return bbox;
+}
+
+QRect MvQListFolderViewBase::itemRect(IconObject *obj)
+{
+ return visualRect(filterModel_->mapFromSource(folderModel_->indexFromObject(obj)));
+}
+
+QRect MvQListFolderViewBase::pixmapRect(QList<IconObject*> objLst)
+{
+ QRect bbox;
+ foreach(IconObject* obj,objLst)
+ {
+ bbox=bbox.united(pixmapRect(obj));
+ }
+
+ return bbox;
+}
+
+
+QRect MvQListFolderViewBase::pixmapRect(IconObject *obj)
+{
+ QRect r=visualRect(filterModel_->mapFromSource(folderModel_->indexFromObject(obj)));
+ return QRect(r.center().x()-getIconSize()/2,r.y(),getIconSize(),getIconSize());
+}
+
+
+//=================================================
+//
+// Drag and drop. We need this cutom implementation
+// because the solution offered by the model-view
+// framework was not satisfactory.
+//
+//=================================================
+
+//===========================
+// Drag
+//===========================
+
+void MvQListFolderViewBase::mousePressEvent(QMouseEvent *event)
+{
+ canDrag_=false;
+
+ if(event->button() == Qt::LeftButton || event->button() == Qt::MidButton)
+ {
+ startPos_=event->pos();
+
+ QModelIndex index=indexAt(event->pos());
+ if(index.isValid())
+ {
+ QModelIndexList lst=selectedIndexes();
+
+ if(lst.count() <= 1 || !lst.contains(index))
+ {
+ setCurrentIndex(index);
+ QRect rect=visualRect(index);
+ if(event->pos().y() > rect.top()+getIconSize())
+ {
+ edit(index);
+ return;
+ }
+ }
+
+ canDrag_=true;
+
+ //This prevents rubberband selection
+ setState(NoState);
+ //return;
+ }
+ }
+
+ QListView::mousePressEvent(event);
+}
+
+void MvQListFolderViewBase::mouseMoveEvent(QMouseEvent *event)
+{
+ if(!itemInfo_.isEmpty() && !indexAt(event->pos()).isValid())
+ {
+ itemInfo_=QString();
+ emit itemEntered(itemInfo_);
+ }
+
+ if(canDrag_ && event->buttons() & (Qt::LeftButton | Qt::MidButton))
+ {
+ //qDebug() << "should start drag" << event->pos() << startPos_;
+
+ int distance = (event->pos() - startPos_).manhattanLength();
+ if(distance >= QApplication::startDragDistance())
+ {
+ canDrag_=false;
+ setState(DraggingState);
+
+ QModelIndexList lst=selectedIndexes();
+
+ ///qDebug() << "selected" << lst.count();
+
+ if(allowMoveAction_)
+ {
+ if(event->buttons() & Qt::LeftButton)
+ performDrag(Qt::MoveAction,startPos_);
+ else if(event->buttons() & Qt::MidButton)
+ performDrag(Qt::CopyAction,startPos_);
+ }
+ else
+ {
+ performDrag(Qt::CopyAction,startPos_);
+ }
+
+ setState(NoState);
+ }
+
+ return;
+ }
+
+ QListView::mouseMoveEvent(event);
+}
+
+void MvQListFolderViewBase::performDrag(Qt::DropAction dropAction,QPoint pos)
+{
+ QModelIndex viewIndex=indexAt(pos);
+ QModelIndex index=filterModel_->mapToSource(viewIndex);
+
+ //The object that was dragged
+ IconObject* dragObj=folderModel_->objectFromIndex(index);
+
+ //List of objects to drag
+ QList<IconObject*> objLst;
+ foreach(QModelIndex idx,selectedIndexes())
+ {
+ objLst << folderModel_->objectFromIndex(filterModel_->mapToSource(idx));
+ }
+
+ //Need a solution!!!!!!!!!!!!!!!!!1
+ bool fromHelper=(!allowMoveAction_);
+
+ QDrag *drag=buildDrag(dragObj,objLst,fromHelper,this);
+ if(drag)
+ {
+ drag->exec(dropAction,dropAction);
+ }
+}
+
+//===========================
+// Drop
+//===========================
+
+void MvQListFolderViewBase::dragEnterEvent(QDragEnterEvent *event)
+{
+ qDebug() << event->mimeData()->formats();
+ qDebug() << event->mimeData()->text();
+ qDebug() << event->proposedAction();
+
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ //event->setDropAction(Qt::CopyAction);
+ event->accept();
+ }
+ else
+ event->ignore();
+}
+
+void MvQListFolderViewBase::dragMoveEvent(QDragMoveEvent *event)
+{
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ event->accept();
+ }
+ else
+ event->ignore();
+}
+
+void MvQListFolderViewBase::dropEvent(QDropEvent *event)
+{
+ qDebug() << "dropEvent" << folderModel_->fullName();
+
+ if(folderModel_->folder()->locked())
+ {
+ event->ignore();
+ return;
+ }
+
+ if(!event->source())
+ {
+ event->ignore();
+ return;
+ }
+
+ if(event->proposedAction() != Qt::CopyAction &&
+ event->proposedAction() != Qt::MoveAction)
+ {
+ event->ignore();
+ return;
+ }
+
+ QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
+ QPoint pos=event->pos()+scrollOffset;
+
+ //--------------------------------------
+ // Drag and drop from another folder
+ //--------------------------------------
+
+ if(event->mimeData()->hasFormat("metview/icon"))
+ {
+ const MvQIconMimeData* mimeData=qobject_cast<const MvQIconMimeData*>(event->mimeData());
+
+ if(!mimeData)
+ {
+ event->ignore();
+ return;
+ }
+
+ IconObject* dragObj=mimeData->dragObject();
+
+ QList<IconObject*> objLst=mimeData->objects();
+ MvQFolderModel *model=mimeData->model();
+
+ if(model && dragObj)
+ {
+ //QPoint hotSpot=mimeData->hotSpotInVisRect();
+ //pos-=QPoint(hotSpot.x(),hotSpot.y());
+ //if(pos.x() < 1) pos.setX(1);
+
+ //performDrop(dragObj,objLst,pos,(model == folderModel_));
+ performDrop(event->proposedAction(),mimeData,pos,(model == folderModel_));
+
+ event->accept();
+ return;
+ }
+ }
+
+ event->ignore();
+}
+
+void MvQListFolderViewBase::blink(const QModelIndex& index)
+{
+ scrollTo(index);
+ delegate_->blink(index);
+}
\ No newline at end of file
diff --git a/src/Desktop/MvQIconFolderViewBase.h b/src/Desktop/MvQListFolderViewBase.h
similarity index 69%
rename from src/Desktop/MvQIconFolderViewBase.h
rename to src/Desktop/MvQListFolderViewBase.h
index 2984a27..20cd556 100644
--- a/src/Desktop/MvQIconFolderViewBase.h
+++ b/src/Desktop/MvQListFolderViewBase.h
@@ -1,14 +1,14 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-#ifndef MvQIconFolderViewBase_H
-#define MvQIconFolderViewBase_H
+#ifndef MvQListFolderViewBase_H
+#define MvQListFolderViewBase_H
#include <QListView>
@@ -17,28 +17,30 @@
#include "MvQFolderModel.h"
class MvQIconDelegate;
-class MvQFileSystemModel;
class MvQCurrentFolderFilterModel;
class Folder;
class IconObject;
-class MvQIconFolderViewBase : public QListView, public MvQFolderViewBase
+class MvQListFolderViewBase : public QListView, public MvQFolderViewBase
{
Q_OBJECT
public:
- MvQIconFolderViewBase(MvQFolderModel *,QWidget *parent=0);
- virtual ~MvQIconFolderViewBase();
+ MvQListFolderViewBase(MvQFolderModel *,QWidget *parent=0);
+ virtual ~MvQListFolderViewBase();
+ QWidget* concreteWidget();
+ void doReset();
public slots:
void slotIconShortCut();
+ void slotDefaultShortCut();
void slotContextMenu(const QPoint &);
void slotSelectItem(const QModelIndex&);
void slotDoubleClickItem(const QModelIndex&);
void slotEntered(const QModelIndex&);
- //void reset();
-
+ void reset();
+
signals:
void currentFolderChanged(Folder*);
void folderDoubleCliked(QString);
@@ -53,11 +55,15 @@ protected:
void setupShortCut();
void setPositions() {};
void blink(const QModelIndex&);
+ void showIcon(const QModelIndex&) {};
- void folderChanged();
+ void folderChanged();
+ void iconCommandFromMain(QString) {};
virtual void iconCommand(QString,IconObjectH);
virtual void desktopCommand(QString,QPoint);
+ bool event(QEvent* event);
+ void leaveEvent(QEvent *event);
void keyPressEvent(QKeyEvent*);
void mousePressEvent(QMouseEvent*);
void mouseMoveEvent(QMouseEvent*);
@@ -65,7 +71,11 @@ protected:
void dragEnterEvent(QDragEnterEvent*);
void dragMoveEvent(QDragMoveEvent*);
void dropEvent(QDropEvent*);
- virtual void performDrop(QDropEvent*,IconObject*,QList<IconObject*>,QPoint,bool)=0;
+
+ QRect itemRect(QList<IconObject*>);
+ QRect itemRect(IconObject*);
+ QRect pixmapRect(QList<IconObject*>);
+ QRect pixmapRect(IconObject*);
MvQIconDelegate* delegate_;
@@ -74,6 +84,8 @@ private:
bool enterFolders_;
QPoint startPos_;
bool canDrag_;
+ QShortcut* defaultShortCut_;
+ QString itemInfo_;
};
diff --git a/src/Desktop/MvQLogDialog.cc b/src/Desktop/MvQLogDialog.cc
index 5bcf1a6..ae43939 100644
--- a/src/Desktop/MvQLogDialog.cc
+++ b/src/Desktop/MvQLogDialog.cc
@@ -10,6 +10,7 @@
#include "MvQLogDialog.h"
#include "IconObject.h"
+#include "Folder.h"
#include "Log.h"
#include <QDebug>
@@ -19,6 +20,7 @@
#include <QLabel>
#include <QPlainTextEdit>
#include <QPushButton>
+#include <QSettings>
#include <QTextStream>
#include <QToolButton>
#include <QVBoxLayout>
@@ -41,15 +43,13 @@ MvQLogDialog::MvQLogDialog() :
QHBoxLayout *hb=new QHBoxLayout;
vb->addLayout(hb);
- pixLabel_=new QLabel(this);
- pixLabel_->setFrameShape(QFrame::Box);
- pixLabel_->setFrameShape(QFrame::StyledPanel);
-
- hb->addWidget(pixLabel_);
-
+ QLabel* logLabel=new QLabel(this);
+ logLabel->setPixmap(QPixmap(":/desktop/log.svg"));
+ hb->addWidget(logLabel);
+
headerLabel_=new QLabel("",this);
headerLabel_->setObjectName(QString::fromUtf8("editorHeaderLabel"));
- headerLabel_->setMargin(8);
+ headerLabel_->setMargin(4);
headerLabel_->setAlignment(Qt::AlignLeft| Qt::AlignVCenter);
headerLabel_->setAutoFillBackground(true);
headerLabel_->setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse);
@@ -102,7 +102,7 @@ MvQLogDialog::MvQLogDialog() :
QDialogButtonBox *buttonBox= new QDialogButtonBox(this);
vb->addWidget(buttonBox);
- QPushButton *closePb=buttonBox->addButton(QDialogButtonBox::Close);
+ buttonBox->addButton(QDialogButtonBox::Close);
connect(buttonBox,SIGNAL(rejected()),
this,SLOT(reject()));
@@ -141,7 +141,7 @@ void MvQLogDialog::open(IconObject* icon)
}
e->show(icon);
}
-
+
void MvQLogDialog::show(IconObject* icon)
{
if(icon != current_)
@@ -151,20 +151,24 @@ void MvQLogDialog::show(IconObject* icon)
current_->logWindow(this);
//Update title
- setWindowTitle(tr("Log window - ") + QString::fromStdString(current_->name()));
-
- //Update lables
- pixLabel_->setPixmap(MvQIconProvider::pixmap(current_->iconClass(),32));
-
- QString str=tr("<b>Folder:</b> ");
- str+=QString::fromStdString(current_->path().directory().str()) + "<br>";
- str+=tr("<b>Icon:</b> ");
- str+=QString::fromStdString(current_->name());
-
+ QString str;
+ if(current_ == Folder::top())
+ {
+ setWindowTitle(tr("Log window "));
+ str=tr("<b><font color=#505050> Log messages for all the icons</font></b>");
+ }
+ else
+ {
+ setWindowTitle(tr("Log window - ") + QString::fromStdString(current_->name()));
+ str=tr("<b><font color=#505050> Log messages for icon: </font>");
+ str+="<font color=#084cb3>" + QString::fromStdString(current_->name()) + "</font></b>";
+ }
headerLabel_->setText(str);
-
+
//Load data
load();
+
+ readSettings();
}
}
QWidget::show();
@@ -190,7 +194,8 @@ void MvQLogDialog::load()
f.open(QFile::ReadOnly | QFile::Text);
QTextStream readStream(&f);
- textEdit_->setPlainText(readStream.readAll());
+ //textEdit_->setPlainText(readStream.readAll());
+ textEdit_->appendHtml(formatText(readStream.readAll()));
f.close();
//Set up file watcher
@@ -217,9 +222,17 @@ void MvQLogDialog::reject()
if(current_) current_->logWindow(0);
current_ = 0;
+ writeSettings();
+
QDialog::reject();
}
+void MvQLogDialog::closeEvent(QCloseEvent *event)
+{
+ reject();
+ event->accept();
+}
+
void MvQLogDialog::slotClear(bool)
{
@@ -247,6 +260,60 @@ void MvQLogDialog::slotDone(FILE*)
void MvQLogDialog::slotReady(const char *buf)
{
- textEdit_->appendPlainText(QString(buf));
+ //textEdit_->appendPlainText(QString(buf));
+ textEdit_->appendHtml(formatText(QString(buf)));
+}
+
+QString MvQLogDialog::formatText(QString txt)
+{
+ //qDebug() << "add" << txt;
+
+ QString res;
+ QStringList lst=txt.split("\n");
+ foreach(QString line,lst)
+ {
+ res+=line + "<br>";
+
+ /*QRegExp rx("\\[(.+)\\]");
+ if(rx.indexIn(line) > -1)
+ {
+ QString v=rx.cap(1);
+ res+="<b>" + v + "</b> -";
+ res+=line.mid(v.size()+2)+ "<br>";
+ }
+ else
+ res+=line + "<br>";*/
+ }
+
+ return res;
+}
+
+
+void MvQLogDialog::writeSettings()
+{
+ QSettings settings("ECMWF","MV4-Desktop-LogDialog");
+
+ //We have to clear it so that should not remember all the previous values
+ settings.clear();
+
+ settings.beginGroup("main");
+ settings.setValue("size",size());
+ settings.endGroup();
}
+void MvQLogDialog::readSettings()
+{
+ QSettings settings("ECMWF","MV4-Desktop-LogDialog");
+
+ settings.beginGroup("main");
+ if(settings.contains("size"))
+ {
+ resize(settings.value("size").toSize());
+ }
+ else
+ {
+ resize(QSize(520,500));
+ }
+
+ settings.endGroup();
+}
diff --git a/src/Desktop/MvQLogDialog.h b/src/Desktop/MvQLogDialog.h
index 52854d6..b7c9fc8 100644
--- a/src/Desktop/MvQLogDialog.h
+++ b/src/Desktop/MvQLogDialog.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -31,6 +31,7 @@ public:
protected:
MvQLogDialog();
+ void closeEvent(QCloseEvent*);
public slots:
void reject();
@@ -38,19 +39,20 @@ public slots:
void slotClear(bool);
void slotReady(const char*);
void slotDone(FILE*);
-
private:
// No copy allowed
MvQLogDialog(const MvQLogDialog&);
MvQLogDialog& operator=(const MvQLogDialog&);
+ void readSettings();
+ void writeSettings();
void show(IconObject*);
void load();
+ QString formatText(QString);
- FILE* file_;
IconObjectH current_;
+ FILE* file_;
- QLabel* pixLabel_;
QLabel* headerLabel_;
QPlainTextEdit* textEdit_;
MvQFileWatcher* watcher_;
diff --git a/src/Desktop/MvQNewIconWidget.cc b/src/Desktop/MvQNewIconWidget.cc
index f101d9e..dab4f78 100644
--- a/src/Desktop/MvQNewIconWidget.cc
+++ b/src/Desktop/MvQNewIconWidget.cc
@@ -10,6 +10,7 @@
#include "MvQNewIconWidget.h"
#include <QApplication>
+#include <QButtonGroup>
#include <QComboBox>
#include <QDebug>
#include <QDialogButtonBox>
@@ -17,74 +18,27 @@
#include <QLabel>
#include <QLineEdit>
#include <QListWidget>
+#include <QMouseEvent>
#include <QPainter>
+#include <QPushButton>
#include <QSettings>
#include <QStackedWidget>
+#include <QStyle>
+#include <QStyleOption>
+#include <QToolButton>
#include <QVBoxLayout>
+#include "MvQIconMimeData.h"
#include "MvQIconProvider.h"
+#include "MvQRecentIcons.h"
#include "Path.h"
-MvQIconListDelegate::MvQIconListDelegate(int iconSize,QWidget *parent) :
- QStyledItemDelegate(parent),
- iconSize_(iconSize)
-{
-}
-
-void MvQIconListDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,
- const QModelIndex& index) const
-{
- if(index.column() == 0)
- {
- QStyleOptionViewItemV4 vopt(option);
- initStyleOption(&vopt, index);
-
- //Save painter state
- painter->save();
-
- //Highlight
- if (option.state & QStyle::State_HasFocus || option.state & QStyle::State_Selected)
- painter->fillRect(option.rect, option.palette.highlight());
-
- //Draw icon
- QIcon ic = index.data(Qt::DecorationRole).value<QIcon>();
- QRect iconRect(option.rect.center().x()-iconSize_/2,option.rect.top()+4,iconSize_,iconSize_);
- ic.paint(painter,iconRect);
-
- //Draw text
- QFont font=QApplication::font();
- QFontMetrics fm(font);
- int textHeight=fm.height();
- QString text=index.data(Qt::DisplayRole).toString();
- int textWidth=fm.width(text);
-
- QRect textRect(option.rect.center().x()-textWidth/2,option.rect.bottom()-textHeight-5,
- textWidth,textHeight);
-
- painter->drawText(textRect,Qt::AlignLeft,text);
-
- //Restore painter state
- painter->restore();
- }
- else
- QStyledItemDelegate::paint(painter,option,index);
-}
-
-QSize MvQIconListDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const
-{
- QSize size=QStyledItemDelegate::sizeHint(option,index);
-
- if(index.column() == 0)
- {
- QFont font=QApplication::font();
- QFontMetrics fm(font);
- size.setHeight(4+iconSize_+4+fm.height()+4);
- }
- return size;
-}
-
-
+//==============================
+//
+// MvQNewIconDelegate
+//
+//==============================
MvQNewIconDelegate::MvQNewIconDelegate(QWidget *parent) : QStyledItemDelegate(parent)
{
@@ -101,14 +55,22 @@ void MvQNewIconDelegate::paint(QPainter *painter,const QStyleOptionViewItem &opt
const QStyle *style = vopt.widget ? vopt.widget->style() : QApplication::style();
const QWidget* widget = vopt.widget;
+ //painter->fillRect(option.rect,QColor(238,238,238));
+
//We render everything with the default method
style->drawControl(QStyle::CE_ItemViewItem, &vopt, painter, widget);
//Draw separator line
- painter->save();
- painter->setPen(QColor(230,230,230));
- painter->drawLine(option.rect.bottomLeft(),option.rect.bottomRight());
- painter->restore();
+ //painter->save();
+ //painter->setPen(QColor(180,180,180));
+ //painter->drawLine(option.rect.x(),option.rect.bottom()+1,
+ // option.rect.right(),option.rect.bottom()+1);
+
+ //QRect iconRect = style->subElementRect(QStyle::SE_ItemViewItemDecoration, &vopt, widget);
+ //painter->drawLine(iconRect.right()+4,iconRect.top()-4,
+ // iconRect.right()+4,iconRect.bottom());
+
+ //painter->restore();
}
else
QStyledItemDelegate::paint(painter,option,index);
@@ -123,37 +85,178 @@ void MvQNewIconDelegate::paint(QPainter *painter,const QStyleOptionViewItem &opt
MvQNewIconListWidget::MvQNewIconListWidget(QWidget *parent) :
QListWidget(parent)
{
- setIconSize(QSize(24,24));
- setSpacing(2);
-
+ setDragEnabled(true);
+
+ setSpacing(1);
+ setProperty("sidebarView","true");
+
MvQNewIconDelegate* delegate=new MvQNewIconDelegate(this);
setItemDelegate(delegate);
+
+ setContextMenuPolicy(Qt::CustomContextMenu);
}
+
+//--------------------------------
+// Drag
+//--------------------------------
+
+void MvQNewIconListWidget::mousePressEvent(QMouseEvent *event)
+{
+ if(event->button() == Qt::LeftButton)
+ {
+ startPos_=event->pos();
+
+ /*QListWidgetItem *item=itemAt(event->pos());
+ if(item)
+ {
+ startPos_=event->pos();
+ }*/
+ }
+
+ QListView::mousePressEvent(event);
+}
+
+void MvQNewIconListWidget::mouseMoveEvent(QMouseEvent *event)
+{
+ if(event->buttons() & Qt::LeftButton)
+ {
+ int distance = (event->pos() - startPos_).manhattanLength();
+ if(distance >= QApplication::startDragDistance())
+ {
+ QListWidgetItem *item=itemAt(startPos_);
+ if(item)
+ {
+ QString cname=item->data(Qt::UserRole).toString();
+ MvQNewIconMimeData *mimeData=new MvQNewIconMimeData(cname,MvQNewIconMimeData::UserDef);
+
+ qDebug() << "cname" << cname;
+
+ QDrag *drag=new QDrag(this);
+ drag->setPixmap(MvQIconProvider::pixmap(IconClass::find(cname.toStdString()),20));
+ drag->setHotSpot(QPoint(20,20));
+ drag->setMimeData(mimeData);
+
+ if(drag->exec(Qt::CopyAction) == Qt::CopyAction)
+ {
+ emit iconCreated(cname);
+ }
+ return;
+ }
+ }
+ }
+
+ QListView::mouseMoveEvent(event);
+}
+
//=====================================================
//
-// MvQNewIconWidget
+// MvQNewIconPanel
//
//=====================================================
-MvQNewIconWidget::MvQNewIconWidget(QWidget *parent) : QTabWidget(parent)
-{
- QHBoxLayout *hb=new QHBoxLayout(this);
+MvQNewIconPanel::MvQNewIconPanel(SelectionMode mode,QWidget *parent) :
+ QWidget(parent),
+ selectionMode_(mode)
+{
+ QVBoxLayout *vb=new QVBoxLayout;
+ vb->setSpacing(2);
+ vb->setContentsMargins(2,2,2,2);
+ setLayout(vb);
- //--------------------
- //Option list
- //--------------------
-
- QListWidget *optionList=new QListWidget(this);
- optionList->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- hb->addWidget(optionList);
+ QLabel *label;
+
+ //In panel mode we need a close button
+ if(selectionMode_ == PanelMode)
+ {
+ //Top row
+ QHBoxLayout *hb=new QHBoxLayout;
+ hb->setSpacing(0);
+ hb->setContentsMargins(0,0,0,0);
+
+ vb->addLayout(hb);
+ hb->addSpacing(4);
+ label=new QLabel("<b>" + tr("Create new icon") + "</b>",this);
+ hb->addWidget(label,1);
+
+ QToolButton *closeTb=new QToolButton(this);
+ closeTb->setAutoRaise(true);
+ closeTb->setIcon(QPixmap(":/desktop/remove.svg"));
+ closeTb->setToolTip(tr("Close sidebar"));
+ hb->addWidget(closeTb);
+
+ connect(closeTb,SIGNAL(clicked(bool)),
+ this,SIGNAL(closePanel(bool)));
+ }
+
+ //Button row
+ QHBoxLayout *hbButton=new QHBoxLayout;
+ vb->addLayout(hbButton);
+ hbButton->setSpacing(0);
+
+ QSize icSize(16,16);
+
+ QToolButton *recentTb=new QToolButton(this);
+ recentTb->setIcon(QPixmap(":/desktop/history.svg"));
+ recentTb->setIconSize(icSize);
+ recentTb->setToolTip(tr("Most recent"));
+ recentTb->setCheckable(true);
+ recentTb->setChecked(false);
+ recentTb->setText(tr("Recent"));
+ recentTb->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ recentTb->setProperty("mvStyle","strip");
+ recentTb->setProperty("strip","first");
+ recentTb->setFocusPolicy(Qt::NoFocus);
+ hbButton->addWidget(recentTb);
+
+ QToolButton *groupTb=new QToolButton(this);
+ groupTb->setIcon(QPixmap(":/desktop/icon_group.svg"));
+ groupTb->setIconSize(icSize);
+ groupTb->setToolTip(tr("Types"));
+ groupTb->setCheckable(true);
+ groupTb->setChecked(false);
+ groupTb->setText(tr("Types"));
+ groupTb->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ groupTb->setProperty("mvStyle","strip");
+ groupTb->setProperty("strip","mid");
+ groupTb->setFocusPolicy(Qt::NoFocus);
+ hbButton->addWidget(groupTb);
+
+ QToolButton *searchTb=new QToolButton(this);
+ searchTb->setIcon(QPixmap(":/desktop/filter.svg"));
+ searchTb->setIconSize(icSize);
+ searchTb->setToolTip(tr("Filter"));
+ searchTb->setCheckable(true);
+ searchTb->setChecked(false);
+ searchTb->setText(tr("Filter"));
+ searchTb->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ searchTb->setProperty("mvStyle","strip");
+ searchTb->setProperty("strip","last");
+ searchTb->setFocusPolicy(Qt::NoFocus);
+ hbButton->addWidget(searchTb);
+
+ hbButton->addStretch(1);
+
+ vb->addSpacing(3);
+
+ //Button group for mode selection
+ modeBg_=new QButtonGroup(this);
+ modeBg_->setExclusive(true);
+
+ modeBg_->addButton(recentTb,0);
+ modeBg_->addButton(groupTb,1);
+ modeBg_->addButton(searchTb,2);
+
+ connect(modeBg_,SIGNAL(buttonClicked(int)),
+ this,SLOT(slotChangeMode(int)));
+
//----------------------------------------------------
// Stacked widget for all the icon selection widgets
//----------------------------------------------------
mainPanel_=new QStackedWidget(this);
- hb->addWidget(mainPanel_,1);
+ vb->addWidget(mainPanel_);
//---------------------------
// Recently used
@@ -165,16 +268,21 @@ MvQNewIconWidget::MvQNewIconWidget(QWidget *parent) : QTabWidget(parent)
connect(recentList_,SIGNAL(itemActivated(QListWidgetItem*)),
this,SLOT(slotIconSelected(QListWidgetItem*)));
- //---------------------------
+ connect(recentList_,SIGNAL(iconCreated(QString)),
+ this,SLOT(slotAddToRecentIcons(QString)));
+
+ //---------------------------
// Type widget
//---------------------------
QWidget *typeW=new QWidget(this);
QVBoxLayout *typeVb=new QVBoxLayout(typeW);
+ //typeVb->setSpacing(0);
+ typeVb->setContentsMargins(1,1,1,1);
//Type
QHBoxLayout *typeHb=new QHBoxLayout;
- QLabel *typeLabel=new QLabel(tr("Group: "));
+ QLabel *typeLabel=new QLabel(tr("Type: "));
typeHb->addWidget(typeLabel);
typeCb_=new QComboBox(this);
typeHb->addWidget(typeCb_,1);
@@ -192,6 +300,9 @@ MvQNewIconWidget::MvQNewIconWidget(QWidget *parent) : QTabWidget(parent)
typeCb_->addItem(key,key);
iconPanel_->addWidget(iconLists_[key]);
iconLists_[key]->sortItems();
+
+ connect(iconLists_[key],SIGNAL(iconCreated(QString)),
+ this,SLOT(slotAddToRecentIcons(QString)));
}
mainPanel_->addWidget(typeW);
@@ -205,13 +316,17 @@ MvQNewIconWidget::MvQNewIconWidget(QWidget *parent) : QTabWidget(parent)
QWidget *searchW= new QWidget(this);
QVBoxLayout *searchVb=new QVBoxLayout(searchW);
-
+ searchVb->setSpacing(0);
+ searchVb->setContentsMargins(1,1,1,1);
+
QHBoxLayout *searchHb=new QHBoxLayout;
- QLabel *label=new QLabel(tr("Search:"));
+ label=new QLabel(tr("Filter:"));
searchLine_=new QLineEdit(searchW);
searchHb->addWidget(label);
+ searchHb->addSpacing(2);
searchHb->addWidget(searchLine_,1);
searchVb->addLayout(searchHb);
+ searchVb->addSpacing(4);
searchList_=new MvQNewIconListWidget(searchW);
searchVb->addWidget(searchList_);
@@ -219,62 +334,36 @@ MvQNewIconWidget::MvQNewIconWidget(QWidget *parent) : QTabWidget(parent)
connect(searchList_,SIGNAL(itemActivated(QListWidgetItem*)),
this,SLOT(slotIconSelected(QListWidgetItem*)));
+ connect(searchList_,SIGNAL(iconCreated(QString)),
+ this,SLOT(slotAddToRecentIcons(QString)));
+
+
mainPanel_->addWidget(searchW);
connect(searchLine_,SIGNAL(textChanged(QString)),
this,SLOT(slotSearch(QString)));
-
- //------------------------
- // Populate option list
- //------------------------
-
- QListWidgetItem* item;
- item=new QListWidgetItem(tr("Most recent"),optionList);
- item->setData(Qt::UserRole,0);
- item->setIcon(QIcon(":/desktop/history.svg"));
- item->setTextAlignment(Qt::AlignHCenter);
- item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-
- item=new QListWidgetItem(tr("Groups"),optionList);
- item->setData(Qt::UserRole,1);
- item->setIcon(QIcon(":/desktop/icon_group.svg"));
- item->setTextAlignment(Qt::AlignHCenter);
- item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-
- item=new QListWidgetItem(tr("Search"),optionList);
- item->setData(Qt::UserRole,2);
- item->setIcon(QIcon(":/desktop/search.svg"));
- item->setTextAlignment(Qt::AlignHCenter);
- item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-
- connect(optionList,SIGNAL(currentRowChanged(int)),
- mainPanel_,SLOT(setCurrentIndex(int)));
-
- //Set option list width
- QFont font;
- QFontMetrics fm(font);
- int optionWidth=fm.width(tr("Most recent"))+20;
- if(optionWidth < 32+20) optionWidth=32+20;
- optionList->setMaximumWidth(optionWidth+20);
- //optionList->setMaximumWidth(128);
-
- //Delegate
- optionList->setItemDelegate(new MvQIconListDelegate(32,this));
-
+
//----------------
// Init
//----------------
slotSearch("");
+ updateRecentList();
+
+ modeBg_->button(2)->setChecked(true);
+ mainPanel_->setCurrentIndex(2);
- optionList->setCurrentRow(2);
+ MvQRecentIcons::addObserver(this);
+
+ setProperty("sidebar","true");
}
-MvQNewIconWidget::~MvQNewIconWidget()
-{
+MvQNewIconPanel::~MvQNewIconPanel()
+{
+ MvQRecentIcons::removeObserver(this);
}
-void MvQNewIconWidget::next(const IconClass& c)
+void MvQNewIconPanel::next(const IconClass& c)
{
if(c.canBeCreated())
{
@@ -297,7 +386,7 @@ void MvQNewIconWidget::next(const IconClass& c)
w=it.value();
}
- QListWidgetItem *typeItem=new QListWidgetItem(MvQIconProvider::pixmap(c,32),
+ QListWidgetItem *typeItem=new QListWidgetItem(MvQIconProvider::pixmap(c,20),
QString::fromStdString(c.defaultName()));
typeItem->setData(Qt::UserRole,QString::fromStdString(c.name()));
@@ -308,7 +397,7 @@ void MvQNewIconWidget::next(const IconClass& c)
}
}
-void MvQNewIconWidget::slotTypeChanged(int index)
+void MvQNewIconPanel::slotTypeChanged(int index)
{
QString type=typeCb_->itemData(index).toString();
QMap<QString,MvQNewIconListWidget*>::iterator it=iconLists_.find(type);
@@ -318,12 +407,17 @@ void MvQNewIconWidget::slotTypeChanged(int index)
}
}
-void MvQNewIconWidget::slotIconSelected(QListWidgetItem* item)
-{
- emit iconSelected(item->data(Qt::UserRole).toString());
+void MvQNewIconPanel::slotIconSelected(QListWidgetItem* item)
+{
+ if(selectionMode_ == DialogMode)
+ {
+ QString name=item->data(Qt::UserRole).toString();
+ emit iconSelected(name);
+ slotAddToRecentIcons(name);
+ }
}
-void MvQNewIconWidget::slotSearch(QString str)
+void MvQNewIconPanel::slotSearch(QString str)
{
vector<const IconClass*> res;
@@ -355,18 +449,35 @@ void MvQNewIconWidget::slotSearch(QString str)
searchList_->sortItems();
}
-int MvQNewIconWidget::currentOption() const
+int MvQNewIconPanel::currentMode() const
{
return mainPanel_->currentIndex();
}
-void MvQNewIconWidget::setCurrentOption(int index)
+void MvQNewIconPanel::setCurrentMode(int index)
+{
+ if(index >=0 && index < modeBg_->buttons().count())
+ {
+ modeBg_->button(index)->setChecked(true);
+ //mainPanel_->setCurrentIndex(index);
+ }
+}
+
+void MvQNewIconPanel::slotChangeMode(int index)
{
mainPanel_->setCurrentIndex(index);
}
-void MvQNewIconWidget::setRecentIcons(QStringList lst)
+void MvQNewIconPanel::slotAddToRecentIcons(QString name)
+{
+ MvQRecentIcons::add(name);
+}
+
+void MvQNewIconPanel::updateRecentList()
{
+ recentList_->clear();
+ QStringList lst=MvQRecentIcons::items();
+
for(int i=lst.count()-1; i >=0 ; i--)
{
const IconClass& kind=IconClass::find(lst[i].toStdString());
@@ -379,6 +490,19 @@ void MvQNewIconWidget::setRecentIcons(QStringList lst)
}
}
+void MvQNewIconPanel::notifyRecentChanged()
+{
+ updateRecentList();
+}
+
+void MvQNewIconPanel::paintEvent(QPaintEvent *)
+ {
+ QStyleOption opt;
+ opt.init(this);
+ QPainter p(this);
+ style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
+ }
+
//==============================
//
// MvQNewIconDialog
@@ -386,22 +510,23 @@ void MvQNewIconWidget::setRecentIcons(QStringList lst)
//==============================
MvQNewIconDialog::MvQNewIconDialog(QWidget *parent) :
- QDialog(parent),
- maxRecent_(12)
+ QDialog(parent)
{
setWindowTitle(tr("Create new icon"));
QVBoxLayout *vb=new QVBoxLayout;
+ vb->setSpacing(0);
+ vb->setContentsMargins(1,1,1,1);
setLayout(vb);
- iconWidget_ =new MvQNewIconWidget(this);
+ iconWidget_ =new MvQNewIconPanel(MvQNewIconPanel::DialogMode,this);
vb->addWidget(iconWidget_,1);
// Buttonbox
//QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
// | QDialogButtonBox::Cancel);
- QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel);
+ QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close);
//connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
@@ -429,19 +554,6 @@ void MvQNewIconDialog::reject()
void MvQNewIconDialog::slotIconSelected(QString name)
{
selected_=name;
- if(recentIcons_.contains(name))
- {
- recentIcons_.removeAll(name);
- recentIcons_ << name;
- }
- else
- {
- if(recentIcons_.count() >= maxRecent_)
- recentIcons_.takeFirst();
-
- recentIcons_ << name;
- }
-
accept();
}
@@ -459,8 +571,7 @@ void MvQNewIconDialog::writeSettings()
settings.beginGroup("main");
settings.setValue("size",size());
- settings.setValue("currentOption",iconWidget_->currentOption());
- settings.setValue("recentIcons",recentIcons_);
+ settings.setValue("currentMode",iconWidget_->currentMode());
settings.endGroup();
}
@@ -478,15 +589,21 @@ void MvQNewIconDialog::readSettings()
resize(QSize(350,500));
}
- if(settings.contains("recentIcons"))
+ if(settings.contains("currentMode"))
{
- recentIcons_=settings.value("recentIcons").toStringList();
- iconWidget_->setRecentIcons(recentIcons_);
- }
-
- if(settings.contains("currentOption"))
- {
- iconWidget_->setCurrentOption(settings.value("currentOption").toInt());
+ iconWidget_->setCurrentMode(settings.value("currentMode").toInt());
}
settings.endGroup();
-}
\ No newline at end of file
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Desktop/MvQNewIconWidget.h b/src/Desktop/MvQNewIconWidget.h
index 3c2d917..32b6871 100644
--- a/src/Desktop/MvQNewIconWidget.h
+++ b/src/Desktop/MvQNewIconWidget.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -17,24 +17,16 @@
#include "IconClass.h"
+#include "MvQRecentIcons.h"
+
+class QButtonGroup;
class QComboBox;
class QLineEdit;
class QListWidget;
+class QMouseEvent;
class QStackedWidget;
-class MvQIconListDelegate : public QStyledItemDelegate
-{
-public:
- MvQIconListDelegate(int, QWidget *parent=0);
- void paint(QPainter *painter,const QStyleOptionViewItem &option,
- const QModelIndex& index) const;
- QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
-
-private:
- int iconSize_;
-};
-
class MvQNewIconDelegate : public QStyledItemDelegate
{
public:
@@ -45,40 +37,62 @@ public:
class MvQNewIconListWidget : public QListWidget
{
+Q_OBJECT
+
public:
MvQNewIconListWidget(QWidget *parent=0);
-};
+signals:
+ void iconCreated(QString);
-class MvQNewIconWidget : public QTabWidget, public ClassScanner
+protected:
+ void mousePressEvent(QMouseEvent *);
+ void mouseMoveEvent(QMouseEvent *);
+
+ QPoint startPos_;
+};
+
+class MvQNewIconPanel : public QWidget, public ClassScanner,public RecentIconsObserver
{
Q_OBJECT
public:
- MvQNewIconWidget(QWidget *parent=0);
- ~MvQNewIconWidget();
+ enum SelectionMode {PanelMode,DialogMode};
+
+ MvQNewIconPanel(SelectionMode,QWidget *parent=0);
+ ~MvQNewIconPanel();
void next(const IconClass& );
- void setCurrentOption(int);
- int currentOption() const;
- void setRecentIcons(QStringList);
+ void setCurrentMode(int);
+ int currentMode() const;
+
+ //Observer method
+ void notifyRecentChanged();
public slots:
void slotTypeChanged(int);
void slotIconSelected(QListWidgetItem*);
void slotSearch(QString);
+ void slotChangeMode(int);
+ void slotAddToRecentIcons(QString);
signals:
void iconSelected(QString);
+ void closePanel(bool b=true);
protected:
+ void updateRecentList();
+ void paintEvent(QPaintEvent *);
+
QStackedWidget *mainPanel_;
- QListWidget* recentList_;
+ MvQNewIconListWidget* recentList_;
QComboBox* typeCb_;
QStackedWidget* iconPanel_;
QMap<QString,MvQNewIconListWidget*> iconLists_;
QLineEdit* searchLine_;
- QListWidget* searchList_;
+ MvQNewIconListWidget* searchList_;
vector<const IconClass*> iconClasses_;
+ QButtonGroup *modeBg_;
+ SelectionMode selectionMode_;
};
class MvQNewIconDialog : public QDialog
@@ -98,11 +112,11 @@ private:
void writeSettings();
void readSettings();
- MvQNewIconWidget* iconWidget_;
+ MvQNewIconPanel* iconWidget_;
QString selected_;
- QStringList recentIcons_;
- const int maxRecent_;
};
+
+
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQObjectBrowser.cc b/src/Desktop/MvQObjectBrowser.cc
deleted file mode 100644
index 5107a3c..0000000
--- a/src/Desktop/MvQObjectBrowser.cc
+++ /dev/null
@@ -1,117 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-#include "MvQObjectBrowser.h"
-
-#include <QAction>
-#include <QApplication>
-#include <QCloseEvent>
-#include <QDialogButtonBox>
-#include <QDebug>
-#include <QHBoxLayout>
-#include <QPushButton>
-#include <QSortFilterProxyModel>
-#include <QTreeView>
-#include <QVBoxLayout>
-
-#include "MvQIconObjectModel.h"
-
-MvQObjectBrowser::MvQObjectBrowser(QWidget *parent) :
- QDialog(parent)
-{
- //setAttribute(Qt::WA_DeleteOnClose);
-
- setWindowTitle("Metview - Icon objects");
-
- //Initial size
- resize(QSize(1100,800));
-
- //----------------------------------
- // Create the object model
- //----------------------------------
-
- objectModel_=new MvQIconObjectModel(this);
-
- QSortFilterProxyModel* sortModel=new QSortFilterProxyModel(this);
- sortModel->setSourceModel(objectModel_);
-
- //-----------------------------
- // Layout
- //-----------------------------
-
- QVBoxLayout *mainLayout = new QVBoxLayout(this);
- mainLayout->setSpacing(0);
- mainLayout->setContentsMargins(1,1,1,1);
-
- //--------------------
- // Icon view
- //--------------------
-
- objectView_= new QTreeView(this);
- objectView_->setRootIsDecorated(false);
- objectView_->setSortingEnabled(true);
- objectView_->sortByColumn(0,Qt::AscendingOrder);
- objectView_->setAlternatingRowColors(true);
- objectView_->setAllColumnsShowFocus(true);
- objectView_->setModel(sortModel);
-
- objectView_->setProperty("mvStyle","0");
- objectView_->sortByColumn(0,Qt::DescendingOrder);
- objectView_->resizeColumnToContents(0);
-
- mainLayout->addWidget(objectView_,1);
-
- //--------------------------------------
- // Buttons
- //--------------------------------------
-
- buttonBox_= new QDialogButtonBox(this);
-
- buttonBox_->addButton(QDialogButtonBox::Close);
-
- connect(buttonBox_, SIGNAL(clicked(QAbstractButton*)),
- this, SLOT(slotButtonClicked(QAbstractButton*)));
-
- mainLayout->addWidget(buttonBox_);
-}
-
-MvQObjectBrowser::~MvQObjectBrowser()
-{
-}
-
-void MvQObjectBrowser::closeEvent(QCloseEvent* event)
-{
- close();
- event->accept();
-}
-
-void MvQObjectBrowser::slotButtonClicked(QAbstractButton* button)
-{
- if(!button) return;
-
- if(buttonBox_->standardButton(button) == QDialogButtonBox::Close)
- {
- close();
- accept();
- }
-}
-
-//====================================================
-//
-// Read/write settings
-//
-//====================================================
-
-void MvQObjectBrowser::writeSettings(QSettings &settings)
-{
-}
-
-void MvQObjectBrowser::readSettings(QSettings &settings)
-{
-}
diff --git a/src/Desktop/MvQObjectBrowser.h b/src/Desktop/MvQObjectBrowser.h
deleted file mode 100644
index 6ff366f..0000000
--- a/src/Desktop/MvQObjectBrowser.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-#ifndef MvQObjectBrowser_H
-#define MvQObjectBrowser_H
-
-#include <QDialog>
-#include <QSettings>
-
-class Folder;
-class MvQFolderModel;
-
-class IconClass;
-class IconObject;
-
-class QAbstractButton;
-class QCloseEvent;
-class QDialogButtonBox;
-class QTreeView;
-
-class MvQIconObjectModel;
-
-using namespace std;
-
-class MvQObjectBrowser : public QDialog
-{
- Q_OBJECT
-
-public:
- MvQObjectBrowser(QWidget* parent=0);
- ~MvQObjectBrowser();
-
- void writeSettings(QSettings &);
- void readSettings(QSettings &);
-
-public slots:
- void slotButtonClicked(QAbstractButton*);
-
-protected:
- void closeEvent(QCloseEvent*);
-
- MvQIconObjectModel* objectModel_;
- QTreeView* objectView_;
- QDialogButtonBox* buttonBox_;
-};
-
-#endif
diff --git a/src/Desktop/MvQPathWidget.cc b/src/Desktop/MvQPathWidget.cc
index 1438714..76662a0 100644
--- a/src/Desktop/MvQPathWidget.cc
+++ b/src/Desktop/MvQPathWidget.cc
@@ -11,6 +11,8 @@
#include <QDebug>
#include <QDir>
+#include <QDragEnterEvent>
+#include <QDragMoveEvent>
#include <QHBoxLayout>
#include <QMenu>
#include <QSignalMapper>
@@ -19,7 +21,9 @@
#include "MvQBookmarks.h"
#include "MvQContextMenu.h"
+#include "MvQDropTarget.h"
#include "MvQFileBrowser.h"
+#include "MvQFolderViewBase.h"
#include "MvQIconProvider.h"
#include "Folder.h"
@@ -28,7 +32,116 @@
QList<MvQContextItem*> MvQPathWidget::cmTbItems_;
QList<MvQContextItem*> MvQPathWidget::cmMenuItems_;
-MvQPathWidget::MvQPathWidget(QWidget *parent) : QWidget(parent)
+//=============================================================
+//
+// MvQPathButton
+//
+//=============================================================
+
+MvQPathButton::MvQPathButton(QWidget *parent) : QToolButton(parent), menu_(0)
+{
+ setAcceptDrops(true);
+}
+
+void MvQPathButton::checkDropTarget(QDropEvent *event)
+{
+ if(!event->mimeData()->hasFormat("metview/icon"))
+ {
+ removeDropTarget();
+ }
+
+ QString s=text();
+
+ if(!s.isEmpty())
+ {
+ //Folder *f=Folder::folder(s.toStdString(),false);
+ //if(f && !f->locked())
+ //{
+ Qt::DropAction dropAction=event->proposedAction();
+ MvQDropTarget::Instance()->reset(s,(dropAction == Qt::MoveAction));
+
+ if(window())
+ {
+ MvQDropTarget::Instance()->move(mapToGlobal(event->pos())+QPoint(20,20));
+ }
+ return;
+ //}
+ }
+
+ removeDropTarget();
+}
+
+void MvQPathButton::removeDropTarget()
+{
+ MvQDropTarget::Instance()->hide();
+}
+
+void MvQPathButton::dragEnterEvent(QDragEnterEvent *event)
+{
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ event->accept();
+
+ }
+ else
+ event->ignore();
+}
+
+void MvQPathButton::dragMoveEvent(QDragMoveEvent *event)
+{
+ if(event->source() &&
+ (event->proposedAction() == Qt::CopyAction ||
+ event->proposedAction() == Qt::MoveAction))
+ {
+ checkDropTarget(event);
+ event->accept();
+ }
+ else
+ {
+ removeDropTarget();
+ event->ignore();
+ }
+}
+
+void MvQPathButton::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ removeDropTarget();
+ event->accept();
+}
+
+void MvQPathButton::dropEvent(QDropEvent *event)
+{
+ removeDropTarget();
+
+ if(!event->source())
+ {
+ event->ignore();
+ return;
+ }
+
+ if(event->proposedAction() != Qt::CopyAction &&
+ event->proposedAction() != Qt::MoveAction)
+ {
+ event->ignore();
+ return;
+ }
+
+ emit iconDropped(event);
+}
+
+//=============================================================
+//
+// MvQPathWidget
+//
+//=============================================================
+
+MvQPathWidget::MvQPathWidget(QWidget *parent) :
+ QWidget(parent),
+ actionReload_(0),
+ reloadTb_(0),
+ bookmarkTb_(0)
{
layout_=new QHBoxLayout(this);
layout_->setSpacing(0);
@@ -44,6 +157,7 @@ MvQPathWidget::MvQPathWidget(QWidget *parent) : QWidget(parent)
connect(this,SIGNAL(pathClicked(int)),
this,SLOT(slotChangeDir(int)));
+
}
void MvQPathWidget::slotContextMenu(const QPoint& pos)
@@ -95,8 +209,13 @@ void MvQPathWidget::clearLayout()
}
delete item;
}
-}
+}
+void MvQPathWidget::setReloadAction(QAction* ac)
+{
+ actionReload_=ac;
+}
+
void MvQPathWidget::setPath(QString path)
{
setPath(Folder::folder(path.toStdString(),false));
@@ -106,10 +225,13 @@ void MvQPathWidget::setPath(Folder *folder)
{
//Clear the layout (widgets are not deleted in this step!)
clearLayout();
+ path_.clear();
if(!folder)
return;
+ path_=QString::fromStdString(folder->fullName());
+
QList<Folder*> lst;
lst << folder;
Folder *f=folder;
@@ -153,13 +275,13 @@ void MvQPathWidget::setPath(Folder *folder)
QString::fromStdString(f->fullName()));
items_ << item;
- QToolButton *tb;
+ MvQPathButton *tb;
//---------------------------------------
// Dir name
//---------------------------------------
- tb=new QToolButton(this);
+ tb=new MvQPathButton(this);
item->nameTb_=tb;
if(item->fullName_ == "/")
@@ -199,24 +321,31 @@ void MvQPathWidget::setPath(Folder *folder)
connect(tb,SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(slotContextMenu(const QPoint &)));
-
+
smp_->setMapping(tb,i);
+ connect(tb,SIGNAL(iconDropped(QDropEvent*)),
+ this,SLOT(slotIconDropped(QDropEvent*)));
+
//---------------------------------------
//Menu with the folders in the given dir
//---------------------------------------
- tb=new QToolButton(this);
+ tb=new MvQPathButton(this);
item->menuTb_=tb;
- tb->setArrowType(Qt::RightArrow);
+ //tb->setArrowType(Qt::RightArrow);
tb->setAutoRaise(true);
- tb->setIconSize(QSize(10,10));
+ //tb->setIconSize(QSize(10,10));
tb->setPopupMode(QToolButton::InstantPopup);
tb->setObjectName("pathMenuTb");
+
+ connect(tb,SIGNAL(clicked()),
+ this,SLOT(slotShowDirMenu()));
QMenu *mn=createDirMenu(i,f,tb);
- tb->setMenu(mn);
+ //tb->addMenu(mn);
+ tb->assignMenu(mn);
}
//Add items to layout
@@ -245,7 +374,39 @@ void MvQPathWidget::setPath(Folder *folder)
items_.at(i)->nameTb_->setStyleSheet("QToolButton {font-weight: normal;}");
}*/
- layout_->addStretch(1);
+ layout_->addStretch(1);
+
+ //Bookmarks
+ if(!bookmarkTb_)
+ {
+ bookmarkTb_=new QToolButton(this);
+ bookmarkTb_->setAutoRaise(true);
+ //bookmarkTb_->setIconSize(QSize(20,20));
+ bookmarkTb_->setObjectName("pathIconTb");
+
+ connect(bookmarkTb_,SIGNAL(clicked()),
+ this,SLOT(slotBookmark()));
+ }
+
+ updateBookmarkStatus();
+
+ layout_->addWidget(bookmarkTb_);
+
+ //Reload
+ if(actionReload_)
+ {
+ if(!reloadTb_)
+ {
+ reloadTb_=new QToolButton(this);
+ reloadTb_->setDefaultAction(actionReload_);
+ reloadTb_->setAutoRaise(true);
+ //reloadTb_->setIconSize(QSize(20,20));
+ reloadTb_->setObjectName("pathIconTb");
+ }
+ layout_->addWidget(reloadTb_);
+ }
+
+
}
QMenu* MvQPathWidget::createDirMenu(int index,Folder* folder,QWidget *parent)
@@ -277,6 +438,13 @@ QMenu* MvQPathWidget::createDirMenu(int index,Folder* folder,QWidget *parent)
return 0;
}
+void MvQPathWidget::slotShowDirMenu()
+{
+ if(MvQPathButton *tb=static_cast<MvQPathButton*>(sender()))
+ {
+ tb->assignedMenu()->popup(mapToGlobal(tb->pos()));
+ }
+}
void MvQPathWidget::slotChangeDir(int index)
{
@@ -370,4 +538,48 @@ void MvQPathWidget::paintEvent(QPaintEvent *)
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
- }
\ No newline at end of file
+ }
+
+void MvQPathWidget::slotIconDropped(QDropEvent* event)
+{
+ if(QToolButton* tb=static_cast<QToolButton*>(sender()))
+ {
+ QString p=getPath(tb);
+ if(Folder* f=Folder::folder(p.toStdString(),false))
+ {
+ MvQFolderViewBase::dropToFolder(f,event);
+ }
+ }
+}
+
+//----------------------
+// Bookmarks
+//----------------------
+
+void MvQPathWidget::slotBookmark()
+{
+ if(MvQBookmarks::isBookmark(path_))
+ {
+ MvQBookmarks::editItem(path_);
+ }
+ else
+ {
+ MvQBookmarks::addItem(path_);
+ }
+
+ updateBookmarkStatus();
+}
+
+void MvQPathWidget::updateBookmarkStatus()
+{
+ if(MvQBookmarks::isBookmark(path_))
+ {
+ bookmarkTb_->setIcon(QPixmap(":/desktop/bookmark.svg"));
+ bookmarkTb_->setToolTip(tr("Edit this bookmark"));
+ }
+ else
+ {
+ bookmarkTb_->setIcon(QPixmap(":/desktop/bookmark_empty.svg"));
+ bookmarkTb_->setToolTip(tr("Bookmark current folder"));
+ }
+}
diff --git a/src/Desktop/MvQPathWidget.h b/src/Desktop/MvQPathWidget.h
index c8553cc..6919e11 100644
--- a/src/Desktop/MvQPathWidget.h
+++ b/src/Desktop/MvQPathWidget.h
@@ -13,6 +13,10 @@
#include <QWidget>
#include <QToolButton>
+#include <string>
+
+using namespace std;
+
class QAction;
class QHBoxLayout;
class QMenu;
@@ -22,6 +26,29 @@ class MvQContextItem;
class Folder;
+class MvQPathButton : public QToolButton
+{
+Q_OBJECT
+
+public:
+ MvQPathButton(QWidget *parent=0);
+ void assignMenu(QMenu* menu) {menu_=menu;};
+ QMenu* assignedMenu() {return menu_;};
+signals:
+ void iconDropped(QDropEvent*);
+
+protected:
+ void checkDropTarget(QDropEvent *event);
+ void removeDropTarget();
+ void dragEnterEvent(QDragEnterEvent *event);
+ void dragMoveEvent(QDragMoveEvent *event);
+ void dragLeaveEvent(QDragLeaveEvent *event);
+ void dropEvent(QDropEvent*);
+
+ QMenu* menu_;
+};
+
+
class MvQPathWidgetItem
{
public:
@@ -47,11 +74,15 @@ public:
void setPath(QString);
void setPath(Folder*);
+ void setReloadAction(QAction*);
public slots:
+ void slotShowDirMenu();
void slotChangeDir(int);
void slotChangeDir(QAction *);
void slotContextMenu(const QPoint&);
+ void slotBookmark();
+ void slotIconDropped(QDropEvent* event);
signals:
void pathClicked(int);
@@ -64,13 +95,20 @@ protected:
QString getPath(QToolButton*);
QString getPath(QAction*);
void paintEvent(QPaintEvent *);
+ void updateBookmarkStatus();
QHBoxLayout *layout_;
QSignalMapper* smp_;
QList<MvQPathWidgetItem*> items_;
+ QAction* actionReload_;
+ QToolButton* reloadTb_;
+ QToolButton* bookmarkTb_;
+ QString path_;
+
static QList<MvQContextItem*> cmTbItems_;
static QList<MvQContextItem*> cmMenuItems_;
+
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQRecentIcons.cc b/src/Desktop/MvQRecentIcons.cc
new file mode 100644
index 0000000..73a7948
--- /dev/null
+++ b/src/Desktop/MvQRecentIcons.cc
@@ -0,0 +1,69 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "MvQRecentIcons.h"
+
+#include <QSettings>
+
+int MvQRecentIcons::maxNum_=20;
+QStringList MvQRecentIcons::items_;
+QList<RecentIconsObserver*> MvQRecentIcons::observers_;
+
+MvQRecentIcons::MvQRecentIcons()
+{
+}
+
+void MvQRecentIcons::init()
+{
+ QSettings settings("ECMWF","MV4-Desktop-RecentIcons");
+
+ settings.beginGroup("main");
+ if(settings.contains("recentIcons"))
+ {
+ items_=settings.value("recentIcons").toStringList();
+ }
+ settings.endGroup();
+}
+
+void MvQRecentIcons::save()
+{
+ QSettings settings("ECMWF","MV4-Desktop-RecentIcons");
+
+ //We have to clear it not to remember all the previous settings
+ settings.clear();
+ settings.beginGroup("main");
+ settings.setValue("recentIcons",items_);
+ settings.endGroup();
+}
+
+void MvQRecentIcons::add(QString name)
+{
+ if(items_.contains(name))
+ {
+ items_.removeAll(name);
+ items_ << name;
+ }
+ else
+ {
+ if(items_.count() >= maxNum_)
+ items_.takeFirst();
+
+ items_ << name;
+ }
+
+ foreach(RecentIconsObserver *o,observers_)
+ o->notifyRecentChanged();
+}
+
+void MvQRecentIcons::removeObserver(RecentIconsObserver *o)
+{
+ observers_.removeAll(o);
+}
+
+static MvQRecentIcons recentIcons;
\ No newline at end of file
diff --git a/src/Desktop/MvQRecentIcons.h b/src/Desktop/MvQRecentIcons.h
new file mode 100644
index 0000000..800ae51
--- /dev/null
+++ b/src/Desktop/MvQRecentIcons.h
@@ -0,0 +1,41 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef MvQRecentIcons_H
+#define MvQRecentIcons_H
+
+#include <QStringList>
+
+class MvQRecentIcons;
+
+class RecentIconsObserver
+{
+public:
+ RecentIconsObserver() {};
+ virtual void notifyRecentChanged()=0;
+};
+
+class MvQRecentIcons
+{
+public:
+ MvQRecentIcons();
+ static const QStringList items() {return items_;}
+ static void add(QString);
+ static void init();
+ static void save();
+ static void addObserver(RecentIconsObserver* o) {observers_.push_back(o);}
+ static void removeObserver(RecentIconsObserver*);
+
+protected:
+ static int maxNum_;
+ static QStringList items_;
+ static QList<RecentIconsObserver*> observers_;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/Desktop/MvQRequestPanelLine.cc b/src/Desktop/MvQRequestPanelLine.cc
index d31873b..e29416b 100644
--- a/src/Desktop/MvQRequestPanelLine.cc
+++ b/src/Desktop/MvQRequestPanelLine.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -10,6 +10,7 @@
#include "MvQRequestPanelLine.h"
#include <QApplication>
+#include <QDebug>
#include <QFrame>
#include <QLabel>
#include <QStyle>
@@ -23,6 +24,7 @@
MvQRequestPanelLine::MvQRequestPanelLine(RequestPanel& owner,const Parameter& param, bool buildLine) :
RequestPanelItem(owner,param),
+ defaultTb_(0),
gray_(false),
helper_(0),
parentWidget_(owner.parentWidget())
@@ -35,15 +37,17 @@ MvQRequestPanelLine::MvQRequestPanelLine(RequestPanel& owner,const Parameter& pa
//Toggle to indicate default/non-default settings
defaultTb_ = new QToolButton(parentWidget_);
defaultTb_->setObjectName(QString::fromUtf8("guiItemDefaultTb"));
- defaultTb_->setCheckable(true);
- defaultTb_->setChecked(false);
defaultTb_->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
- defaultTb_->setMaximumSize(QSize(10,10));
- defaultTb_->setEnabled(false);
+ defaultTb_->setMaximumSize(QSize(20,20));
+ defaultTb_->setToolTip(tr("Reset parameter"));
+ //defaultTb_->setIconSize(QSize(10,10));
+ defaultTb_->setAutoRaise(true);
+ defaultTb_->setIcon(QPixmap(":/desktop/reset_lineEditor.svg"));
+ //defaultTb_->setIcon(QPixmap(":/desktop/link.svg"));
connect(defaultTb_,SIGNAL(clicked(bool)),
- this,SLOT(slotChangeToDefault(bool)));
-
+ this,SLOT(slotChangeToDefault(bool)));
+
//name label
name_=QString::fromStdString(param.beautifiedName());
nameLabel_=new QLabel(name_,parentWidget_);
@@ -54,6 +58,9 @@ MvQRequestPanelLine::MvQRequestPanelLine(RequestPanel& owner,const Parameter& pa
row_=parentLayout->rowCount();
parentLayout->addWidget(defaultTb_,row_,DefaultColumn);
parentLayout->addWidget(nameLabel_,row_,NameColumn);
+
+ defaultTb_->setVisible(false);
+ //defaultTb_->setEnabled(false);
}
MvQRequestPanelLine::~MvQRequestPanelLine()
@@ -153,12 +160,19 @@ void MvQRequestPanelLine::mark(bool g)
{
if(g == false)
{
- defaultTb_->setChecked(false);
- defaultTb_->setEnabled(false);
+ int cntPrev=owner_.defaultCnt();
+ defaultTb_->hide();
+ int cntAct=owner_.defaultCnt();
+ if(cntPrev != 0 && cntAct == 0)
+ owner_.updateParentWidget();
}
else
- { defaultTb_->setEnabled(true);
- defaultTb_->setChecked(true);
+ {
+ int cntPrev=owner_.defaultCnt();
+ defaultTb_->show();
+ int cntAct=owner_.defaultCnt();
+ if(cntPrev == 0 && cntAct != 0)
+ owner_.updateParentWidget();
}
}
@@ -188,13 +202,13 @@ void MvQRequestPanelLine::setEnabled(bool s)
}
}
-void MvQRequestPanelLine::slotChangeToDefault(bool checked)
+void MvQRequestPanelLine::slotChangeToDefault(bool)
{
- if(!checked)
- {
+ //if(!checked)
+ //{
//This will reset the request and call update on all the items
owner_.setToDefault(this);
- }
+ //}
}
@@ -204,3 +218,11 @@ void MvQRequestPanelLine::slotStarHelpDialog(bool)
helper_->start();
}
+
+bool MvQRequestPanelLine::hasDefaultTb()
+{
+ if(defaultTb_)
+ return defaultTb_->isVisible();
+
+ return false;
+}
diff --git a/src/Desktop/MvQRequestPanelLine.h b/src/Desktop/MvQRequestPanelLine.h
index 960ea2e..58c5a17 100644
--- a/src/Desktop/MvQRequestPanelLine.h
+++ b/src/Desktop/MvQRequestPanelLine.h
@@ -35,7 +35,8 @@ public:
void gray(bool);
void mark(bool);
-
+ bool hasDefaultTb();
+
public slots:
void slotChangeToDefault(bool);
virtual void slotHelperEdited(const vector<string>&) {};
diff --git a/src/Desktop/MvQRequestPanelWidget.cc b/src/Desktop/MvQRequestPanelWidget.cc
index 2b200ed..043ec78 100644
--- a/src/Desktop/MvQRequestPanelWidget.cc
+++ b/src/Desktop/MvQRequestPanelWidget.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -16,25 +16,29 @@
#include <QPalette>
#include "MvQIconMimeData.h"
+#include "MvQTheme.h"
#include "IconClass.h"
#include "IconObject.h"
+QBrush MvQRequestPanelWidget::bgBrushLeft_=Qt::red;
+QBrush MvQRequestPanelWidget::bgBrushRight_;
+QPen MvQRequestPanelWidget::linePenHorizontal_;
+QPen MvQRequestPanelWidget::linePenVertical_;
+QPen MvQRequestPanelWidget::linePenReset_;
+
MvQRequestPanelWidget::MvQRequestPanelWidget(const vector<string>& cls,QWidget* parent) :
QWidget(parent),
classes_(cls)
{
- //bgCol_=QColor(232,232,232);
- //lineCol_=QColor(185,185,185);
- //bgCol_=QColor(Qt::white);
-
- bgCol_=palette().color(QPalette::Window);
- //lineCol_= bgCol_.darker(180);
- cols_ << bgCol_;
- //cols_ << bgCol_.darker(102);
- cols_ << bgCol_;
-
-
+ if(bgBrushLeft_.color() == Qt::red)
+ {
+ bgBrushLeft_=MvQTheme::brush("editor","line_item_brush_left");
+ bgBrushRight_=MvQTheme::brush("editor","line_item_brush_right");
+ linePenHorizontal_=QPen(MvQTheme::colour("editor","line_item_pen_horizontal"));
+ linePenVertical_=QPen(MvQTheme::colour("editor","line_item_pen_vertical"));
+ linePenReset_=MvQTheme::colour("editor","line_item_pen_reset");
+ }
setAcceptDrops(true);
}
@@ -42,8 +46,11 @@ MvQRequestPanelWidget::MvQRequestPanelWidget(const vector<string>& cls,QWidget*
void MvQRequestPanelWidget::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
- painter.drawRect(0, 0, this->width(), this->height());
+ //paint bg
+ QPalette pal=palette();
+ painter.fillRect(0, 0, this->width(), this->height(),pal.color(QPalette::Window));
+
QGridLayout *grid=static_cast<QGridLayout*>(layout());
if(!grid)
{
@@ -51,18 +58,16 @@ void MvQRequestPanelWidget::paintEvent(QPaintEvent* event)
return;
}
- painter.setPen(lineCol_);
+ painter.setPen(linePenHorizontal_);
//int yPos=0;
int spacingV=grid->verticalSpacing();
int spacingH=grid->horizontalSpacing();
+ int lastY=0;
- //qDebug() << "Paint" ;
-
- int cnt=0;
for(int i=0; i < grid->rowCount(); i++)
- {
+ {
QLayoutItem* item = grid->itemAtPosition(i,3);
if(item)
{
@@ -74,35 +79,41 @@ void MvQRequestPanelWidget::paintEvent(QPaintEvent* event)
int h=r.height()+spacingV;
int y=r.y()-spacingV/2;
- int c=cnt%2;
- if(!grid->itemAtPosition(i,0))
- {
- c=(cnt-1)%2;
- }
-
- painter.setBrush(cols_[c]);
- painter.drawRect(0, y, this->width(), h);
+ //Left side
+ painter.fillRect(0, y,r.x()-spacingH/2, h,bgBrushLeft_);
- //qDebug() << i << y << this->width() << h;
+ //Right side
+ painter.fillRect(r.x()-spacingH/2, y,
+ this->width()-r.x()+spacingH/2, h,bgBrushRight_);
- if(grid->itemAtPosition(i,0))
- {
- cnt++;
- }
- }
- }
+ //Horizontal line
+ painter.drawLine(0, y,this->width(),y);
+
+ lastY=y+h;
+ }
+
+ }
}
+ //Th last Horizontal line
+ painter.drawLine(0, lastY,this->width(),lastY);
+
+
+ //Vertical lines
if(grid->rowCount()>1)
- {
- QLayoutItem* item = grid->itemAtPosition(1,3);
+ {
+ QLayoutItem* item=grid->itemAtPosition(1,3);
if(item)
{
- QRect r=item->geometry();
+ painter.setPen(linePenVertical_);
+ QRect r=item->geometry();
painter.drawLine(r.x()-spacingH/2,0,r.x()-spacingH/2,this->height());
}
}
+ //Frame
+ painter.setPen(Qt::black);
+ painter.drawRect(0, 0, this->width(), this->height());
//QWidget::paintEvent(event);
diff --git a/src/Desktop/MvQRequestPanelWidget.h b/src/Desktop/MvQRequestPanelWidget.h
index aafc549..ec82b99 100644
--- a/src/Desktop/MvQRequestPanelWidget.h
+++ b/src/Desktop/MvQRequestPanelWidget.h
@@ -38,9 +38,12 @@ protected:
void dragMoveEvent(QDragMoveEvent *);
void dropEvent(QDropEvent *);
- QList<QColor> cols_;
- QColor bgCol_;
- QColor lineCol_;
+ static QBrush bgBrushLeft_;
+ static QBrush bgBrushRight_;
+ static QPen linePenHorizontal_;
+ static QPen linePenVertical_;
+ static QPen linePenReset_;
+
vector<string> classes_;
};
diff --git a/src/Desktop/MvQScrolledTextLine.cc b/src/Desktop/MvQScrolledTextLine.cc
index 0c70588..9b02e17 100644
--- a/src/Desktop/MvQScrolledTextLine.cc
+++ b/src/Desktop/MvQScrolledTextLine.cc
@@ -27,8 +27,8 @@ MvQScrolledTextLine::MvQScrolledTextLine(RequestPanel& owner,const Parameter& pa
owner_.addWidget(textEdit_,row_,3);
- connect(textEdit_,SIGNAL(textEdited(const QString&)),
- this,SLOT(slotTextEdited(const QString&)));
+ connect(textEdit_,SIGNAL(textChanged()),
+ this,SLOT(slotTextEdited()));
}
@@ -41,14 +41,17 @@ void MvQScrolledTextLine::refresh(const vector<string>& values)
s += *j;
}
- textEdit_->setPlainText(s.c_str());
+ if(s != textEdit_->toPlainText().toStdString())
+ {
+ textEdit_->setPlainText(s.c_str());
+ }
//changed_ = false;
}
-void MvQScrolledTextLine::slotTextEdited(const QString& text)
+void MvQScrolledTextLine::slotTextEdited()
{
- owner_.set(param_.name(),text.toStdString());
+ owner_.set(param_.name(),textEdit_->toPlainText().toStdString());
}
diff --git a/src/Desktop/MvQScrolledTextLine.h b/src/Desktop/MvQScrolledTextLine.h
index 88e4a6b..3a8633d 100644
--- a/src/Desktop/MvQScrolledTextLine.h
+++ b/src/Desktop/MvQScrolledTextLine.h
@@ -34,7 +34,7 @@ public:
void refresh(const vector<string>&);
public slots:
- void slotTextEdited(const QString&);
+ void slotTextEdited();
protected:
QPlainTextEdit *textEdit_;
diff --git a/src/Desktop/MvQSearchPanel.cc b/src/Desktop/MvQSearchPanel.cc
new file mode 100644
index 0000000..df96a1f
--- /dev/null
+++ b/src/Desktop/MvQSearchPanel.cc
@@ -0,0 +1,366 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "MvQSearchPanel.h"
+
+#include <QHBoxLayout>
+#include <QFormLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QListView>
+#include <QPainter>
+#include <QPushButton>
+#include <QStyle>
+#include <QStyleOption>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+#include "FolderSearchData.h"
+#include "MvQFolderModel.h"
+#include "MvQLineEdit.h"
+#include "MvQTheme.h"
+
+//=======================================
+//
+// MvQFolderSearchModel:
+//
+//=======================================
+
+MvQFolderSearchModel::MvQFolderSearchModel(QObject *parent) : QSortFilterProxyModel(parent), folderModel_(0)
+{
+}
+
+void MvQFolderSearchModel::setSourceModel(MvQFolderModel * sourceModel)
+{
+ folderModel_=sourceModel;
+ QSortFilterProxyModel::setSourceModel(sourceModel);
+}
+
+void MvQFolderSearchModel::slotFilterName(QString name)
+{
+ name_=name.toStdString();
+ reset();
+}
+
+void MvQFolderSearchModel::slotFilterType(QString type)
+{
+ type_=type.toStdString();
+ reset();
+}
+
+bool MvQFolderSearchModel::filterAcceptsRow(int sourceRow,
+ const QModelIndex &/*sourceParent*/) const
+{
+ if(!folderModel_)
+ return false;
+
+ if(name_.empty() && type_.empty())
+ return true;
+
+ QModelIndex index=sourceModel()->index(sourceRow,0);
+
+ if(IconObject *obj=folderModel_->objectFromIndex(index))
+ {
+ return obj->match(name_,type_);
+
+ }
+
+ return false;
+}
+
+//================================================
+//
+// MvQSearchPanel
+//
+//================================================
+
+MvQSearchPanel::MvQSearchPanel(QWidget *parent) :
+ QWidget(parent)
+{
+ QVBoxLayout *vb=new QVBoxLayout;
+ vb->setSpacing(0);
+ vb->setContentsMargins(0,0,0,0);
+ setLayout(vb);
+
+ //Title + close button
+ QHBoxLayout *hb=new QHBoxLayout;
+ vb->addLayout(hb);
+
+ hb->addSpacing(4);
+
+ QLabel *label=new QLabel("<b>" + tr("Search") + "</b>",this);
+ hb->addWidget(label);
+
+ QToolButton *closeTb=new QToolButton(this);
+ closeTb->setAutoRaise(true);
+ closeTb->setIcon(QPixmap(":/desktop/remove.svg"));
+ closeTb->setToolTip(tr("Close sidebar"));
+ hb->addWidget(closeTb);
+
+ connect(closeTb,SIGNAL(clicked(bool)),
+ this,SIGNAL(closePanel(bool)));
+
+ QWidget *searchW= new QWidget(this);
+ QVBoxLayout *searchVb=new QVBoxLayout(searchW);
+ searchVb->setSpacing(0);
+ searchVb->setContentsMargins(1,1,1,1);
+
+ QFormLayout *filterForm=new QFormLayout();
+ nameLine_=new QLineEdit(searchW);
+ typeLine_=new QLineEdit(searchW);
+ filterForm->addRow(tr("Name:"),nameLine_);
+ filterForm->addRow(tr("Type:"),typeLine_);
+ searchVb->addLayout(filterForm);
+
+ /*QHBoxLayout *nameHb=new QHBoxLayout;
+ label=new QLabel(tr("Filter:"));
+ filterLine_=new QLineEdit(searchW);
+ nameHb->addWidget(label);
+ nameHb->addSpacing(2);
+ searchHb->addWidget(filterLine_,1);
+ searchVb->addLayout(nameHb);*/
+
+
+ searchVb->addSpacing(4);
+
+ filterView_=new QListView(searchW);
+ filterView_->setProperty("sidebarView","true");
+ searchVb->addWidget(filterView_);
+
+ vb->addWidget(searchW);
+
+ model_=new MvQFolderModel(this);
+ model_->setIconSize(18);
+
+ filterModel_=new MvQFolderSearchModel(this);
+ filterModel_->setSourceModel(model_);
+
+ filterView_->setModel(filterModel_);
+
+ //connect(filterList_,SIGNAL(itemActivated(QListWidgetItem*)),
+ // this,SLOT(slotIconSelected(QListWidgetItem*)));
+
+ connect(nameLine_,SIGNAL(textChanged(QString)),
+ filterModel_,SLOT(slotFilterName(QString)));
+
+ connect(typeLine_,SIGNAL(textChanged(QString)),
+ filterModel_,SLOT(slotFilterType(QString)));
+
+ connect(filterView_,SIGNAL(clicked(const QModelIndex&)),
+ this,SLOT(slotSelected(const QModelIndex&)));
+
+ setProperty("sidebar","true");
+}
+
+
+void MvQSearchPanel::setFolder(Folder *folder)
+{
+ model_->setFolder(folder);
+}
+
+void MvQSearchPanel::notInUse()
+{
+ if(model_->folder())
+ model_->setFolder(0);
+}
+
+void MvQSearchPanel::slotSelected(const QModelIndex& index)
+{
+ if(IconObject* obj=model_->objectFromIndex(filterModel_->mapToSource(index)))
+ emit iconSelected(obj);
+}
+
+void MvQSearchPanel::paintEvent(QPaintEvent *)
+{
+ QStyleOption opt;
+ opt.init(this);
+ QPainter p(this);
+ style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
+}
+
+
+//================================================
+//
+// MvQFolderSearchPanel
+//
+//================================================
+
+MvQFolderSearchPanel::MvQFolderSearchPanel(QWidget *parent) :
+ QWidget(parent)
+
+{
+ searchData_=new FolderSearchData;
+ searchData_->setObserver(this);
+
+ QHBoxLayout *hb=new QHBoxLayout;
+ hb->setSpacing(4);
+ hb->setContentsMargins(2,1,0,2);
+ setLayout(hb);
+
+ //Name
+ QLabel *label=new QLabel(this);
+ label->setText(tr("&Name:"));
+ nameLe_=new MvQLineEdit(this);
+ nameLe_->setDecoration(QPixmap(":/desktop/search_decor.svg"));
+ //nameLe_->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred);
+ //nameLe_->setMinimumWidth(100);
+
+ label->setBuddy(nameLe_);
+
+ hb->addWidget(label);
+ hb->addWidget(nameLe_,1);
+
+ //Type
+ label=new QLabel(this);
+ label->setText(tr("&Type:"));
+ typeLe_=new MvQLineEdit(this);
+ typeLe_->setDecoration(QPixmap(":/desktop/search_decor.svg"));
+ label->setBuddy(typeLe_);
+
+ hb->addWidget(label);
+ hb->addWidget(typeLe_,1);
+
+ //Buttons
+ nextPb_ = new QPushButton(tr("&Next"),this);
+ nextPb_->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/arrow_down.svg"))));
+
+ prevPb_= new QPushButton(tr("&Previous"),this);
+ prevPb_->setIcon(QIcon(QPixmap(QString::fromUtf8(":/desktop/arrow_up.svg"))));
+
+ hb->addWidget(nextPb_);
+ hb->addWidget(prevPb_);
+
+ hb->addStretch(1);
+
+ connect(nameLe_, SIGNAL(textChanged(QString)),
+ this, SLOT(slotFind(QString)));
+
+ connect(nameLe_, SIGNAL( returnPressed()),
+ this, SLOT(slotFindNext()));
+
+ connect(typeLe_, SIGNAL( textChanged(QString)),
+ this, SLOT(slotFind(QString)));
+
+ connect(typeLe_, SIGNAL( returnPressed()),
+ this, SLOT(slotFindNext()));
+
+ connect(nextPb_, SIGNAL(clicked()),
+ this, SLOT(slotFindNext()));
+
+ connect(prevPb_, SIGNAL(clicked()),
+ this, SLOT(slotFindPrev()));
+
+ QToolButton *closeTb=new QToolButton(this);
+ closeTb->setAutoRaise(true);
+ closeTb->setIcon(QPixmap(":/desktop/remove.svg"));
+ closeTb->setToolTip(tr("Close find panel"));
+ hb->addWidget(closeTb);
+
+ connect(closeTb,SIGNAL(clicked(bool)),
+ this,SLOT(closePanel(bool)));
+
+ oriColour_=nameLe_->palette().color(QPalette::Base);
+ notFoundColour_=MvQTheme::colour("search","not_found");
+ foundColour_=MvQTheme::colour("search","found");
+}
+
+MvQFolderSearchPanel::~MvQFolderSearchPanel()
+{
+ delete searchData_;
+}
+
+void MvQFolderSearchPanel::slotFind(QString)
+{
+ if(isVisible())
+ {
+ searchData_->setSearchTerm(nameLe_->text().toStdString(),typeLe_->text().toStdString());
+ emit find(searchData_);
+ updateStatus();
+ if(IconObject* obj=searchData_->first())
+ emit iconSelected(obj);
+ }
+}
+
+void MvQFolderSearchPanel::slotFindNext()
+{
+ if(isVisible())
+ {
+ if(IconObject* obj=searchData_->next())
+ emit iconSelected(obj);
+ }
+}
+
+void MvQFolderSearchPanel::slotFindPrev()
+{
+ if(isVisible())
+ {
+ if(IconObject* obj=searchData_->prev())
+ emit iconSelected(obj);
+ }
+}
+
+void MvQFolderSearchPanel::targetChanged()
+{
+ if(isVisible())
+ {
+ emit find(searchData_);
+ updateStatus();
+ }
+}
+
+void MvQFolderSearchPanel::openPanel(bool)
+{
+ nameLe_->setFocus(Qt::OtherFocusReason);
+ show();
+ slotFind("");
+}
+
+void MvQFolderSearchPanel::closePanel(bool)
+{
+ hide();
+ searchData_->clear();
+ updateStatus();
+ emit find(searchData_);
+}
+
+void MvQFolderSearchPanel::matchChanged()
+{
+ if(isVisible())
+ {
+
+ }
+}
+
+void MvQFolderSearchPanel::updateStatus()
+{
+ QColor col=oriColour_;
+
+ if(searchData_->isSet())
+ {
+ if(!searchData_->hasMatch())
+ col=notFoundColour_;
+ else
+ col=foundColour_;
+ }
+
+ QPalette p=nameLe_->palette();
+ if(p.color(QPalette::Base) != col)
+ {
+ p.setColor(QPalette::Base,col);
+ nameLe_->setPalette(p);
+ }
+
+ p=typeLe_->palette();
+ if(p.color(QPalette::Base) != col)
+ {
+ p.setColor(QPalette::Base,col);
+ typeLe_->setPalette(p);
+ }
+}
+
diff --git a/src/Desktop/MvQSearchPanel.h b/src/Desktop/MvQSearchPanel.h
new file mode 100644
index 0000000..8017fd5
--- /dev/null
+++ b/src/Desktop/MvQSearchPanel.h
@@ -0,0 +1,115 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef MvQSearchPanel_H
+#define MvQSearchPanel_H
+
+#include <QSortFilterProxyModel>
+#include <QWidget>
+
+#include <string>
+
+#include "FolderSearchData.h"
+
+class Folder;
+class QComboBox;
+class QLineEdit;
+class QListView;
+class QPushButton;
+class MvQFolderModel;
+class MvQFolderFilterModel;
+class MvQLineEdit;
+class IconObject;
+
+class MvQFolderSearchModel : public QSortFilterProxyModel
+{
+Q_OBJECT
+
+public:
+ MvQFolderSearchModel(QObject *parent=0);
+ void setSourceModel(MvQFolderModel *);
+ bool filterAcceptsRow(int,const QModelIndex &) const;
+
+public slots:
+ void slotFilterName(QString);
+ void slotFilterType(QString);
+
+protected:
+ MvQFolderModel* folderModel_;
+ std::string name_;
+ std::string type_;
+};
+
+class MvQSearchPanel : public QWidget
+{
+Q_OBJECT
+
+public:
+ MvQSearchPanel(QWidget *parent=0);
+
+ void setFolder(Folder *);
+ void notInUse();
+
+public slots:
+ void slotSelected(const QModelIndex& index);
+
+signals:
+ void closePanel();
+ void iconSelected(IconObject*);
+
+protected:
+ void paintEvent(QPaintEvent *);
+
+ QLineEdit *nameLine_;
+ QLineEdit *typeLine_;
+ QListView *filterView_;
+ MvQFolderModel* model_;
+ MvQFolderSearchModel* filterModel_;
+
+};
+
+class MvQFolderSearchPanel : public QWidget, public FolderSearchDataObserver
+{
+Q_OBJECT
+
+public:
+ MvQFolderSearchPanel(QWidget *parent=0);
+ ~MvQFolderSearchPanel();
+ void targetChanged();
+
+ //Observer method
+ void matchChanged();
+
+public slots:
+ void slotFind(QString);
+ void slotFindNext();
+ void slotFindPrev();
+ void openPanel(bool);
+ void closePanel(bool);
+
+signals:
+ void find(FolderSearchData*);
+ void iconSelected(IconObject*);
+
+protected:
+ void updateStatus();
+
+ MvQLineEdit *nameLe_;
+ MvQLineEdit *typeLe_;
+ QPushButton *nextPb_;
+ QPushButton *prevPb_;
+ FolderSearchData* searchData_;
+ QColor oriColour_;
+ QColor notFoundColour_;
+ QColor foundColour_;
+
+};
+
+#endif
+
diff --git a/src/Desktop/MvQStringLine.cc b/src/Desktop/MvQStringLine.cc
index a1ae218..638e770 100644
--- a/src/Desktop/MvQStringLine.cc
+++ b/src/Desktop/MvQStringLine.cc
@@ -35,16 +35,18 @@ MvQStringLine::MvQStringLine(RequestPanel& owner,const Parameter& param) :
void MvQStringLine::refresh(const vector<string>& values)
{
- string s;
+ string s;
for(vector<string>::const_iterator j = values.begin(); j != values.end(); ++j)
{
if(s.length()) s += "/";
s += *j;
}
- lineEdit_->setText(s.c_str());
-
- updateHelper();
+ if(s != lineEdit_->text().toStdString())
+ {
+ lineEdit_->setText(s.c_str());
+ updateHelper();
+ }
//changed_ = false;
}
@@ -69,7 +71,7 @@ void MvQStringLine::slotCleared()
updateHelper();
}
-void MvQStringLine::slotTextEdited(const QString& text)
+void MvQStringLine::slotTextEdited(const QString& /*text*/)
{
dispatchChange();
updateHelper();
diff --git a/src/Desktop/MvQTextLine.cc b/src/Desktop/MvQTextLine.cc
index 644c5a3..b0693ac 100644
--- a/src/Desktop/MvQTextLine.cc
+++ b/src/Desktop/MvQTextLine.cc
@@ -81,7 +81,7 @@ void MvQTextLine::slotCleared()
updateHelper();
}
-void MvQTextLine::slotTextEdited(const QString& text)
+void MvQTextLine::slotTextEdited(const QString& /*text*/)
{
dispatchChange();
updateHelper();
diff --git a/src/Desktop/MvQTheme.cc b/src/Desktop/MvQTheme.cc
new file mode 100644
index 0000000..9fa99dc
--- /dev/null
+++ b/src/Desktop/MvQTheme.cc
@@ -0,0 +1,242 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "MvQTheme.h"
+
+#include <QApplication>
+#include <QColor>
+#include <QDebug>
+#include <QFile>
+#include <QLinearGradient>
+
+#include "MvRequest.h"
+
+static QHash<QString,QPalette::ColorRole> paletteId;
+QHash<QString,QHash<QString,QBrush> > MvQTheme::groups_;
+
+MvQTheme::MvQTheme()
+{
+ if(paletteId.isEmpty())
+ {
+ paletteId["window"]=QPalette::Window;
+ paletteId["windowtext"]=QPalette::WindowText;
+ paletteId["base"]=QPalette::Base;
+ paletteId["alternatebase"]=QPalette::AlternateBase;
+ paletteId["tooltipbase"]=QPalette::ToolTipBase;
+ paletteId["tooltiptext"]=QPalette::ToolTipText;
+ paletteId["text"]=QPalette::Text;
+ paletteId["button"]=QPalette::Button;
+ paletteId["buttontext"]=QPalette::ButtonText;
+ paletteId["brighttext"]=QPalette::BrightText;
+ paletteId["light"]=QPalette::Light;
+ paletteId["midlight"]=QPalette::Midlight;
+ paletteId["dark"]=QPalette::Dark;
+ paletteId["mid"]=QPalette::Mid;
+ paletteId["shadow"]=QPalette::Shadow;
+ paletteId["higlight"]=QPalette::Highlight;
+ paletteId["highlightedtext"]=QPalette::HighlightedText;
+ paletteId["link"]=QPalette::Link;
+ paletteId["linkvisited"]=QPalette::LinkVisited;
+ }
+}
+
+void MvQTheme::load(QApplication* app,QString id)
+{
+ /*QHashIterator<QString,QPalette::ColorRole> it(paletteId);
+ while (it.hasNext())
+ {
+ it.next();
+ QColor c=app->palette().color(QPalette::Disabled,it.value());
+ qDebug() << it.key() << c.red() << c.green() << c.blue();
+ }*/
+
+ groups_.clear();
+
+ if(const char *dshare=getenv("METVIEW_DIR_SHARE"))
+ {
+ MvRequest r;
+
+ string p(dshare);
+ p+="/app-defaults/UiTheme." + id.toStdString();
+ r.read(p.c_str());
+ if(r)
+ {
+ palette_=app->palette();
+
+ do parse(r);
+ while(r.advance());
+
+ app->setPalette(palette_);
+ }
+
+ QString stylePath(dshare);
+ stylePath+="/app-defaults/" + id + ".qss";
+ QFile file(stylePath);
+ if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
+ return;
+
+ QString styleStr(file.readAll());
+ app->setStyleSheet(styleStr);
+
+ qDebug() << stylePath;
+
+ }
+}
+
+void MvQTheme::parse(const MvRequest& r)
+{
+ const char* verb=r.getVerb();
+ if(!verb) return;
+
+ if(strcmp(verb,"palette_active") ==0)
+ {
+ readPalette(QPalette::Active,r);
+ }
+ else if(strcmp(verb,"palette_disabled") ==0)
+ {
+ readPalette(QPalette::Disabled,r);
+ }
+ else if(strcmp(verb,"palette_inactive") ==0)
+ {
+ readPalette(QPalette::Inactive,r);
+ }
+ else
+ {
+ readGroup(verb,r);
+ }
+}
+
+void MvQTheme::readPalette(QPalette::ColorGroup group,const MvRequest& r)
+{
+ QHashIterator<QString,QPalette::ColorRole> it(paletteId);
+ while (it.hasNext())
+ {
+ it.next();
+ if(const char *c=r(it.key().toStdString().c_str()))
+ {
+ QString val(c);
+ if(val.startsWith("rgb"))
+ palette_.setColor(group,it.value(),colour(val));
+ else if(val.startsWith("gradient"))
+ {
+ palette_.setBrush(group,it.value(),brush(val));
+ }
+ }
+ }
+}
+
+void MvQTheme::readGroup(const char* verb,const MvRequest& r)
+{
+ QHash<QString,QBrush> item;
+
+ int n=r.countParameters();
+
+ for(int i=0; i < n ; i++)
+ {
+ if(const char *par=r.getParameter(i))
+ {
+ if(const char *c=r(par))
+ {
+ QString val(c);
+ item[QString(par)]=brush(val);
+ }
+ }
+ }
+
+ if(!item.isEmpty())
+ groups_[QString(verb)]=item;
+}
+
+QColor MvQTheme::colour(QString name)
+{
+ QColor col;
+ QRegExp rx("rgb\\((\\d+),(\\d+),(\\d+)");
+
+ if(rx.indexIn(name) > -1 && rx.captureCount() == 3)
+ {
+ col=QColor(rx.cap(1).toInt(),
+ rx.cap(2).toInt(),
+ rx.cap(3).toInt());
+
+ }
+ return col;
+}
+
+QBrush MvQTheme::brush(QString name)
+{
+ if(name.startsWith("rgb"))
+ return QBrush(colour(name));
+
+ QColor col1, col2;
+ float x1,y1,x2,y2;
+
+ QRegExp rx("p1\\((\\d+),(\\d+)");
+ if(rx.indexIn(name) > -1 && rx.captureCount() == 2)
+ {
+ x1=rx.cap(1).toFloat();
+ y1=rx.cap(2).toFloat();
+ }
+ else
+ return QBrush();
+
+ rx=QRegExp("p2\\((\\d+),(\\d+)");
+ if(rx.indexIn(name) > -1 && rx.captureCount() == 2)
+ {
+ x2=rx.cap(1).toFloat();
+ y2=rx.cap(2).toFloat();
+ }
+ else
+ return QBrush();
+
+ rx=QRegExp("rgb\\((\\d+),(\\d+),(\\d+)\\),rgb\\((\\d+),(\\d+),(\\d+)");
+ if(rx.indexIn(name) > -1 && rx.captureCount() == 6)
+ {
+ col1=QColor(rx.cap(1).toInt(),
+ rx.cap(2).toInt(),
+ rx.cap(3).toInt());
+
+ col2=QColor(rx.cap(4).toInt(),
+ rx.cap(5).toInt(),
+ rx.cap(6).toInt());
+
+ }
+ else
+ return QBrush();
+
+ QLinearGradient grad;
+
+ grad.setCoordinateMode(QGradient::ObjectBoundingMode);
+ grad.setStart(x1,y1);
+ grad.setFinalStop(x2,y2);
+ grad.setColorAt(0,col1);
+ grad.setColorAt(1,col2);
+
+ return QBrush(grad);
+}
+
+QBrush MvQTheme::brush(QString group,QString item)
+{
+ QHash<QString,QHash<QString,QBrush> >::const_iterator it=groups_.find(group);
+ if(it!= groups_.end())
+ {
+ QHash<QString,QBrush>::const_iterator itC=it.value().find(item);
+ if(itC!= it.value().end())
+ return itC.value();
+ }
+
+
+ return QColor();
+}
+
+
+QColor MvQTheme::colour(QString group,QString item)
+{
+ return brush(group,item).color();
+}
+
\ No newline at end of file
diff --git a/src/Desktop/MvQTheme.h b/src/Desktop/MvQTheme.h
new file mode 100644
index 0000000..b885ad3
--- /dev/null
+++ b/src/Desktop/MvQTheme.h
@@ -0,0 +1,40 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef MvQTheme_H
+#define MvQTheme_H
+
+#include <QHash>
+#include <QPalette>
+#include <QString>
+
+class QApplication;
+class MvRequest;
+
+class MvQTheme
+{
+public:
+ MvQTheme();
+ void load(QApplication* ,QString);
+
+ static QBrush brush(QString group,QString item);
+ static QColor colour(QString group,QString item);
+
+private:
+ void parse(const MvRequest&);
+ void readPalette(QPalette::ColorGroup group,const MvRequest& r);
+ void readGroup(const char* verb,const MvRequest& r);
+ static QColor colour(QString name);
+ static QBrush brush(QString name);
+
+ QPalette palette_;
+ static QHash<QString,QHash<QString,QBrush> > groups_;
+};
+
+#endif
diff --git a/src/Desktop/MvQTools.cc b/src/Desktop/MvQTools.cc
index 1c96461..ee83d80 100644
--- a/src/Desktop/MvQTools.cc
+++ b/src/Desktop/MvQTools.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -11,8 +11,6 @@
#include <QAction>
-#include "MvQObjectBrowser.h"
-#include "MvQClassBrowser.h"
#include "MvQHelpBrowser.h"
#include "MvQProductBrowser.h"
@@ -20,8 +18,6 @@ MvQTools* MvQTools::instance_=0;
MvQTools::MvQTools() :
QObject(0),
- objectBrowser_(0),
- classBrowser_(0),
helpBrowser_(0),
productBrowser_(0)
{
@@ -35,24 +31,6 @@ MvQTools* MvQTools::instance()
return instance_;
}
-void MvQTools::slotObject()
-{
- if(!objectBrowser_)
- {
- objectBrowser_=new MvQObjectBrowser();
- }
- objectBrowser_->show();
-}
-
-void MvQTools::slotClass()
-{
- if(!classBrowser_)
- {
- classBrowser_=new MvQClassBrowser();
- }
- classBrowser_->show();
-}
-
void MvQTools::slotHelp()
{
if(!helpBrowser_)
diff --git a/src/Desktop/MvQTools.h b/src/Desktop/MvQTools.h
index 993fa03..a6500db 100644
--- a/src/Desktop/MvQTools.h
+++ b/src/Desktop/MvQTools.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -15,8 +15,6 @@
class QAction;
-class MvQObjectBrowser;
-class MvQClassBrowser;
class MvQHelpBrowser;
class MvQProductBrowser;
@@ -30,8 +28,6 @@ public:
public slots:
void slotHelp();
- void slotObject();
- void slotClass();
void slotProduct();
protected:
@@ -39,8 +35,6 @@ protected:
static MvQTools *instance_;
- MvQObjectBrowser* objectBrowser_;
- MvQClassBrowser* classBrowser_;
MvQHelpBrowser* helpBrowser_;
MvQProductBrowser* productBrowser_;
};
diff --git a/src/Desktop/Parameter.cc b/src/Desktop/Parameter.cc
index e955057..823dcd7 100644
--- a/src/Desktop/Parameter.cc
+++ b/src/Desktop/Parameter.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -26,7 +26,7 @@ public:
};
-GuessInterface::GuessInterface(Parameter& p)
+GuessInterface::GuessInterface(Parameter& /*p*/)
{
choices_["on_off"] = 4;
choices_["menu"] = 3;
@@ -219,7 +219,7 @@ const string& Parameter::beautify(const string& name) const
bool up = true;
result = name;
- for(int it=0; it<result.length(); ++it)
+ for(int it=0; it < static_cast<int>(result.length()); ++it)
{
char j = result[it];
if(j == '_' || j == ' ')
diff --git a/src/Desktop/Protocol.h b/src/Desktop/Protocol.h
index 833f82a..0d04a13 100644
--- a/src/Desktop/Protocol.h
+++ b/src/Desktop/Protocol.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Protocol.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef Protocol_H
#define Protocol_H
diff --git a/src/Desktop/ReplyObserver.cc b/src/Desktop/ReplyObserver.cc
index 5c9969b..632c76a 100644
--- a/src/Desktop/ReplyObserver.cc
+++ b/src/Desktop/ReplyObserver.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -24,8 +24,8 @@ void ReplyHandler::callback(MvRequest& in)
const char *p;
int i = 0;
- while(p = getMessage(i++))
- (*s)->message(p);
+ while((p = getMessage(i++)))
+ (*s)->message(p);
(*s)->reply(in,getError());
@@ -45,7 +45,7 @@ void ProgressHandler::callback(MvRequest& in)
const char *p;
int i = 0;
- while(p = getMessage(i++))
+ while((p = getMessage(i++)))
(*s)->message(p);
(*s)->progress(in);
diff --git a/src/Desktop/ReplyObserver.h b/src/Desktop/ReplyObserver.h
index c3327c6..eac44ba 100644
--- a/src/Desktop/ReplyObserver.h
+++ b/src/Desktop/ReplyObserver.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File ReplyObserver.h
-// Baudouin Raoult - ECMWF Aug 99
-
#ifndef ReplyObserver_H
#define ReplyObserver_H
diff --git a/src/Desktop/RequestPanel.cc b/src/Desktop/RequestPanel.cc
index 7867572..49cc3e4 100644
--- a/src/Desktop/RequestPanel.cc
+++ b/src/Desktop/RequestPanel.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -21,16 +21,20 @@
#include "MvQRequestPanelLine.h"
RequestPanel::RequestPanel(const IconClass& kind, QWidget *parent,Editor *editor,
- const char* name):
+ const char* /*name*/):
QGridLayout(parent),
- apply_(false),
class_(kind),
+ apply_(false),
owner_(editor)
{
setSizeConstraint(QLayout::SetMinAndMaxSize);
setColumnMinimumWidth(3,200);
setColumnStretch(3,1);
+ int mleft,mright,mtop, mbottom;
+ getContentsMargins(&mleft,&mtop,&mright,&mbottom);
+ setContentsMargins(4,mtop,mright,mbottom);
+
//We need to set spacing explicitly to make MvQRequestPanelWidget work!
setHorizontalSpacing(8);
setVerticalSpacing(6);
@@ -260,4 +264,20 @@ void RequestPanel::itemWasChangedToDefault()
IconObjectH RequestPanel::currentObject()
{
return (items_.size() > 0) ? items_.at(0)->currentObject() : 0;
-}
\ No newline at end of file
+}
+
+
+int RequestPanel::defaultCnt()
+{
+ int cnt=0;
+ for(vector<RequestPanelItem*>::iterator it = items_.begin(); it != items_.end(); it++)
+ if((*it)->hasDefaultTb())
+ cnt++;
+ return cnt;
+}
+
+void RequestPanel::updateParentWidget()
+{
+ if(QWidget *w=parentWidget())
+ w->update();
+}
diff --git a/src/Desktop/RequestPanel.h b/src/Desktop/RequestPanel.h
index 1f74bf6..ab6668e 100644
--- a/src/Desktop/RequestPanel.h
+++ b/src/Desktop/RequestPanel.h
@@ -52,6 +52,9 @@ public:
const Request& request(long = EXPAND_2ND_NAME);
void request(const Request&, long = EXPAND_2ND_NAME);
IconObjectH currentObject();
+
+ int defaultCnt();
+ void updateParentWidget();
protected:
vector<RequestPanelItem*> items_;
diff --git a/src/Desktop/RequestPanelItem.cc b/src/Desktop/RequestPanelItem.cc
index a8f26fd..f7a6dd2 100644
--- a/src/Desktop/RequestPanelItem.cc
+++ b/src/Desktop/RequestPanelItem.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -60,7 +60,7 @@ void RequestPanelItem::grey()
vector<string> values = r.get("_UNSET");
bool g = false;
string name = param_.name();
- for(int i = 0; i < values.size(); i++)
+ for(int i = 0; i < static_cast<int>(values.size()); i++)
if(name == values[i])
{
g = true;
diff --git a/src/Desktop/RequestPanelItem.h b/src/Desktop/RequestPanelItem.h
index 7f16d1c..d267ffe 100644
--- a/src/Desktop/RequestPanelItem.h
+++ b/src/Desktop/RequestPanelItem.h
@@ -40,6 +40,7 @@ public:
virtual void gray(bool)=0;
virtual void mark(bool)=0;
+ virtual bool hasDefaultTb()=0;
virtual void edit(IconObject*);
IconObjectH currentObject() {return currentObject_;}
diff --git a/src/Desktop/ResolveTransaction.cc b/src/Desktop/ResolveTransaction.cc
new file mode 100644
index 0000000..4bf8231
--- /dev/null
+++ b/src/Desktop/ResolveTransaction.cc
@@ -0,0 +1,74 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "Metview.h"
+#include "ResolveTransaction.h"
+#include "TaskObserver.h"
+#include "Action.h"
+#include "IconObject.h"
+#include "Request.h"
+#include "Task.h"
+#include "Folder.h"
+#include "IconFactory.h"
+
+#include "Protocol.h"
+
+ResolveTransaction::ResolveTransaction():
+ Transaction("RESOLVE")
+{
+ cout << "Resolve::Resolve()" << endl;
+}
+ResolveTransaction::ResolveTransaction(MvTransaction* t):
+ Transaction(t)
+{
+ cout << "Resolve::Resolve()" << endl;
+}
+
+ResolveTransaction::~ResolveTransaction()
+{
+ cout << "Resolve::~Resolve()" << endl;
+}
+
+void ResolveTransaction::success(Task*,const Request& r)
+{
+ sendReply(r);
+}
+
+void ResolveTransaction::failure(Task*)
+{
+ setError(1,"Object failed");
+ sendReply(MvRequest());
+}
+
+MvTransaction* ResolveTransaction::cloneSelf()
+{
+ return new ResolveTransaction(this);
+}
+
+void ResolveTransaction::callback(MvRequest& r)
+{
+ const char* name = r("NAME");
+ IconObject* o = name ? IconObject::search(name):0;
+
+ if(o == 0) {
+ setError(1,"Cannot find object");
+ sendReply(MvRequest());
+ return;
+ }
+
+ Action a("prepare","*");
+ TaskH t = o->action(a);
+ if(t)
+ t->add(this);
+ else
+ sendReply(MvRequest());
+}
+
+
+static ProtocolFactory<ResolveTransaction> resolve;
diff --git a/src/Desktop/ResolveTransaction.h b/src/Desktop/ResolveTransaction.h
new file mode 100644
index 0000000..65a606f
--- /dev/null
+++ b/src/Desktop/ResolveTransaction.h
@@ -0,0 +1,51 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+
+#ifndef ResolveTransaction_H
+#define ResolveTransaction_H
+
+
+#include "Transaction.h"
+#include "TaskObserver.h"
+
+
+
+class ResolveTransaction : public Transaction, public TaskObserver
+{
+public:
+ ResolveTransaction();
+ ~ResolveTransaction();
+
+ static void init();
+
+ // Uncomment for persistent, remove otherwise
+ // static os_typespec* get_os_typespec();
+
+private:
+ // No copy allowed
+ ResolveTransaction(const ResolveTransaction&);
+ ResolveTransaction(MvTransaction*);
+ ResolveTransaction& operator=(const ResolveTransaction&);
+
+ virtual MvTransaction *cloneSelf();
+ virtual void callback(MvRequest&);
+
+ virtual void success(Task*,const Request&);
+ void failure(Task*);
+};
+
+inline void destroy(ResolveTransaction**) {}
+
+// If persistent, uncomment, otherwise remove
+//#ifdef _ODI_OSSG_
+//OS_MARK_SCHEMA_TYPE(ResolveTransaction);
+//#endif
+
+#endif
diff --git a/src/Desktop/RootFolder.cc b/src/Desktop/RootFolder.cc
index e6d2e7a..f2ce291 100644
--- a/src/Desktop/RootFolder.cc
+++ b/src/Desktop/RootFolder.cc
@@ -10,13 +10,12 @@
#include "RootFolder.h"
#include "IconClass.h"
#include "FolderInfo.h"
+#include "FolderSettings.h"
RootFolder::RootFolder() : SystemFolder(0,IconClass::find("HOME"),"",0)
{
// Make sure this one is never deleted
// _attach();
- if(!folderInfo_)
- folderInfo_ = new FolderInfo(path().add(".__metview_icon_").str());
}
RootFolder::~RootFolder()
diff --git a/src/Desktop/ServiceEditor.cc b/src/Desktop/ServiceEditor.cc
index bf1957e..5c9d60b 100644
--- a/src/Desktop/ServiceEditor.cc
+++ b/src/Desktop/ServiceEditor.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -71,7 +71,8 @@ void ServiceEditorObserver::start()
if(kind == "WMSCLIENT")
{
- MvRequest r(path_.c_str());
+ MvRequest r;
+ r.read(path_.c_str());
r("_NAME")=path_.c_str();
r("_CLASS")="WMSCLIENT";
@@ -84,7 +85,8 @@ void ServiceEditorObserver::start()
}
else if(kind == "WCSCLIENT")
{
- MvRequest r(path_.c_str());
+ MvRequest r;
+ r.read(path_.c_str());
r("_NAME")=path_.c_str();
r("_CLASS")="WCSCLIENT";
@@ -138,24 +140,23 @@ void ServiceEditorObserver::start()
}
-void ServiceEditorObserver::reply(const Request& r,int err)
+void ServiceEditorObserver::reply(const Request& /*r*/,int /*err*/)
{
-
editor_.notifyObserverApply();
editor_.Editor::editDone();
}
-void ServiceEditorObserver::progress(const Request& r)
+void ServiceEditorObserver::progress(const Request& /*r*/)
{
}
-void ServiceEditorObserver::message(const string& msg)
+void ServiceEditorObserver::message(const string& /*msg*/)
{
}
-void ServiceEditorObserver::print(ostream& s) const
+void ServiceEditorObserver::print(ostream& /*s*/) const
{
}
diff --git a/src/Desktop/SimpleEditor.cc b/src/Desktop/SimpleEditor.cc
index ac7b923..38321a3 100644
--- a/src/Desktop/SimpleEditor.cc
+++ b/src/Desktop/SimpleEditor.cc
@@ -51,7 +51,7 @@ SimpleEditor::~SimpleEditor()
}
-IconObject* SimpleEditor::copy(const string& name)
+IconObject* SimpleEditor::copy(const string& /*name*/)
{
//IconObject* o = IconFactory::create(name, class_);
//panel_.apply();
diff --git a/src/Desktop/StandardObject.cc b/src/Desktop/StandardObject.cc
index 2129ee7..7da44d7 100644
--- a/src/Desktop/StandardObject.cc
+++ b/src/Desktop/StandardObject.cc
@@ -292,6 +292,10 @@ IconObject* StandardObject::clone(Folder *folder,bool update, int x, int y)
cout << " IS: " << o->fullName() << endl;
}
}
+ else
+ {
+ vOther.push_back(*k);
+ }
}
sub[*j] = vOther;
diff --git a/src/Desktop/State.h b/src/Desktop/State.h
index 4f6f0b8..30a7d20 100644
--- a/src/Desktop/State.h
+++ b/src/Desktop/State.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File State.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef State_H
#define State_H
@@ -18,9 +15,7 @@
class State
{
public:
-
static void load(request*);
-
};
#endif
\ No newline at end of file
diff --git a/src/Desktop/SystemFolder.h b/src/Desktop/SystemFolder.h
index 0b301e1..282a808 100644
--- a/src/Desktop/SystemFolder.h
+++ b/src/Desktop/SystemFolder.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File SystemFolder.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef SystemFolder_H
#define SystemFolder_H
diff --git a/src/Desktop/Task.h b/src/Desktop/Task.h
index d7dc909..34f9fee 100644
--- a/src/Desktop/Task.h
+++ b/src/Desktop/Task.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Task.h
-// Baudouin Raoult - ECMWF Aug 99
-
#ifndef Task_H
#define Task_H
diff --git a/src/Desktop/TaskObserver.h b/src/Desktop/TaskObserver.h
index c670d2f..3c561f8 100644
--- a/src/Desktop/TaskObserver.h
+++ b/src/Desktop/TaskObserver.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File TaskObserver.h
-// Baudouin Raoult - ECMWF Aug 99
-
#ifndef TaskObserver_H
#define TaskObserver_H
diff --git a/src/Desktop/TemporaryEditor.cc b/src/Desktop/TemporaryEditor.cc
index b815d91..6d4b899 100644
--- a/src/Desktop/TemporaryEditor.cc
+++ b/src/Desktop/TemporaryEditor.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -47,7 +47,7 @@ TemporaryEditor::~TemporaryEditor()
}
-IconObject* TemporaryEditor::copy(const string& name)
+IconObject* TemporaryEditor::copy(const string& /*name*/)
{
//IconObject* o = IconFactory::create(name, class_);
//panel_.apply();
diff --git a/src/Desktop/TemporaryFolder.cc b/src/Desktop/TemporaryFolder.cc
new file mode 100644
index 0000000..7742952
--- /dev/null
+++ b/src/Desktop/TemporaryFolder.cc
@@ -0,0 +1,38 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include <unistd.h>
+
+#include "TemporaryFolder.h"
+
+#include "IconFactory.h"
+
+TemporaryFolder::TemporaryFolder(Folder* parent,const IconClass& kind,
+ const string& name,IconInfo* info):
+ SystemFolder(parent,kind,name,info)
+{
+ // On creation, move remove old
+ removeFiles();
+ createFiles();
+
+ cout << "TemporaryFolder " << endl;
+}
+
+TemporaryFolder::~TemporaryFolder()
+{
+}
+
+void TemporaryFolder::createFiles()
+{
+ IconObject::createFiles();
+ Path tmp(getenv("METVIEW_TMPDIR"));
+ path().symlink(tmp);
+}
+
+static IconMaker<TemporaryFolder> maker("TEMPORARY");
diff --git a/src/Desktop/TemporaryFolder.h b/src/Desktop/TemporaryFolder.h
new file mode 100644
index 0000000..6fd6a6b
--- /dev/null
+++ b/src/Desktop/TemporaryFolder.h
@@ -0,0 +1,34 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef TemporaryFolder_H
+#define TemporaryFolder_H
+
+#include "SystemFolder.h"
+
+class TemporaryFolder : public SystemFolder
+{
+public:
+ TemporaryFolder(Folder* parent,const IconClass& kind,
+ const string& name,IconInfo* info);
+
+ virtual ~TemporaryFolder(); // Change to virtual if base class
+
+private:
+ // No copy allowed
+ TemporaryFolder(const TemporaryFolder&);
+ TemporaryFolder& operator=(const TemporaryFolder&);
+
+ virtual void createFiles();
+
+};
+
+inline void destroy(TemporaryFolder**) {}
+
+#endif
diff --git a/src/Desktop/Tools.cc b/src/Desktop/Tools.cc
index 9960dc8..f4b5c3d 100644
--- a/src/Desktop/Tools.cc
+++ b/src/Desktop/Tools.cc
@@ -29,8 +29,12 @@ void Tools::make(QList<QAction*> &lst,QObject* parent)
for (vector<Tools*>::iterator j = tools.begin(); j != tools.end(); ++j )
{
QAction *ac=new QAction(parent);
- const char* text=get_value((*j)->request_, "name", 0);
+ const char* text=get_value((*j)->request_, "label", 0);
ac->setText(text);
+
+ if(const char* icon=get_value((*j)->request_, "icon", 0))
+ ac->setIcon(QPixmap(":/desktop/"+QString(icon) + ".svg"));
+
lst << ac;
connect(ac,SIGNAL(triggered()),
diff --git a/src/Desktop/Transaction.h b/src/Desktop/Transaction.h
index f0698fe..20e648a 100644
--- a/src/Desktop/Transaction.h
+++ b/src/Desktop/Transaction.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Transaction.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef Transaction_H
#define Transaction_H
diff --git a/src/Desktop/ViewEditor.cc b/src/Desktop/ViewEditor.cc
index 323c25a..b87810f 100644
--- a/src/Desktop/ViewEditor.cc
+++ b/src/Desktop/ViewEditor.cc
@@ -324,7 +324,7 @@ void ViewEditor::loadPaperSize(const Request& r)
*/
}
-void ViewEditor::savePaperSize(Request& r)
+void ViewEditor::savePaperSize(Request& /*r*/)
{
/*double h,w;
getPaperSize(h,w);
@@ -510,7 +510,7 @@ IconObject *ViewEditor::defaultView()
//-----------------------------------------------------------
-void ViewEditor::updateButtonStatus(int selected)
+void ViewEditor::updateButtonStatus(int /*selected*/)
{
return;
@@ -793,11 +793,11 @@ GridSnapHandler::GridSnapHandler()
void GridSnapHandler::setCurrent(int xi,int yi)
{
- if(xi>=0 && xi < vals_.size())
+ if(xi>=0 && xi < static_cast<int>(vals_.size()))
{
xIndex_=xi;
}
- if(yi>=0 && yi < vals_.size())
+ if(yi>=0 && yi < static_cast<int>(vals_.size()))
{
yIndex_=yi;
}
@@ -1182,7 +1182,7 @@ MvQGridSelector::MvQGridSelector(int row, int column, int rowNum, int colNum, QW
void MvQGridSelector::setGridSize(int row, int col)
{
rowNum_=row;
- columnNum_=row;
+ columnNum_=col;
row_=0;
column_=0;
update();
diff --git a/src/Desktop/Wastebasket.h b/src/Desktop/Wastebasket.h
index 162e394..894a09c 100644
--- a/src/Desktop/Wastebasket.h
+++ b/src/Desktop/Wastebasket.h
@@ -1,15 +1,12 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
-// File Wastebasket.h
-// Baudouin Raoult - ECMWF Jul 99
-
#ifndef Wastebasket_H
#define Wastebasket_H
diff --git a/src/Desktop/desktop.qrc b/src/Desktop/desktop.qrc
index c52dc60..2fb54bb 100644
--- a/src/Desktop/desktop.qrc
+++ b/src/Desktop/desktop.qrc
@@ -4,16 +4,24 @@
<file alias="add.svg">../images/add.svg</file>
<file alias="add_bookmark.svg">../images/add_bookmark.svg</file>
<file alias="add_bookmark_group.svg">../images/add_bookmark_group.svg</file>
+ <file alias="add_drawer.svg">../images/add_drawer.svg</file>
+ <file alias="add_icon.svg">../images/add_icon.svg</file>
+ <file alias="add_tab.svg">../images/add_tab.svg</file>
<file alias="archive.svg">../images/archive.svg</file>
+ <file alias="arrow_down.svg">../images/arrow_down.svg</file>
+ <file alias="arrow_up.svg">../images/arrow_up.svg</file>
+ <file alias="arrow_drop_target.svg">../images/arrow_drop_target.svg</file>
<file alias="big_arrow_left.svg">../images/big_arrow_left.svg</file>
<file alias="big_arrow_right.svg">../images/big_arrow_right.svg</file>
<file alias="big_arrow_up.svg">../images/big_arrow_up.svg</file>
- <file alias="bookmark.svg">../images/bookmark.svg</file>
+ <file alias="bookmark.svg">../images/bookmark.svg</file>
+ <file alias="bookmark_empty.svg">../images/bookmark_empty.svg</file>
<file alias="bookmark_broken.svg">../images/bookmark_broken.svg</file>
<file alias="bookmark_group.svg">../images/bookmark_group.svg</file>
<file alias="cancel.svg">../images/cancel.svg</file>
<file alias="clear_left.svg">../images/clear_left.svg</file>
<file alias="close.svg">../images/close.svg</file>
+ <file alias="configure.svg">../images/configure.svg</file>
<file alias="create_folder.svg">../images/create_folder.svg</file>
<file alias="create_macro.svg">../images/create_macro.svg</file>
<file alias="cursor_bdiag.svg">../images/cursor_bdiag.svg</file>
@@ -26,9 +34,12 @@
<file alias="cursor_vert_hover.svg">../images/cursor_vert_hover.svg</file>
<file alias="detailed_view.svg">../images/detailed_view.svg</file>
<file alias="drawer.svg">../images/drawer.svg</file>
+ <file alias="drawer_open.svg">../images/drawer_open.svg</file>
+ <file alias="drawer_close.svg">../images/drawer_close.svg</file>
<file alias="duplicate.svg">../images/duplicate.svg</file>
<file alias="edit.svg">../images/edit.svg</file>
<file alias="editcopy.svg">../images/editcopy.svg</file>
+ <file alias="editcut.svg">../images/editcut.svg</file>
<file alias="editpaste.svg">../images/editpaste.svg</file>
<file alias="embedded.svg">../images/embedded.svg</file>
<file alias="error.svg">../images/error.svg</file>
@@ -37,7 +48,7 @@
<file alias="expand_left.svg">../images/expand_left.svg</file>
<file alias="expand_right.svg">../images/expand_right.svg</file>
<file alias="filesave.svg">../images/filesave.svg</file>
- <file alias="filter.svg">../images/filter.svg</file>
+ <file alias="filter.svg">../images/filter.svg</file>
<file alias="folder.svg">../images/folder.svg</file>
<file alias="foldergroup.svg">../images/foldergroup.svg</file>
<file alias="gui_edit.svg">../images/gui_edit.svg</file>
@@ -53,8 +64,10 @@
<file alias="link_broken.svg">../images/link_broken.svg</file>
<file alias="log.svg">../images/log.svg</file>
<file alias="macro.svg">../images/macro.svg</file>
+ <file alias="menu_arrow_down.svg">../images/menu_arrow_down.svg</file>
<file alias="menu_indicator.png">../images/menu_indicator.png</file>
<file alias="mail_send.svg">../images/mail_send.svg</file>
+ <file alias="monitor.svg">../images/monitor.svg</file>
<file alias="padlock.svg">../images/padlock.svg</file>
<file alias="page_add.svg">../images/page_add.svg</file>
<file alias="page_connect.svg">../images/page_connect.svg</file>
@@ -68,16 +81,22 @@
<file alias="redo.svg">../images/redo.svg</file>
<file alias="reload.svg">../images/reload.svg</file>
<file alias="remove.svg">../images/remove.svg</file>
+ <file alias="reset_lineEditor.svg">../images/reset_lineEditor.svg</file>
<file alias="search.svg">../images/search.svg</file>
+ <file alias="search_decor.svg">../images/search_decor.svg</file>
<file alias="select_all.svg">../images/select_all.svg</file>
<file alias="sidebar_left.svg">../images/sidebar_left.svg</file>
+ <file alias="simple_view.svg">../images/simple_view.svg</file>
<file alias="size_down.svg">../images/size_down.svg</file>
<file alias="size_up.svg">../images/size_up.svg</file>
<file alias="snap_to_grid.svg">../images/snap_to_grid.svg</file>
<file alias="splash_screen.png">../images/splash_screen.png</file>
+ <file alias="statusbar.svg">../images/statusbar.svg</file>
<file alias="text_edit.svg">../images/text_edit.svg</file>
+ <file alias="directory_arrow.svg">../images/directory_arrow.svg</file>
<file alias="undo.svg">../images/undo.svg</file>
<file alias="unknown.svg">../images/unknown.svg</file>
+ <file alias="use_global_iconsize.svg">../images/use_global_iconsize.svg</file>
<file alias="view_grid.svg">../images/view_grid.svg</file>
<file alias="visualise.svg">../images/visualise.svg</file>
<file alias="warning.svg">../images/warning.svg</file>
diff --git a/src/Divrot/Makefile.in b/src/Divrot/Makefile.in
index 2216fd7..eb35228 100644
--- a/src/Divrot/Makefile.in
+++ b/src/Divrot/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/Divrot
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -114,6 +115,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -137,6 +140,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Ecfile/Makefile.in b/src/Ecfile/Makefile.in
index 60ea998..39b983d 100644
--- a/src/Ecfile/Makefile.in
+++ b/src/Ecfile/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/Ecfile
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -97,6 +98,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -120,6 +123,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Event/Event.cc b/src/Event/Event.cc
index 8773c33..5c855fc 100644
--- a/src/Event/Event.cc
+++ b/src/Event/Event.cc
@@ -172,10 +172,18 @@ void Event::Startup()
// then we get $METVIEW_STARTUP, which we have to treat in the same way.
char *startup;
+ char startupBuffer[1024];
+
if (!strcmp(gOpt.startup, "$MACRO_STARTUP"))
startup = getenv("MACRO_STARTUP");
- else if (!strcmp(gOpt.startup, "$METVIEW_STARTUP"))
+
+ else if (!strncmp(gOpt.startup, "$METVIEW_STARTUP", 16)) // does it start with $METVIEW_STARTUP?
+ {
startup = getenv("METVIEW_STARTUP");
+ sprintf(startupBuffer, "%s%s", getenv("METVIEW_STARTUP"), &gOpt.startup[16]); // replace with value
+ startup = startupBuffer;
+ }
+
else
startup = gOpt.startup;
diff --git a/src/Event/Makefile.in b/src/Event/Makefile.in
index 08194f5..8ee6e15 100644
--- a/src/Event/Makefile.in
+++ b/src/Event/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/Event
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -116,6 +117,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -139,6 +142,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/ExamineManager/Makefile.in b/src/ExamineManager/Makefile.in
index 954abcd..7ce80f9 100644
--- a/src/ExamineManager/Makefile.in
+++ b/src/ExamineManager/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/ExamineManager
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -98,6 +99,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -121,6 +124,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Flextra/Makefile.in b/src/Flextra/Makefile.in
index e683838..b8a8aec 100644
--- a/src/Flextra/Makefile.in
+++ b/src/Flextra/Makefile.in
@@ -43,6 +43,7 @@ subdir = src/Flextra
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -166,6 +167,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -189,6 +192,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/FlextraExaminer/Makefile.in b/src/FlextraExaminer/Makefile.in
index 6c2ea43..6e33876 100644
--- a/src/FlextraExaminer/Makefile.in
+++ b/src/FlextraExaminer/Makefile.in
@@ -76,6 +76,7 @@ bin_PROGRAMS = bin/FlextraExaminer$(EXEEXT)
subdir = src/FlextraExaminer
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -158,6 +159,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -181,6 +184,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/GeopExaminer/Makefile.in b/src/GeopExaminer/Makefile.in
index e9d3375..e13e214 100644
--- a/src/GeopExaminer/Makefile.in
+++ b/src/GeopExaminer/Makefile.in
@@ -76,6 +76,7 @@ bin_PROGRAMS = bin/GeopExaminer$(EXEEXT)
subdir = src/GeopExaminer
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -158,6 +159,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -181,6 +184,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/GribExaminer/GribExaminer.cc b/src/GribExaminer/GribExaminer.cc
index 780ea4e..7af76f9 100644
--- a/src/GribExaminer/GribExaminer.cc
+++ b/src/GribExaminer/GribExaminer.cc
@@ -41,7 +41,7 @@
#include "MvQTreeView.h"
#include "MvQTreeViewSearchLine.h"
-GribExaminer::GribExaminer(QWidget *parent) : MvQAbstractMessageExaminer("GribExaminer",parent)
+GribExaminer::GribExaminer(string &tmpfilename, QWidget *parent) : MvQAbstractMessageExaminer("GribExaminer",parent)
{
setAttribute(Qt::WA_DeleteOnClose);
@@ -54,7 +54,7 @@ GribExaminer::GribExaminer(QWidget *parent) : MvQAbstractMessageExaminer("GribEx
messageType_="GRIB";
gribNameSpace_ << "Default" << "geography" << "ls" << "mars"
- << "parameter" << "time" << "vertical";
+ << "parameter" << "statistics" << "time" << "vertical";
mvDumpModel_=0;
stdDumpModel_=0;
@@ -64,6 +64,8 @@ GribExaminer::GribExaminer(QWidget *parent) : MvQAbstractMessageExaminer("GribEx
fileInfoLabelNeedsUpdating_=true;
ignoreValueRowSpinChangeSignal_=false;
+ tmpfilename_ = tmpfilename;
+
//Set up grib dump boxes
setupDumpBox();
@@ -531,7 +533,7 @@ void GribExaminer::loadMvDump()
GribMvDump* currentDump=mvDumpModel_->dumpData();
//Generate and read grib dump
- GribMvDump* dump = new GribMvDump;
+ GribMvDump* dump = new GribMvDump(tmpfilename_);
dump->read(data_->fileName(),data_->unfilteredMessageCnt(cnt));
mvDumpModel_->dataIsAboutToChange();
@@ -561,7 +563,7 @@ void GribExaminer::loadWmoDump()
GribWmoDump* currentDump=wmoDumpModel_->dumpData();
//Generate and read grib dump
- GribWmoDump* dump = new GribWmoDump;
+ GribWmoDump* dump = new GribWmoDump(tmpfilename_);
dump->read(data_->fileName(),data_->unfilteredMessageCnt(cnt));
wmoDumpModel_->dataIsAboutToChange();
@@ -592,7 +594,7 @@ void GribExaminer::loadStdDump()
GribStdDump* currentDump=stdDumpModel_->dumpData();
//Generate and read grib dump
- GribStdDump* dump = new GribStdDump;
+ GribStdDump* dump = new GribStdDump(tmpfilename_);
dump->read(data_->fileName(),data_->unfilteredMessageCnt(cnt));
stdDumpModel_->dataIsAboutToChange();
diff --git a/src/GribExaminer/GribExaminer.h b/src/GribExaminer/GribExaminer.h
index 0e8fd64..5c2aa69 100644
--- a/src/GribExaminer/GribExaminer.h
+++ b/src/GribExaminer/GribExaminer.h
@@ -35,7 +35,7 @@ class GribExaminer : public MvQAbstractMessageExaminer
Q_OBJECT
public:
- GribExaminer(QWidget *parent = 0);
+ GribExaminer(string &tmpfilename, QWidget *parent = 0);
~GribExaminer();
public slots:
@@ -111,6 +111,9 @@ protected:
bool ignoreValueRowSpinChangeSignal_;
bool fileInfoLabelNeedsUpdating_;
+
+ string tmpfilename_;
+
};
#endif
diff --git a/src/GribExaminer/Makefile.in b/src/GribExaminer/Makefile.in
index 67f7fa4..f084cfa 100644
--- a/src/GribExaminer/Makefile.in
+++ b/src/GribExaminer/Makefile.in
@@ -76,6 +76,7 @@ bin_PROGRAMS = bin/GribExaminer$(EXEEXT)
subdir = src/GribExaminer
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -158,6 +159,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -181,6 +184,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/GribExaminer/MvMain.cc b/src/GribExaminer/MvMain.cc
index 579e161..faa57bd 100644
--- a/src/GribExaminer/MvMain.cc
+++ b/src/GribExaminer/MvMain.cc
@@ -16,7 +16,6 @@
#include "MvQKeyManager.h"
#include "GribMetaData.h"
-string ftmp;
using namespace std;
@@ -49,7 +48,7 @@ void MvGribExaminer::serve( MvRequest& in, MvRequest& /*out*/)
string fgrib(tmpc);
//Set tmpfile name
- ftmp=marstmp();
+ string ftmp=marstmp();
//Filter
const char* temporary= (const char*)in("TEMPORARY");
@@ -104,7 +103,7 @@ void MvGribExaminer::serve( MvRequest& in, MvRequest& /*out*/)
}
//Create the grib browser and initialize it
- GribExaminer *browser = new GribExaminer;
+ GribExaminer *browser = new GribExaminer(ftmp);
browser->init(grib,manager);
browser->show();
diff --git a/src/GribVectors/Makefile.in b/src/GribVectors/Makefile.in
index a239307..4d09afd 100644
--- a/src/GribVectors/Makefile.in
+++ b/src/GribVectors/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/GribVectors
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -139,6 +140,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -162,6 +165,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Hovmoeller/HovArea.cc b/src/Hovmoeller/HovArea.cc
index 80223bf..e363c56 100644
--- a/src/Hovmoeller/HovArea.cc
+++ b/src/Hovmoeller/HovArea.cc
@@ -199,6 +199,61 @@ bool HovAreaToolkit::NcWriteSecondCoord()
return true;
}
+bool HovAreaToolkit::consistencyCheck( MvRequest& req1, MvRequest& req2)
+{
+ // Check input TYPE
+ if ( (const char*)req1("TYPE") != (const char*)req2.getVerb() )
+ {
+ marslog(LOG_EROR,"TYPE parameter is not consistent");
+ return false;
+ }
+
+ // Check coordinates
+ if ( (double)req1("AREA",0) != (double)req2("AREA",0) ||
+ (double)req1("AREA",1) != (double)req2("AREA",1) ||
+ (double)req1("AREA",2) != (double)req2("AREA",2) ||
+ (double)req1("AREA",3) != (double)req2("AREA",3)
+ )
+ {
+ marslog(LOG_EROR,"AREA coordinates are not consistent");
+ return false;
+ }
+
+ // Check DIRECTION
+ if ( (const char*)req1("AVERAGE_DIRECTION") != (const char*)req2("AVERAGE_DIRECTION") )
+ {
+ marslog(LOG_EROR,"AVERAGE_DIRECTION parameter is not consistent");
+ return false;
+ }
+
+ // Check SWAP AXES
+ if ( (const char*)req1("SWAP_AXES") != (const char*)req2("SWAP_AXES") )
+ {
+ marslog(LOG_EROR,"SWAP_AXES parameter is not consistent");
+ return false;
+ }
+
+ // Check RESOLUTION
+ if ( (const char*)req1("RESOLUTION") != (const char*)req2("RESOLUTION") )
+ {
+ marslog(LOG_EROR,"RESOLUTION parameter is not consistent");
+ return false;
+ }
+
+ return true;
+}
+
+MvRequest HovAreaToolkit::CreateViewRequest()
+{
+ MvRequest viewReq("MHOVMOELLERVIEW");
+ viewReq("TYPE") = this->ApplicationType();
+ viewReq("SWAP_AXES") = swapAxes_ ? "YES" : "NO";
+ viewReq("AVERAGE_DIRECTION") = ( geoDir_ == HOV_NS ) ? "NORTH_SOUTH" : "EAST_WEST";
+ viewReq("_DEFAULT") = 1;
+
+ return viewReq;
+}
+
//--------------------------------------------------------------
void AreaHovmoeller::serve (MvRequest& in, MvRequest& out)
@@ -206,9 +261,10 @@ void AreaHovmoeller::serve (MvRequest& in, MvRequest& out)
cout << "Request IN:" << endl;
in.print();
- // Compute Hovmoeller diagram
- if (!Compute(in,out))
- setError(1, "Failed to generate Hovmoeller.");
+ // Compute Hovmoeller diagram
+ origReq_ = in;
+ if (!Compute(in,out))
+ setError(1, "Failed to generate Hovmoeller.");
cout << "Request OUT:" << endl;
out.print();
diff --git a/src/Hovmoeller/HovArea.h b/src/Hovmoeller/HovArea.h
index eca44e6..9ee2743 100644
--- a/src/Hovmoeller/HovArea.h
+++ b/src/Hovmoeller/HovArea.h
@@ -25,7 +25,7 @@ public:
string GetTitle(ParamInfo*);
const char* GetSecondCoordName();
bool SecondAuxiliaryCoord() { return false; }
- const char* ApplicationType() { return "AREA"; }
+ const char* ApplicationType() { return "AREA_HOVM"; }
bool NcWriteSecondCoord();
void NcWriteGlobalAttributesApp();
@@ -39,7 +39,13 @@ public:
bool GetInputInfo(MvRequest&); //from user interface
bool GetInputInfo(MvNetCDF*); //from the netCDF file
-protected:
+ // Check if parameters between two requests are consistent
+ bool consistencyCheck( MvRequest&, MvRequest& );
+
+private:
+
+ // Create View request
+ MvRequest CreateViewRequest();
int geoDir_; // average direction: East-West or North-South
};
diff --git a/src/Hovmoeller/HovHeight.cc b/src/Hovmoeller/HovHeight.cc
index d695cdc..307b6d4 100644
--- a/src/Hovmoeller/HovHeight.cc
+++ b/src/Hovmoeller/HovHeight.cc
@@ -248,6 +248,46 @@ bool HovHeightToolkit::NcWriteSecondCoord()
return true;
}
+bool HovHeightToolkit::consistencyCheck( MvRequest& req1, MvRequest& req2)
+{
+ // Check input TYPE
+ if ( (const char*)req1("TYPE") != (const char*)req2.getVerb() )
+ {
+ marslog(LOG_EROR,"TYPE parameter is not consistent");
+ return false;
+ }
+
+ // Check coordinates
+ if ( (double)req1("AREA",0) != (double)req2("AREA",0) ||
+ (double)req1("AREA",1) != (double)req2("AREA",1) ||
+ (double)req1("AREA",2) != (double)req2("AREA",2) ||
+ (double)req1("AREA",3) != (double)req2("AREA",3)
+ )
+ {
+ marslog(LOG_EROR,"AREA coordinates are not consistent");
+ return false;
+ }
+
+ // Check VERTICAL_LEVEL_TYPE
+ if ( (const char*)req1("VERTICAL_LEVEL_TYPE") != (const char*)req2("VERTICAL_LEVEL_TYPE") )
+ {
+ marslog(LOG_EROR,"VERTICAL_LEVEL_TYPE parameter is not consistent");
+ return false;
+ }
+
+ return true;
+}
+
+MvRequest HovHeightToolkit::CreateViewRequest()
+{
+ MvRequest viewReq("MHOVMOELLERVIEW");
+ viewReq("TYPE") = this->ApplicationType();
+ viewReq("VERTICAL_LEVEL_TYPE") = ( vertAxisType_ == HOV_PRESSURE ) ? "PRESSURE" : "AS_IN_DATA";
+ viewReq("_DEFAULT") = 1;
+
+ return viewReq;
+}
+
//--------------------------------------------------------------
void HeightHovmoeller::serve (MvRequest& in, MvRequest& out)
@@ -256,6 +296,7 @@ cout << "Request IN:" << endl;
in.print();
// Compute Hovmoeller diagram
+ origReq_ = in;
if (!Compute(in,out))
setError(1, "Failed to generate Hovmoeller Vertical.");
diff --git a/src/Hovmoeller/HovHeight.h b/src/Hovmoeller/HovHeight.h
index 418c782..5b8ad16 100644
--- a/src/Hovmoeller/HovHeight.h
+++ b/src/Hovmoeller/HovHeight.h
@@ -23,7 +23,7 @@ public:
string GetTitle(ParamInfo*);
const char* GetSecondCoordName() { return "vertical"; }
bool SecondAuxiliaryCoord() { return false; }
- const char* ApplicationType() { return "VERTICAL"; }
+ const char* ApplicationType() { return "VERTICAL_HOVM"; }
bool NcWriteSecondCoord();
void NcWriteGlobalAttributesApp();
@@ -44,8 +44,14 @@ public:
bool GetInputInfo(MvRequest&); //from user interface
bool GetInputInfo(MvNetCDF*); //from the netCDF file
+ // Check if parameters between two requests are consistent
+ bool consistencyCheck( MvRequest&, MvRequest& );
+
private:
+ // Create View request
+ MvRequest CreateViewRequest();
+
int vertAxisType_; // Flag to indicate the type of the Vertical axis
};
diff --git a/src/Hovmoeller/HovLine.cc b/src/Hovmoeller/HovLine.cc
index 0994108..4ec0694 100644
--- a/src/Hovmoeller/HovLine.cc
+++ b/src/Hovmoeller/HovLine.cc
@@ -146,6 +146,53 @@ bool HovLineToolkit::NcWriteSecondCoord()
return true;
}
+bool HovLineToolkit::consistencyCheck( MvRequest& req1, MvRequest& req2)
+{
+ // Check input TYPE
+ if ( (const char*)req1("TYPE") != (const char*)req2.getVerb() )
+ {
+ marslog(LOG_EROR,"TYPE parameter is not consistent");
+ return false;
+ }
+
+ // Check coordinates
+ if ( (double)req1("LINE",0) != (double)req2("LINE",0) ||
+ (double)req1("LINE",1) != (double)req2("LINE",1) ||
+ (double)req1("LINE",2) != (double)req2("LINE",2) ||
+ (double)req1("LINE",3) != (double)req2("LINE",3)
+ )
+ {
+ marslog(LOG_EROR,"LINE coordinates are not consistent");
+ return false;
+ }
+
+ // Check SWAP AXES
+ if ( (const char*)req1("SWAP_AXES") != (const char*)req2("SWAP_AXES") )
+ {
+ marslog(LOG_EROR,"SWAP_AXES parameter is not consistent");
+ return false;
+ }
+
+ // Check RESOLUTION
+ if ( (const char*)req1("RESOLUTION") != (const char*)req2("RESOLUTION") )
+ {
+ marslog(LOG_EROR,"RESOLUTION parameter is not consistent");
+ return false;
+ }
+
+ return true;
+}
+
+MvRequest HovLineToolkit::CreateViewRequest()
+{
+ MvRequest viewReq("MHOVMOELLERVIEW");
+ viewReq("TYPE") = this->ApplicationType();
+ viewReq("SWAP_AXES") = swapAxes_ ? "YES" : "NO";
+ viewReq("_DEFAULT") = 1;
+
+ return viewReq;
+}
+
//--------------------------------------------------------------
void LineHovmoeller::serve (MvRequest& in, MvRequest& out)
@@ -154,6 +201,7 @@ cout << "Request IN:" << endl;
in.print();
// Compute Hovmoeller diagram
+ origReq_ = in;
if (!Compute(in,out))
setError(1, "Failed to generate Hovmoeller Line.");
diff --git a/src/Hovmoeller/HovLine.h b/src/Hovmoeller/HovLine.h
index f19a92a..dc14e06 100644
--- a/src/Hovmoeller/HovLine.h
+++ b/src/Hovmoeller/HovLine.h
@@ -27,7 +27,7 @@ public:
const char* GetSecondCoordName() { return HOV_VARLON.c_str(); }
const char* GetSecondAuxiliaryCoordName() { return HOV_VARLAT.c_str(); }
bool SecondAuxiliaryCoord() { return true; }
- const char* ApplicationType() { return "LINE"; }
+ const char* ApplicationType() { return "LINE_HOVM"; }
bool NcWriteSecondCoord();
void NcWriteGlobalAttributesApp();
@@ -37,10 +37,16 @@ public:
// Compute coordinates
bool ComputeSecondCoord();
- private:
+ // Check if parameters between two requests are consistent
+ bool consistencyCheck( MvRequest&, MvRequest& );
+
+private:
// Compute number of points
bool EvaluateNPoints();
+
+ // Create View request
+ MvRequest CreateViewRequest();
};
//---------------------------------------------------------------------
diff --git a/src/Hovmoeller/HovToolkit.cc b/src/Hovmoeller/HovToolkit.cc
index b21183e..f6dab2d 100644
--- a/src/Hovmoeller/HovToolkit.cc
+++ b/src/Hovmoeller/HovToolkit.cc
@@ -100,35 +100,45 @@ bool HovToolkit::Compute(MvRequest& in,MvRequest& out)
if ( !GetInputParameters(in) )
return false;
- // Create Param Info from the fieldset. Start allocating memory.
- if ( !CreateParamInfo(dataRequest_) )
- return false;
+ // Process data
+ if ( strcmp(dataRequest_.getVerb(),"GRIB") == 0 )
+ {
+ // Process a grib data and build the output request
+ // Create Param Info from the fieldset. Start allocating memory.
+ if ( !CreateParamInfo(dataRequest_) )
+ return false;
- // Initialize reference time
- SetRefTime(dateMinD_);
+ // Initialize reference time
+ SetRefTime(dateMinD_);
- // Generate data. It allocates more memory.
- if ( !this->GenerateData(dataRequest_) )
- return false;
+ // Generate data. It allocates more memory.
+ if ( !this->GenerateData(dataRequest_) )
+ return false;
- // Create output request
- const char* name = (const char *)in("_NAME");
- out = CreateOutputRequest(name);
+ // Create output request
+ out = CreateOutputRequest();
+ }
+ else
+ {
+ // It is a netCDF data and it has been already processed.
+ // Build the output request
+ out = this->CreateOutputRequest( in );
+ }
+
+ // Add hidden values to tne output request
+ if ( (const char *)in("_NAME") )
+ out("_NAME") = in("_NAME");
return true;
}
-MvRequest HovToolkit::CreateOutputRequest(const char* name)
+MvRequest HovToolkit::CreateOutputRequest()
{
// Create netCDF data request
MvRequest req("NETCDF");
req("PATH") = ncdfPath_.c_str();
req("TEMPORARY") = 1;
- // If action is not visualisation related then return the netcdf data
- if ( !IsVisualise() )
- return req;
-
// Currently, the netcdf file contains only one parameter.
// Update this code for more than one parameter
ParamIterator ii = params_.begin();
@@ -137,7 +147,6 @@ MvRequest HovToolkit::CreateOutputRequest(const char* name)
// Create netCDF output request
MvRequest out1("NETCDF_XY_MATRIX");
out1("NETCDF_PLOT_TYPE") = "XY_MATRIX";
- out1("NETCDF_DATA") = req;
string xAxisType, yAxisType;
const char* secondCoordName = GetSecondCoordName();
MvRequest horAxisReq, vertAxisReq;
@@ -190,10 +199,8 @@ MvRequest HovToolkit::CreateOutputRequest(const char* name)
out1("NETCDF_VALUE_VARIABLE") = getNetcdfVarname(par->ParamName()).c_str();
out1("NETCDF_MISSING_ATTRIBUTE") = "_FillValue";
out1("_VERB") = "NETCDF_XY_MATRIX";
- if ( name )
- out1("_NAME") = name;
- // Create CARTESIANVIEW request.
+ // Create customised CARTESIANVIEW request.
// This is only needed if a HovData visualisation action was requested.
// If a dropped (data or HovData) action was requested, the View is taken
// from uPlot. In this implementation, the view request will be always
@@ -226,12 +233,44 @@ MvRequest HovToolkit::CreateOutputRequest(const char* name)
str = xy + "DATE_MAX";
viewReq(str.c_str()) = dd.magicsDate().c_str();
- // Create output request
+ // If action is not visualisation related then return the netcdf data.
+ // Also, add the visualisation and original requests as hidden parameters.
+ // These may be used later to help the visualisation of the netcdf data.
+ MvRequest hovViewReq = CreateViewRequest();
+ req("_VIEW") = "MHOVMOELLERVIEW";
+ req("_VIEW_REQUEST") = hovViewReq;
+ req("_VISUALISE") = out1;
+ req("_CARTESIANVIEW") = viewReq;
+ req("_ORIGINAL_REQUEST") = origReq_;
+ if ( !IsVisualise() )
+ return req;
+
+ // Final output request
+ out1("NETCDF_DATA") = req;
MvRequest out = viewReq + out1;
return out;
}
+MvRequest HovToolkit::CreateOutputRequest( MvRequest& in )
+{
+ // Create NetCDF output request
+ MvRequest data = in.getSubrequest("DATA");
+ MvRequest out1 = data.getSubrequest("_VISUALISE");
+ MvRequest viewReq = data.getSubrequest("_CARTESIANVIEW");
+ data.unsetParam("_VISUALISE"); // to avoid duplication of info
+ data.unsetParam("_VIEW_REQUEST"); // to avoid duplication of info
+ data.unsetParam("_CARTESIANVIEW"); // to avoid duplication of info
+ data.unsetParam("_ORIGINAL_REQUEST"); // to avoid duplication of info
+ out1("NETCDF_DATA") = data;
+
+ // Final output request
+ // If an icon was dropped into a view, uPlot will ignore it.
+ // Mode-specific options
+ MvRequest out = viewReq + out1;
+ return out;
+}
+
// Retrieve parameters from the input request and make a consistency check.
// There are 4 types of input request:
// 1. DATA_DROPPED: Grib dropped into a View: MXSECT, DATA(), _CONTEXT(),...
@@ -302,8 +341,15 @@ bool HovToolkit::GetInputParameters( MvRequest& in )
// Retrieve the HovmoellerView request from the CartesianView
MvRequest hovRequest = this->GetAppView( viewRequest );
- // Consistency check
- //if ( X1 != X11 || Y1 != Y11 || X2 != X22 || Y2 != Y22 )
+ // Retrieve 'original' request from the data module
+ MvRequest modRequest = dataRequest_.getSubrequest("_ORIGINAL_REQUEST");
+ if ( !modRequest )
+ modRequest = in;
+
+ // Consistency check, only for non-default View request
+ if ( !((const char*)hovRequest("_DEFAULT") && (int)hovRequest("_DEFAULT") == 1) )
+ if ( !this->consistencyCheck(hovRequest, modRequest) )
+ return false;
// Retrieve parameters
if ( !this->GetInputInfo(hovRequest) )
@@ -653,7 +699,7 @@ bool HovToolkit::Initialiser()
void HovToolkit::NcWriteGlobalAttributes()
{
// Write main attributes
- netcdf_->addAttribute("_View","HOVMOELLERVIEW");
+ netcdf_->addAttribute("_View","MHOVMOELLERVIEW");
netcdf_->addAttribute("_FillValue",HMISSING_VALUE );
netcdf_->addAttribute("type", ApplicationType() );
diff --git a/src/Hovmoeller/HovToolkit.h b/src/Hovmoeller/HovToolkit.h
index d565e73..85118ee 100644
--- a/src/Hovmoeller/HovToolkit.h
+++ b/src/Hovmoeller/HovToolkit.h
@@ -56,8 +56,14 @@ public:
virtual bool GenerateData(MvRequest&);
virtual bool Initialiser();
- // Create output request
- virtual MvRequest CreateOutputRequest(const char* = 0);
+ // Create output request using information from the application
+ MvRequest CreateOutputRequest();
+
+ // Create output request using information from the request
+ MvRequest CreateOutputRequest( MvRequest& );
+
+ // Create View request
+ virtual MvRequest CreateViewRequest() = 0;
// Initialize Param Info structure
bool CreateParamInfo(MvRequest&);
@@ -129,6 +135,10 @@ public:
// Get application view
MvRequest GetAppView ( MvRequest& );
+ // Check if parameters between two requests are consistent
+ virtual bool consistencyCheck( MvRequest&, MvRequest& ) = 0;
+
+
protected:
bool swapAxes_; // swap default axes
@@ -144,6 +154,7 @@ protected:
string actionMode_; // "examine"/"save"/"execute"/...
MvNetCDF *netcdf_; // netcdf structure
MvRequest dataRequest_; // grib data
+ MvRequest origReq_; // original input request
// Variables related to Param info and values
double* xint_; // point values
diff --git a/src/Hovmoeller/Makefile.in b/src/Hovmoeller/Makefile.in
index d802d3d..8d414f2 100644
--- a/src/Hovmoeller/Makefile.in
+++ b/src/Hovmoeller/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/Hovmoeller
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -141,6 +142,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -164,6 +167,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Hovmoeller/ObjectSpec.Hovmoeller b/src/Hovmoeller/ObjectSpec.Hovmoeller
index dab5c06..b7161eb 100644
--- a/src/Hovmoeller/ObjectSpec.Hovmoeller
+++ b/src/Hovmoeller/ObjectSpec.Hovmoeller
@@ -56,11 +56,12 @@ object,
state,
class = MHOVMOELLERDATA_FAMILY,
- action = visualise/hardcopy/prepare/drop,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
service = Hovmoeller
state,
class = AREA_HOVM/LINE_HOVM/VERTICAL_HOVM/EXPAND_HOVM,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
output_class = NETCDF,
service = Hovmoeller
@@ -155,11 +156,12 @@ object,
state,
class = HOVMOELLERDATA_FAMILY,
- action = visualise/hardcopy/prepare/drop,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
service = Hovmoeller
state,
class = AREA_HOV/LINE_HOV/HEIGHT_HOV/EXPAND_HOV,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
output_class = NETCDF,
service = Hovmoeller
diff --git a/src/KML/Makefile.in b/src/KML/Makefile.in
index ab58512..817bf23 100644
--- a/src/KML/Makefile.in
+++ b/src/KML/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/KML
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -120,6 +121,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -143,6 +146,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/KML/ObjectSpec.GeoToKML b/src/KML/ObjectSpec.GeoToKML
index 503ef3a..4205b28 100644
--- a/src/KML/ObjectSpec.GeoToKML
+++ b/src/KML/ObjectSpec.GeoToKML
@@ -5,7 +5,7 @@
object,
class = GeoToKML,
- icon_box = Filters,
+ icon_box = Data processing,
can_be_created = True,
definition_file = '$METVIEW_DIR/share/metview/etc/GeoToKMLDef',
rules_file = '$METVIEW_DIR/share/metview/etc/GeoToKMLRules',
diff --git a/src/Macro/Makefile.in b/src/Macro/Makefile.in
index c253e69..174585b 100644
--- a/src/Macro/Makefile.in
+++ b/src/Macro/Makefile.in
@@ -47,6 +47,7 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in beauy.c \
macroy.c
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -177,6 +178,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -200,6 +203,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Macro/grib.cc b/src/Macro/grib.cc
index 7c22660..75c24d6 100644
--- a/src/Macro/grib.cc
+++ b/src/Macro/grib.cc
@@ -2914,6 +2914,7 @@ Value NearestGridpointFunction::Execute(int arity,Value *arg)
unset_value(r,"value"); // nil
set_value(r,"latitude", "%g", gp.loc_.latitude());
set_value(r,"longitude", "%g", gp.loc_.longitude());
+ set_value(r,"index", "%d", gp.index_+1); // +1 to make it 1-based
returnLocVal = Value(r);
}
else
@@ -2929,6 +2930,7 @@ Value NearestGridpointFunction::Execute(int arity,Value *arg)
set_value(r,"value", "%g", gp.value_);
set_value(r,"latitude", "%g", gp.loc_.latitude());
set_value(r,"longitude", "%g", gp.loc_.longitude());
+ set_value(r,"index", "%d", gp.index_+1); // +1 to make it 1-based
returnLocVal = Value(r);
}
else
diff --git a/src/Macro/netcdf.cc b/src/Macro/netcdf.cc
index 295c8ff..d2e5b25 100644
--- a/src/Macro/netcdf.cc
+++ b/src/Macro/netcdf.cc
@@ -633,6 +633,51 @@ int NumCdfBinOp::ValidArguments(int arity,Value *arg)
}
+///// function(NetCDF)
+class CdfUniOp : public Function
+{
+ uniproc F_;
+
+public:
+ CdfUniOp (char *n,uniproc f) : Function(n,1,tnetcdf) { F_ = f; }
+ virtual Value Execute(int arity,Value *arg);
+};
+
+Value CdfUniOp::Execute(int,Value *arg)
+{
+ CNetCDF *a;
+
+ arg[0].GetValue(a);
+
+ const char *newName = marstmp();
+ copyfile(a->GetFileName(), newName);
+ CNetCDF *b = new CNetCDF(newName,1,'u');
+ b->Current(a->Current());
+
+ // Get the variables
+ MvNcVar *aVar = a->GetVar();
+ MvNcVar *bVar = b->GetVar();
+
+ vector<double> aValues;
+ aVar->get(aValues,aVar->edges() );
+
+ double *bValues = new double[aValues.size()];
+
+ for ( unsigned int i = 0; i < aValues.size(); i++ )
+ {
+ bValues[i] = F_(aValues[i]);
+ }
+
+ bVar->put(bValues,bVar->edges());
+ delete [] bValues;
+
+ b->Flush();
+
+ return Value(b);
+}
+
+
+
static void install(Context *c)
{
@@ -659,6 +704,10 @@ static void install(Context *c)
c->AddFunction(new CdfCdfBinOp(MulOps[i].symb,MulOps[i].proc ));
for(i=0;MulOps[i].symb;i++)
c->AddFunction(new NumCdfBinOp(MulOps[i].symb,MulOps[i].proc ));
+
+ // Unary operations
+ for(i=0;UniOps[i].symb;i++)
+ c->AddFunction(new CdfUniOp(UniOps[i].symb,UniOps[i].proc ));
}
static Linkage linkage(install);
diff --git a/src/MacroEditor/MacroEdit.cc b/src/MacroEditor/MacroEdit.cc
index 3e9235a..53037dc 100644
--- a/src/MacroEditor/MacroEdit.cc
+++ b/src/MacroEditor/MacroEdit.cc
@@ -2088,7 +2088,17 @@ void MacroEdit::stop(void)
void MacroEdit::monitor(void)
{
MvRequest r;
- MvApplication::callService("mvmon", r, NULL);
+
+ // the process monitor service depends on which desktop GUI we're using
+ char *desktop=getenv("MV_DESKTOP_NAME");
+ if(desktop != 0 && !strcmp(desktop, "MetviewUI"))
+ {
+ MvApplication::callService("mvmon", r, NULL); // Motif-based monitor
+ }
+ else
+ {
+ MvApplication::callService("MvMonitor", r, NULL); //Qt-based monitor
+ }
}
diff --git a/src/MacroEditor/Makefile.in b/src/MacroEditor/Makefile.in
index bc9b719..4e14f68 100644
--- a/src/MacroEditor/Makefile.in
+++ b/src/MacroEditor/Makefile.in
@@ -76,6 +76,7 @@ bin_PROGRAMS = bin/MacroEditor$(EXEEXT)
subdir = src/MacroEditor
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -182,6 +183,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -205,6 +208,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/MacroEditor/mvplaintextedit.cc b/src/MacroEditor/mvplaintextedit.cc
index 19c64b2..815c746 100644
--- a/src/MacroEditor/mvplaintextedit.cc
+++ b/src/MacroEditor/mvplaintextedit.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -41,6 +41,8 @@ MvPlainTextEdit::MvPlainTextEdit(QWidget * parent) :
updateLineNumberAreaWidth(0);
setAcceptDrops(true);
+
+ setProperty("macro","true");
}
diff --git a/src/MagML/Makefile.in b/src/MagML/Makefile.in
index ebb341a..e4768d3 100644
--- a/src/MagML/Makefile.in
+++ b/src/MagML/Makefile.in
@@ -77,6 +77,7 @@ bin_PROGRAMS = bin/MagML$(EXEEXT)
subdir = src/MagML
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -159,6 +160,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -182,6 +185,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Makefile.am b/src/Makefile.am
index 65fffa6..ec5aa74 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -83,15 +83,15 @@ SUBDIRS = libMars libUtil libMetview libMvNetCDF libFTimeUtil \
Datacoverage Divrot Ecfile Event ExamineManager Flextra \
GribVectors Hovmoeller KML \
${MV_INT} ${MV_MARS_ECREGRID_DIR} \
- Macro MvApp ObsFilter Percentile PM_Tephigram PottF Relhum \
- Rttov Scm StdAppManager Velstr XSection \
+ Macro MvApp ObsFilter Percentile PottF Relhum \
+ Rttov Scm Spectra StdAppManager Thermo Vapor Velstr XSection \
${MV_QT_DIR} ${MV_GUI_DIR} ${MV_MAGICS_DIR} \
${MV_ODB_DIR} ${MV_OBSTAT_DIR} \
${MV_EXTERNAL_DIR} ${MV_BUFR_DIR} ${MV_OPERA_DIR} \
${MV_MARS_CATALOG_DIR} ${MV_QTUI_DIR} \
${MV_INPE_DIR}
-# Curve Spectra TimeSeries TropCycTrack
+# Curve TimeSeries TropCycTrack
# ${MV_TRAJ_DIR}
check_SUBDIRS =
diff --git a/src/Makefile.in b/src/Makefile.in
index c25fe60..7e5a156 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -46,6 +46,7 @@ DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \
$(srcdir)/metview_config.h.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -101,14 +102,14 @@ CTAGS = ctags
DIST_SUBDIRS = libMars libUtil libMetview libMvNetCDF libFTimeUtil \
Datacoverage Divrot Ecfile Event ExamineManager Flextra \
GribVectors Hovmoeller KML libMars-ecregrid Macro MvApp \
- ObsFilter Percentile PM_Tephigram PottF Relhum Rttov Scm \
- StdAppManager Velstr XSection libMvQtGui libMvQtUtil \
- GeopExaminer GribExaminer MacroEditor NcExaminer OgcClient \
- FlextraExaminer ScmEditor images Desktop libMvMotif MetviewUI \
- Stations VisTools WebAccess DebugTools AppMod uPlot MagML \
- Reprojection Meteogram Odb OdbExaminer Obstat ObstatCurveTool \
- ObstatScatterTool BufrExaminer OperaRadar MarsCatalog \
- CptecAccess
+ ObsFilter Percentile PottF Relhum Rttov Scm Spectra \
+ StdAppManager Thermo Vapor Velstr XSection libMvQtGui \
+ libMvQtUtil GeopExaminer GribExaminer MacroEditor NcExaminer \
+ OgcClient FlextraExaminer ScmEditor images Desktop libMvMotif \
+ MetviewUI Stations VisTools WebAccess DebugTools AppMod uPlot \
+ MagML Reprojection Meteogram Odb OdbExaminer Obstat \
+ ObstatCurveTool ObstatScatterTool BufrExaminer OperaRadar \
+ MarsCatalog CptecAccess
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -144,6 +145,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -167,6 +170,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -370,8 +374,8 @@ SUBDIRS = libMars libUtil libMetview libMvNetCDF libFTimeUtil \
Datacoverage Divrot Ecfile Event ExamineManager Flextra \
GribVectors Hovmoeller KML \
${MV_INT} ${MV_MARS_ECREGRID_DIR} \
- Macro MvApp ObsFilter Percentile PM_Tephigram PottF Relhum \
- Rttov Scm StdAppManager Velstr XSection \
+ Macro MvApp ObsFilter Percentile PottF Relhum \
+ Rttov Scm Spectra StdAppManager Thermo Vapor Velstr XSection \
${MV_QT_DIR} ${MV_GUI_DIR} ${MV_MAGICS_DIR} \
${MV_ODB_DIR} ${MV_OBSTAT_DIR} \
${MV_EXTERNAL_DIR} ${MV_BUFR_DIR} ${MV_OPERA_DIR} \
@@ -379,7 +383,7 @@ SUBDIRS = libMars libUtil libMetview libMvNetCDF libFTimeUtil \
${MV_INPE_DIR}
-# Curve Spectra TimeSeries TropCycTrack
+# Curve TimeSeries TropCycTrack
# ${MV_TRAJ_DIR}
check_SUBDIRS =
diff --git a/src/MarsCatalog/MARS_CATALOG.xpm b/src/MarsCatalog/MARS_CATALOG.xpm
deleted file mode 100644
index cf4ee6b..0000000
--- a/src/MarsCatalog/MARS_CATALOG.xpm
+++ /dev/null
@@ -1,758 +0,0 @@
-/* XPM */
-static char * MARS_CATALOG_xpm[] = {
-"31 32 723 2",
-" c #FFFFF8",
-". c #FFFFF1",
-"+ c #FFFFF2",
-"@ c #FEFFF1",
-"# c #FFFEF1",
-"$ c #FEFEF1",
-"% c #FFFFFA",
-"& c #FFFFF3",
-"* c #FCFDF1",
-"= c #FAFAEF",
-"- c #F6F6EB",
-"; c #F1F1E6",
-"> c #EDEDE2",
-", c #E9E9DD",
-"' c #E6E5D7",
-") c #F2F1E6",
-"! c #FFFFF9",
-"~ c #FFFFF7",
-"{ c #FFFFF5",
-"] c #FEFEF3",
-"^ c #FFFEF3",
-"/ c #FEFFF3",
-"( c #FEFEF4",
-"_ c #FEFFF5",
-": c #FFFEF4",
-"< c #FFFFF4",
-"[ c #DFDDD4",
-"} c #B7B8B4",
-"| c #91958F",
-"1 c #737270",
-"2 c #686765",
-"3 c #636260",
-"4 c #5E5B5C",
-"5 c #565853",
-"6 c #636050",
-"7 c #726A66",
-"8 c #8B8C8C",
-"9 c #C0BFBB",
-"0 c #F4F2F2",
-"a c #FFFFFF",
-"b c #FFFFFE",
-"c c #FDFFF9",
-"d c #FDFEFC",
-"e c #FFFEFA",
-"f c #FDFFFB",
-"g c #FEFFFA",
-"h c #FFFEF9",
-"i c #FDFDFA",
-"j c #FBFCE6",
-"k c #F8F7F0",
-"l c #FBF9F6",
-"m c #FDFFFC",
-"n c #D7D7CB",
-"o c #C7C6B3",
-"p c #DEDDD6",
-"q c #ABADAE",
-"r c #666469",
-"s c #626061",
-"t c #615F60",
-"u c #6D696D",
-"v c #585A57",
-"w c #65614E",
-"x c #605551",
-"y c #363839",
-"z c #393738",
-"A c #494446",
-"B c #828075",
-"C c #B4B5B3",
-"D c #F7F7F8",
-"E c #FFFEFF",
-"F c #FDFEFD",
-"G c #FEFEFE",
-"H c #FDFDFF",
-"I c #FEFCE9",
-"J c #E1CF89",
-"K c #CECAC4",
-"L c #D4D9C8",
-"M c #7D7C84",
-"N c #D1D1D0",
-"O c #FFFFFB",
-"P c #D8D8CD",
-"Q c #EEEEE1",
-"R c #C9C7B1",
-"S c #EFECE4",
-"T c #A8A7A7",
-"U c #787575",
-"V c #737172",
-"W c #7E7C7D",
-"X c #928E92",
-"Y c #6B6D67",
-"Z c #605C47",
-"` c #807770",
-" . c #757776",
-".. c #535154",
-"+. c #4B4844",
-"@. c #52533C",
-"#. c #2C2E27",
-"$. c #2C2D2E",
-"%. c #757264",
-"&. c #B7B4AA",
-"*. c #F3F6F6",
-"=. c #FEFEFD",
-"-. c #FCFEFF",
-";. c #F9F5EA",
-">. c #78613E",
-",. c #575258",
-"'. c #4B4B47",
-"). c #333432",
-"!. c #585858",
-"~. c #F7F7ED",
-"{. c #FEFEF0",
-"]. c #BBBBB2",
-"^. c #CECBB8",
-"/. c #EDEBE5",
-"(. c #C1C0C0",
-"_. c #8D8989",
-":. c #848081",
-"<. c #7D7B79",
-"[. c #7D7C7A",
-"}. c #696E60",
-"|. c #636049",
-"1. c #807871",
-"2. c #787A77",
-"3. c #6E6E6E",
-"4. c #4F4C44",
-"5. c #6D6B58",
-"6. c #6E6D69",
-"7. c #302F2F",
-"8. c #5E593C",
-"9. c #6E655C",
-"0. c #848785",
-"a. c #D1D0C0",
-"b. c #FFFEF7",
-"c. c #FDFBFC",
-"d. c #C8C4BA",
-"e. c #81807A",
-"f. c #585459",
-"g. c #5A5B59",
-"h. c #CDCDCC",
-"i. c #FFFFF6",
-"j. c #CECBB9",
-"k. c #EAE7E1",
-"l. c #C4C3C5",
-"m. c #8E898A",
-"n. c #787670",
-"o. c #5A5954",
-"p. c #797A75",
-"q. c #69705E",
-"r. c #67654D",
-"s. c #807971",
-"t. c #7A7B79",
-"u. c #656663",
-"v. c #46453A",
-"w. c #514F3E",
-"x. c #4C4B49",
-"y. c #4B4B49",
-"z. c #65613C",
-"A. c #7E7276",
-"B. c #D5D8D4",
-"C. c #F6F3D7",
-"D. c #FAF9F0",
-"E. c #ECECED",
-"F. c #797979",
-"G. c #444544",
-"H. c #989898",
-"I. c #FEFEF5",
-"J. c #FAFAED",
-"K. c #F1F1E5",
-"L. c #D1CEBB",
-"M. c #EBE8E2",
-"N. c #B3B2B4",
-"O. c #797677",
-"P. c #74746F",
-"Q. c #70736A",
-"R. c #7E8377",
-"S. c #666F5A",
-"T. c #5C5A43",
-"U. c #7F7971",
-"V. c #7B7D7A",
-"W. c #6B6D6A",
-"X. c #454338",
-"Y. c #42422B",
-"Z. c #40423D",
-"`. c #434542",
-" + c #6E6D48",
-".+ c #70696E",
-"++ c #C7CAC1",
-"@+ c #F7F1D6",
-"#+ c #FBF8F0",
-"$+ c #959596",
-"%+ c #2D2D2E",
-"&+ c #E2E2E3",
-"*+ c #FBFBEE",
-"=+ c #F3F3E8",
-"-+ c #D3D0BC",
-";+ c #E7E5DE",
-">+ c #C7C7C8",
-",+ c #A2A2A4",
-"'+ c #7F847D",
-")+ c #7A8170",
-"!+ c #666D5A",
-"~+ c #606756",
-"{+ c #65624C",
-"]+ c #857E76",
-"^+ c #7C7E7C",
-"/+ c #595A57",
-"(+ c #3A3931",
-"_+ c #454534",
-":+ c #4E4F4B",
-"<+ c #373A35",
-"[+ c #666640",
-"}+ c #655D5C",
-"|+ c #C6CBBF",
-"1+ c #F7F3D6",
-"2+ c #FBF9EE",
-"3+ c #F2F2F1",
-"4+ c #E6E7E5",
-"5+ c #7D7D78",
-"6+ c #605D51",
-"7+ c #EFEEE6",
-"8+ c #D2D0BB",
-"9+ c #E5E3DA",
-"0+ c #B9BCBA",
-"a+ c #858884",
-"b+ c #767D6D",
-"c+ c #4B533F",
-"d+ c #5B5F56",
-"e+ c #71756D",
-"f+ c #74705B",
-"g+ c #7D756D",
-"h+ c #7B7D7B",
-"i+ c #4F504C",
-"j+ c #30312C",
-"k+ c #393B35",
-"l+ c #51524D",
-"m+ c #4D4B40",
-"n+ c #636135",
-"o+ c #72705F",
-"p+ c #C8CDC7",
-"q+ c #F9F3E2",
-"r+ c #E0DFD4",
-"s+ c #EEEEEC",
-"t+ c #E1E2DD",
-"u+ c #949492",
-"v+ c #5A5851",
-"w+ c #615B47",
-"x+ c #5C594D",
-"y+ c #FDFDF0",
-"z+ c #D5D3BE",
-"A+ c #D1D0C7",
-"B+ c #C1C3C2",
-"C+ c #A1A29F",
-"D+ c #7E8275",
-"E+ c #575A4F",
-"F+ c #626161",
-"G+ c #6C6F6A",
-"H+ c #756F60",
-"I+ c #736B5F",
-"J+ c #6A6E66",
-"K+ c #5B5C58",
-"L+ c #3C3D36",
-"M+ c #333830",
-"N+ c #464943",
-"O+ c #514E42",
-"P+ c #6A6547",
-"Q+ c #7E7A83",
-"R+ c #BEC1BD",
-"S+ c #F4EDD7",
-"T+ c #CFCDC1",
-"U+ c #A6A6A5",
-"V+ c #9FA09A",
-"W+ c #888888",
-"X+ c #AAA9A9",
-"Y+ c #A6A4A1",
-"Z+ c #807F7C",
-"`+ c #FAFAF9",
-" @ c #FCFCEF",
-".@ c #C1C1B7",
-"+@ c #D6D3BF",
-"@@ c #CECDC5",
-"#@ c #E4E6E5",
-"$@ c #B6B5B6",
-"%@ c #999998",
-"&@ c #9C9C97",
-"*@ c #888786",
-"=@ c #888B88",
-"-@ c #837E71",
-";@ c #746D5F",
-">@ c #70736D",
-",@ c #7D7D7A",
-"'@ c #70706A",
-")@ c #5F5E53",
-"!@ c #62615F",
-"~@ c #7C7C7C",
-"{@ c #8D886E",
-"]@ c #ADA6A4",
-"^@ c #ADB1AB",
-"/@ c #B0AAA1",
-"(@ c #F3F2EB",
-"_@ c #D6D6D5",
-":@ c #8C8E89",
-"<@ c #DEDEDB",
-"[@ c #AAAAA9",
-"}@ c #949595",
-"|@ c #B4B5B5",
-"1@ c #B1B1B0",
-"2@ c #E8E8DC",
-"3@ c #777771",
-"4@ c #DAD7C6",
-"5@ c #E5E4DE",
-"6@ c #929192",
-"7@ c #757375",
-"8@ c #747373",
-"9@ c #7C7A7B",
-"0@ c #808485",
-"a@ c #6D6B59",
-"b@ c #686355",
-"c@ c #747678",
-"d@ c #797876",
-"e@ c #595650",
-"f@ c #62604A",
-"g@ c #757474",
-"h@ c #6F6F70",
-"i@ c #78714F",
-"j@ c #A69A9A",
-"k@ c #F2F5EE",
-"l@ c #CAC4B9",
-"m@ c #A09E9A",
-"n@ c #747474",
-"o@ c #E8E9E8",
-"p@ c #9C9C9D",
-"q@ c #C6C6C6",
-"r@ c #696968",
-"s@ c #E8E8DF",
-"t@ c #C3C3B9",
-"u@ c #DBD8C7",
-"v@ c #E1DFD9",
-"w@ c #A1A2A0",
-"x@ c #959491",
-"y@ c #807F7D",
-"z@ c #747270",
-"A@ c #6E7270",
-"B@ c #74715C",
-"C@ c #615C4C",
-"D@ c #727474",
-"E@ c #6A6A64",
-"F@ c #47443C",
-"G@ c #5C5B41",
-"H@ c #7D7C7B",
-"I@ c #666764",
-"J@ c #706A47",
-"K@ c #968C8E",
-"L@ c #FEFFF7",
-"M@ c #F1EDD2",
-"N@ c #E4E2DA",
-"O@ c #B8B8B8",
-"P@ c #D4D4D4",
-"Q@ c #B7B7B7",
-"R@ c #FCFCFC",
-"S@ c #CCCCCB",
-"T@ c #F3F3E9",
-"U@ c #DDDAC9",
-"V@ c #E0DED8",
-"W@ c #A9A8A7",
-"X@ c #868581",
-"Y@ c #6A6965",
-"Z@ c #595753",
-"`@ c #6D716C",
-" # c #76735C",
-".# c #625D4A",
-"+# c #717470",
-"@# c #696961",
-"## c #434136",
-"$# c #575639",
-"%# c #747470",
-"&# c #5E5F5A",
-"*# c #65623A",
-"=# c #8E8789",
-"-# c #F2ECD5",
-";# c #FAF8F0",
-"># c #DEDEDE",
-",# c #FDFDFD",
-"'# c #E0DBCC",
-")# c #9C9B9C",
-"!# c #82807E",
-"~# c #6E6E6B",
-"{# c #66685E",
-"]# c #6D756C",
-"^# c #717259",
-"/# c #5D5A45",
-"(# c #737772",
-"_# c #66695D",
-":# c #434337",
-"<# c #5A583F",
-"[# c #797972",
-"}# c #60625D",
-"|# c #6A6942",
-"1# c #95908F",
-"2# c #FFFFFC",
-"3# c #E8E3D7",
-"4# c #F4F3EE",
-"5# c #FAFAFA",
-"6# c #DBDBDB",
-"7# c #9E9E9E",
-"8# c #DCDCDC",
-"9# c #E0DCCD",
-"0# c #DDDBD4",
-"a# c #A9A7AC",
-"b# c #989798",
-"c# c #818579",
-"d# c #737965",
-"e# c #60675D",
-"f# c #706F5A",
-"g# c #696551",
-"h# c #757977",
-"i# c #6C7166",
-"j# c #48483F",
-"k# c #5A5844",
-"l# c #777870",
-"m# c #5F605E",
-"n# c #6B6944",
-"o# c #7D7976",
-"p# c #DDDFD8",
-"q# c #CFCBC3",
-"r# c #F3F3EF",
-"s# c #E1E1E1",
-"t# c #8F8F8F",
-"u# c #575757",
-"v# c #727272",
-"w# c #E2DED0",
-"x# c #E0DDD7",
-"y# c #B6B6B8",
-"z# c #959990",
-"A# c #737C63",
-"B# c #4F5843",
-"C# c #626560",
-"D# c #807B6A",
-"E# c #766F5F",
-"F# c #737578",
-"G# c #5F645F",
-"H# c #43423E",
-"I# c #504D3D",
-"J# c #3D3D37",
-"K# c #363838",
-"L# c #676542",
-"M# c #8F8A87",
-"N# c #CDCDC7",
-"O# c #DBD7CF",
-"P# c #F3F2EF",
-"Q# c #E5E5E5",
-"R# c #6A6A6A",
-"S# c #2D2D2D",
-"T# c #A1A1A1",
-"U# c #E0DECF",
-"V# c #A4A29A",
-"W# c #A7A9A9",
-"X# c #6E6D6D",
-"Y# c #5D5E56",
-"Z# c #585C4F",
-"`# c #3E4039",
-" $ c #4D4F4E",
-".$ c #5E584B",
-"+$ c #4A4134",
-"@$ c #292A2E",
-"#$ c #2D2F2E",
-"$$ c #2E2C2C",
-"%$ c #494737",
-"&$ c #555454",
-"*$ c #565757",
-"=$ c #656440",
-"-$ c #747071",
-";$ c #F0F3EB",
-">$ c #E3E0D6",
-",$ c #F2F2EE",
-"'$ c #BBBBBB",
-")$ c #FDFDFC",
-"!$ c #E3E2D6",
-"~$ c #D6D5CA",
-"{$ c #FDFEFF",
-"]$ c #D0CECE",
-"^$ c #ACA9AB",
-"/$ c #8F8D8F",
-"($ c #6D6A6B",
-"_$ c #4F4A3C",
-":$ c #5C5547",
-"<$ c #616262",
-"[$ c #6D6B69",
-"}$ c #454442",
-"|$ c #5A5A46",
-"1$ c #7D7B7E",
-"2$ c #646664",
-"3$ c #686643",
-"4$ c #7C7A7C",
-"5$ c #ECF0E9",
-"6$ c #E2E0D6",
-"7$ c #F2F2ED",
-"8$ c #BABABA",
-"9$ c #E4E3D7",
-"0$ c #D6D4CA",
-"a$ c #989696",
-"b$ c #716F70",
-"c$ c #7A7778",
-"d$ c #7D7E7F",
-"e$ c #6D675A",
-"f$ c #6B6356",
-"g$ c #747574",
-"h$ c #6F6E68",
-"i$ c #43433D",
-"j$ c #5F6049",
-"k$ c #7D7C7C",
-"l$ c #5F615C",
-"m$ c #65643E",
-"n$ c #716F71",
-"o$ c #EDF0E9",
-"p$ c #E2DFD5",
-"q$ c #B9B9B9",
-"r$ c #767676",
-"s$ c #E7E6D9",
-"t$ c #D2D1C6",
-"u$ c #ADABAB",
-"v$ c #9D9C9B",
-"w$ c #7E7D7C",
-"x$ c #706F6D",
-"y$ c #707372",
-"z$ c #726E5D",
-"A$ c #676150",
-"B$ c #6F716D",
-"C$ c #6B6B61",
-"D$ c #424339",
-"E$ c #5C5F44",
-"F$ c #5D605A",
-"G$ c #64633E",
-"H$ c #7A7578",
-"I$ c #EFF3EB",
-"J$ c #E2DFD6",
-"K$ c #6C6C6C",
-"L$ c #F6F6F6",
-"M$ c #EAE8DC",
-"N$ c #D4D3C9",
-"O$ c #B3B0AF",
-"P$ c #858482",
-"Q$ c #5F605B",
-"R$ c #4F5249",
-"S$ c #676F67",
-"T$ c #73735D",
-"U$ c #65634D",
-"V$ c #6E726E",
-"W$ c #67685E",
-"X$ c #404235",
-"Y$ c #5A5D3F",
-"Z$ c #777973",
-"`$ c #626662",
-" % c #646241",
-".% c #645C60",
-"+% c #C3C8C0",
-"@% c #D1D0C8",
-"#% c #F4F2EF",
-"$% c #A6A6A6",
-"%% c #505050",
-"&% c #F2F2F2",
-"*% c #F8F8EB",
-"=% c #C9C9BE",
-"-% c #EAE9DC",
-";% c #D0CFC4",
-">% c #A8A5A4",
-",% c #7F7E7B",
-"'% c #777972",
-")% c #6D7167",
-"!% c #6F786C",
-"~% c #6F6F59",
-"{% c #63604D",
-"]% c #727572",
-"^% c #66665C",
-"/% c #3E3F38",
-"(% c #5C5F46",
-"_% c #60615E",
-":% c #424543",
-"<% c #545233",
-"[% c #3F383B",
-"}% c #7E837A",
-"|% c #C9C7BF",
-"1% c #F5F4F1",
-"2% c #C8C8C8",
-"3% c #9F9F9F",
-"4% c #D8D8CC",
-"5% c #61615C",
-"6% c #ECEBDF",
-"7% c #CFCEC3",
-"8% c #B9B7B6",
-"9% c #B0AFAC",
-"0% c #82857C",
-"a% c #6C7164",
-"b% c #636C5E",
-"c% c #74745F",
-"d% c #6E6B5B",
-"e% c #6E716E",
-"f% c #5A5B53",
-"g% c #333431",
-"h% c #454532",
-"i% c #3B3C3B",
-"j% c #636666",
-"k% c #9A967A",
-"l% c #FCF8F8",
-"m% c #E2E0D8",
-"n% c #F2F1EE",
-"o% c #CDCECC",
-"p% c #A0A29D",
-"q% c #E3E3D7",
-"r% c #82827B",
-"s% c #ECEBDE",
-"t% c #D1D0C6",
-"u% c #9B989B",
-"v% c #797974",
-"w% c #6F7561",
-"x% c #4B5241",
-"y% c #5B6259",
-"z% c #736F67",
-"A% c #605A4D",
-"B% c #3B3B38",
-"C% c #212124",
-"D% c #545352",
-"E% c #7E7B69",
-"F% c #CDCCCB",
-"G% c #FDFEFE",
-"H% c #E2DCC1",
-"I% c #FDFCFB",
-"J% c #F9FAF5",
-"K% c #DEDCD4",
-"L% c #F1F1ED",
-"M% c #CCCCCE",
-"N% c #9F9EA5",
-"O% c #FCFBFC",
-"P% c #EBEBDF",
-"Q% c #86857B",
-"R% c #6D6E70",
-"S% c #4C4B4B",
-"T% c #464643",
-"U% c #3C3E36",
-"V% c #31322C",
-"W% c #2F3432",
-"X% c #3E3933",
-"Y% c #433E2F",
-"Z% c #585852",
-"`% c #C2C2C4",
-" & c #EFEFEA",
-".& c #B5B19E",
-"+& c #DCD5BC",
-"@& c #FBFAF9",
-"#& c #FBFBF6",
-"$& c #F1EEEA",
-"%& c #F9F9F7",
-"&& c #CBCDCB",
-"*& c #9DA195",
-"=& c #FCFDF4",
-"-& c #F0EFE2",
-";& c #CCCAC0",
-">& c #FBFBFA",
-",& c #E3E2DD",
-"'& c #BEBBB2",
-")& c #D0D3D0",
-"!& c #C2BDB8",
-"~& c #B7B3A0",
-"{& c #E9EBE1",
-"]& c #BBB7A3",
-"^& c #DDD7BE",
-"/& c #FBFAFA",
-"(& c #FCFEF5",
-"_& c #FFFCFF",
-":& c #FEFFFE",
-"<& c #FBFFFB",
-"[& c #C9CBCC",
-"}& c #A79D9C",
-"|& c #FCF9F2",
-"1& c #F2F0E8",
-"2& c #CBCAB8",
-"3& c #F2F2EB",
-"4& c #DBDBCD",
-"5& c #FFFBF5",
-"6& c #C0BCA7",
-"7& c #FEFDFD",
-"8& c #BABBA5",
-"9& c #FCFAF0",
-"0& c #FEFEFB",
-"a& c #FFFDFF",
-"b& c #FAF5EB",
-"c& c #CFBC7F",
-"d& c #BAA030",
-"e& c #A8964F",
-"f& c #FDFBF4",
-"g& c #FEFFF6",
-"h& c #F4F2EC",
-"i& c #CBCAB3",
-"j& c #FFFEFE",
-"k& c #F7F8F3",
-"l& c #ECEDE4",
-"m& c #FDFFFD",
-"n& c #FBF8F1",
-"o& c #C0BBA7",
-"p& c #FFFFFD",
-"q& c #C6C9B9",
-"r& c #FEFEFF",
-"s& c #FEFDFC",
-"t& c #CEC6A1",
-"u& c #816B28",
-"v& c #735C1C",
-"w& c #91825E",
-"x& c #F0ECE8",
-"y& c #F5F2EC",
-"z& c #C7C6AF",
-"A& c #FCFEFD",
-"B& c #C0BAA7",
-"C& c #F6F6F3",
-"D& c #EAE9E3",
-"E& c #CECCC7",
-"F& c #C9CAC5",
-"G& c #EDEFE9",
-"H& c #F8F7F4",
-"I& c #D9D9CD",
-"J& c #FCFEFC",
-"K& c #FCF8F3",
-"L& c #C0BAA8",
-"M& c #FFFDFE",
-"N& c #FDFCFD",
-" . + + + + + + + + . @ @ . . @ # . @ . . $ . . . @ . . $ + + ",
-"% & * = - ; > , ' ) ! ~ { & ] ^ / / & ] ] + ( _ ( : + ] + + < ",
-"[ } | 1 2 3 4 5 6 7 8 9 0 a a b c d e f g h i j k l m b ( & n ",
-"o p q r s t u v w x y z A B C D a a E F G H I J K L M N O P Q ",
-"R S T U V W X Y Z ` ...+. at .#.$.%.&.*.F =.-.;.>.,.'.).!.~.{.].",
-"^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.F c.d.e.f.g.h.% . i.",
-"j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.a a E.F.G.H.a I.J.K.",
-"L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++ at +#+a a a $+%+&+b { *+=+",
-"-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+G 3+4+5+6+7+=.{ . + ",
-"8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+a ( + y+",
-"z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+{ @.@",
-"+@@@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1 at a 2 at 3@",
-"4 at 5@a 6 at 7@8 at 9@0 at a@b at c@d at e@f at g@h at i@j at k@l at m@n at o@a h.p at q@r at s@+ t@",
-"u at v@a w at x@y at z@A at B@C at D@E at F@G at H@I at J@K at L@M at N@O at a a P at Q@R at S@T at + $ ",
-"U at V@a W at X@Y at Z@`@ #.#+#@###$#%#&#*#=#g -#;#a G a >#q@,#a { $ + ",
-"'#V at a )#!#~#{#]#^#/#(#_#:#<#[#}#|#1#2#3#4#a G 5#6#7#8#a ( . + ",
-"9#0#a a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#a a s#t#u#v#a ( . + ",
-"w#x#a y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#a a Q#R#S#T#a { . + ",
-"U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$;$>$,$a G a '$R#,#)$I.. + ",
-"!$~${$]$^$/$($*$_$:$<$[$}$|$1$2$3$4$5$6$7$a G a 8$n@,#=.{ $ + ",
-"9$0$a a$b$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$,$a G a q$r$G =.{ . + ",
-"s$t$a u$v$w$x$y$z$A$B$C$D$E$, at F$G$H$I$J$,$a G a Q at K$L$=.{ + i.",
-"M$N$a O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%a G a $%%%&%=.{ *%=%",
-"-%;%a >%,%'%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%a G a 2%3%,#=. 4%5%",
-"6%7%a 8%9%0%a%b%c%d%e%f%g%h%i%j%k%l%b m%n%a G a o%p%d =.~ q%r%",
-"s%t%a u%v%w%x%y%z%A%B%C%D%E%F%G%H%I%J%K%L%a G a M%N%O%=.{ y+P%",
-"s%Q%R%S%T%U%V%W%X%Y%Z%`% &.&a a +&@&#&$&%&a G a &&*&=&=.{ . + ",
-"-&;&a G >&,&'&)&!&~&{&a 2#]&a a ^&/&(&_&E :&G <&[&}&|&)$I.. + ",
-"1&2&a =.a 3&4&a 5&6&a 7&O 8&b a 9&=.0&a&b E G b&c&d&e&f&g&. + ",
-"h&i&a j&G k&l&m&n&o&a a p&q&b r&b a a :&E a s&t&u&v&w&x&~ . + ",
-"y&z&a j&r&b 2#A&n&B&a a b C&b a b b a a a a G D&E&F&G&E I.. + ",
-"H&I&b j&a a 2#J&K&L&a a r&a r&b a a a a a a G ,#,#M&N&=.< $ + "};
diff --git a/src/MarsCatalog/Makefile.am b/src/MarsCatalog/Makefile.am
index 049e67d..3e6db26 100644
--- a/src/MarsCatalog/Makefile.am
+++ b/src/MarsCatalog/Makefile.am
@@ -1,8 +1,8 @@
include $(top_srcdir)/aux_build/autotroll.mk
-bin_PROGRAMS = bin/MarsCatalog
+bin_PROGRAMS = bin/MarsCatalogue
-bin_MarsCatalog_SOURCES = MvMain.cc \
+bin_MarsCatalogue_SOURCES = MvMain.cc \
MvQMarsBrowser.cc \
MvQMarsCatalog.cc \
json_spirit_reader.cpp \
@@ -16,30 +16,30 @@ bin_MarsCatalog_SOURCES = MvMain.cc \
json_spirit_writer.h \
mars.qrc
-nodist_bin_MarsCatalog_SOURCES = MvQMarsBrowser.moc.cpp MvQMarsCatalog.moc.cpp mars.qrc.cpp
+nodist_bin_MarsCatalogue_SOURCES = MvQMarsBrowser.moc.cpp MvQMarsCatalog.moc.cpp mars.qrc.cpp
-bin_MarsCatalog_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
-bin_MarsCatalog_LDFLAGS = $(QT_LDFLAGS) $(LDFLAGS) -L../../lib
-bin_MarsCatalog_LDADD = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(QT_LIBS)
-bin_MarsCatalog_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
+bin_MarsCatalogue_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
+bin_MarsCatalogue_LDFLAGS = $(QT_LDFLAGS) $(LDFLAGS) -L../../lib
+bin_MarsCatalogue_LDADD = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(QT_LIBS)
+bin_MarsCatalogue_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
AM_LDFLAGS = $(QT_LDFLAGS)
# AM_LDFLAGS is placed before $(LDFLAGS) when linking
-sharedir = $(datadir)/metview/etc
-local_sharedir = ../../share/metview/etc
-local_iconsdir = ../../share/metview/icons
-share_DATA = $(local_sharedir)/ObjectSpec.MarsCatalog
+#sharedir = $(datadir)/metview/etc
+#local_sharedir = ../../share/metview/etc
+#local_iconsdir = ../../share/metview/icons
+#share_DATA = $(local_sharedir)/ObjectSpec.MarsCatalog
# to build the share data, we take the destination files and
# remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
# $< is the 'stripped' version and $@ is the 'full' version
-$(share_DATA): $(local_sharedir)/%: %
- ${INSTALL} $< $(local_sharedir)
+#$(share_DATA): $(local_sharedir)/%: %
+# ${INSTALL} $< $(local_sharedir)
-icons = $(local_iconsdir)/MARS_CATALOG.xpm
+#icons = $(local_iconsdir)/MARS_CATALOG.xpm
-$(icons): $(local_iconsdir)/%: %
- ${INSTALL} $< $(local_iconsdir)
+#$(icons): $(local_iconsdir)/%: %
+# ${INSTALL} $< $(local_iconsdir)
#Copy the webmars python interface to bin
webmars:
@@ -49,7 +49,7 @@ CLEANFILES = $(share_DATA) $(icons)
BUILT_SOURCES = bin $(icons) webmars MvQMarsBrowser.moc.cpp MvQMarsCatalog.moc.cpp mars.qrc.cpp
-EXTRA_DIST = MARS_CATALOG.xpm ObjectSpec.MarsCatalog mars.qrc
+EXTRA_DIST = mars.qrc
# Internally at ECMWF, WebMars is a relative link to an external directory,
diff --git a/src/MarsCatalog/Makefile.in b/src/MarsCatalog/Makefile.in
index 5762887..9075553 100644
--- a/src/MarsCatalog/Makefile.in
+++ b/src/MarsCatalog/Makefile.in
@@ -50,7 +50,6 @@
# without this exception; this exception also makes it possible to release a
# modified version which carries forward this exception.
-
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -73,10 +72,11 @@ host_triplet = @host@
target_triplet = @target@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/aux_build/autotroll.mk
-bin_PROGRAMS = bin/MarsCatalog$(EXEEXT)
+bin_PROGRAMS = bin/MarsCatalogue$(EXEEXT)
subdir = src/MarsCatalog
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -84,27 +84,27 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/src/metview_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"
+am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
-am_bin_MarsCatalog_OBJECTS = bin_MarsCatalog-MvMain.$(OBJEXT) \
- bin_MarsCatalog-MvQMarsBrowser.$(OBJEXT) \
- bin_MarsCatalog-MvQMarsCatalog.$(OBJEXT) \
- bin_MarsCatalog-json_spirit_reader.$(OBJEXT) \
- bin_MarsCatalog-json_spirit_value.$(OBJEXT) \
- bin_MarsCatalog-json_spirit_writer.$(OBJEXT)
-nodist_bin_MarsCatalog_OBJECTS = \
- bin_MarsCatalog-MvQMarsBrowser.moc.$(OBJEXT) \
- bin_MarsCatalog-MvQMarsCatalog.moc.$(OBJEXT) \
- bin_MarsCatalog-mars.qrc.$(OBJEXT)
-bin_MarsCatalog_OBJECTS = $(am_bin_MarsCatalog_OBJECTS) \
- $(nodist_bin_MarsCatalog_OBJECTS)
+am_bin_MarsCatalogue_OBJECTS = bin_MarsCatalogue-MvMain.$(OBJEXT) \
+ bin_MarsCatalogue-MvQMarsBrowser.$(OBJEXT) \
+ bin_MarsCatalogue-MvQMarsCatalog.$(OBJEXT) \
+ bin_MarsCatalogue-json_spirit_reader.$(OBJEXT) \
+ bin_MarsCatalogue-json_spirit_value.$(OBJEXT) \
+ bin_MarsCatalogue-json_spirit_writer.$(OBJEXT)
+nodist_bin_MarsCatalogue_OBJECTS = \
+ bin_MarsCatalogue-MvQMarsBrowser.moc.$(OBJEXT) \
+ bin_MarsCatalogue-MvQMarsCatalog.moc.$(OBJEXT) \
+ bin_MarsCatalogue-mars.qrc.$(OBJEXT)
+bin_MarsCatalogue_OBJECTS = $(am_bin_MarsCatalogue_OBJECTS) \
+ $(nodist_bin_MarsCatalogue_OBJECTS)
am__DEPENDENCIES_1 =
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
am__v_lt_0 = --silent
-bin_MarsCatalog_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+bin_MarsCatalogue_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
- $(AM_CXXFLAGS) $(CXXFLAGS) $(bin_MarsCatalog_LDFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS) $(bin_MarsCatalogue_LDFLAGS) \
$(LDFLAGS) -o $@
am__dirstamp = $(am__leading_dot)dirstamp
DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
@@ -149,30 +149,9 @@ am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = $(bin_MarsCatalog_SOURCES) $(nodist_bin_MarsCatalog_SOURCES)
-DIST_SOURCES = $(bin_MarsCatalog_SOURCES)
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-DATA = $(share_DATA)
+SOURCES = $(bin_MarsCatalogue_SOURCES) \
+ $(nodist_bin_MarsCatalogue_SOURCES)
+DIST_SOURCES = $(bin_MarsCatalogue_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -185,6 +164,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -208,6 +189,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -390,7 +372,7 @@ SUFFIXES = .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp \
.qrc .qrc.cpp .qrc.cc .qrc.cxx .qrc.C
DISTCLEANFILES = $(BUILT_SOURCES)
-bin_MarsCatalog_SOURCES = MvMain.cc \
+bin_MarsCatalogue_SOURCES = MvMain.cc \
MvQMarsBrowser.cc \
MvQMarsCatalog.cc \
json_spirit_reader.cpp \
@@ -404,21 +386,15 @@ bin_MarsCatalog_SOURCES = MvMain.cc \
json_spirit_writer.h \
mars.qrc
-nodist_bin_MarsCatalog_SOURCES = MvQMarsBrowser.moc.cpp MvQMarsCatalog.moc.cpp mars.qrc.cpp
-bin_MarsCatalog_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
-bin_MarsCatalog_LDFLAGS = $(QT_LDFLAGS) $(LDFLAGS) -L../../lib
-bin_MarsCatalog_LDADD = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(QT_LIBS)
-bin_MarsCatalog_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
+nodist_bin_MarsCatalogue_SOURCES = MvQMarsBrowser.moc.cpp MvQMarsCatalog.moc.cpp mars.qrc.cpp
+bin_MarsCatalogue_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) -I../libMvQtGui -I../libMvQtUtil
+bin_MarsCatalogue_LDFLAGS = $(QT_LDFLAGS) $(LDFLAGS) -L../../lib
+bin_MarsCatalogue_LDADD = $(LDADD) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(QT_LIBS)
+bin_MarsCatalogue_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
AM_LDFLAGS = $(QT_LDFLAGS)
-# AM_LDFLAGS is placed before $(LDFLAGS) when linking
-sharedir = $(datadir)/metview/etc
-local_sharedir = ../../share/metview/etc
-local_iconsdir = ../../share/metview/icons
-share_DATA = $(local_sharedir)/ObjectSpec.MarsCatalog
-icons = $(local_iconsdir)/MARS_CATALOG.xpm
CLEANFILES = $(share_DATA) $(icons)
BUILT_SOURCES = bin $(icons) webmars MvQMarsBrowser.moc.cpp MvQMarsCatalog.moc.cpp mars.qrc.cpp
-EXTRA_DIST = MARS_CATALOG.xpm ObjectSpec.MarsCatalog mars.qrc
+EXTRA_DIST = mars.qrc
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -500,9 +476,9 @@ clean-binPROGRAMS:
bin/$(am__dirstamp):
@$(MKDIR_P) bin
@: > bin/$(am__dirstamp)
-bin/MarsCatalog$(EXEEXT): $(bin_MarsCatalog_OBJECTS) $(bin_MarsCatalog_DEPENDENCIES) bin/$(am__dirstamp)
- @rm -f bin/MarsCatalog$(EXEEXT)
- $(AM_V_CXXLD)$(bin_MarsCatalog_LINK) $(bin_MarsCatalog_OBJECTS) $(bin_MarsCatalog_LDADD) $(LIBS)
+bin/MarsCatalogue$(EXEEXT): $(bin_MarsCatalogue_OBJECTS) $(bin_MarsCatalogue_DEPENDENCIES) bin/$(am__dirstamp)
+ @rm -f bin/MarsCatalogue$(EXEEXT)
+ $(AM_V_CXXLD)$(bin_MarsCatalogue_LINK) $(bin_MarsCatalogue_OBJECTS) $(bin_MarsCatalogue_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -510,15 +486,15 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalog-MvMain.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.moc.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.moc.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalog-json_spirit_reader.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalog-json_spirit_value.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalog-json_spirit_writer.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalog-mars.qrc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalogue-MvMain.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalogue-json_spirit_reader.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalogue-json_spirit_value.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalogue-json_spirit_writer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_MarsCatalogue-mars.qrc.Po at am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -544,149 +520,149 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-bin_MarsCatalog-MvMain.o: MvMain.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvMain.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvMain.Tpo -c -o bin_MarsCatalog-MvMain.o `test -f 'MvMain.cc' || echo '$(srcdir)/'`MvMain.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvMain.Tpo $(DEPDIR)/bin_MarsCatalog-MvMain.Po
+bin_MarsCatalogue-MvMain.o: MvMain.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvMain.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvMain.Tpo -c -o bin_MarsCatalogue-MvMain.o `test -f 'MvMain.cc' || echo '$(srcdir)/'`MvMain.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvMain.Tpo $(DEPDIR)/bin_MarsCatalogue-MvMain.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvMain.cc' object='bin_MarsCatalog-MvMain.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvMain.cc' object='bin_MarsCatalogue-MvMain.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvMain.o `test -f 'MvMain.cc' || echo '$(srcdir)/'`MvMain.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvMain.o `test -f 'MvMain.cc' || echo '$(srcdir)/'`MvMain.cc
-bin_MarsCatalog-MvMain.obj: MvMain.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvMain.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvMain.Tpo -c -o bin_MarsCatalog-MvMain.obj `if test -f 'MvMain.cc'; then $(CYGPATH_W) 'MvMain.cc'; else $(CYGPATH_W) '$(srcdir)/MvMain.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvMain.Tpo $(DEPDIR)/bin_MarsCatalog-MvMain.Po
+bin_MarsCatalogue-MvMain.obj: MvMain.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvMain.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvMain.Tpo -c -o bin_MarsCatalogue-MvMain.obj `if test -f 'MvMain.cc'; then $(CYGPATH_W) 'MvMain.cc'; else $(CYGPATH_W) '$(srcdir)/MvMain.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvMain.Tpo $(DEPDIR)/bin_MarsCatalogue-MvMain.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvMain.cc' object='bin_MarsCatalog-MvMain.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvMain.cc' object='bin_MarsCatalogue-MvMain.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvMain.obj `if test -f 'MvMain.cc'; then $(CYGPATH_W) 'MvMain.cc'; else $(CYGPATH_W) '$(srcdir)/MvMain.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvMain.obj `if test -f 'MvMain.cc'; then $(CYGPATH_W) 'MvMain.cc'; else $(CYGPATH_W) '$(srcdir)/MvMain.cc'; fi`
-bin_MarsCatalog-MvQMarsBrowser.o: MvQMarsBrowser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvQMarsBrowser.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.Tpo -c -o bin_MarsCatalog-MvQMarsBrowser.o `test -f 'MvQMarsBrowser.cc' || echo '$(srcdir)/'`MvQMarsBrowser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.Tpo $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.Po
+bin_MarsCatalogue-MvQMarsBrowser.o: MvQMarsBrowser.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvQMarsBrowser.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.Tpo -c -o bin_MarsCatalogue-MvQMarsBrowser.o `test -f 'MvQMarsBrowser.cc' || echo '$(srcdir)/'`MvQMarsBrowser.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.Tpo $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsBrowser.cc' object='bin_MarsCatalog-MvQMarsBrowser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsBrowser.cc' object='bin_MarsCatalogue-MvQMarsBrowser.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvQMarsBrowser.o `test -f 'MvQMarsBrowser.cc' || echo '$(srcdir)/'`MvQMarsBrowser.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvQMarsBrowser.o `test -f 'MvQMarsBrowser.cc' || echo '$(srcdir)/'`MvQMarsBrowser.cc
-bin_MarsCatalog-MvQMarsBrowser.obj: MvQMarsBrowser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvQMarsBrowser.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.Tpo -c -o bin_MarsCatalog-MvQMarsBrowser.obj `if test -f 'MvQMarsBrowser.cc'; then $(CYGPATH_W) 'MvQMarsBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMarsBrowser.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.Tpo $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.Po
+bin_MarsCatalogue-MvQMarsBrowser.obj: MvQMarsBrowser.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvQMarsBrowser.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.Tpo -c -o bin_MarsCatalogue-MvQMarsBrowser.obj `if test -f 'MvQMarsBrowser.cc'; then $(CYGPATH_W) 'MvQMarsBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMarsBrowser.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.Tpo $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsBrowser.cc' object='bin_MarsCatalog-MvQMarsBrowser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsBrowser.cc' object='bin_MarsCatalogue-MvQMarsBrowser.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvQMarsBrowser.obj `if test -f 'MvQMarsBrowser.cc'; then $(CYGPATH_W) 'MvQMarsBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMarsBrowser.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvQMarsBrowser.obj `if test -f 'MvQMarsBrowser.cc'; then $(CYGPATH_W) 'MvQMarsBrowser.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMarsBrowser.cc'; fi`
-bin_MarsCatalog-MvQMarsCatalog.o: MvQMarsCatalog.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvQMarsCatalog.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.Tpo -c -o bin_MarsCatalog-MvQMarsCatalog.o `test -f 'MvQMarsCatalog.cc' || echo '$(srcdir)/'`MvQMarsCatalog.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.Tpo $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.Po
+bin_MarsCatalogue-MvQMarsCatalog.o: MvQMarsCatalog.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvQMarsCatalog.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.Tpo -c -o bin_MarsCatalogue-MvQMarsCatalog.o `test -f 'MvQMarsCatalog.cc' || echo '$(srcdir)/'`MvQMarsCatalog.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.Tpo $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsCatalog.cc' object='bin_MarsCatalog-MvQMarsCatalog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsCatalog.cc' object='bin_MarsCatalogue-MvQMarsCatalog.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvQMarsCatalog.o `test -f 'MvQMarsCatalog.cc' || echo '$(srcdir)/'`MvQMarsCatalog.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvQMarsCatalog.o `test -f 'MvQMarsCatalog.cc' || echo '$(srcdir)/'`MvQMarsCatalog.cc
-bin_MarsCatalog-MvQMarsCatalog.obj: MvQMarsCatalog.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvQMarsCatalog.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.Tpo -c -o bin_MarsCatalog-MvQMarsCatalog.obj `if test -f 'MvQMarsCatalog.cc'; then $(CYGPATH_W) 'MvQMarsCatalog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMarsCatalog.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.Tpo $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.Po
+bin_MarsCatalogue-MvQMarsCatalog.obj: MvQMarsCatalog.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvQMarsCatalog.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.Tpo -c -o bin_MarsCatalogue-MvQMarsCatalog.obj `if test -f 'MvQMarsCatalog.cc'; then $(CYGPATH_W) 'MvQMarsCatalog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMarsCatalog.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.Tpo $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsCatalog.cc' object='bin_MarsCatalog-MvQMarsCatalog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsCatalog.cc' object='bin_MarsCatalogue-MvQMarsCatalog.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvQMarsCatalog.obj `if test -f 'MvQMarsCatalog.cc'; then $(CYGPATH_W) 'MvQMarsCatalog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMarsCatalog.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvQMarsCatalog.obj `if test -f 'MvQMarsCatalog.cc'; then $(CYGPATH_W) 'MvQMarsCatalog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQMarsCatalog.cc'; fi`
-bin_MarsCatalog-json_spirit_reader.o: json_spirit_reader.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-json_spirit_reader.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-json_spirit_reader.Tpo -c -o bin_MarsCatalog-json_spirit_reader.o `test -f 'json_spirit_reader.cpp' || echo '$(srcdir)/'`json_spirit_reader.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-json_spirit_reader.Tpo $(DEPDIR)/bin_MarsCatalog-json_spirit_reader.Po
+bin_MarsCatalogue-json_spirit_reader.o: json_spirit_reader.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-json_spirit_reader.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-json_spirit_reader.Tpo -c -o bin_MarsCatalogue-json_spirit_reader.o `test -f 'json_spirit_reader.cpp' || echo '$(srcdir)/'`json_spirit_reader.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-json_spirit_reader.Tpo $(DEPDIR)/bin_MarsCatalogue-json_spirit_reader.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_reader.cpp' object='bin_MarsCatalog-json_spirit_reader.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_reader.cpp' object='bin_MarsCatalogue-json_spirit_reader.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-json_spirit_reader.o `test -f 'json_spirit_reader.cpp' || echo '$(srcdir)/'`json_spirit_reader.cpp
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-json_spirit_reader.o `test -f 'json_spirit_reader.cpp' || echo '$(srcdir)/'`json_spirit_reader.cpp
-bin_MarsCatalog-json_spirit_reader.obj: json_spirit_reader.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-json_spirit_reader.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-json_spirit_reader.Tpo -c -o bin_MarsCatalog-json_spirit_reader.obj `if test -f 'json_spirit_reader.cpp'; then $(CYGPATH_W) 'json_spirit_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_reader.cpp'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-json_spirit_reader.Tpo $(DEPDIR)/bin_MarsCatalog-json_spirit_reader.Po
+bin_MarsCatalogue-json_spirit_reader.obj: json_spirit_reader.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-json_spirit_reader.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-json_spirit_reader.Tpo -c -o bin_MarsCatalogue-json_spirit_reader.obj `if test -f 'json_spirit_reader.cpp'; then $(CYGPATH_W) 'json_spirit_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_reader.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-json_spirit_reader.Tpo $(DEPDIR)/bin_MarsCatalogue-json_spirit_reader.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_reader.cpp' object='bin_MarsCatalog-json_spirit_reader.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_reader.cpp' object='bin_MarsCatalogue-json_spirit_reader.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-json_spirit_reader.obj `if test -f 'json_spirit_reader.cpp'; then $(CYGPATH_W) 'json_spirit_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_reader.cpp'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-json_spirit_reader.obj `if test -f 'json_spirit_reader.cpp'; then $(CYGPATH_W) 'json_spirit_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_reader.cpp'; fi`
-bin_MarsCatalog-json_spirit_value.o: json_spirit_value.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-json_spirit_value.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-json_spirit_value.Tpo -c -o bin_MarsCatalog-json_spirit_value.o `test -f 'json_spirit_value.cpp' || echo '$(srcdir)/'`json_spirit_value.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-json_spirit_value.Tpo $(DEPDIR)/bin_MarsCatalog-json_spirit_value.Po
+bin_MarsCatalogue-json_spirit_value.o: json_spirit_value.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-json_spirit_value.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-json_spirit_value.Tpo -c -o bin_MarsCatalogue-json_spirit_value.o `test -f 'json_spirit_value.cpp' || echo '$(srcdir)/'`json_spirit_value.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-json_spirit_value.Tpo $(DEPDIR)/bin_MarsCatalogue-json_spirit_value.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_value.cpp' object='bin_MarsCatalog-json_spirit_value.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_value.cpp' object='bin_MarsCatalogue-json_spirit_value.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-json_spirit_value.o `test -f 'json_spirit_value.cpp' || echo '$(srcdir)/'`json_spirit_value.cpp
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-json_spirit_value.o `test -f 'json_spirit_value.cpp' || echo '$(srcdir)/'`json_spirit_value.cpp
-bin_MarsCatalog-json_spirit_value.obj: json_spirit_value.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-json_spirit_value.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-json_spirit_value.Tpo -c -o bin_MarsCatalog-json_spirit_value.obj `if test -f 'json_spirit_value.cpp'; then $(CYGPATH_W) 'json_spirit_value.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_value.cpp'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-json_spirit_value.Tpo $(DEPDIR)/bin_MarsCatalog-json_spirit_value.Po
+bin_MarsCatalogue-json_spirit_value.obj: json_spirit_value.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-json_spirit_value.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-json_spirit_value.Tpo -c -o bin_MarsCatalogue-json_spirit_value.obj `if test -f 'json_spirit_value.cpp'; then $(CYGPATH_W) 'json_spirit_value.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_value.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-json_spirit_value.Tpo $(DEPDIR)/bin_MarsCatalogue-json_spirit_value.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_value.cpp' object='bin_MarsCatalog-json_spirit_value.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_value.cpp' object='bin_MarsCatalogue-json_spirit_value.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-json_spirit_value.obj `if test -f 'json_spirit_value.cpp'; then $(CYGPATH_W) 'json_spirit_value.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_value.cpp'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-json_spirit_value.obj `if test -f 'json_spirit_value.cpp'; then $(CYGPATH_W) 'json_spirit_value.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_value.cpp'; fi`
-bin_MarsCatalog-json_spirit_writer.o: json_spirit_writer.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-json_spirit_writer.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-json_spirit_writer.Tpo -c -o bin_MarsCatalog-json_spirit_writer.o `test -f 'json_spirit_writer.cpp' || echo '$(srcdir)/'`json_spirit_writer.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-json_spirit_writer.Tpo $(DEPDIR)/bin_MarsCatalog-json_spirit_writer.Po
+bin_MarsCatalogue-json_spirit_writer.o: json_spirit_writer.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-json_spirit_writer.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-json_spirit_writer.Tpo -c -o bin_MarsCatalogue-json_spirit_writer.o `test -f 'json_spirit_writer.cpp' || echo '$(srcdir)/'`json_spirit_writer.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-json_spirit_writer.Tpo $(DEPDIR)/bin_MarsCatalogue-json_spirit_writer.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_writer.cpp' object='bin_MarsCatalog-json_spirit_writer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_writer.cpp' object='bin_MarsCatalogue-json_spirit_writer.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-json_spirit_writer.o `test -f 'json_spirit_writer.cpp' || echo '$(srcdir)/'`json_spirit_writer.cpp
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-json_spirit_writer.o `test -f 'json_spirit_writer.cpp' || echo '$(srcdir)/'`json_spirit_writer.cpp
-bin_MarsCatalog-json_spirit_writer.obj: json_spirit_writer.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-json_spirit_writer.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-json_spirit_writer.Tpo -c -o bin_MarsCatalog-json_spirit_writer.obj `if test -f 'json_spirit_writer.cpp'; then $(CYGPATH_W) 'json_spirit_writer.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_writer.cpp'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-json_spirit_writer.Tpo $(DEPDIR)/bin_MarsCatalog-json_spirit_writer.Po
+bin_MarsCatalogue-json_spirit_writer.obj: json_spirit_writer.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-json_spirit_writer.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-json_spirit_writer.Tpo -c -o bin_MarsCatalogue-json_spirit_writer.obj `if test -f 'json_spirit_writer.cpp'; then $(CYGPATH_W) 'json_spirit_writer.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_writer.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-json_spirit_writer.Tpo $(DEPDIR)/bin_MarsCatalogue-json_spirit_writer.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_writer.cpp' object='bin_MarsCatalog-json_spirit_writer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='json_spirit_writer.cpp' object='bin_MarsCatalogue-json_spirit_writer.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-json_spirit_writer.obj `if test -f 'json_spirit_writer.cpp'; then $(CYGPATH_W) 'json_spirit_writer.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_writer.cpp'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-json_spirit_writer.obj `if test -f 'json_spirit_writer.cpp'; then $(CYGPATH_W) 'json_spirit_writer.cpp'; else $(CYGPATH_W) '$(srcdir)/json_spirit_writer.cpp'; fi`
-bin_MarsCatalog-MvQMarsBrowser.moc.o: MvQMarsBrowser.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvQMarsBrowser.moc.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.moc.Tpo -c -o bin_MarsCatalog-MvQMarsBrowser.moc.o `test -f 'MvQMarsBrowser.moc.cpp' || echo '$(srcdir)/'`MvQMarsBrowser.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.moc.Tpo $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.moc.Po
+bin_MarsCatalogue-MvQMarsBrowser.moc.o: MvQMarsBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvQMarsBrowser.moc.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.moc.Tpo -c -o bin_MarsCatalogue-MvQMarsBrowser.moc.o `test -f 'MvQMarsBrowser.moc.cpp' || echo '$(srcdir)/'`MvQMarsBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.moc.Tpo $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.moc.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsBrowser.moc.cpp' object='bin_MarsCatalog-MvQMarsBrowser.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsBrowser.moc.cpp' object='bin_MarsCatalogue-MvQMarsBrowser.moc.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvQMarsBrowser.moc.o `test -f 'MvQMarsBrowser.moc.cpp' || echo '$(srcdir)/'`MvQMarsBrowser.moc.cpp
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvQMarsBrowser.moc.o `test -f 'MvQMarsBrowser.moc.cpp' || echo '$(srcdir)/'`MvQMarsBrowser.moc.cpp
-bin_MarsCatalog-MvQMarsBrowser.moc.obj: MvQMarsBrowser.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvQMarsBrowser.moc.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.moc.Tpo -c -o bin_MarsCatalog-MvQMarsBrowser.moc.obj `if test -f 'MvQMarsBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQMarsBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMarsBrowser.moc.cpp'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.moc.Tpo $(DEPDIR)/bin_MarsCatalog-MvQMarsBrowser.moc.Po
+bin_MarsCatalogue-MvQMarsBrowser.moc.obj: MvQMarsBrowser.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvQMarsBrowser.moc.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.moc.Tpo -c -o bin_MarsCatalogue-MvQMarsBrowser.moc.obj `if test -f 'MvQMarsBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQMarsBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMarsBrowser.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.moc.Tpo $(DEPDIR)/bin_MarsCatalogue-MvQMarsBrowser.moc.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsBrowser.moc.cpp' object='bin_MarsCatalog-MvQMarsBrowser.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsBrowser.moc.cpp' object='bin_MarsCatalogue-MvQMarsBrowser.moc.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvQMarsBrowser.moc.obj `if test -f 'MvQMarsBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQMarsBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMarsBrowser.moc.cpp'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvQMarsBrowser.moc.obj `if test -f 'MvQMarsBrowser.moc.cpp'; then $(CYGPATH_W) 'MvQMarsBrowser.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMarsBrowser.moc.cpp'; fi`
-bin_MarsCatalog-MvQMarsCatalog.moc.o: MvQMarsCatalog.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvQMarsCatalog.moc.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.moc.Tpo -c -o bin_MarsCatalog-MvQMarsCatalog.moc.o `test -f 'MvQMarsCatalog.moc.cpp' || echo '$(srcdir)/'`MvQMarsCatalog.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.moc.Tpo $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.moc.Po
+bin_MarsCatalogue-MvQMarsCatalog.moc.o: MvQMarsCatalog.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvQMarsCatalog.moc.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.moc.Tpo -c -o bin_MarsCatalogue-MvQMarsCatalog.moc.o `test -f 'MvQMarsCatalog.moc.cpp' || echo '$(srcdir)/'`MvQMarsCatalog.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.moc.Tpo $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.moc.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsCatalog.moc.cpp' object='bin_MarsCatalog-MvQMarsCatalog.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsCatalog.moc.cpp' object='bin_MarsCatalogue-MvQMarsCatalog.moc.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvQMarsCatalog.moc.o `test -f 'MvQMarsCatalog.moc.cpp' || echo '$(srcdir)/'`MvQMarsCatalog.moc.cpp
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvQMarsCatalog.moc.o `test -f 'MvQMarsCatalog.moc.cpp' || echo '$(srcdir)/'`MvQMarsCatalog.moc.cpp
-bin_MarsCatalog-MvQMarsCatalog.moc.obj: MvQMarsCatalog.moc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-MvQMarsCatalog.moc.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.moc.Tpo -c -o bin_MarsCatalog-MvQMarsCatalog.moc.obj `if test -f 'MvQMarsCatalog.moc.cpp'; then $(CYGPATH_W) 'MvQMarsCatalog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMarsCatalog.moc.cpp'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.moc.Tpo $(DEPDIR)/bin_MarsCatalog-MvQMarsCatalog.moc.Po
+bin_MarsCatalogue-MvQMarsCatalog.moc.obj: MvQMarsCatalog.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-MvQMarsCatalog.moc.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.moc.Tpo -c -o bin_MarsCatalogue-MvQMarsCatalog.moc.obj `if test -f 'MvQMarsCatalog.moc.cpp'; then $(CYGPATH_W) 'MvQMarsCatalog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMarsCatalog.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.moc.Tpo $(DEPDIR)/bin_MarsCatalogue-MvQMarsCatalog.moc.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsCatalog.moc.cpp' object='bin_MarsCatalog-MvQMarsCatalog.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQMarsCatalog.moc.cpp' object='bin_MarsCatalogue-MvQMarsCatalog.moc.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-MvQMarsCatalog.moc.obj `if test -f 'MvQMarsCatalog.moc.cpp'; then $(CYGPATH_W) 'MvQMarsCatalog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMarsCatalog.moc.cpp'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-MvQMarsCatalog.moc.obj `if test -f 'MvQMarsCatalog.moc.cpp'; then $(CYGPATH_W) 'MvQMarsCatalog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQMarsCatalog.moc.cpp'; fi`
-bin_MarsCatalog-mars.qrc.o: mars.qrc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-mars.qrc.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-mars.qrc.Tpo -c -o bin_MarsCatalog-mars.qrc.o `test -f 'mars.qrc.cpp' || echo '$(srcdir)/'`mars.qrc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-mars.qrc.Tpo $(DEPDIR)/bin_MarsCatalog-mars.qrc.Po
+bin_MarsCatalogue-mars.qrc.o: mars.qrc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-mars.qrc.o -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-mars.qrc.Tpo -c -o bin_MarsCatalogue-mars.qrc.o `test -f 'mars.qrc.cpp' || echo '$(srcdir)/'`mars.qrc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-mars.qrc.Tpo $(DEPDIR)/bin_MarsCatalogue-mars.qrc.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mars.qrc.cpp' object='bin_MarsCatalog-mars.qrc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mars.qrc.cpp' object='bin_MarsCatalogue-mars.qrc.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-mars.qrc.o `test -f 'mars.qrc.cpp' || echo '$(srcdir)/'`mars.qrc.cpp
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-mars.qrc.o `test -f 'mars.qrc.cpp' || echo '$(srcdir)/'`mars.qrc.cpp
-bin_MarsCatalog-mars.qrc.obj: mars.qrc.cpp
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalog-mars.qrc.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalog-mars.qrc.Tpo -c -o bin_MarsCatalog-mars.qrc.obj `if test -f 'mars.qrc.cpp'; then $(CYGPATH_W) 'mars.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/mars.qrc.cpp'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalog-mars.qrc.Tpo $(DEPDIR)/bin_MarsCatalog-mars.qrc.Po
+bin_MarsCatalogue-mars.qrc.obj: mars.qrc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_MarsCatalogue-mars.qrc.obj -MD -MP -MF $(DEPDIR)/bin_MarsCatalogue-mars.qrc.Tpo -c -o bin_MarsCatalogue-mars.qrc.obj `if test -f 'mars.qrc.cpp'; then $(CYGPATH_W) 'mars.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/mars.qrc.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_MarsCatalogue-mars.qrc.Tpo $(DEPDIR)/bin_MarsCatalogue-mars.qrc.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mars.qrc.cpp' object='bin_MarsCatalog-mars.qrc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mars.qrc.cpp' object='bin_MarsCatalogue-mars.qrc.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalog_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalog-mars.qrc.obj `if test -f 'mars.qrc.cpp'; then $(CYGPATH_W) 'mars.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/mars.qrc.cpp'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_MarsCatalogue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_MarsCatalogue-mars.qrc.obj `if test -f 'mars.qrc.cpp'; then $(CYGPATH_W) 'mars.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/mars.qrc.cpp'; fi`
.cpp.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -718,26 +694,6 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
-rm -rf bin/.libs bin/_libs
-install-shareDATA: $(share_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(sharedir)" || $(MKDIR_P) "$(DESTDIR)$(sharedir)"
- @list='$(share_DATA)'; test -n "$(sharedir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sharedir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(sharedir)" || exit $$?; \
- done
-
-uninstall-shareDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(share_DATA)'; test -n "$(sharedir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(sharedir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(sharedir)" && rm -f $$files
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -824,9 +780,9 @@ distdir: $(DISTFILES)
check-am: all-am
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(PROGRAMS) $(DATA)
+all-am: Makefile $(PROGRAMS)
installdirs:
- for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"; do \
+ for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: $(BUILT_SOURCES)
@@ -879,7 +835,7 @@ info: info-am
info-am:
-install-data-am: install-shareDATA
+install-data-am:
install-dvi: install-dvi-am
@@ -925,7 +881,7 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-binPROGRAMS uninstall-shareDATA
+uninstall-am: uninstall-binPROGRAMS
.MAKE: all check install install-am install-strip
@@ -937,11 +893,11 @@ uninstall-am: uninstall-binPROGRAMS uninstall-shareDATA
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
- install-shareDATA install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
- uninstall-am uninstall-binPROGRAMS uninstall-shareDATA
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-binPROGRAMS
# ------------- #
@@ -1008,15 +964,23 @@ uninstall-am: uninstall-binPROGRAMS uninstall-shareDATA
.qrc.qrc.C:
$(RCC) -name `echo "$<" | sed 's/\.qrc$$//'` $< -o $@
+# AM_LDFLAGS is placed before $(LDFLAGS) when linking
+
+#sharedir = $(datadir)/metview/etc
+#local_sharedir = ../../share/metview/etc
+#local_iconsdir = ../../share/metview/icons
+#share_DATA = $(local_sharedir)/ObjectSpec.MarsCatalog
# to build the share data, we take the destination files and
# remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
# $< is the 'stripped' version and $@ is the 'full' version
-$(share_DATA): $(local_sharedir)/%: %
- ${INSTALL} $< $(local_sharedir)
+#$(share_DATA): $(local_sharedir)/%: %
+# ${INSTALL} $< $(local_sharedir)
+
+#icons = $(local_iconsdir)/MARS_CATALOG.xpm
-$(icons): $(local_iconsdir)/%: %
- ${INSTALL} $< $(local_iconsdir)
+#$(icons): $(local_iconsdir)/%: %
+# ${INSTALL} $< $(local_iconsdir)
#Copy the webmars python interface to bin
webmars:
diff --git a/src/MarsCatalog/MvMain.cc b/src/MarsCatalog/MvMain.cc
index eb8fe5a..422b984 100644
--- a/src/MarsCatalog/MvMain.cc
+++ b/src/MarsCatalog/MvMain.cc
@@ -1,12 +1,81 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
***************************** LICENSE END *************************************/
+#include "Metview.h"
+#include "mars.h"
+#include <iostream>
+
+#include "MvQApplication.h"
+
+#include "MvQMarsBrowser.h"
+
+svc *s = NULL;
+int ac;
+char **av;
+
+
+/*void browse_cb(svcid *id,request *r,void *)
+{
+ mon->input(id,r);
+}*/
+
+void dummy_cb(svcid *id,request */*r*/,void *)
+{
+ send_reply(id,NULL);
+}
+
+void monitor()
+{
+ //request *t = empty_request("MONITOR");
+ //call_switchboard(s,t);
+ //free_all_requests(t);
+}
+
+int main(int argc, char **argv)
+{
+ MvQApplication app(argc,argv);
+
+ //Initialise resorces from a static library (libMvQtGui)
+ Q_INIT_RESOURCE(window);
+ Q_INIT_RESOURCE(examiner);
+ Q_INIT_RESOURCE(keyDialog);
+
+ QApplication::setWindowIcon(
+ QIcon(QPixmap(QString::fromUtf8(":/window/metview_logo"))));
+
+ s=app.getService();
+ add_service_callback(s,NULL,dummy_cb,NULL);
+ //add_progress_callback(s,NULL,browse_cb,NULL);
+
+ MvQMarsBrowser *browser = new MvQMarsBrowser;
+ //browser->init();
+
+ browser->show();
+
+ return app.exec();
+}
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+
+
+
#include <QApplication>
#include <iostream>
@@ -51,28 +120,6 @@ void MvMarsCatalog::serve( MvRequest& in, MvRequest& out)
browser->show();
- //Create the bufr key manager and initialize it
- /*MvQKeyManager *manager = new MvQKeyManager(MvQKeyManager::BufrType);
- manager->loadProfiles();
-
- //Create the bufr metadata object and initialize it
- BufrMetaData *bufr = new BufrMetaData;
- bufr->setFileName(fbufr);
-
- //Create the bufr browser and initialize it
- BufrExaminer *browser = new BufrExaminer;
- browser->init(bufr,manager);
-
- browser->show();
-
- // Send reply to MetviewUI (but not to MvExamineManager)
- // To turn icon to green; otherwise, it will stay orange
- if( strcmp( getenv("METVIEW_MODE"), "examine" ) != 0 )
- {
- MvRequest req;
- sendReply(req);
- }*/
-
//Enter the app loop
app.exec();
}
@@ -88,3 +135,4 @@ int main( int argc, char **argv )
theApp.run();
}
+*/
\ No newline at end of file
diff --git a/src/MarsCatalog/MvQMarsBrowser.cc b/src/MarsCatalog/MvQMarsBrowser.cc
index 4e5b238..58f3bca 100644
--- a/src/MarsCatalog/MvQMarsBrowser.cc
+++ b/src/MarsCatalog/MvQMarsBrowser.cc
@@ -38,7 +38,7 @@ MvQMarsBrowser::MvQMarsBrowser(QWidget *parent) : MvQMainWindow(parent)
setAttribute(Qt::WA_DeleteOnClose);
- setWindowTitle(tr("Metview - MARS Catalog Browser"));
+ setWindowTitle(tr("Metview - MARS Catalogue Browser"));
//Initial size
setInitialSize(800,600);
diff --git a/src/MarsCatalog/ObjectSpec.MarsCatalog b/src/MarsCatalog/ObjectSpec.MarsCatalog
deleted file mode 100644
index c3cfc27..0000000
--- a/src/MarsCatalog/ObjectSpec.MarsCatalog
+++ /dev/null
@@ -1,26 +0,0 @@
-
-object,
- class = MARSCATALOG,
- can_be_created = True,
-# default_name = 'MarsCatalog',
-# help_page = MarsCatalog,
- type = File,
-# expand = 75,
-# macro = wmsclient,
-# editor_type = ExternalServiceEditor,
-# editor_type = QtOgcClientEditor,
- editor_type = NoEditor,
- pixmap = '$METVIEW_DIR/share/metview/icons/MARS_CATALOG.icon'
-
-state,
- class = MARSCATALOG,
- action = examine,
- service = marscatalog
-
-service,
- name = marscatalog,
- timeout = $timeout,
- fullname = Mars Catalog,
- cmd = '$metview_command $METVIEW_BIN/MarsCatalog -maxforks 25 -style plastique -stylesheet $METVIEW_DIR_SHARE/app-defaults/metview.qss'
-
-
diff --git a/src/Meteogram/Makefile.in b/src/Meteogram/Makefile.in
index 48d7d42..d6165ac 100644
--- a/src/Meteogram/Makefile.in
+++ b/src/Meteogram/Makefile.in
@@ -42,6 +42,7 @@ subdir = src/Meteogram
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -123,6 +124,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -146,6 +149,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/MetviewUI/FileObject.cc b/src/MetviewUI/FileObject.cc
index 0f0ad19..c984026 100644
--- a/src/MetviewUI/FileObject.cc
+++ b/src/MetviewUI/FileObject.cc
@@ -19,6 +19,10 @@
#include "Request.h"
#endif
+#include "IconClass.h"
+
+#include <algorithm>
+
FileObject::FileObject(Folder* parent,const IconClass& kind,
const string& name,IconInfo* info):
IconObject(parent,kind,name,info)
@@ -31,7 +35,15 @@ FileObject::~FileObject()
void FileObject::doubleClick()
{
- edit();
+ string dc=iconClass().doubleClickMethod();
+ std::transform(dc.begin(), dc.end(), dc.begin(), ::tolower);
+
+ if(!dc.empty())
+ {
+ command(dc);
+ }
+ else
+ edit();
}
set<string> FileObject::can()
diff --git a/src/MetviewUI/FolderDrawers.cc b/src/MetviewUI/FolderDrawers.cc
index 0ac7adf..889b181 100644
--- a/src/MetviewUI/FolderDrawers.cc
+++ b/src/MetviewUI/FolderDrawers.cc
@@ -54,11 +54,14 @@ void FolderDrawers::install(Widget w)
int n = 0;
+ while(drawers_.size() == 0 && fill(n++))
+ ;
+
+/*
// ir/2010-09-26: changed the behaviour so that the drawers
// will be re-synced with the system ones each time MetviewUI
// is started.
- //while(drawers_.size() == 0 && fill(n++))
//while(fill(n++))
while(!FolderDrawers::doneFill_ && fill(n++))
{
@@ -92,7 +95,7 @@ void FolderDrawers::install(Widget w)
folder->ensureChildrenWritable();
}
}
- }
+ }*/
}
diff --git a/src/MetviewUI/IconClass.cc b/src/MetviewUI/IconClass.cc
index 0a1eb23..39b30d1 100644
--- a/src/MetviewUI/IconClass.cc
+++ b/src/MetviewUI/IconClass.cc
@@ -468,6 +468,18 @@ string IconClass::helpPage() const
return def ? string(def) : name_;
}
+string IconClass::doubleClickMethod() const
+{
+ const char* def = get_value(request_,"doubleclick_method",0);
+ return def ? string(def) : string();
+}
+
+bool IconClass::skipDepandancies(const string& action) const
+{
+ const char* def = get_value(request_,"skip_dependancies",0);
+ return def ? (strcmp(def,action.c_str()) == 0) : false;
+}
+
Path IconClass::pixmap() const
{
const char* def = get_value(request_,"pixmap",0);
diff --git a/src/MetviewUI/IconClass.h b/src/MetviewUI/IconClass.h
index ff5eaaa..d5c1ea3 100644
--- a/src/MetviewUI/IconClass.h
+++ b/src/MetviewUI/IconClass.h
@@ -64,6 +64,8 @@ public:
virtual string type() const;
virtual string defaultName() const;
virtual string helpPage() const;
+ virtual string doubleClickMethod() const;
+ virtual bool skipDepandancies(const string& action) const;
virtual Path pixmap() const;
virtual Path definitionFile() const;
virtual Path rulesFile() const;
diff --git a/src/MetviewUI/Makefile.in b/src/MetviewUI/Makefile.in
index 52180ed..35f4b5d 100644
--- a/src/MetviewUI/Makefile.in
+++ b/src/MetviewUI/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/MetviewUI
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -291,6 +292,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -314,6 +317,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/MetviewUI/MetviewTask.cc b/src/MetviewUI/MetviewTask.cc
index 4075ffc..e2b2f01 100644
--- a/src/MetviewUI/MetviewTask.cc
+++ b/src/MetviewUI/MetviewTask.cc
@@ -40,6 +40,7 @@
#include "IconFactory.h"
#endif
+#include "IconClass.h"
//=================================================================
@@ -59,23 +60,25 @@ MetviewTask::~MetviewTask()
void MetviewTask::start()
{
- const set<DependancyH>& dep = object_->dependancies();
+ if(!object_->iconClass().skipDepandancies(action_.name()))
+ {
+ const set<DependancyH>& dep = object_->dependancies();
- Action action("prepare","*");
+ Action action("prepare","*");
- for(set<DependancyH>::const_iterator j = dep.begin(); j != dep.end(); ++j)
- {
- Task* t = (*j)->action(action);
- if(t) {
- tasks_[t] = *j;
- waiting_++;
- t->add(this);
- }
+ for(set<DependancyH>::const_iterator j = dep.begin(); j != dep.end(); ++j)
+ {
+ Task* t = (*j)->action(action);
+ if(t) {
+ tasks_[t] = *j;
+ waiting_++;
+ t->add(this);
+ }
+ }
}
-
+
check();
-
}
void MetviewTask::check()
diff --git a/src/MvApp/Makefile.in b/src/MvApp/Makefile.in
index 5eafdb0..c1d2dbe 100644
--- a/src/MvApp/Makefile.in
+++ b/src/MvApp/Makefile.in
@@ -54,6 +54,7 @@ subdir = src/MvApp
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -180,6 +181,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -203,6 +206,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/NcExaminer/Makefile.in b/src/NcExaminer/Makefile.in
index 5607b14..e51d1bd 100644
--- a/src/NcExaminer/Makefile.in
+++ b/src/NcExaminer/Makefile.in
@@ -76,6 +76,7 @@ bin_PROGRAMS = bin/NcExaminer$(EXEEXT)
subdir = src/NcExaminer
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -156,6 +157,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -179,6 +182,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/ObsFilter/Makefile.in b/src/ObsFilter/Makefile.in
index 664f0dc..23bf1b8 100644
--- a/src/ObsFilter/Makefile.in
+++ b/src/ObsFilter/Makefile.in
@@ -42,6 +42,7 @@ subdir = src/ObsFilter
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -132,6 +133,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -155,6 +158,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/ObsFilter/ObsFilter.cc b/src/ObsFilter/ObsFilter.cc
index d1f2f0b..c208d12 100644
--- a/src/ObsFilter/ObsFilter.cc
+++ b/src/ObsFilter/ObsFilter.cc
@@ -197,8 +197,9 @@ ObsFilter :: getTypes( void )
{
int i;
- const char* obsTypeStr = _in( "OBSERVATION_TYPES" );
- if( obsTypeStr && strcmp( obsTypeStr, "ANY" ) != 0 )
+ // It requires that this parameter returns number(s)
+ const char* obsTypeStr = (const char*)_in( "OBSERVATION_TYPES" );
+ if( obsTypeStr )
{
long myType = -999;
for( i = 0; i < _in.countValues( "OBSERVATION_TYPES" ); i++ )
@@ -209,8 +210,9 @@ ObsFilter :: getTypes( void )
}
}
- const char* obsSubTypeStr = _in( "OBSERVATION_SUBTYPES" );
- if( obsSubTypeStr && strcmp( obsSubTypeStr, "ANY" ) != 0 )
+ // It requires that this parameter returns number(s)
+ const char* obsSubTypeStr = (const char*)_in( "OBSERVATION_SUBTYPES" );
+ if( obsSubTypeStr )
{
long mySubType = -999;
for( i = 0; i < _in.countValues( "OBSERVATION_SUBTYPES" ); i++ )
@@ -730,7 +732,9 @@ ObsFilter :: serve( MvRequest& in, MvRequest& out )
time( &myStartTime );
clock_t myStartCpu = clock();
- _in = in;
+ // The input request needs to be expanded with flag EXPAND_LAST_NAME.
+ // This is required by functions getTypes and getCustom.
+ _in = in.ExpandRequest("ObsFilterDef","ObsFilterRules",EXPAND_LAST_NAME);
_in.print();
getParams(); //-- new _inSet & _iter
diff --git a/src/Obstat/Makefile.in b/src/Obstat/Makefile.in
index 6bde5e3..f45919d 100644
--- a/src/Obstat/Makefile.in
+++ b/src/Obstat/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/Obstat
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -124,6 +125,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -147,6 +150,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/ObstatCurveTool/Makefile.in b/src/ObstatCurveTool/Makefile.in
index f197ff9..adbbaa5 100644
--- a/src/ObstatCurveTool/Makefile.in
+++ b/src/ObstatCurveTool/Makefile.in
@@ -77,6 +77,7 @@ bin_PROGRAMS = bin/ObstatCurveTool$(EXEEXT)
subdir = src/ObstatCurveTool
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -180,6 +181,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -203,6 +206,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/ObstatScatterTool/Makefile.in b/src/ObstatScatterTool/Makefile.in
index 67974b8..4016a77 100644
--- a/src/ObstatScatterTool/Makefile.in
+++ b/src/ObstatScatterTool/Makefile.in
@@ -77,6 +77,7 @@ bin_PROGRAMS = bin/ObstatScatterTool$(EXEEXT)
subdir = src/ObstatScatterTool
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -180,6 +181,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -203,6 +206,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Odb/Makefile.in b/src/Odb/Makefile.in
index f5d7b55..d01c9ee 100644
--- a/src/Odb/Makefile.in
+++ b/src/Odb/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/Odb
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -130,6 +131,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -153,6 +156,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/OdbExaminer/Makefile.in b/src/OdbExaminer/Makefile.in
index 9273c68..ac068d2 100644
--- a/src/OdbExaminer/Makefile.in
+++ b/src/OdbExaminer/Makefile.in
@@ -77,6 +77,7 @@ bin_PROGRAMS = bin/OdbExaminer$(EXEEXT)
subdir = src/OdbExaminer
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -182,6 +183,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -205,6 +208,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/OgcClient/Makefile.in b/src/OgcClient/Makefile.in
index 961880a..4b06679 100644
--- a/src/OgcClient/Makefile.in
+++ b/src/OgcClient/Makefile.in
@@ -82,6 +82,7 @@ bin_PROGRAMS = bin/WmsClient$(EXEEXT) $(am__EXEEXT_1)
subdir = src/OgcClient
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -210,6 +211,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -233,6 +236,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/OperaRadar/Makefile.in b/src/OperaRadar/Makefile.in
index 4056b4b..a90e8ef 100644
--- a/src/OperaRadar/Makefile.in
+++ b/src/OperaRadar/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/OperaRadar
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -121,6 +122,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -144,6 +147,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/PM_Tephigram/Makefile.am b/src/PM_Tephigram/Makefile.am
deleted file mode 100644
index 798e86a..0000000
--- a/src/PM_Tephigram/Makefile.am
+++ /dev/null
@@ -1,14 +0,0 @@
-
-bin_PROGRAMS = bin/PM_Tephigram
-
-
-bin_PM_Tephigram_SOURCES = MvTephiFrame.cc MvTephiFrame.h MvTephiParams.cc MvTephiParams.h MvTephiData.cc MvTephiData.h Tephigrams.cc
-bin_PM_Tephigram_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
-bin_PM_Tephigram_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_NETCDF_LIB) $(METVIEW_UTIL_LIB) $(FLIBS)
-
-
-
-BUILT_SOURCES = bin
-
-bin:
- ln -s ../../bin bin
diff --git a/src/PM_Tephigram/Makefile.in b/src/PM_Tephigram/Makefile.in
deleted file mode 100644
index 05b5f96..0000000
--- a/src/PM_Tephigram/Makefile.in
+++ /dev/null
@@ -1,724 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-bin_PROGRAMS = bin/PM_Tephigram$(EXEEXT)
-subdir = src/PM_Tephigram
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
- $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/src/metview_config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
-PROGRAMS = $(bin_PROGRAMS)
-am_bin_PM_Tephigram_OBJECTS = bin_PM_Tephigram-MvTephiFrame.$(OBJEXT) \
- bin_PM_Tephigram-MvTephiParams.$(OBJEXT) \
- bin_PM_Tephigram-MvTephiData.$(OBJEXT) \
- bin_PM_Tephigram-Tephigrams.$(OBJEXT)
-bin_PM_Tephigram_OBJECTS = $(am_bin_PM_Tephigram_OBJECTS)
-am__DEPENDENCIES_1 =
-bin_PM_Tephigram_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
-am__v_lt_0 = --silent
-am__dirstamp = $(am__leading_dot)dirstamp
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_$(V))
-am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
-am__v_CXX_0 = @echo " CXX " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_$(V))
-am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CXXLD_0 = @echo " CXXLD " $@;
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo " CC " $@;
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo " CCLD " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = $(bin_PM_Tephigram_SOURCES)
-DIST_SOURCES = $(bin_PM_Tephigram_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-AXX = @AXX@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CPPLIBS = @CPPLIBS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DBMLIB = @DBMLIB@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-ECREGRID_LIBS = @ECREGRID_LIBS@
-EGREP = @EGREP@
-EMOS_LIB_NAME = @EMOS_LIB_NAME@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FC = @FC@
-FCFLAGS = @FCFLAGS@
-FDBLIB = @FDBLIB@
-FFIXED_FLAGS = @FFIXED_FLAGS@
-FFLAGS = @FFLAGS@
-FGREP = @FGREP@
-FLIBS = @FLIBS@
-GREP = @GREP@
-GRIBAPI_LIBS = @GRIBAPI_LIBS@
-GRIB_API_INC = @GRIB_API_INC@
-GRIB_API_LIB = @GRIB_API_LIB@
-HAVE_CONVERT = @HAVE_CONVERT@
-HAVE_KSH = @HAVE_KSH@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LDFLAGS_INLINE = @LDFLAGS_INLINE@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBNAME = @LIBNAME@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAGICS_CFLAGS = @MAGICS_CFLAGS@
-MAGICS_LIBS = @MAGICS_LIBS@
-MAGPLUS_CPPFLAGS = @MAGPLUS_CPPFLAGS@
-MAGPLUS_HOME = @MAGPLUS_HOME@
-MAGPLUS_LDFLAGS = @MAGPLUS_LDFLAGS@
-MAGPLUS_LIB = @MAGPLUS_LIB@
-MAGPLUS_LIBDIR = @MAGPLUS_LIBDIR@
-MAGPLUS_LIB_QT = @MAGPLUS_LIB_QT@
-MAKEINFO = @MAKEINFO@
-MARS_ACCESS = @MARS_ACCESS@
-MARS_HOME = @MARS_HOME@
-MARS_ODB_ACCESS = @MARS_ODB_ACCESS@
-METVIEW_3RDPARTY_INCLUDE = @METVIEW_3RDPARTY_INCLUDE@
-METVIEW_3RDPARTY_LIBS = @METVIEW_3RDPARTY_LIBS@
-METVIEW_ECREGRID = @METVIEW_ECREGRID@
-METVIEW_EXTRA_TITLE = @METVIEW_EXTRA_TITLE@
-METVIEW_GRIBAPI_MIN_VERSION = @METVIEW_GRIBAPI_MIN_VERSION@
-METVIEW_MAGICS_MIN_VERSION = @METVIEW_MAGICS_MIN_VERSION@
-METVIEW_NETCDF_FLAGS = @METVIEW_NETCDF_FLAGS@
-METVIEW_NETCDF_LIB = @METVIEW_NETCDF_LIB@
-METVIEW_PACKAGE_NAME = @METVIEW_PACKAGE_NAME@
-METVIEW_PACKAGE_RELEASE_DATE = @METVIEW_PACKAGE_RELEASE_DATE@
-METVIEW_PACKAGE_VERSION = @METVIEW_PACKAGE_VERSION@
-METVIEW_UTIL_LIB = @METVIEW_UTIL_LIB@
-MKDIR_P = @MKDIR_P@
-MOC = @MOC@
-MVINCLUDE = @MVINCLUDE@
-MVSTARTDIR = @MVSTARTDIR@
-MV_EMOSLIB = @MV_EMOSLIB@
-MV_ENVIRON = @MV_ENVIRON@
-MV_MOTIF_FLAGS = @MV_MOTIF_FLAGS@
-MV_MOTIF_UTIL_LIB = @MV_MOTIF_UTIL_LIB@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-ODB1_BIN = @ODB1_BIN@
-ODB1_USE_SCRIPT = @ODB1_USE_SCRIPT@
-ODB1_VERSION = @ODB1_VERSION@
-ODB_CPPFLAGS = @ODB_CPPFLAGS@
-ODB_LDFLAGS = @ODB_LDFLAGS@
-ODB_LIBDIR = @ODB_LIBDIR@
-ODB_LIBS = @ODB_LIBS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKGCONFIG_REQUIRES = @PKGCONFIG_REQUIRES@
-PKG_CONFIG = @PKG_CONFIG@
-PROJ4_LIBS = @PROJ4_LIBS@
-QMAKE = @QMAKE@
-QT_CFLAGS = @QT_CFLAGS@
-QT_CPPFLAGS = @QT_CPPFLAGS@
-QT_CXXFLAGS = @QT_CXXFLAGS@
-QT_DEFINES = @QT_DEFINES@
-QT_INCPATH = @QT_INCPATH@
-QT_LDFLAGS = @QT_LDFLAGS@
-QT_LFLAGS = @QT_LFLAGS@
-QT_LIBS = @QT_LIBS@
-QT_PATH = @QT_PATH@
-QT_VERSION = @QT_VERSION@
-QT_VERSION_MAJOR = @QT_VERSION_MAJOR@
-RANLIB = @RANLIB@
-RCC = @RCC@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SITE_NAME = @SITE_NAME@
-SITE_WMO_CODE = @SITE_WMO_CODE@
-STANDARD_METVIEW_LIBS = @STANDARD_METVIEW_LIBS@
-STANDARD_METVIEW_LIBS_NO_UTIL = @STANDARD_METVIEW_LIBS_NO_UTIL@
-STARTUP_SCRIPT = @STARTUP_SCRIPT@
-STRIP = @STRIP@
-UIC = @UIC@
-VERSION = @VERSION@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-ac_ct_F77 = @ac_ct_F77@
-ac_ct_FC = @ac_ct_FC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-bin_PM_Tephigram_SOURCES = MvTephiFrame.cc MvTephiFrame.h MvTephiParams.cc MvTephiParams.h MvTephiData.cc MvTephiData.h Tephigrams.cc
-bin_PM_Tephigram_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
-bin_PM_Tephigram_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_NETCDF_LIB) $(METVIEW_UTIL_LIB) $(FLIBS)
-BUILT_SOURCES = bin
-all: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-.SUFFIXES: .cc .lo .o .obj
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/PM_Tephigram/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/PM_Tephigram/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-binPROGRAMS: $(bin_PROGRAMS)
- @$(NORMAL_INSTALL)
- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- for p in $$list; do echo "$$p $$p"; done | \
- sed 's/$(EXEEXT)$$//' | \
- while read p p1; do if test -f $$p || test -f $$p1; \
- then echo "$$p"; echo "$$p"; else :; fi; \
- done | \
- sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
- -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
- sed 'N;N;N;s,\n, ,g' | \
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
- if ($$2 == $$4) files[d] = files[d] " " $$1; \
- else { print "f", $$3 "/" $$4, $$1; } } \
- END { for (d in files) print "f", d, files[d] }' | \
- while read type dir files; do \
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
- test -z "$$files" || { \
- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
- } \
- ; done
-
-uninstall-binPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
- files=`for p in $$list; do echo "$$p"; done | \
- sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
- -e 's/$$/$(EXEEXT)/' `; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(bindir)" && rm -f $$files
-
-clean-binPROGRAMS:
- @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
- echo " rm -f" $$list; \
- rm -f $$list || exit $$?; \
- test -n "$(EXEEXT)" || exit 0; \
- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f" $$list; \
- rm -f $$list
-bin/$(am__dirstamp):
- @$(MKDIR_P) bin
- @: > bin/$(am__dirstamp)
-bin/PM_Tephigram$(EXEEXT): $(bin_PM_Tephigram_OBJECTS) $(bin_PM_Tephigram_DEPENDENCIES) bin/$(am__dirstamp)
- @rm -f bin/PM_Tephigram$(EXEEXT)
- $(AM_V_CXXLD)$(CXXLINK) $(bin_PM_Tephigram_OBJECTS) $(bin_PM_Tephigram_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_PM_Tephigram-MvTephiData.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_PM_Tephigram-Tephigrams.Po at am__quote@
-
-.cc.o:
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
-
-.cc.obj:
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cc.lo:
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-
-bin_PM_Tephigram-MvTephiFrame.o: MvTephiFrame.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiFrame.o -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Tpo -c -o bin_PM_Tephigram-MvTephiFrame.o `test -f 'MvTephiFrame.cc' || echo '$(srcdir)/'`MvTephiFrame.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvTephiFrame.cc' object='bin_PM_Tephigram-MvTephiFrame.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiFrame.o `test -f 'MvTephiFrame.cc' || echo '$(srcdir)/'`MvTephiFrame.cc
-
-bin_PM_Tephigram-MvTephiFrame.obj: MvTephiFrame.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiFrame.obj -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Tpo -c -o bin_PM_Tephigram-MvTephiFrame.obj `if test -f 'MvTephiFrame.cc'; then $(CYGPATH_W) 'MvTephiFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiFrame.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiFrame.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvTephiFrame.cc' object='bin_PM_Tephigram-MvTephiFrame.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiFrame.obj `if test -f 'MvTephiFrame.cc'; then $(CYGPATH_W) 'MvTephiFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiFrame.cc'; fi`
-
-bin_PM_Tephigram-MvTephiParams.o: MvTephiParams.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiParams.o -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Tpo -c -o bin_PM_Tephigram-MvTephiParams.o `test -f 'MvTephiParams.cc' || echo '$(srcdir)/'`MvTephiParams.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvTephiParams.cc' object='bin_PM_Tephigram-MvTephiParams.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiParams.o `test -f 'MvTephiParams.cc' || echo '$(srcdir)/'`MvTephiParams.cc
-
-bin_PM_Tephigram-MvTephiParams.obj: MvTephiParams.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiParams.obj -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Tpo -c -o bin_PM_Tephigram-MvTephiParams.obj `if test -f 'MvTephiParams.cc'; then $(CYGPATH_W) 'MvTephiParams.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiParams.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiParams.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvTephiParams.cc' object='bin_PM_Tephigram-MvTephiParams.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiParams.obj `if test -f 'MvTephiParams.cc'; then $(CYGPATH_W) 'MvTephiParams.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiParams.cc'; fi`
-
-bin_PM_Tephigram-MvTephiData.o: MvTephiData.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiData.o -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Tpo -c -o bin_PM_Tephigram-MvTephiData.o `test -f 'MvTephiData.cc' || echo '$(srcdir)/'`MvTephiData.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvTephiData.cc' object='bin_PM_Tephigram-MvTephiData.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiData.o `test -f 'MvTephiData.cc' || echo '$(srcdir)/'`MvTephiData.cc
-
-bin_PM_Tephigram-MvTephiData.obj: MvTephiData.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-MvTephiData.obj -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Tpo -c -o bin_PM_Tephigram-MvTephiData.obj `if test -f 'MvTephiData.cc'; then $(CYGPATH_W) 'MvTephiData.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiData.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Tpo $(DEPDIR)/bin_PM_Tephigram-MvTephiData.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvTephiData.cc' object='bin_PM_Tephigram-MvTephiData.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-MvTephiData.obj `if test -f 'MvTephiData.cc'; then $(CYGPATH_W) 'MvTephiData.cc'; else $(CYGPATH_W) '$(srcdir)/MvTephiData.cc'; fi`
-
-bin_PM_Tephigram-Tephigrams.o: Tephigrams.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-Tephigrams.o -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Tpo -c -o bin_PM_Tephigram-Tephigrams.o `test -f 'Tephigrams.cc' || echo '$(srcdir)/'`Tephigrams.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Tpo $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Tephigrams.cc' object='bin_PM_Tephigram-Tephigrams.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-Tephigrams.o `test -f 'Tephigrams.cc' || echo '$(srcdir)/'`Tephigrams.cc
-
-bin_PM_Tephigram-Tephigrams.obj: Tephigrams.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_PM_Tephigram-Tephigrams.obj -MD -MP -MF $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Tpo -c -o bin_PM_Tephigram-Tephigrams.obj `if test -f 'Tephigrams.cc'; then $(CYGPATH_W) 'Tephigrams.cc'; else $(CYGPATH_W) '$(srcdir)/Tephigrams.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Tpo $(DEPDIR)/bin_PM_Tephigram-Tephigrams.Po
- at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Tephigrams.cc' object='bin_PM_Tephigram-Tephigrams.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_PM_Tephigram_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_PM_Tephigram-Tephigrams.obj `if test -f 'Tephigrams.cc'; then $(CYGPATH_W) 'Tephigrams.cc'; else $(CYGPATH_W) '$(srcdir)/Tephigrams.cc'; fi`
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
- -rm -rf bin/.libs bin/_libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
- for dir in "$(DESTDIR)$(bindir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
- -rm -f bin/$(am__dirstamp)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-am
-
-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-binPROGRAMS
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS
-
-.MAKE: all check install install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
- clean-generic clean-libtool ctags distclean distclean-compile \
- distclean-generic distclean-libtool distclean-tags distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-binPROGRAMS install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
- pdf pdf-am ps ps-am tags uninstall uninstall-am \
- uninstall-binPROGRAMS
-
-
-bin:
- ln -s ../../bin bin
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/PM_Tephigram/MvTephiData.cc b/src/PM_Tephigram/MvTephiData.cc
deleted file mode 100644
index 197fcb8..0000000
--- a/src/PM_Tephigram/MvTephiData.cc
+++ /dev/null
@@ -1,715 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-//-- MvTephiData.cc - Dec2004/vk
-//
-
-
-#include "MvTephiData.h"
-#include "MvException.h"
-#include "min_max_macros.h"
-#include <math.h>
-
-
-//-- thermodynamic constants --//
-
-const double cTMELT = 273.16;
-const double cR3LES = 17.502;
-const double cR3IES = 22.587;
-const double cR4LES = 32.19;
-const double cR4IES = -0.7;
-
-const double cRD = 287.05;
-const double cRV = 461.51;
-const double cRESTT = 611.21;
-const double cR2ES = cRESTT*cRD/cRV;
-const double cVTMPC1= cRV/cRD-1.;
-
-const int cFREE = -999; //-- to mark free array cells
-
-//_____________________________________________________________________________
-
-MvTephiDataBase::MvTephiDataBase( MvField& fieldToken, const MvTephiParams& pars )
- : counter_( 1 )
- , t_level_( 0 )
- , d_level_( 0 )
- , u_level_( 0 )
- , p_level_( 0 )
- , min_level_( MaxLevel )
- , currField_( fieldToken )
- , pars_( pars )
-{
-}
-
-//_____________________________________________________________________________
-//
-// Reads and preprocesses one set of files, i.e. all fields valid at
-// the same time. Fields are sorted and thus we can trust the iterator.
-//
-void
-MvTephiDataBase::readOneSetOfFields( MvFieldSetIterator& iter )
-{
- const double cBIGDOUBLE = 3.4E35;
- const double oneMinute = 1.0 / 24.0;
-
- bool cont = true;
- while( cont ) //-- read while same valid time
- {
- double y = getValueFromCurrentField();
- if ( y > cBIGDOUBLE )
- {
- throw MvException("Tephigrams: Unsupported grid or point outside field!");
- }
-
- int level = getLevel(); //-- virtual method
- vertCoordCoefs( level ); //-- virtual method
-
- int p = currField_.parameter();
- collectValue( p, level, y ); //-- virtual method
-
- nextField_ = iter(); //-- next field - is it still part of current data
-
- if( ! nextField_ )
- cont = false; //-- end-of-file
- else
- cont = ( fabs(currField_.yyyymmddFoh() - nextField_.yyyymmddFoh()) < oneMinute )
- && ( fabs(currField_.stepFoh() - nextField_.stepFoh()) < oneMinute );
-
- if( cont )
- currField_ = nextField_;
- }
-
- //-- set of current fields preprocessed - everything ok so far?
- if( t_level_ != d_level_ )
- throw MvException("Tephigrams: Different number of levels for T and Q!");
-
- if( t_level_ <= 1 )
- throw MvException("Tephigrams: T fields are missing!");
-
- if( p_level_ == 0 )
- throw MvException("Tephigrams: lnsp field missing!");
-}
-
-//_____________________________________________________________________________
-//
-// Post-process and generate NetCDF output
-//
-void
-MvTephiDataBase::generate( MvNetCDF& netcdf )
-{
- MvTephiFrame* frame = new MvTephiFrame();
-
-
- cout << "On set of data " << endl;
- string Tempkey = generateKey( 1, counter_ );
- string Dewkey = generateKey(2, counter_ );
- string Pkey = generateKey( 3, counter_ );
- string Ukey = generateKey( 4, counter_ );
-
-
- if( ! frame->setFrame(pars_.P1,pars_.P2,pars_.T1,pars_.T2,pars_.Wf) )
- {
- delete frame;
- throw MvException("Tephigrams: Invalid parameter range (T,P)");
- }
-
- MvNcVar* temp = netcdf.addVariable( Tempkey.c_str(), ncDouble,1, (t_level_ - min_level_ + 1) );
- MvNcVar* dew = netcdf.addVariable( Dewkey.c_str(), ncDouble, 1, (d_level_ - min_level_ + 1) );
- MvNcVar* press = netcdf.addVariable( Pkey.c_str(), ncDouble, 1, (d_level_ - min_level_ + 1) );
- TepDataStrukt tds;
- computeLevels( tds );
- netcdf.addAttribute("title", title().c_str());
- //-- Add some metadata to the x variables.
- frame->Metadata( pars_.backGround, temp, title().c_str() );
- frame->Metadata( pars_.backGround, dew, 0 );
- //frame->AddAttributes( temp, Tempkey );
- //frame->AddAttributes( dew, Dewkey );
-
- temp->addAttribute( "_REQUEST_NAMES", "DATA_X_VALUES/DATA_Y_VALUES" );
- dew->addAttribute( "_REQUEST_NAMES", "DATA_X_VALUES/DATA_Y_VALUES" );
-
- //-- Add the data to the variables
- frame->TSonde( tds.PRESS
- , T_
- , min_level_
- , d_level_
- , pars_.line_thick
- , (char*)pars_.line_style_temp.c_str()
- , pars_.line_colour.c_str()
- , temp, press
- );
- frame->TSonde( tds.PRESS
- , tds.TD
- , min_level_
- , d_level_
- , pars_.line_thick
- , (char*)pars_.line_style_dew.c_str()
- , pars_.line_colour.c_str()
- , dew
- );
-
- if( u_level_ > 1)
- {
- counter_++;
- string Presskey = generateKey( 0, counter_ );
- Tempkey = generateKey( pars_.Temp, counter_ );
- Ukey = generateKey( pars_.U_Field, counter_ );
-
- geopotential( tds );
-
- //-- Add the wind arrows
- frame->TFlag( tds.PRESS, T_, U_, V_, tds.Height, u_level_,
- pars_.flag_colour.c_str(), //-- flag colour to define numbers too
- netcdf, Presskey, Tempkey, Ukey );
- }
-
- u_level_ = t_level_ = d_level_ = 0;
- counter_++;
-}
-
-//_____________________________________________________________________________
-//
-// Value can be extracted in several ways...
-//
-double
-MvTephiDataBase::getValueFromCurrentField()
-{
- double y;
- switch( pars_.pointType )
- {
- case eInterpolated:
- y = currField_.interpolateAt( pars_.lon, pars_.lat ); //-- x/y
- break;
-
- case eGridPoint:
- y = currField_.nearestGridpoint( pars_.lon, pars_.lat ); //-- x/y
- break;
-
- case eAreaAverage:
- y = currField_.integrate( pars_.lat, pars_.lon, pars_.lat2, pars_.lon2 ); //-- n/w/s/e
- break;
- }
-
- return y;
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataBase::collectValue( int p, int level, double y )
-{
- if( level < min_level_ && p != pars_.LnPress )
- min_level_ = level;
-
- if( p == pars_.U_Field ) //-- collect parameter values
- {
- u_level_ = level;
- U_[level-1] = y;
- }
- else if( p == pars_.V_Field )
- {
- V_[level-1] = y;
- }
- else if( p == pars_.Temp )
- {
- t_level_ = level;
- T_[level-1] = y;
- }
- else if( p == pars_.Dew )
- {
- d_level_ = level;
- Q_[level-1] = max(ZEPQMI,y);
- }
- else if( p == pars_.LnPress )
- {
- processPressure( level, y );
- }
- else
- {
- ostringstream oss;
- oss << "Tephigrams: field contains unknown data, param=" << p;
-
- throw MvException( oss.str().c_str() );
- }
-}
-
-//_____________________________________________________________________________
-//
-// Title reflects data extraction type
-//
-string
-MvTephiDataBase::title()
-{
- MvRequest r = currField_.getRequest();
-
- const char* f_date = r("DATE");
- const char* f_time = r("TIME");
- const char* f_step = r("STEP");
- const char* expver = r("EXPVER");
-
- char Title[200];
- switch( pars_.pointType )
- {
- case eInterpolated:
- sprintf(Title,"%s %s step %s [%.2f,%.2f] %s, expver %s",
- f_date, f_time, f_step,
- pars_.lat, pars_.lon,
- pars_.formulaPrintName.c_str(), (expver?expver:"-") );
- break;
-
- case eGridPoint:
- {
- MvLocation loc = currField_.nearestGridPointLocation( MvLocation( pars_.lat, pars_.lon ) );
- sprintf(Title,"%s %s step %s [nearest: %.2f,%.2f] %s, expver %s",
- f_date, f_time, f_step,
- loc.latitude(), loc.longitude(),
- pars_.formulaPrintName.c_str(), (expver?expver:"-") );
- }
- break;
-
- case eAreaAverage:
- sprintf(Title,"%s %s step %s [%.1f,%.1f,%.1f,%.1f] %s, expver %s",
- f_date, f_time, f_step,
- pars_.lat, pars_.lon, pars_.lat2, pars_.lon2,
- pars_.formulaPrintName.c_str(), (expver?expver:"-") );
- break;
- }
-
- return string(Title);
-}
-
-//_____________________________________________________________________________
-//
-// This is almost a duplicate of MvTephiFrame::generateKey(...)
-//
-string
-MvTephiDataBase::generateKey( int par, int counter )
-{
- MvRequest req = currField_.getRequest();
-
- const char* date = req("DATE");
- const char* time = req("TIME");
- const char* step = req("STEP");
- const char* expver = req("EXPVER");
-
- ostringstream oss;
- oss << setfill( '0' )
- << "p"
- << setw( 3 ) << par
- << setw( 8 ) << date
- << setw( 4 ) << ( time ? time : "TTTT" )
- << setw( 4 ) << ( step ? step : "SSSS" )
- << setw( 4 ) << ( expver ? expver : "1" )
- << "_" << counter;
-
- cout << " Key " << oss.str() << endl;
- return oss.str();
-}
-
-//_____________________________________________________________________________
-//
-// This is almost a duplicate of MvTephiFrame::DewPoint(...)
-//
-double
-MvTephiDataBase::dewPoint( double P, double T, double Q, const string& dewPointFormulaType )
-{
- const string cMixedFormula( "MIXED_PHASE_0_TO_-23" );
-
- double ZCVM3, ZCVM4;
-
- if( dewPointFormulaType == cMixedFormula )
- {
- double rtwat = cTMELT;
- double rtice = cTMELT - 23.0;
- double foealfa = min(1.,pow(((max(rtice,min(rtwat,T))-rtice)/(rtwat-rtice)),2.0) );
-
- ZCVM3 = foealfa*cR3LES + (1.-foealfa)*cR3IES;
- ZCVM4 = foealfa*cR4LES + (1.-foealfa)*cR4IES;
- }
- else
- {
- if( T > cTMELT )
- {
- ZCVM3=cR3LES;
- ZCVM4=cR4LES;
- }
- else
- {
- ZCVM3=cR3IES;
- ZCVM4=cR4IES;
- }
- }
-
- double ZFRAC = log(P*Q/(cR2ES*(1.+cVTMPC1*Q)))/ZCVM3;
-
- return (cTMELT-ZFRAC*ZCVM4)/(1.-ZFRAC);
-}
-
-//_____________________________________________________________________________
-//
-// Virtual temperature Tv
-//
-double
-MvTephiDataBase::Tv( double T, double Q )
-{
- return T * ( 1. + cVTMPC1 * Q );
-}
-
-//_____________________________________________________________________________
-//
-// This is almost a duplicate of MvTephiFrame::TGeopot
-//
-void
-MvTephiDataBase::geopotential( TepDataStrukt& tds )
-{
- double alfa[ MaxLevel ];
- double alnqp;
-
- alfa[0] = 2.;
- for ( int i=1; i<u_level_; i++ )
- {
- alnqp = log( tds.Half[i+1] / tds.Half[i] );
- alfa[i] = 1. - alnqp * tds.Half[i] / ( tds.Half[i+1] - tds.Half[i]);
- }
-
- double geoph[ MaxLevel+1 ];
- geoph[u_level_] = 0.;
- for ( int i = u_level_-1; i > 0; i-- )
- {
- alnqp = log( tds.Half[i+1] / tds.Half[i] );
- geoph[i] = geoph[i+1] + cRD * Tv(i) * alnqp;
-
- tds.Height[i] = geoph[i+1] + alfa[i] * cRD * Tv(i);
- }
-
- tds.Height[0] = geoph[1] + alfa[0] * cRD * Tv(0);
-
- return;
-}
-
-//_____________________________________________________________________________
-//
-// Collect vertical coordinate coefficients
-//
-void
-MvTephiDataBase::vertCoordCoefs( int level )
-{
- currField_.vertCoordCoefs( C1_[level], C2_[level] );
-}
-
-//_____________________________________________________________________________
-
-int
-MvTephiDataBase::getLevel()
-{
- int lev = (int)currField_.level();
- if( lev > MaxLevel )
- throw MvException("Tephigrams: too many levels (source code needs to be modified)");
-
- return lev;
-}
-
-//=============================================================================
-// MvTephiDataHalfLevels
-//_____________________________________________________________________________
-
-void
-MvTephiDataHalfLevels::computeLevels( TepDataStrukt& tds )
-{
- for( int k=0; k <= d_level_; k++ ) //-- ECMWF level scheme with half levels
- {
- tds.Half[k] = currField_.pressureLevel( C1_[k], C2_[k], exp(LNSP_) );
- }
-
- for( int k=0; k<d_level_; k++)
- {
- tds.PRESS[k] = currField_.meanPressureLevel(C1_[k],C1_[k+1], C2_[k],C2_[k+1], exp(LNSP_) );
- tds.TD[k] = dewPoint( tds.PRESS[k], T_[k], Q_[k], pars_.dewPointFormulaType );
- }
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataHalfLevels::processPressure( int level, double val )
-{
- p_level_ = level;
- LNSP_ = val;
-}
-
-//=============================================================================
-// MvTephiDataFullLevels
-//_____________________________________________________________________________
-
-void
-MvTephiDataFullLevels::computeLevels( TepDataStrukt& tds )
-{
- for( int k=0; k < d_level_; k++)
- {
- tds.PRESS[k] = currField_.pressureLevel(C1_[k+1], C2_[k+1], exp(LNSP_) );
- tds.TD[k] = dewPoint( tds.PRESS[k], T_[k], Q_[k], pars_.dewPointFormulaType );
- tds.Half[k] = tds.PRESS[k]; //-- is this one really needed??? (041231/vk)
- }
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataFullLevels::processPressure( int level, double val )
-{
- if( level < 1 )
- level = 1; //-- Q&D check fix for New Zealand data
- p_level_ = level;
- LNSP_ = val;
-}
-
-//=============================================================================
-// MvTephiDataPressureLevels
-//_____________________________________________________________________________
-
-MvTephiDataPressureLevels::MvTephiDataPressureLevels( MvField& fieldToken
- , const MvTephiParams& pars )
- : MvTephiDataBase( fieldToken, pars )
-{
- for( int i=0; i<MaxLevel; ++i )
- {
- P_[i] = cFREE; //-- initialise to indicate free cell
- }
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataPressureLevels::collectValue( int p, int level, double y )
-{
- int levelInd = levelIndex( level );
- if( levelInd < min_level_ )
- min_level_ = levelInd;
-
- if( p == pars_.U_Field ) //-- collect parameter values
- {
- u_level_ = levelInd;
- U_[u_level_] = y;
- }
- else if( p == pars_.V_Field )
- {
- V_[ levelInd ] = y;
- }
- else if( p == pars_.Temp )
- {
- t_level_ = levelInd;
- T_[t_level_] = y;
- }
- else if( p == pars_.Dew )
- {
- d_level_ = levelInd;
- Q_[d_level_] = max(ZEPQMI,y);
- }
- else
- {
- ostringstream oss;
- oss << "Tephigrams: field contains unknown data, param=" << p;
-
- throw MvException( oss.str().c_str() );
- }
-}
-
-//_____________________________________________________________________________
-// levelIndex
-// Converts a pressure level value into an index to corresponding
-// pressure value in array P_. Add pressure into P_ if not found.
-//
-int
-MvTephiDataPressureLevels::levelIndex( int pressureLevel )
-{
- for( int i=0; i<MaxLevel; ++i )
- {
- if( P_[i] == pressureLevel )
- {
- return i;
- }
- else if( P_[i] == cFREE )
- {
- P_[i] = pressureLevel;
- p_level_ = i;
- return i;
- }
- }
-
- throw("Too many pressure levels, source code needs to be edited!");
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataPressureLevels::computeLevels( TepDataStrukt& tds )
-{
- for( int k=0; k <= d_level_; k++)
- {
- tds.Half[k] = (double)P_[k] * 100.0; //-- do we need Half[]???
- tds.PRESS[k] = (double)P_[k] * 100.0; //-- hPa -> Pa
- tds.TD[k] = dewPoint( tds.PRESS[k], T_[k], Q_[k], pars_.dewPointFormulaType );
- }
-}
-
-//_____________________________________________________________________________
-
-int
-MvTephiDataPressureLevels::getLevel()
-{
- int lev = (int)currField_.level();
- levelIndex( lev ); //-- forces index range check!
-
- return lev;
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataPressureLevels::vertCoordCoefs( int )
-{
- //-- not needed if pressure levels
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataPressureLevels::processPressure( int level, double val )
-{
- //-- not needed if pressure levels
-}
-
-//=============================================================================
-// MvTephiDataUkmoNDLevels
-//_____________________________________________________________________________
-
-MvTephiDataUkmoNDLevels::MvTephiDataUkmoNDLevels( MvField& fieldToken
- , const MvTephiParams& pars )
- : MvTephiDataBase( fieldToken, pars )
-{
- for( int i=0; i<MaxLevel; ++i )
- {
- P_[i] = cFREE; //-- initialise to indicate free cell
- }
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataUkmoNDLevels::processPressure( int level, double val )
-{
- p_level_ = level;
- P_[level-1] = val;
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataUkmoNDLevels::computeLevels( TepDataStrukt& tds )
-{
- for( int k=0; k <= d_level_; k++)
- {
- tds.Half[k] = P_[k];
- tds.PRESS[k] = P_[k];
- tds.TD[k] = dewPoint( tds.PRESS[k], T_[k], Q_[k], pars_.dewPointFormulaType );
- }
-}
-
-//_____________________________________________________________________________
-
-int
-MvTephiDataUkmoNDLevels::getLevel()
-{
- int lev2 = (int)currField_.level_L2(); //-- UKMO data: level value in second octet
- if( lev2 > MaxLevel )
- throw MvException("Too many levels (source code needs to be modified)");
-
- return lev2;
-}
-
-//_____________________________________________________________________________
-//
-// This is a (strongly modified) duplicate of MvTephiFrame::TGeopot
-//
-// - This is a Q&D code and should be checked by someone more familiar
-// with atmosphere physics formulas and different vertical coordinate
-// system discretizations! (vk/050113)
-//
-void
-MvTephiDataUkmoNDLevels::geopotential( TepDataStrukt& tds )
-{
- const double cStdSurfP = 101325.0;
-
- tds.Height[0] = log(2.0) * cRD * Tv(0) * log( cStdSurfP / P_[0] );
-
- double geopotPrev = tds.Height[0];
-
- for ( int i = 1; i < u_level_; ++i )
- {
- double myP = P_[i-1]; //-- ( P_[i] + P_[i-1] ) / 2.0;
- double myT = T_[i-1]; //-- ( T_[i] + T_[i-1] ) / 2.0;
- double myQ = Q_[i-1]; //-- ( Q_[i] + Q_[i-1] ) / 2.0;
-
- double lnqp = log( P_[i-1] / P_[i] );
- double alfa = 1.0 - lnqp * myP / ( P_[i-1] - P_[i] );
-
- tds.Height[i] = geopotPrev + cRD * Tv( myT, myQ ) * lnqp;
- geopotPrev = tds.Height[i];
- }
-
- return;
-}
-
-//_____________________________________________________________________________
-
-void
-MvTephiDataUkmoNDLevels::vertCoordCoefs( int )
-{
- //-- not needed if UKMO New Dynamics levels
-}
-
-//_____________________________________________________________________________
-//_____________________________________________________________________________
-//_____________________________________________________________________________
-//
-// Factory to create and return an object of the required tephidata class.
-//
-MvTephiDataBase* MvTephiDataFactory( MvField& f, MvTephiParams p )
-{
- const int cECMWF = 98;
-
- MvFieldExpander expa( f );
-
- if( f.centre() == cECMWF && f.isModelLevel() )
- {
- cout << "Factory: MvTephiDataHalfLevels" << endl;
- return new MvTephiDataHalfLevels( f, p ); //-- "standard" ECMWF data
- }
-
- if( f.vertCoordCoefPairCount() == 1 )
- {
- cout << "Factory: MvTephiDataFullLevels" << endl;
- return new MvTephiDataFullLevels( f, p ); //-- non-ECMWF data
- }
-
- if( f.isPressureLevel() )
- {
- cout << "Factory: MvTephiDataPressureLevels" << endl;
- return new MvTephiDataPressureLevels( f, p ); //-- pressure level data
- }
-
- if( f.levelType() == cML_UKMO_ND )
- {
- cout << "Factory: MvTephiDataUkmoNDLevels" << endl;
- return new MvTephiDataUkmoNDLevels( f, p ); //-- UKMO New Dynamics data
- }
-
- return 0; //-- unimplemented data
-}
-//_____________________________________________________________________________
diff --git a/src/PM_Tephigram/MvTephiData.h b/src/PM_Tephigram/MvTephiData.h
deleted file mode 100644
index 737c1e1..0000000
--- a/src/PM_Tephigram/MvTephiData.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-// MvTephiData.h - Dec2004/vk
-//
-// The purpose of these classes is to clean and simplify Tephigram
-// code. Note that this is partly a Q&D solution as some methods are
-// duplicated (with a simplified interface) from class MvTephiFrame.
-//
-// What is more, this class hierarchy made it much easier to add new
-// data types, like plain pressure levels and UKMO New Dynamics data.
-//
-
-#ifndef MVTEPHIDATA_H
-#define MVTEPHIDATA_H
-
-#include "MvTephiFrame.h"
-#include "MvTephiParams.h"
-
-//______________________________________________________________________
-// TepDataStrukt
-
-struct TepDataStrukt
-{
- double PRESS[MaxLevel+1];
- double Half[MaxLevel+1];
- double TD[MaxLevel];
- double Height[MaxLevel];
-};
-
-//______________________________________________________________________
-// MvTephiDataBase
-//
-// Abstract base class for different tephigram input data types
-//
-
-class MvTephiDataBase
-{
- private:
- MvTephiDataBase();
- MvTephiDataBase( MvTephiDataBase& );
-
- public:
- MvTephiDataBase( MvField& fieldToken, const MvTephiParams& pars );
- virtual ~MvTephiDataBase(){}
-
- void readOneSetOfFields( MvFieldSetIterator& iter );
- void generate( MvNetCDF& netcdf );
- MvField returnToken(){ return nextField_; }
-
- protected:
- virtual void computeLevels( TepDataStrukt& tds ) = 0;
- virtual void processPressure( int lev, double val ) = 0;
- virtual void vertCoordCoefs( int lev );
- virtual int getLevel();
- virtual void collectValue( int par, int lev, double val );
- virtual void geopotential( TepDataStrukt& tds );
-
- double getValueFromCurrentField();
- double dewPoint( double P, double T, double Q, const string& dewPointFormulaType );
- double Tv( int i ){ return Tv( T_[i], Q_[i] ); }
- double Tv( double T, double Q );
- string title();
- string generateKey( int par, int counter );
-
- protected:
- int counter_; // = 1;
- int t_level_; // = 0;
- int d_level_; // = 0;
- int u_level_; // = 0;
- int p_level_; // = 0;
- int min_level_;
-
- double T_[MaxLevel];
- double Q_[MaxLevel];
- double U_[MaxLevel];
- double V_[MaxLevel];
- double LNSP_;
-
- double C1_[MaxLevel];
- double C2_[MaxLevel];
-
- MvField currField_;
- MvField nextField_;
- MvTephiParams pars_;
-};
-
-//______________________________________________________________________
-// MvTephiDataHalfLevels
-// Class for ECMWF type level data
-
-class MvTephiDataHalfLevels : public MvTephiDataBase
-{
- public:
- MvTephiDataHalfLevels( MvField& fieldToken, const MvTephiParams& pars )
- : MvTephiDataBase( fieldToken, pars ){}
- virtual ~MvTephiDataHalfLevels(){}
-
- protected:
- virtual void computeLevels( TepDataStrukt& tds );
- virtual void processPressure( int lev, double val );
-};
-
-//______________________________________________________________________
-// MvTephiDataFullLevels
-// Class for "simple" level data
-
-class MvTephiDataFullLevels : public MvTephiDataBase
-{
- public:
- MvTephiDataFullLevels( MvField& fieldToken, const MvTephiParams& pars )
- : MvTephiDataBase( fieldToken, pars ){}
- virtual ~MvTephiDataFullLevels(){}
-
- protected:
- virtual void computeLevels( TepDataStrukt& tds );
- virtual void processPressure( int lev, double val );
-};
-
-//______________________________________________________________________
-// MvTephiDataPressureLevels
-// Class for data on pressure levels
-
-class MvTephiDataPressureLevels : public MvTephiDataBase
-{
- public:
- MvTephiDataPressureLevels( MvField& fieldToken, const MvTephiParams& pars );
- virtual ~MvTephiDataPressureLevels(){}
-
- protected:
- virtual void computeLevels( TepDataStrukt& tds );
- virtual void collectValue( int par, int lev, double val );
- virtual void vertCoordCoefs( int lev );
- virtual int getLevel();
- virtual void processPressure( int lev, double val );
-
- int levelIndex( int pressureLevel );
-
- private:
- int P_[MaxLevel];
-};
-
-//______________________________________________________________________
-// MvTephiDataUkmoNDLevels
-// Class for UKMO "New Dynamics" data
-
-class MvTephiDataUkmoNDLevels : public MvTephiDataBase
-{
- public:
- MvTephiDataUkmoNDLevels( MvField& fieldToken, const MvTephiParams& pars );
- virtual ~MvTephiDataUkmoNDLevels(){}
-
- protected:
- virtual void computeLevels( TepDataStrukt& tds );
- virtual void vertCoordCoefs( int lev );
- virtual void processPressure( int lev, double val );
- virtual int getLevel();
- virtual void geopotential( TepDataStrukt& tds );
-
- private:
- double P_[MaxLevel];
-};
-
-//______________________________________________________________________
-
-
-MvTephiDataBase* MvTephiDataFactory( MvField& f, MvTephiParams p );
-
-
-#endif
-
-
-
diff --git a/src/PM_Tephigram/MvTephiFrame.cc b/src/PM_Tephigram/MvTephiFrame.cc
deleted file mode 100644
index 77de758..0000000
--- a/src/PM_Tephigram/MvTephiFrame.cc
+++ /dev/null
@@ -1,741 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-#include "inc_iostream.h"
-
-#include <math.h>
-#include <stdarg.h>
-
-#include "Metview.h"
-#include "MvTephiFrame.h"
-#include "MvObs.h"
-#include "min_max_macros.h"
-
-extern int UniFlag;
-
-const double SQR2 = sqrt(2.);
-const string cMixedFormula( "MIXED_PHASE_0_TO_-23" );
-
-MvTephiFrame::MvTephiFrame(char *)
-{
- init();
-}
-
-void MvTephiFrame::init()
-{
- X1=Y1=X2=Y2=X3=Y3=X4=Y4=
- DT=DTN=TMM=PYL1=PXL1=ALFA=T3=
- PMN=PMX=TMN=TMX=XFLAG=
- RAT=XGPR= XGPL= YGPT= YGPBT= PXL3=
- ZXX= PXL= PYLT=ZXT= ZYT =PXL2= PYL2=
- PXP2= PYP2= PYL3= PXP3= PYP3=
- PXLT= PXPT= PYPT=
- HNUM= WFL= TRCH=
- GPT= GPB= ZYY= YGPB=PXP1= PYP1=
- RATX= RATY = 0.0;
-
- TMELT = 273.16;
- RD = 287.05;
- RV = 461.51;
- CPD = 1005.46;
-
- CHI = RD/CPD;
- EPS = RD/RV;
-
- //C1ES=610.78;
- restt =611.21; //-- RD correction code 021023/vk
-
- //C2ES=C1ES*RD/RV;
- r2es = restt*RD/RV;
-
- //C3LES=17.269;
- r3les = 17.502;
-
- //C4LES=35.86;
- r4les = 32.19;
-
- //C3IES=21.875;
- r3ies = 22.587;
-
- //C4IES=7.66;
- r4ies = -0.7;
-
- //C5LES=C3LES*(TMELT-C4LES);
- C5LES = r3les*(TMELT-r4les);
-
- VTMPC1= RV/RD-1.;
-}
-
-MvTephiFrame::~MvTephiFrame()
-{
-}
-
-bool MvTephiFrame::setFrame(double P1, double P2, double T1, double T2,
- double Wf)
-{
- PMN = 100*P1; PMX = 100*P2; TMN = T1+TMELT; TMX = T2+TMELT;
- XFLAG = Wf;
-
- /*
- 1. DEFINE THE TEPHIGRAM STRETCHING FACTOR
- THE TEPHIGRAM IS A (T,ALFA*LN(THE)) DIAGRAM, WHERE ALFA IS A
- NORMALISATION FACTOR. THIS CHOICE OF ALFA MAKES THE DISTANCE
- (LOG(THE(TMX))-LOG(THE(TMN))) EQUAL TO TMX-TMN.
- */
-
- ALFA=(TMX-TMN)/log(TMX/TMN);
- /*
- 2. DEFINE THE ASPECT RATIO OF THE TEPHIGRAM
-
- (TMN,PMX) WILL BE THE COORDINATES OF THE LEFT BOTTOM CORNER (X1,Y1)
- (TMX,PMX) WILL BE THE COORDINATES OF THE RIGHT BOTTOM CORNER (X2,Y2)
- (T3,PMN) WILL BE THE COORDINATES OF THE RIGHT BOTTOM CORNER (X3,Y3)
- (T3 IS TO BE FOUND SOLVING X3=X2 BY NEWTON'S METHOD)
- */
-
- double THE2,ZCONS,ZCN2;
-
- THE2=TMX*pow(100000./PMX,CHI);
- ZCONS=ALFA*log(THE2)+TMX;
- ZCN2=pow(100000./PMN,CHI);
-
- // SEED
-
- T3 = TMN;
-
- int not_found = 1;
-
- for ( int j=0 ; j<30 && not_found; j++)
- {
- double F,DF,T3N,THE3;
-
- THE3=T3*ZCN2;
- F=ZCONS-ALFA*log(THE3)-T3;
- DF=-1.-ALFA/T3;
- T3N = F/DF;
- T3 = T3 - T3N;
- if( fabs(T3N) < PREC ) not_found = 0;
- }
-
- if(not_found) return false;
-
- TTP2XY(T3,PMN,ALFA,X3,Y3);
- TTP2XY(TMN,PMX,ALFA,X1,Y1);
- TTP2XY(TMX,PMX,ALFA,X2,Y2);
- X4=X1; Y4=Y3;
-
- RAT=(Y3-Y2)/(X2-X1);
-
- /*
-
- C
- C |-------------------------------|
- C |T |
- C | |
- C | |
- C |-----------------------------------------|
- C |2 |
- C | |-------------------------------| |------------|
- C | |1 | |3 |
- C | | | | |
- C | | | | |
- C | | | | |
- C | | | | |
- C | | | | |
- C | | | | |
- C | | | | |
- C | |-------------------------------| |------------|
- C | |
- C |-----------------------------------------|
- C
- C 1 SUBPAGE FOR THE TEPHIGRAM STRICTU-SENSU
- C 2 SUBPAGE FOR THE TEPHIGRAM STRICTU-SENSU+LABELS
- C 3 SUBPAGE FOR THE WIND FLAG AREA
- C T TITLE-BOX AREA
- */
-
- // PRELIMINARY MAGICS SETTING
-
- // G.A Header("PAGE_FRAME") = "OFF";
- //G.A Header("PAGE_ID_LINE") = "OFF";
-
- // SET SUBPAGE LENGTHS AND POSITIONS AS A FUNCTION OF
- // THE PAGE SIZE AND THE RATIO FOUND IN 2.
-
- // THE FINAL PICTURE WILL BE THE MAXIMUM PICTURE FITTING IN THE PAGE
- // WITH THE TEPHIGRAM PART HAVING THE ASPECT RATIO FOUND IN 2.
-
- // XGPR, XGPL, YGPT, YGPBT ARE THE GAPS TO DEFINE SUBPAGE2
- XGPR=1.; XGPL=1.; YGPT=0.4; YGPB=0.8;
-
- PYLT=2.;PXL3=3.2;
-
- // SUBPAGE 1
- ZXX=PXL-XGPL-XGPR-PXL3;
- ZYY=PYL-YGPB-YGPT-PYLT;
- if (ZXX*RAT <= ZYY)
- {
- ZXT=ZXX; ZYT=RAT*ZXT;
- }
- else
- {
- ZYT=ZYY; ZXT=ZYT/RAT;
- }
-
- PXL1=ZXT; PYL1=ZYT; PXP1=XGPL; PYP1=YGPB;
-
- // RATIO TO CONVERT X UNITS IN PAPER (CM) UNITS
- RATX=PXL1/(X2-X1); RATY=PYL1/(Y3-Y2);
-
- // SUBPAGE 2
- PXL2=PXL1+XGPL+XGPR; PYL2=PYL1+YGPB+YGPT;
- PXP2=0.; PYP2=0.;
-
- //SUBPAGE 3
- PYL3=PYL1; PXP3=PXL2; PYP3=PYP1;
-
- // TITLE BOX
- PXLT=PXL1; PXPT=PXP1; PYPT=PYL2;
-
- // NUMBER HEIGHT
- HNUM=0.2;
-
- // WIND FLAG LENGTH
- WFL=PXL3/5.;
-
- // TEXT_REFERENCE_CHARACTER_HEIGHT
- TRCH=0.3;
-
-
- return true;
-}
-
-
-void MvTephiFrame::TGeopot(double* Half, double* T, double* Q, double* Height,
- int Nlev)
-{
-
- double alfa[MaxLevel];
- double alnqp;
-
-
- alfa[0] = 2.;
- int i;
- for ( i=1; i<Nlev; i++)
- {
- alnqp = log( Half[i+1]/Half[i] );
- alfa[i] = 1.-alnqp*Half[i]/( Half[i+1] - Half[i]);
- }
- double geoph[MaxLevel+1];
- geoph[Nlev] = 0.;
- for ( i = Nlev-1; i>0; i--)
- {
- alnqp = log( Half[i+1]/Half[i] );
- geoph[i] = geoph[i+1] + RD*T[i]*(1.+VTMPC1*Q[i])*alnqp;
- Height[i] = geoph[i+1] + alfa[i]*RD*T[i]*(1.+VTMPC1*Q[i]);
- }
- Height[0] = geoph[1] + alfa[0]*RD*T[0]*(1.+VTMPC1*Q[0]);
-
-
- return;
-}
-
-double MvTephiFrame::DewPoint(double P, double T, double Q, const string& dewPointFormulaType )
-{
- double ZCVM3,ZCVM4;
-
- if( dewPointFormulaType == cMixedFormula )
- {
- double rtwat = TMELT;
- double rtice = TMELT - 23.0;
-
- double foealfa=min(1.,pow(((max(rtice,min(rtwat,T))-rtice)/(rtwat-rtice)),2.0) );
- //cout << "foealfa = " << foealfa << ", \tT = " << T << endl;
-
- ZCVM3 = foealfa*r3les + (1.-foealfa)*r3ies;
- ZCVM4 = foealfa*r4les + (1.-foealfa)*r4ies;
- }
- else
- {
- if( T > TMELT )
- {
- ZCVM3=r3les;
- ZCVM4=r4les;
- }
- else
- {
- ZCVM3=r3ies;
- ZCVM4=r4ies;
- }
- }
-
- // ZFRAC=log(P*Q/(C2ES*(1.+VTMPC1*Q)))/ZCVM3;
- double ZFRAC=log(P*Q/(r2es*(1.+VTMPC1*Q)))/ZCVM3;
-
- return (TMELT-ZFRAC*ZCVM4)/(1.-ZFRAC);
-}
-
-
-double TNORM(double v,int& ndec)
-{
- double s = 1.0, d = 5.0;
-
- ndec = 0;
- while( v < s*0.75)
- {
- s = s/10.0; ndec++;
- }
- // v >= 0.75*SCAL
-
- while( v > s*7.5 ) s=s*10.0;
- // v <= 7.5*SCAL
-
- if( v <= 3.5*s )
- {
- d = 2.;
- if( v <= 1.5*s ) d = 1.0;
- }
- return d*s;
-}
-
-void MvTephiFrame::TXP2TY(double X, double P, double ALFA, double& T,double& Y)
-{
- /*
-
- PURPOSE.
- --------
-
- OBTAINS T,Y GIVEN X,P ((X,Y) ARE TEPHIGRAM COORDINATES)
-
- METHOD.
- -------
-
- THE BASIC COORDINATES ARE DEFINED AS
-
- XT=T
- YT=ALFA*LOG(THE)
-
- THE ROTATED (FINAL) COORDINATES ARE DEFINED AS
- (45 DEGREES CLOCKWISE ROTATION)
-
- X=(YT+XT)/SQRT(2.)
- Y=(YT-XT)/SQRT(2.)
-
- INPUT.
- -------
-
- X X COORDINATE OF THE ROTATED TEPHIGRAM
- P PRESSURE (HPA) DIMENSION NLEV
- ALFA NORMALISATION FACTOR FOR THE LOG(THE) AXIS
-
-
- OUTPUT.
- -------
-
- T TEMPERATURE (KELVIN) DIMENSION NLEV
- Y Y COORDINATE OF THE ROTATED TEPHIGRAM
-
- */
-
- double PREC = 1.E-04;
- //double ZFAC=1./SQR2;
- double TF=TMELT;
- double ZC1=-X*SQR2;
- double ZC2=pow(100000./P,CHI);
-
-
- int not_found=1;
- for(int j=0; j<50 && not_found; j++)
- {
- double F,DF,TFN,THE;
-
- THE=TF*ZC2;
-
- //-- temporary Q&D fix against negative logs (010718/vk)
- if( THE <= 0 )
- {
- break;
- cout << "TXP2TY: log(" << THE
- << ") [X=" << X
- << ", P=" << P
- << ", ALFA=" << ALFA
- << "]" << endl;
- break;
- }
-
- F=ZC1+ALFA*log(THE)+TF;
- DF=1.+ALFA/TF;
- TFN=F/DF;
- TF = TF - TFN;
- if( fabs(TFN) < PREC ) not_found = 0;
- }
-
- if(not_found)
- {
- T = Y = 0;
- }
- else
- {
- T = TF;
- Y = X-SQR2*T;
- }
-
- return;
-
-}
-
-void MvTephiFrame::TYQ2TP(double Y, double Q, double ALFA, double& T,double& P)
-{
- /*
- PURPOSE.
- --------
-
- OBTAINS Y,Q GIVEN T,P ((X,Y) ARE TEPHIGRAM COORDINATES)
-
- METHOD.
- -------
-
- THE BASIC COORDINATES ARE DEFINED AS
-
- XT=T
- YT=ALFA*LOG(THE)
-
- THE ROTATED (FINAL) COORDINATES ARE DEFINED AS
- (45 DEGREES CLOCKWISE ROTATION)
-
- X=(YT+XT)/SQRT(2.)
- Y=(YT-XT)/SQRT(2.)
-
- INPUT.
- ------
-
- Y Y COORDINATE OF THE ROTATED TEPHIGRAM
- Q SATURATION MIXING RATIO OVER WATER (KG/KG)
- ALFA NORMALISATION FACTOR FOR THE LOG(THE) AXIS
-
- OUTPUT.
- -------
-
- T TEMPERATURE (KELVIN) DIMENSION NLEV
- P PRESSURE (HPA) DIMENSION NLEV
-
- */
-
- double PREC = 1.E-04;
- double ZC1=(1.-EPS)+EPS/Q;
- double ZC2=SQR2*Y;
- double TF=TMELT,PS;
-
- int not_found=1;
-
- for(int j=0; j<50 && not_found; j++)
- {
- double ES,THE,F,DF,TFN;
-
- //ES=C1ES*exp(C3LES*(TF-TMELT)/(TF-C4LES));
- ES=restt*exp(r3les*(TF-TMELT)/(TF-r4les));
- PS=ZC1*ES;
- THE=TF*pow(100000./PS,CHI);
- F=ALFA*log(THE)-TF-ZC2;
- //DF=ALFA/TF-1.-ALFA*ZC1*ES*CHI*C5LES/(pow(TF-C4LES,2)*PS);
- DF=ALFA/TF-1.-ALFA*ZC1*ES*CHI*C5LES/(pow(TF-r4les,2)*PS);
- TFN = F/DF;
- TF = TF - TFN;
- if( fabs(TFN) < PREC ) not_found = 0;
- }
-
- if(not_found)
- {
- T = P = 0;
- }
- else
- {
- T = TF;
- P = PS;
- }
-
- return;
-}
-
-void MvTephiFrame::TTP2XY(double T, double P, double ALFA, double& X,double& Y)
-{
- /*
- DEFINES THE TEPHIGRAM COORDINATES, FROM (T,P) COORDINATES
-
- METHOD,
- THE BASIC COORDINATES ARE DEFINED AS
-
- XT=T
- YT=ALFA*LOG(THE)
-
- THE ROTATED (FINAL) COORDINATES ARE DEFINED AS
- (45 DEGREES CLOCKWISE ROTATION)
- X=(YT+XT)/SQRT(2.)
- Y=(YT-XT)/SQRT(2.)
-
-
- INPUT.
-
- T TEMPERATURE (KELVIN) DIMENSION NLEV
- P PRESSURE (HPA) DIMENSION NLEV
- ALFA NORMALISATION FACTOR FOR THE LOG(THE) AXIS
-
- OUTPUT.
- X X COORDINATE OF THE ROTATED TEPHIGRAM
- Y Y COORDINATE OF THE ROTATED TEPHIGRAM
-
-
- */
-
-
- double ZFAC, THE;
-
- ZFAC=1./SQR2;
- THE= ALFA*(log(T) + CHI*log(100000./P));
-
- X = (THE+T)*ZFAC;
- Y = (THE-T)*ZFAC;
- X = T-273.15;
- Y = P/100;
- return;
-}
-
-void MvTephiFrame::Metadata(int backGround, MvNcVar *var, const char* title)
-{
- // Sets the values for a later call to draw the
- // tephigram background.
-
- var->addAttribute("TEPHI_PRESSURE_TOP", PMN );
- var->addAttribute("TEPHI_PRESSURE_BOTTOM", PMX);
- var->addAttribute("TEPHI_TEMP_MIN", TMN );
- var->addAttribute("TEPHI_TEMP_MAX",TMX);
- var->addAttribute("TEPHI_AXIS_LABEL",backGround);
- var->addAttribute("MV_VERB", "CURVE");
- if ( title ) {
- var->addAttribute("MV_TITLE", title);
- var->addAttribute("title", title);
- }
-
-}
-
-void MvTephiFrame::TSonde(double* PRES, double* TEMP, int nMin, int nMax,
- int THIK, char* STYLE, const char* COL, MvNcVar *x, MvNcVar *p)
-{
- // Add the curve values to netcdf variables
- int NPT = 0;
- int cMax = nMax;
- if( nMin == 0 ) //-- fix for pressure level data
- ++cMax;
- double *CRVX = new double[cMax];
- double *CRVY = new double[cMax];
-
- // Add graph data to variable. Prefix any fields that should be passed on to
- // MagicsEngine with _MAGICS_. PlotMod will strip off the prefix and pass
- // the rest on to MagicsEngine.
- x->addAttribute("_MAGICS_GRAPH_MISSING_DATA_MODE", "DROP" );
- x->addAttribute("_MAGICS_GRAPH_MISSING_DATA_STYLE", STYLE );
- x->addAttribute("_MAGICS_GRAPH_MISSING_DATA_COLOUR", COL );
- x->addAttribute("_MAGICS_GRAPH_MISSING_DATA_THICKNESS", THIK );
- x->addAttribute("_MAGICS_GRAPH_LINE_COLOUR", COL );
- x->addAttribute("_MAGICS_GRAPH_LINE_STYLE", STYLE );
- x->addAttribute("_MAGICS_GRAPH_LINE_THICKNESS", THIK );
- x->addAttribute("_MAGICS_GRAPH_CURVE_METHOD", "STRAIGHT" );
-
- int iMax = 0;
- for ( int i=0; i<cMax; i++, NPT++)
- {
- if( i >= (nMin-1) ) //-- levels start from 1..., indices 0...
- {
- TTP2XY(TEMP[i],PRES[i],ALFA,CRVX[iMax],CRVY[iMax]);
- ++iMax;
- }
- }
-
- // Add the data to the netcdf variables
- x->put(CRVX, 1, iMax);
- if ( p)
- p->put(CRVY, 1, iMax);
-
- delete [] CRVX;
- delete [] CRVY;
-}
-
-void MvTephiFrame::TFlag(double* PRES, double* TEMP, double* U, double* V, double* HEIGHT,
- int KPT, const char* COLS, MvNetCDF &netcdf,
- const string& PressKey,const string &TempKey,
- const string& WindKey)
-{
- /*
- PURPOSE.
- -------
-
- GIVEN N POINTS DEFINED BY THEIR TEMPERATURE (KELVIN) AND
- PRESSURE (PA), HEIGHT (M) AND WIND COMPONENTS (M/S) THIS
- ROUTINE DRAWS THE CORRESPONDING WIND FLAGS ON A TEPHIGRAM
-
-
- INPUT.
- -----
-
- PRES PRESSURE (PA)
- TEMP TEMPERATURE (K)
- U ZONAL WIND COMPONENT (M/S)
- V MERIDIONAL WIND COMPONENT (M/S)
- HEIGHT HEIGHT (M)
- KPT NUMBER OF POINTS
- COLS Colour of Symbols (Numbers) and Flags
-
-
- NOTE.
- ----
-
- PRESSURE VALUES ARE ASSUMED IN DECREASING ORDER, THE FIRST VALUE
- BEING GREATER THAN PMIN.
- POINTS OUTSIDE THE TEPHIGRAM BOUNDARIES ARE NOT PLOTTED.
-
- */
-
- vector<double> vecpres_x,vecpres_y, vecpres_values;
- vector<double> vectemp_x,vectemp_y, vectemp_values;
- vector<double> vecwind_x,vecwind_y, vecwind_speed,vecwind_dir;
-
- double Rad = 180./3.14159;
- int nl = KPT/MaxLabels;
- if( nl == 0) nl = 1;
-
- for ( int i=0; i<KPT; i++)
- {
- double Direction, Speed, TTERM, TTR, CRVY;
-
- TXP2TY(X2,PRES[i],ALFA,TTR,CRVY);
-
- if( CRVY >= Y1 && CRVY <= Y4)
- {
- //-- I hope this comparision works... (vk 980121)
- if( HEIGHT[i] != (double)kBufrMissingValue )
- {
- TTR = HEIGHT[i]/G;
- vecpres_values.push_back( floor( TTR+0.5 ) );
- vecpres_x.push_back(X1+(X2-X1)/6.);
- vecpres_y.push_back( CRVY );
- }
- if( TEMP[i] != (double)kBufrMissingValue )
- {
- TTERM = TEMP[i]-TMELT+0.5;
- vectemp_values.push_back( floor( TTERM+0.5 ) );
- vectemp_x.push_back( X1+(X2-X1)/6.*5.);
- vectemp_y.push_back( CRVY );
- }
- if( U[i] != (double)kBufrMissingValue )
- {
- Speed = sqrt(pow(U[i],2) + pow(V[i],2));
- if ( Speed < 0.2) Speed = 0.2;
- Direction = -90.0-atan2(V[i],U[i])*Rad ;
- vecwind_speed.push_back(Speed);
- vecwind_dir.push_back(Direction);
- vecwind_x.push_back( X1+(X2-X1)/2.);
- vecwind_y.push_back( CRVY );
- }
- }
- }
-
- // Generate NetCDF variables.
- MvNcVar *pres = netcdf.addVariable(PressKey,ncDouble,3,(long)vecpres_x.size() );
- pres->addAttribute("MV_VERB","PSYMB");
- pres->addAttribute("_MAGICS_SYMBOL_POSITION_MODE","GRAPH");
- pres->addAttribute("_MAGICS_SYMBOL_COLOUR",COLS);
- pres->addAttribute("_MAGICS_SYMBOL_HEIGHT",0.2);
- pres->addAttribute("_MAGICS_SYMBOL_FORMAT","(I8)");
- pres->addAttribute("_MAGICS_SYMBOL_DISTANCE_APART",0.2);
- pres->addAttribute("_MAGICS_SYMBOL_TYPE","NUMBER");
-
- pres->addAttribute("_REQUEST_NAMES",
- "SYMBOL_INPUT_X_POSITION/SYMBOL_INPUT_Y_POSITION/SYMBOL_INPUT_NUMBER_LIST");
- AddAttributes(pres,PressKey);
-
- MvNcVar *temp = netcdf.addVariable(TempKey,ncDouble,3,(long)vectemp_x.size());
- temp->addAttribute("MV_VERB","PSYMB");
- temp->addAttribute("_MAGICS_SYMBOL_POSITION_MODE","GRAPH");
- temp->addAttribute("_MAGICS_SYMBOL_COLOUR",COLS);
- temp->addAttribute("_MAGICS_SYMBOL_HEIGHT",0.2);
- temp->addAttribute("_MAGICS_SYMBOL_DISTANCE_APART",0.2);
- temp->addAttribute("_MAGICS_SYMBOL_TYPE","NUMBER");
- temp->addAttribute("_REQUEST_NAMES",
- "SYMBOL_INPUT_X_POSITION/SYMBOL_INPUT_Y_POSITION/SYMBOL_INPUT_NUMBER_LIST");
- AddAttributes(temp,PressKey);
-
- MvNcVar *wind = netcdf.addVariable(WindKey,ncDouble,4,(long)vecwind_x.size());
- wind->addAttribute("MV_VERB","PSYMB");
- wind->addAttribute("_MAGICS_SYMBOL_POSITION_MODE","GRAPH");
- wind->addAttribute("_MAGICS_SYMBOL_TYPE","WIND");
- wind->addAttribute("_MAGICS_WIND_FLAG_LENGTH",0.5);
- //wind->addAttribute("_MAGICS_WIND_FLAG_COLOUR",COLF);
- wind->addAttribute("_MAGICS_SYMBOL_COLOUR",COLS);
- wind->addAttribute("_MAGICS_WIND_FIELD_TYPE", "FLAGS");
- wind->addAttribute("_MAGICS_SYMBOL_WIND_ORIGIN_MARKER","ON");
- wind->addAttribute("_REQUEST_NAMES",
- "SYMBOL_INPUT_X_POSITION/SYMBOL_INPUT_Y_POSITION/SYMBOL_INPUT_WIND_DIRECTION/SYMBOL_INPUT_WIND_SPEED");
- AddAttributes(wind,WindKey);
-
-
- // Now the header is written, add the data.
- pres->put(vecpres_x,1,(long)vecpres_x.size());
- pres->setCurrent(1); pres->put(vecpres_y,1,(long)vecpres_y.size());
- pres->setCurrent(2); pres->put(vecpres_values,1,(long)vecpres_values.size());
-
- temp->put(vectemp_x,1,(long)vectemp_x.size());
- temp->setCurrent(1); temp->put(vectemp_y,1,(long)vectemp_y.size());
- temp->setCurrent(2); temp->put(vectemp_values,1,(long)vectemp_values.size());
-
- wind->put(vecwind_x,1,(long)vecwind_x.size());
- wind->setCurrent(1); wind->put(vecwind_y,1,(long)vecwind_y.size());
- wind->setCurrent(2); wind->put(vecwind_dir,1,(long)vecwind_dir.size());
- wind->setCurrent(3); wind->put(vecwind_speed,1,(long)vecwind_speed.size());
-}
-
-void MvTephiFrame::generateKey(string &str,int par,const char *date,const char *time,
- const char *step, const char *expver,int counter)
-{
- // Do it with good old sprintf pPPPYYYYMMDDHHmmSSSSVVVV_N
- //char key[40];
- //sprintf(key,"%03d%08s%04s%04s%04s_%d",par,date,time,step,expver,counter);
- //str = key;
-
- // But man page says "behaviour of %04s is undefined...", and indeed:
- // - on SGI leading zeros are printed
- // - on g++ leading spaces are printed => NetCDF key error!
- // thus let us try smart new iostreams:
- // (Should we already start using standard stringstreams?)
-
- char key[40];
- ostrstream oss( key, sizeof( key ) );
- oss << setfill( '0' )
- << "p"
- << setw( 3 ) << par
- << setw( 8 ) << date
- << setw( 4 ) << time
- << setw( 4 ) << step
- << setw( 4 ) << ( expver ? expver : "1" )
- << "_" << counter
- << ends;
-
-// cout << " Key " << key << endl;
- str = key;
-}
-void MvTephiFrame::AddAttributes(MvNcVar *var,const string &key)
-{
- // Split the string back into individual components.
- var->addAttribute("PARAM",key.substr(1,3).c_str());
- var->addAttribute("DATE",key.substr(4,8).c_str());
- var->addAttribute("TIME",key.substr(12,4).c_str());
- var->addAttribute("STEP",key.substr(16,4).c_str());
- var->addAttribute("EXPVER",key.substr(20,4).c_str());
-
-}
-
diff --git a/src/PM_Tephigram/MvTephiFrame.h b/src/PM_Tephigram/MvTephiFrame.h
deleted file mode 100644
index 5bec8c3..0000000
--- a/src/PM_Tephigram/MvTephiFrame.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-// -*-C++-*-
-// Header file for PlotMod Tephigram application.
-#ifndef MVTEPHIFRAME_H
-#define MVTEPHIFRAME_H
-
-#include "MvNetCDF.h"
-
-double TNORM(double, int&);
-
-const double Pi = 3.14159265;
-const double G = 9.80665;
-const double PXL = 29.7;
-const double PYL = 29.7;
-const double PREC = 1.0e-8;
-const double ZEPQMI = 1.0e-12;
-const double EPX = 1.7e38 -1.;
-
-const int MaxLevel = 100;
-const int MaxLabels = 10;
-
-//int U_Field = 131;
-//int V_Field = 132;
-//int Temp = 130;
-//int Dew = 133;
-//int LnPress = 152;
-
-#define max(A,B) ((A) >(B) ? (A) : (B))
-
-class MvTephiFrame
-{
- protected:
-
- double RD,CPD,CHI,TMELT,RV,EPS, //-- C1ES, C2ES, C3LES, C4LES,
- C5LES,VTMPC1, //-- C3IES, C4IES,
- X1,Y1,X2,Y2,X3,Y3,X4,Y4,
- DT,DTN,TMM,PYL1,PXL1,ALFA,T3,
- PMN,PMX,TMN,TMX,XFLAG,
- RAT,XGPR, XGPL, YGPT, YGPBT, PXL3,
- ZXX, PXL, PYLT,ZXT, ZYT ,PXL2, PYL2,
- PXP2, PYP2, PYL3, PXP3, PYP3,
- PXLT, PXPT, PYPT,
- HNUM, WFL, TRCH,
- GPT, GPB, ZYY, YGPB,PXP1, PYP1,
- RATX, RATY;
-
- double restt; //=611.21
- double r2es; //=restt*rd/rv
- double r3les; //=17.502
- double r4les; //=32.19
- double r3ies; //=22.587
- double r4ies; //=-0.7
-
-
- void init();
-
-
- public:
- MvTephiFrame(char* xx = NULL);
- ~MvTephiFrame();
- void generateKey(string&,int,const char *,const char *,const char *,const char *,int);
-
- void Metadata(int, MvNcVar *, const char* title );
- void AddAttributes(MvNcVar *var,const string &key);
-
- void TSonde(double*, double*, int, int, int, char*,
- const char*,MvNcVar *x, MvNcVar *p=0);
-
- void TFlag(double*,double*,double*,double*,double*,int,
- const char*, MvNetCDF&, const string&, const string&,
- const string&);
-
- double DewPoint(double, double, double, const string& );
- bool setFrame(double, double, double, double,double );
- void TGeopot(double*,double*,double*,double*,int);
- void TYQ2TP(double,double,double,double&,double&);
- void TTP2XY(double,double,double,double&,double&);
- void TXP2TY(double,double,double,double&,double&);
-};
-
-
-#endif
diff --git a/src/PM_Tephigram/MvTephiParams.cc b/src/PM_Tephigram/MvTephiParams.cc
deleted file mode 100644
index 93ecd80..0000000
--- a/src/PM_Tephigram/MvTephiParams.cc
+++ /dev/null
@@ -1,146 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-// MvTephiParams.cc - Nov2003/vk
-
-#include "MvTephiParams.h"
-
-
-MvTephiParams::MvTephiParams( const MvRequest& in )
- :ok_( true )
- ,backGround( 1 )
- ,lat2( 0.0 )
- ,lon2( 0.0 )
- ,pointType( eInterpolated )
-{
-/*
- T1 = in("MINIMUM_TEMPERATURE");
-
- T2 = in("MAXIMAL_TEMPERATURE");
- P2 = in("BOTTOM_PRESSURE");
- P1 = in("TOP_PRESSURE");
-
-
- if( strcmp(in("BACKGROUND"),"ON") == 0 )
- backGround = 0;
-*/
-
-T1 = -40;
-T2 = 40;
- P2 = 1020;
- P1 = 100;
- backGround = 1;
-
- MvRequest datareq = in; //-- get DATA subrequest
- // in.getValue(datareq,"DATA");
-
-
- if( (const char*)datareq("DEW_POINT_FORMULATION") )
- {
- dewPointFormulaType = (const char*)datareq("DEW_POINT_FORMULATION");
- }
-
- formulaPrintName = dewPointFormulaType;
- for( int it=0; it < formulaPrintName.length(); ++it )
- {
- char cc = formulaPrintName[it];
- if( cc == '_' )
- formulaPrintName[it] = ' ';
- else
- formulaPrintName[it] = tolower(cc);
- }
-// cout << "DEW_POINT_FORMULATION = " << dewPointFormulaType.c_str() << endl;
-
- if( (const char*)datareq("LINE_COLOUR") )
- {
- line_colour = (const char*)datareq("LINE_COLOUR");
- }
- line_thick = datareq("LINE_THICKNESS");
- if( (const char*)datareq("LINE_STYLE") )
- {
- if ( strcmp((const char*)datareq("LINE_STYLE"),"DEFAULT") )
- {
- line_style_temp = (const char*)datareq("LINE_STYLE");
- line_style_dew = (const char*)datareq("LINE_STYLE");
- }
- else
- {
- line_style_temp = "SOLID";
- line_style_dew = "DASH";
- }
- }
- else
- {
- line_style_temp = "SOLID";
- line_style_dew = "DASH";
- }
-
- if( (const char*)datareq("FLAG_COLOUR") )
- {
- flag_colour = (const char*)datareq("FLAG_COLOUR");
- }
-
- //-- get GRIB parameter numbers
- const char* p;
- U_Field = (p=datareq( "U_WIND_PARAM" )) ? atol(p) : 131;
- V_Field = (p=datareq( "V_WIND_PARAM" )) ? atol(p) : 132;
- Temp = (p=datareq( "TEMPERATURE_PARAM" )) ? atol(p) : 130;
- Dew = (p=datareq( "SPECIFIC_HUMIDITY_PARAM" )) ? atol(p) : 133;
- LnPress = (p=datareq( "LNSP_PARAM" )) ? atol(p) : 152;
-//cout << U_Field << ", " << V_Field << ", " << Temp << ", " << Dew << ", " << LnPress << endl;
-
-
- MvRequest station; //-- get STATION subrequest
- datareq.getValue( station, "STATION" );
-
- lat = station( "LATITUDE" );
- lon = station( "LONGITUDE" );
-
- Wf = 0.; //-- constant or a variable???????
-
-
- //-- check background params
- if( (T1 == T2) || (P1 == P2) )
- {
- ok_ = false;
- errorMsg_ = "Tephigrams: Invalid Parameters (Temperature/Pressure)..";
- return;
- }
- if( T1 > T2 )
- {
- double tmp = T2; T2 = T1; T1 = tmp;
- errorMsg_ = "Tephigrams: Minimun Temperature > Maximum...";
- }
- if( P1 > P2 )
- {
- double tmp = P2; P2 = P1; P1 = tmp;
- errorMsg_ = "Tephigrams: Top Pressure > Bottom...";
- }
-
-
- //-- check point type
- if( strcmp( datareq("POINT"), "NEAREST" ) == 0 )
- {
- pointType = eGridPoint;
- }
- else if( strcmp(datareq("POINT"), "AREA_AVERAGE" ) == 0 )
- {
- pointType = eAreaAverage;
- datareq.getValue( lat, "AREA", 0 ); //-- n
- datareq.getValue( lon, "AREA", 1 ); //-- w
- datareq.getValue( lat2, "AREA", 2 ); //-- s
- datareq.getValue( lon2, "AREA", 3 ); //-- e
- }
-
-}
-
-MvTephiParams::~MvTephiParams()
-{
- //--free( line_colour );
-}
diff --git a/src/PM_Tephigram/MvTephiParams.h b/src/PM_Tephigram/MvTephiParams.h
deleted file mode 100644
index e146d3a..0000000
--- a/src/PM_Tephigram/MvTephiParams.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-// MvTephiParams.h - Nov2003/vk
-//
-// Hide extracting and checking of input request
-// parameters - to make Tephigrams.cc more readable!
-//
-// Q&D struct with all member data directly accessible!
-//
-
-#ifndef MVTEPHIPARAM_H
-#define MVTEPHIPARAM_H
-
-#include <string>
-#include "Metview.h"
-
-
-enum EPointType { eGridPoint, eInterpolated, eAreaAverage };
-
-
-struct MvTephiParams
-{
- private:
- MvTephiParams(); //-- not allowed!
-
- public:
- MvTephiParams( const MvRequest& in );
- ~MvTephiParams();
-
- public:
- bool ok_;
- double T1;
- double T2;
- double P1;
- double P2;
- int backGround;
- string dewPointFormulaType;
- string formulaPrintName;
- string line_colour;
- int line_thick;
- string line_style_temp;
- string line_style_dew;
- string flag_colour;
- int U_Field;
- int V_Field;
- int Temp;
- int Dew;
- int LnPress;
- double lat;
- double lon;
- double lat2;
- double lon2;
- double Wf;
- EPointType pointType;
-
- string errorMsg_;
-};
-
-
-#if 0
-struct MvTephiData
-{
- double T;
- double Q;
- double PRESS;
- double Half;
- double TD;
- double U;
- double V;
- double Height;
-};
-#endif
-
-
-#endif
diff --git a/src/PM_Tephigram/Tephigrams.cc b/src/PM_Tephigram/Tephigrams.cc
deleted file mode 100644
index 00cca1c..0000000
--- a/src/PM_Tephigram/Tephigrams.cc
+++ /dev/null
@@ -1,500 +0,0 @@
-/***************************** LICENSE START ***********************************
-
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
- of the Apache License version 2.0. In applying this license, ECMWF does not
- waive the privileges and immunities granted to it by virtue of its status as
- an Intergovernmental Organization or submit itself to any jurisdiction.
-
- ***************************** LICENSE END *************************************/
-
-#include "inc_iostream.h"
-#include "MvException.h"
-
-#include <math.h>
-
-#include "Metview.h"
-#include "MvTephiFrame.h"
-#include "MvTephiParams.h"
-#include "MvTephiData.h"
-#include "Cached.h"
-#include "MvObs.h"
-
-static Cached GRIB("GRIB");
-static Cached BUFR("BUFR");
-
-//________________________________________________________________________
-
-class BufrTephigram : public MvService {
-protected:
- BufrTephigram(const char* kw) : MvService(kw) {};
-public:
- BufrTephigram() : MvService("PM_BUFR_TEPHI") {};
- void serve(MvRequest&,MvRequest&);
-protected:
- bool getIdent(MvRequest& station, MvObsSetIterator& iter);
- bool getLocation(MvRequest& station, MvObsSetIterator& iter);
-protected:
- int Temp;
- int Dew;
- int U_Field;
-};
-//________________________________________________________________________
-
-class GribTephigram : public MvService {
-protected:
- GribTephigram(const char* kw) : MvService(kw) {};
- void Grib_Interface(MvRequest&,MvRequest&,MvRequest&);
-public:
- GribTephigram() : MvService("PM_GRIB_TEPHI") {};
- void serve(MvRequest&,MvRequest&);
-protected:
-#if 0
- int U_Field;
- int V_Field;
- int Temp;
- int Dew;
- int LnPress;
-#endif
-};
-//________________________________________________________________________
-
-class OldGribTephigram : public GribTephigram {
-public:
- OldGribTephigram() : GribTephigram("PM_PRE19950404_GRIB_TEPHI") {};
- void serve(MvRequest&,MvRequest&);
-};
-//________________________________________________________________________
-
-
-
-void GribTephigram::serve( MvRequest& in, MvRequest& out )
-{
- cout << "\nin GribTephigram::serve...\n" << endl;
- cout << "-------- request in ------" << endl;
- in.print();
- cout << "ACTION-->" << string(in("_ACTION")) << endl;
- cout << "-------- end of request in ------" << endl;
-
- MvRequest datareq;
- in.getValue(datareq,"DATA");
-
- MvRequest grib; //-- T & LNSP originate from spherical harmonics
- in.getValue( grib, "DATA_1" );
- MvFieldSet fs( grib );
-
- MvRequest grib2; //-- Q originates from Gaussian grid
- in.getValue( grib, "DATA_2" );
- MvFieldSet fs2( grib );
-
- for( int i=0; i<fs2.countFields(); ++i ) //-- merge fieldsets
- fs += fs2[ i ];
-
- MvRequest data_in = fs.getRequest();
- Grib_Interface( in, data_in, out );
-}
-//________________________________________________________________________
-
-void OldGribTephigram::serve( MvRequest& in, MvRequest& out )
-{
- MvRequest data_in;
- MvRequest datareq;
- in.getValue(datareq,"DATA");
-
- datareq.getValue( data_in, "OLDDATA" );
-
- Grib_Interface( in, data_in, out );
-}
-//________________________________________________________________________
-
-void GribTephigram::Grib_Interface( MvRequest& in
- , MvRequest& data_in
- , MvRequest& out )
-{
- MvTephiParams pars(in);
- if( pars.errorMsg_.length() > 0 )
- {
- int err = pars.ok_ ? 0 : 1;
- setError( err, pars.errorMsg_.c_str() );
- if( err )
- return; //-- DO NOTHING!!!!!!!!!!!!!!!!!
- }
-
- string name = marstmp(); //-- Open netcdf file for writing the results
-
- MvNetCDF netcdf(name,'w');
-
-
- MvFieldSet fs( data_in );
- MvFieldSetIterator iter( fs );
-
- iter.sort("STEP");
- iter.sort("TIME");
- iter.sort("DATE");
-
- MvField firstField = iter();
- while( firstField ) //-- loops dates, i.e. tephigram plots
- {
- MvTephiDataBase* tep = MvTephiDataFactory( firstField, pars );
- if( ! tep )
- {
- setError( 13, "Tephigrams: unimplemented input field level type!" );
- return;
- }
-
- try
- {
- tep->readOneSetOfFields( iter );
- tep->generate( netcdf );
- }
- catch( MvException& e )
- {
- cerr << "Exception caught: " << e.what() << endl;
- setError( 13, e.what() );
- return;
- }
-
- firstField = tep->returnToken();
-
- delete tep;
- }
-
- MvRequest cdfreq("NETCDF");
- cdfreq("PATH") = name.c_str();
- out = out + cdfreq;
-
- if ( (const char *)in("_NAME") )
- out("_NAME") = in("_NAME");
-
- out.print();
- return;
-}
-//____________________________________________________________________________
-
-bool BufrTephigram::getIdent(MvRequest& station, MvObsSetIterator& iter)
-{
- long ident = station("IDENT");
- if (ident)
- {
- iter.setWmoStation(ident);
- return true;
- }
-
- return false;
-}
-
-bool BufrTephigram::getLocation(MvRequest& station, MvObsSetIterator& iter)
-{
- double lat = station("LATITUDE");
- double lon = station("LONGITUDE");
- double eps = 0.0001; //-- to allow for BUFR rounding differences
-
- MvLocation loc1(lat+eps,lon-eps);
- MvLocation loc2(lat-eps,lon+eps);
-
- iter.setArea(loc1,loc2);
-
- return true;
-}
-
-void BufrTephigram::serve( MvRequest& in, MvRequest& out )
-{
- cout << "\nin BufrTephigram::serve...: " << endl;
- in.print();
-
- Temp = 130;
- Dew = 133;
- U_Field = 131; //-- specific humidity
-
- MvRequest bufr;
- MvRequest datareq;
-
-
- datareq = in;
- in.getValue(bufr,"DATA");
-
- int backGround = 1;
-
- backGround = 1;
-
- MvObsSet obsset(bufr);
- MvObsSetIterator iter(obsset);
-
- MvRequest station;
- datareq.getValue(station,"STATION");
-
- if( ! getIdent(station,iter) )
- {
- if( ! getLocation(station,iter) )
- {
- setError(1, "Tephigrams: WMO station number and/or location missing...");
- return;
- }
- }
-
-
- while (station) {
- const char *sname = station("NAME");
- printf("station : %s\n", sname);
- station.advance();
- }
-
-
-
- double T1 = -40,
- T2 = 40,
- P2 = 1020,
- P1 = 200;
- double Wf = 0.;
-
- const char *line_colour = datareq("LINE_COLOUR");
- int line_thick = datareq("LINE_THICKNESS");
- const char *flag_colour = datareq("FLAG_COLOUR");
-
- string line_style_temp, line_style_dew;
- if( (const char*)datareq("LINE_STYLE") )
- {
- if ( strcmp((const char*)datareq("LINE_STYLE"),"DEFAULT") )
- {
- line_style_temp = (const char*)datareq("LINE_STYLE");
- line_style_dew = (const char*)datareq("LINE_STYLE");
- }
- else
- {
- line_style_temp = "SOLID";
- line_style_dew = "DASH";
- }
- }
- else
- {
- line_style_temp = "SOLID";
- line_style_dew = "DASH";
- }
-
-in.print();
-
- if( (T1 == T2) || (P1 == P2) )
- {
- setError(1,"Tephigrams: Invalid Parameters (Temperature/Pressure)..");
- return;
- }
- if( T1 > T2 )
- {
- setError(0,"Tephigrams: Minimun Temperature > Maximum...");
- double w;
- w = T2;
- T2 = T1;
- T1 = w;
- }
- if( P1 > P2 )
- {
- setError(0,"Tephigrams: Top Pressure > Bottom...");
- double w;
- w = P2;
- P2 = P1;
- P1 = w;
- }
-
- MvBufrParam tempe( 12001),t_dew(12003),direction(11001),
- strength(11002),GeoPotential(10003);
-
- iter.setMessageType(2); //-- Vertical soundings (other than satellite)
-
- MvObs obs;
-
- MvLocation Loc;
- double lat, lon;
-
- // Open netcdf file for writing the results.
- string name = marstmp();
- MvNetCDF netcdf(name,'w');
-
- string Tempkey, Dewkey, Ukey;
- int counter = 1;
-
- bool found = false;
-
- while ( obs = iter() )
- {
- found = true;
- obs.printAllValues();
-
- Loc = obs.location();
- lat = Loc.latitude();
- lon = Loc.longitude();
- float myT,myDew,myGeo,myDir,myStr,myP;
- int level_t = 0, level_td = 0, level = 0;
- int Nlev = obs.numberOfPressureLevels();
- double *T = new double[Nlev];
- double *T_t = new double[Nlev];
- double *PRESS = new double[Nlev];
- double *PRESS_t = new double[Nlev];
- double *PRESS_td = new double[Nlev];
- double *TD = new double[Nlev];
- double *U = new double[Nlev];
- double *V = new double[Nlev];
- double *Height = new double[Nlev];
-
- float PrevLevel = FLT_MAX;
- float Level = obs.firstPressureLevel();
- while( Level != kBufrMissingValue )
- {
- //-- Pressure levels decrease in the main sounding data.
- //-- At the end of msg there can be data for "special levels"
- //--( e.g. 'Maximum wind level') which refer back to lower
- //-- levels (higher pressure) and which should not be used.
- if( PrevLevel < Level )
- break;
-
- myT = obs.valueByPressureLevel( Level, tempe);
- myDew = obs.valueByPressureLevel( Level, t_dew);
- myDir = obs.valueByPressureLevel( Level, direction);
- myStr = obs.valueByPressureLevel( Level, strength);
- myGeo = obs.valueByPressureLevel( Level, GeoPotential);
-
- myP = Level;
- if( myT != kBufrMissingValue )
- {
- T_t[level_t] = myT;
- PRESS_t[level_t] = 100.*myP;
- level_t++;
- }
- if( myDew != kBufrMissingValue )
- {
- TD[level_td] = myDew;
- PRESS_td[level_td] = 100.*myP;
- level_td++;
- }
-
- if( myDir != kBufrMissingValue )
- {
- U[level] = -myStr*sin(myDir*Pi/180.0);
- V[level] = -myStr*cos(myDir*Pi/180.0);
- }
- else
- {
- U[level] = kBufrMissingValue;
- V[level] = kBufrMissingValue;
- }
-
- PRESS[level] = 100.*myP;
- T[level] = myT;
- Height[level] = myGeo;
- level++;
-
- PrevLevel = Level;
- Level = obs.nextPressureLevel();
- }
-
- if ( level_t<=1)
- {
- if( obs.messageSubtype() == 91 ) //-- ECMWF code for PILOT!
- setError(1,"Tephigrams: Too few data in PILOT soundings (full TEMP sounding needed)" );
- else
- setError(1,"Tephigrams: Problems with BUFR data.....");
- return;
- }
-
- MvTephiFrame* frame = new MvTephiFrame();
-
- if( ! frame->setFrame(P1,P2,T1,T2,Wf))
- {
- setError(1,"Invalid Range...");
- delete frame;
- return;
- }
-
- MvNcVar *temp;
- TDynamicTime tmpdate = obs.obsTime();
- char odate[9],otime[5];
- sprintf(odate,"%04d%02d%02d",tmpdate.GetYear(),tmpdate.GetMonth(), tmpdate.GetDay() );
- sprintf(otime,"%02d%02d",tmpdate.GetHour(),tmpdate.GetMin() );
-
- frame->generateKey(Tempkey,Temp,odate,otime,"0000","0000",counter);
- frame->generateKey(Dewkey,Dew,odate,otime,"0000","0000",counter);
- frame->generateKey(Ukey,U_Field,odate,otime,"0000","0000",counter);
-
- temp = netcdf.addVariable(Tempkey.c_str(), ncDouble,2,level_t);
-
- char Title[150];
- sprintf( Title,"Station %5.5d (%.2f %.2f) %s",
- obs.WmoIdentNumber(), lat, lon,
- obs.obsTime().ShorterCharValue());
-
- frame->Metadata(backGround,temp, Title);
- frame->AddAttributes(temp,Tempkey);
- temp->addAttribute("_REQUEST_NAMES","DATA_X_VALUES/DATA_Y_VALUES");
-
- frame->TSonde(PRESS_t,T_t,1,level_t,line_thick,(char*)line_style_temp.c_str(),line_colour,temp);
-
- if ( level_td>1)
- {
- MvNcVar *dew;
- dew = netcdf.addVariable(Dewkey.c_str(), ncDouble,2,level_td);
- frame->Metadata(backGround,dew, 0);
-
- frame->AddAttributes(dew,Dewkey);
-
- dew->addAttribute("_REQUEST_NAMES","DATA_X_VALUES/DATA_Y_VALUES");
- frame->TSonde(PRESS_td,TD,1,level_td,line_thick,(char*)line_style_dew.c_str(),line_colour,dew);
- }
-
- counter++;
-
- if ( level>1 )
- {
- string Presskey;
- frame->generateKey(Tempkey,Temp,odate,otime,"0000","0000",counter);
- frame->generateKey(Presskey,0,odate,otime,"0000","0000",counter);
- frame->generateKey(Ukey,U_Field,odate,otime,"0000","0000",counter);
-
- frame->TFlag(PRESS,T,U,V,Height,level,
- flag_colour, //-- flag colour for numbers too
- netcdf,Presskey,Tempkey,Ukey);
- }
-
-
- // Free all the allocated arrays.
- delete [] T;
- delete [] T_t;
- delete [] PRESS;
- delete [] PRESS_t;
- delete [] PRESS_td;
- delete [] TD;
- delete [] U;
- delete [] V;
- delete [] Height;
- }
-
- if ( ! found )
- {
- setError(1,"Tephigrams: No Data found for given Station...");
- return;
- }
-
- MvRequest cdfreq("NETCDF");
- cdfreq("PATH") = name.c_str();
- out = out + cdfreq;
-
- if ( (const char *)in("_NAME") )
- out("_NAME") = in("_NAME");
- out.print();
-}
-//____________________________________________________________________________
-
-int main(int argc,char **argv)
-{
- MvApplication theApp(argc,argv);
- BufrTephigram BufrTephi;
- GribTephigram GribTephi;
- OldGribTephigram OldGribTephi;
-
- BufrTephi.addModeService("STATION", "STATION");
-
- // The applications don't try to read or write from pool, this
- // should not be done with the new PlotMod.
- BufrTephi.saveToPool(false);
- GribTephi.saveToPool(false);
- OldGribTephi.saveToPool(false);
-
- theApp.run();
-}
diff --git a/src/Percentile/Makefile.in b/src/Percentile/Makefile.in
index 7d561cf..1be2be5 100644
--- a/src/Percentile/Makefile.in
+++ b/src/Percentile/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/Percentile
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -137,6 +138,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -160,6 +163,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/PottF/Makefile.am b/src/PottF/Makefile.am
index 16c11b5..c64bc45 100644
--- a/src/PottF/Makefile.am
+++ b/src/PottF/Makefile.am
@@ -1,7 +1,7 @@
bin_PROGRAMS = bin/PottF
-bin_PottF_SOURCES = PottF.cc pott.F eqpott.F seqpott.F tlvalid.F pml.F sshm.F
+bin_PottF_SOURCES = PottF.cc pott.F eqpott.F seqpott.F tlvalid.F pml.F sshm.F include/grbll.h include/grbsec.h include/grbsh.h
bin_PottF_LDADD = ../../lib/libmacro_api_f90.a -lgrib_api_f90 $(STANDARD_METVIEW_LIBS) $(FLIBS) $(METVIEW_UTIL_LIB)
diff --git a/src/PottF/Makefile.in b/src/PottF/Makefile.in
index b4ba601..ad831c5 100644
--- a/src/PottF/Makefile.in
+++ b/src/PottF/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/PottF
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -100,6 +101,22 @@ CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
AM_V_CXXLD = $(am__v_CXXLD_$(V))
am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
am__v_CXXLD_0 = @echo " CXXLD " $@;
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
@@ -117,6 +134,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -140,6 +159,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -315,7 +335,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-bin_PottF_SOURCES = PottF.cc pott.F eqpott.F seqpott.F tlvalid.F pml.F sshm.F
+bin_PottF_SOURCES = PottF.cc pott.F eqpott.F seqpott.F tlvalid.F pml.F sshm.F include/grbll.h include/grbsec.h include/grbsh.h
bin_PottF_LDADD = ../../lib/libmacro_api_f90.a -lgrib_api_f90 $(STANDARD_METVIEW_LIBS) $(FLIBS) $(METVIEW_UTIL_LIB)
BUILT_SOURCES = bin
all: $(BUILT_SOURCES)
diff --git a/src/Desktop/TaskObserver.h b/src/PottF/include/grbll.h
similarity index 64%
copy from src/Desktop/TaskObserver.h
copy to src/PottF/include/grbll.h
index c670d2f..ba68865 100644
--- a/src/Desktop/TaskObserver.h
+++ b/src/PottF/include/grbll.h
@@ -7,21 +7,14 @@
***************************** LICENSE END *************************************/
-// File TaskObserver.h
-// Baudouin Raoult - ECMWF Aug 99
+#ifndef grbll_DEFINED
+#define grbll_DEFINED
-#ifndef TaskObserver_H
-#define TaskObserver_H
+C 1600/801 allows 0.225/0.225 lat/lon and N400 Gaussian
-class Request;
-class Task;
-
-class TaskObserver {
-public:
-
- virtual void success(Task*,const Request&) = 0;
- virtual void failure(Task*) = 0;
-
-};
+ INTEGER NMAXLON,NMAXLAT,JMUAF,JMGRIB
+ PARAMETER (NMAXLON=1600,NMAXLAT=801)
+ PARAMETER (JMUAF=NMAXLON*NMAXLAT)
+ PARAMETER (JMGRIB=((JMUAF*3)/4)+1000)
#endif
diff --git a/src/Desktop/State.h b/src/PottF/include/grbsec.h
similarity index 68%
copy from src/Desktop/State.h
copy to src/PottF/include/grbsec.h
index 4f6f0b8..c146547 100644
--- a/src/Desktop/State.h
+++ b/src/PottF/include/grbsec.h
@@ -7,20 +7,11 @@
***************************** LICENSE END *************************************/
-// File State.h
-// Baudouin Raoult - ECMWF Jul 99
+#ifndef grbsec_DEFINED
+#define grbsec_DEFINED
-#ifndef State_H
-#define State_H
+ INTEGER JSEC0,JSEC1,JSEC2,JSEC3,JSEC4,JPSEC2,JPSEC3
+ PARAMETER (JSEC0=2,JSEC1=1024,JSEC2=1088,JSEC3=2,JSEC4=512)
+ PARAMETER (JPSEC2=512,JPSEC3=2)
-#include "Metview.h"
-
-class State
-{
-public:
-
- static void load(request*);
-
-};
-
-#endif
\ No newline at end of file
+#endif
diff --git a/src/Desktop/TaskObserver.h b/src/PottF/include/grbsh.h
similarity index 59%
copy from src/Desktop/TaskObserver.h
copy to src/PottF/include/grbsh.h
index c670d2f..e569a8f 100644
--- a/src/Desktop/TaskObserver.h
+++ b/src/PottF/include/grbsh.h
@@ -7,21 +7,14 @@
***************************** LICENSE END *************************************/
-// File TaskObserver.h
-// Baudouin Raoult - ECMWF Aug 99
-
-#ifndef TaskObserver_H
-#define TaskObserver_H
-
-class Request;
-class Task;
-
-class TaskObserver {
-public:
-
- virtual void success(Task*,const Request&) = 0;
- virtual void failure(Task*) = 0;
-
-};
+#ifndef grbsh_DEFINED
+#define grbsh_DEFINED
+
+ INTEGER JMTRUNC,JMUAF,JMGRIB,JNS,JLEV
+ PARAMETER (JMTRUNC=1023) ! TRUNCATION
+ PARAMETER (JMUAF=(JMTRUNC+1)*(JMTRUNC+2))
+ PARAMETER (JMGRIB=((JMUAF*3)/4)+1000)
+ PARAMETER (JNS=150) ! MAXIMUM NUMBER OF STEPS
+ PARAMETER (JLEV=24) ! NUMBER OF LEVELS
#endif
diff --git a/src/Relhum/Makefile.in b/src/Relhum/Makefile.in
index 5e0b87e..c50b053 100644
--- a/src/Relhum/Makefile.in
+++ b/src/Relhum/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/Relhum
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -113,6 +114,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -136,6 +139,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Reprojection/Makefile.in b/src/Reprojection/Makefile.in
index aa84c52..0a4637f 100644
--- a/src/Reprojection/Makefile.in
+++ b/src/Reprojection/Makefile.in
@@ -77,6 +77,7 @@ bin_PROGRAMS = bin/Reprojection$(EXEEXT)
subdir = src/Reprojection
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -160,6 +161,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -183,6 +186,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Reprojection/ReprojectService.cc b/src/Reprojection/ReprojectService.cc
index 598f849..986acd6 100644
--- a/src/Reprojection/ReprojectService.cc
+++ b/src/Reprojection/ReprojectService.cc
@@ -87,7 +87,7 @@ ReprojectService::gribit(RasterData& image)
// NOTE: this could change if the data type
// in ImagePlotting is changed from TeUNSIGNEDSHORT.
- h = grib_handle_new_from_template(0,"GRIB1");
+ h = grib_handle_new_from_samples(0,"GRIB1");
if(!h) {
printf("ERROR: Unable to create grib handle\n");
return 1;
diff --git a/src/Rttov/Makefile.in b/src/Rttov/Makefile.in
index d3545dc..8f450bf 100644
--- a/src/Rttov/Makefile.in
+++ b/src/Rttov/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/Rttov
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -131,6 +132,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -154,6 +157,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Scm/Makefile.in b/src/Scm/Makefile.in
index 48a29d6..5c1f40c 100644
--- a/src/Scm/Makefile.in
+++ b/src/Scm/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/Scm
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -129,6 +130,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -152,6 +155,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Scm/ScmRun.cc b/src/Scm/ScmRun.cc
index 6a6c0ec..68b3f96 100644
--- a/src/Scm/ScmRun.cc
+++ b/src/Scm/ScmRun.cc
@@ -252,18 +252,18 @@ void ScmRun::serve( MvRequest& in, MvRequest& out)
if(runFailed)
{
marslog(LOG_EROR,"Log files are available at:");
- marslog(LOG_EROR,"---------------------------");
- marslog(LOG_EROR," (STDOUT) %s",logFile.c_str());
+ //marslog(LOG_EROR,"---------------------------");
+ marslog(LOG_EROR," STDOUT %s",logFile.c_str());
string msg=tmpPath + "/fort.20";
- marslog(LOG_EROR," (fort.20) %s",msg.c_str());
+ marslog(LOG_EROR," fort.20 %s",msg.c_str());
}
else
{
marslog(LOG_INFO,"Log files are available at:");
- marslog(LOG_INFO,"---------------------------");
- marslog(LOG_INFO," (STDOUT) %s",logFile.c_str());
+ //marslog(LOG_INFO,"---------------------------");
+ marslog(LOG_INFO," STDOUT %s",logFile.c_str());
string msg=tmpPath + "/fort.20";
- marslog(LOG_INFO," (fort.20) %s",msg.c_str());
+ marslog(LOG_INFO," fort.20 %s",msg.c_str());
}
//Retrun if run failed!!
diff --git a/src/ScmEditor/Makefile.in b/src/ScmEditor/Makefile.in
index a4b27bc..e070e36 100644
--- a/src/ScmEditor/Makefile.in
+++ b/src/ScmEditor/Makefile.in
@@ -77,6 +77,7 @@ bin_PROGRAMS = bin/ScmDataEditor$(EXEEXT)
subdir = src/ScmEditor
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -181,6 +182,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -204,6 +207,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/Spectra/Makefile.am b/src/Spectra/Makefile.am
new file mode 100644
index 0000000..83033ff
--- /dev/null
+++ b/src/Spectra/Makefile.am
@@ -0,0 +1,32 @@
+bin_PROGRAMS = bin/Spectra
+
+bin_Spectra_SOURCES = Spectra.cc Spectra.h spectra.F specpro.F specgraph.F speccont.F
+bin_Spectra_CPPFLAGS = -I../PottF/include $(METVIEW_NETCDF_FLAGS)
+bin_Spectra_LDADD = ../../lib/libmacro_api_f90.a -lgrib_api_f90 $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB) $(FLIBS)
+bin_Spectra_DEPENDENCIES = ../../lib/libMetview.a ../../lib/libUtil.a
+
+sharedir = $(datadir)/metview/etc
+local_sharedir = ../../share/metview/etc
+local_iconsdir = ../../share/metview/icons
+share_DATA = $(local_sharedir)/ObjectSpec.Spectra \
+ $(local_sharedir)/SpectraDef \
+ $(local_sharedir)/SpectraRules
+
+# to build the share data, we take the destination files and
+# remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
+# $< is the 'stripped' version and $@ is the 'full' version
+$(share_DATA): $(local_sharedir)/%: %
+ ${INSTALL} $< $(local_sharedir)
+
+icons:
+ ${INSTALL} SPECTRA.xpm $(local_iconsdir)
+
+CLEANFILES = $(share_DATA) $(local_iconsdir)/SPECTRA.xpm
+
+BUILT_SOURCES = bin icons
+
+EXTRA_DIST = ObjectSpec.Spectra \
+ SPECTRA.xpm SpectraDef SpectraRules
+
+bin:
+ ln -s ../../bin bin
diff --git a/src/WebAccess/Makefile.in b/src/Spectra/Makefile.in
similarity index 78%
copy from src/WebAccess/Makefile.in
copy to src/Spectra/Makefile.in
index d46cf7c..316ac3c 100644
--- a/src/WebAccess/Makefile.in
+++ b/src/Spectra/Makefile.in
@@ -36,11 +36,12 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-bin_PROGRAMS = bin/WebAccess$(EXEEXT)
-subdir = src/WebAccess
+bin_PROGRAMS = bin/Spectra$(EXEEXT)
+subdir = src/Spectra
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -50,12 +51,11 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"
PROGRAMS = $(bin_PROGRAMS)
-am_bin_WebAccess_OBJECTS = bin_WebAccess-WebAccess.$(OBJEXT) \
- bin_WebAccess-remote.$(OBJEXT)
-bin_WebAccess_OBJECTS = $(am_bin_WebAccess_OBJECTS)
+am_bin_Spectra_OBJECTS = bin_Spectra-Spectra.$(OBJEXT) \
+ bin_Spectra-spectra.$(OBJEXT) bin_Spectra-specpro.$(OBJEXT) \
+ bin_Spectra-specgraph.$(OBJEXT) bin_Spectra-speccont.$(OBJEXT)
+bin_Spectra_OBJECTS = $(am_bin_Spectra_OBJECTS)
am__DEPENDENCIES_1 =
-bin_WebAccess_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
am__v_lt_0 = --silent
@@ -64,25 +64,25 @@ DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+PPF77COMPILE = $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)
+LTPPF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(F77) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo " CC " $@;
+ $(AM_FFLAGS) $(FFLAGS)
+AM_V_PPF77 = $(am__v_PPF77_$(V))
+am__v_PPF77_ = $(am__v_PPF77_$(AM_DEFAULT_VERBOSITY))
+am__v_PPF77_0 = @echo " PPF77 " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+F77LD = $(F77)
+F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_F77LD = $(am__v_F77LD_$(V))
+am__v_F77LD_ = $(am__v_F77LD_$(AM_DEFAULT_VERBOSITY))
+am__v_F77LD_0 = @echo " F77LD " $@;
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
@@ -99,11 +99,27 @@ CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
AM_V_CXXLD = $(am__v_CXXLD_$(V))
am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
am__v_CXXLD_0 = @echo " CXXLD " $@;
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = $(bin_WebAccess_SOURCES)
-DIST_SOURCES = $(bin_WebAccess_SOURCES)
+SOURCES = $(bin_Spectra_SOURCES)
+DIST_SOURCES = $(bin_Spectra_SOURCES)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -138,6 +154,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -161,6 +179,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -336,25 +355,27 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = foreign
-bin_WebAccess_SOURCES = WebAccess.cc remote.c
-bin_WebAccess_CPPFLAGS =
-bin_WebAccess_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB)
+bin_Spectra_SOURCES = Spectra.cc Spectra.h spectra.F specpro.F specgraph.F speccont.F
+bin_Spectra_CPPFLAGS = -I../PottF/include $(METVIEW_NETCDF_FLAGS)
+bin_Spectra_LDADD = ../../lib/libmacro_api_f90.a -lgrib_api_f90 $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB) $(FLIBS)
+bin_Spectra_DEPENDENCIES = ../../lib/libMetview.a ../../lib/libUtil.a
sharedir = $(datadir)/metview/etc
local_sharedir = ../../share/metview/etc
local_iconsdir = ../../share/metview/icons
-share_DATA = $(local_sharedir)/ObjectSpec.WebAccess \
- $(local_sharedir)/WebAccessDef \
- $(local_sharedir)/WebAccessRules
+share_DATA = $(local_sharedir)/ObjectSpec.Spectra \
+ $(local_sharedir)/SpectraDef \
+ $(local_sharedir)/SpectraRules
-CLEANFILES = $(share_DATA) $(local_iconsdir)/WEBACCESS.xpm
+CLEANFILES = $(share_DATA) $(local_iconsdir)/SPECTRA.xpm
BUILT_SOURCES = bin icons
-EXTRA_DIST = vroot.h ObjectSpec.WebAccess WebAccessDef WebAccessRules WEBACCESS.xpm
+EXTRA_DIST = ObjectSpec.Spectra \
+ SPECTRA.xpm SpectraDef SpectraRules
+
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
-.SUFFIXES: .c .cc .lo .o .obj
+.SUFFIXES: .F .cc .f .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -364,9 +385,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/WebAccess/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Spectra/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign src/WebAccess/Makefile
+ $(AUTOMAKE) --gnu src/Spectra/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -431,9 +452,9 @@ clean-binPROGRAMS:
bin/$(am__dirstamp):
@$(MKDIR_P) bin
@: > bin/$(am__dirstamp)
-bin/WebAccess$(EXEEXT): $(bin_WebAccess_OBJECTS) $(bin_WebAccess_DEPENDENCIES) bin/$(am__dirstamp)
- @rm -f bin/WebAccess$(EXEEXT)
- $(AM_V_CXXLD)$(CXXLINK) $(bin_WebAccess_OBJECTS) $(bin_WebAccess_LDADD) $(LIBS)
+bin/Spectra$(EXEEXT): $(bin_Spectra_OBJECTS) $(bin_Spectra_DEPENDENCIES) bin/$(am__dirstamp)
+ @rm -f bin/Spectra$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(bin_Spectra_OBJECTS) $(bin_Spectra_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -441,48 +462,53 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_WebAccess-WebAccess.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_WebAccess-remote.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-
-bin_WebAccess-remote.o: remote.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_WebAccess_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bin_WebAccess-remote.o -MD -MP -MF $(DEPDIR)/bin_WebAccess-remote.Tpo -c -o bin_WebAccess-remote.o `test -f 'remote.c' || echo '$(srcdir)/'`remote.c
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_WebAccess-remote.Tpo $(DEPDIR)/bin_WebAccess-remote.Po
- at am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='remote.c' object='bin_WebAccess-remote.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_WebAccess_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bin_WebAccess-remote.o `test -f 'remote.c' || echo '$(srcdir)/'`remote.c
-
-bin_WebAccess-remote.obj: remote.c
- at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_WebAccess_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bin_WebAccess-remote.obj -MD -MP -MF $(DEPDIR)/bin_WebAccess-remote.Tpo -c -o bin_WebAccess-remote.obj `if test -f 'remote.c'; then $(CYGPATH_W) 'remote.c'; else $(CYGPATH_W) '$(srcdir)/remote.c'; fi`
- at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_WebAccess-remote.Tpo $(DEPDIR)/bin_WebAccess-remote.Po
- at am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='remote.c' object='bin_WebAccess-remote.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_WebAccess_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bin_WebAccess-remote.obj `if test -f 'remote.c'; then $(CYGPATH_W) 'remote.c'; else $(CYGPATH_W) '$(srcdir)/remote.c'; fi`
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Spectra-Spectra.Po at am__quote@
+
+.F.o:
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(PPF77COMPILE) -c -o $@ $<
+
+.F.obj:
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(PPF77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.F.lo:
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(LTPPF77COMPILE) -c -o $@ $<
+
+bin_Spectra-spectra.o: spectra.F
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o bin_Spectra-spectra.o `test -f 'spectra.F' || echo '$(srcdir)/'`spectra.F
+
+bin_Spectra-spectra.obj: spectra.F
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o bin_Spectra-spectra.obj `if test -f 'spectra.F'; then $(CYGPATH_W) 'spectra.F'; else $(CYGPATH_W) '$(srcdir)/spectra.F'; fi`
+
+bin_Spectra-specpro.o: specpro.F
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o bin_Spectra-specpro.o `test -f 'specpro.F' || echo '$(srcdir)/'`specpro.F
+
+bin_Spectra-specpro.obj: specpro.F
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o bin_Spectra-specpro.obj `if test -f 'specpro.F'; then $(CYGPATH_W) 'specpro.F'; else $(CYGPATH_W) '$(srcdir)/specpro.F'; fi`
+
+bin_Spectra-specgraph.o: specgraph.F
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o bin_Spectra-specgraph.o `test -f 'specgraph.F' || echo '$(srcdir)/'`specgraph.F
+
+bin_Spectra-specgraph.obj: specgraph.F
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o bin_Spectra-specgraph.obj `if test -f 'specgraph.F'; then $(CYGPATH_W) 'specgraph.F'; else $(CYGPATH_W) '$(srcdir)/specgraph.F'; fi`
+
+bin_Spectra-speccont.o: speccont.F
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o bin_Spectra-speccont.o `test -f 'speccont.F' || echo '$(srcdir)/'`speccont.F
+
+bin_Spectra-speccont.obj: speccont.F
+ $(AM_V_PPF77) @AM_BACKSLASH@
+ $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o bin_Spectra-speccont.obj `if test -f 'speccont.F'; then $(CYGPATH_W) 'speccont.F'; else $(CYGPATH_W) '$(srcdir)/speccont.F'; fi`
+.F.f:
+ $(F77COMPILE) -F $<
.cc.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -508,21 +534,21 @@ bin_WebAccess-remote.obj: remote.c
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-bin_WebAccess-WebAccess.o: WebAccess.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_WebAccess_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_WebAccess-WebAccess.o -MD -MP -MF $(DEPDIR)/bin_WebAccess-WebAccess.Tpo -c -o bin_WebAccess-WebAccess.o `test -f 'WebAccess.cc' || echo '$(srcdir)/'`WebAccess.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_WebAccess-WebAccess.Tpo $(DEPDIR)/bin_WebAccess-WebAccess.Po
+bin_Spectra-Spectra.o: Spectra.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Spectra-Spectra.o -MD -MP -MF $(DEPDIR)/bin_Spectra-Spectra.Tpo -c -o bin_Spectra-Spectra.o `test -f 'Spectra.cc' || echo '$(srcdir)/'`Spectra.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Spectra-Spectra.Tpo $(DEPDIR)/bin_Spectra-Spectra.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='WebAccess.cc' object='bin_WebAccess-WebAccess.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Spectra.cc' object='bin_Spectra-Spectra.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_WebAccess_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_WebAccess-WebAccess.o `test -f 'WebAccess.cc' || echo '$(srcdir)/'`WebAccess.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Spectra-Spectra.o `test -f 'Spectra.cc' || echo '$(srcdir)/'`Spectra.cc
-bin_WebAccess-WebAccess.obj: WebAccess.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_WebAccess_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_WebAccess-WebAccess.obj -MD -MP -MF $(DEPDIR)/bin_WebAccess-WebAccess.Tpo -c -o bin_WebAccess-WebAccess.obj `if test -f 'WebAccess.cc'; then $(CYGPATH_W) 'WebAccess.cc'; else $(CYGPATH_W) '$(srcdir)/WebAccess.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_WebAccess-WebAccess.Tpo $(DEPDIR)/bin_WebAccess-WebAccess.Po
+bin_Spectra-Spectra.obj: Spectra.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Spectra-Spectra.obj -MD -MP -MF $(DEPDIR)/bin_Spectra-Spectra.Tpo -c -o bin_Spectra-Spectra.obj `if test -f 'Spectra.cc'; then $(CYGPATH_W) 'Spectra.cc'; else $(CYGPATH_W) '$(srcdir)/Spectra.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Spectra-Spectra.Tpo $(DEPDIR)/bin_Spectra-Spectra.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='WebAccess.cc' object='bin_WebAccess-WebAccess.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Spectra.cc' object='bin_Spectra-Spectra.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_WebAccess_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_WebAccess-WebAccess.obj `if test -f 'WebAccess.cc'; then $(CYGPATH_W) 'WebAccess.cc'; else $(CYGPATH_W) '$(srcdir)/WebAccess.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Spectra_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Spectra-Spectra.obj `if test -f 'Spectra.cc'; then $(CYGPATH_W) 'Spectra.cc'; else $(CYGPATH_W) '$(srcdir)/Spectra.cc'; fi`
mostlyclean-libtool:
-rm -f *.lo
@@ -764,7 +790,7 @@ $(share_DATA): $(local_sharedir)/%: %
${INSTALL} $< $(local_sharedir)
icons:
- ${INSTALL} WEBACCESS.xpm $(local_iconsdir)
+ ${INSTALL} SPECTRA.xpm $(local_iconsdir)
bin:
ln -s ../../bin bin
diff --git a/src/Spectra/ObjectSpec.Spectra b/src/Spectra/ObjectSpec.Spectra
new file mode 100644
index 0000000..4ee4f7a
--- /dev/null
+++ b/src/Spectra/ObjectSpec.Spectra
@@ -0,0 +1,50 @@
+object,
+ class = SPECTRA_FAMILY,
+ can_be_created = True,
+ icon_box = Data processing,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SpectraDef',
+ default_name = Spectra,
+ help_page = Spectra,
+ type = Family,
+ expand = 512, #expand default values
+ editor_type = FamilyEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/SPECTRA.icon'
+
+object,
+ class = SPEC_GRAPH,
+ can_be_created = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SpectraDef',
+ default_name = Spectra Graph,
+ type = Data,
+ expand = 512, #expand default values
+ macro = spec_graph,
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/SPECTRA.icon'
+
+object,
+ class = SPEC_CONTOUR,
+ can_be_created = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/SpectraDef',
+ default_name = Spectra Contour,
+ type = Data,
+ expand = 512, #expand default values
+ macro = spec_contour,
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/SPECTRA.icon'
+
+state,
+ class = SPECTRA_FAMILY,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
+ service = Spectra
+
+state,
+ class = SPEC_GRAPH/SPEC_CONTOUR,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
+ output_class = NETCDF,
+ service = Spectra
+
+service,
+ timeout = $timeout,
+ name = 'Spectra',
+ fullname = Spectra,
+ cmd = "$metview_command $METVIEW_BIN/Spectra"
diff --git a/src/Spectra/SPECTRA.xpm b/src/Spectra/SPECTRA.xpm
new file mode 100644
index 0000000..313da52
--- /dev/null
+++ b/src/Spectra/SPECTRA.xpm
@@ -0,0 +1,40 @@
+/* XPM */
+static char * SPECTRA_xpm[] = {
+"32 32 5 1",
+" c #E5E5E5E5E5E5",
+". c #000000000000",
+"X c #00000000FFFF",
+"o c #FFFF00000000",
+"O c #FFFFFFFFFFFF",
+" . ",
+".. XXX ",
+" . X ",
+" . X ",
+" . XX ",
+" . X ",
+" . X ",
+".. XXX ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ooo ",
+".. oo oo ",
+" . oo o ",
+" . o oo ",
+" . oo o ",
+" . oo o ",
+" . o o ",
+".. o o ",
+" . o oo ",
+" . oo o ",
+" . o o X XXX ",
+" . o oo XOXOOOX ",
+".. o oo OOOXOOOX ",
+" . o oo X OX ",
+" . oo oo X OX ",
+" . o ooo X OX ",
+" . o ooooooooooooo",
+" . ",
+"................................",
+" . . . . . . "};
diff --git a/src/Spectra/Spectra.cc b/src/Spectra/Spectra.cc
new file mode 100644
index 0000000..d2651e7
--- /dev/null
+++ b/src/Spectra/Spectra.cc
@@ -0,0 +1,567 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "Spectra.h"
+#include <MvFortran.h>
+#include <MvGribParC.h>
+
+#ifdef FORTRAN_UPPERCASE
+#define spectra_ SPECTRA
+#endif
+
+#ifdef FORTRAN_NO_UNDERSCORE
+#define spectra_ spectra
+#endif
+
+extern "C" void spectra_(void);
+
+#define SPECGRAPH 1
+#define SPECCONTOUR 0
+
+void SpectraF :: serve(MvRequest& in,MvRequest& out)
+{
+ // Get data
+ if ( !GetData(in) )
+ return;
+
+ // Compute Spectra
+ MvRequest spec;
+ if ( !ComputeSpectra(spec) )
+ return;
+
+cout << "Request 'spec':\n===============" << endl;
+spec.print();
+
+ // Plot Spectra
+ out = PlotSpectra(spec);
+
+cout << "Request 'out':\n==============" << endl;
+out.print();
+}
+
+int SpectraF :: GetDataGen(MvRequest& in)
+{
+ // Get fields
+ MvRequest grib = in.getSubrequest("DATA");
+ if( grib == (request*)NULL )
+ {
+ setError(1,"Grib data not supplied ...");
+ return FALSE;
+ }
+
+ // Organise fields to send to the Fortran routine
+ MvFieldSet fset(grib); // field set
+ MvFieldSetIterator fsiter(fset); // field set iterator
+ MvField field; // auxiliary field
+
+ fsiter.sort("STEP");
+ while( field = fsiter() )
+ Sfset_ += field;
+
+ // Get Diurnal Cycle, Mtrunc and plot title
+ Sdc_ = ( (const char*)in("DIURNAL_CYCLE") && strcmp(in("DIURNAL_CYCLE"),"YES") == 0 ) ? TRUE : FALSE;
+
+ Smtrunc_ = (const char*)in("TRUNCATION") ? (double)in("TRUNCATION") : 213.;
+
+ Stitle_ = (const char*)in("TITLE") ? (const char*)in("TITLE") : " ";
+
+ // Get vertical axis
+ Svaxis_ = in("VERTICAL_AXIS");
+
+ return TRUE;
+}
+
+int SpectraF :: ComputeSpectra(MvRequest& spec)
+{
+ MvFortran spectraf("Spectra"); // fortran subroutine
+
+ // Call the fortran routines
+ spectraf.addParameter(Sfset_); // setup fortran params
+ spectraf.addParameter(Smtrunc_);
+ spectraf.addParameter(Stype_);
+ spectraf.addParameter(Sdc_);
+ spectraf.addParameter(Snl24int_);
+ spectraf.addParameter(Sntmin_);
+ spectraf.addParameter(Sntlim_);
+
+ putenv("SPECTRA_ENV=OK");
+ spectra_();
+ char* penv = getenv("SPECTRA_ENV");
+ if( strcmp(penv,"OK") )
+ {
+ setError(1,penv);
+ return FALSE;
+ }
+
+ // Get the result
+ spec = spectraf.getResult();
+ return TRUE;
+}
+
+string SpectraF :: GetTitle(MvRequest& spec)
+{
+ char clev[100]; // buffer for holding level string
+ char caux[100]; // auxiliary variable
+ string title; // title text
+ int nfldr; // field code
+ int levelType; // field level type
+ int level; // field level
+ int time; // field time
+ long date; // field date (YYMMDD)
+#if 1
+ levelType = (int)spec("VALUE");
+ spec.advance();
+ level = (int)spec("VALUE");
+ spec.advance();
+ time = (int)spec("VALUE");
+ spec.advance();
+ date = (long)spec("VALUE");
+ spec.advance();
+ nfldr = spec("VALUE");
+ spec.advance();
+ return string("TEST");
+#else
+// MvFieldSet fset(grib); // field set
+// MvFieldSetIterator fsiter(fset); // field set iterator
+
+// MvFieldSetIterator iter(Sfset_);
+// MvField field = iter();
+ MvField field = Sfset_[0];
+MvFieldExpander expa( field );
+ cout << field.getGribKeyValueString("shortName") << endl;
+ cout << field.getGribKeyValueString("name") << endl;
+ cout << field.getGribKeyValueString("units") << endl;
+ cout << field.getGribKeyValueString("levelType") << endl;
+ MvField ff = Sfset_[0];
+ MvRequest rq=field.getRequest();
+ rq.print();
+ int iparam = rq("PARAM");
+ const char *lev = rq("LEVELIST");
+ int istep = rq("STEP");
+ int idate = rq("DATE");
+ int itime = rq("TIME");
+ const char* expver = rq("EXPVER");
+
+
+ MvGribParStruct* parlist = NULL; // list of parameters table
+ MvGribTEntryStruct* pardesc; // parameter description
+
+ // Get field level,time,date and code
+ levelType = (int)spec("VALUE");
+ spec.advance();
+ level = (int)spec("VALUE");
+ spec.advance();
+ time = (int)spec("VALUE");
+ spec.advance();
+ date = (long)spec("VALUE");
+ spec.advance();
+ nfldr = spec("VALUE");
+ spec.advance();
+
+ if (levelType == 100)
+ sprintf(clev, "%d mb", level);
+ else
+ sprintf(clev, "level %d", level);
+
+ sprintf(caux,", %s. %dZ %06ld verifying date ",clev,time,date%1000000);
+
+ // Get field name
+ if ( !parlist )
+ parlist = MvGribParOpen();
+
+ if ( !parlist )
+ {
+ setError(1,"Read error at list of parameters table ...");
+ title = caux + Stitle_;
+ return title;
+ }
+ pardesc = MvGribParEntry (parlist,128, nfldr);
+
+ // Set title
+ title = pardesc->shortName; // pardesc->longName;
+ if( title == "" || title == "?" ) // field code not found
+ {
+ char caux1[100];
+ sprintf(caux1,"Spectra : Warning - Parameter code %d not found in grib table 2, version 128",nfldr);
+ setError(0,caux1);
+ sprintf(caux1,"%d",nfldr);
+ title = caux1;
+ }
+ title = title + caux + Stitle_;
+
+ return title;
+#endif
+}
+
+//------------------------------------------------------------------------------
+
+int Specgraph :: GetData(MvRequest& in)
+{
+ // Get general data
+ Stype_ = SPECGRAPH;
+ if ( !GetDataGen(in) )
+ return FALSE;
+
+ // Get horizontal axis
+ Shaxis_ = in("HORIZONTAL_AXIS");
+ if( !Shaxis_ )
+ {
+ Sntmin_ = 1;
+ Sntlim_ = (int)Smtrunc_;
+ }
+ else
+ {
+ if( (const char*)Shaxis_("AXIS_MIN_VALUE") )
+ Sntmin_ = (int)Shaxis_("AXIS_MIN_VALUE");
+ else
+ Sntmin_ = 1;
+
+ if( (const char*)Shaxis_("AXIS_MAX_VALUE") )
+ Sntlim_ = (int)Shaxis_("AXIS_MAX_VALUE");
+ else
+ Sntlim_ = (int)Smtrunc_;
+ }
+
+ // Get Smoothing and Tension
+ Ssmooth_ = (strcmp(in("SMOOTHING"),"YES") == 0) ? TRUE : FALSE;
+ Stension_ = (const char*)in("TENSION");
+
+ Snl24int_ = FALSE;
+
+ return TRUE;
+}
+
+MvRequest Specgraph :: PlotSpectra(MvRequest& spec)
+{
+ int instep; // initial step value
+ int ncurves; // number of curves
+ int npts; // number of points
+ int i,j; // auxiliary variables
+
+ MvRequest plotspec("MGRAPH"); // output graph request
+ MvRequest curveset; // set of curves
+ MvRequest haxis("MAXIS"); // X-axis
+ MvRequest vaxis("MAXIS"); // Y-axis
+
+ // Set title
+ plotspec("TITLE") = GetTitle(spec).c_str();
+
+ // Set horizontal and vertical axis
+ BuildAxis(vaxis,haxis,spec);
+ plotspec("HORIZONTAL_AXIS") = haxis;
+ plotspec("VERTICAL_AXIS") = vaxis;
+
+ // Get number of curves
+ ncurves = (int)spec("VALUE");
+ spec.advance();
+
+ // Build all curves
+ for(i = 0; i < ncurves; i++)
+ {
+ MvRequest curve("INPUT_XY_POINTS");
+ MvRequest mgraph("MGRAPH");
+
+ // Get initial step value and number of spectra values
+ instep = (int)spec("VALUE");
+ spec.advance();
+ npts = (int)spec("VALUE");
+ spec.advance();
+
+ // Loop for all points
+ for (j = 0; j < npts; j++)
+ {
+ curve("INPUT_Y_VALUES") += (double)spec("VALUE");
+ spec.advance();
+ curve("INPUT_X_VALUES") += (double)spec("VALUE");
+ spec.advance();
+ }
+curve.print();
+ // Build line parameters
+ //BuildCurveLineParam(pgraph,i+1,instep);
+
+ // Set curve
+curve("_VERB") = "INPUT_XY_POINTS";
+plotspec = curve + mgraph;
+ curveset = curveset + curve + haxis + vaxis + mgraph;
+ }
+
+ //F plotspec("CURVES") = curveset;
+ return plotspec;
+}
+
+void Specgraph :: BuildAxis(MvRequest& vaxis,MvRequest& haxis,MvRequest& spec)
+{
+ float ymin,ymax; // vertical axis limits
+
+ // Get vertical axis limits
+ ymin = (double)spec("VALUE");
+ spec.advance();
+ ymax = (double)spec("VALUE");
+ spec.advance();
+
+ if (Svaxis_) // user supplied a vertical axis
+ {
+ vaxis = Svaxis_.justOneRequest();
+ if(strcmp(vaxis("AXIS_ORIENTATION"),"VERTICAL") != 0)
+ {
+ setError(1," Axis orientation supplied by user is not correct ...");
+ return;
+ }
+
+ if(!(const char*)(vaxis("AXIS_MIN_VALUE")))
+ vaxis("AXIS_MIN_VALUE") = ymin;
+ if(!(const char*)(vaxis("AXIS_MAX_VALUE")))
+ vaxis("AXIS_MAX_VALUE") = ymax;
+ if(!(const char*)vaxis("AXIS_TICK_LABEL_FORMAT"))
+ vaxis("AXIS_TICK_LABEL_FORMAT") = "(G7.1)";
+ }
+ else // user not supplied a vertical axis
+ {
+ vaxis("AXIS_ORIENTATION") = "VERTICAL";
+ vaxis("AXIS_TICK_POSITIONING") = "REGULAR";
+ vaxis("AXIS_MIN_VALUE") = ymin;
+ vaxis("AXIS_MAX_VALUE") = ymax;
+ vaxis("AXIS_TICK_LABEL_ORIENTATION") = "HORIZONTAL";
+ vaxis("AXIS_TICK_LABEL_FORMAT") = "(G7.1)";
+ vaxis("AXIS_TITLE_TEXT") = "Amplitude";
+ }
+
+ if (Shaxis_) // user supplied a horizontal axis
+ {
+ haxis = Shaxis_.justOneRequest();
+ if((const char*)haxis("AXIS_ORIENTATION"))
+ {
+ setError(1," Axis orientation supplied by user is not correct ...");
+ return;
+ }
+ }
+ else // user not supplied a horizontal axis
+ {
+ haxis("AXIS_ORIENTATION") = "HORIZONTAL";
+ haxis("AXIS_TICK_POSITIONING") = "REGULAR";
+ haxis("AXIS_MIN_VALUE") = float(Sntmin_);
+ haxis("AXIS_MAX_VALUE") = float(Sntlim_);
+ haxis("AXIS_TICK_LABEL_FREQUENCY") = 2;
+ haxis("AXIS_TICK_LABEL_FORMAT") = "(F4.0)";
+ haxis("AXIS_TITLE_TEXT") = "Legendre polynomial order (n)";
+ }
+}
+
+void Specgraph :: BuildCurveLineParam(MvRequest& pgraph,int nc,int istep)
+{
+ char caux[20]; // auxiliary variable
+
+ pgraph("GRAPH_TYPE") = "CURVE";
+ pgraph("GRAPH_LINE_THICKNESS") = 2;
+ if(Ssmooth_)
+ {
+ pgraph("GRAPH_CURVE_METHOD") = "ROUNDED";
+ pgraph("GRAPH_CURVE_INTERPOLATION") = Stension_.c_str();
+ }
+ else
+ pgraph("GRAPH_CURVE_METHOD") = "STRAIGHT";
+
+ pgraph("LEGEND") = "ON";
+ if(istep == 0)
+ pgraph("LEGEND_USER_TEXT") = "ANALYSIS";
+ else
+ {
+ sprintf(caux,"%d HOUR FORECAST",istep);
+ pgraph("LEGEND_USER_TEXT") = caux;
+ }
+
+ int iaux = nc;
+ if(iaux > 5) iaux = (nc%5) + 1;
+ switch(iaux)
+ {
+ case 1 :
+ pgraph("GRAPH_LINE_COLOUR") = "BLUE";
+ pgraph("GRAPH_LINE_STYLE") = "SOLID";
+ break;
+ case 2 :
+ pgraph("GRAPH_LINE_COLOUR") = "RED";
+ pgraph("GRAPH_LINE_STYLE") = "DASH";
+ break;
+ case 3 :
+ pgraph("GRAPH_LINE_COLOUR") = "GREEN";
+ pgraph("GRAPH_LINE_STYLE") = "DOT";
+ break;
+ case 4 :
+ pgraph("GRAPH_LINE_COLOUR") = "CYAN";
+ pgraph("GRAPH_LINE_STYLE") = "CHAIN_DOT";
+ break;
+ case 5 :
+ pgraph("GRAPH_LINE_COLOUR") = "PINK";
+ pgraph("GRAPH_LINE_STYLE") = "CHAIN_DASH";
+ break;
+ }
+}
+
+//---------------------------------------------------------------------------
+
+int Speccontour :: GetData(MvRequest& in)
+{
+ // Get general data
+ Stype_ = SPECCONTOUR;
+ if ( !GetDataGen(in) )
+ return FALSE;
+
+ // Get Y-axis limits values
+ if( !Svaxis_ )
+ {
+ Sntmin_ = 1;
+ Sntlim_ = (int)Smtrunc_;
+ }
+ else
+ {
+ Sntmin_ = (int)Svaxis_("AXIS_MIN_VALUE");
+ Sntlim_ = (int)Svaxis_("AXIS_MAX_VALUE");
+ }
+
+ // Get Nl24int and Hilorad
+ Snl24int_ = (strcmp(in("NL24INT"),"YES") == 0) ? TRUE : FALSE;
+ Shilorad_ = (const char*)in("HILORAD") ? (double)in("HILORAD") : 1.;
+
+ return TRUE;
+}
+
+MvRequest Speccontour :: PlotSpectra(MvRequest& spec)
+{
+ FILE* fp; // pointer to temporary file
+ char caux[50]; // auxiliary variable
+ int dim1,dim2; // input_field limits
+ int i,j; // auxiliary variables
+ int bmag; // field scale
+ string title; // title
+ string pname = marstmp(); // temporary path file
+ string fname = mbasename(pname.c_str()); // temporary file name
+
+ MvRequest plotspec; // output general request
+ MvRequest matrix("MATRIX"); // output matrix request
+ MvRequest pcont("MCONT"); // output contour request
+ MvRequest haxis("MAXIS"); // X-axis
+ MvRequest vaxis("MAXIS"); // Y-axis
+
+ // Set title
+ title = GetTitle(spec);
+ bmag = (int)spec("VALUE");
+ spec.advance();
+ if(bmag != 0)
+ sprintf(caux," Field scaled by 10**%d",bmag);
+ else
+ strcpy(caux," ");
+
+ title = title + caux;
+
+ // Set horizontal and vertical axis
+ BuildAxis(vaxis,haxis,spec);
+
+ // Create temporary file
+ if(!(fp = fopen(pname.c_str(),"w")))
+ {
+ setError(1," Temporary file open error ...");
+ return plotspec;
+ }
+
+ dim1 = (int)spec("VALUE"); // get matrix dimensions
+ spec.advance();
+ dim2 = (int)spec("VALUE");
+ spec.advance();
+ for (i = 0; i < dim1; i++)
+ {
+ for (j = 0; j < dim2; j++)
+ {
+ fprintf (fp,"%e ",(double)spec("VALUE"));
+ spec.advance();
+ }
+ }
+ fclose(fp);
+
+ // Create Matrix request
+ matrix("_NAME") = fname.c_str();
+ matrix("PATH")= pname.c_str();
+ matrix("FORMAT") = "ASCII";
+ matrix("DIMENSION") = dim2;
+ matrix("DIMENSION") += dim1;
+ matrix("TITLE") = title.c_str();
+ matrix("OFFSET") = 0;
+ matrix("TEMPORARY") = 1;
+
+ pcont("INPUT_FIELD_ORGANIZATION") = "FITTED";
+ pcont("CONTOUR_HILO_SUPPRESS_RADIUS") = Shilorad_;
+ pcont("CONTOUR_LEVEL_SELECTION_TYPE") = "COUNT";
+ pcont("CONTOUR_LEVEL_COUNT") = 10;
+
+ plotspec = haxis + vaxis + matrix + pcont;
+
+ return plotspec;
+}
+
+void Speccontour :: BuildAxis(MvRequest& vaxis,MvRequest& haxis,MvRequest& spec)
+{
+ int i; // auxiliary variable
+ int iilev; // number of steps
+ float ymin,ymax,yinc; // vertical axis limits
+
+ // Get vertical axis limits
+ ymin = (double)spec("VALUE");
+ spec.advance();
+ ymax = (double)spec("VALUE");
+ spec.advance();
+ yinc = (double)spec("VALUE");
+ spec.advance();
+
+ if (Svaxis_) // user supplied a vertical axis
+ {
+ vaxis = Svaxis_.justOneRequest();
+ if(strcmp(vaxis("AXIS_ORIENTATION"),"VERTICAL") != 0)
+ {
+ setError(1," Axis orientation supplied by user is not correct ...");
+ return;
+ }
+
+ if(!(const char*)(vaxis("AXIS_MIN_VALUE")))
+ vaxis("AXIS_MIN_VALUE") = ymin;
+ if(!(const char*)(vaxis("AXIS_MAX_VALUE")))
+ vaxis("AXIS_MAX_VALUE") = ymax;
+ if(!(const char*)(vaxis("AXIS_TICK_INTERVAL")))
+ vaxis("AXIS_TICK_INTERVAL") = yinc;
+ }
+ else // user not supplied a vertical axis
+ {
+ vaxis("AXIS_ORIENTATION") = "VERTICAL";
+ vaxis("AXIS_TICK_POSITIONING") = "REGULAR";
+ vaxis("AXIS_MIN_VALUE") = ymin;
+ vaxis("AXIS_MAX_VALUE") = ymax;
+ vaxis("AXIS_TICK_INTERVAL") = yinc;
+ }
+
+ // Get horizontal axis values
+ iilev = (int)spec("VALUE");
+ spec.advance();
+ haxis("AXIS_ORIENTATION") = "HORIZONTAL";
+ haxis("AXIS_MIN_VALUE") = 1.;
+ haxis("AXIS_MAX_VALUE") = float(iilev);
+ haxis("AXIS_TICK_INTERVAL") = 1.;
+ haxis("AXIS_TICK_LABEL_TYPE") = "LABEL_LIST";
+ for(i = 0; i < iilev; i++)
+ {
+ haxis("AXIS_TICK_LABEL_LIST") += (int)spec("VALUE");
+ spec.advance();
+ }
+}
+
+int main(int argc,char **argv)
+{
+ MvApplication theApp(argc,argv);
+ Specgraph specgraph("SPEC_GRAPH");
+ Speccontour speccont("SPEC_CONTOUR");
+
+ theApp.run();
+}
diff --git a/src/Spectra/Spectra.h b/src/Spectra/Spectra.h
new file mode 100644
index 0000000..901ca6c
--- /dev/null
+++ b/src/Spectra/Spectra.h
@@ -0,0 +1,88 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef SPECTRA_H
+#define SPECTRA_H
+
+#include <Metview.h>
+//#include <MvFortran.h>
+//#include <MvGribParC.h>
+
+//#ifdef FORTRAN_UPPERCASE
+//#define spectra_ SPECTRA
+//#endif
+
+//#ifdef FORTRAN_NO_UNDERSCORE
+//#define spectra_ spectra
+//#endif
+
+//extern "C" void spectra_(void);
+
+class SpectraF : public MvService {
+
+public:
+
+ SpectraF(char* a) : MvService(a) {}
+ ~SpectraF() {}
+ void serve(MvRequest&,MvRequest&);
+
+ virtual int GetData(MvRequest&) = 0;
+ int GetDataGen(MvRequest&);
+ int ComputeSpectra(MvRequest&);
+ virtual MvRequest PlotSpectra(MvRequest&) = 0;
+ virtual void BuildAxis(MvRequest&,MvRequest&,MvRequest&) = 0;
+ string GetTitle(MvRequest&);
+
+protected :
+
+ string Stitle_; // user title
+ int Stype_; // SPECGRAPH or SPECCONTOUR
+ int Sdc_; // subtracts out the diurnal cycle: TRUE or FALSE
+ int Snl24int_; // plots only every 24 hours: TRUE or FALSE
+ int Sntmin_; // axis lower value
+ int Sntlim_; // axis upper value
+ float Smtrunc_; // highest wavenumber in plots of spectra
+ MvFieldSet Sfset_; // field set
+ MvRequest Svaxis_; // vertical axis
+};
+
+class Specgraph : public SpectraF
+{
+
+public :
+
+ Specgraph(char* a) : SpectraF(a) {}
+ virtual int GetData(MvRequest&);
+ virtual MvRequest PlotSpectra(MvRequest&);
+ virtual void BuildAxis(MvRequest&,MvRequest&,MvRequest&);
+ void BuildCurveLineParam(MvRequest&,int,int);
+
+private:
+
+ string Stension_; // interpolation for smoothing curves
+ int Ssmooth_; // allows the curves to be smoothed: TRUE or FALSE
+ MvRequest Shaxis_; // horizontal axis
+};
+
+class Speccontour : public SpectraF
+{
+
+public :
+
+ Speccontour(char* a) : SpectraF(a) {}
+ virtual int GetData(MvRequest&);
+ virtual MvRequest PlotSpectra(MvRequest&);
+ virtual void BuildAxis(MvRequest&,MvRequest&,MvRequest&);
+
+private:
+
+ double Shilorad_; // searchs radius for plotting of high/low markers
+};
+
+#endif
diff --git a/src/Spectra/SpectraDef b/src/Spectra/SpectraDef
new file mode 100644
index 0000000..599ad60
--- /dev/null
+++ b/src/Spectra/SpectraDef
@@ -0,0 +1,129 @@
+SPECTRA_FAMILY; APPLICATION
+{
+ APPLICATION {
+ SPEC_GRAPH
+# SPEC_CONTOUR
+ } = SPEC_GRAPH
+}
+
+SPEC_GRAPH; Spectra Graph Application
+{
+ DATA
+ [ interface = icon, class = GRIB, exclusive = false,
+ help = help_data,
+ help_name = Data for Spectra,
+ help_directory = '/System/Defaults',
+ help_class = RETRIEVE,
+ help_definition = ( RETRIEVE, LEVTYPE = PL, LEVELIST = 850,
+ TYPE = FC, STEP = 12, PARAM = D )
+ ]
+ { @ }
+
+ DIURNAL_CYCLE {
+ YES
+ NO
+ } = NO
+
+ TRUNCATION
+ {
+ *
+ } = 213
+
+ TITLE [ visible = false ]
+ {
+ @
+ }
+
+ VERTICAL_AXIS
+ [visible = false, interface = icon, class = PAXIS, missing = ignored,
+ help = help_data,
+ help_name = Vertical Axis for Spectra,
+ help_directory = '/Metview/Defaults',
+ help_class = PAXIS,
+ help_definition = ( PAXIS,AXIS_ORIENTATION=VERTICAL,
+ AXIS_TICK_POSITIONING=REGULAR,
+ AXIS_TICK_LABEL_ORIENTATION=HORIZONTAL,
+ AXIS_TICK_LABEL_FORMAT=(G7.1),
+ AXIS_TITLE_TEXT=Amplitude)
+ ]
+ { @ }
+
+ HORIZONTAL_AXIS
+ [ visible = false, interface = icon, class = PAXIS, missing = ignored,
+ help = help_data,
+ help_name = Horizontal Axis for Spectra,
+ help_directory = '/Metview/Defaults',
+ help_class = PAXIS,
+ help_definition = ( PAXIS,AXIS_ORIENTATION=HORIZONTAL,
+ AXIS_TICK_POSITIONING=REGULAR,
+ AXIS_TICK_LABEL_FREQUENCY=2,
+ AXIS_TICK_LABEL_FORMAT=(F3.0),
+ AXIS_MIN_VALUE=1,
+ AXIS_MAX_VALUE=213,
+ AXIS_TITLE_TEXT=Legendre polynomial order n)
+ ]
+ { @ }
+
+ SMOOTHING {
+ YES
+ NO
+ } = NO
+
+ TENSION {
+ SPLINE
+ } = SPLINE
+}
+
+#----------------------------------------------------------------------
+
+SPEC_CONTOUR; Spec Contour Application
+{
+ DATA
+ [ interface = icon, class = GRIB, exclusive = false,
+ help = help_data,
+ help_name = Data for SpectraC,
+ help_directory = '/System/Defaults',
+ help_class = RETRIEVE,
+ help_definition = ( RETRIEVE, TYPE = FC, LEVTYPE = PL, LEVELIST = 850,
+ CLASS = OD, PARAM = D,
+ STEP = 6/12/24/36/48/60/72/84/96/108/120/132/144/156/168/180/192/204/216/228/240
+ )
+ ]
+ { @ }
+
+ DIURNAL_CYCLE {
+ YES
+ NO
+ } = NO
+
+ TRUNCATION
+ {
+ *
+ } = 213
+
+ TITLE {
+ @
+ }
+
+ VERTICAL_AXIS
+ [interface = icon, class = PAXIS, missing = ignored,
+ help = help_data,
+ help_name = Vertical Axis for SpectraC,
+ help_directory = '/Metview/Defaults',
+ help_class = PAXIS,
+ help_definition = ( PAXIS,AXIS_ORIENTATION=VERTICAL,
+ AXIS_MIN_VALUE=1,
+ AXIS_MAX_VALUE=213)
+ ]
+ { @ }
+
+ NL24INT {
+ YES
+ NO
+ } = NO
+
+ HILORAD
+ {
+ *
+ } = 1
+}
diff --git a/src/Spectra/SpectraRules b/src/Spectra/SpectraRules
new file mode 100644
index 0000000..e69de29
diff --git a/src/Spectra/speccont.F b/src/Spectra/speccont.F
new file mode 100644
index 0000000..f607abf
--- /dev/null
+++ b/src/Spectra/speccont.F
@@ -0,0 +1,167 @@
+C **************************** LICENSE START ***********************************
+C
+C Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+C of the Apache License version 2.0. In applying this license, ECMWF does not
+C waive the privileges and immunities granted to it by virtue of its status as
+C an Intergovernmental Organization or submit itself to any jurisdiction.
+C
+C ***************************** LICENSE END ************************************
+
+ SUBROUTINE SPECCONT (MTRUNCS,ILEV,ILVL,A,LNOCYC,NTMIN,
+ + NTLIM,L24INT,IERROR)
+C
+C F. II ECMWF AUG-96
+C SEND SPECTRA (CONTOUR MODE) TO MAIN APPLICATION
+C
+C INPUT :
+C MTRUNCS : TRUNCATE OUTPUT VALUE
+C ILEV : NUMBER OF CURVES TO BE PLOTTED
+C ILVL : STEPS VALUES
+C A : ARRAY OF DATA
+C LNOCYC : T - SUBTRACTS OUT THE DIURNAL CYCLE
+C NTMIN : Y-AXIS MIN VALUE
+C NTLIM : Y-AXIS MAX VALUE
+C L24INT : T - PLOTS ONLY EVERY 24 HOURS
+C
+C OUTPUT :
+C IERROR : 0 - NO ERROR, 1 - ERROR
+
+ IMPLICIT NONE
+
+#include <grbsh.h>
+
+ integer cputenv
+
+ REAL A(JLEV*JMTRUNC)
+ INTEGER MTRUNCS,ILEV,ILVL(JLEV),NTMIN,NTLIM,IERROR
+ LOGICAL LNOCYC,L24INT
+
+ INTEGER ITRUNC !MTRUNCS+1
+ INTEGER ILVLN(JLEV) !ILVL SUBSET
+ INTEGER IILVL(JLEV) !ILVLN SUBSET
+ INTEGER ILEVN !NEW ILEV VALUE
+ INTEGER IILEV !NEW ILEV VALUE
+ INTEGER INC !AXIS INCREMENT
+ INTEGER II,JJ,III,JJJ !AUXILIARIES VARIABLES
+ REAL B(JLEV*JMTRUNC) !ARRAY TO BE PLOTTED
+ REAL BMAX,BMAG !AUXILIARIES VARIABLES
+ REAL BSCALE !SCALE
+C
+C 1.0 INITIALIZE DATA
+C
+ IERROR = 0
+ ITRUNC = MTRUNCS + 1
+ IF (ILEV.GT.JLEV .OR. ITRUNC.GT.JMTRUNC) THEN
+ WRITE(*,'(4X,''ARRAYS TOO SMALL; ILEV,MTRUNCS = '',
+ + I4,1X,I4)')ILEV,MTRUNCS
+ JJ=cputenv('SPECTRA_ENV=MEMORY ERROR - SUBROUTINE SPECCONT')
+ IERROR = 1
+ RETURN
+ ENDIF
+ IF(LNOCYC) THEN !SUBTRACT OUT THE DAILY CYCLE
+ ILEVN = 0
+ II = 0
+ DO 10 JJ=1,ILEV
+ IF(MOD(ILVL(JJ),12).NE.0) GOTO 10
+ IF(MOD(ILVL(JJ),24).EQ.0) THEN
+ III = 1
+ ELSE
+ III = 2
+ ENDIF
+ ILEVN = ILEVN + 1
+ ILVLN(ILEVN) = ILVL(JJ)
+ DO 12 JJJ=1,ITRUNC
+ II = II + 1
+ A(II) = A(ITRUNC*(JJ -1)+JJJ) -
+ @ A(ITRUNC*(ILEV-III)+JJJ)
+ 12 CONTINUE
+ 10 CONTINUE
+
+C DONT PLOT THE LAST 2 COLUMNS (THE LAST TWO COLUMNS ARE ZEROS)
+ ILEVN = ILEVN - 2
+ ELSE
+ ILEVN = ILEV
+ DO 14 JJ=1,ILEV
+ ILVLN(JJ) = ILVL(JJ)
+ 14 CONTINUE
+ ENDIF
+C
+C 2.0 RE-ORDER THE INPUT DATA SO THAT THE FASTEST
+C INDEX IS THE HORIZONTAL AXIS
+C
+ IF(L24INT) THEN
+ IILEV = 0
+ DO 20 JJ=1,ILEVN
+ IF(MOD(ILVLN(JJ),24).NE.0) GOTO 20
+ IILEV = IILEV + 1
+ IILVL(IILEV) = ILVLN(JJ)
+ 20 CONTINUE
+ ELSE
+ IILEV = ILEVN
+ DO 22 JJ=1,ILEVN
+ IILVL(JJ) = ILVLN(JJ)
+ 22 CONTINUE
+ ENDIF
+
+ BMAX =-1.e21
+ II = 0
+ DO 24 JJ=1,ILEVN
+ IF(L24INT .AND. MOD(ILVLN(JJ),24).NE.0) GOTO 24
+ II = II + 1
+ DO 26 JJJ=1,ITRUNC
+ B(IILEV*(JJJ-1)+II) = A(ITRUNC*(JJ-1)+JJJ)
+ BMAX=MAX(BMAX,B(IILEV*(JJJ-1)+II))
+ 26 CONTINUE
+ 24 CONTINUE
+
+ BMAG = ALOG10(ABS(BMAX))
+ BSCALE=0.
+ IF (BMAG.LT.0) THEN
+ BMAG = 1.- AINT(BMAG)
+ BSCALE = 10**BMAG
+ DO 28 JJJ=1,ITRUNC
+ DO 29 II=1,ILEVN
+ B(IILEV*(JJJ-1)+II) = B(IILEV*(JJJ-1)+II)*BSCALE
+ 29 CONTINUE
+ 28 CONTINUE
+ ENDIF
+
+ CALL MSETN(BMAG) ! SEND FIELD SCALE FACTOR
+C
+C 3.0 SEND DATA AXIS TO APPLICATION
+C
+ ITRUNC = MIN0(ITRUNC,NTLIM+1) ! SEND Y-AXIS VALUES
+ INC = ITRUNC - NTMIN
+ IF(INC.LE.10) THEN
+ INC = 1
+ ELSE IF(INC.LE.50) THEN
+ INC = 5
+ ELSE IF(INC.LE.110) THEN
+ INC = 10
+ ELSE
+ INC = 20
+ ENDIF
+
+ CALL MSETN(REAL(NTMIN))
+ CALL MSETN(REAL(ITRUNC-1))
+ CALL MSETN(REAL(INC))
+
+ CALL MSETN(REAL(IILEV)) ! SEND X-AXIS VALUES
+ DO JJ=1,IILEV
+ CALL MSETN(REAL(IILVL(JJ)))
+ ENDDO
+C
+C 4.0 SEND DATA TO APPLICATION
+C
+ CALL MSETN(REAL(ITRUNC-NTMIN))
+ CALL MSETN(REAL(IILEV))
+ III=NTMIN*IILEV
+ DO II=1,ITRUNC-NTMIN ! SEND SPECTRA VALUES
+ DO JJ=1,IILEV
+ III=III+1
+ CALL MSETN(B(III))
+ ENDDO
+ ENDDO
+
+ RETURN
+ END
diff --git a/src/Spectra/specgraph.F b/src/Spectra/specgraph.F
new file mode 100644
index 0000000..fd344f1
--- /dev/null
+++ b/src/Spectra/specgraph.F
@@ -0,0 +1,123 @@
+C **************************** LICENSE START ***********************************
+C
+C Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+C of the Apache License version 2.0. In applying this license, ECMWF does not
+C waive the privileges and immunities granted to it by virtue of its status as
+C an Intergovernmental Organization or submit itself to any jurisdiction.
+C
+C ***************************** LICENSE END ************************************
+
+ SUBROUTINE SPECGRAPH (MTRUNCS,ILEV,ILVL,A,LNOCYC,NTMIN,
+ + NTLIM,IERROR)
+C
+C F. II ECMWF AUG-96
+C SEND SPECTRA (GRAPH MODE) TO MAIN APPLICATION
+C
+C INPUT :
+C MTRUNCS : TRUNCATE OUTPUT VALUE
+C ILEV : NUMBER OF CURVES TO BE PLOTTED
+C ILVL : STEPS VALUES
+C A : ARRAY OF DATA
+C LNOCYC : T - SUBTRACTS OUT THE DIURNAL CYCLE
+C NTMIN : X-AXIS MIN VALUE
+C NTLIM : X-AXIS MAX VALUE
+C
+C OUTPUT :
+C IERROR : 0 - NO ERROR, 1 - ERROR
+C
+
+ IMPLICIT NONE
+
+#include <grbsh.h>
+
+ integer cputenv
+
+ REAL A(JLEV*JMTRUNC)
+ INTEGER MTRUNCS,ILEV,ILVL(JLEV),NTMIN,NTLIM,IERROR
+ LOGICAL LNOCYC
+
+ INTEGER ITRUNC !MTRUNCS+1
+ INTEGER ITLIM !MINIMUM VALUE(NTLIM,MTRUNCS)
+ INTEGER ILVLN(JLEV) !ILVL SUBSET
+ INTEGER ILEVN !NEW ILEV VALUE
+ INTEGER II,JJ,III,JJJ !AUXILIARIES VARIABLES
+ REAL YMIN,YMAX !AXIS MIN/MAX VALUES
+ REAL RAUX !AUXILIARY VARIABLE
+C
+C 1.0 INITIALIZE DATA
+C
+ IERROR = 0
+ ITRUNC = MTRUNCS + 1
+ IF (ILEV.GT.JLEV .OR. ITRUNC.GT.JMTRUNC) THEN
+ WRITE(*,'(4X,''ARRAYS TOO SMALL; ILEV,MTRUNCS = '',
+ + I4,1X,I4)')ILEV,MTRUNCS
+ JJ=cputenv('SPECTRA_ENV=MEMORY ERROR - SUBROUTINE SPECGRAPH')
+ IERROR = 1
+ RETURN
+ ENDIF
+
+ IF (LNOCYC) THEN !SUBTRACT OUT THE DAILY CYCLE
+ ILEVN = 0
+ II = 0
+ DO 10 JJ=1,ILEV
+ IF(MOD(ILVL(JJ),12).NE.0) GOTO 10
+ IF(MOD(ILVL(JJ),24).EQ.0) THEN
+ III=1
+ ELSE
+ III=2
+ ENDIF
+ ILEVN = ILEVN + 1
+ ILVLN(ILEVN) = ILVL(JJ)
+ DO 12 JJJ=1,ITRUNC
+ II = II + 1
+ A(II) = A(ITRUNC*(JJ -1)+JJJ) -
+ @ A(ITRUNC*(ILEV-III)+JJJ)
+ 12 CONTINUE
+ 10 CONTINUE
+ ELSE
+ ILEVN = ILEV
+ DO 14 JJ=1,ILEV
+ ILVLN(JJ) = ILVL(JJ)
+ 14 CONTINUE
+ ENDIF
+C
+C 2.0 FIND OUT THE MIN/MAX VALUES FOR VERTICAL AXIS
+C
+ ITLIM = MIN0(NTLIM,ITRUNC-1)
+ YMAX = -1.E20
+ YMIN = 1.E20
+ DO 50 JJ=1,ILEVN
+ DO 55 II=NTMIN,ITLIM
+ YMAX = MAX(YMAX,A(ITRUNC*(JJ-1)+II+1))
+ YMIN = MIN(YMIN,A(ITRUNC*(JJ-1)+II+1))
+ 55 CONTINUE
+ 50 CONTINUE
+ RAUX = (YMAX-YMIN)/10.
+ YMAX = YMAX+RAUX
+ YMIN = YMIN-RAUX
+
+ CALL MFI_RETURN_NUMBER(YMIN) ! SEND VERTICAL AXIS LIMITS
+ CALL MFI_RETURN_NUMBER(YMAX)
+ CALL MFI_RETURN_NUMBER(REAL(ILEVN)) ! SEND NUMBER OF CURVERS
+C
+C 3.0 LOOP OVER CURVES
+C
+ DO 70 III=1,ILEVN
+
+ CALL MFI_RETURN_NUMBER(REAL(ILVLN(III))) ! SEND INITIAL STEP
+
+C DEFINE X/Y VALUES
+
+C II = 0
+ CALL MFI_RETURN_NUMBER(REAL(ITLIM-NTMIN+1)) ! SEND NUMBER OF SPECTRA VALUES
+ DO 72 JJ=NTMIN,ITLIM
+C II = II + 1
+C B(II) = A(ITRUNC*(IN-1) + JJ + 1)
+C XARAY(II) = REAL(JJ)
+ CALL MFI_RETURN_NUMBER(A(ITRUNC*(III-1) + JJ + 1)) ! SEND SPECTRA VALUES
+ CALL MFI_RETURN_NUMBER(REAL(JJ))
+ 72 CONTINUE
+ 70 CONTINUE
+
+ RETURN
+ END
diff --git a/src/Spectra/specpro.F b/src/Spectra/specpro.F
new file mode 100644
index 0000000..6820d8b
--- /dev/null
+++ b/src/Spectra/specpro.F
@@ -0,0 +1,52 @@
+C **************************** LICENSE START ***********************************
+C
+C Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+C of the Apache License version 2.0. In applying this license, ECMWF does not
+C waive the privileges and immunities granted to it by virtue of its status as
+C an Intergovernmental Organization or submit itself to any jurisdiction.
+C
+C ***************************** LICENSE END ************************************
+
+ SUBROUTINE SPECPRO(P1,K1,P2,K2,MTRUNCS,MT,IPTS,IERROR)
+C
+C CATALOGUES THE SPECTRA
+C
+C INPUT :
+C P1 : SPECTRAL FIELD
+C K1 : LENGTH OF ARRAY P1
+C K2 : LENGTH OF ARRAY P2
+C MT : TRUNCATE INPUT (ORIGINAL) VALUE
+C MTRUNCS : TRUNCATE OUTPUT VALUE
+C IPTS : NUMBER OF STEPS
+C
+C OUTPUT :
+C P2 : SPECTRA
+C IERROR : 0 - NO ERROR, 1 - ERROR
+C
+ INTEGER cputenv
+ INTEGER K1,MTRUNCS,MT,IPTS,IERROR
+ DIMENSION P1(K1),P2(K2)
+C
+C CALCULATION OF SPECTRUM
+C
+ IERROR = 0
+ IF(MT.LT.MTRUNCS) THEN
+ JJ=cputenv('SPECTRA_ENV=TRUNCATION VALUE TOO BIG')
+ IERROR = 1
+ RETURN
+ ENDIF
+
+C IF(NFIELDR.EQ.131 .OR. NFIELDR.EQ.132 .OR.
+C @ NFIELDR.EQ.160.OR. NFIELDR.EQ.161) MT = MT + 1
+ DO 100 N=0,MTRUNCS
+ PT = 0.
+ DO 1000 M=0,N
+ INDEXI = ( 2*(N+1) + M*(2*MT + 1 - M) )
+ PT = PT + P1(INDEXI )*P1(INDEXI ) +
+ @ P1(INDEXI-1)*P1(INDEXI-1)
+ 1000 CONTINUE
+ P2((MTRUNCS+1)*(IPTS-1) + N+1) = SQRT(PT)
+ 100 CONTINUE
+
+ RETURN
+ END
diff --git a/src/Spectra/spectra.F b/src/Spectra/spectra.F
new file mode 100644
index 0000000..ad78ca6
--- /dev/null
+++ b/src/Spectra/spectra.F
@@ -0,0 +1,160 @@
+C **************************** LICENSE START ***********************************
+C
+C Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+C of the Apache License version 2.0. In applying this license, ECMWF does not
+C waive the privileges and immunities granted to it by virtue of its status as
+C an Intergovernmental Organization or submit itself to any jurisdiction.
+C
+C ***************************** LICENSE END ************************************
+
+C COMPUTE SPECTRA
+C
+ SUBROUTINE SPECTRA
+ USE grib_api
+
+C IMPLICIT NONE
+
+#include "grbsh.h"
+
+ integer cputenv
+
+
+#ifdef __alpha
+ INTEGER*8 IGRIB1,ICNT,ISIZE
+#endif
+
+ INTEGER ISPECGRAPH,ISPECCONTOUR
+ PARAMETER (ISPECGRAPH=1,ISPECCONTOUR=0)
+
+ INTEGER JTP,IRET,KWORD,IERROR,JJ ! AUXILIARY VARIABLES
+ INTEGER IPTS ! NUMBER OF STEPS
+ INTEGER GRIB_ID ! GRIB_API ID FOR A SINGLE GRIB MESSAGE
+ INTEGER ISIZE ! NUMBER OF VALUES IN THE FIELD
+ INTEGER ISTATUS ! RETURN STATUS FROM GRIB_API
+ INTEGER IVALUE ! INTEGER VALUE RETURNED FROM GRIB_API
+ INTEGER ISTEPS(JNS) ! LIST OF STEP VALUES
+ INTEGER MT ! TRUNCATE INPUT (ORIGINAL) VALUE
+ REAL NTMIN,NTLIM ! AXIS MIN/MAX
+ REAL MTRUNC ! TRUNCATION VALUE
+ REAL ITYPE ! PLOT TYPE
+ REAL IDAILY ! 1 - SUBTRACTS OUT THE DIURNAL CYCLE
+ REAL I24INT ! 1 - PLOTS ONLY EVERY 24 HOURS
+ REAL, ALLOCATABLE :: FIELD(:) ! GRIB FIELD
+ REAL, ALLOCATABLE :: SPEC(:) ! SPECTRA
+ LOGICAL LDAILY ! T - SUBTRACTS OUT THE DIURNAL CYCLE
+ LOGICAL L24INT ! T - PLOTS ONLY EVERY 24 HOURS
+
+ CHARACTER errmsg*80
+ CHARACTER GRID_TYPE*80
+C
+C -----------------------------------------------------------------------
+C
+C GET ARGUMENTS FROM APPLICATION
+C
+
+ CALL MFI_GET_FIELDSET(IGRIB1,ICNT) !GET FIELDSET
+ CALL MFI_GET_NUMBER(MTRUNC) !GET TRUNCATION VALUE
+ CALL MFI_GET_NUMBER(ITYPE) !GET PLOT TYPE
+ CALL MFI_GET_NUMBER(IDAILY) !GET DIURNAL CYCLE VALUE
+ CALL MFI_GET_NUMBER(I24INT) !GET PLOT STEP
+ CALL MFI_GET_NUMBER(NTMIN) !GET LOWER VALUE OF THE AXIS
+ CALL MFI_GET_NUMBER(NTLIM) !GET UPPER VALUE OF THE AXIS
+
+
+ IF(IDAILY.EQ.1.) THEN
+ LDAILY=.TRUE.
+ ELSE
+ LDAILY=.FALSE.
+ ENDIF
+
+ IF(I24INT.EQ.1.) THEN
+ L24INT=.TRUE.
+ ELSE
+ L24INT=.FALSE.
+ ENDIF
+C
+C COMPUTE SPECTRA, LOOP ON FIELDS
+C
+ ISIZE = JMUAF
+ IPTS = 0
+ DO 100 JTP=1,ICNT
+
+C GET NEXT FIELD FROM FIELDSET AND EXPAND IT
+ CALL MFI_LOAD_ONE_GRIB(IGRIB1,GRIB_ID)
+ IRET = 1
+
+ CALL GRIB_GET_SIZE(GRIB_ID, 'values', ISIZE)
+ ALLOCATE(SPEC(ISIZE), FIELD(ISIZE))
+ CALL GRIB_GET_REAL8_ARRAY( GRIB_ID, 'values', FIELD, ISTATUS )
+
+ IF(ISTATUS.NE.0) THEN
+ WRITE(errmsg,'(A,I5)') 'SPECTRA_ENV=GRIB_API ERROR', ISTATUS
+ JJ=cputenv(errmsg)
+ RETURN
+ ENDIF
+
+ CALL GRIB_GET_STRING(GRIB_ID, 'gridType', GRID_TYPE)
+ IF(GRID_TYPE.NE.'sh') THEN
+ JJ=cputenv
+ + ('SPECTRA_ENV=DATA IS NOT IN SPHERICAL HARMONICS FORMAT')
+ RETURN
+ ENDIF
+
+C GET STEP VALUE
+ IPTS = IPTS + 1
+ CALL GRIB_GET_INT(GRIB_ID, 'mars.step', IVALUE)
+ ISTEPS(IPTS) = IVALUE
+C IF(KSEC1(15).EQ.1) THEN
+C ISTEPS(IPTS) = KSEC1(16)
+C ELSE
+C ISTEPS(IPTS) = KSEC1(16) * 24
+C ENDIF
+
+C COMPUTE SPECTRA
+C MT = KSEC2(2)
+ CALL GRIB_GET_INT(GRIB_ID, 'J', MT)
+ CALL SPECPRO (FIELD,ISIZE,SPEC,ISIZE,INT(MTRUNC),MT,
+ + IPTS,IERROR)
+ IF(IERROR.NE.0) RETURN
+
+ 100 CONTINUE
+
+C SEND TITLE INFORMATION TO APPLICATION
+C KWORD = KSEC1(10)*10000 + KSEC1(11)*100 + KSEC1(12) ! DATE (YYMMDD)
+C CALL GRIB_GET_INT(GRIB_ID, 'yearOfCentury', IVALUE)
+C KWORD = IVALUE*10000
+C CALL GRIB_GET_INT(GRIB_ID, 'month', IVALUE)
+C KWORD = KWORD + (IVALUE*100)
+C CALL GRIB_GET_INT(GRIB_ID, 'day', IVALUE)
+C KWORD = KWORD + IVALUE
+ CALL GRIB_GET_INT(GRIB_ID, 'date', KWORD)
+ KWORD = MOD(KWORD, 1000000)
+
+ CALL GRIB_GET_INT(GRIB_ID, 'levelType', IVALUE)
+ CALL MFI_RETURN_NUMBER(REAL(IVALUE))
+ CALL GRIB_GET_INT(GRIB_ID, 'level', IVALUE)
+ CALL MFI_RETURN_NUMBER(REAL(IVALUE))
+ CALL GRIB_GET_INT(GRIB_ID, 'hour', IVALUE)
+ CALL MFI_RETURN_NUMBER(REAL(IVALUE))
+ CALL MFI_RETURN_NUMBER(REAL(KWORD))
+ CALL GRIB_GET_INT(GRIB_ID, 'paramId', IVALUE)
+ CALL MFI_RETURN_NUMBER(REAL(IVALUE))
+
+C CALL MSETN(REAL(KSEC1(8)))
+C CALL MSETN(REAL(KSEC1(13)))
+C CALL MSETN(REAL(KWORD))
+C CALL MSETN(REAL(KSEC1(6)))
+
+C SEND SPECTRA VALUES TO APPLICATION
+ IF (ITYPE.EQ.ISPECGRAPH) THEN
+ CALL SPECGRAPH(INT(MTRUNC),IPTS,ISTEPS,SPEC,LDAILY,
+ + INT(NTMIN),INT(NTLIM),IERROR)
+ ELSE
+ CALL SPECCONT(INT(MTRUNC),IPTS,ISTEPS,SPEC,LDAILY,
+ + INT(NTMIN),INT(NTLIM),L24INT,IERROR)
+ ENDIF
+
+ IF (IERROR.NE.0) RETURN !ERROR
+
+ RETURN
+ END
diff --git a/src/Stations/Makefile.in b/src/Stations/Makefile.in
index 07d22b6..758ddbd 100644
--- a/src/Stations/Makefile.in
+++ b/src/Stations/Makefile.in
@@ -42,6 +42,7 @@ subdir = src/Stations
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -149,6 +150,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -172,6 +175,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/StdAppManager/Makefile.in b/src/StdAppManager/Makefile.in
index 2b2fb87..41ede1b 100644
--- a/src/StdAppManager/Makefile.in
+++ b/src/StdAppManager/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/StdAppManager
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -140,6 +141,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -163,6 +166,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/StdAppManager/NetcdfPlusDef b/src/StdAppManager/NetcdfPlusDef
index 03f77a5..f20ae23 100644
--- a/src/StdAppManager/NetcdfPlusDef
+++ b/src/StdAppManager/NetcdfPlusDef
@@ -6,6 +6,7 @@ NETCDF_VISUALISER; Netcdf Visualiser Application
GEO_VECTORS
GEO_MATRIX
XY_POINTS
+ XY_VECTORS
XY_MATRIX
} = GEO_POINTS
@@ -35,7 +36,13 @@ NETCDF_VISUALISER; Netcdf Visualiser Application
NETCDF_Y_VARIABLE
{ @ } = ''
- NETCDF_X2_VARIABLE
+ NETCDF_X_POSITION_VARIABLE
+ { @ } = ''
+
+ NETCDF_Y_POSITION_VARIABLE
+ { @ } = ''
+
+ NETCDF_X2_VARIABLE
{ @ } = ''
NETCDF_Y2_VARIABLE
@@ -44,6 +51,12 @@ NETCDF_VISUALISER; Netcdf Visualiser Application
NETCDF_VALUE_VARIABLE
{ @ } = ''
+ NETCDF_DIMENSION_SETTING_METHOD
+ {
+ INDEX
+ VALUE
+ } = VALUE
+
NETCDF_DIMENSION_SETTING
{
/
@@ -57,7 +70,7 @@ NETCDF_VISUALISER; Netcdf Visualiser Application
{ @ } = ''
NETCDF_POSITION_TYPE
- {
+ {
ARRAY
MATRIX
} = ARRAY
diff --git a/src/StdAppManager/NetcdfPlusRules b/src/StdAppManager/NetcdfPlusRules
index caa1b5d..dc63966 100644
--- a/src/StdAppManager/NetcdfPlusRules
+++ b/src/StdAppManager/NetcdfPlusRules
@@ -1,6 +1,8 @@
%if NETCDF_PLOT_TYPE = GEO_POINTS %then
%unset NETCDF_X_VARIABLE
%unset NETCDF_Y_VARIABLE
+ %unset NETCDF_X_POSITION_VARIABLE
+ %unset NETCDF_Y_POSITION_VARIABLE
%unset NETCDF_X2_VARIABLE
%unset NETCDF_Y2_VARIABLE
%unset NETCDF_X_COMPONENT_VARIABLE
@@ -10,6 +12,8 @@
%if NETCDF_PLOT_TYPE = GEO_VECTORS %then
%unset NETCDF_X_VARIABLE
%unset NETCDF_Y_VARIABLE
+ %unset NETCDF_X_POSITION_VARIABLE
+ %unset NETCDF_Y_POSITION_VARIABLE
%unset NETCDF_X2_VARIABLE
%unset NETCDF_Y2_VARIABLE
%unset NETCDF_VALUE_VARIABLE
@@ -18,6 +22,8 @@
%if NETCDF_PLOT_TYPE = GEO_MATRIX %then
%unset NETCDF_X_VARIABLE
%unset NETCDF_Y_VARIABLE
+ %unset NETCDF_X_POSITION_VARIABLE
+ %unset NETCDF_Y_POSITION_VARIABLE
%unset NETCDF_X_COMPONENT_VARIABLE
%unset NETCDF_Y_COMPONENT_VARIABLE
@@ -26,6 +32,18 @@
%unset NETCDF_LONGITUDE_VARIABLE
%unset NETCDF_X_COMPONENT_VARIABLE
%unset NETCDF_Y_COMPONENT_VARIABLE
+ %unset NETCDF_X_POSITION_VARIABLE
+ %unset NETCDF_Y_POSITION_VARIABLE
+ %unset NETCDF_POSITION_TYPE
+
+%if NETCDF_PLOT_TYPE = XY_VECTORS %then
+ %unset NETCDF_LATITUDE_VARIABLE
+ %unset NETCDF_LONGITUDE_VARIABLE
+ %unset NETCDF_X_VARIABLE
+ %unset NETCDF_Y_VARIABLE
+ %unset NETCDF_X2_VARIABLE
+ %unset NETCDF_Y2_VARIABLE
+ %unset NETCDF_VALUE_VARIABLE
%unset NETCDF_POSITION_TYPE
%if NETCDF_PLOT_TYPE = XY_MATRIX %then
@@ -33,3 +51,5 @@
%unset NETCDF_LONGITUDE_VARIABLE
%unset NETCDF_X_COMPONENT_VARIABLE
%unset NETCDF_Y_COMPONENT_VARIABLE
+ %unset NETCDF_X_POSITION_VARIABLE
+ %unset NETCDF_Y_POSITION_VARIABLE
diff --git a/src/StdAppManager/ObjectSpec.StdAppManager b/src/StdAppManager/ObjectSpec.StdAppManager
index 4102a09..48122ae 100644
--- a/src/StdAppManager/ObjectSpec.StdAppManager
+++ b/src/StdAppManager/ObjectSpec.StdAppManager
@@ -22,7 +22,7 @@ state,
service = StdAppManager
state,
- class = NETCDF_GEO_POINTS/NETCDF_GEO_MATRIX/NETCDF_XY_MATRIX/NETCDF_XY_POINTS/NETCDF_GEO_VECTORS,
+ class = NETCDF_GEO_POINTS/NETCDF_GEO_MATRIX/NETCDF_XY_MATRIX/NETCDF_XY_POINTS/NETCDF_GEO_VECTORS/NETCDF_XY_VECTORS,
action = visualise,
service = uPlotManager
diff --git a/src/StdAppManager/StdAppManager.cc b/src/StdAppManager/StdAppManager.cc
index 8199f3a..4a796d9 100644
--- a/src/StdAppManager/StdAppManager.cc
+++ b/src/StdAppManager/StdAppManager.cc
@@ -28,25 +28,34 @@ void StdAppManager::serve(MvRequest& in,MvRequest& out)
}
string prefix = verb.substr(0,found+1);
- // Build the application verb
- string plotType = prefix + "PLOT_TYPE";
- const char* type = in(plotType.c_str());
- prefix += type;
+ // Build the application verb
+ string plotType = prefix + "PLOT_TYPE";
+ const char* type = in(plotType.c_str());
+ prefix += type;
- // special case - INPUT_XY_AREA only exists in Metview -
- // Magics should see it as INPUT_XY_POINTS
+ // special case - INPUT_XY_AREA only exists in Metview -
+ // Magics should see it as INPUT_XY_POINTS
- if (prefix == "INPUT_XY_AREA")
- prefix = "INPUT_XY_POINTS";
+ if (prefix == "INPUT_XY_AREA")
+ prefix = "INPUT_XY_POINTS";
- // Create output request
- out = in;
- out.setVerb(prefix.c_str());
- out.unsetParam(plotType.c_str());
- out("_VERB") = prefix.c_str();
- out("_CLASS") = prefix.c_str();
+ // Create output request
+ out = in;
+ out.setVerb(prefix.c_str());
+ out.unsetParam(plotType.c_str());
+ out("_VERB") = prefix.c_str();
+ out("_CLASS") = prefix.c_str();
+
+
+ // another special case - Magics does not like having the default
+ // value of NETCDF_POSITION_TYPE sent to it
+ const char *netcdfPosType = in("NETCDF_POSITION_TYPE");
+ if (netcdfPosType && !strcmp(netcdfPosType, "ARRAY"))
+ {
+ out.unsetParam("NETCDF_POSITION_TYPE");
+ }
cout << "StdAppManager::serve out" << endl;
out.print();
diff --git a/src/Thermo/BufrThermo.cc b/src/Thermo/BufrThermo.cc
new file mode 100644
index 0000000..c8772ab
--- /dev/null
+++ b/src/Thermo/BufrThermo.cc
@@ -0,0 +1,475 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "BufrThermo.h"
+#include "MvNetCDF.h"
+#include "MvObsSet.h"
+
+const int TOBSTEMP = 12001;
+const int TOBSTD = 12003;
+const int TOBSDIR = 11001;
+const int TOBSSTRENGTH = 11002;
+const double PI = 3.14159265;
+
+BufrThermo::BufrThermo() :
+ Thermo("BUFR_THERMO"),
+ counter_(0),
+ pCount_(0),
+ nlev_(0),
+ nTIME_STR_(13)
+{
+ //type_ = "MXSECTION";
+ //view_ = "MXSECTIONVIEW";
+}
+
+BufrThermo::BufrThermo(const char* kw) :
+ Thermo(kw)
+{
+ //type_ = kw;
+ //view_ = "MXSECTIONVIEW";
+}
+
+void
+BufrThermo::initialiseDataMemory()
+{
+ pCount_ = 0;
+ T_.clear(); TD_.clear();
+ U_.clear(); V_.clear();
+ P_.clear();
+}
+
+bool BufrThermo::getInputParameters( MvRequest& in )
+{
+ // Get data input parameter
+ in.getValue(bufr_,"DATA");
+
+ // Get station input parameter
+ in.getValue(station_,"STATION");
+
+ return true;
+}
+
+// The data structure contains vectors for Temp, Td, Wind and Pressure.
+// There is only one Pressure vector related to the other 3 data. This means
+// that these 3 data may contain different number of Missing values, which will
+// be allocated in those positions when there is no Pressure level defined.
+bool BufrThermo::processData()
+{
+ // If it is not a BUFR data then it has been already processed
+ if ( strcmp(bufr_.getVerb(),"BUFR") != 0 )
+ return true;
+
+ // Create a temporary netCDF file
+ string ncFileName = this->ncFileName();
+ MvNetCDF netcdf(ncFileName,'w');
+ if ( !netcdf.isValid() )
+ {
+ setError(1,"Thermo ERROR: Can not open a new netCDF file");
+ return false;
+ }
+
+ // Get location info from the station
+ MvObsSet obsset(bufr_);
+ MvObsSetIterator iter(obsset);
+ if( !getIdent(station_,iter) )
+ {
+ if( !getLocation(station_,iter) )
+ {
+ setError(1, "Thermo ERROR: WMO station number and/or location missing...");
+ return false;
+ }
+ }
+
+ // Initialize obs variables
+ MvBufrParam obsTemp(TOBSTEMP), obsTd(TOBSTD),
+ obsDirection(TOBSDIR), obsStrength(TOBSSTRENGTH);
+
+ iter.setMessageType(2); //-- Vertical soundings (other than satellite)
+
+ // Evaluate dimensions
+ // Remove this function after updating library MvNetCDF to create
+ // files of type Netcdf4 (allowing multiple unlimited dimensions)
+ nlev_ = this->evaluateNLevels(iter);
+
+ // Main loop
+ // Compute data values
+ MvObs obs;
+ obsset.rewind();
+ counter_ = 0;
+ while ( obs = iter() )
+ {
+ //obs.printAllValues();
+
+ // Skip PILOT
+ if( obs.messageSubtype() == 91 ) //-- ECMWF code for PILOT!
+ {
+ setError(0,"Thermo: Skip PILOT soundings (full TEMP sounding needed)" );
+ continue;
+ }
+
+ // Initialise data values storage
+ this->initialiseDataMemory();
+
+ // Get/compute data values for all pressure levels
+ double val;
+ float PrevLevel = FLT_MAX;
+ float flevel = obs.firstPressureLevel();
+ while( flevel != MissingValue )
+ {
+ //-- Pressure levels decrease in the main sounding data.
+ //-- At the end of msg there can be data for "special levels"
+ //-- ( e.g. 'Maximum wind level') which refer back to lower
+ //-- levels (higher pressure) and which should not be used.
+ if( flevel >= PrevLevel )
+ break;
+
+ float myT = obs.valueByPressureLevel( flevel, obsTemp);
+ float myDew = obs.valueByPressureLevel( flevel, obsTd);
+ float myDir = obs.valueByPressureLevel( flevel, obsDirection);
+ float myStr = obs.valueByPressureLevel( flevel, obsStrength);
+
+ // Temperatura value
+ val = ( myT == MissingValue ) ? MissingValue : myT - K2C;
+ T_.push_back(val);
+
+ // Dewpoint value
+ val = ( myDew == MissingValue ) ? MissingValue : myDew - K2C;
+ TD_.push_back(val);
+
+ // Wind values
+ if ( myDir == MissingValue )
+ {
+ U_.push_back(MissingValue);
+ V_.push_back(MissingValue);
+ }
+ else
+ {
+ U_.push_back( -myStr * sin(myDir*PI/180.0) );
+ V_.push_back( -myStr * cos(myDir*PI/180.0) );
+ }
+
+ // Pressure value
+ P_.push_back(flevel);
+ pCount_++;
+
+ PrevLevel = flevel;
+ flevel = obs.nextPressureLevel();
+ } // end while
+
+ // Fill the data arrays with missing values, since nlev_ (calculated
+ // maximum number of levels) may be bigger than pCount_ (number of levels
+ // of a given message
+ for ( int i = pCount_; i < nlev_; i++ )
+ {
+ T_[i] = MissingValue;
+ TD_[i] = MissingValue;
+ U_[i] = MissingValue;
+ V_[i] = MissingValue;
+ P_[i] = MissingValue;
+ }
+
+ // Consistency check
+ if ( pCount_ <= 1)
+ {
+ setError(1,"Thermo ERROR: Problems with BUFR data.....");
+ return false;
+ }
+
+ // Write info to the netCDF file
+ if ( !this->generate(netcdf,obs) )
+ {
+ setError(1,"Thermo ERROR: generate netCDF");
+ return false;
+ }
+
+ counter_++;
+ } // end main loop
+
+ if ( counter_ == 0 )
+ {
+ setError(1,"Thermo ERROR: No Data found for given Station...");
+ return false;
+ }
+
+ // Close netCDF file
+ netcdf.close();
+
+ return true;
+}
+
+bool BufrThermo::generate( MvNetCDF& netcdf, MvObs& obs )
+{
+ // Create netcdf variables, dimensions and global atributes
+ if ( counter_ == 0 )
+ {
+ if ( !this->ncInit(netcdf,obs) )
+ {
+ setError(1,"Thermo ERROR: Failure to initilise a netCDF file");
+ return false;
+ }
+ }
+
+ // Get date and time info and generate time key (yyyymmddhhmm)
+ TMetTime tmpdate = obs.obsTime();
+ ostringstream oss;
+ oss << setfill( '0' )
+ << setw( 4 ) << tmpdate.GetYear()
+ << setw( 2 ) << tmpdate.GetMonth()
+ << setw( 2 ) << tmpdate.GetDay()
+ << setw( 2 ) << tmpdate.GetHour()
+ << setw( 2 ) << tmpdate.GetMin();
+
+ // Get netcdf variables
+ MvNcVar *time = netcdf.getVariable(sTIME);
+ MvNcVar *nlev = netcdf.getVariable(sNLEV);
+ MvNcVar *temp = netcdf.getVariable(sTEMP);
+ MvNcVar *dew = netcdf.getVariable(sDEWPOINT);
+ MvNcVar *press = netcdf.getVariable(sPRESSURE);
+ MvNcVar *uwind = netcdf.getVariable(sU);
+ MvNcVar *vwind = netcdf.getVariable(sV);
+ MvNcVar *xwind = netcdf.getVariable(sXWIND);
+ if ( !time || !temp || !dew || !press || !uwind || !vwind || !xwind )
+ {
+ setError(1,"Thermo ERROR: accessing netCDF variables");
+ return false;
+ }
+
+ // Add data to the variables
+ const char* ctime = oss.str().c_str();
+ time->setCurrent(counter_);
+ bool btime = time->put(ctime,1,strlen(ctime)+1);
+ nlev->setCurrent(counter_);
+ bool bnlev = nlev->put(&pCount_,1,1);
+ temp->setCurrent(counter_);
+ bool btemp = temp->put(T_,1,nlev_);
+ dew->setCurrent(counter_);
+ bool bdew = dew->put(TD_,1,nlev_);
+ press->setCurrent(counter_);
+ bool bpress = press->put(P_,1,nlev_);
+ uwind->setCurrent(counter_);
+ bool buwind = uwind->put(U_,1,nlev_);
+ vwind->setCurrent(counter_);
+ bool bvwind = vwind->put(V_,1,nlev_);
+ xwind->setCurrent(counter_);
+ vector <double> xv(nlev_,1000.5);
+ bool bxwind = xwind->put(xv,1,nlev_);
+ if ( !btime || !bnlev || !btemp || !bdew || !bpress || !buwind || !bvwind || !bxwind )
+ {
+ setError(1,"Thermo ERROR: writing a netCDF variable");
+ return false;
+ }
+
+ return true;
+}
+
+bool BufrThermo::ncInit(MvNetCDF &netcdf, MvObs& obs)
+{
+ // Get geographical location
+ MvLocation loc = obs.location();
+ ostringstream oss;
+ oss << loc.latitude() << '/' << loc.longitude();
+
+ // Add global attributes to the netcdf file
+ netcdf.addAttribute("_FILL_VALUE",MissingValue);
+ netcdf.addAttribute("Station",obs.WmoIdentNumber());
+ netcdf.addAttribute("Coordinates",oss.str().c_str());
+
+ // Create variables
+ vector<long> values_ndim;
+ vector<string> values_sdim;
+ values_ndim.push_back(0); // unlimited
+ values_sdim.push_back(sTIME);
+
+ // Create variable for number of levels
+ if ( !netcdf.addVariable(sNLEV,ncInt,values_ndim,values_sdim) )
+ return false;
+
+ // Create variable time
+ values_ndim.push_back(nTIME_STR_);
+ values_sdim.push_back(sTIME_STR);
+ if ( !netcdf.addVariable(sTIME,ncChar,values_ndim,values_sdim) )
+ return false;
+
+ // Create variables temperature, dewpoint, pressure, wind
+ values_ndim[1] = nlev_;
+ values_sdim[1] = sNLEV;
+ if ( !netcdf.addVariable(sTEMP,ncFloat,values_ndim,values_sdim) )
+ return false;
+ if ( !netcdf.addVariable(sDEWPOINT,ncFloat,values_ndim,values_sdim) )
+ return false;
+ if ( !netcdf.addVariable(sPRESSURE,ncFloat,values_ndim,values_sdim) )
+ return false;
+ if ( !netcdf.addVariable(sU,ncFloat,values_ndim,values_sdim) )
+ return false;
+ if ( !netcdf.addVariable(sV,ncFloat,values_ndim,values_sdim) )
+ return false;
+ if ( !netcdf.addVariable(sXWIND,ncFloat,values_ndim,values_sdim) )
+ return false;
+
+ return true;
+}
+
+bool BufrThermo::createOutputRequest(MvRequest& out)
+{
+ //MUDE ESTE TESTE PARA UMA FUNCAO. SUBSTITUA TAMBEM NA SUBROUTINA ACIMA
+ // If it is not a GRIB data then it has been already processed
+// if ( strcmp(pars_.dataReq_.getVerb(),"GRIB") != 0 )
+// return createSimpleOutputRequest(out);
+
+ // Get default parameter to be plotted
+ //ParamInfo* parInfo = plotVariable(params);
+ //if ( !parInfo )
+ // return false;
+
+ // Create netCDF data request
+ // Get action mode
+ string actionMode = this->actionMode();
+//(actionMode == "analyse" || actionMode == "prepare") )
+//verb = "NETCDF";
+
+ MvRequest ncDataReq("NETCDF");
+ ncDataReq("PATH") = this->ncFileName().c_str();
+ ncDataReq("TEMPORARY") = 1;
+
+ // Create Temperature output request
+ MvRequest dReq("NETCDF_XY_POINTS");
+ dReq("NETCDF_DATA") = ncDataReq;
+ dReq("NETCDF_Y_VARIABLE") = sPRESSURE.c_str();
+ dReq("NETCDF_X_VARIABLE") = sTEMP.c_str();
+
+ MvRequest gReq("MGRAPH");
+ gReq("GRAPH_LINE_COLOUR") = "red";
+ gReq("GRAPH_LINE_THICKNESS") = 8;
+ gReq("GRAPH_MISSING_DATA_MODE") = "join";
+ gReq("GRAPH_MISSING_DATA_STYLE") = "solid";
+ gReq("GRAPH_MISSING_DATA_THICKNESS") = 8;
+ MvRequest dataReq = dReq + gReq;
+
+ // Create Dewpoint output request
+ dReq("NETCDF_X_VARIABLE") = sDEWPOINT.c_str();
+
+ gReq("GRAPH_LINE_STYLE") = "dash",
+ gReq("GRAPH_MISSING_DATA_STYLE") = "dash";
+
+ // Create wind output request
+ MvRequest wdReq("NETCDF_XY_VECTORS");
+ wdReq("NETCDF_DATA") = ncDataReq;
+ wdReq("NETCDF_Y_POSITION_VARIABLE") = sPRESSURE.c_str();
+ wdReq("NETCDF_X_POSITION_VARIABLE") = sXWIND.c_str();
+ wdReq("NETCDF_X_COMPONENT_VARIABLE") = sU.c_str();
+ wdReq("NETCDF_Y_COMPONENT_VARIABLE") = sV.c_str();
+
+ MvRequest wReq("MWIND");
+ wReq("WIND_FIELD_TYPE") = "flags";
+ wReq("WIND_FLAG_COLOUR") = "black";
+
+ dataReq = dataReq + dReq + gReq + wdReq + wReq;
+
+ // Create customised Cartesian View request.
+ // If an icon was dropped into a view, uPlot will ignore it.
+ // Mode-specific options
+ MvRequest viewReq("CARTESIANVIEW");
+ viewReq("MAP_PROJECTION") = "tephigram";
+ //viewReq("X_AUTOMATIC") = "on"; //Not working 20140304, Sylvie is going to fixed.
+ viewReq("X_MIN") = -40; //Remove this later when the X_AUTOMATIC problem is fixed.
+ viewReq("X_MAX") = -40;
+
+ // If action is not visualisation related then return the netcdf data.
+ // Also, add the visualisation and original requests as hidden parameters.
+ // These may be used later to help the visualisation of the netcdf data.
+ if ( !this->isVisualise() )
+ {
+ out = ncDataReq;
+// ncDataReq("_VIEW") = view_.c_str();
+// ncDataReq("_VISUALISE") = out1;
+// ncDataReq("_CARTESIANVIEW") = viewReq;
+// ncDataReq("_ORIGINAL_REQUEST") = origReq_;
+ return true;
+ }
+
+ // Create title information
+ MvRequest titleReq("MTEXT");
+ titleReq("TEXT_LINE_1") = this->title().c_str();
+ titleReq("TEXT_FONT_SIZE") = 0.5;
+
+ // Final output request
+ out = viewReq + dataReq + titleReq;
+
+ return true;
+}
+
+int BufrThermo::evaluateNLevels(MvObsSetIterator& iter)
+{
+ MvObs obs;
+ int nn;
+ int nlev = -1;
+ while ( obs = iter() )
+ {
+ nn = obs.numberOfPressureLevels();
+ if ( nlev < nn )
+ nlev = nn;
+ }
+
+ return nlev;
+}
+
+bool BufrThermo::getIdent(MvRequest& station, MvObsSetIterator& iter)
+{
+ long ident = station("IDENT");
+ if (ident)
+ {
+ iter.setWmoStation(ident);
+ return true;
+ }
+
+ return false;
+}
+
+bool BufrThermo::getLocation(MvRequest& station, MvObsSetIterator& iter)
+{
+ double lat = station("LATITUDE");
+ double lon = station("LONGITUDE");
+ double eps = 0.0001; //-- to allow for BUFR rounding differences
+
+ MvLocation loc1(lat+eps,lon-eps);
+ MvLocation loc2(lat-eps,lon+eps);
+
+ iter.setArea(loc1,loc2);
+
+ return true;
+}
+
+string BufrThermo::title()
+{
+ // Get first time information from the netcdf file
+ MvNetCDF netcdf(this->ncFileName(),'r');
+ MvNcVar *time = netcdf.getVariable(sTIME);
+ NcDim* dim = time->getDimension(1);
+ int size = dim->size();
+ vector <char> vtime;
+ time->setCurrent(0L);
+ time->get(vtime,1,size);
+
+ // Decode time info
+ string str(vtime.begin(),vtime.end());
+ string sdate = str.substr(0,8);
+ string stime = str.substr(8,4);
+
+ // Create title
+ char title[200];
+ MvNcAtt* tmpatt = netcdf.getAttribute("Coordinates");
+ str = tmpatt->as_string(0);
+ int ipos = str.find('/');
+ float lat = atof(str.substr(0,ipos).c_str());
+ float lon = atof(str.substr(ipos+1).c_str());
+ sprintf(title,"%s %s [lat,lon: %.2f,%.2f]",
+ sdate.c_str(), stime.c_str(), lat, lon );
+
+ return string(title);
+}
diff --git a/src/Thermo/BufrThermo.h b/src/Thermo/BufrThermo.h
new file mode 100644
index 0000000..e19b75f
--- /dev/null
+++ b/src/Thermo/BufrThermo.h
@@ -0,0 +1,76 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef BUFRTHERMO_H
+#define BUFRTHERMO_H
+
+#include "Thermo.h"
+
+class MvObs;
+class MvObsSetIterator;
+class MvNetCDF;
+
+class BufrThermo : public Thermo {
+
+public:
+
+ // Constructors
+ BufrThermo();
+ BufrThermo(const char*);
+
+ // Destructor
+ ~BufrThermo() {}
+
+ // Initialise data values storage
+ void initialiseDataMemory();
+
+ // Get input parameters
+ bool getInputParameters(MvRequest&);
+
+ // Process data and build all data structures
+ bool processData();
+
+ // Post-process and generate NetCDF output
+ bool generate( MvNetCDF&, MvObs& );
+
+ // Generate output request
+ bool createOutputRequest(MvRequest&);
+
+ // Create a default title
+ string title();
+
+protected:
+
+ // Initialise a netCDF file: variables, dimensions and attributes
+ bool ncInit(MvNetCDF&, MvObs&);
+
+ // Get Identification and Location from the Bufr data
+ bool getIdent(MvRequest&, MvObsSetIterator&);
+ bool getLocation(MvRequest&, MvObsSetIterator&);
+
+ // Get the maximum number of pressure levels
+ int evaluateNLevels(MvObsSetIterator&);
+
+ // Variables members
+ MvRequest bufr_; // Bufr input request
+ MvRequest station_; // Station input request
+
+ int counter_; // number of thermo data
+ int pCount_; // number of levels
+ int nlev_; // maximum number of levels
+ int nTIME_STR_; // 13 - yyyymmddhhmm + 1 ('end of string')
+
+ vector <double> T_; // variables data
+ vector <double> P_;
+ vector <double> TD_;
+ vector <double> U_;
+ vector <double> V_;
+};
+
+#endif
diff --git a/src/Thermo/DataThermo.cc b/src/Thermo/DataThermo.cc
new file mode 100644
index 0000000..b586de2
--- /dev/null
+++ b/src/Thermo/DataThermo.cc
@@ -0,0 +1,590 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "DataThermo.h"
+#include "MvException.h"
+#include "MvMiscelaneous.h"
+#include "MvNetCDF.h"
+#include "Thermo.h"
+
+const int cFREE = -999; // to mark free array cells
+const double ZEPQMI = 1.0e-12; // minimum threshold for specific humidity
+
+//_____________________________________________________________________________
+
+MvThermoDataBase::MvThermoDataBase( MvField& fieldToken, const MvThermoParams& pars ) :
+ lnspFlag_(false),
+ counter_( 0 ),
+ tCount_( 0 ),
+ dCount_( 0 ),
+ uCount_( 0 ),
+ vCount_( 0 ),
+ pCount_( 0 ),
+ nTIME_STR_( 17 ),
+ currField_( fieldToken ),
+ pars_( pars )
+{
+}
+
+void
+MvThermoDataBase::initialiseDataMemory()
+{
+ uCount_ = vCount_ = tCount_ = dCount_ = pCount_ = 0;
+
+ T_.clear(); Q_.clear(); TD_.clear();
+ P_.clear(); PUV_.clear();
+ U_.clear(); V_.clear();
+}
+
+void
+MvThermoDataBase::readOneSetOfFields( MvFieldSetIterator& iter )
+{
+ const double cBIGDOUBLE = 3.4E35;
+ const double oneMinute = 1.0 / 24.0;
+
+ // Get time key info
+ this->generateTimeKey();
+
+ // Initialise data values storage
+ this->initialiseDataMemory();
+
+ // Main loop
+ // It assumes that the input fieldset is sorted by Levelist, e.g.,
+ // fieldset = Level1 Param1..n, Level2 Param1...n, ..., Levelm Param1...n
+ bool flag = true;
+ while( flag ) //-- read while same valid time
+ {
+ // Get value from the field
+ double val = this->getValueFromCurrentField();
+ if ( val > cBIGDOUBLE )
+ throw MvException("Thermo: Unsupported grid or point outside field!");
+
+ // Save data and pressure values to the appropriated structure
+ this->collectValue(val);
+
+ // Move to the next field
+ nextField_ = iter();
+ if( ! nextField_ )
+ flag = false; //-- end-of-file
+ else
+ flag = ( fabs(currField_.yyyymmddFoh() - nextField_.yyyymmddFoh()) < oneMinute ) &&
+ ( fabs(currField_.stepFoh() - nextField_.stepFoh()) < oneMinute );
+
+ if( flag )
+ currField_ = nextField_;
+ }
+
+ // Set of current fields preprocessed - everything ok so far?
+ if( tCount_ != dCount_ )
+ throw MvException("Thermo: Number of levels for T, Q are inconsistent!");
+
+ if( tCount_ <= 1 )
+ throw MvException("Thermo: T fields are missing!");
+
+ if( needsLnsp() && !lnspFlag_ )
+ throw MvException("Thermo: LNSP field missing!");
+
+ if( uCount_ != vCount_ )
+ throw MvException("Thermo: Different number of levels for U and V!");
+}
+
+bool
+MvThermoDataBase::generate( MvNetCDF& netcdf )
+{
+ // Create netcdf variables, dimensions and global atributes
+ if ( counter_ == 0 )
+ {
+ if ( !this->ncInit(netcdf) )
+ throw MvException("Thermo: Failure to initilise a netCDF file!");
+ }
+
+ // Get netcdf variables
+ // tCount_ and dCount_ should have the same value
+ long size = tCount_;
+ MvNcVar *time = netcdf.getVariable(sTIME);
+ MvNcVar *temp = netcdf.getVariable(sTEMP);
+ MvNcVar *dew = netcdf.getVariable(sDEWPOINT);
+ MvNcVar *press = netcdf.getVariable(sPRESSURE);
+ if ( !time || !temp || !dew || !press )
+ throw MvException("Thermo: ERROR accessing netCDF variables");
+
+ // Compute pressure and dewpoint
+ this->computeLevelsTd();
+
+ // Re-scale values
+ this->rescaleValues();
+
+ // Add data to the variables
+ const char* key = timeKey_.c_str();
+ time->setCurrent(counter_);
+ if (!time->put(key,1,strlen(key)+1))
+ throw MvException("Thermo: ERROR writing a netCDF variable: time");
+
+ temp->setCurrent(counter_);
+ if (!temp->put(T_,1,size))
+ throw MvException("Thermo: ERROR writing a netCDF variable: t");
+
+ dew->setCurrent(counter_);
+ if (!dew->put(TD_,1,size))
+ throw MvException("Thermo: ERROR writing a netCDF variable: td");
+
+ press->setCurrent(counter_);
+ if (!press->put(P_,1,size))
+ throw MvException("Thermo: ERROR writing a netCDF variable: pres");
+
+ // Add wind info to netcdf
+ if( windExist() )
+ if ( !this->generateWind(netcdf) )
+ return false;
+
+ counter_++;
+
+ return true;
+}
+
+bool
+MvThermoDataBase::generateWind(MvNetCDF &netcdf)
+{
+ // Number of levels
+ long size = uCount_; // uCount_ and vCount_ should have the same value
+
+ // Generate NetCDF variables
+ vector<long> values_ndim;
+ vector<string> values_sdim;
+ values_ndim.push_back(0);
+ values_ndim.push_back(size);
+ values_sdim.push_back(sTIME);
+ values_sdim.push_back(sNLEVWIND);
+
+ MvNcVar *uwind = netcdf.addVariable(sU,ncDouble,values_ndim,values_sdim);
+ MvNcVar *vwind = netcdf.addVariable(sV,ncDouble,values_ndim,values_sdim);
+ MvNcVar *xvals = netcdf.addVariable(sXWIND,ncDouble,values_ndim,values_sdim);
+ MvNcVar *pwind = netcdf.addVariable(sPWIND,ncDouble,values_ndim,values_sdim);
+
+ // Add U values
+ uwind->setCurrent(counter_);
+ if (!uwind->put(U_,1,size))
+ throw MvException("Thermo: ERROR writing a netCDF variable: u");
+
+ // Add V values
+ vwind->setCurrent(counter_);
+ if (!vwind->put(V_,1,size))
+ throw MvException("Thermo: ERROR writing a netCDF variable: v");
+
+ // Add horizontal axis values
+ vector <double> xv(size,1000.5);
+ xvals->setCurrent(counter_);
+ if (!xvals->put(xv,1,size))
+ throw MvException("Thermo: ERROR writing a netCDF variable: xwind");
+
+ // Add pressure wind values
+ pwind->setCurrent(counter_);
+ if (!pwind->put(PUV_,1,size))
+ throw MvException("Thermo: ERROR writing a netCDF variable: pwind");
+
+ return true;
+}
+
+//
+// Value can be extracted in several ways
+//
+double
+MvThermoDataBase::getValueFromCurrentField()
+{
+ double y;
+ switch( pars_.pointType_ )
+ {
+ case eInterpolated:
+ y = currField_.interpolateAt( pars_.lon_, pars_.lat_ ); //-- x/y
+ break;
+
+ case eGridPoint:
+ y = currField_.nearestGridpoint( pars_.lon_, pars_.lat_ ); //-- x/y
+ break;
+
+ case eAreaAverage:
+ y = currField_.integrate( pars_.lat_, pars_.lon_, pars_.lat2_, pars_.lon2_ ); //-- n/w/s/e
+ break;
+ }
+
+ return y;
+}
+
+void
+MvThermoDataBase::collectValue( double val )
+{
+ // Get param and level
+ int par = currField_.parameter();
+ int level = this->getLevel();
+
+ // Save param and level values
+ // Levels for wind and temp/dewpoint are only saved once
+ if( par == pars_.uFieldId_ )
+ {
+ U_.push_back(val);
+ uCount_++;
+ }
+ else if( par == pars_.vFieldId_ )
+ {
+ V_.push_back(val);
+ PUV_.push_back(level);
+ vCount_++;
+ }
+ else if( par == pars_.tempId_ )
+ {
+ T_.push_back(val);
+ P_.push_back(level);
+ tCount_++;
+ }
+ else if( par == pars_.dewId_ )
+ {
+ Q_.push_back(max(ZEPQMI,val));
+ dCount_++;
+ }
+ else if( par == pars_.lnPressId_ )
+ processPressure( val );
+ else
+ {
+ ostringstream oss;
+ oss << "Tephigrams: field contains unknown data, param = " << par;
+ throw MvException( oss.str().c_str() );
+ }
+}
+
+void
+MvThermoDataBase::rescaleValues()
+{
+ for ( int i = 0; i < tCount_; i++ )
+ {
+ T_[i] = T_[i] - K2C;
+ TD_[i] = TD_[i] - K2C;
+ P_[i] = P_[i] / 100.;
+ }
+
+ // Re-scale pressure related to the wind
+ if ( windExist() )
+ {
+ for ( int i = 0; i < uCount_; i++ )
+ PUV_[i] = PUV_[i] / 100.;
+ }
+}
+
+void
+MvThermoDataBase::generateTimeKey()
+{
+ MvRequest req = currField_.getRequest();
+
+ const char* date = req("DATE");
+ const char* time = req("TIME");
+ const char* step = req("STEP");
+
+ // variable nTIME_STR = 17 (8+4+4+1)
+ ostringstream oss;
+ oss << setfill( '0' )
+ << setw( 8 ) << date
+ << setw( 4 ) << ( time ? time : "TTTT" )
+ << setw( 4 ) << ( step ? step : "SSSS" );
+
+ timeKey_ = oss.str();
+}
+
+bool MvThermoDataBase::ncInit(MvNetCDF &netcdf)
+{
+ // Add global attributes to the netcdf file
+ if ( !this->ncGlobalAttributes(netcdf) )
+ return false;
+
+ // Create variables
+ long size = tCount_;
+ vector<long> values_ndim;
+ vector<string> values_sdim;
+ values_ndim.push_back(0);
+ values_sdim.push_back(sTIME);
+
+ values_ndim.push_back(nTIME_STR_);
+ values_sdim.push_back(sTIME_STR);
+ if ( !netcdf.addVariable(sTIME,ncChar,values_ndim,values_sdim) )
+ return false;
+
+ values_ndim[1] = size;
+ values_sdim[1] = sNLEV;
+ if ( !netcdf.addVariable(sTEMP,ncFloat,values_ndim,values_sdim) )
+ return false;
+ if ( !netcdf.addVariable(sDEWPOINT,ncFloat,values_ndim,values_sdim) )
+ return false;
+ if ( !netcdf.addVariable(sPRESSURE,ncFloat,values_ndim,values_sdim) )
+ return false;
+
+ return true;
+}
+
+bool MvThermoDataBase::ncGlobalAttributes(MvNetCDF &netcdf)
+{
+ netcdf.addAttribute("_FILL_VALUE",MissingValue);
+ netcdf.addAttribute("DewPoint Formulation",pars_.formulaPrintName().c_str());
+ switch( pars_.pointType_ )
+ {
+ case eInterpolated:
+ {
+ ostringstream oss;
+ oss << pars_.lat_
+ << '/'
+ << pars_.lon_;
+
+ return netcdf.addAttribute("Coordinates",oss.str().c_str());
+ }
+ break;
+
+ case eGridPoint:
+ {
+ MvLocation loc = currField_.nearestGridPointLocation( MvLocation( pars_.lat_, pars_.lon_ ) );
+ ostringstream oss;
+ oss << loc.latitude() << '/'
+ << loc.longitude();
+
+ return netcdf.addAttribute("Coordinates",oss.str().c_str());
+ }
+ break;
+
+ case eAreaAverage:
+ {
+ ostringstream oss;
+ oss << pars_.lat_ << '/'
+ << pars_.lon_ << '/'
+ << pars_.lat2_ << '/'
+ << pars_.lon2_;
+
+ return netcdf.addAttribute("Coordinates",oss.str().c_str());
+ }
+ break;
+ }
+
+ return true;
+}
+
+bool
+MvThermoDataBase::windExist()
+{
+ bool flag = uCount_ ? true : false;
+ return flag;
+}
+
+//==============================================================
+// MvThermoDataHalfLevels
+//______________________________________________________________
+
+void
+MvThermoDataHalfLevels::computeLevelsTd()
+{
+ for( int k = 0; k < dCount_; k++)
+ {
+ P_[k] = currField_.meanML_to_Pressure_bySP( exp(LNSP_), int(P_[k]) );
+ TD_.push_back( metview::dewPointFromQ( P_[k], T_[k], Q_[k], pars_.dewPointFormulaType_ ) );
+ }
+
+ // Wind: model to pressure levelIndex
+ if ( windExist() )
+ {
+ for( int k = 0; k < uCount_; k++)
+ PUV_[k] = currField_.meanML_to_Pressure_bySP( exp(LNSP_), int(PUV_[k]) );
+ }
+}
+
+void
+MvThermoDataHalfLevels::processPressure( double val )
+{
+ lnspFlag_ = true;;
+ LNSP_ = val;
+}
+
+
+//=============================================================
+// MvThermoDataFullLevels
+//_____________________________________________________________
+
+void
+MvThermoDataFullLevels::computeLevelsTd()
+{
+ for( int k = 0; k < dCount_; k++)
+ {
+ P_[k] = currField_.ML_to_Pressure_bySP( exp(LNSP_), int(P_[k]) );
+ TD_.push_back( metview::dewPointFromQ( P_[k], T_[k], Q_[k], pars_.dewPointFormulaType_ ) );
+ }
+}
+
+//_____________________________________________________________________________
+
+void
+MvThermoDataFullLevels::processPressure( double val )
+{
+ lnspFlag_ = true;
+ LNSP_ = val;
+}
+
+//==============================================================
+// MvThermoDataPressureLevels
+//______________________________________________________________
+
+MvThermoDataPressureLevels::MvThermoDataPressureLevels( MvField& fieldToken, const MvThermoParams& pars )
+ : MvThermoDataBase( fieldToken, pars )
+{
+}
+
+void
+MvThermoDataPressureLevels::computeLevelsTd()
+{
+ for( int k = 0; k < dCount_; k++)
+ {
+ TD_.push_back( metview::dewPointFromQ( P_[k]*100., T_[k], Q_[k], pars_.dewPointFormulaType_) );
+ }
+}
+
+void
+MvThermoDataPressureLevels::processPressure( double )
+{
+ //-- not needed if pressure levels
+}
+
+void
+MvThermoDataPressureLevels::rescaleValues()
+{
+ for ( int i = 0; i < tCount_; i++ )
+ {
+ T_[i] = T_[i] - K2C;
+ TD_[i] = TD_[i] - K2C;
+ }
+}
+
+//==============================================================
+// MvThermoDataUkmoNDLevels
+//______________________________________________________________
+
+MvThermoDataUkmoNDLevels::MvThermoDataUkmoNDLevels( MvField& fieldToken, const MvThermoParams& pars )
+ : MvThermoDataBase( fieldToken, pars )
+{
+}
+
+void
+MvThermoDataUkmoNDLevels::collectValue( double val )
+{
+ // Get param and level
+ int par = currField_.parameter();
+ int level = this->getLevel();
+
+ // Save param and level values
+ // Levels for wind are only saved once
+ if( par == pars_.uFieldId_ )
+ {
+ U_.push_back(val);
+ uCount_++;
+ }
+ else if( par == pars_.vFieldId_ )
+ {
+ V_.push_back(val);
+ PUV_.push_back(level);
+ vCount_++;
+ }
+ else if( par == pars_.tempId_ )
+ {
+ T_.push_back(val);
+ tCount_++;
+ }
+ else if( par == pars_.dewId_ )
+ {
+ Q_.push_back(max(ZEPQMI,val));
+ dCount_++;
+ }
+ else if( par == pars_.lnPressId_ )
+ processPressure( val );
+ else
+ {
+ ostringstream oss;
+ oss << "Tephigrams: field contains unknown data, param = " << par;
+ throw MvException( oss.str().c_str() );
+ }
+}
+
+void
+MvThermoDataUkmoNDLevels::processPressure( double val)
+{
+ pCount_++;
+ P_.push_back(val);
+}
+
+void
+MvThermoDataUkmoNDLevels::computeLevelsTd()
+{
+ // Consistency check 1: assumes that all input data are related to the
+ // same set of levelist. Therefore, all the data counters should have
+ // the same value.
+ if ( pCount_ != tCount_ || pCount_ != dCount_ )
+ {
+ ostringstream oss;
+ oss << "Thermo: UKmodel, the numbers of fields are inconsistent = " << pCount_ << " " << tCount_ << " " << dCount_;
+ throw MvException( oss.str().c_str() );
+ }
+
+ // Compute and save levels and dewpoints values
+ for( int k = 0; k < dCount_; k++)
+ {
+ TD_.push_back(metview::dewPointFromQ( P_[k], T_[k], Q_[k], pars_.dewPointFormulaType_ ));
+ }
+}
+
+void
+MvThermoDataUkmoNDLevels::rescaleValues()
+{
+ for ( int i = 0; i < tCount_; i++ )
+ {
+ T_[i] = T_[i] - K2C;
+ TD_[i] = TD_[i] - K2C;
+ }
+}
+
+//________________________________________________________
+//
+// Factory to create and return an object of the required
+// tephidata class.
+//
+MvThermoDataBase* MvThermoDataFactory( MvField& f, MvThermoParams p )
+{
+ const int cECMWF = 98;
+
+ MvFieldExpander expa( f );
+
+ //-- "standard" ECMWF data
+ if( f.centre() == cECMWF && f.isModelLevel() )
+ {
+ cout << "Factory: MvThermoDataHalfLevels" << endl;
+ return new MvThermoDataHalfLevels( f, p );
+ }
+
+ //-- non-ECMWF data
+ if( f.vertCoordCoefPairCount() == 1 )
+ {
+ cout << "Factory: MvThermoDataFullLevels" << endl;
+ return new MvThermoDataFullLevels( f, p );
+ }
+
+ //-- pressure level data
+ if( f.isPressureLevel() )
+ {
+ cout << "Factory: MvThermoDataPressureLevels" << endl;
+ return new MvThermoDataPressureLevels( f, p );
+ }
+
+ //-- UKMO New Dynamics data
+ if( f.levelType() == cML_UKMO_ND )
+ {
+ cout << "Factory: MvThermoDataUkmoNDLevels" << endl;
+ return new MvThermoDataUkmoNDLevels( f, p );
+ }
+
+ return 0; //-- unimplemented data
+}
diff --git a/src/Thermo/DataThermo.h b/src/Thermo/DataThermo.h
new file mode 100644
index 0000000..99e4372
--- /dev/null
+++ b/src/Thermo/DataThermo.h
@@ -0,0 +1,208 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+// MvTephiData.h - Dec2004/vk - original file
+// DataThermo.h - Jan2014/fii - update to new Thermo application
+//
+// The purpose of these classes is to clean and simplify Tephigram
+// code. Note that this is partly a Q&D solution as some methods are
+// duplicated (with a simplified interface) from class MvTephiFrame.
+//
+// What is more, this class hierarchy made it much easier to add new
+// data types, like plain pressure levels and UKMO New Dynamics data.
+//
+
+#ifndef DATATHERMO_H
+#define DATATHERMO_H
+
+#include "ParamsThermo.h"
+#include "MvFieldSet.h"
+
+class MvNetCDF;
+
+//______________________________________________________________________
+// MvThermoDataBase
+//
+// Abstract base class for different thermoD input data types
+//
+
+class MvThermoDataBase
+{
+ private:
+
+ MvThermoDataBase();
+ MvThermoDataBase( MvThermoDataBase& );
+
+ public:
+
+ MvThermoDataBase( MvField&, const MvThermoParams& );
+ virtual ~MvThermoDataBase(){}
+
+ // Initialise data values storage
+ void initialiseDataMemory();
+
+ // Reads and preprocesses one set of data, i.e. all fields valid at
+ // the same time. Fields are sorted and thus we can trust the iterator.
+ void readOneSetOfFields( MvFieldSetIterator& );
+
+ // Post-process and generate NetCDF output
+ bool generate( MvNetCDF& );
+ bool generateWind(MvNetCDF &netcdf);
+
+ MvField returnToken() { return nextField_; }
+
+ // Wind flag info
+ bool windExist();
+
+ protected:
+
+ virtual void computeLevelsTd() = 0;
+ virtual void processPressure( double ) = 0;
+
+ // Re-scale values
+ virtual void rescaleValues();
+
+ // Get level value
+ virtual int getLevel() { return (int)currField_.level(); }
+
+ // Store parameter value
+ virtual void collectValue( double );
+
+ // Initialise a netCDF file: variables, dimensions and attributes
+ bool ncInit(MvNetCDF&);
+
+ // Add global attributes to the netcdf file
+ bool ncGlobalAttributes(MvNetCDF&);
+
+ // Get value from current field
+ double getValueFromCurrentField();
+
+ // Create a time key
+ void generateTimeKey();
+
+ // Check if LNSP field is required
+ virtual bool needsLnsp() = 0;
+
+ // Variable members
+ bool lnspFlag_; // T: lnsp is available
+ int counter_; // Number of plots
+ int tCount_; // Temp count
+ int dCount_; // Dewpoint count
+ int uCount_,vCount_; // Wind count
+ int pCount_; // Pressure/Levels count
+
+ int nTIME_STR_; // 17 - yyyymmddhhmmstep + 1 ('end of string')
+
+ // Data values storage
+ vector <double> T_; // Temperature
+ vector <double> Q_; // Humidity
+ vector <double> U_; // U wind
+ vector <double> V_; // V wind
+ vector <double> TD_; // Dewpoint
+ vector <double> P_; // Pressure
+ vector <double> PUV_; // Pressure for wind (can be different from P_)
+ double LNSP_;
+
+ string timeKey_;
+
+ MvField currField_;
+ MvField nextField_;
+ MvThermoParams pars_;
+};
+
+//______________________________________________________________________
+// MvThermoDataHalfLevels
+// Class for ECMWF type level data
+
+class MvThermoDataHalfLevels : public MvThermoDataBase
+{
+ public:
+
+ MvThermoDataHalfLevels( MvField& fieldToken, const MvThermoParams& pars )
+ : MvThermoDataBase( fieldToken, pars ){}
+
+ virtual ~MvThermoDataHalfLevels(){}
+
+ protected:
+
+ virtual void computeLevelsTd();
+ virtual void processPressure( double );
+ virtual bool needsLnsp() { return true; }
+
+};
+
+//______________________________________________________________________
+// MvThermoDataFullLevels
+// Class for "simple" level data
+
+class MvThermoDataFullLevels : public MvThermoDataBase
+{
+ public:
+
+ MvThermoDataFullLevels( MvField& fieldToken, const MvThermoParams& pars )
+ : MvThermoDataBase( fieldToken, pars ){}
+
+ virtual ~MvThermoDataFullLevels(){}
+
+ protected:
+
+ virtual void computeLevelsTd();
+ virtual void processPressure( double );
+ virtual bool needsLnsp() { return true; }
+};
+
+//______________________________________________________________________
+// MvThermoDataPressureLevels
+// Class for data on pressure levels
+
+class MvThermoDataPressureLevels : public MvThermoDataBase
+{
+ public:
+
+ MvThermoDataPressureLevels( MvField&, const MvThermoParams& );
+ virtual ~MvThermoDataPressureLevels(){}
+
+ protected:
+
+ virtual void rescaleValues();
+ virtual void computeLevelsTd();
+ virtual void processPressure( double );
+ virtual bool needsLnsp() { return false; }
+};
+
+//______________________________________________________________________
+// MvThermoDataUkmoNDLevels
+// Class for UKMO "New Dynamics" data
+
+class MvThermoDataUkmoNDLevels : public MvThermoDataBase
+{
+ public:
+
+ MvThermoDataUkmoNDLevels( MvField&, const MvThermoParams& );
+ virtual ~MvThermoDataUkmoNDLevels(){}
+
+ protected:
+
+ virtual void computeLevelsTd();
+ virtual void collectValue( double );
+ virtual void processPressure( double );
+ virtual void rescaleValues();
+
+ // Level value in second octet
+ virtual int getLevel() { return (int)currField_.level_L2(); }
+
+ virtual bool needsLnsp() { return false; }
+};
+
+//______________________________________________________________________
+
+
+MvThermoDataBase* MvThermoDataFactory( MvField&, MvThermoParams );
+
+#endif
diff --git a/src/Thermo/GribThermo.cc b/src/Thermo/GribThermo.cc
new file mode 100644
index 0000000..6f4d936
--- /dev/null
+++ b/src/Thermo/GribThermo.cc
@@ -0,0 +1,494 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+//#include "inc_iostream.h"
+//#include "MvException.h"
+
+//#include <math.h>
+
+//#include "Metview.h"
+//#include "MvTephiFrame.h"
+//#include "MvTephiParams.h"
+//#include "Cached.h"
+//#include "MvObs.h"
+#include "GribThermo.h"
+#include "DataThermo.h"
+#include "MvException.h"
+#include "MvNetCDF.h"
+
+//static Cached GRIB("GRIB");
+//static Cached BUFR("BUFR");
+
+GribThermo::GribThermo() :
+ Thermo("GRIB_THERMO")
+{
+ //type_ = "MXSECTION";
+ //view_ = "MXSECTIONVIEW";
+}
+
+GribThermo::GribThermo(const char*kw) :
+ Thermo(kw)
+{
+ //type_ = kw;
+ //view_ = "MXSECTIONVIEW";
+}
+
+GribThermo::~GribThermo()
+{
+}
+
+// Retrieve parameters from the input request and make a consistency check.
+// There are 4 types of input request:
+// 1. DATA_DROPPED: Grib dropped into a View: MXSECT, DATA(), _CONTEXT(),...
+// 2. DATA_MODULE_DROPPED: Data module dropped into a View: MXSECT, DATA(),...
+// 3. DATA_MODULE: Process a data module: MXSECT, ...
+// 4. netCDF dropped in a View:
+//
+// Actions for each 4 types:
+// 1. Use the original View.
+// 2. Use the original View and check if the input XSectData parameters are
+// consistent with the View.
+// 3. Build a new View.
+// 4. Use the original View and check if the netCDF parameters are consistent
+// with the View.
+//
+bool GribThermo::getInputParameters( MvRequest& in )
+{
+ // MAYBE REMOVE IT LATER
+ // Get input parameters
+ if( !pars_.init(in) )
+ {
+ setError( 1, pars_.errorMsg_.c_str() );
+ return false;
+ }
+
+#if 0
+ // Retrieve original View if exists, e.g. if a data or a
+ // xs/av/vpdata module was dropped into a view
+ MvRequest viewRequest;
+ if ( (const char*)in("_CONTEXT") )
+ viewRequest = in("_CONTEXT");
+
+ // Retrieve xsectdata parameters if exist, e.g. if a xs/av/vpata module
+ // was dropped into a view or if it was called to be processed
+ const char* verb = (const char*)in("_VERB");
+ bool moduleDropped = this->isDataModuleDropped(verb);
+
+ // Check the type of input request to be processed
+ MvRequest commonRequest;
+ int procType;
+ if ( viewRequest )
+ procType = moduleDropped ? XS_DATA_MODULE_DROPPED : XS_DATA_DROPPED;
+ else
+ procType = XS_DATA_MODULE;
+
+ // Type of input request is a DATA_DROPPED into a View
+ // Get information from the View request
+ double pBottom=0., pTop=0.;
+ if ( procType == XS_DATA_DROPPED )
+ {
+ // Retrieve 'original' request from the View
+ commonRequest = getAppView( viewRequest );
+
+ // Retrieve parameters
+ if ( !getAppParameters(commonRequest, appInfo) )
+ return false;
+ }
+ // Process a data module
+ // Get information from the module icon parameters
+ else if ( procType == XS_DATA_MODULE )
+ {
+ // Retrieve parameters
+ if ( !this->getAppParameters(in, appInfo) )
+ return false;
+ }
+ // Process a data module dropped into a view
+ // Get information from the module and view. Check if they are compatible.
+ else if ( procType == XS_DATA_MODULE_DROPPED )
+ {
+ // Retrieve 'original' request from the View
+ commonRequest = getAppView( viewRequest );
+
+ // Retrieve 'original' request from the data module
+ MvRequest modRequest = data.getSubrequest("_ORIGINAL_REQUEST");
+ if ( !modRequest )
+ modRequest = in;
+
+ // Consistency check, only for non-default View request
+ if ( !((const char*)commonRequest("_DEFAULT") && (int)commonRequest("_DEFAULT") == 1) )
+ if ( !this->consistencyCheck(commonRequest, modRequest) )
+ return false;
+
+ // Retrieve application specific parametes
+ if ( !getAppParameters( modRequest, appInfo ) )
+ return false;
+ }
+
+
+ appInfo.processType(procType);
+#endif
+ return true;
+}
+
+bool GribThermo::processData()
+{
+ // If it is not a GRIB data then it has been already processed
+ if ( strcmp(pars_.dataReq_.getVerb(),"GRIB") != 0 )
+ return true;
+
+ // Create a temporary netCDF file
+ string ncFileName = this->ncFileName();
+ MvNetCDF netcdf(ncFileName,'w');
+ if ( !netcdf.isValid() )
+ {
+ setError(1,"ERROR: Can not open a new netCDF file");
+ return false;
+ }
+
+ // Initialize fildset iterator.
+ // The order of the sorting is very important. Parameters STEP, TIME and
+ // DATE should be the slowest indexes to be sorted since they define a new
+ // plot. The algorithm relies that all fields related to the same Level id
+ // are next to each other.
+ MvFieldSet fs(pars_.dataReq_);
+ MvFieldSetIterator iter(fs);
+ iter.sort("LEVELIST");
+ iter.sort("STEP");
+ iter.sort("TIME");
+ iter.sort("DATE");
+
+ // Main loop: process fieldset
+ MvField field = iter();
+ while( field ) //-- loops dates, i.e. thermoD plots
+ {
+ // Create data strucutre according to the data representation
+ MvThermoDataBase* tep = MvThermoDataFactory( field, pars_ );
+ if( !tep )
+ {
+ setError( 13, "Thermo: unimplemented input field level type!" );
+ return false;
+ }
+
+ try
+ {
+ // Read and compute all fields related to one plot
+ tep->readOneSetOfFields( iter );
+
+ // Compute final values and save results to the netCDF file
+ tep->generate( netcdf );
+ }
+ catch( MvException& e )
+ {
+ cerr << "Exception caught: " << e.what() << endl;
+ setError( 13, e.what() );
+ return false;
+ }
+
+ // Check if wind info is available
+ if ( tep->windExist() )
+ pars_.windFlag(true);
+
+ // Get first field related to the next plot
+ field = tep->returnToken();
+
+ delete tep;
+ }
+
+ // Close netCDF file
+ netcdf.close();
+
+ return true;
+#if 0
+ MvRequest cdfreq("NETCDF");
+ cdfreq("PATH") = netcdfName.c_str();
+ out = out + cdfreq;
+ return true;
+
+ // It is a netCDF data and it has been already processed.
+ // Build the output request
+ //out = this->createOutputRequest( in );
+/////
+ // Initialize fildset iterator
+ MvFieldSet fs(data);
+ MvFieldSetIterator iter(fs);
+ MvField field = iter();
+
+ // Retrieve initial info
+ this->getInitialFieldInfo(field,appInfo,north,south,east,west);
+
+ // First loop: build field keystring and get the Level info.
+ // The LNSP matrix data is also computed, but the other matrices
+ // are computed in the second loop.
+ iter.rewind();
+ while( field = iter() )
+ {
+ // Retrieve info from the field request
+ MvRequest rq=field.getRequest();
+ iparam = rq("PARAM");
+ const char *lev = rq("LEVELIST");
+ istep = rq("STEP");
+
+ // Check that this field's vital statistics match those of the others
+ // - this is important only in the Average application
+ if ( !fieldConsistencyCheck(field,north,south,east,west) )
+ return false;
+
+ // Calculate the data matrix for LNSP field
+ generateKey(keystr,iparam,idate,itime,istep,expver);
+ if ( iparam == LnPress )
+ {
+ fillValues( appInfo,field,splin );
+ ParamInfo* par = new ParamInfo();
+ params.insert(ParamPair(keystr,par) );
+ }
+ else
+ {
+ if ( iparam == U_FIELD )
+ foundU = true;
+ else if ( iparam == V_FIELD )
+
+ ParamInfo* par = new ParamInfo();
+
+ ParamInsertPair inserted = params.insert(ParamPair(keystr,par));
+ ParamInfo *pp = (*(inserted.first)).second;
+ }
+ } //end while (first loop)
+
+ // Check if fieldset is compatible with the application
+ if ( this->consistencyCheck( appInfo, params ) == false )
+ {
+ setError(1,"ERR"); return false;
+ }
+
+ // Create a temporary netCDF file
+ ...
+ // Write netCDF global attributes
+ if ( !this->writeGlobalAttributesNetcdf(netcdf,params,appInfo) )
+ return false;
+
+ // Write initial variables to the netCDF file: levels, time,
+ // geographical coordinates
+ iter.rewind();
+ field = iter();
+ if ( !this->writeLevelInfoNetcdf(netcdf,appInfo,params,&field,splin) )
+ return false;
+ if ( !this->writeTimeInfoNetcdf(netcdf,params,ntimes) )
+ return false;
+ if ( !this->writeGeoCoordsNetcdf( netcdf, appInfo ) )
+ return false;
+
+ // Initialize variables
+ string lastKey = "FIRSTFIELD";
+ int currentGenerated = 0, lastNrGenerated = -1;
+ MvField lastField;
+
+ // Initialize fieldset iterator
+ iter.rewind();
+ iter.sort("LEVELIST");
+
+ // Second loop: generate data
+ ParamIterator paramIter;
+ while( field = iter() )
+ {
+ currentGenerated++;
+ MvRequest r = field.getRequest();
+ iparam = r("PARAM");
+
+ // Generate key
+ generateKey(keystr,iparam,idate,itime,istep,expver);
+
+ // Calculate the data matrix for non LNSP field
+ if ( iparam != LnPress ) // Already done for lnsp
+ bool ok = fillValues(appInfo,field,xint);
+
+ // Write out the data if we have the end of what can be grouped together.
+ if ( lastKey != keystr && lastKey != string("FIRSTFIELD") )
+ {
+ if ( !generateData(appInfo,params,netcdf,lastField,lastKey) )
+ {setError(1,"");return false; }
+ lastNrGenerated = currentGenerated;
+ }
+
+ lastKey = keystr;
+ lastField = field;
+ } // end while (second loop)
+
+ // Write out the last input field data
+ if ( lastNrGenerated <= currentGenerated )
+ {
+ if ( !generateData(appInfo,params,netcdf,lastField,lastKey) )
+ setError(1,"");return false;
+ }
+
+ // Write additional fields, if it is needed
+ if ( ! this->generateExtraData(netcdf,appInfo,params,iter) )
+ setError(1,"C"); return false;
+
+ // Close netCDF file
+ netcdf.close();
+
+ // Get default parameter to be plotted
+ ParamInfo* parInfo = plotVariable(params);
+ if ( !parInfo )
+ return false;
+
+ // Create output request
+ out = this->createOutputRequest( appInfo, netcdfName, parInfo );
+
+ // Free memory for parameters
+ for (paramIter = params.begin(); paramIter != params.end(); paramIter++)
+ delete (*paramIter).second;
+#endif
+}
+
+bool GribThermo::createOutputRequest(MvRequest& out)
+{
+ //MUDE ESTE TESTE PARA UMA FUNCAO. SUBSTITUA TAMBEM NA SUBROUTINA ACIMA
+ // If it is not a GRIB data then it has been already processed
+// if ( strcmp(pars_.dataReq_.getVerb(),"GRIB") != 0 )
+// return createSimpleOutputRequest(out);
+
+ // Get default parameter to be plotted
+ //ParamInfo* parInfo = plotVariable(params);
+ //if ( !parInfo )
+ // return false;
+
+ // Create netCDF data request
+ // Get action mode
+ string actionMode = this->actionMode();
+//(actionMode == "analyse" || actionMode == "prepare") )
+//verb = "NETCDF";
+
+ MvRequest ncDataReq("NETCDF");
+ ncDataReq("PATH") = this->ncFileName().c_str();
+ ncDataReq("TEMPORARY") = 1;
+
+ // Create Temperature output request
+ MvRequest outd("NETCDF_XY_POINTS");
+ outd("NETCDF_DATA") = ncDataReq;
+ outd("NETCDF_Y_VARIABLE") = sPRESSURE.c_str();
+ outd("NETCDF_X_VARIABLE") = sTEMP.c_str();
+
+ MvRequest gReq("MGRAPH");
+ gReq("GRAPH_LINE_COLOUR") = "red";
+ gReq("GRAPH_LINE_THICKNESS") = 8;
+ outd = outd + gReq;
+
+ // Create Dewpoint output request
+ MvRequest outtd("NETCDF_XY_POINTS");
+ outtd("NETCDF_DATA") = ncDataReq;
+ outtd("NETCDF_Y_VARIABLE") = sPRESSURE.c_str();
+ outtd("NETCDF_X_VARIABLE") = sDEWPOINT.c_str();
+
+ gReq("GRAPH_LINE_COLOUR") = "red";
+ gReq("GRAPH_LINE_STYLE") = "dash",
+ gReq("GRAPH_LINE_THICKNESS") = 8;
+ outd = outd + outtd + gReq;
+
+ // Create wind output request
+ if ( pars_.windFlag() )
+ {
+ MvRequest outw("NETCDF_XY_VECTORS");
+ outw("NETCDF_DATA") = ncDataReq;
+ outw("NETCDF_X_POSITION_VARIABLE") = sXWIND.c_str();
+ outw("NETCDF_Y_POSITION_VARIABLE") = sPWIND.c_str();
+ outw("NETCDF_X_COMPONENT_VARIABLE") = sU.c_str();
+ outw("NETCDF_Y_COMPONENT_VARIABLE") = sV.c_str();
+
+ MvRequest wReq("MWIND");
+ wReq("WIND_FIELD_TYPE") = "flags";
+ wReq("WIND_FLAG_COLOUR") = "black";
+
+ outd = outd + outw + wReq;
+ }
+ // Create customised Cartesian View request.
+ // If an icon was dropped into a view, uPlot will ignore it.
+ // Mode-specific options
+ MvRequest viewReq("CARTESIANVIEW");
+ viewReq("MAP_PROJECTION") = "tephigram";
+
+ // If action is not visualisation related then return the netcdf data.
+ // Also, add the visualisation and original requests as hidden parameters.
+ // These may be used later to help the visualisation of the netcdf data.
+ if ( !this->isVisualise() )
+ {
+ out = ncDataReq;
+// ncDataReq("_VIEW") = view_.c_str();
+// ncDataReq("_VISUALISE") = out1;
+// ncDataReq("_CARTESIANVIEW") = viewReq;
+// ncDataReq("_ORIGINAL_REQUEST") = origReq_;
+ return true;
+ }
+
+ // Create title information
+ MvRequest titleReq("MTEXT");
+ titleReq("TEXT_LINE_1") = this->title().c_str();
+ titleReq("TEXT_FONT_SIZE") = 0.5;
+
+ // Final output request
+ out = viewReq + outd + titleReq;
+
+ return true;
+}
+
+//
+// Title reflects data extraction type
+//
+string GribThermo::title()
+{
+ // Get first time information from the netcdf file
+ MvNetCDF netcdf(this->ncFileName(),'r');
+ MvNcVar *time = netcdf.getVariable(sTIME);
+ NcDim* dim = time->getDimension(1);
+ int size = dim->size();
+ vector <char> vtime;
+ time->setCurrent(0L);
+ time->get(vtime,1,size);
+
+ // Decode time info
+ string str(vtime.begin(),vtime.end());
+ string sdate = str.substr(0,8);
+ string stime = str.substr(8,4);
+ int istep = atoi(str.substr(12,4).c_str());
+
+ // Create title
+ char title[200];
+ switch( pars_.pointType_ )
+ {
+ case eInterpolated:
+ sprintf(title,"%s %s step %d [%.2f,%.2f] %s",
+ sdate.c_str(), stime.c_str(), istep,
+ pars_.lat_, pars_.lon_,
+ pars_.formulaPrintName().c_str() );
+ break;
+
+ case eGridPoint:
+ {
+ // Coordinates used may not be the same as the input ones
+ MvNcAtt* tmpatt = netcdf.getAttribute("Coordinates");
+ str = tmpatt->as_string(0);
+ int ipos = str.find('/');
+ float lat = atof(str.substr(0,ipos).c_str());
+ float lon = atof(str.substr(ipos+1).c_str());
+ sprintf(title,"%s %s step %d [nearest: %.2f,%.2f] %s",
+ sdate.c_str(), stime.c_str(), istep, lat, lon,
+ pars_.formulaPrintName().c_str() );
+ }
+ break;
+
+ case eAreaAverage:
+ sprintf(title,"%s %s step %d [%.1f,%.1f,%.1f,%.1f] %s",
+ sdate.c_str(), stime.c_str(), istep,
+ pars_.lat_, pars_.lon_, pars_.lat2_, pars_.lon2_,
+ pars_.formulaPrintName().c_str() );
+ break;
+ }
+
+ return string(title);
+}
diff --git a/src/Thermo/GribThermo.h b/src/Thermo/GribThermo.h
new file mode 100644
index 0000000..e2008b3
--- /dev/null
+++ b/src/Thermo/GribThermo.h
@@ -0,0 +1,47 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef GRIBTHERMO_H
+#define GRIBTHERMO_H
+
+#include "Thermo.h"
+#include "ParamsThermo.h" //Maybe remove it later
+
+class MvNetCDF;
+
+class GribThermo : public Thermo {
+
+public:
+
+ // Constructors
+ GribThermo();
+ GribThermo(const char*);
+
+ // Destructor
+ ~GribThermo();
+
+ // Get input parameters
+ bool getInputParameters(MvRequest&);
+
+ // Process data and build all data structures
+ bool processData();
+
+ // Generate output request
+ bool createOutputRequest(MvRequest&);
+
+ // Create a default title
+ string title();
+
+private:
+
+ MvThermoParams pars_; //Maybe remove it later
+
+};
+
+#endif
diff --git a/src/Thermo/Makefile.am b/src/Thermo/Makefile.am
new file mode 100644
index 0000000..4abc23c
--- /dev/null
+++ b/src/Thermo/Makefile.am
@@ -0,0 +1,40 @@
+bin_PROGRAMS = bin/Thermo
+
+bin_Thermo_SOURCES = BufrThermo.cc BufrThermo.h DataThermo.cc DataThermo.h \
+ GribThermo.cc GribThermo.h ParamsThermo.h ParamsThermo.cc \
+ Thermo.cc Thermo.h
+
+bin_Thermo_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
+bin_Thermo_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_NETCDF_LIB) $(METVIEW_UTIL_LIB) $(FLIBS)
+bin_Thermo_DEPENDENCIES = ../../lib/libMetview.a ../../lib/libMvNetCDF.a
+
+sharedir = $(datadir)/metview/etc
+local_sharedir = ../../share/metview/etc
+local_iconsdir = ../../share/metview/icons
+share_DATA = $(local_sharedir)/ObjectSpec.Thermo \
+ $(local_sharedir)/ThermoViewDef \
+ $(local_sharedir)/ThermoViewRules \
+ $(local_sharedir)/ThermoDataDef \
+ $(local_sharedir)/ThermoDataRules
+
+# to build the share data, we take the destination files and
+# remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
+# $< is the 'stripped' version and $@ is the 'full' version
+$(share_DATA): $(local_sharedir)/%: %
+ ${INSTALL} $< $(local_sharedir)
+
+icons:
+ ${INSTALL} THERMOVIEW.xpm $(local_iconsdir)
+ ${INSTALL} THERMODATA.xpm $(local_iconsdir)
+
+CLEANFILES = $(share_DATA) $(local_iconsdir)/THERMOVIEW.xpm \
+ $(local_iconsdir)/THERMODATA.xpm
+
+BUILT_SOURCES = bin icons
+
+EXTRA_DIST = ObjectSpec.Thermo \
+ THERMOVIEW.xpm ThermoViewDef ThermoViewRules \
+ THERMODATA.xpm ThermoDataDef ThermoDataRules
+
+bin:
+ ln -s ../../bin bin
diff --git a/src/XSection/Makefile.in b/src/Thermo/Makefile.in
similarity index 69%
copy from src/XSection/Makefile.in
copy to src/Thermo/Makefile.in
index f8dab52..30068de 100644
--- a/src/XSection/Makefile.in
+++ b/src/Thermo/Makefile.in
@@ -36,11 +36,12 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-bin_PROGRAMS = bin/XSection$(EXEEXT)
-subdir = src/XSection
+bin_PROGRAMS = bin/Thermo$(EXEEXT)
+subdir = src/Thermo
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -50,11 +51,11 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"
PROGRAMS = $(bin_PROGRAMS)
-am_bin_XSection_OBJECTS = bin_XSection-Average.$(OBJEXT) \
- bin_XSection-CrossS.$(OBJEXT) \
- bin_XSection-MvXsectFrame.$(OBJEXT) \
- bin_XSection-Vprofile.$(OBJEXT) bin_XSection-Xsect.$(OBJEXT)
-bin_XSection_OBJECTS = $(am_bin_XSection_OBJECTS)
+am_bin_Thermo_OBJECTS = bin_Thermo-BufrThermo.$(OBJEXT) \
+ bin_Thermo-DataThermo.$(OBJEXT) \
+ bin_Thermo-GribThermo.$(OBJEXT) \
+ bin_Thermo-ParamsThermo.$(OBJEXT) bin_Thermo-Thermo.$(OBJEXT)
+bin_Thermo_OBJECTS = $(am_bin_Thermo_OBJECTS)
am__DEPENDENCIES_1 =
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
@@ -102,8 +103,8 @@ am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = $(bin_XSection_SOURCES)
-DIST_SOURCES = $(bin_XSection_SOURCES)
+SOURCES = $(bin_Thermo_SOURCES)
+DIST_SOURCES = $(bin_Thermo_SOURCES)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -138,6 +139,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -161,6 +164,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -336,52 +340,29 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-bin_XSection_SOURCES = Average.cc CrossS.cc MvXsectFrame.cc Vprofile.cc Xsect.cc \
- Average.h CrossS.h MvXsectFrame.h Vprofile.h Xsect.h
+bin_Thermo_SOURCES = BufrThermo.cc BufrThermo.h DataThermo.cc DataThermo.h \
+ GribThermo.cc GribThermo.h ParamsThermo.h ParamsThermo.cc \
+ Thermo.cc Thermo.h
-bin_XSection_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
-bin_XSection_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_UTIL_LIB) $(METVIEW_NETCDF_LIB)
-bin_XSection_DEPENDENCIES = ../../lib/libMetview.a
+bin_Thermo_CPPFLAGS = $(METVIEW_NETCDF_FLAGS)
+bin_Thermo_LDADD = $(STANDARD_METVIEW_LIBS) $(METVIEW_NETCDF_LIB) $(METVIEW_UTIL_LIB) $(FLIBS)
+bin_Thermo_DEPENDENCIES = ../../lib/libMetview.a ../../lib/libMvNetCDF.a
sharedir = $(datadir)/metview/etc
local_sharedir = ../../share/metview/etc
local_iconsdir = ../../share/metview/icons
-share_DATA = $(local_sharedir)/ObjectSpec.XSection \
- $(local_sharedir)/MXAverageDef $(local_sharedir)/MXAverageRules \
- $(local_sharedir)/MXAverageViewDef $(local_sharedir)/MXAverageViewRules \
- $(local_sharedir)/MVProfileDef $(local_sharedir)/MVProfileRules \
- $(local_sharedir)/MVProfileViewDef $(local_sharedir)/MVProfileViewRules \
- $(local_sharedir)/MXSectionDef $(local_sharedir)/MXSectionRules \
- $(local_sharedir)/MXSectionCommonDef $(local_sharedir)/MXSectionCommonRules \
- $(local_sharedir)/MXSectionViewDef $(local_sharedir)/MXSectionViewRules \
- $(local_sharedir)/AverageDef $(local_sharedir)/AverageRules \
- $(local_sharedir)/AverageViewDef $(local_sharedir)/AverageViewRules \
- $(local_sharedir)/VertProfDef $(local_sharedir)/VertProfRules \
- $(local_sharedir)/VertProfViewDef $(local_sharedir)/VertProfViewRules \
- $(local_sharedir)/XsectDef $(local_sharedir)/XsectRules \
- $(local_sharedir)/XsectViewDef $(local_sharedir)/XsectViewRules
-
-CLEANFILES = $(share_DATA) $(local_iconsdir)/MXAVERAGE.xpm $(local_iconsdir)/MXAVERAGEVIEW.xpm \
- $(local_iconsdir)/MVPROFILE.xpm $(local_iconsdir)/MVPROFILEVIEW.xpm \
- $(local_iconsdir)/MXSECTION.xpm $(local_iconsdir)/MXSECTIONVIEW.xpm \
- $(local_iconsdir)/AVERAGE.xpm $(local_iconsdir)/AVERAGEVIEW.xpm \
- $(local_iconsdir)/VPROF.xpm $(local_iconsdir)/VPROFVIEW.xpm \
- $(local_iconsdir)/XSECT.xpm $(local_iconsdir)/XSECTVIEW.xpm
+share_DATA = $(local_sharedir)/ObjectSpec.Thermo \
+ $(local_sharedir)/ThermoViewDef \
+ $(local_sharedir)/ThermoViewRules \
+ $(local_sharedir)/ThermoDataDef \
+ $(local_sharedir)/ThermoDataRules
+
+CLEANFILES = $(share_DATA) $(local_iconsdir)/THERMOVIEW.xpm \
+ $(local_iconsdir)/THERMODATA.xpm
BUILT_SOURCES = bin icons
-EXTRA_DIST = ObjectSpec.XSection \
- MXAVERAGE.xpm MXAverageDef MXAverageRules \
- MXAVERAGEVIEW.xpm MXAverageViewDef MXAverageViewRules \
- MVPROFILE.xpm MVProfileDef MVProfileRules \
- MVPROFILEVIEW.xpm MVProfileViewDef MVProfileViewRules \
- MXSECTION.xpm MXSectionDef MXSectionRules \
- MXSECTIONVIEW.xpm MXSectionViewDef MXSectionViewRules \
- MXSectionCommonDef MXSectionCommonRules \
- AVERAGE.xpm AverageDef AverageRules \
- AVERAGEVIEW.xpm AverageViewDef AverageViewRules \
- VPROF.xpm VertProfDef VertProfRules \
- VPROFVIEW.xpm VertProfViewDef VertProfViewRules \
- XSECT.xpm XsectDef XsectRules \
- XSECTVIEW.xpm XsectViewDef XsectViewRules
+EXTRA_DIST = ObjectSpec.Thermo \
+ THERMOVIEW.xpm ThermoViewDef ThermoViewRules \
+ THERMODATA.xpm ThermoDataDef ThermoDataRules
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -397,9 +378,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/XSection/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Thermo/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/XSection/Makefile
+ $(AUTOMAKE) --gnu src/Thermo/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -464,9 +445,9 @@ clean-binPROGRAMS:
bin/$(am__dirstamp):
@$(MKDIR_P) bin
@: > bin/$(am__dirstamp)
-bin/XSection$(EXEEXT): $(bin_XSection_OBJECTS) $(bin_XSection_DEPENDENCIES) bin/$(am__dirstamp)
- @rm -f bin/XSection$(EXEEXT)
- $(AM_V_CXXLD)$(CXXLINK) $(bin_XSection_OBJECTS) $(bin_XSection_LDADD) $(LIBS)
+bin/Thermo$(EXEEXT): $(bin_Thermo_OBJECTS) $(bin_Thermo_DEPENDENCIES) bin/$(am__dirstamp)
+ @rm -f bin/Thermo$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(bin_Thermo_OBJECTS) $(bin_Thermo_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -474,11 +455,11 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-Average.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-CrossS.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-MvXsectFrame.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-Vprofile.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_XSection-Xsect.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Thermo-BufrThermo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Thermo-DataThermo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Thermo-GribThermo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Thermo-ParamsThermo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_Thermo-Thermo.Po at am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -504,85 +485,85 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-bin_XSection-Average.o: Average.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Average.o -MD -MP -MF $(DEPDIR)/bin_XSection-Average.Tpo -c -o bin_XSection-Average.o `test -f 'Average.cc' || echo '$(srcdir)/'`Average.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Average.Tpo $(DEPDIR)/bin_XSection-Average.Po
+bin_Thermo-BufrThermo.o: BufrThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-BufrThermo.o -MD -MP -MF $(DEPDIR)/bin_Thermo-BufrThermo.Tpo -c -o bin_Thermo-BufrThermo.o `test -f 'BufrThermo.cc' || echo '$(srcdir)/'`BufrThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-BufrThermo.Tpo $(DEPDIR)/bin_Thermo-BufrThermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Average.cc' object='bin_XSection-Average.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='BufrThermo.cc' object='bin_Thermo-BufrThermo.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Average.o `test -f 'Average.cc' || echo '$(srcdir)/'`Average.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-BufrThermo.o `test -f 'BufrThermo.cc' || echo '$(srcdir)/'`BufrThermo.cc
-bin_XSection-Average.obj: Average.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Average.obj -MD -MP -MF $(DEPDIR)/bin_XSection-Average.Tpo -c -o bin_XSection-Average.obj `if test -f 'Average.cc'; then $(CYGPATH_W) 'Average.cc'; else $(CYGPATH_W) '$(srcdir)/Average.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Average.Tpo $(DEPDIR)/bin_XSection-Average.Po
+bin_Thermo-BufrThermo.obj: BufrThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-BufrThermo.obj -MD -MP -MF $(DEPDIR)/bin_Thermo-BufrThermo.Tpo -c -o bin_Thermo-BufrThermo.obj `if test -f 'BufrThermo.cc'; then $(CYGPATH_W) 'BufrThermo.cc'; else $(CYGPATH_W) '$(srcdir)/BufrThermo.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-BufrThermo.Tpo $(DEPDIR)/bin_Thermo-BufrThermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Average.cc' object='bin_XSection-Average.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='BufrThermo.cc' object='bin_Thermo-BufrThermo.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Average.obj `if test -f 'Average.cc'; then $(CYGPATH_W) 'Average.cc'; else $(CYGPATH_W) '$(srcdir)/Average.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-BufrThermo.obj `if test -f 'BufrThermo.cc'; then $(CYGPATH_W) 'BufrThermo.cc'; else $(CYGPATH_W) '$(srcdir)/BufrThermo.cc'; fi`
-bin_XSection-CrossS.o: CrossS.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-CrossS.o -MD -MP -MF $(DEPDIR)/bin_XSection-CrossS.Tpo -c -o bin_XSection-CrossS.o `test -f 'CrossS.cc' || echo '$(srcdir)/'`CrossS.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-CrossS.Tpo $(DEPDIR)/bin_XSection-CrossS.Po
+bin_Thermo-DataThermo.o: DataThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-DataThermo.o -MD -MP -MF $(DEPDIR)/bin_Thermo-DataThermo.Tpo -c -o bin_Thermo-DataThermo.o `test -f 'DataThermo.cc' || echo '$(srcdir)/'`DataThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-DataThermo.Tpo $(DEPDIR)/bin_Thermo-DataThermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='CrossS.cc' object='bin_XSection-CrossS.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='DataThermo.cc' object='bin_Thermo-DataThermo.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-CrossS.o `test -f 'CrossS.cc' || echo '$(srcdir)/'`CrossS.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-DataThermo.o `test -f 'DataThermo.cc' || echo '$(srcdir)/'`DataThermo.cc
-bin_XSection-CrossS.obj: CrossS.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-CrossS.obj -MD -MP -MF $(DEPDIR)/bin_XSection-CrossS.Tpo -c -o bin_XSection-CrossS.obj `if test -f 'CrossS.cc'; then $(CYGPATH_W) 'CrossS.cc'; else $(CYGPATH_W) '$(srcdir)/CrossS.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-CrossS.Tpo $(DEPDIR)/bin_XSection-CrossS.Po
+bin_Thermo-DataThermo.obj: DataThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-DataThermo.obj -MD -MP -MF $(DEPDIR)/bin_Thermo-DataThermo.Tpo -c -o bin_Thermo-DataThermo.obj `if test -f 'DataThermo.cc'; then $(CYGPATH_W) 'DataThermo.cc'; else $(CYGPATH_W) '$(srcdir)/DataThermo.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-DataThermo.Tpo $(DEPDIR)/bin_Thermo-DataThermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='CrossS.cc' object='bin_XSection-CrossS.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='DataThermo.cc' object='bin_Thermo-DataThermo.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-CrossS.obj `if test -f 'CrossS.cc'; then $(CYGPATH_W) 'CrossS.cc'; else $(CYGPATH_W) '$(srcdir)/CrossS.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-DataThermo.obj `if test -f 'DataThermo.cc'; then $(CYGPATH_W) 'DataThermo.cc'; else $(CYGPATH_W) '$(srcdir)/DataThermo.cc'; fi`
-bin_XSection-MvXsectFrame.o: MvXsectFrame.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-MvXsectFrame.o -MD -MP -MF $(DEPDIR)/bin_XSection-MvXsectFrame.Tpo -c -o bin_XSection-MvXsectFrame.o `test -f 'MvXsectFrame.cc' || echo '$(srcdir)/'`MvXsectFrame.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-MvXsectFrame.Tpo $(DEPDIR)/bin_XSection-MvXsectFrame.Po
+bin_Thermo-GribThermo.o: GribThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-GribThermo.o -MD -MP -MF $(DEPDIR)/bin_Thermo-GribThermo.Tpo -c -o bin_Thermo-GribThermo.o `test -f 'GribThermo.cc' || echo '$(srcdir)/'`GribThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-GribThermo.Tpo $(DEPDIR)/bin_Thermo-GribThermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvXsectFrame.cc' object='bin_XSection-MvXsectFrame.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GribThermo.cc' object='bin_Thermo-GribThermo.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-MvXsectFrame.o `test -f 'MvXsectFrame.cc' || echo '$(srcdir)/'`MvXsectFrame.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-GribThermo.o `test -f 'GribThermo.cc' || echo '$(srcdir)/'`GribThermo.cc
-bin_XSection-MvXsectFrame.obj: MvXsectFrame.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-MvXsectFrame.obj -MD -MP -MF $(DEPDIR)/bin_XSection-MvXsectFrame.Tpo -c -o bin_XSection-MvXsectFrame.obj `if test -f 'MvXsectFrame.cc'; then $(CYGPATH_W) 'MvXsectFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvXsectFrame.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-MvXsectFrame.Tpo $(DEPDIR)/bin_XSection-MvXsectFrame.Po
+bin_Thermo-GribThermo.obj: GribThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-GribThermo.obj -MD -MP -MF $(DEPDIR)/bin_Thermo-GribThermo.Tpo -c -o bin_Thermo-GribThermo.obj `if test -f 'GribThermo.cc'; then $(CYGPATH_W) 'GribThermo.cc'; else $(CYGPATH_W) '$(srcdir)/GribThermo.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-GribThermo.Tpo $(DEPDIR)/bin_Thermo-GribThermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvXsectFrame.cc' object='bin_XSection-MvXsectFrame.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GribThermo.cc' object='bin_Thermo-GribThermo.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-MvXsectFrame.obj `if test -f 'MvXsectFrame.cc'; then $(CYGPATH_W) 'MvXsectFrame.cc'; else $(CYGPATH_W) '$(srcdir)/MvXsectFrame.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-GribThermo.obj `if test -f 'GribThermo.cc'; then $(CYGPATH_W) 'GribThermo.cc'; else $(CYGPATH_W) '$(srcdir)/GribThermo.cc'; fi`
-bin_XSection-Vprofile.o: Vprofile.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Vprofile.o -MD -MP -MF $(DEPDIR)/bin_XSection-Vprofile.Tpo -c -o bin_XSection-Vprofile.o `test -f 'Vprofile.cc' || echo '$(srcdir)/'`Vprofile.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Vprofile.Tpo $(DEPDIR)/bin_XSection-Vprofile.Po
+bin_Thermo-ParamsThermo.o: ParamsThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-ParamsThermo.o -MD -MP -MF $(DEPDIR)/bin_Thermo-ParamsThermo.Tpo -c -o bin_Thermo-ParamsThermo.o `test -f 'ParamsThermo.cc' || echo '$(srcdir)/'`ParamsThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-ParamsThermo.Tpo $(DEPDIR)/bin_Thermo-ParamsThermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Vprofile.cc' object='bin_XSection-Vprofile.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ParamsThermo.cc' object='bin_Thermo-ParamsThermo.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Vprofile.o `test -f 'Vprofile.cc' || echo '$(srcdir)/'`Vprofile.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-ParamsThermo.o `test -f 'ParamsThermo.cc' || echo '$(srcdir)/'`ParamsThermo.cc
-bin_XSection-Vprofile.obj: Vprofile.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Vprofile.obj -MD -MP -MF $(DEPDIR)/bin_XSection-Vprofile.Tpo -c -o bin_XSection-Vprofile.obj `if test -f 'Vprofile.cc'; then $(CYGPATH_W) 'Vprofile.cc'; else $(CYGPATH_W) '$(srcdir)/Vprofile.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Vprofile.Tpo $(DEPDIR)/bin_XSection-Vprofile.Po
+bin_Thermo-ParamsThermo.obj: ParamsThermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-ParamsThermo.obj -MD -MP -MF $(DEPDIR)/bin_Thermo-ParamsThermo.Tpo -c -o bin_Thermo-ParamsThermo.obj `if test -f 'ParamsThermo.cc'; then $(CYGPATH_W) 'ParamsThermo.cc'; else $(CYGPATH_W) '$(srcdir)/ParamsThermo.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-ParamsThermo.Tpo $(DEPDIR)/bin_Thermo-ParamsThermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Vprofile.cc' object='bin_XSection-Vprofile.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ParamsThermo.cc' object='bin_Thermo-ParamsThermo.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Vprofile.obj `if test -f 'Vprofile.cc'; then $(CYGPATH_W) 'Vprofile.cc'; else $(CYGPATH_W) '$(srcdir)/Vprofile.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-ParamsThermo.obj `if test -f 'ParamsThermo.cc'; then $(CYGPATH_W) 'ParamsThermo.cc'; else $(CYGPATH_W) '$(srcdir)/ParamsThermo.cc'; fi`
-bin_XSection-Xsect.o: Xsect.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Xsect.o -MD -MP -MF $(DEPDIR)/bin_XSection-Xsect.Tpo -c -o bin_XSection-Xsect.o `test -f 'Xsect.cc' || echo '$(srcdir)/'`Xsect.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Xsect.Tpo $(DEPDIR)/bin_XSection-Xsect.Po
+bin_Thermo-Thermo.o: Thermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-Thermo.o -MD -MP -MF $(DEPDIR)/bin_Thermo-Thermo.Tpo -c -o bin_Thermo-Thermo.o `test -f 'Thermo.cc' || echo '$(srcdir)/'`Thermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-Thermo.Tpo $(DEPDIR)/bin_Thermo-Thermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Xsect.cc' object='bin_XSection-Xsect.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Thermo.cc' object='bin_Thermo-Thermo.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Xsect.o `test -f 'Xsect.cc' || echo '$(srcdir)/'`Xsect.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-Thermo.o `test -f 'Thermo.cc' || echo '$(srcdir)/'`Thermo.cc
-bin_XSection-Xsect.obj: Xsect.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_XSection-Xsect.obj -MD -MP -MF $(DEPDIR)/bin_XSection-Xsect.Tpo -c -o bin_XSection-Xsect.obj `if test -f 'Xsect.cc'; then $(CYGPATH_W) 'Xsect.cc'; else $(CYGPATH_W) '$(srcdir)/Xsect.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_XSection-Xsect.Tpo $(DEPDIR)/bin_XSection-Xsect.Po
+bin_Thermo-Thermo.obj: Thermo.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_Thermo-Thermo.obj -MD -MP -MF $(DEPDIR)/bin_Thermo-Thermo.Tpo -c -o bin_Thermo-Thermo.obj `if test -f 'Thermo.cc'; then $(CYGPATH_W) 'Thermo.cc'; else $(CYGPATH_W) '$(srcdir)/Thermo.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_Thermo-Thermo.Tpo $(DEPDIR)/bin_Thermo-Thermo.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Xsect.cc' object='bin_XSection-Xsect.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Thermo.cc' object='bin_Thermo-Thermo.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_XSection_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_XSection-Xsect.obj `if test -f 'Xsect.cc'; then $(CYGPATH_W) 'Xsect.cc'; else $(CYGPATH_W) '$(srcdir)/Xsect.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_Thermo_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_Thermo-Thermo.obj `if test -f 'Thermo.cc'; then $(CYGPATH_W) 'Thermo.cc'; else $(CYGPATH_W) '$(srcdir)/Thermo.cc'; fi`
mostlyclean-libtool:
-rm -f *.lo
@@ -824,18 +805,8 @@ $(share_DATA): $(local_sharedir)/%: %
${INSTALL} $< $(local_sharedir)
icons:
- ${INSTALL} MXAVERAGE.xpm $(local_iconsdir)
- ${INSTALL} MXAVERAGEVIEW.xpm $(local_iconsdir)
- ${INSTALL} MVPROFILE.xpm $(local_iconsdir)
- ${INSTALL} MVPROFILEVIEW.xpm $(local_iconsdir)
- ${INSTALL} MXSECTION.xpm $(local_iconsdir)
- ${INSTALL} MXSECTIONVIEW.xpm $(local_iconsdir)
- ${INSTALL} AVERAGE.xpm $(local_iconsdir)
- ${INSTALL} AVERAGEVIEW.xpm $(local_iconsdir)
- ${INSTALL} VPROF.xpm $(local_iconsdir)
- ${INSTALL} VPROFVIEW.xpm $(local_iconsdir)
- ${INSTALL} XSECT.xpm $(local_iconsdir)
- ${INSTALL} XSECTVIEW.xpm $(local_iconsdir)
+ ${INSTALL} THERMOVIEW.xpm $(local_iconsdir)
+ ${INSTALL} THERMODATA.xpm $(local_iconsdir)
bin:
ln -s ../../bin bin
diff --git a/src/Thermo/ObjectSpec.Thermo b/src/Thermo/ObjectSpec.Thermo
new file mode 100644
index 0000000..0d278f9
--- /dev/null
+++ b/src/Thermo/ObjectSpec.Thermo
@@ -0,0 +1,65 @@
+object,
+ class = THERMODATA_FAMILY,
+ can_be_created = True,
+ icon_box = Data processing,
+ definition_file = '$METVIEW_DIR_SHARE/etc/ThermoDataDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/ThermoDataRules',
+ default_name = Thermo Data,
+ help_page = Thermo_Data,
+ type = Family,
+ expand = 512, #expand default values
+ editor_type = FamilyEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/THERMODATA.icon'
+
+object,
+ class = GRIB_THERMO,
+ can_be_created = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/ThermoDataDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/ThermoDataRules',
+ default_name = Grib Thermo Data,
+ type = Data,
+ expand = 512, #expand default values
+ macro = thermo_grib,
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/THERMODATA.icon'
+
+object,
+ class = ODB_THERMO,
+ can_be_created = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/ThermoDataDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/ThermoDataRules',
+ default_name = Odb Thermo Data,
+ type = Data,
+ expand = 512, #expand default values
+ macro = thermo_odb,
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/THERMODATA.icon'
+
+object,
+ class = BUFR_THERMO,
+ can_be_created = False,
+ definition_file = '$METVIEW_DIR_SHARE/etc/ThermoDataDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/ThermoDataRules',
+ default_name = Bufr Thermo Data,
+ type = Data,
+ expand = 512, #expand default values
+ macro = thermo_bufr,
+ editor_type = SimpleEditor,
+ pixmap = '$METVIEW_DIR_SHARE/icons/THERMODATA.icon'
+
+state,
+ class = THERMODATA_FAMILY,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
+ service = Thermo
+
+state,
+ class = GRIB_THERMO/ODB_THERMO/BUFR_THERMO,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
+ output_class = NETCDF,
+ service = Thermo
+
+service,
+ timeout = $timeout,
+ name = 'Thermo',
+ fullname = Thermo,
+ cmd = "$metview_command $METVIEW_BIN/Thermo"
diff --git a/src/Thermo/ParamsThermo.cc b/src/Thermo/ParamsThermo.cc
new file mode 100644
index 0000000..133ddf4
--- /dev/null
+++ b/src/Thermo/ParamsThermo.cc
@@ -0,0 +1,132 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+// MvTephiParams.cc - Nov2003/vk - original file
+// ParamsThermo.cc - Jan2014/fii - updated to new Thermo application
+
+#include "ParamsThermo.h"
+
+static const char* sPointSelection[] = { "AREA_AVERAGE", "COORDINATES", "STATION" };
+
+MvThermoParams::MvThermoParams() :
+ windFlag_(false),
+ lat2_( 0.0 ),
+ lon2_( 0.0 ),
+ pointType_( eInterpolated )
+{
+}
+
+MvThermoParams::~MvThermoParams()
+{
+}
+
+bool MvThermoParams::init( const MvRequest& in )
+{
+ // Make sure that all parameters are defined
+ MvRequest expReq = in;
+ expReq = expReq.ExpandRequest("ThermoDataDef","ThermoDataRules",EXPAND_DEFAULTS);
+expReq.print();
+
+#if 0
+ T1 = in("MINIMUM_TEMPERATURE");
+ T2 = in("MAXIMAL_TEMPERATURE");
+ P2 = in("BOTTOM_PRESSURE");
+ P1 = in("TOP_PRESSURE");
+ if( strcmp(in("BACKGROUND"),"ON") == 0 )
+ backGround = 0;
+#else
+ T1 = -40;
+ T2 = 40;
+ P2 = 1020;
+ P1 = 100;
+#endif
+
+ // Retrieve dataset
+ if ( !(int)expReq.countValues("DATA") ) {
+ cout << "No Data files specified..." << endl;
+ //setError(1, "No Data files specified...");
+ return false;
+ }
+ expReq.getValue(dataReq_,"DATA");
+
+ // Retrieve point selection
+ string ps = (const char*)expReq("POINT_SELECTION");
+ if ( ps == sPointSelection[0] ) //Area average
+ {
+ pointType_ = eAreaAverage;
+ expReq.getValue( lat_, ps.c_str(), 0 ); //-- n
+ expReq.getValue( lon_, ps.c_str(), 1 ); //-- w
+ expReq.getValue( lat2_, ps.c_str(), 2 ); //-- s
+ expReq.getValue( lon2_, ps.c_str(), 3 ); //-- e
+ }
+ else
+ {
+ // Retrieve point extraction
+ string pe = (const char*)expReq("POINT_EXTRACTION");
+ pointType_ = ( pe == "INTERPOLATE" ) ? eInterpolated : eGridPoint;
+ if ( ps == sPointSelection[1] )
+ {
+ expReq.getValue( lat_, ps.c_str(), 0 );
+ expReq.getValue( lon_, ps.c_str(), 1 );
+ }
+ else if ( ps == sPointSelection[2] ) //Station
+ {
+ MvRequest station;
+ expReq.getValue( station, "STATION" );
+ lat_ = station( "LATITUDE" );
+ lon_ = station( "LONGITUDE" );
+ }
+ }
+
+ // Retrieve dew point formulation
+ dewPointFormulaType_ = (const char*)expReq("DEW_POINT_FORMULATION");
+
+ // Retrieve fields parameter numbers
+ uFieldId_ = (int)expReq( "U_WIND_PARAM" );
+ vFieldId_ = (int)expReq( "V_WIND_PARAM" );
+ tempId_ = (int)expReq( "TEMPERATURE_PARAM" );
+ dewId_ = (int)expReq( "SPECIFIC_HUMIDITY_PARAM" );
+ lnPressId_ = (int)expReq( "LNSP_PARAM" );
+
+#if 0
+ Wf = 0.; //-- constant or a variable???????
+
+ //-- check background params
+ if( (T1 == T2) || (P1 == P2) )
+ {
+ ok_ = false;
+ errorMsg_ = "Thermograms: Invalid Parameters (Temperature/Pressure)..";
+ return;
+ }
+ if( T1 > T2 )
+ {
+ double tmp = T2; T2 = T1; T1 = tmp;
+ errorMsg_ = "Thermograms: Minimun Temperature > Maximum...";
+ }
+ if( P1 > P2 )
+ {
+ double tmp = P2; P2 = P1; P1 = tmp;
+ errorMsg_ = "Thermograms: Top Pressure > Bottom...";
+ }
+
+#endif
+ return true;
+}
+
+string MvThermoParams::formulaPrintName()
+{
+ string name = dewPointFormulaType_;
+ for( unsigned int it = 0; it < name.length(); ++it )
+ {
+ char cc = name[it];
+ name[it] = ( cc == '_' ) ? ' ' : tolower(cc);
+ }
+
+ return name;
+}
diff --git a/src/Thermo/ParamsThermo.h b/src/Thermo/ParamsThermo.h
new file mode 100644
index 0000000..daa73d5
--- /dev/null
+++ b/src/Thermo/ParamsThermo.h
@@ -0,0 +1,66 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+// MvThermoParams.h - Nov2003/vk - original file
+// ParamsThermo.h - Jan2014/fii - updated to new Thermo application
+//
+// Hide extracting and checking of input request
+// parameters - to make Tephigrams.cc more readable!
+//
+// Q&D struct with all member data directly accessible!
+//
+
+#ifndef MVTHERMOPARAM_H
+#define MVTHERMOPARAM_H
+
+#include <string>
+
+#include "MvRequest.h"
+
+enum EPointType { eAreaAverage, eGridPoint, eInterpolated };
+
+using namespace std;
+
+class MvThermoParams
+{
+ public:
+
+ MvThermoParams();
+ ~MvThermoParams();
+
+ bool init( const MvRequest& );
+ string formulaPrintName();
+
+ // Wind flag info
+ bool windFlag() { return windFlag_; }
+ void windFlag(bool flag) { windFlag_ = flag; }
+
+ bool windFlag_; // T - there is wind data
+ double T1;
+ double T2;
+ double P1;
+ double P2;
+ string dewPointFormulaType_;
+ int uFieldId_;
+ int vFieldId_;
+ int tempId_;
+ int dewId_;
+ int lnPressId_;
+ double lat_;
+ double lon_;
+ double lat2_;
+ double lon2_;
+double Wf;
+ EPointType pointType_;
+ MvRequest dataReq_;
+
+ string errorMsg_;
+};
+
+#endif
diff --git a/src/Thermo/THERMODATA.xpm b/src/Thermo/THERMODATA.xpm
new file mode 100644
index 0000000..3daddcc
--- /dev/null
+++ b/src/Thermo/THERMODATA.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * TEPHIDATA_xpm[] = {
+"32 32 13 1",
+" c #000000006666",
+". c #00000000FFFF",
+"X c #FFFFFFFFCCCC",
+"o c #FFFF00000000",
+"O c #25250000FFFF",
+"+ c #B2B2B2B2B2B2",
+"@ c #555555555555",
+"# c #000000000000",
+"$ c #0000FFFFFFFF",
+"% c #000073734B4B",
+"& c #6C6CA6A63131",
+"* c #FFFFFFFFFFFF",
+"= c #00008C8C3030",
+" . ",
+" .XXXXXXXXXXXXXXXXX.XXXoooXXXXX ",
+" X.XXXXXXXXXXXXXXXXX.XXoXX XXXX ",
+" XX.XXXXXXXXXXXXXXXXX.oXXXX XXX ",
+" XXX.XXXXXXXXXXXXXXXXooXXXXX XX ",
+" XXXX.XXXXXXXXXXXXXXooX.XXXXX X ",
+" XXXXX.XXXXXXXXXXXXooXXX.XXXXX ",
+" XXXXXX.XXXXXXXXXXXoXXXXX.XXXXX ",
+" XXXXXXX.XXXXXXXXXXoXXXXXX.XXXX ",
+" XXXXXXXX.XXXXXXXXooXXXXXXX.XXX ",
+" XXXXXXXXX.XXXXXXXoXXXXXXXXX.XX ",
+" XXXXXXXXXX.XXOOOOOXXXXXXXXXX.X ",
+" XXXXXXXXXXX.OOOOOOOXXXXXXXXXX.o",
+" XXXXXXXXXXXOOOXXXOOOXXXXXXXXXoo",
+" XXXX+@####@+OXXXXXOOOXXXXXXXoo ",
+" XXX@#$$%%%$#@XXXXXXOOXXXXXXooX ",
+" XX#$%&*$*%$$%#XXXXXOOXXXXXXoXX ",
+" X#%$&=*$*=$*%%#XXXXOOXXXXXoXXX ",
+".X%&=*==**$*=%%%@XXOOOXXXXooXXX ",
+" #%&===*==**=%%%#+OOOXXXXXoXXXX ",
+" $%&==*===$*$=$*$@OO.X*XXoXXXXX ",
+" $%&====$***$$%%%#OXX.XXooXXXXX ",
+" $%&====**$*$&%%%#XXXX.XoXXXXXX ",
+" $%&====$***$&%%%#XXXXXooXXXXXX ",
+" $$*===*==$*$%%%%#XXXXXo.XXXXXX ",
+" $$$*==*$**$*$%%%@XXXXXoX.XXXXX ",
+" #$*$*=====*$*$$#+XXXXoXXX.XXXX ",
+" @$$*$%%%%%$*$$$@XXXXXoXXXX.XXX ",
+" X#$$*$%%%$$$$$#XXXXXXoXXXXX.XX ",
+" XX#$$*%%%$$$$#XXXXXXoXXXXXXX.X ",
+" XXX@#$%%%$$#@XXXXXXXoXXXXXXXX. ",
+" o o "};
diff --git a/src/Thermo/THERMOVIEW.xpm b/src/Thermo/THERMOVIEW.xpm
new file mode 100644
index 0000000..40b31d8
--- /dev/null
+++ b/src/Thermo/THERMOVIEW.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char * TEPHIVIEW_xpm[] = {
+"32 32 6 1",
+" c #333333333333",
+". c #FFFFFFFFCCCC",
+"X c #7E7E7E7E7E7E",
+"o c #00000000FFFF",
+"O c #FFFF00000000",
+"+ c #000000006666",
+" ",
+" .............................. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .Xo.................oO....+.X. ",
+" .X.o................OO.....+X. ",
+" .X..o..............OO.o.....X. ",
+" .X...o............OO...o....X. ",
+" .X....o...........O.....o...X. ",
+" .X.....o.........O.......o..X. ",
+" .X......o.......OO........o.X. ",
+" .X.......o......O..........oX. ",
+" .X........o....O............X. ",
+" .X.........o..OO............X. ",
+" .X..........o.O.............X. ",
+" .X...........O..............X. ",
+" .X..........OOo............OX. ",
+" .X..........O..o...........OX. ",
+" .X..........O...o.........O.X. ",
+" .X.........O.....o.......OO.X. ",
+" .X........OO......o......O..X. ",
+" .X........O........o....O...X. ",
+" .Xo.......O.........o..OO...X. ",
+" .X.o.....O...........o.O....X. ",
+" .X..o....O............OO....X. ",
+" .X...o..O.............Oo....X. ",
+" .X....o.O.............O.o...X. ",
+" .X.....O.............O...o..X. ",
+" .X.....Oo............O....o.X. ",
+" .X....OO.o...........O.....oX. ",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ",
+" .............................. ",
+" "};
diff --git a/src/Thermo/Thermo.cc b/src/Thermo/Thermo.cc
new file mode 100644
index 0000000..8177893
--- /dev/null
+++ b/src/Thermo/Thermo.cc
@@ -0,0 +1,89 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "Thermo.h"
+#include "GribThermo.h"
+#include "BufrThermo.h"
+
+Thermo::Thermo (const char* kw) :
+ MvService(kw),
+ actionMode_("prepare")
+{
+
+}
+
+void Thermo::serve(MvRequest& in,MvRequest& out)
+{
+cout << "request IN" << endl;
+in.print();
+
+ // Create a temporary netCDF file name
+ ncFileName_ = marstmp();
+
+ // Get and save action mode. Default value is "prepare"
+ actionMode_ = (const char*)in("_ACTION") ? (const char*)in("_ACTION") : "prepare";
+
+ // Get Input parameters
+ //origReq_ = in;
+ if ( !this->getInputParameters(in) )
+ return;
+
+ // Process data
+ if ( !this->processData() )
+ return;
+
+ // Build the output request
+ if ( !this->createOutputRequest(out) )
+ return;
+
+ // Add hidden values to tne output request
+ // out1("_VERB") = "NETCDF_MATRIX";
+ if ( (const char *)in("_NAME") )
+ out("_NAME") = in("_NAME");
+
+cout << "request OUT" << endl;
+out.print();
+
+ return;
+}
+
+bool Thermo::isVisualise()
+{
+ // If the output is not 'visualisation' related: actions
+ // "not visualise" or "prepare" (in certain cases), then
+ // send back the "netCDF" request
+ #if 0
+ int procType = appInfo.processType();
+ if ( actionMode != "visualise" &&
+ !(actionMode == "prepare" && procType == XS_DATA_MODULE_DROPPED) &&
+ !(actionMode == "prepare" && procType == XS_DATA_DROPPED) )
+ return false;
+ #endif
+ if ( actionMode_ != "visualise" )
+ return false;
+ else
+ return true;
+}
+
+//------------------------------------------------------------------------------
+
+int main(int argc,char **argv)
+{
+ MvApplication theApp(argc,argv);
+
+ GribThermo gribThermo;
+ BufrThermo bufrThermo;
+
+ // The applications don't try to read or write from pool, this
+ // should not be done with the new PlotMod.
+ gribThermo.saveToPool(false);
+ bufrThermo.saveToPool(false);
+
+ theApp.run();
+}
diff --git a/src/Thermo/Thermo.h b/src/Thermo/Thermo.h
new file mode 100644
index 0000000..69b762e
--- /dev/null
+++ b/src/Thermo/Thermo.h
@@ -0,0 +1,70 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef THERMO_H
+#define THERMO_H
+
+#include "Metview.h"
+
+// Constant variable names/sizes
+static const float K2C = 273.15;
+static const float MissingValue = 1.7e38;
+static const string sTIME_STR = "str_length";
+static const string sTIME = "time";
+static const string sTEMP = "t";
+static const string sDEWPOINT = "td";
+static const string sPRESSURE = "pres";
+static const string sWIND = "wind";
+static const string sU = "u";
+static const string sV = "v";
+static const string sXWIND = "xwind";
+static const string sPWIND = "pwind";
+static const string sNLEV = "nlev";
+static const string sNLEVWIND = "nlevwind";
+
+class Thermo : public MvService {
+
+public:
+
+ // Entry point routine
+ void serve(MvRequest&,MvRequest&);
+
+ // Get input parameters
+ virtual bool getInputParameters( MvRequest& ) { return false; };
+
+ // Process data and build all data structures
+ virtual bool processData() { return false; };
+
+ // Create output request
+ virtual bool createOutputRequest( MvRequest& ) { return false; };
+
+ // Handle variable members
+ void actionMode( string action ) { actionMode_ = action; }
+ string actionMode() { return actionMode_; }
+ //void processType( int type ) { procType_ = type; }
+ //int processType( ) { return procType_; }
+ void ncFileName( string name ) { ncFileName_ = name; }
+ string ncFileName() { return ncFileName_; }
+
+ // Check if processing is related to visualisation
+ bool isVisualise();
+
+protected:
+
+ Thermo(const char*);
+
+private:
+
+ string actionMode_; // e.g. "examine"/"save"/"execute"/...
+ //int procType_; // processing type
+ string ncFileName_; // netcdf file name
+
+};
+
+#endif
diff --git a/src/Thermo/ThermoDataDef b/src/Thermo/ThermoDataDef
new file mode 100644
index 0000000..3ce0a41
--- /dev/null
+++ b/src/Thermo/ThermoDataDef
@@ -0,0 +1,163 @@
+THERMODATA_FAMILY; DATA_TYPE
+{
+ DATA_TYPE
+ {
+ GRIB_THERMO
+ ODB_THERMO
+ BUFR_THERMO
+ } = GRIB_THERMO
+}
+
+#---------------------------------------------------------------------
+
+GRIB_THERMO; Data Type Grib
+{
+ DATA
+ [
+ interface = icon, class = GRIB, exclusive = false,
+ help = help_data,
+ help_directory = '/System/Defaults',
+ help_name = Data for GribThermo,
+ help_class = RETRIEVE,
+ help_definition = ( RETRIEVE, PARAM = T/Q, GRID = 1./1. )
+ ]
+ { @ / }
+
+ POINT_SELECTION
+ {
+ COORDINATES
+ STATION
+ AREA_AVERAGE
+ } = COORDINATES
+
+ COORDINATES
+ [
+ help = help_input,
+ help_icon = 'help_point',
+ input_type = point,
+ input_window = '/System/Defaults/Input Window'
+ ]
+ {
+ *
+ /
+ } = 0./0.
+
+ AREA_AVERAGE
+ [
+ help = help_input,
+ help_icon = 'help_area',
+ input_type = area,
+ input_window = '/System/Defaults/Input Window'
+ ]
+ {
+ *
+ /
+ } = 30./-30./-30./30.
+
+ STATION
+ [ interface = icon,
+ class = STATION,
+ exclusive = false,
+ help = help_data,
+ missing = fatal,
+ help_directory = '/System/Defaults',
+ help_name = Station for Thermo,
+ help_class = STATIONS,
+ help_definition = ( STATIONS, NAME = Heathrow )
+ ]
+ { @ / }
+
+ POINT_EXTRACTION
+ {
+ NEAREST_GRIDPOINT
+ INTERPOLATE
+ } = INTERPOLATE
+
+ DEW_POINT_FORMULATION
+ {
+ SATURATION_OVER_WATER
+ MIXED_PHASE_0_TO_-23
+ } = SATURATION_OVER_WATER
+
+ TEMPERATURE_PARAM
+ { * } = 130
+
+ SPECIFIC_HUMIDITY_PARAM
+ { * } = 133
+
+ LNSP_PARAM
+ { * } = 152
+
+ U_WIND_PARAM
+ { * } = 131
+
+ V_WIND_PARAM
+ { * } = 132
+}
+
+#----------------------------------------------------------------------
+
+ODB_THERMO; Data Type ODB
+{
+ DATA
+ [ interface = icon,
+ class = ODB_DB,
+ exclusive = false,
+ help = help_data,
+ help_directory = '/System/Defaults',
+ help_name = Data
+ ]
+ { @ / }
+
+ WHERE
+ [ interface = scrolled_text ]
+ { @ } = ''
+
+ TEMP_VARIABLE
+ { @ }
+
+ DEWPOINT_VARIABLE
+ { @ }
+
+ HUMIDITY_VARIABLE
+ { @ }
+
+ PRESSURE_VARIABLE
+ { @ }
+
+ U_VARIABLE
+ { @ }
+
+ V_VARIABLE
+ { @ }
+}
+
+#----------------------------------------------------------------------
+
+BUFR_THERMO; Data Type BUFR
+{
+ DATA
+ [ interface = icon,
+ class = BUFR,
+ exclusive = true,
+ help = help_data,
+ help_directory = '/System/Defaults',
+ help_name = Data for Observation filtering,
+ help_class = RETRIEVE,
+ help_definition = ( RETRIEVE, TYPE = OB, DATE = '-2' )
+ ]
+ { @ }
+
+ STATION
+ [ interface = icon,
+ class = STATION,
+ exclusive = false,
+ help = help_data,
+ missing = fatal,
+ help_directory = '/System/Defaults',
+ help_name = Station for Thermo,
+ help_class = STATIONS,
+ help_definition = ( STATIONS, NAME = Heathrow )
+ ]
+ { @ / }
+}
diff --git a/src/Thermo/ThermoDataRules b/src/Thermo/ThermoDataRules
new file mode 100644
index 0000000..5ff2643
--- /dev/null
+++ b/src/Thermo/ThermoDataRules
@@ -0,0 +1,13 @@
+#%if DATA_TYPE = GRIB_THERMO %and POINT_SELECTION = COORDINATES %then
+%if POINT_SELECTION = COORDINATES %then
+ %unset AREA_AVERAGE
+ %unset STATION
+
+%if POINT_SELECTION = STATION %then
+ %unset AREA_AVERAGE
+ %unset COORDINATES
+
+%if POINT_SELECTION = AREA_AVERAGE %then
+ %unset STATION
+ %unset COORDINATES
+ %unset POINT_EXTRACTION
diff --git a/src/Thermo/ThermoViewDef b/src/Thermo/ThermoViewDef
new file mode 100644
index 0000000..31a37bb
--- /dev/null
+++ b/src/Thermo/ThermoViewDef
@@ -0,0 +1,65 @@
+THERMOVIEW; Thermo Icon; Metview
+{
+ TYPE
+ {
+ TEPHIGRAM
+ SKEW_T
+ EMAGRAM
+ STUVE
+ } = TEPHIGRAM
+
+ BOTTOM_PRESSURE
+ {
+ *
+ } = 1015.0
+
+ TOP_PRESSURE
+ {
+ *
+ } = 0.01
+
+ MINIMUM_TEMPERATURE
+ {
+ *
+ } = -30
+
+ MAXIMUM_TEMPERATURE
+ {
+ *
+ } = 50
+
+ THERMO_GRID [
+ interface = icon,
+ class = MTEPHI,
+ missing = ignored,
+ help = help_data,
+ help_name = Thermo Grid,
+ help_directory = '/System/Defaults',
+ help_class = MTEPHI,
+ help_definition = ( MTEPHI )
+ ]
+ { @ }
+
+ SUBPAGE_X_POSITION
+ {
+ @
+ } = 12
+
+ SUBPAGE_Y_POSITION
+ {
+ @
+ } = 10
+
+ SUBPAGE_X_LENGTH
+ {
+ @
+ } = 75
+
+ SUBPAGE_Y_LENGTH
+ {
+ @
+ } = 80
+
+%include PageFrameDef
+%include SubpageFrameDef
+}
diff --git a/src/Thermo/ThermoViewRules b/src/Thermo/ThermoViewRules
new file mode 100644
index 0000000..a3fbc4e
--- /dev/null
+++ b/src/Thermo/ThermoViewRules
@@ -0,0 +1,2 @@
+%include PageFrameRules
+%include SubpageFrameRules
diff --git a/src/Vapor/Makefile.am b/src/Vapor/Makefile.am
new file mode 100644
index 0000000..baf0897
--- /dev/null
+++ b/src/Vapor/Makefile.am
@@ -0,0 +1,40 @@
+
+bin_PROGRAMS = bin/VaporPrepare bin/gribToVapor
+
+#-------------------------------------------------
+
+bin_VaporPrepare_SOURCES = VaporPrepare.cc
+
+bin_VaporPrepare_CPPFLAGS = -I../libUtil -I../libMetview
+bin_VaporPrepare_LDFLAGS =
+bin_VaporPrepare_LDADD = $(STANDARD_METVIEW_LIBS) ../../lib/libUtil.a $(FLIBS)
+
+
+bin_gribToVapor_SOURCES = gribToVapor.cc
+
+bin_gribToVapor_CPPFLAGS =
+bin_gribToVapor_LDFLAGS =
+bin_gribToVapor_LDADD = $(STANDARD_METVIEW_LIBS)
+
+
+sharedir = $(datadir)/metview/etc
+local_sharedir = ../../share/metview/etc
+share_DATA = $(local_sharedir)/ObjectSpec.Vapor \
+ $(local_sharedir)/VaporPrepareDef $(local_sharedir)/VaporPrepareRules
+
+# to build the share data, we take the destination files and
+# remove their directory, e.g. $(local_sharedir)/DefFile becomes DefFile.
+# $< is the 'stripped' version and $@ is the 'full' version
+$(share_DATA): $(local_sharedir)/%: %
+ ${INSTALL} $< $(local_sharedir)
+
+
+CLEANFILES = $(share_DATA)
+
+BUILT_SOURCES = bin
+
+EXTRA_DIST = ObjectSpec.Vapor \
+ VaporPrepareDef VaporPrepareRules
+
+bin:
+ ln -s ../../bin bin
diff --git a/src/Scm/Makefile.in b/src/Vapor/Makefile.in
similarity index 79%
copy from src/Scm/Makefile.in
copy to src/Vapor/Makefile.in
index 48a29d6..12072a1 100644
--- a/src/Scm/Makefile.in
+++ b/src/Vapor/Makefile.in
@@ -36,11 +36,12 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-bin_PROGRAMS = bin/ScmRun$(EXEEXT) bin/ScmVisualiser$(EXEEXT)
-subdir = src/Scm
+bin_PROGRAMS = bin/VaporPrepare$(EXEEXT) bin/gribToVapor$(EXEEXT)
+subdir = src/Vapor
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -50,22 +51,25 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sharedir)"
PROGRAMS = $(bin_PROGRAMS)
-am_bin_ScmRun_OBJECTS = bin_ScmRun-ScmRun.$(OBJEXT)
-bin_ScmRun_OBJECTS = $(am_bin_ScmRun_OBJECTS)
+am_bin_VaporPrepare_OBJECTS = bin_VaporPrepare-VaporPrepare.$(OBJEXT)
+bin_VaporPrepare_OBJECTS = $(am_bin_VaporPrepare_OBJECTS)
am__DEPENDENCIES_1 =
+bin_VaporPrepare_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ ../../lib/libUtil.a $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
am__v_lt_0 = --silent
-bin_ScmRun_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(bin_ScmRun_LDFLAGS) $(LDFLAGS) -o $@
+bin_VaporPrepare_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+ $(AM_CXXFLAGS) $(CXXFLAGS) $(bin_VaporPrepare_LDFLAGS) \
+ $(LDFLAGS) -o $@
am__dirstamp = $(am__leading_dot)dirstamp
-am_bin_ScmVisualiser_OBJECTS = \
- bin_ScmVisualiser-ScmVisualiser.$(OBJEXT)
-bin_ScmVisualiser_OBJECTS = $(am_bin_ScmVisualiser_OBJECTS)
-bin_ScmVisualiser_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+am_bin_gribToVapor_OBJECTS = bin_gribToVapor-gribToVapor.$(OBJEXT)
+bin_gribToVapor_OBJECTS = $(am_bin_gribToVapor_OBJECTS)
+bin_gribToVapor_DEPENDENCIES = $(am__DEPENDENCIES_1)
+bin_gribToVapor_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
- $(AM_CXXFLAGS) $(CXXFLAGS) $(bin_ScmVisualiser_LDFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS) $(bin_gribToVapor_LDFLAGS) \
$(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
@@ -93,8 +97,8 @@ am__v_CXXLD_0 = @echo " CXXLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
-SOURCES = $(bin_ScmRun_SOURCES) $(bin_ScmVisualiser_SOURCES)
-DIST_SOURCES = $(bin_ScmRun_SOURCES) $(bin_ScmVisualiser_SOURCES)
+SOURCES = $(bin_VaporPrepare_SOURCES) $(bin_gribToVapor_SOURCES)
+DIST_SOURCES = $(bin_VaporPrepare_SOURCES) $(bin_gribToVapor_SOURCES)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -129,6 +133,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -152,6 +158,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -329,29 +336,23 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
#-------------------------------------------------
-bin_ScmRun_SOURCES = ScmRun.cc
-bin_ScmRun_CPPFLAGS = -I../libUtil -I../libMetview
-bin_ScmRun_LDFLAGS =
-bin_ScmRun_LDADD = $(STANDARD_METVIEW_LIBS) $(FLIBS)
-bin_ScmRun_DEPENDENCIES = ../../lib/libUtil.a
-bin_ScmVisualiser_SOURCES = ScmVisualiser.cc
-bin_ScmVisualiser_CPPFLAGS = -I../libUtil -I../libMetview
-bin_ScmVisualiser_LDFLAGS =
-bin_ScmVisualiser_LDADD = $(STANDARD_METVIEW_LIBS) $(FLIBS)
-bin_ScmVisualiser_DEPENDENCIES = ../../lib/libUtil.a
+bin_VaporPrepare_SOURCES = VaporPrepare.cc
+bin_VaporPrepare_CPPFLAGS = -I../libUtil -I../libMetview
+bin_VaporPrepare_LDFLAGS =
+bin_VaporPrepare_LDADD = $(STANDARD_METVIEW_LIBS) ../../lib/libUtil.a $(FLIBS)
+bin_gribToVapor_SOURCES = gribToVapor.cc
+bin_gribToVapor_CPPFLAGS =
+bin_gribToVapor_LDFLAGS =
+bin_gribToVapor_LDADD = $(STANDARD_METVIEW_LIBS)
sharedir = $(datadir)/metview/etc
local_sharedir = ../../share/metview/etc
-share_DATA = $(local_sharedir)/ObjectSpec.Scm \
- $(local_sharedir)/ScmRunDef $(local_sharedir)/ScmRunRules \
- $(local_sharedir)/ScmVisualiserDef $(local_sharedir)/ScmVisualiserRules \
- $(local_sharedir)/ScmVisualiserInput1dVars $(local_sharedir)/ScmVisualiserInput2dVars \
- $(local_sharedir)/ScmVisualiserOutput1dVars $(local_sharedir)/ScmVisualiserOutput2dVars
+share_DATA = $(local_sharedir)/ObjectSpec.Vapor \
+ $(local_sharedir)/VaporPrepareDef $(local_sharedir)/VaporPrepareRules
-CLEANFILES = $(share_DATA)
+CLEANFILES = $(share_DATA)
BUILT_SOURCES = bin
-EXTRA_DIST = ObjectSpec.Scm \
- ScmRunDef ScmRunRules ScmVisualiserDef ScmVisualiserRules \
- ScmVisualiserInput1dVars ScmVisualiserInput2dVars ScmVisualiserOutput1dVars ScmVisualiserOutput2dVars
+EXTRA_DIST = ObjectSpec.Vapor \
+ VaporPrepareDef VaporPrepareRules
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -367,9 +368,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Scm/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Vapor/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/Scm/Makefile
+ $(AUTOMAKE) --gnu src/Vapor/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@@ -434,12 +435,12 @@ clean-binPROGRAMS:
bin/$(am__dirstamp):
@$(MKDIR_P) bin
@: > bin/$(am__dirstamp)
-bin/ScmRun$(EXEEXT): $(bin_ScmRun_OBJECTS) $(bin_ScmRun_DEPENDENCIES) bin/$(am__dirstamp)
- @rm -f bin/ScmRun$(EXEEXT)
- $(AM_V_CXXLD)$(bin_ScmRun_LINK) $(bin_ScmRun_OBJECTS) $(bin_ScmRun_LDADD) $(LIBS)
-bin/ScmVisualiser$(EXEEXT): $(bin_ScmVisualiser_OBJECTS) $(bin_ScmVisualiser_DEPENDENCIES) bin/$(am__dirstamp)
- @rm -f bin/ScmVisualiser$(EXEEXT)
- $(AM_V_CXXLD)$(bin_ScmVisualiser_LINK) $(bin_ScmVisualiser_OBJECTS) $(bin_ScmVisualiser_LDADD) $(LIBS)
+bin/VaporPrepare$(EXEEXT): $(bin_VaporPrepare_OBJECTS) $(bin_VaporPrepare_DEPENDENCIES) bin/$(am__dirstamp)
+ @rm -f bin/VaporPrepare$(EXEEXT)
+ $(AM_V_CXXLD)$(bin_VaporPrepare_LINK) $(bin_VaporPrepare_OBJECTS) $(bin_VaporPrepare_LDADD) $(LIBS)
+bin/gribToVapor$(EXEEXT): $(bin_gribToVapor_OBJECTS) $(bin_gribToVapor_DEPENDENCIES) bin/$(am__dirstamp)
+ @rm -f bin/gribToVapor$(EXEEXT)
+ $(AM_V_CXXLD)$(bin_gribToVapor_LINK) $(bin_gribToVapor_OBJECTS) $(bin_gribToVapor_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -447,8 +448,8 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_ScmRun-ScmRun.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_ScmVisualiser-ScmVisualiser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_VaporPrepare-VaporPrepare.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_gribToVapor-gribToVapor.Po at am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -474,37 +475,37 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-bin_ScmRun-ScmRun.o: ScmRun.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_ScmRun_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_ScmRun-ScmRun.o -MD -MP -MF $(DEPDIR)/bin_ScmRun-ScmRun.Tpo -c -o bin_ScmRun-ScmRun.o `test -f 'ScmRun.cc' || echo '$(srcdir)/'`ScmRun.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_ScmRun-ScmRun.Tpo $(DEPDIR)/bin_ScmRun-ScmRun.Po
+bin_VaporPrepare-VaporPrepare.o: VaporPrepare.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_VaporPrepare_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_VaporPrepare-VaporPrepare.o -MD -MP -MF $(DEPDIR)/bin_VaporPrepare-VaporPrepare.Tpo -c -o bin_VaporPrepare-VaporPrepare.o `test -f 'VaporPrepare.cc' || echo '$(srcdir)/'`VaporPrepare.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_VaporPrepare-VaporPrepare.Tpo $(DEPDIR)/bin_VaporPrepare-VaporPrepare.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ScmRun.cc' object='bin_ScmRun-ScmRun.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='VaporPrepare.cc' object='bin_VaporPrepare-VaporPrepare.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_ScmRun_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_ScmRun-ScmRun.o `test -f 'ScmRun.cc' || echo '$(srcdir)/'`ScmRun.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_VaporPrepare_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_VaporPrepare-VaporPrepare.o `test -f 'VaporPrepare.cc' || echo '$(srcdir)/'`VaporPrepare.cc
-bin_ScmRun-ScmRun.obj: ScmRun.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_ScmRun_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_ScmRun-ScmRun.obj -MD -MP -MF $(DEPDIR)/bin_ScmRun-ScmRun.Tpo -c -o bin_ScmRun-ScmRun.obj `if test -f 'ScmRun.cc'; then $(CYGPATH_W) 'ScmRun.cc'; else $(CYGPATH_W) '$(srcdir)/ScmRun.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_ScmRun-ScmRun.Tpo $(DEPDIR)/bin_ScmRun-ScmRun.Po
+bin_VaporPrepare-VaporPrepare.obj: VaporPrepare.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_VaporPrepare_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_VaporPrepare-VaporPrepare.obj -MD -MP -MF $(DEPDIR)/bin_VaporPrepare-VaporPrepare.Tpo -c -o bin_VaporPrepare-VaporPrepare.obj `if test -f 'VaporPrepare.cc'; then $(CYGPATH_W) 'VaporPrepare.cc'; else $(CYGPATH_W) '$(srcdir)/VaporPrepare.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_VaporPrepare-VaporPrepare.Tpo $(DEPDIR)/bin_VaporPrepare-VaporPrepare.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ScmRun.cc' object='bin_ScmRun-ScmRun.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='VaporPrepare.cc' object='bin_VaporPrepare-VaporPrepare.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_ScmRun_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_ScmRun-ScmRun.obj `if test -f 'ScmRun.cc'; then $(CYGPATH_W) 'ScmRun.cc'; else $(CYGPATH_W) '$(srcdir)/ScmRun.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_VaporPrepare_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_VaporPrepare-VaporPrepare.obj `if test -f 'VaporPrepare.cc'; then $(CYGPATH_W) 'VaporPrepare.cc'; else $(CYGPATH_W) '$(srcdir)/VaporPrepare.cc'; fi`
-bin_ScmVisualiser-ScmVisualiser.o: ScmVisualiser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_ScmVisualiser_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_ScmVisualiser-ScmVisualiser.o -MD -MP -MF $(DEPDIR)/bin_ScmVisualiser-ScmVisualiser.Tpo -c -o bin_ScmVisualiser-ScmVisualiser.o `test -f 'ScmVisualiser.cc' || echo '$(srcdir)/'`ScmVisualiser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_ScmVisualiser-ScmVisualiser.Tpo $(DEPDIR)/bin_ScmVisualiser-ScmVisualiser.Po
+bin_gribToVapor-gribToVapor.o: gribToVapor.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_gribToVapor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_gribToVapor-gribToVapor.o -MD -MP -MF $(DEPDIR)/bin_gribToVapor-gribToVapor.Tpo -c -o bin_gribToVapor-gribToVapor.o `test -f 'gribToVapor.cc' || echo '$(srcdir)/'`gribToVapor.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_gribToVapor-gribToVapor.Tpo $(DEPDIR)/bin_gribToVapor-gribToVapor.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ScmVisualiser.cc' object='bin_ScmVisualiser-ScmVisualiser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gribToVapor.cc' object='bin_gribToVapor-gribToVapor.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_ScmVisualiser_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_ScmVisualiser-ScmVisualiser.o `test -f 'ScmVisualiser.cc' || echo '$(srcdir)/'`ScmVisualiser.cc
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_gribToVapor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_gribToVapor-gribToVapor.o `test -f 'gribToVapor.cc' || echo '$(srcdir)/'`gribToVapor.cc
-bin_ScmVisualiser-ScmVisualiser.obj: ScmVisualiser.cc
- at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_ScmVisualiser_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_ScmVisualiser-ScmVisualiser.obj -MD -MP -MF $(DEPDIR)/bin_ScmVisualiser-ScmVisualiser.Tpo -c -o bin_ScmVisualiser-ScmVisualiser.obj `if test -f 'ScmVisualiser.cc'; then $(CYGPATH_W) 'ScmVisualiser.cc'; else $(CYGPATH_W) '$(srcdir)/ScmVisualiser.cc'; fi`
- at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_ScmVisualiser-ScmVisualiser.Tpo $(DEPDIR)/bin_ScmVisualiser-ScmVisualiser.Po
+bin_gribToVapor-gribToVapor.obj: gribToVapor.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_gribToVapor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_gribToVapor-gribToVapor.obj -MD -MP -MF $(DEPDIR)/bin_gribToVapor-gribToVapor.Tpo -c -o bin_gribToVapor-gribToVapor.obj `if test -f 'gribToVapor.cc'; then $(CYGPATH_W) 'gribToVapor.cc'; else $(CYGPATH_W) '$(srcdir)/gribToVapor.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_gribToVapor-gribToVapor.Tpo $(DEPDIR)/bin_gribToVapor-gribToVapor.Po
@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ScmVisualiser.cc' object='bin_ScmVisualiser-ScmVisualiser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gribToVapor.cc' object='bin_gribToVapor-gribToVapor.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_ScmVisualiser_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_ScmVisualiser-ScmVisualiser.obj `if test -f 'ScmVisualiser.cc'; then $(CYGPATH_W) 'ScmVisualiser.cc'; else $(CYGPATH_W) '$(srcdir)/ScmVisualiser.cc'; fi`
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_gribToVapor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_gribToVapor-gribToVapor.obj `if test -f 'gribToVapor.cc'; then $(CYGPATH_W) 'gribToVapor.cc'; else $(CYGPATH_W) '$(srcdir)/gribToVapor.cc'; fi`
mostlyclean-libtool:
-rm -f *.lo
diff --git a/src/Vapor/ObjectSpec.Vapor b/src/Vapor/ObjectSpec.Vapor
new file mode 100644
index 0000000..41a1d5a
--- /dev/null
+++ b/src/Vapor/ObjectSpec.Vapor
@@ -0,0 +1,77 @@
+################################################################################
+#
+# ObjectSpec.Vapor
+#
+
+#-----------------------
+# Data
+#-----------------------
+
+object,
+ class = VAPOR_VDF_FILE,
+ can_be_created = False,
+ check = False,
+ default_object = False,
+ type = File,
+ default_name = 'Vapor vdf File',
+ pixmap = '$METVIEW_DIR_SHARE/icons/VAPOR_VDF_FILE.icon',
+ editor_type = QtMacroEditor
+
+#state,
+# class = FLEXTRA,
+# action = examine,
+# service = OdbExaminer
+
+#-----------------------
+# Preparation
+#-----------------------
+
+object,
+ class = VAPOR_PREPARE,
+ can_be_created = True,
+ definition_file = '$METVIEW_DIR_SHARE/etc/VaporPrepareDef',
+ rules_file = '$METVIEW_DIR_SHARE/etc/VaporPrepareRules',
+ default_name = 'Vapor Prepare',
+ type = Data,
+ icon_box = Data access,
+ expand = 75,
+ macro = vapor_prepare,
+ editor_type = SimpleEditor,
+ skip_dependancies = visualise,
+ pixmap = '$METVIEW_DIR_SHARE/icons/VAPOR_PREPARE.icon'
+
+
+#-----------------------
+# States + services
+#-----------------------
+
+
+state,
+ class = VAPOR_PREPARE,
+ action = execute,
+ service = VaporPrepare
+
+state,
+ class = VAPOR_PREPARE,
+ output_class = VAPOR_INPUT,
+ service = VaporPrepare
+
+state,
+ class = VAPOR_PREPARE,
+ action = visualise,
+ service = VaporPrepare
+
+#state,
+# class = FLEXTRA_RUN,
+# action = execute,
+# service = FlextraRun
+
+#state,
+# class = FLEXTRA_RUN,
+# output_class = FLEXTRA_FILE,
+# service = FlextraRun
+
+
+service,
+ cmd = '$METVIEW_CMD $METVIEW_BIN/VaporPrepare',
+ name = VaporPrepare
diff --git a/src/Vapor/VaporPrepare.cc b/src/Vapor/VaporPrepare.cc
new file mode 100644
index 0000000..f3438ad
--- /dev/null
+++ b/src/Vapor/VaporPrepare.cc
@@ -0,0 +1,606 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include "Metview.h"
+#include "MvPath.hpp"
+#include "MvDate.h"
+#include "Tokenizer.h"
+
+#include <iostream>
+#include <stdexcept>
+#include <algorithm>
+
+#include <unistd.h>
+
+
+#include "MvMiscelaneous.h"
+
+using namespace std;
+
+#define VAPOR_CHK(str) if(!(str)) return
+
+class Base : public MvService {
+protected:
+ Base(char* a) : MvService(a) {};
+};
+
+class VaporPrep: public Base {
+public:
+ VaporPrep() : Base("VAPOR_PREPARE") {};
+ void serve(MvRequest&,MvRequest&);
+
+protected:
+ bool getDate(const string& dd,string& res,const string& parName);
+ bool getParamValue(string &resVal,MvRequest& in,const string& parMv,bool);
+ bool checkGeometry(const string& areaStr,const string& gridStr);
+ bool vdfExists(MvRequest&,bool &);
+ bool getInputFiles(std::vector<string>& resVal,MvRequest& in,const string& parMv);
+ void vapor_visualise(MvRequest&,MvRequest&);
+ void vapor_execute(MvRequest&,MvRequest&);
+};
+
+
+bool VaporPrep::getInputFiles(std::vector<string>& resVal,MvRequest& in,const string& parMv)
+{
+ MvRequest r=in(parMv.c_str());
+
+ do
+ {
+ MvRequest rs=r.justOneRequest();
+ if(const char *c=rs("PATH"))
+ {
+ resVal.push_back(string(c));
+ }
+
+ } while(r.advance());
+
+ bool retVal=(resVal.size() >0)?true:false;
+
+ if(!retVal)
+ {
+ marslog(LOG_EROR,"No input files specified for parameter: %s",parMv.c_str());
+ setError(13);
+ }
+
+ return retVal;
+}
+
+bool VaporPrep::getDate(const string& dd,string& res,const string& parName)
+{
+ res=dd;
+
+ if(dd.size() < 8)
+ {
+ istringstream iss(dd);
+ double d;
+ iss >> d;
+ char buf[9];
+ MvDate md(julian_to_date(today() + d,1));
+ md.Format("yyyymmdd", buf);
+ res=string(buf);
+ }
+
+ bool retVal=(res.size() == 8)?true:false;
+
+ if(!retVal)
+ {
+ marslog(LOG_EROR,"Invalid date format used for parameter: %s",parName.c_str());
+ setError(13);
+ }
+
+ return retVal;
+}
+
+bool VaporPrep::getParamValue(string& resVal,MvRequest& in,const string& parMv,bool isDate=false)
+{
+ int cnt = in.countValues(parMv.c_str());
+
+ if(cnt == 1)
+ {
+ const char *cval=in(parMv.c_str());
+ if(cval)
+ resVal=string(cval);
+ }
+ else
+ {
+ vector<string> vals;
+ int toIndex=-1;
+ int byIndex=-1;
+ for( int i=0; i<cnt; i++)
+ {
+ const char *cval = in(parMv.c_str(),i );
+ if(cval)
+ {
+ vals.push_back(string(cval));
+ if(strcmp(cval,"TO") == 0)
+ toIndex=static_cast<int>(vals.size())-1;
+ else if(strcmp(cval,"BY") == 0)
+ byIndex=static_cast<int>(vals.size())-1;
+ }
+ }
+
+
+ if(vals.size() == 0)
+ {
+ marslog(LOG_EROR,"No value found for parameter: %s",parMv.c_str());
+ setError(13);
+ return false;
+ }
+ if(toIndex==1 && byIndex==3 && static_cast<int>(vals.size()) == 5)
+ {
+ int fromValue;
+ istringstream issF(vals[0]);
+ issF >> fromValue;
+
+ int toValue;
+ istringstream issT(vals[2]);
+ issT >> toValue;
+
+ int byValue;
+ istringstream issB(vals[4]);
+ issB >> byValue;
+
+ if(fromValue >=0 && fromValue < 500 &&
+ toValue >= fromValue && toValue < 500 &&
+ byValue > 0 && byValue<=6)
+
+ {
+ int currentValue=fromValue;
+ resVal=vals[0];
+ currentValue+=byValue;
+ while(currentValue <= toValue)
+ {
+ stringstream sst;
+ sst << currentValue;
+ resVal.append("/" + sst.str());
+ currentValue+=byValue;
+ }
+ }
+ }
+ else if(toIndex != -1 || byIndex != -1)
+ {
+ marslog(LOG_EROR,"Incorrect syntax used for parameter: %s",parMv.c_str());
+ setError(13);
+ return false;
+ }
+ else
+ {
+ resVal=vals[0];
+ for(unsigned int i=1; i< vals.size(); i++)
+ {
+ resVal.append("/" + vals[i]);
+ }
+ }
+ }
+
+ if(isDate)
+ {
+ string s;
+ if(getDate(resVal,s,parMv))
+ {
+ resVal=s;
+ }
+ else
+ resVal.clear();
+ }
+
+
+
+ if(!resVal.empty())
+ {
+ return true;
+ }
+ else
+ {
+ marslog(LOG_EROR,"No value found for parameter: %s",parMv.c_str());
+ setError(13);
+ return false;
+ }
+
+}
+
+bool VaporPrep::checkGeometry(const string& areaStr,const string& gridStr)
+{
+ vector<string> vArea;
+ Tokenizer parseA("/");
+ parseA(areaStr,vArea);
+
+ vector<string> vGrid;
+ Tokenizer parseG("/");
+ parseG(gridStr,vGrid);
+
+ if(vArea.size() != 4 || vGrid.size() != 2)
+ return false;
+
+ vector<float> area;
+ for(unsigned int i=0; i < 4; i++)
+ {
+ istringstream iss(vArea[i]);
+ float d;
+ iss >> d;
+ area.push_back(d);
+ }
+
+ vector<float> grid;
+ for(unsigned int i=0; i < 2; i++)
+ {
+ istringstream iss(vGrid[i]);
+ float d;
+ iss >> d;
+ if(d <= 0.)
+ return false;
+
+ grid.push_back(d);
+ }
+
+ double trVal;
+
+ float nx=(area[2]-area[0])/grid[1];
+ trVal=trunc(nx);
+ if(nx != trVal || static_cast<float>(static_cast<int>(trVal)) != trVal)
+ return false;
+
+ float ny=(area[3]-area[1])/grid[0];
+ trVal=trunc(ny);
+ if(ny != trVal || static_cast<float>(static_cast<int>(trVal)) != trVal)
+ return false;
+
+
+ return true;
+}
+
+
+bool VaporPrep::vdfExists(MvRequest& in, bool& err)
+{
+ string errTxt;
+ err=false;
+
+ //Add outpath
+ string outPath;
+ if(!in.getPath("VAPOR_OUTPUT_PATH",outPath,true,errTxt))
+ {
+ marslog(LOG_EROR,"%s",errTxt.c_str());
+ setError(13);
+ err=true;
+ return false;
+ }
+
+ string vdfName;
+ getParamValue(vdfName,in,"VAPOR_VDF_NAME");
+
+ string vdfFile=outPath + "/" + vdfName + ".vdf";
+
+ if( ::access(vdfFile.c_str(),F_OK) != 0 )
+ {
+ return false;
+ }
+
+ return true;
+}
+
+
+void VaporPrep::vapor_visualise( MvRequest& in, MvRequest& /*out*/)
+{
+ string vaporScript;
+ char *mvbin=getenv("METVIEW_BIN");
+ if (mvbin == 0)
+ {
+ marslog(LOG_EROR,"No METVIEW_BIN env variable is defined. Cannot locate mv_vapor_gui.mv macro!");
+ setError(13);
+ return;
+ }
+ else
+ {
+ vaporScript=string(mvbin) + "/mv_vapor_gui";
+ }
+
+ string errTxt;
+
+ //Add outpath
+ string outPath;
+ if(!in.getPath("VAPOR_OUTPUT_PATH",outPath,true,errTxt))
+ {
+ marslog(LOG_EROR,"%s",errTxt.c_str());
+ setError(13);
+ return;
+ }
+
+ //Add vdf filename
+ string vdfName;
+ VAPOR_CHK(getParamValue(vdfName,in,"VAPOR_VDF_NAME"));
+
+ string logFile(marstmp());
+ string vdfFile=outPath+"/"+vdfName + ".vdf";
+ string cmd=vaporScript + " \"" + vdfFile + "\" \"" + logFile + "\"";
+
+ int ret=system(cmd.c_str());
+
+ //If the script failed read log file and
+ //write it into LOG_EROR
+ if(ret == -1 || WEXITSTATUS(ret) != 0)
+ {
+ ifstream in(logFile.c_str());
+ string line;
+
+ if(WEXITSTATUS(ret) == 1)
+ {
+ marslog(LOG_EROR,"Failed to startup VAPOR!");
+ while(getline(in,line))
+ {
+ marslog(LOG_EROR,"%s",line.c_str());
+ }
+ in.close();
+ setError(13);
+ return;
+ }
+ else if(WEXITSTATUS(ret) > 1)
+ {
+ marslog(LOG_EROR,"VAPOR startup failed with exit code: %d !",WEXITSTATUS(ret));
+ while(getline(in,line))
+ {
+ marslog(LOG_EROR,"%s",line.c_str());
+ }
+ in.close();
+ setError(13);
+ return;
+ }
+
+ }
+}
+
+void VaporPrep::vapor_execute( MvRequest& in, MvRequest& out)
+{
+ string vaporMacro;
+ char *mvbin=getenv("METVIEW_BIN");
+ if (mvbin == 0)
+ {
+ marslog(LOG_EROR,"No METVIEW_BIN env variable is defined. Cannot locate mv_vapor_prep.mv macro!");
+ setError(13);
+ return;
+ }
+ else
+ {
+ vaporMacro=string(mvbin) +"/mv_vapor_prep.mv";
+ }
+
+ vector<string> param;
+ string str,errTxt;
+
+ //Add outpath
+ string outPath;
+ if(!in.getPath("VAPOR_OUTPUT_PATH",outPath,true,errTxt))
+ {
+ marslog(LOG_EROR,"%s",errTxt.c_str());
+ setError(13);
+ return;
+ }
+ param.push_back(outPath);
+
+ //Add vdf filename
+ string vdfName;
+ VAPOR_CHK(getParamValue(vdfName,in,"VAPOR_VDF_NAME"));
+ param.push_back(vdfName);
+
+ //==============================
+ //
+ // Execute
+ //
+ //==============================
+
+ //Add reuse(check) input status
+ string reuseVdf;
+ VAPOR_CHK(getParamValue(str,in,"VAPOR_REUSE_VDF"));
+ param.push_back((str == "ON")?"1":"0");
+
+
+ //Add refinement level
+ string refLevel;
+ VAPOR_CHK(getParamValue(refLevel,in,"VAPOR_REFINEMENT_LEVEL"));
+ param.push_back(refLevel);
+
+ //Add vertical grid type
+ string vGrid;
+ VAPOR_CHK(getParamValue(vGrid,in,"VAPOR_VERTICAL_GRID_TYPE"));
+ param.push_back(vGrid);
+
+ if(vGrid == "LAYERED")
+ {
+ string hVar;
+ VAPOR_CHK(getParamValue(hVar,in,"VAPOR_ELEVATION_PARAM"));
+ param.push_back(hVar);
+
+ //Add min-max vertical coordinate
+ string vMin;
+ VAPOR_CHK(getParamValue(vMin,in,"VAPOR_BOTTOM_COORDINATE"));
+ param.push_back(vMin);
+
+ string vMax;
+ VAPOR_CHK(getParamValue(vMax,in,"VAPOR_TOP_COORDINATE"));
+ param.push_back(vMax);
+ }
+
+ //Add are selection
+ string areaSelect;
+ VAPOR_CHK(getParamValue(areaSelect,in,"VAPOR_AREA_SELECTION"));
+ param.push_back((areaSelect == "INTERPOLATE")?"1":"0");
+
+ if(areaSelect == "INTERPOLATE")
+ {
+ //Add area
+ string area;
+ VAPOR_CHK(getParamValue(area,in,"VAPOR_AREA"));
+ param.push_back(area);
+
+ //Add grid resolution
+ string grid;
+ VAPOR_CHK(getParamValue(grid,in,"VAPOR_GRID"));
+ param.push_back(grid);
+
+ if(!checkGeometry(area,grid))
+ {
+ marslog(LOG_EROR,"Inconsistency between grid area and resolution!");
+ setError(13);
+ return;
+ }
+ }
+
+ //Add steps numbers
+ string stepParams;
+ VAPOR_CHK(getParamValue(stepParams,in,"VAPOR_STEP_NUMBER"));
+ param.push_back(stepParams);
+
+ //Add surf params
+ string surfParams;
+ VAPOR_CHK(getParamValue(surfParams,in,"VAPOR_2D_PARAMS"));
+ param.push_back(surfParams);
+
+ //Add upper params
+ string upperParams;
+ VAPOR_CHK(getParamValue(upperParams,in,"VAPOR_3D_PARAMS"));
+ param.push_back(upperParams);
+
+ //Create tmp dir for vapor
+ string tmpPath;
+ if(!metview::createWorkDir("vapor",tmpPath,errTxt))
+ {
+ marslog(LOG_EROR,"%s",errTxt.c_str());
+ setError(13);
+ return;
+ }
+ param.push_back(tmpPath);
+
+ //Add perparation mode
+ string inputMode;
+ VAPOR_CHK(getParamValue(inputMode,in,"VAPOR_INPUT_MODE"));
+ param.push_back(inputMode);
+
+ //Add input files
+ if(inputMode == "ICON")
+ {
+ //Add mars expver
+ vector<string> gribFiles;
+ VAPOR_CHK(getInputFiles(gribFiles,in,"VAPOR_INPUT_DATA"));
+ for(int i=0; i < static_cast<int>(gribFiles.size());i++)
+ param.push_back(gribFiles[i]);
+ }
+ else
+ {
+ }
+
+ //Build request to be sent to Macro
+ MvRequest req("MACRO");
+
+ string processName = MakeProcessName("VaporPrepare");
+ MvRequest macroReq("MACRO");
+ req("PATH") = vaporMacro.c_str();
+ req("_CLASS") = "MACRO";
+ req("_ACTION") = "execute";
+ req("_REPLY") = processName.c_str();
+
+ //Define argument list for the macro!
+ for(vector<string>::iterator it=param.begin(); it != param.end(); it++)
+ {
+ req.addValue("_ARGUMENTS",(*it).c_str());
+ }
+
+ req.print();
+
+ //Run macro
+ int error;
+ //marslog(LOG_INFO,"Execute macro: %s",vaporMacro.c_str());
+ MvRequest reply = MvApplication::waitService("macro",req,error);
+
+ string logFile=tmpPath + "/m_log.txt";
+ string errFile=tmpPath + "/m_err.txt";
+ if(!error && reply)
+ {
+ marslog(LOG_INFO,"Log file is available at:");
+ marslog(LOG_INFO,"---------------------------");
+ marslog(LOG_INFO," %s",logFile.c_str());
+
+ //const char* myname = reply("_REPLY");
+ //MvApplication::callService(myname,reply,0);
+ }
+ else
+ {
+ ifstream in(errFile.c_str());
+ string line;
+ marslog(LOG_EROR,"Failed to perform VAPOR Prepare!");
+ marslog(LOG_EROR,"Error message:");
+ while(getline(in,line))
+ {
+ marslog(LOG_EROR,"%s",line.c_str());
+ }
+ in.close();
+
+ marslog(LOG_EROR,"Log file is available at:");
+ marslog(LOG_EROR,"---------------------------");
+ marslog(LOG_EROR," %s",logFile.c_str());
+
+ setError(13);
+ return;
+ }
+ //reply.print();
+
+ out=MvRequest("VAPOR_INPUT");
+ out("INPUT_DATA_PATH")=outPath.c_str();
+ //out("AVAILABLE_FILE_PATH")=fAvailable.c_str();
+
+ out.print();
+}
+
+
+
+
+void VaporPrep::serve( MvRequest& in, MvRequest& out)
+{
+ cout << "--------------VaporPrepare::serve()--------------" << endl;
+ in.print();
+
+ // Get user action mode
+ const char* modeC = (const char*)in("_ACTION");
+ string mode;
+ if(modeC)
+ mode=string(modeC);
+
+ if(mode == "visualise")
+ {
+ bool err=false;
+ bool hasVdf=vdfExists(in,err);
+
+ if(err)
+ {
+ return;
+ }
+ else if(!hasVdf)
+ {
+ vapor_execute(in,out);
+ }
+
+ vapor_visualise(in,out);
+ }
+ else if(mode == "execute")
+ {
+ vapor_execute(in,out);
+ }
+}
+
+
+int main( int argc, char** argv )
+{
+ MvApplication theApp( argc, argv,"VaporPrepare");
+
+ VaporPrep vapor;
+
+ vapor.saveToPool(false);
+
+ theApp.run();
+}
+
+
diff --git a/src/Vapor/VaporPrepareDef b/src/Vapor/VaporPrepareDef
new file mode 100644
index 0000000..9a5eb02
--- /dev/null
+++ b/src/Vapor/VaporPrepareDef
@@ -0,0 +1,113 @@
+VAPOR_PREPARE; Vapor_prepare
+{
+ VAPOR_INPUT_MODE [interface = option_menu ]
+ {
+ ICON ; ICON
+ #PATH ; PATH
+ } = ICON
+
+ VAPOR_INPUT_DATA
+ [ interface = icon, class = GRIB, exclusive = false,
+ help = help_data,
+ help_directory = '/Metview/Defaults',
+ help_name = Data ]
+ { @ / }
+
+ VAPOR_INPUT_PATH [visible = false]
+ {
+ @
+ } = ''
+
+ VAPOR_INPUT_NAME_PATTERN [visible = false]
+ {
+ @
+ } = ''
+
+ VAPOR_2D_PARAMS
+ {
+ @
+ /
+ } = 2t/10u/10v
+
+ VAPOR_3D_PARAMS
+ {
+ @
+ /
+ } = t/u/v/r
+
+ VAPOR_VERTICAL_GRID_TYPE [interface = option_menu ]
+ {
+ REGULAR ; REGULAR
+ LAYERED ; LAYERED
+ } = LAYERED
+
+ VAPOR_ELEVATION_PARAM
+ {
+ @
+ } = 'z'
+
+ VAPOR_BOTTOM_COORDINATE
+ {
+ *
+ }= 0
+
+ VAPOR_TOP_COORDINATE
+ {
+ *
+ }= 16000
+
+ VAPOR_AREA_SELECTION [interface = option_menu ]
+ {
+ NATIVE ; NATIVE
+ INTERPOLATE ; INTERPOLATE
+ } = NATIVE
+
+ VAPOR_AREA
+ [
+ help = help_input,
+ help_icon = 'help_map',
+ input_type = map,
+ input_window = '/Metview/Defaults/Input Window'
+ ]
+ {
+ *
+ /
+ } = -90./-180./90./180
+
+ VAPOR_GRID
+ {
+ *
+ /
+ } = 1/1
+
+ VAPOR_STEP_NUMBER
+ {
+ *
+ } = -1
+
+ VAPOR_REFINEMENT_LEVEL [interface = option_menu ]
+ {
+ 0 ; 0
+ 1 ; 1
+ 2; 2
+ 3 ; 3
+ 4 ; 4
+ } = 2
+
+ VAPOR_VDF_NAME
+ {
+ @
+ } = ''
+
+ VAPOR_OUTPUT_PATH
+ {
+ @
+ } = '/tmp'
+
+ VAPOR_REUSE_VDF [interface = option_menu, visible = false ]
+ {
+ ON ; ON
+ OFF ; OFF
+ } = OFF
+
+}
diff --git a/src/Vapor/VaporPrepareRules b/src/Vapor/VaporPrepareRules
new file mode 100644
index 0000000..c689eb8
--- /dev/null
+++ b/src/Vapor/VaporPrepareRules
@@ -0,0 +1,15 @@
+%if VAPOR_INPUT_MODE = ICON %then
+ %unset VAPOR_INPUT_PATH
+ %unset VAPOR_INPUT_NAME_PATTERN
+
+%if VAPOR_INPUT_MODE = PATH %then
+ %unset VAPOR_INPUT_DATA
+
+%if VAPOR_VERTICAL_GRID_TYPE = REGULAR %then
+ %unset VAPOR_ELEVATION_PARAM
+ %unset VAPOR_BOTTOM_COORDINATE
+ %unset VAPOR_TOP_COORDINATE
+
+%if VAPOR_AREA_SELECTION = NATIVE %then
+ %unset VAPOR_AREA
+ %unset VAPOR_GRID
diff --git a/src/Vapor/gribToVapor.cc b/src/Vapor/gribToVapor.cc
new file mode 100644
index 0000000..d82c45c
--- /dev/null
+++ b/src/Vapor/gribToVapor.cc
@@ -0,0 +1,206 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include <iostream>
+#include <string>
+
+#include <stdio.h>
+
+#include "grib_api.h"
+
+using namespace std;
+
+static int toVapor(const string& fgrib,const string& fvapor);
+
+int main(int argc, char** argv)
+{
+ if(argc != 3)
+ {
+ exit(1);
+ }
+
+
+ string fgrib(argv[1]);
+ string fvapor(argv[2]);
+
+ return toVapor(fgrib,fvapor);
+}
+
+
+int toVapor(const string& fgrib,const string& fvapor)
+{
+ FILE* fp;
+ FILE *fpOut;
+ grib_handle* gh=NULL;
+ int err=0;
+
+ double* value=0;
+ float* valueOut=0;
+ size_t valNum=0;
+
+ const int MAX_VAL_LEN=64;
+ size_t vlen;
+ char cval[MAX_VAL_LEN];
+
+ //Open grib file for reading
+ fp = fopen(fgrib.c_str(),"r");
+ if(!fp)
+ {
+ cout << "Cannot open grib file: " << fgrib << endl;
+ return 1;
+ }
+
+
+ //Open output file
+ fpOut = fopen(fvapor.c_str(),"w+");
+ if(!fpOut)
+ {
+ cout << "Cannot open output file: " << fvapor << endl;
+ return 1;
+ }
+
+
+ //Get messages form the file
+ int cnt=0;
+ while((gh = grib_handle_new_from_file(0,fp,&err)) != NULL)
+ {
+ if(!gh)
+ {
+ cout << "Unable to create grib handle fro message " << cnt << endl;
+ return 1;
+ }
+
+ //Grid type
+ string gridType;
+ vlen=MAX_VAL_LEN;
+ if(grib_get_string(gh,"gridType",cval,&vlen) == GRIB_SUCCESS)
+ {
+ gridType=string(cval);
+ }
+ else
+ {
+ cout << "No gridType found" << endl;
+ return 1;
+ }
+
+ vlen=MAX_VAL_LEN;
+ GRIB_CHECK(grib_get_string(gh,"shortName",cval,&vlen),0);
+ string shortName(cval);
+
+ //Get grid dimensions
+ long nx,ny;
+ cout << "message: " << cnt << endl;
+
+ GRIB_CHECK(grib_get_long(gh,"Ni",&nx),0);
+ GRIB_CHECK(grib_get_long(gh,"Nj",&ny),0);
+
+ cout << nx << " " << ny << endl;
+
+ //Allocate array for values
+ size_t num;
+ grib_get_size(gh,"values",&num);
+ if(num != static_cast<size_t>(nx*ny))
+ {
+ cout << "No values found" << endl;
+ return 1;
+ }
+ else if(valNum == 0)
+ {
+ valNum=num;
+ value= new double[num];
+ valueOut=new float[num];
+ }
+ else if(num != valNum)
+ {
+ cout << "Different field sizes!" << endl;
+ return 1;
+
+ }
+
+ //Read values
+ if(grib_get_double_array(gh,"values",value,&valNum) != 0)
+ {
+ cout << "Failed to read values" << endl;
+ return 1;
+ }
+
+ //Check if data should be rearranged
+ long iScan,jScan;
+ double lat1,lat2,lon1,lon2;
+ long jOrder;
+
+ //GRIB_CHECK(grib_get_double(gh,"latitudeOfFirstGridPointInDegrees",&lat1),0);
+ //GRIB_CHECK(grib_get_double(gh,"longitudeOfFirstGridPointInDegrees",&lon1),0);
+ //GRIB_CHECK(grib_get_double(gh,"latitudeOfLastGridPointInDegrees",&lat2),0);
+ //GRIB_CHECK(grib_get_double(gh,"longitudeOfLastGridPointInDegrees",&lon2),0);
+
+ GRIB_CHECK(grib_get_long(gh,"iScansPositively",&iScan),0);
+ GRIB_CHECK(grib_get_long(gh,"jScansPositively",&jScan),0);
+ GRIB_CHECK(grib_get_long(gh,"jPointsAreConsecutive",&jOrder),0);
+
+ cout << "nx=" << nx << " ny=" << ny << " iScan=" << iScan << " jScan=" << jScan << " jOrder=" << jOrder << endl;
+
+ //i-direction scan
+ if(jOrder==0)
+ {
+ if(iScan == 1 && jScan == 0)
+ {
+ for(unsigned int j=0; j < ny; j++)
+ for(unsigned int i=0; i < nx; i++)
+ valueOut[j*nx+i]=value[(ny-j-1)*nx+i];
+ }
+ else if(iScan == 0 && jScan == 0)
+ {
+ for(unsigned int j=0; j < ny; j++)
+ for(unsigned int i=0; i < nx; i++)
+ valueOut[j*nx+i]=value[nx*ny-(ny-j-1)*nx+i];
+
+ }
+ else if(iScan == 0 && jScan == 1)
+ {
+ for(unsigned int j=0; j < ny; j++)
+ for(unsigned int i=0; i < nx; i++)
+ valueOut[j*nx+i]=value[(ny-j-1)*nx+i];
+ }
+ else
+ {
+ for(unsigned int i=0; i< valNum; i++)
+ valueOut[i]=value[i];
+ }
+ }
+ else
+ {
+ for(unsigned int i=0; i< valNum; i++)
+ valueOut[i]=value[i];
+ }
+
+ if(shortName == "z")
+ for(unsigned int i=0; i< valNum; i++)
+ valueOut[i]/=9.81;
+
+
+ //Write out fields
+ fwrite(valueOut,4,valNum,fpOut);
+
+ grib_handle_delete(gh);
+
+ cnt++;
+ }
+
+
+ fclose(fp);
+ fclose(fpOut);
+
+ if(value) delete [] value;
+ if(valueOut) delete [] valueOut;
+
+ return 0;
+}
+
+
diff --git a/src/Velstr/Makefile.in b/src/Velstr/Makefile.in
index d08f99c..0a2f028 100644
--- a/src/Velstr/Makefile.in
+++ b/src/Velstr/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/Velstr
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -115,6 +116,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -138,6 +141,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/VisTools/Makefile.in b/src/VisTools/Makefile.in
index 328af4f..d65d302 100644
--- a/src/VisTools/Makefile.in
+++ b/src/VisTools/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/VisTools
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -116,6 +117,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -139,6 +142,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/WebAccess/Makefile.in b/src/WebAccess/Makefile.in
index d46cf7c..0ead54b 100644
--- a/src/WebAccess/Makefile.in
+++ b/src/WebAccess/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/WebAccess
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -138,6 +139,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -161,6 +164,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/XSection/Average.cc b/src/XSection/Average.cc
index 3569705..ebc7503 100644
--- a/src/XSection/Average.cc
+++ b/src/XSection/Average.cc
@@ -36,20 +36,44 @@ inline static bool different (double d1, double d2, double e)
return (fabs(d1 - d2) > e);
}
-bool Average::getAreaLineParameter( MvRequest& in, double& X1, double& Y1, double& X2, double& Y2)
+Average::Average() :
+ Xsect("MXAVERAGE")
+{
+ type_ = "MXAVERAGE";
+ view_ = "MXAVERAGEVIEW";
+}
+
+Average::Average(const char* kw) :
+ Xsect(kw)
+{
+ type_ = kw;
+ view_ = "MXAVERAGEVIEW";
+}
+
+bool Average::getCoordinates( MvRequest& in, ApplicationInfo& appInfo )
{
// Get input values
- Y1 = in("AREA",0);
- X1 = in("AREA",1);
- Y2 = in("AREA",2);
- X2 = in("AREA",3);
+ double Y1 = in("AREA",0);
+ double X1 = in("AREA",1);
+ double Y2 = in("AREA",2);
+ double X2 = in("AREA",3);
// Check coordinates
- return checkCoordinates(X1,Y1,X2,Y2);
+ if ( !checkCoordinates(X1,Y1,X2,Y2) )
+ return false;
+
+ // Save coordinates
+ appInfo.setAreaLine(X1,X2,Y1,Y2);
+
+ return true;
}
-void Average::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
+bool Average::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
{
+ // Retrieve geographical coordinates
+ if ( !this->getCoordinates(in,appInfo) )
+ return false;
+
// Retrieve interpolation flag
// Normal interpolation of levels unless INTERPOLATE_VALUES = NO
bool interpolate = true;
@@ -60,6 +84,37 @@ void Average::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
appInfo.Interpolate(interpolate);
inputMode_ = (strcmp(in("DIRECTION"),"NS") == 0 || strcmp(in("DIRECTION"),"NORTH SOUTH") == 0) ? AVERAGE_NS : AVERAGE_EW;
+
+ return true;
+}
+
+bool Average::consistencyCheck( MvRequest& req1, MvRequest& req2)
+{
+ // Check coordinates
+ if ( (double)req1("AREA",0) != (double)req2("AREA",0) ||
+ (double)req1("AREA",1) != (double)req2("AREA",1) ||
+ (double)req1("AREA",2) != (double)req2("AREA",2) ||
+ (double)req1("AREA",3) != (double)req2("AREA",3)
+ )
+ {
+ setError(1,"AREA coordinates are not consistent");
+ return false;
+ }
+
+ // Check interpolation option
+ if ( (const char*)req1("INTERPOLATE_VALUES") != (const char*)req2("INTERPOLATE_VALUES") )
+ setError(0,"INTERPOLATE_VALUES parameter is not consistent");
+
+ // Check direction
+ int im1 = (strcmp(req1("DIRECTION"),"NS") == 0 || strcmp(req1("DIRECTION"),"NORTH SOUTH") == 0) ? AVERAGE_NS : AVERAGE_EW;
+ int im2 = (strcmp(req2("DIRECTION"),"NS") == 0 || strcmp(req2("DIRECTION"),"NORTH SOUTH") == 0) ? AVERAGE_NS : AVERAGE_EW;
+ if ( im1 != im2 )
+ {
+ setError(1,"DIRECTION parameter is not consistent");
+ return false;
+ }
+
+ return true;
}
// Generate data for average aplication.
@@ -133,14 +188,9 @@ MvRequest Average::createOutputRequest( ApplicationInfo& appInfo, string netcdfN
xs("PATH") = netcdfName.c_str();
xs("TEMPORARY") = 1;
- // If action is not visualisation related then return the netcdf data
- if ( !isVisualise( appInfo ) )
- return xs;
-
// Create NetCDF output request
MvRequest out1("NETCDF_XY_MATRIX");
out1("NETCDF_MISSING_ATTRIBUTE") = "_FillValue";
- out1("NETCDF_DATA") = xs;
out1("NETCDF_VALUE_VARIABLE") = getNetcdfVarname(parInfo->ParamName()).c_str();
out1("NETCDF_Y_VARIABLE") = XS_VARLEVEL.c_str();;
out1("NETCDF_X_VARIABLE") = (inputMode_ == AVERAGE_NS ) ? "lon" : "lat";
@@ -157,7 +207,20 @@ MvRequest Average::createOutputRequest( ApplicationInfo& appInfo, string netcdfN
if ( appInfo.levelType() != cML_UKMO_ND ) // UK MetOffice model levels are 'upside-down'
viewReq("Y_AUTOMATIC_REVERSE") = "on";
+ // If action is not visualisation related then return the netcdf data.
+ // Also, add the visualisation and original requests as hidden parameters.
+ // These may be used later to help the visualisation of the netcdf data.
+ if ( !isVisualise( appInfo ) )
+ {
+ xs("_VIEW") = view_.c_str();
+ xs("_VISUALISE") = out1;
+ xs("_CARTESIANVIEW") = viewReq;
+ xs("_ORIGINAL_REQUEST") = origReq_;
+ return xs;
+ }
+
// Final output request
+ out1("NETCDF_DATA") = xs;
MvRequest out = viewReq + out1;
return out;
}
diff --git a/src/XSection/Average.h b/src/XSection/Average.h
index 7f2378a..ccc64ef 100644
--- a/src/XSection/Average.h
+++ b/src/XSection/Average.h
@@ -32,15 +32,17 @@ class Average : public Xsect {
public:
- Average() : Xsect("MXAVERAGE") { view_ = "MXAVERAGEVIEW"; }
- Average(const char* kw) : Xsect(kw) { view_ = "MXAVERAGEVIEW"; }
+ // Constructors
+ Average();
+ Average(const char* kw);
- bool getAreaLineParameter( MvRequest&, double&, double&, double&, double&);
-
- void getAppParameters( MvRequest&, ApplicationInfo& );
+ // Get geographical coordinates and application parameters
+ bool getCoordinates( MvRequest&, ApplicationInfo& );
+ bool getAppParameters( MvRequest&, ApplicationInfo& );
bool generateData( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, const string& );
+ // Create output request
MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo* );
int computeNumberPoints( ApplicationInfo& );
@@ -49,6 +51,9 @@ public:
bool fieldConsistencyCheck( MvField&, double, double, double, double );
+ // Check if parameters between two requests are consistent
+ bool consistencyCheck( MvRequest&, MvRequest& );
+
private:
string titleVariable( ApplicationInfo&, ParamInfo*);
diff --git a/src/XSection/CrossS.cc b/src/XSection/CrossS.cc
index d398741..e4d4b08 100644
--- a/src/XSection/CrossS.cc
+++ b/src/XSection/CrossS.cc
@@ -40,6 +40,7 @@ CrossS::CrossS() :
hcIntensity_(0), currentHC_(0),
inputMode_(XCONTOUR)
{
+ type_ = "MXSECTION";
view_ = "MXSECTIONVIEW";
}
@@ -50,23 +51,30 @@ CrossS::CrossS(const char*kw) :
hcIntensity_(0), currentHC_(0),
inputMode_(XCONTOUR)
{
+ type_ = kw;
view_ = "MXSECTIONVIEW";
}
-bool CrossS::getAreaLineParameter( MvRequest& in, double& X1, double& Y1, double& X2, double& Y2)
+bool CrossS::getCoordinates( MvRequest& in, ApplicationInfo& appInfo )
{
// Get input values
- Y1 = in("LINE",0);
- X1 = in("LINE",1);
- Y2 = in("LINE",2);
- X2 = in("LINE",3);
+ double Y1 = in("LINE",0);
+ double X1 = in("LINE",1);
+ double Y2 = in("LINE",2);
+ double X2 = in("LINE",3);
- // Check coordinates
- return checkCoordinates(X1,Y1,X2,Y2);
+ // Save coordinates
+ appInfo.setAreaLine(X1,X2,Y1,Y2);
+
+ return true;
}
-void CrossS::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
+bool CrossS::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
{
+ // Retrieve geographical coordinates
+ if ( !this->getCoordinates(in,appInfo) )
+ return false;
+
// Retrieve interpolation flag
// Normal interpolation of levels unless INTERPOLATE_VALUES = NO
bool interpolate = true;
@@ -110,7 +118,37 @@ void CrossS::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
if( (const char*)in( "LNSP_PARAM" ) )
LnPress = (int)in( "LNSP_PARAM" );
- return;
+ return true;
+}
+
+bool CrossS::consistencyCheck( MvRequest& req1, MvRequest& req2)
+{
+ // Check coordinates
+ if ( (double)req1("LINE",0) != (double)req2("LINE",0) ||
+ (double)req1("LINE",1) != (double)req2("LINE",1) ||
+ (double)req1("LINE",2) != (double)req2("LINE",2) ||
+ (double)req1("LINE",3) != (double)req2("LINE",3)
+ )
+ {
+ setError(1,"LINE coordinates are not consistent");
+ return false;
+ }
+
+ // Check interpolation option
+ if ( (const char*)req1("INTERPOLATE_VALUES") != (const char*)req2("INTERPOLATE_VALUES") )
+ setError(0,"INTERPOLATE_VALUES parameter is not consistent");
+
+ // Check Wind parameters
+ if ( (const char*)req1("WIND_PARALLEL") != (const char*)req2("WIND_PARALLEL") ||
+ (const char*)req1("WIND_PERPENDICULAR") != (const char*)req2("WIND_PERPENDICULAR") ||
+ (const char*)req1("WIND_INTENSITY") != (const char*)req2("WIND_INTENSITY")
+ )
+ {
+ setError(1,"WIND parameters are not consistencies");
+ return false;
+ }
+
+ return true;
}
bool CrossS::generateData ( ApplicationInfo& appInfo, ParamMap& params,
@@ -284,9 +322,7 @@ bool CrossS::windValues( ApplicationInfo& appInfo, ParamMap ¶ms, MvNetCDF &c
// The paraminfo contains the v field, now find the u field,
// substitute u for v in the key and find info in list.
- char ukey[60];
- sprintf(ukey,"p%03d%s",U_FIELD,key.substr(4,50).c_str() );
- ParamInfo *par_u = this->getParamInfo( params,ukey );
+ ParamInfo *par_u = this->getParamInfo( params,U_FIELD,key );
if ( !par_u )
return false;
@@ -352,9 +388,7 @@ bool CrossS::windValues( ApplicationInfo& appInfo, ParamMap ¶ms, MvNetCDF &c
// Get LNSP only once
if ( i == 0 )
{
- char keyLnsp[60];
- sprintf(keyLnsp,"p%03d%s",LnPress,key.substr(4,50).c_str() );
- ParamInfo* parLnsp = this->getParamInfo( params, keyLnsp );
+ ParamInfo* parLnsp = this->getParamInfo( params,LnPress,key );
if ( ! parLnsp ) //LNSP not found
{
setError(1,"ERROR: Could not find parameter LNSP");
@@ -409,16 +443,13 @@ bool CrossS::velocityValues( ApplicationInfo& appInfo, ParamMap ¶ms,
if ( !par_w )
return false;
- // The paraminfo contains the w field, now find the u and field,
- // substitute u for v in the key and find info in list.
- char key1[60];
- sprintf(key1,"p%03d%s",U_FIELD,key.substr(4,50).c_str() );
- ParamInfo* par_u = this->getParamInfo( params,key1 );
+ // The paraminfo contains the W field, now find the U and V fields.
+ // Use the W field key to find U/V info in the list.
+ ParamInfo* par_u = this->getParamInfo( params,U_FIELD,key );
if ( !par_u )
return false;
- sprintf(key1,"p%03d%s",V_FIELD,key.substr(4,50).c_str() );
- ParamInfo* par_v = this->getParamInfo( params,key1 );
+ ParamInfo* par_v = this->getParamInfo( params,V_FIELD,key );
if ( !par_v )
return false;
@@ -468,9 +499,7 @@ bool CrossS::velocityValues( ApplicationInfo& appInfo, ParamMap ¶ms,
appInfo.InterpolateVerticala(cp,&par_uv);
else
{
- char keyLnsp[60];
- sprintf(keyLnsp,"p%03d%s",LnPress,key.substr(4,50).c_str() );
- ParamInfo* parLnsp = this->getParamInfo( params, keyLnsp );
+ ParamInfo* parLnsp = this->getParamInfo( params,LnPress,key );
if ( ! parLnsp ) // LNSP not found
{
setError(1,"ERROR: Could not find parameter LNSP");
@@ -625,14 +654,9 @@ MvRequest CrossS::createOutputRequest( ApplicationInfo& appInfo, string netcdfNa
xs("PATH") = netcdfName.c_str();
xs("TEMPORARY") = 1;
- // If action is not visualisation related then return the netcdf data
- if ( !isVisualise( appInfo ) )
- return xs;
-
// Create NetCDF output request
MvRequest out1("NETCDF_XY_MATRIX");
out1("NETCDF_MISSING_ATTRIBUTE") = "_FillValue";
- out1("NETCDF_DATA") = xs;
out1("NETCDF_VALUE_VARIABLE") = getNetcdfVarname(parInfo->ParamName()).c_str();
out1("NETCDF_Y_VARIABLE") = XS_VARLEVEL.c_str();;
double X1,X2,Y1,Y2;
@@ -650,16 +674,6 @@ MvRequest CrossS::createOutputRequest( ApplicationInfo& appInfo, string netcdfNa
out1("NETCDF_X_GEOLINE_CONVENTION") = "lonlat";
}
- // Create customised Cartesian View request.
- // If an icon was dropped into a view, uPlot will ignore it.
- // Mode-specific options
- MvRequest viewReq("CARTESIANVIEW");
- viewReq("X_AXIS_TYPE") = "geoline";
- viewReq("X_AUTOMATIC") = "on";
- viewReq("Y_AUTOMATIC") = "on";
- if ( appInfo.levelType() != cML_UKMO_ND ) // UK MetOffice model levels are 'upside-down'
- viewReq("Y_AUTOMATIC_REVERSE") = "on";
-
// Add the orography curve visualiser
if ( appInfo.haveLNSP() && (appInfo.levelType() == XS_ML_LNSP || appInfo.levelType() == XS_PL) )
{
@@ -681,7 +695,31 @@ MvRequest CrossS::createOutputRequest( ApplicationInfo& appInfo, string netcdfNa
out1 = out1 + out_orog;
}
+ // Create customised Cartesian View request.
+ // If an icon was dropped into a view, uPlot will ignore it.
+ // Mode-specific options
+ MvRequest viewReq("CARTESIANVIEW");
+ viewReq("X_AXIS_TYPE") = "geoline";
+ viewReq("X_AUTOMATIC") = "on";
+ viewReq("Y_AUTOMATIC") = "on";
+ if ( appInfo.levelType() != cML_UKMO_ND ) // UK MetOffice model levels are 'upside-down'
+ viewReq("Y_AUTOMATIC_REVERSE") = "on";
+
+ // If action is not visualisation related then return the netcdf data.
+ // Also, add the visualisation and original requests as hidden parameters.
+ // These may be used later to help the visualisation of the netcdf data.
+ if ( !isVisualise( appInfo ) )
+ {
+ xs("_VIEW") = view_.c_str();
+ xs("_VISUALISE") = out1;
+ xs("_CARTESIANVIEW") = viewReq;
+ //xs("_VIEW_REQUEST") = viewReq;
+ xs("_ORIGINAL_REQUEST") = origReq_;
+ return xs;
+ }
+
// Final output request
+ out1("NETCDF_DATA") = xs;
MvRequest out = viewReq + out1;
return out;
}
diff --git a/src/XSection/CrossS.h b/src/XSection/CrossS.h
index a2251cb..9bc8e2b 100644
--- a/src/XSection/CrossS.h
+++ b/src/XSection/CrossS.h
@@ -36,14 +36,18 @@ public:
CrossS();
CrossS(const char* kw);
- bool getAreaLineParameter( MvRequest&, double&, double&, double&, double&);
-
- void getAppParameters( MvRequest&, ApplicationInfo& );
+ // Get geographical coordinates and application parameters
+ bool getCoordinates( MvRequest&, ApplicationInfo& );
+ bool getAppParameters( MvRequest&, ApplicationInfo& );
bool generateData( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, const string& );
+ // Create output request
MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo*);
+ // Check if parameters between two requests are consistent
+ bool consistencyCheck( MvRequest&, MvRequest& );
+
int computeNumberPoints( ApplicationInfo& );
bool fillValues( ApplicationInfo&, MvField &, double* );
diff --git a/src/XSection/Makefile.in b/src/XSection/Makefile.in
index f8dab52..97c986d 100644
--- a/src/XSection/Makefile.in
+++ b/src/XSection/Makefile.in
@@ -41,6 +41,7 @@ subdir = src/XSection
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -138,6 +139,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -161,6 +164,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/XSection/ObjectSpec.XSection b/src/XSection/ObjectSpec.XSection
index 1570a57..fd5e3f0 100644
--- a/src/XSection/ObjectSpec.XSection
+++ b/src/XSection/ObjectSpec.XSection
@@ -42,11 +42,13 @@ object,
state,
class = MXSECTION/MXAVERAGE,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
output_class = NETCDF,
service = XSection
state,
class = MVPROFILE,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
output_class = NETCDF/NETCDF_RTTOV_INPUT,
service = XSection
@@ -152,6 +154,7 @@ object,
state,
class = PM_XSECT/PM_AVERAGE/PM_VPROF,
+ action = visualise/execute/examine/save/hardcopy/prepare/drop,
output_class = NETCDF,
service = XSection
diff --git a/src/XSection/Vprofile.cc b/src/XSection/Vprofile.cc
index 2305d07..7f9086e 100644
--- a/src/XSection/Vprofile.cc
+++ b/src/XSection/Vprofile.cc
@@ -34,9 +34,23 @@ enum { VP_POINT,VP_GRIDPOINT,VP_AREA,VP_AREA2 };
// Type of VerticalProfile Output Mode
enum { VP_NORMAL, VP_RTTOV };
-bool Vprofile::getAreaLineParameter( MvRequest& in, double& X1, double& Y1, double& X2, double& Y2)
+// Constructors
+Vprofile::Vprofile() : Xsect("MVPROFILE")
+{
+ type_ ="MVPROFILE";
+ view_ = "MVPROFILEVIEW";
+}
+
+Vprofile::Vprofile(const char* kw) : Xsect(kw)
+{
+ type_ = kw;
+ view_ ="MVPROFILEVIEW";
+}
+
+bool Vprofile::getCoordinates( MvRequest& in, ApplicationInfo& appInfo )
{
// Get input values
+ double X1,X2,Y1,Y2;
if( strcmp(in("INPUT_MODE"),"AREA") == 0 || strcmp(in("INPUT_MODE"),"AREA2") == 0 )
{
inputMode_ = strcmp(in("INPUT_MODE"),"AREA") == 0 ? VP_AREA : VP_AREA2;
@@ -44,21 +58,30 @@ bool Vprofile::getAreaLineParameter( MvRequest& in, double& X1, double& Y1, doub
X1 = in("AREA",1);
Y2 = in("AREA",2);
X2 = in("AREA",3);
+
+ // Check coordinates
+ if ( !checkCoordinates(X1,Y1,X2,Y2) )
+ return false;
}
else
{
inputMode_ = (strcmp(in("INPUT_MODE"),"POINT") == 0) ? VP_POINT : VP_GRIDPOINT;
Y1 = Y2 = in("POINT",0);
X1 = X2 = in("POINT",1);
- return true;
}
- // Check coordinates
- return checkCoordinates(X1,Y1,X2,Y2);
+ // Save coordinates
+ appInfo.setAreaLine(X1,X2,Y1,Y2);
+
+ return true;
}
-void Vprofile::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
+bool Vprofile::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
{
+ // Retrieve geographical coordinates
+ if ( !this->getCoordinates( in, appInfo ) )
+ return false;
+
// Retrieve remaining parameters
outputMode_ = VP_NORMAL;
if( (const char*)in("OUTPUT_MODE") &&
@@ -74,7 +97,43 @@ void Vprofile::getAppParameters( MvRequest& in, ApplicationInfo& appInfo )
// Default Interpolation flag, by default
appInfo.Interpolate(false);
- return;
+ return true;
+}
+
+bool Vprofile::consistencyCheck( MvRequest& req1, MvRequest& req2)
+{
+ // Check input mode
+ if ( (const char*)req1("INPUT_MODE") != (const char*)req2("INPUT_MODE") )
+ {
+ setError(1,"INPUT_MODE parameter is not consistent");
+ return false;
+ }
+
+ // Check coordinates
+ if( strcmp(req1("INPUT_MODE"),"AREA") == 0 || strcmp(req2("INPUT_MODE"),"AREA2") == 0 )
+ {
+ if ( (double)req1("AREA",0) != (double)req2("AREA",0) ||
+ (double)req1("AREA",1) != (double)req2("AREA",1) ||
+ (double)req1("AREA",2) != (double)req2("AREA",2) ||
+ (double)req1("AREA",3) != (double)req2("AREA",3)
+ )
+ {
+ setError(1,"AREA coordinates are not consistent");
+ return false;
+ }
+ }
+ else
+ {
+ if ( (double)req1("POINT",0) != (double)req2("POINT",0) ||
+ (double)req1("POINT",1) != (double)req2("POINT",1)
+ )
+ {
+ setError(1,"POINT coordinates are not consistent");
+ return false;
+ }
+ }
+
+ return true;
}
// It assumes that the dataset contains only 2 set of Level Type: a) Level Type
@@ -181,6 +240,9 @@ bool Vprofile::writeGeoCoordsNetcdf( MvNetCDF& cdf, ApplicationInfo& appInfo )
bool Vprofile::writeGlobalAttributesNetcdf( MvNetCDF& netcdf, ParamMap& params, ApplicationInfo& appInfo )
{
+ // Add data and application Ids
+ netcdf.addAttribute("_View",view_.c_str() );
+ netcdf.addAttribute("type",type_.c_str());
if ( outputMode_ == VP_NORMAL )
netcdf.addAttribute("dataID","NETCDF_NORMAL");
else
@@ -196,7 +258,9 @@ bool Vprofile::writeGlobalAttributesNetcdf( MvNetCDF& netcdf, ParamMap& params,
return false;
string title = this->titleVariable(appInfo,parInfo);
- return netcdf.addAttribute("title",title.c_str());
+ netcdf.addAttribute("title",title.c_str());
+
+ return true;
}
bool Vprofile::generateExtraData( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamMap ¶ms, MvFieldSetIterator& iter )
@@ -519,28 +583,17 @@ bool Vprofile::generateSurftype( MvNetCDF& cdf, ApplicationInfo& appInfo, ParamM
MvRequest Vprofile::createOutputRequest( ApplicationInfo& appInfo, string netcdfName, ParamInfo* parInfo )
{
- // If action is not visualisation related then return the netcdf data
- if ( !isVisualise( appInfo ) )
- {
- // Get output data verb
- string verb;
- string actionMode = appInfo.actionMode();
- if ( outputMode_ == VP_RTTOV &&
- (actionMode == "analyse" || actionMode == "prepare") )
- verb = "NETCDF_RTTOV_INPUT";
- else
- verb = "NETCDF";
-
- // Build output request
- MvRequest xs(verb.c_str());
- xs("PATH") = netcdfName.c_str();
- xs("TEMPORARY") = 1;
-
- return xs;
- }
-
// Create netCDF data request
- MvRequest xs("NETCDF");
+ // Get output data verb
+ string verb;
+ string actionMode = appInfo.actionMode();
+ if ( outputMode_ == VP_RTTOV &&
+ (actionMode == "analyse" || actionMode == "prepare") )
+ verb = "NETCDF_RTTOV_INPUT";
+ else
+ verb = "NETCDF";
+
+ MvRequest xs(verb.c_str());
xs("PATH") = netcdfName.c_str();
xs("TEMPORARY") = 1;
@@ -559,7 +612,20 @@ MvRequest Vprofile::createOutputRequest( ApplicationInfo& appInfo, string netcdf
viewReq("Y_AUTOMATIC") = "on";
viewReq("Y_AUTOMATIC_REVERSE") = "on";
+ // If action is not visualisation related then return the netcdf data.
+ // Also, add the visualisation and original requests as hidden parameters.
+ // These may be used later to help the visualisation of the netcdf data.
+ if ( !isVisualise( appInfo ) )
+ {
+ xs("_VIEW") = view_.c_str();
+ xs("_VISUALISE") = out1;
+ xs("_CARTESIANVIEW") = viewReq;
+ xs("_ORIGINAL_REQUEST") = origReq_;
+ return xs;
+ }
+
// Final output request
+ out1("NETCDF_DATA") = xs;
MvRequest out = viewReq + out1;
return out;
}
diff --git a/src/XSection/Vprofile.h b/src/XSection/Vprofile.h
index 74fd39a..4a193cf 100644
--- a/src/XSection/Vprofile.h
+++ b/src/XSection/Vprofile.h
@@ -32,8 +32,9 @@ class Vprofile : public Xsect {
public:
- Vprofile() : Xsect("MVPROFILE") { view_ = "MVPROFILEVIEW"; }
- Vprofile(const char* kw) : Xsect(kw) { view_ = "MVPROFILEVIEW"; }
+ // Constructors
+ Vprofile();
+ Vprofile(const char* kw);
bool writeLevelInfoNetcdf ( MvNetCDF&, ApplicationInfo&, ParamMap&, MvField*, double* );
bool writeGeoCoordsNetcdf ( MvNetCDF&, ApplicationInfo& );
@@ -46,10 +47,11 @@ public:
bool generateSurftype( MvNetCDF&, ApplicationInfo&, ParamMap& );
bool generateData( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, const string& );
- bool getAreaLineParameter( MvRequest&, double&, double&, double&, double&);
-
- void getAppParameters( MvRequest&, ApplicationInfo& );
+ // Get geogrpahical coordinates and application parameters
+ bool getCoordinates( MvRequest&, ApplicationInfo& );
+ bool getAppParameters( MvRequest&, ApplicationInfo& );
+ // Create output request
MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo* );
int computeNumberPoints( ApplicationInfo& );
@@ -58,6 +60,9 @@ public:
bool fieldConsistencyCheck ( MvField&, ApplicationInfo& );
+ // Check if parameters between two requests are consistent
+ bool consistencyCheck( MvRequest&, MvRequest& );
+
string titleVariable( ApplicationInfo&, ParamInfo*);
void updateInterpolateValues( ApplicationInfo& );
diff --git a/src/XSection/Xsect.cc b/src/XSection/Xsect.cc
index b518f5b..13097a7 100644
--- a/src/XSection/Xsect.cc
+++ b/src/XSection/Xsect.cc
@@ -39,13 +39,41 @@ cout << "request IN" << endl;
in.print();
// Get Input parameters
- MvRequest grib;
+ origReq_ = in;
+ MvRequest data;
ApplicationInfo appInfo;
- if ( !this->getInputParameters( in, grib, appInfo ) )
+ if ( !this->getInputParameters( in, data, appInfo ) )
return;
+ // Process data
+ if ( strcmp(data.getVerb(),"GRIB") == 0 )
+ {
+ // Process a grib data and build the output request
+ if ( !this->processData(data,appInfo,out) )
+ return;
+ }
+ else
+ {
+ // It is a netCDF data and it has been already processed.
+ // Build the output request
+ out = this->createOutputRequest( in );
+ }
+
+ // Add hidden values to tne output request
+ // out1("_VERB") = "NETCDF_MATRIX";
+ if ( (const char *)in("_NAME") )
+ out("_NAME") = in("_NAME");
+
+cout << "request OUT" << endl;
+out.print();
+
+ return;
+}
+
+bool Xsect::processData( MvRequest& data, ApplicationInfo& appInfo, MvRequest& out )
+{
// Initialize fildset iterator
- MvFieldSet fs(grib);
+ MvFieldSet fs(data);
MvFieldSetIterator iter(fs);
MvField field = iter();
@@ -60,7 +88,7 @@ in.print();
if( npoint == 0 )
{
setError(1,"Invalid Area/Line!");
- return;
+ return false;
}
if( appInfo.viaPole() )
setError( 0, "Xsect line via Pole" );
@@ -98,7 +126,7 @@ in.print();
// Check that this field's vital statistics match those of the others
// - this is important only in the Average application
if ( !fieldConsistencyCheck(field,north,south,east,west) )
- return;
+ return false;
// Update level info accordingly
if( !lev || !strcmp(lev, "0") || field.levelTypeString() == cML_UKMO_ND_STR )
@@ -166,7 +194,7 @@ in.print();
if ( this->consistencyCheck( appInfo, params ) == false )
{
setError(1,"ERROR: Consistency check failed");
- return;
+ return false;
}
// Update/initialize info
@@ -194,7 +222,7 @@ in.print();
// Update flags
this->setHorCompFlags(foundU,foundV,foundW);
- // Update min/max vertical axis values and number of levels
+ // Update min/max vertical axis values and number of levels
int nlevel;
double pBottom,pTop;
appInfo.getMinMaxLevels(pBottom,pTop,nlevel);
@@ -207,12 +235,12 @@ in.print();
if ( !netcdf.isValid() )
{
setError(1,"ERROR: Could not open netCDF file");
- return;
+ return false;
}
// Write netCDF global attributes
if ( !this->writeGlobalAttributesNetcdf(netcdf,params,appInfo) )
- return;
+ return false;
// Write initial variables to the netCDF file: levels, time,
// geographical coordinates
@@ -220,11 +248,11 @@ in.print();
field = iter();
int ntimes;
if ( !this->writeLevelInfoNetcdf(netcdf,appInfo,params,&field,splin) )
- return;
+ return false;
if ( !this->writeTimeInfoNetcdf(netcdf,params,ntimes) )
- return;
+ return false;
if ( !this->writeGeoCoordsNetcdf( netcdf, appInfo ) )
- return;
+ return false;
// Update application info: number of times
appInfo.NTimes (ntimes);
@@ -248,7 +276,7 @@ in.print();
while( field = iter() )
{
currentGenerated++;
- MvRequest r = field.getRequest();
+ MvRequest r = field.getRequest();
iparam = r("PARAM");
idate = r("DATE");
itime = r("TIME");
@@ -284,7 +312,7 @@ in.print();
// in the marslog file. That said, the user should be told, otherwise
// they stare at a blank plot!
setError(1, "Error when filling the values.");
- return;
+ return false;
}
if ( ( paramIter = params.find(keystr) ) == params.end() )
@@ -302,7 +330,7 @@ in.print();
if ( !generateData(appInfo,params,netcdf,lastField,lastKey) )
{
setError(1,"Could not generate NETCDF data: error on fieldset or fieldset not suitable");
- return;
+ return false;
}
lastNrGenerated = currentGenerated;
}
@@ -317,32 +345,28 @@ in.print();
if ( !generateData(appInfo,params,netcdf,lastField,lastKey) )
{
setError(1,"Could not generate NETCDF data: error on fieldset or fieldset not suitable");
- return;
+ return false;
}
}
- // Write additional fielcreateOutputRequestds, if it is needed
+ // Write additional fields, if it is needed
if ( ! this->generateExtraData(netcdf,appInfo,params,iter) )
{
setError(1,"Could not generate NETCDF extra data");
- return;
+ return false;
}
// Close netCDF file
netcdf.close();
- // Create output request
+ // Get default parameter to be plotted
ParamInfo* parInfo = plotVariable(params);
if ( !parInfo )
- return;
+ return false;
+ // Create output request
out = this->createOutputRequest( appInfo, netcdfName, parInfo );
- // Add hidden values to tne output request
- // out1("_VERB") = "NETCDF_MATRIX";
- if ( (const char *)in("_NAME") )
- out("_NAME") = in("_NAME");
-
// Release memory allocation
delete [] xint; xint = 0;
delete [] splin; splin = 0;
@@ -351,21 +375,18 @@ in.print();
for (paramIter = params.begin(); paramIter != params.end(); paramIter++)
delete (*paramIter).second;
-cout << "request OUT" << endl;
-out.print();
-
- return;
+ return true;
}
void Xsect::generateKey( string &str, int par, int date, int time,
int step, const char *expver )
{
- // Format: pPPPYYYYMMDDHHmmSSSS
+ // Format: pPPPPPPYYYYMMDDHHmmSSSS
char key[40];
ostrstream oss( key, sizeof( key ) );
oss << setfill( '0' )
<< "p"
- << setw( 3 ) << par
+ << setw( 6 ) << par
<< setw( 8 ) << date
<< setw( 4 ) << time
<< setw( 4 ) << step
@@ -469,16 +490,16 @@ bool Xsect::isVisualise( ApplicationInfo& appInfo )
// 4. Use the original View and check if the netCDF parameters are consistent
// with the View.
//
-bool Xsect::getInputParameters( MvRequest& in, MvRequest& grib, ApplicationInfo& appInfo )
+bool Xsect::getInputParameters( MvRequest& in, MvRequest& data, ApplicationInfo& appInfo )
{
// Retrieve fieldset
- in.getValue(grib,"DATA");
+ in.getValue(data,"DATA");
if ( !(int)in.countValues("DATA") ) {
setError(1, "No Data files specified...");
return false;
}
- // Retrieve original View if exists, e.g. if a grib data or a
+ // Retrieve original View if exists, e.g. if a data or a
// xs/av/vpdata module was dropped into a view
MvRequest viewRequest;
if ( (const char*)in("_CONTEXT") )
@@ -486,7 +507,6 @@ bool Xsect::getInputParameters( MvRequest& in, MvRequest& grib, ApplicationInfo&
// Retrieve xsectdata parameters if exist, e.g. if a xs/av/vpata module
// was dropped into a view or if it was called to be processed
- double X1,Y1,X2,Y2;
const char* verb = (const char*)in("_VERB");
bool moduleDropped = this->isDataModuleDropped(verb);
@@ -507,7 +527,7 @@ bool Xsect::getInputParameters( MvRequest& in, MvRequest& grib, ApplicationInfo&
commonRequest = getAppView( viewRequest );
// Retrieve parameters
- if ( !this->getParameters(commonRequest, appInfo, X1, Y1, X2, Y2) )
+ if ( !getAppParameters(commonRequest, appInfo) )
return false;
}
// Process a data module
@@ -515,7 +535,7 @@ bool Xsect::getInputParameters( MvRequest& in, MvRequest& grib, ApplicationInfo&
else if ( procType == XS_DATA_MODULE )
{
// Retrieve parameters
- if ( !this->getParameters(in, appInfo, X1, Y1, X2, Y2) )
+ if ( !this->getAppParameters(in, appInfo) )
return false;
}
// Process a data module dropped into a view
@@ -525,24 +545,19 @@ bool Xsect::getInputParameters( MvRequest& in, MvRequest& grib, ApplicationInfo&
// Retrieve 'original' request from the View
commonRequest = getAppView( viewRequest );
- // Retrieve 'checked' parameters from the View
- if ( !this->getCheckedParameters(commonRequest, X1, Y1, X2, Y2) )
- return false;
-
- // Retrieve 'checked' parameters from the module
- double X11,Y11,X22,Y22;
- if ( !this->getCheckedParameters(in, X11, Y11, X22, Y22) )
- return false;
+ // Retrieve 'original' request from the data module
+ MvRequest modRequest = data.getSubrequest("_ORIGINAL_REQUEST");
+ if ( !modRequest )
+ modRequest = in;
- // Consistency check
- if ( X1 != X11 || Y1 != Y11 || X2 != X22 || Y2 != Y22 )
- {
- setError(1,"Invalid line/area");
- return false;
- }
+ // Consistency check, only for non-default View request
+ if ( !((const char*)commonRequest("_DEFAULT") && (int)commonRequest("_DEFAULT") == 1) )
+ if ( !this->consistencyCheck(commonRequest, modRequest) )
+ return false;
// Retrieve application specific parametes
- getAppParameters( in, appInfo );
+ if ( !getAppParameters( modRequest, appInfo ) )
+ return false;
}
// Retrieve action mode. Default value is "prepare"
@@ -552,31 +567,6 @@ bool Xsect::getInputParameters( MvRequest& in, MvRequest& grib, ApplicationInfo&
appInfo.setMinMaxLevels( pBottom, pTop );
appInfo.actionMode(actionMode);
appInfo.processType(procType);
- appInfo.setAreaLine(X1,X2,Y1,Y2);
-
- return true;
-}
-
-bool Xsect::getParameters( MvRequest& in, ApplicationInfo& appInfo, double& X1, double& Y1, double& X2, double& Y2)
-{
- // Retrieve 'checked' parameters
- if ( !this->getCheckedParameters(in, X1, Y1, X2, Y2) )
- return false;
-
- // Retrieve parameters specific to an application
- getAppParameters( in, appInfo );
-
- return true;
-}
-
-// Retrieves the so called checked parameters: geographical coordinates.
-// These parameters are checked against the View if a data module or
-// a netCDF file is dropped into the View.
-bool Xsect::getCheckedParameters( MvRequest& in, double& X1, double& Y1, double& X2, double& Y2 )
-{
- // Retrieve LINE or AREA coordinates
- if ( !getAreaLineParameter(in,X1,Y1,X2,Y2) )
- return false;
return true;
}
@@ -663,8 +653,9 @@ bool Xsect::consistencyCheck( ApplicationInfo& appInfo, ParamMap ¶ms )
// 2) Compatibility between INTERPOLATE_VALUES and fieldset
if ( !appInfo.Interpolate() && appInfo.levelType() != XS_PL && appInfo.haveLNSP() )
{
- setError(1,"ERROR: INTERPOLATE_VALUES must be YES because data is MODEL LEVEL plus LNSP");
- return false;
+ // Update the value and send a warning message
+ setError(0,"ERROR: INTERPOLATE_VALUES must be YES because data is MODEL LEVEL plus LNSP");
+ appInfo.Interpolate(true);
}
// 3) If there is only one parameter, it must contain several levels
@@ -758,8 +749,10 @@ bool Xsect::writeTimeInfoNetcdf( MvNetCDF& cdf, ParamMap ¶ms, int& ntimes )
bool Xsect::writeGlobalAttributesNetcdf ( MvNetCDF& netcdf, ParamMap& params, ApplicationInfo& appInfo )
{
+ // Add application info
netcdf.addAttribute("_FillValue",XMISSING_VALUE );
netcdf.addAttribute("_View",view_.c_str() );
+ netcdf.addAttribute("type",type_.c_str());
// Add title to the Global Attributes.
// Currently, because Magics only checks the Global Attributes to
@@ -918,9 +911,7 @@ bool Xsect::contourValues ( ApplicationInfo& appInfo, ParamMap& params,
else
{
// Get LNSP values
- char keyLnsp[60];
- sprintf(keyLnsp,"p%03d%s",LnPress,key.substr(4,50).c_str() );
- ParamInfo* parLnsp = this->getParamInfo( params, keyLnsp );
+ ParamInfo* parLnsp = this->getParamInfo( params, LnPress, key );
if ( ! parLnsp )
return 0;
@@ -952,7 +943,11 @@ bool Xsect::contourValues ( ApplicationInfo& appInfo, ParamMap& params,
// Variable name in netCDF has some restrictions, e.g. can not
// start with a non-alphabetic letter.
-// RTTOV specific: variable name SKT is replaced by t_ski
+// RTTOV specifics:
+// a) variable name SKT is replaced by t_ski
+// b) variable name starting with non-alphabetic letter is
+// replaced by the following scheme: all non-alphabetic
+// letters are moved to the end, e.g. 10u becomes u_10
string Xsect::getNetcdfVarname(string name)
{
// RTTOV specific
@@ -960,13 +955,60 @@ string Xsect::getNetcdfVarname(string name)
return string("t_skin");
// Netcdf only accepts variable name starting with a alphabetic letter
- if ( !isalpha(name[0]) )
+ // Copy initial numbers
+ unsigned int j = 0, i;
+ string snum;
+ for ( i = 0; i < name.size(); i++ )
{
- string newname = "a_" + name;
+ if ( !isdigit(name[i]) )
+ break;
+
+ snum += name[i];
+ j++;
+ }
+
+ // The name does not have numbers in the begining
+ if ( j == 0 )
+ return name;
+
+ // The name has only numbers. Add a prefix.
+ else if ( j == name.size() )
+ {
+ string newname = "a_" + snum;
return newname;
}
- return name;
+ // The name has numbers in the begining. Move them to the end.
+ string newname = name.substr(i, name.size() - i) + "_";
+ newname += snum;
+
+ return newname;
+}
+
+ParamInfo* Xsect::getParamInfo( ParamMap ¶ms, int key, string keyBase )
+{
+ // Build the new key based on keyBase
+ char newKey[60];
+ sprintf(newKey,"p%06d%s",key,keyBase.substr(7,50).c_str() );
+
+ // Get paraminfo
+ ParamInfo* par = this->getParamInfo( params, newKey );
+ if ( par )
+ return par;
+
+ // Special case: if paramInfo not found and key is LNSP then
+ // try to find any other LNSP paramInfo (do not use the keyBase info).
+ if ( key == LnPress )
+ {
+ for ( ParamIterator ii = params.begin(); ii != params.end(); ii++ )
+ {
+ par = (*ii).second;
+ if ( par->Parameter() == LnPress )
+ return par;
+ }
+ }
+
+ return par;
}
ParamInfo* Xsect::getParamInfo( ParamMap ¶ms, string key )
@@ -975,7 +1017,7 @@ ParamInfo* Xsect::getParamInfo( ParamMap ¶ms, string key )
ParamIterator ii = params.find(key);
if ( ii == params.end() )
{
- setError(1,"ERROR: Could not find the requested field (getParamInfo)");
+ setError(0,"ERROR: Could not find the requested field (getParamInfo)");
return 0;
}
@@ -990,6 +1032,24 @@ bool Xsect::isDataModuleDropped( const char* verb )
strcmp(verb,"PM_AVERAGE") == 0 || strcmp(verb,"PM_VPROF") == 0 ));
}
+MvRequest Xsect::createOutputRequest( MvRequest& in)
+{
+ // Create NetCDF output request
+ MvRequest data = in.getSubrequest("DATA");
+ MvRequest out1 = data.getSubrequest("_VISUALISE");
+ MvRequest viewReq = data.getSubrequest("_CARTESIANVIEW");
+ data.unsetParam("_VISUALISE"); // to avoid duplication of info
+ data.unsetParam("_CARTESIANVIEW"); // to avoid duplication of info
+ data.unsetParam("_ORIGINAL_REQUEST"); // to avoid duplication of info
+ out1("NETCDF_DATA") = data;
+
+ // Final output request
+ // If an icon was dropped into a view, uPlot will ignore it.
+ // Mode-specific options
+ MvRequest out = viewReq + out1;
+ return out;
+}
+
//------------------------------------------------------------------------------
int main(int argc,char **argv)
diff --git a/src/XSection/Xsect.h b/src/XSection/Xsect.h
index e86a05f..170e8ae 100644
--- a/src/XSection/Xsect.h
+++ b/src/XSection/Xsect.h
@@ -32,8 +32,12 @@ class Xsect : public MvService {
public:
+ // Entry point routine
void serve(MvRequest&,MvRequest&);
+ // Process grib data and build all data structures
+ bool processData(MvRequest&, ApplicationInfo&, MvRequest& );
+
bool getInputParameters( MvRequest&, MvRequest&, ApplicationInfo& );
void generateKey(string&,int,int,int,int,const char *);
@@ -71,40 +75,40 @@ public:
// Compute data values
virtual bool fillValues( ApplicationInfo&, MvField&, double* ) = 0;
- // Create output request
+ // Create output request using information from the application
virtual MvRequest createOutputRequest( ApplicationInfo&, string, ParamInfo* ) = 0;
+ // Create output request using information from the request
+ virtual MvRequest createOutputRequest( MvRequest& );
+
// Compute number of points
virtual int computeNumberPoints( ApplicationInfo& ) = 0;
// Get Parameter info given the key
+ ParamInfo* getParamInfo( ParamMap&, int, string );
ParamInfo* getParamInfo( ParamMap&, string );
protected:
Xsect(const char* kw) : MvService(kw), ntime_(0) {};
- bool getParameters( MvRequest&, ApplicationInfo&, double&, double&, double&, double&);
- bool getCheckedParameters( MvRequest&, double&, double&, double&, double& );
void getInitialFieldInfo( MvField&, ApplicationInfo&, double&, double&, double&, double& );
bool updateTopBottomLevels( ParamMap&, int, MvFieldSetIterator&, double&, double&, int& );
bool checkCoordinates( double&, double&, double&, double&);
- bool contourValues( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, string );
+ // Check if parameters between two requests are consistent
+ virtual bool consistencyCheck( MvRequest&, MvRequest& ) = 0;
- //bool generateNetcdfAxesVariables( ApplicationInfo&, ParamInfo*, MvNetCDF&, double*, double*);
-
- // Get Area/Line parameter
- virtual bool getAreaLineParameter( MvRequest&, double&, double&, double&, double&) = 0;
+ bool contourValues( ApplicationInfo&, ParamMap&, MvNetCDF&, MvField&, string );
// Get application specific parameters
- virtual void getAppParameters( MvRequest&, ApplicationInfo& ) = 0;
+ virtual bool getAppParameters( MvRequest&, ApplicationInfo& ) = 0;
// Set flags
virtual void setHorCompFlags( bool, bool, bool ) {}
// Check that this field's vital statistics match those of the others
- // - this is important only in the Average application
+ // - this is important only in the Average application
virtual bool fieldConsistencyCheck( MvField&, double, double, double, double ) { return true; }
// Check this field's geographical grid point positions against the user input
@@ -123,9 +127,11 @@ protected:
// Update INTERPOLATE_VALUES parameter
virtual void updateInterpolateValues( ApplicationInfo& ) {}
- string view_;
- int ntime_; // time counter. It assumes that the input data is sorted
- // by variable and time, e.g. v1t1, v1t2, .. vntm, v2t1, ...
+ MvRequest origReq_; // input request
+ string type_; // application type: MVPROFILE, MXSECTION, MXAVERAGE
+ string view_; // application view: MVPROFILEVIEW, MXSECTIONVIEW, MXAVERAGEVIEW
+ int ntime_; // time counter. It assumes that the input data is sorted
+ // by variable and time, e.g. v1t1, v1t2, .. vntm, v2t1, ...
};
#endif
diff --git a/src/images/Makefile.am b/src/images/Makefile.am
index 800fe65..a9e14f6 100644
--- a/src/images/Makefile.am
+++ b/src/images/Makefile.am
@@ -3,10 +3,14 @@ EXTRA_DIST = accept.svg \
add.svg\
add_bookmark.svg \
add_bookmark_group.svg \
+ add_drawer.svg \
+ add_icon.svg \
+ add_tab.svg \
animation.svg \
antialias.svg \
archive.svg \
arrow_bottom.svg \
+ arrow_drop_target.svg \
arrow_down.svg \
arrow_left.svg \
arrow_top.svg \
@@ -17,6 +21,7 @@ EXTRA_DIST = accept.svg \
big_arrow_up.svg \
bookmark.svg \
bookmark_broken.svg \
+ bookmark_empty.svg \
bookmark_group.svg \
cancel.svg \
check_syntax.svg \
@@ -37,7 +42,10 @@ EXTRA_DIST = accept.svg \
cursor_vert_hover.svg \
data_probe.svg \
detailed_view.svg \
+ directory_arrow.svg \
drawer.svg \
+ drawer_open.svg \
+ drawer_close.svg \
duplicate.svg \
edit.svg \
editcopy.svg \
@@ -78,6 +86,7 @@ EXTRA_DIST = accept.svg \
magnifier.svg \
magnifier_handler.png \
mail_send.svg \
+ menu_arrow_down.svg \
menu_indicator.png \
meta_data.svg \
metview_logo.png \
@@ -111,8 +120,10 @@ EXTRA_DIST = accept.svg \
reload.svg \
remove.svg \
reset.svg \
+ reset_lineEditor.svg \
run_options.svg \
search.svg \
+ search_decor.svg \
select_all.svg \
select_line.svg \
select_point.svg \
@@ -120,23 +131,29 @@ EXTRA_DIST = accept.svg \
show_editable_only.svg \
sidebar.svg \
sidebar_left.svg \
- size_up.svg \
+ simple_view.svg \
+ size_up.svg \
size_down.svg \
snap_to_grid.svg \
splash_screen.png \
splash_screen.svg \
stats.svg \
- swap_direction.svg \
+ statusbar.svg \
+ swap_direction.svg \
text_edit.svg \
triangle_left.svg \
triangle_right.svg \
undo.svg \
unknown.svg \
+ use_global_iconsize.svg \
+ videowall.svg \
view_grid.svg \
visualise.svg \
warning.svg \
wastebasket.svg \
- wizard.svg \
+ wall_screen.svg \
+ wall_screen_selected.svg \
+ wizard.svg \
zoom.svg \
zoom_in.svg \
zoom_out.svg \
diff --git a/src/images/Makefile.in b/src/images/Makefile.in
index 4ae617d..b46ee76 100644
--- a/src/images/Makefile.in
+++ b/src/images/Makefile.in
@@ -38,6 +38,7 @@ subdir = src/images
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -63,6 +64,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -86,6 +89,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -265,10 +269,14 @@ EXTRA_DIST = accept.svg \
add.svg\
add_bookmark.svg \
add_bookmark_group.svg \
+ add_drawer.svg \
+ add_icon.svg \
+ add_tab.svg \
animation.svg \
antialias.svg \
archive.svg \
arrow_bottom.svg \
+ arrow_drop_target.svg \
arrow_down.svg \
arrow_left.svg \
arrow_top.svg \
@@ -279,6 +287,7 @@ EXTRA_DIST = accept.svg \
big_arrow_up.svg \
bookmark.svg \
bookmark_broken.svg \
+ bookmark_empty.svg \
bookmark_group.svg \
cancel.svg \
check_syntax.svg \
@@ -299,7 +308,10 @@ EXTRA_DIST = accept.svg \
cursor_vert_hover.svg \
data_probe.svg \
detailed_view.svg \
+ directory_arrow.svg \
drawer.svg \
+ drawer_open.svg \
+ drawer_close.svg \
duplicate.svg \
edit.svg \
editcopy.svg \
@@ -340,6 +352,7 @@ EXTRA_DIST = accept.svg \
magnifier.svg \
magnifier_handler.png \
mail_send.svg \
+ menu_arrow_down.svg \
menu_indicator.png \
meta_data.svg \
metview_logo.png \
@@ -373,8 +386,10 @@ EXTRA_DIST = accept.svg \
reload.svg \
remove.svg \
reset.svg \
+ reset_lineEditor.svg \
run_options.svg \
search.svg \
+ search_decor.svg \
select_all.svg \
select_line.svg \
select_point.svg \
@@ -382,23 +397,29 @@ EXTRA_DIST = accept.svg \
show_editable_only.svg \
sidebar.svg \
sidebar_left.svg \
- size_up.svg \
+ simple_view.svg \
+ size_up.svg \
size_down.svg \
snap_to_grid.svg \
splash_screen.png \
splash_screen.svg \
stats.svg \
- swap_direction.svg \
+ statusbar.svg \
+ swap_direction.svg \
text_edit.svg \
triangle_left.svg \
triangle_right.svg \
undo.svg \
unknown.svg \
+ use_global_iconsize.svg \
+ videowall.svg \
view_grid.svg \
visualise.svg \
warning.svg \
wastebasket.svg \
- wizard.svg \
+ wall_screen.svg \
+ wall_screen_selected.svg \
+ wizard.svg \
zoom.svg \
zoom_in.svg \
zoom_out.svg \
diff --git a/src/images/add_drawer.svg b/src/images/add_drawer.svg
new file mode 100644
index 0000000..29a95e9
--- /dev/null
+++ b/src/images/add_drawer.svg
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="add_tab.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient3782">
+ <stop
+ style="stop-color:#000080;stop-opacity:1;"
+ offset="0"
+ id="stop3784" />
+ <stop
+ style="stop-color:#578eb5;stop-opacity:0.9910714;"
+ offset="1"
+ id="stop3786" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3608">
+ <stop
+ id="stop3610"
+ offset="0"
+ style="stop-color:#2eaf1d;stop-opacity:1;" />
+ <stop
+ id="stop3612"
+ offset="1"
+ style="stop-color:#91ff44;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3612">
+ <stop
+ style="stop-color:#616161;stop-opacity:1;"
+ offset="0"
+ id="stop3614" />
+ <stop
+ style="stop-color:#383838;stop-opacity:1;"
+ offset="1"
+ id="stop3616" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3601">
+ <stop
+ style="stop-color:#a2a2a2;stop-opacity:1;"
+ offset="0"
+ id="stop3603" />
+ <stop
+ style="stop-color:#343434;stop-opacity:1;"
+ offset="1"
+ id="stop3605" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective2825"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective2841"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3601"
+ id="linearGradient3607"
+ x1="10.653805"
+ y1="3.7712457"
+ x2="24.085051"
+ y2="29.5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.96774194,0,0,-0.96774194,0.58051457,31.158684)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3612"
+ id="linearGradient3618"
+ x1="3"
+ y1="28.806061"
+ x2="29"
+ y2="28.806061"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3612"
+ id="linearGradient3620"
+ gradientUnits="userSpaceOnUse"
+ x1="3"
+ y1="28.806061"
+ x2="29"
+ y2="28.806061"
+ gradientTransform="translate(0,-32.806061)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3608"
+ id="linearGradient3606"
+ x1="24"
+ y1="26"
+ x2="7"
+ y2="8"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.83718675,0,0,0.87310139,-36.94508,11.435241)" />
+ <linearGradient
+ id="linearGradient3757">
+ <stop
+ id="stop3759"
+ offset="0"
+ style="stop-color:#fdfb72;stop-opacity:1;" />
+ <stop
+ id="stop3761"
+ offset="1"
+ style="stop-color:#ffb41b;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ id="perspective2882"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 16 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective3015"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ id="linearGradient3845">
+ <stop
+ style="stop-color:#326dc2;stop-opacity:1;"
+ offset="0"
+ id="stop3847" />
+ <stop
+ style="stop-color:#6295be;stop-opacity:1;"
+ offset="1"
+ id="stop3849" />
+ </linearGradient>
+ <linearGradient
+ y2="19.5"
+ x2="38.5"
+ y1="19.5"
+ x1="7.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3945"
+ xlink:href="#linearGradient3845-1"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3845-1">
+ <stop
+ style="stop-color:#3992cd;stop-opacity:1;"
+ offset="0"
+ id="stop3847-7" />
+ <stop
+ style="stop-color:#8fbce1;stop-opacity:1;"
+ offset="1"
+ id="stop3849-4" />
+ </linearGradient>
+ <linearGradient
+ y2="19.5"
+ x2="38.5"
+ y1="19.5"
+ x1="7.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3066"
+ xlink:href="#linearGradient3845-1"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3845-1"
+ id="linearGradient3808"
+ x1="-12.355866"
+ y1="27.080372"
+ x2="-21.346371"
+ y2="14.270093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2173913,0,0,1.5555554,36.086959,-13.555554)" />
+ <filter
+ inkscape:collect="always"
+ id="filter3824">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.53563009"
+ id="feGaussianBlur3826" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.15625"
+ inkscape:cx="-3.311412"
+ inkscape:cy="16"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:snap-to-guides="false"
+ inkscape:snap-grids="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2831"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="plus"
+ style="display:inline">
+ <rect
+ style="fill:url(#linearGradient3808);fill-opacity:1;stroke:#0d53b0;stroke-width:1.86666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3032"
+ width="28"
+ height="28"
+ x="2"
+ y="2"
+ ry="6.6423664" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="star"
+ style="display:inline">
+ <path
+ style="fill:#1a1010;fill-opacity:1;stroke:none;display:inline;filter:url(#filter3824)"
+ d="M 14.540635,5 20,5 l -6e-6,8.638729 7.821597,0 9e-6,5.464545 -7.8216,0 0,8.678939 -5.459365,0 0.02476,-8.811855 -8.7597353,0.132916 0,-5.424336 8.7349833,0 0,-8.678938 z"
+ id="path2826-4"
+ sodipodi:nodetypes="cccccccccccccc"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.85490784,0,0,0.90632942,3.215096,2.6861408)" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccc"
+ id="path3810"
+ d="m 14.04054,6.2337244 4.959466,0 L 19,14 l 7.105395,0 8e-6,4.912663 -7.105397,0 0,7.802424 -4.959466,0 0.02249,-7.921917 -7.957627,0.119493 0,-4.876515 7.935144,0 0,-7.8024236 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;display:inline" />
+ </g>
+</svg>
diff --git a/src/images/add_icon.svg b/src/images/add_icon.svg
new file mode 100644
index 0000000..143ff67
--- /dev/null
+++ b/src/images/add_icon.svg
@@ -0,0 +1,343 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="add_icon.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3826">
+ <stop
+ style="stop-color:#c8d0d8;stop-opacity:1;"
+ offset="0"
+ id="stop3828" />
+ <stop
+ style="stop-color:#c8d0d8;stop-opacity:0;"
+ offset="1"
+ id="stop3830" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3798">
+ <stop
+ style="stop-color:#cfd1d2;stop-opacity:1;"
+ offset="0"
+ id="stop3800" />
+ <stop
+ style="stop-color:#476476;stop-opacity:1;"
+ offset="1"
+ id="stop3802" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3608">
+ <stop
+ id="stop3610"
+ offset="0"
+ style="stop-color:#2eaf1d;stop-opacity:1;" />
+ <stop
+ id="stop3612"
+ offset="1"
+ style="stop-color:#91ff44;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3612">
+ <stop
+ style="stop-color:#616161;stop-opacity:1;"
+ offset="0"
+ id="stop3614" />
+ <stop
+ style="stop-color:#383838;stop-opacity:1;"
+ offset="1"
+ id="stop3616" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3601">
+ <stop
+ style="stop-color:#a2a2a2;stop-opacity:1;"
+ offset="0"
+ id="stop3603" />
+ <stop
+ style="stop-color:#343434;stop-opacity:1;"
+ offset="1"
+ id="stop3605" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective2825"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective2841"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3601"
+ id="linearGradient3607"
+ x1="10.653805"
+ y1="3.7712457"
+ x2="24.085051"
+ y2="29.5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.96774194,0,0,-0.96774194,0.58051457,31.158684)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3612"
+ id="linearGradient3618"
+ x1="3"
+ y1="28.806061"
+ x2="29"
+ y2="28.806061"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3612"
+ id="linearGradient3620"
+ gradientUnits="userSpaceOnUse"
+ x1="3"
+ y1="28.806061"
+ x2="29"
+ y2="28.806061"
+ gradientTransform="translate(0,-32.806061)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3608"
+ id="linearGradient3606"
+ x1="24"
+ y1="26"
+ x2="7"
+ y2="8"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.83718675,0,0,0.87310139,-36.94508,11.435241)" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="23.49078"
+ x2="7.2979932"
+ y1="7.6554561"
+ x1="9.0300617"
+ id="linearGradient3765"
+ xlink:href="#linearGradient3757"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3757">
+ <stop
+ id="stop3759"
+ offset="0"
+ style="stop-color:#fdfb72;stop-opacity:1;" />
+ <stop
+ id="stop3761"
+ offset="1"
+ style="stop-color:#ffb41b;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ id="perspective2882"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 16 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective3015"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ y2="19.5"
+ x2="38.5"
+ y1="19.5"
+ x1="7.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3945"
+ xlink:href="#linearGradient3845"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3845">
+ <stop
+ style="stop-color:#326dc2;stop-opacity:1;"
+ offset="0"
+ id="stop3847" />
+ <stop
+ style="stop-color:#6295be;stop-opacity:1;"
+ offset="1"
+ id="stop3849" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3798"
+ id="linearGradient3804"
+ x1="0"
+ y1="24"
+ x2="12.484"
+ y2="24"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.125,0,0,0.5,-1.5,3)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3826"
+ id="linearGradient3832"
+ x1="1.6569907"
+ y1="24.5"
+ x2="27.343009"
+ y2="24.5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0,0,1.909091,-0.6,-28.272728)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3798"
+ id="linearGradient3794"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.125,0,0,0.5,-1.5,11)"
+ x1="0"
+ y1="24"
+ x2="12.484"
+ y2="24" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3798"
+ id="linearGradient3799"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99999997,0,0,0.5,-1,15)"
+ x1="0"
+ y1="24"
+ x2="12.484"
+ y2="24" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.15625"
+ inkscape:cx="5.2807064"
+ inkscape:cy="16"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer3"
+ showgrid="true"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:snap-to-guides="false"
+ inkscape:snap-grids="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2831"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="plus"
+ style="display:inline">
+ <rect
+ style="fill:url(#linearGradient3832);fill-opacity:1;stroke:#606e9d;stroke-width:0.84780145;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3012"
+ width="20"
+ height="21"
+ x="1"
+ y="8"
+ ry="0.85461295" />
+ <rect
+ style="fill:url(#linearGradient3804);fill-opacity:1;stroke:#061012;stroke-width:0.72600007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3788"
+ width="9"
+ height="4"
+ x="3"
+ y="13"
+ ry="0.5" />
+ <rect
+ ry="0.5"
+ y="21"
+ x="3"
+ height="4"
+ width="9"
+ id="rect3792"
+ style="fill:url(#linearGradient3794);fill-opacity:1;stroke:#061012;stroke-width:0.72600007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="star"
+ style="display:inline">
+ <path
+ transform="matrix(0.54455478,0,0,0.56879529,9.6958488,-1.2003484)"
+ sodipodi:type="arc"
+ style="fill:url(#linearGradient3945);fill-opacity:1;fill-rule:evenodd;stroke:#3a4a97;stroke-width:2.92098856;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path2978"
+ sodipodi:cx="23"
+ sodipodi:cy="19.5"
+ sodipodi:rx="15"
+ sodipodi:ry="14.5"
+ d="m 38,19.5 a 15,14.5 0 1 1 -30,0 15,14.5 0 1 1 30,0 z" />
+ <path
+ style="fill:#ececec;fill-opacity:1;stroke:none;display:inline"
+ d="m 20.551621,2.5209063 3.535259,5e-6 L 24,8 l 4.962983,0 8e-6,3.630251 -4.962983,0 -7e-6,5.567382 -3.361513,-0.0883 -0.08688,-5.567384 -5.39733,2e-6 0,-3.6302515 5.397333,0 0,-5.3907977 z"
+ id="path2826-4"
+ sodipodi:nodetypes="ccccccccccccc"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/src/images/add_tab.svg b/src/images/add_tab.svg
new file mode 100644
index 0000000..29a95e9
--- /dev/null
+++ b/src/images/add_tab.svg
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="add_tab.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient3782">
+ <stop
+ style="stop-color:#000080;stop-opacity:1;"
+ offset="0"
+ id="stop3784" />
+ <stop
+ style="stop-color:#578eb5;stop-opacity:0.9910714;"
+ offset="1"
+ id="stop3786" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3608">
+ <stop
+ id="stop3610"
+ offset="0"
+ style="stop-color:#2eaf1d;stop-opacity:1;" />
+ <stop
+ id="stop3612"
+ offset="1"
+ style="stop-color:#91ff44;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3612">
+ <stop
+ style="stop-color:#616161;stop-opacity:1;"
+ offset="0"
+ id="stop3614" />
+ <stop
+ style="stop-color:#383838;stop-opacity:1;"
+ offset="1"
+ id="stop3616" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3601">
+ <stop
+ style="stop-color:#a2a2a2;stop-opacity:1;"
+ offset="0"
+ id="stop3603" />
+ <stop
+ style="stop-color:#343434;stop-opacity:1;"
+ offset="1"
+ id="stop3605" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective2825"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective2841"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3601"
+ id="linearGradient3607"
+ x1="10.653805"
+ y1="3.7712457"
+ x2="24.085051"
+ y2="29.5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.96774194,0,0,-0.96774194,0.58051457,31.158684)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3612"
+ id="linearGradient3618"
+ x1="3"
+ y1="28.806061"
+ x2="29"
+ y2="28.806061"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3612"
+ id="linearGradient3620"
+ gradientUnits="userSpaceOnUse"
+ x1="3"
+ y1="28.806061"
+ x2="29"
+ y2="28.806061"
+ gradientTransform="translate(0,-32.806061)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3608"
+ id="linearGradient3606"
+ x1="24"
+ y1="26"
+ x2="7"
+ y2="8"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.83718675,0,0,0.87310139,-36.94508,11.435241)" />
+ <linearGradient
+ id="linearGradient3757">
+ <stop
+ id="stop3759"
+ offset="0"
+ style="stop-color:#fdfb72;stop-opacity:1;" />
+ <stop
+ id="stop3761"
+ offset="1"
+ style="stop-color:#ffb41b;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ id="perspective2882"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 16 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective3015"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ id="linearGradient3845">
+ <stop
+ style="stop-color:#326dc2;stop-opacity:1;"
+ offset="0"
+ id="stop3847" />
+ <stop
+ style="stop-color:#6295be;stop-opacity:1;"
+ offset="1"
+ id="stop3849" />
+ </linearGradient>
+ <linearGradient
+ y2="19.5"
+ x2="38.5"
+ y1="19.5"
+ x1="7.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3945"
+ xlink:href="#linearGradient3845-1"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3845-1">
+ <stop
+ style="stop-color:#3992cd;stop-opacity:1;"
+ offset="0"
+ id="stop3847-7" />
+ <stop
+ style="stop-color:#8fbce1;stop-opacity:1;"
+ offset="1"
+ id="stop3849-4" />
+ </linearGradient>
+ <linearGradient
+ y2="19.5"
+ x2="38.5"
+ y1="19.5"
+ x1="7.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3066"
+ xlink:href="#linearGradient3845-1"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3845-1"
+ id="linearGradient3808"
+ x1="-12.355866"
+ y1="27.080372"
+ x2="-21.346371"
+ y2="14.270093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2173913,0,0,1.5555554,36.086959,-13.555554)" />
+ <filter
+ inkscape:collect="always"
+ id="filter3824">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.53563009"
+ id="feGaussianBlur3826" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.15625"
+ inkscape:cx="-3.311412"
+ inkscape:cy="16"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:snap-to-guides="false"
+ inkscape:snap-grids="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2831"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="plus"
+ style="display:inline">
+ <rect
+ style="fill:url(#linearGradient3808);fill-opacity:1;stroke:#0d53b0;stroke-width:1.86666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3032"
+ width="28"
+ height="28"
+ x="2"
+ y="2"
+ ry="6.6423664" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="star"
+ style="display:inline">
+ <path
+ style="fill:#1a1010;fill-opacity:1;stroke:none;display:inline;filter:url(#filter3824)"
+ d="M 14.540635,5 20,5 l -6e-6,8.638729 7.821597,0 9e-6,5.464545 -7.8216,0 0,8.678939 -5.459365,0 0.02476,-8.811855 -8.7597353,0.132916 0,-5.424336 8.7349833,0 0,-8.678938 z"
+ id="path2826-4"
+ sodipodi:nodetypes="cccccccccccccc"
+ inkscape:connector-curvature="0"
+ transform="matrix(0.85490784,0,0,0.90632942,3.215096,2.6861408)" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccc"
+ id="path3810"
+ d="m 14.04054,6.2337244 4.959466,0 L 19,14 l 7.105395,0 8e-6,4.912663 -7.105397,0 0,7.802424 -4.959466,0 0.02249,-7.921917 -7.957627,0.119493 0,-4.876515 7.935144,0 0,-7.8024236 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;display:inline" />
+ </g>
+</svg>
diff --git a/src/images/home.svg b/src/images/arrow_drop_target.svg
similarity index 55%
copy from src/images/home.svg
copy to src/images/arrow_drop_target.svg
index a794454..21a15cf 100644
--- a/src/images/home.svg
+++ b/src/images/arrow_drop_target.svg
@@ -14,36 +14,31 @@
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
- sodipodi:docname="home.svg"
- style="display:inline">
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="arrow_drop_target.svg">
<defs
id="defs4">
<linearGradient
- id="linearGradient3753">
+ id="linearGradient3601">
<stop
- style="stop-color:#539ec0;stop-opacity:1;"
+ style="stop-color:#e2e4e6;stop-opacity:1;"
offset="0"
- id="stop3755" />
+ id="stop3603" />
<stop
- id="stop3713"
- offset="0.5"
- style="stop-color:#6798c4;stop-opacity:1;" />
- <stop
- style="stop-color:#5391d7;stop-opacity:1;"
+ style="stop-color:#336fd7;stop-opacity:1;"
offset="1"
- id="stop3757" />
+ id="stop3605" />
</linearGradient>
<linearGradient
- y2="-0.56834435"
- x2="36.550461"
- y1="25.776665"
- x1="20.381924"
- gradientTransform="matrix(0.55845763,0,0,0.55794702,-1.3287357,-1.8666085)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient3601"
+ id="linearGradient3607"
+ x1="4.2408757"
+ y1="-2.307677"
+ x2="21.880606"
+ y2="19.880606"
gradientUnits="userSpaceOnUse"
- id="linearGradient2910"
- xlink:href="#linearGradient3753"
- inkscape:collect="always" />
+ gradientTransform="matrix(0,-0.96774194,0.96774194,0,1.0643856,31.642555)" />
</defs>
<sodipodi:namedview
id="base"
@@ -52,24 +47,22 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="12.46875"
- inkscape:cx="1.5704858"
- inkscape:cy="19.139085"
+ inkscape:zoom="15.46875"
+ inkscape:cx="-6.3676771"
+ inkscape:cy="16.354555"
inkscape:document-units="px"
- inkscape:current-layer="layer1"
+ inkscape:current-layer="layer3"
showgrid="true"
- inkscape:window-width="1651"
- inkscape:window-height="1068"
- inkscape:window-x="2159"
- inkscape:window-y="103"
- inkscape:window-maximized="0"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:snap-grids="false"
- inkscape:snap-to-guides="false">
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:snap-to-guides="false"
+ inkscape:snap-grids="false">
<inkscape:grid
type="xygrid"
- id="grid2985"
+ id="grid2831"
empspacing="5"
visible="true"
enabled="true"
@@ -107,16 +100,19 @@
</rdf:RDF>
</metadata>
<g
- inkscape:label="Layer 1"
inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1020.3622)"
+ id="layer3"
+ inkscape:label="arrow"
style="display:inline">
<path
- sodipodi:nodetypes="ccccccccccccccc"
- inkscape:connector-curvature="0"
- id="path3715"
- d="m 5.2413216,1050.9903 0.133129,-18.308 -4.2264311,0 12.5644495,-9.0077 2.228061,-1.5976 6.339645,4.3196 8.765878,6.5227 -3.949479,0 -0.02429,18.0705 -4.91255,5e-4 0,-10.8423 -8.886327,0 0,10.8423 -8.0320799,-5e-4 -1.6e-6,5e-4 z"
- style="fill:#87aade;fill-opacity:1;stroke:#2c2e6d;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:url(#linearGradient3607);fill-opacity:1;stroke:#244772;stroke-width:0.96799999000000003;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 2.9998696,20.029652 14.5161294,0 -4.83871,6.774193 4.83871,3.870968 11.612903,-14.516129 -11.612903,-14.5161294 -4.83871,3.870968 4.83871,6.7741934 -14.5161294,0 0,7.741936 z"
+ id="path2850"
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0" />
</g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="bar" />
</svg>
diff --git a/src/images/big_arrow_left.svg b/src/images/big_arrow_left.svg
index 72b6792..b369018 100644
--- a/src/images/big_arrow_left.svg
+++ b/src/images/big_arrow_left.svg
@@ -14,51 +14,85 @@
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="big_arrow_left.svg">
<defs
id="defs4">
+ <linearGradient
+ id="linearGradient7692">
+ <stop
+ style="stop-color:#2a3a4e;stop-opacity:1;"
+ offset="0"
+ id="stop7694" />
+ <stop
+ style="stop-color:#2a3a4e;stop-opacity:0;"
+ offset="1"
+ id="stop7696" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7662">
+ <stop
+ style="stop-color:#1d366d;stop-opacity:1;"
+ offset="0"
+ id="stop7664" />
+ <stop
+ style="stop-color:#0f164d;stop-opacity:1;"
+ offset="1"
+ id="stop7666" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7652">
+ <stop
+ style="stop-color:#f4f4f4;stop-opacity:1;"
+ offset="0"
+ id="stop7654" />
+ <stop
+ style="stop-color:#94a8ad;stop-opacity:1;"
+ offset="1"
+ id="stop7656" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4893">
+ <stop
+ id="stop7660"
+ offset="0"
+ style="stop-color:#2880e2;stop-opacity:1;" />
+ <stop
+ style="stop-color:#acbbcd;stop-opacity:1;"
+ offset="1"
+ id="stop4897" />
+ </linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
- id="perspective2953" />
+ id="perspective3031" />
<linearGradient
id="linearGradient3797">
<stop
- style="stop-color:#1f4db9;stop-opacity:1;"
+ style="stop-color:#ff6a1a;stop-opacity:1;"
offset="0"
id="stop3799" />
<stop
- style="stop-color:#a6c8dd;stop-opacity:1;"
+ style="stop-color:#ebb572;stop-opacity:1;"
offset="1"
id="stop3801" />
</linearGradient>
<linearGradient
id="linearGradient3785">
<stop
- style="stop-color:#c4d8e6;stop-opacity:1;"
+ style="stop-color:#d1e0ec;stop-opacity:1;"
offset="0"
id="stop3787" />
<stop
- style="stop-color:#4880bb;stop-opacity:1;"
+ style="stop-color:#5f6e95;stop-opacity:1"
offset="1"
id="stop3789" />
</linearGradient>
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3785"
- id="linearGradient3791"
- x1="0.7379019"
- y1="1037.1975"
- x2="28.724367"
- y2="1037.1975"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(1.1760155,1021.5383)" />
- <linearGradient
- inkscape:collect="always"
xlink:href="#linearGradient3797"
id="linearGradient3803"
x1="-0.90713501"
@@ -66,7 +100,55 @@
x2="30.395551"
y2="1040.3545"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9736902,0,0,0.82895833,-0.69805647,174.10643)" />
+ gradientTransform="matrix(0,0.9736902,-0.82895833,0,822.98355,1006.6047)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4893"
+ id="linearGradient7680"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.98214119,0,0,0.97152573,0.28629443,30.333814)"
+ x1="21.856264"
+ y1="1049.7715"
+ x2="15.999436"
+ y2="1024.1915" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3785"
+ id="linearGradient7690"
+ x1="20.125097"
+ y1="1016.461"
+ x2="6.6879668"
+ y2="1047.7531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0,-0.85992443,0.91102222,0,-927.92322,1050.2359)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3785-7"
+ id="linearGradient7690-1"
+ x1="16.068068"
+ y1="1029.801"
+ x2="16.179512"
+ y2="1053.7546"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3785-7">
+ <stop
+ style="stop-color:#8fbce1;stop-opacity:1;"
+ offset="0"
+ id="stop3787-4" />
+ <stop
+ style="stop-color:#3992cd;stop-opacity:1;"
+ offset="1"
+ id="stop3789-0" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3870">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.70970009"
+ id="feGaussianBlur3872" />
+ </filter>
</defs>
<sodipodi:namedview
id="base"
@@ -76,18 +158,20 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16.15625"
- inkscape:cx="-0.27852998"
- inkscape:cy="17.66317"
+ inkscape:cx="-3.9262294"
+ inkscape:cy="19.672161"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
- inkscape:window-width="1920"
- inkscape:window-height="1179"
- inkscape:window-x="1916"
- inkscape:window-y="-4"
- inkscape:window-maximized="1">
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid2985"
@@ -104,7 +188,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title></dc:title>
<cc:license
rdf:resource="Apache License 2.0" />
<dc:creator>
@@ -128,21 +212,20 @@
</rdf:RDF>
</metadata>
<g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="bg"
+ style="display:inline" />
+ <g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1020.3622)">
<path
- style="fill:url(#linearGradient3791);fill-opacity:1;stroke:#26356e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
- d="m 29.338485,1041.4685 -11.450676,-0.1238 -5e-6,7.7369 c 0,0 -9.6067873,-7.6092 -15.4119911,-12.5648 4.950477,-4.3138 15.5976781,-12.9363 15.5976781,-12.9363 -2e-6,1.9188 -5e-6,6.0659 -5e-6,7.9847 l 11.265006,0.062 -7e-6,9.8413 z"
+ style="fill:url(#linearGradient7690);fill-opacity:1;stroke:#32404f;stroke-width:0.88510466;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 29.35395,1041.181 -7.8772,-0.079 -3.5075,-0.035 0,7.1641 c 0,0 -2.2933,-1.6917 -5.3116,-3.9571 -3.1412995,-2.3578 -7.0679995,-5.3372 -10.0115995,-7.6775 1.0203,-0.8279 2.2838,-1.8273 3.6461,-2.8915 5.2094995,-4.0698 11.8616995,-9.087 11.8616995,-9.087 0,1.7767 0,5.6168 0,7.3935 l 11.2001,0.057 z"
id="path3015"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- <path
- sodipodi:nodetypes="cccccccccc"
- inkscape:connector-curvature="0"
- id="path3793"
- d="m 27.763115,1033.5471 -3e-6,5.9023 -11.318316,-0.095 -0.253127,6.3577 c 0,0 -6.5860788,-5.5256 -11.1501699,-9.1614 3.9160983,-3.6752 11.2286419,-9.3516 11.2286419,-9.3516 -2e-6,1.4778 0.06189,4.7331 0.06189,6.2107 l 11.2454,0.013 -0.0619,0.062 0.247582,0.062 z"
- style="fill:url(#linearGradient3803);fill-opacity:1;stroke:none" />
+ sodipodi:nodetypes="ccccscscccc" />
</g>
</svg>
diff --git a/src/images/big_arrow_right.svg b/src/images/big_arrow_right.svg
index 9a40f27..86ebef1 100644
--- a/src/images/big_arrow_right.svg
+++ b/src/images/big_arrow_right.svg
@@ -14,51 +14,85 @@
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="big_arrow_right.svg">
<defs
id="defs4">
+ <linearGradient
+ id="linearGradient7692">
+ <stop
+ style="stop-color:#2a3a4e;stop-opacity:1;"
+ offset="0"
+ id="stop7694" />
+ <stop
+ style="stop-color:#2a3a4e;stop-opacity:0;"
+ offset="1"
+ id="stop7696" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7662">
+ <stop
+ style="stop-color:#1d366d;stop-opacity:1;"
+ offset="0"
+ id="stop7664" />
+ <stop
+ style="stop-color:#0f164d;stop-opacity:1;"
+ offset="1"
+ id="stop7666" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7652">
+ <stop
+ style="stop-color:#f4f4f4;stop-opacity:1;"
+ offset="0"
+ id="stop7654" />
+ <stop
+ style="stop-color:#94a8ad;stop-opacity:1;"
+ offset="1"
+ id="stop7656" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4893">
+ <stop
+ id="stop7660"
+ offset="0"
+ style="stop-color:#2880e2;stop-opacity:1;" />
+ <stop
+ style="stop-color:#acbbcd;stop-opacity:1;"
+ offset="1"
+ id="stop4897" />
+ </linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
- id="perspective18" />
+ id="perspective3031" />
<linearGradient
id="linearGradient3797">
<stop
- style="stop-color:#1f4db9;stop-opacity:1;"
+ style="stop-color:#ff6a1a;stop-opacity:1;"
offset="0"
id="stop3799" />
<stop
- style="stop-color:#a6c8dd;stop-opacity:1;"
+ style="stop-color:#ebb572;stop-opacity:1;"
offset="1"
id="stop3801" />
</linearGradient>
<linearGradient
id="linearGradient3785">
<stop
- style="stop-color:#c4d8e6;stop-opacity:1;"
+ style="stop-color:#d1e0ec;stop-opacity:1;"
offset="0"
id="stop3787" />
<stop
- style="stop-color:#4880bb;stop-opacity:1;"
+ style="stop-color:#5f6e95;stop-opacity:1"
offset="1"
id="stop3789" />
</linearGradient>
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3785"
- id="linearGradient3791"
- x1="0.7379019"
- y1="1037.1975"
- x2="28.724367"
- y2="1037.1975"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,1,31.195349,1021.6002)" />
- <linearGradient
- inkscape:collect="always"
xlink:href="#linearGradient3797"
id="linearGradient3803"
x1="-0.90713501"
@@ -66,7 +100,55 @@
x2="30.395551"
y2="1040.3545"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.9736902,0,0,0.82895833,33.069421,174.16833)" />
+ gradientTransform="matrix(0,0.9736902,-0.82895833,0,822.98355,1006.6047)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4893"
+ id="linearGradient7680"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.98214119,0,0,0.97152573,0.28629443,30.333814)"
+ x1="21.856264"
+ y1="1049.7715"
+ x2="15.999436"
+ y2="1024.1915" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3785"
+ id="linearGradient7690"
+ x1="20.125097"
+ y1="1016.461"
+ x2="6.6879668"
+ y2="1047.7531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0,-0.85992443,-0.91102222,0,959.92322,1050.2359)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3785-7"
+ id="linearGradient7690-1"
+ x1="16.068068"
+ y1="1029.801"
+ x2="16.179512"
+ y2="1053.7546"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3785-7">
+ <stop
+ style="stop-color:#8fbce1;stop-opacity:1;"
+ offset="0"
+ id="stop3787-4" />
+ <stop
+ style="stop-color:#3992cd;stop-opacity:1;"
+ offset="1"
+ id="stop3789-0" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3870">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.70970009"
+ id="feGaussianBlur3872" />
+ </filter>
</defs>
<sodipodi:namedview
id="base"
@@ -76,18 +158,20 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16.15625"
- inkscape:cx="-0.27852998"
- inkscape:cy="17.66317"
+ inkscape:cx="-3.9262294"
+ inkscape:cy="19.672161"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
- inkscape:window-width="1920"
- inkscape:window-height="1179"
- inkscape:window-x="1916"
- inkscape:window-y="-4"
- inkscape:window-maximized="1">
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid2985"
@@ -104,7 +188,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title></dc:title>
<cc:license
rdf:resource="Apache License 2.0" />
<dc:creator>
@@ -128,21 +212,20 @@
</rdf:RDF>
</metadata>
<g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="bg"
+ style="display:inline" />
+ <g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1020.3622)">
<path
- style="fill:url(#linearGradient3791);fill-opacity:1;stroke:#26356e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
- d="m 3.0328799,1041.5304 11.4506761,-0.1238 5e-6,7.7369 c 0,0 9.606787,-7.6092 15.411991,-12.5648 -4.950477,-4.3138 -15.597678,-12.9363 -15.597678,-12.9363 2e-6,1.9188 5e-6,6.0659 5e-6,7.9847 l -11.2650061,0.062 7e-6,9.8413 z"
+ style="fill:url(#linearGradient7690);fill-opacity:1;stroke:#32404f;stroke-width:0.88510466;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 2.6460505,1041.181 7.8772005,-0.079 3.5075,-0.035 0,7.1641 c 0,0 2.2933,-1.6917 5.3116,-3.9571 3.141299,-2.3578 7.067999,-5.3372 10.011599,-7.6775 -1.0203,-0.8279 -2.2838,-1.8273 -3.6461,-2.8915 -5.209499,-4.0698 -11.861699,-9.087 -11.861699,-9.087 0,1.7767 0,5.6168 0,7.3935 l -11.2001005,0.057 z"
id="path3015"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- <path
- sodipodi:nodetypes="cccccccccc"
- inkscape:connector-curvature="0"
- id="path3793"
- d="m 4.6082499,1033.609 3e-6,5.9023 11.3183161,-0.095 0.253127,6.3577 c 0,0 6.586079,-5.5256 11.15017,-9.1614 -3.916099,-3.6752 -11.228642,-9.3516 -11.228642,-9.3516 2e-6,1.4778 -0.06189,4.7331 -0.06189,6.2107 l -11.2454001,0.013 0.0619,0.062 -0.247582,0.062 z"
- style="fill:url(#linearGradient3803);fill-opacity:1;stroke:none" />
+ sodipodi:nodetypes="ccccscscccc" />
</g>
</svg>
diff --git a/src/images/big_arrow_up.svg b/src/images/big_arrow_up.svg
index c5a8cda..c2999c0 100644
--- a/src/images/big_arrow_up.svg
+++ b/src/images/big_arrow_up.svg
@@ -14,10 +14,54 @@
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="big_arrow_up.svg">
<defs
id="defs4">
+ <linearGradient
+ id="linearGradient7692">
+ <stop
+ style="stop-color:#2a3a4e;stop-opacity:1;"
+ offset="0"
+ id="stop7694" />
+ <stop
+ style="stop-color:#2a3a4e;stop-opacity:0;"
+ offset="1"
+ id="stop7696" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7662">
+ <stop
+ style="stop-color:#1d366d;stop-opacity:1;"
+ offset="0"
+ id="stop7664" />
+ <stop
+ style="stop-color:#0f164d;stop-opacity:1;"
+ offset="1"
+ id="stop7666" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7652">
+ <stop
+ style="stop-color:#f4f4f4;stop-opacity:1;"
+ offset="0"
+ id="stop7654" />
+ <stop
+ style="stop-color:#94a8ad;stop-opacity:1;"
+ offset="1"
+ id="stop7656" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4893">
+ <stop
+ id="stop7660"
+ offset="0"
+ style="stop-color:#2880e2;stop-opacity:1;" />
+ <stop
+ style="stop-color:#acbbcd;stop-opacity:1;"
+ offset="1"
+ id="stop4897" />
+ </linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
@@ -28,37 +72,27 @@
<linearGradient
id="linearGradient3797">
<stop
- style="stop-color:#1f4db9;stop-opacity:1;"
+ style="stop-color:#ff6a1a;stop-opacity:1;"
offset="0"
id="stop3799" />
<stop
- style="stop-color:#a6c8dd;stop-opacity:1;"
+ style="stop-color:#ebb572;stop-opacity:1;"
offset="1"
id="stop3801" />
</linearGradient>
<linearGradient
id="linearGradient3785">
<stop
- style="stop-color:#c4d8e6;stop-opacity:1;"
+ style="stop-color:#d1e0ec;stop-opacity:1;"
offset="0"
id="stop3787" />
<stop
- style="stop-color:#4880bb;stop-opacity:1;"
+ style="stop-color:#5f6e95;stop-opacity:1"
offset="1"
id="stop3789" />
</linearGradient>
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3785"
- id="linearGradient3791"
- x1="0.7379019"
- y1="1037.1975"
- x2="28.724367"
- y2="1037.1975"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,1,-1,0,31.00938,1021.4761)" />
- <linearGradient
- inkscape:collect="always"
xlink:href="#linearGradient3797"
id="linearGradient3803"
x1="-0.90713501"
@@ -66,7 +100,55 @@
x2="30.395551"
y2="1040.3545"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,0.9736902,-0.82895833,0,878.38007,1019.6647)" />
+ gradientTransform="matrix(0,0.9736902,-0.82895833,0,822.98355,1006.6047)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4893"
+ id="linearGradient7680"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.98214119,0,0,0.97152573,0.28629443,30.333814)"
+ x1="21.856264"
+ y1="1049.7715"
+ x2="15.999436"
+ y2="1024.1915" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3785"
+ id="linearGradient7690"
+ x1="20.125097"
+ y1="1016.461"
+ x2="6.6879668"
+ y2="1047.7531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.85992443,0,0,0.91102222,1.8166098,92.438731)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3785-7"
+ id="linearGradient7690-1"
+ x1="16.068068"
+ y1="1029.801"
+ x2="16.179512"
+ y2="1053.7546"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3785-7">
+ <stop
+ style="stop-color:#8fbce1;stop-opacity:1;"
+ offset="0"
+ id="stop3787-4" />
+ <stop
+ style="stop-color:#3992cd;stop-opacity:1;"
+ offset="1"
+ id="stop3789-0" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3870">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.70970009"
+ id="feGaussianBlur3872" />
+ </filter>
</defs>
<sodipodi:namedview
id="base"
@@ -76,18 +158,20 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16.15625"
- inkscape:cx="-0.27852998"
- inkscape:cy="17.66317"
+ inkscape:cx="-3.9262294"
+ inkscape:cy="19.672161"
inkscape:document-units="px"
- inkscape:current-layer="layer1"
+ inkscape:current-layer="layer2"
showgrid="true"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
- inkscape:window-width="1920"
- inkscape:window-height="1179"
- inkscape:window-x="1916"
- inkscape:window-y="-4"
- inkscape:window-maximized="1">
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid2985"
@@ -128,21 +212,20 @@
</rdf:RDF>
</metadata>
<g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="bg"
+ style="display:inline" />
+ <g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1020.3622)">
<path
- style="fill:url(#linearGradient3791);fill-opacity:1;stroke:#26356e;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
- d="m 11.07918,1049.6386 0.1238,-11.4507 -7.7368998,0 c 0,0 7.6091998,-9.6068 12.5647998,-15.412 4.3138,4.9505 12.9363,15.5977 12.9363,15.5977 -1.9188,0 -6.0659,0 -7.9847,0 l -0.062,11.265 -9.8413,0 z"
+ style="fill:url(#linearGradient7690);fill-opacity:1;stroke:#32404f;stroke-width:0.88510465999999999;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 10.871511,1049.7159 0.07932,-7.8772 0.03532,-3.5075 -7.1641167,0 c 0,0 1.691712,-2.2933 3.957117,-5.3116 2.3578727,-3.1413 5.3372267,-7.068 7.6774777,-10.0116 0.827983,1.0203 1.827392,2.2838 2.891583,3.6461 4.069778,5.2095 9.087008,11.8617 9.087008,11.8617 -1.776746,0 -5.616824,0 -7.393571,0 l -0.05742,11.2001 z"
id="path3015"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- <path
- sodipodi:nodetypes="cccccccccc"
- inkscape:connector-curvature="0"
- id="path3793"
- d="m 18.939434,1048.1259 -5.9023,0 0.095,-11.3183 -6.3577002,-0.2531 c 0,0 5.5256002,-6.5861 9.1614002,-11.1502 3.6752,3.9161 9.3516,11.2286 9.3516,11.2286 -1.4778,0 -4.7331,0.062 -6.2107,0.062 l -0.013,11.2454 -0.062,-0.062 -0.062,0.2476 z"
- style="fill:url(#linearGradient3803);fill-opacity:1;stroke:none" />
+ sodipodi:nodetypes="ccccscscccc" />
</g>
</svg>
diff --git a/src/images/bookmark.svg b/src/images/bookmark.svg
index 6c3cc42..e9122da 100644
--- a/src/images/bookmark.svg
+++ b/src/images/bookmark.svg
@@ -28,7 +28,7 @@
<linearGradient
id="linearGradient3757">
<stop
- style="stop-color:#fdfb72;stop-opacity:1;"
+ style="stop-color:#f5ef7a;stop-opacity:1;"
offset="0"
id="stop3759" />
<stop
@@ -54,15 +54,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="12.46875"
- inkscape:cx="-14.405339"
+ inkscape:cx="-4.4680284"
inkscape:cy="16"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
- inkscape:window-width="1421"
+ inkscape:window-width="1600"
inkscape:window-height="925"
- inkscape:window-x="414"
- inkscape:window-y="57"
+ inkscape:window-x="2134"
+ inkscape:window-y="20"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
@@ -110,7 +110,7 @@
transform="translate(0,-1020.3622)">
<path
sodipodi:type="star"
- style="fill:url(#linearGradient3765);fill-opacity:1;fill-rule:evenodd;stroke:#a7723a;stroke-width:0.94637238999999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:url(#linearGradient3765);fill-opacity:1;fill-rule:evenodd;stroke:#764f25;stroke-width:0.94637238999999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path2987"
sodipodi:sides="5"
sodipodi:cx="9"
diff --git a/src/images/bookmark.svg b/src/images/bookmark_empty.svg
similarity index 86%
copy from src/images/bookmark.svg
copy to src/images/bookmark_empty.svg
index 6c3cc42..7562e8e 100644
--- a/src/images/bookmark.svg
+++ b/src/images/bookmark_empty.svg
@@ -7,15 +7,14 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="32"
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
- sodipodi:docname="bookmark.svg">
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="bookmark_empty.svg">
<defs
id="defs4">
<inkscape:perspective
@@ -36,15 +35,6 @@
offset="1"
id="stop3761" />
</linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3757"
- id="linearGradient3765"
- x1="9.0300617"
- y1="7.6554561"
- x2="7.2979932"
- y2="23.49078"
- gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
@@ -110,7 +100,7 @@
transform="translate(0,-1020.3622)">
<path
sodipodi:type="star"
- style="fill:url(#linearGradient3765);fill-opacity:1;fill-rule:evenodd;stroke:#a7723a;stroke-width:0.94637238999999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#a7723a;stroke-width:0.94637238999999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path2987"
sodipodi:sides="5"
sodipodi:cx="9"
diff --git a/src/images/create_folder.svg b/src/images/create_folder.svg
index e1b08a8..d536132 100644
--- a/src/images/create_folder.svg
+++ b/src/images/create_folder.svg
@@ -14,7 +14,7 @@
height="64px"
id="svg2985"
version="1.1"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="create_folder.svg"
sodipodi:version="0.32"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
@@ -42,7 +42,7 @@
x2="36.550461"
y2="-0.56834435"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+ gradientTransform="matrix(1.0942429,0,0,1.0732344,69.140106,-1.7010828)" />
<linearGradient
id="linearGradient3845">
<stop
@@ -63,6 +63,138 @@
id="linearGradient3945"
xlink:href="#linearGradient3845"
inkscape:collect="always" />
+ <linearGradient
+ y2="19.5"
+ x2="38.5"
+ y1="19.5"
+ x1="7.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3139"
+ xlink:href="#linearGradient3845-1"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3845-1">
+ <stop
+ style="stop-color:#326dc2;stop-opacity:1;"
+ offset="0"
+ id="stop3847-7" />
+ <stop
+ style="stop-color:#6295be;stop-opacity:1;"
+ offset="1"
+ id="stop3849-4" />
+ </linearGradient>
+ <linearGradient
+ y2="19.5"
+ x2="38.5"
+ y1="19.5"
+ x1="7.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3216"
+ xlink:href="#linearGradient3845-1"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5915"
+ id="linearGradient3908"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97812443,0,0,0.96376754,-0.10622931,0.49183349)"
+ x1="57.456539"
+ y1="55.657021"
+ x2="21.214657"
+ y2="28.643499" />
+ <linearGradient
+ id="linearGradient5915">
+ <stop
+ id="stop5917"
+ offset="0"
+ style="stop-color:#e9a552;stop-opacity:1;" />
+ <stop
+ id="stop5919"
+ offset="1"
+ style="stop-color:#e7d28b;stop-opacity:1;" />
+ </linearGradient>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter3958">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.52577735"
+ id="feGaussianBlur3960" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3765"
+ id="linearGradient3771"
+ x1="42.063648"
+ y1="53.744427"
+ x2="6.6376882"
+ y2="20.168556"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97402742,0,0,0.98533799,0.55322969,-0.29978651)" />
+ <linearGradient
+ id="linearGradient3765">
+ <stop
+ style="stop-color:#e8c25e;stop-opacity:1;"
+ offset="0"
+ id="stop3767" />
+ <stop
+ style="stop-color:#f7e198;stop-opacity:1;"
+ offset="1"
+ id="stop3769" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3782"
+ id="linearGradient3788"
+ x1="71.889565"
+ y1="61.835026"
+ x2="-7.6111097"
+ y2="20.009457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97402742,0,0,0.98533799,0.67890969,0.44258749)" />
+ <linearGradient
+ id="linearGradient3782">
+ <stop
+ style="stop-color:#6a6d71;stop-opacity:1;"
+ offset="0"
+ id="stop3784" />
+ <stop
+ style="stop-color:#606164;stop-opacity:1;"
+ offset="1"
+ id="stop3786" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3775"
+ id="linearGradient3776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.51031759,0,0,-0.10859702,5.7447143,12.683803)"
+ x1="35.657509"
+ y1="8.7720575"
+ x2="10.400817"
+ y2="59.972881" />
+ <linearGradient
+ id="linearGradient3775">
+ <stop
+ id="stop3777"
+ offset="0"
+ style="stop-color:#f5f5f5;stop-opacity:1;" />
+ <stop
+ id="stop3779"
+ offset="1"
+ style="stop-color:#d3d8da;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ y2="59.972881"
+ x2="10.400817"
+ y1="8.7720575"
+ x1="35.657509"
+ gradientTransform="matrix(0.51031759,0,0,-0.10859702,5.3716787,12.903945)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient7066"
+ xlink:href="#linearGradient3775"
+ inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
@@ -72,16 +204,16 @@
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="10.27"
- inkscape:cx="2.0027401"
- inkscape:cy="29.889877"
- inkscape:current-layer="layer6"
+ inkscape:cx="13.870833"
+ inkscape:cy="33.87139"
+ inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
- inkscape:window-width="1920"
- inkscape:window-height="1179"
- inkscape:window-x="1916"
- inkscape:window-y="-4"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:snap-from-guide="false"
objecttolerance="2"
@@ -129,38 +261,56 @@
<g
id="layer1"
inkscape:label="Layer 1"
- inkscape:groupmode="layer">
+ inkscape:groupmode="layer"
+ style="display:inline">
+ <path
+ sodipodi:nodetypes="cscsssccscc"
+ inkscape:connector-curvature="0"
+ id="path3773"
+ d="m 14.265968,18.365859 c 0,0 -10.8865313,1.596686 -10.8865313,0.36494 l 0,-10.8387175 c 0.436205,-3.185308 3.200687,-2.702799 4.875548,-2.702799 l 12.8291743,0 c 3.723824,0 4.890189,5.0308605 7.51339,5.0308605 l 14.609951,0 13.290761,0 c 2.624204,-0.02514 4.203767,0.05826 4.231965,2.598628 l 0.06562,5.912028 z"
+ style="fill:url(#linearGradient7066);fill-opacity:1;stroke:#67697a;stroke-width:0.97966641;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
- style="fill:url(#linearGradient3759);fill-opacity:1;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
- id="rect2984"
+ style="fill:url(#linearGradient3771);fill-opacity:1;stroke:url(#linearGradient3788);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 1.8496807,16.120351 0.777284,42.099791 58.6476233,0.150685 c 0.01089,-0.03484 0.09732,-9.244196 0.186629,-19.082195 0.102615,-11.304034 0.209032,-23.438023 0.209032,-23.438023 z"
+ id="path2995"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccccccc" />
+ sodipodi:nodetypes="cccscc" />
+ <rect
+ style="fill:#939dac;fill-opacity:1;stroke:none"
+ id="rect3780"
+ width="16.300121"
+ height="2.2715573"
+ x="5.6998787"
+ y="7.7284427"
+ rx="0"
+ ry="0" />
<path
- style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
- d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
- id="rect3761"
+ style="fill:url(#linearGradient3908);fill-opacity:1;stroke:none;filter:url(#filter3958)"
+ d="m 60.375695,17.002064 -7.969482,0.152927 c 0.811526,2.291673 1.223877,3.868364 1.223877,6.341886 0,15.977042 -17.999419,28.915335 -40.199634,28.915335 -4.0250373,0 -6.1915183,-0.323257 -9.8580013,-1.115606 l -0.01422,5.822362 56.4034013,0.229294 C 58.99115,56.433943 60.375704,17.002064 60.375692,17.002064 z"
+ id="path3893"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
+ sodipodi:nodetypes="ccsscccc" />
</g>
<g
inkscape:groupmode="layer"
id="layer6"
- inkscape:label="plus">
+ inkscape:label="plus"
+ style="display:inline">
<path
- transform="matrix(0.96666667,0,0,1,25.896296,-3.5)"
+ transform="matrix(0.97055213,0,0,1.0040194,24.677301,-2.1366596)"
sodipodi:type="arc"
- style="fill:url(#linearGradient3945);fill-opacity:1;fill-rule:evenodd;stroke:#228b20;stroke-width:1.01709521;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path2978"
+ style="fill:url(#linearGradient3216);fill-opacity:1;fill-rule:evenodd;stroke:#3a4a97;stroke-width:2.92098856;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path2978-0"
sodipodi:cx="23"
sodipodi:cy="19.5"
sodipodi:rx="15"
sodipodi:ry="14.5"
d="m 38,19.5 a 15,14.5 0 1 1 -30,0 15,14.5 0 1 1 30,0 z" />
<path
+ inkscape:connector-curvature="0"
style="fill:#ececec;fill-opacity:1;stroke:none;display:inline"
- d="m 46,3.6875 4.62963,0 0,10.3125 10.185185,0 0,4.6875 -10.185185,0 0,10.3125 L 46,29 l 0,-10.3125 -10.185186,0 0,-4.6875 L 46,14 46,3.6875 z"
- id="path2826"
+ d="m 44.025386,4.4319814 6.300844,9e-6 -0.154836,9.6715136 8.845454,0 10e-6,6.408005 -8.845456,0 -1e-5,9.827367 -5.991178,-0.155857 -0.154834,-9.827368 -9.619591,10e-7 0,-6.408005 9.619588,0 0,-9.5156656 z"
+ id="path2826-4"
sodipodi:nodetypes="ccccccccccccc" />
</g>
</svg>
diff --git a/src/images/create_macro.svg b/src/images/create_macro.svg
index 635a974..802dba7 100644
--- a/src/images/create_macro.svg
+++ b/src/images/create_macro.svg
@@ -14,7 +14,7 @@
height="64px"
id="svg2160"
sodipodi:version="0.32"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="create_macro.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/tmp/cgr/work/icons/metview/macro.png"
@@ -64,6 +64,35 @@
x2="38.5"
y2="19.5"
gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ y2="19.5"
+ x2="38.5"
+ y1="19.5"
+ x1="7.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3945"
+ xlink:href="#linearGradient3845-1"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3845-1">
+ <stop
+ style="stop-color:#326dc2;stop-opacity:1;"
+ offset="0"
+ id="stop3847-7" />
+ <stop
+ style="stop-color:#6295be;stop-opacity:1;"
+ offset="1"
+ id="stop3849-4" />
+ </linearGradient>
+ <linearGradient
+ y2="19.5"
+ x2="38.5"
+ y1="19.5"
+ x1="7.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3139"
+ xlink:href="#linearGradient3845-1"
+ inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
@@ -81,8 +110,8 @@
inkscape:grid-bbox="true"
inkscape:window-width="1485"
inkscape:window-height="1062"
- inkscape:window-x="518"
- inkscape:window-y="49"
+ inkscape:window-x="101"
+ inkscape:window-y="3"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
@@ -175,26 +204,6 @@
transform="matrix(0.4377048,0,0,0.3789124,6.5395477,32.333006)" />
<path
sodipodi:type="arc"
- style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="path3162"
- sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
- sodipodi:rx="3.2727273"
- sodipodi:ry="3.090909"
- d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
- transform="matrix(0.4377048,0,0,0.3789124,35.456161,17.213011)" />
- <path
- sodipodi:type="arc"
- style="fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="path3164"
- sodipodi:cx="17.818182"
- sodipodi:cy="29.454546"
- sodipodi:rx="3.2727273"
- sodipodi:ry="3.090909"
- d="m 21.090909,29.454546 a 3.2727273,3.090909 0 1 1 -6.545454,0 3.2727273,3.090909 0 1 1 6.545454,0 z"
- transform="matrix(0.4377048,0,0,0.3789124,44.431144,17.213011)" />
- <path
- sodipodi:type="arc"
style="opacity:1;fill:#040d02;fill-opacity:1;fill-rule:evenodd;stroke:#040d02;stroke-width:1.64576399;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3166"
sodipodi:cx="17.818182"
@@ -259,24 +268,24 @@
id="layer4"
inkscape:label="circle">
<path
- transform="matrix(0.96666667,0,0,1,25.266667,-3.5)"
+ transform="matrix(0.97055213,0,0,1.0040194,24.651924,-2.5686416)"
sodipodi:type="arc"
- style="fill:url(#linearGradient3851);fill-opacity:1;fill-rule:evenodd;stroke:#228b20;stroke-width:1.01709521;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path2978"
+ style="fill:url(#linearGradient3139);fill-opacity:1;fill-rule:evenodd;stroke:#3a4a97;stroke-width:2.92098856;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path2978-0"
sodipodi:cx="23"
sodipodi:cy="19.5"
sodipodi:rx="15"
sodipodi:ry="14.5"
d="m 38,19.5 a 15,14.5 0 1 1 -30,0 15,14.5 0 1 1 30,0 z" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer3"
- inkscape:label="plus">
<path
+ inkscape:connector-curvature="0"
style="fill:#ececec;fill-opacity:1;stroke:none;display:inline"
- d="M 45.37037,3.6875 50,3.6875 50,14 l 10.185185,0 0,4.6875 L 50,18.6875 50,29 l -4.62963,0 0,-10.3125 -10.185185,0 0,-4.6875 10.185185,0 0,-10.3125 z"
- id="path2826"
+ d="m 44.000009,4 6.300844,8.6e-6 -0.154836,9.6715134 8.845454,0 1e-5,6.408005 -8.845456,0 -1e-5,9.827367 -5.991178,-0.155857 -0.154834,-9.827368 -9.619591,1e-6 0,-6.408005 9.619588,0 L 44,4 z"
+ id="path2826-4"
sodipodi:nodetypes="ccccccccccccc" />
</g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="plus" />
</svg>
diff --git a/src/images/detailed_view.svg b/src/images/detailed_view.svg
index 24b2390..1b0304d 100644
--- a/src/images/detailed_view.svg
+++ b/src/images/detailed_view.svg
@@ -14,245 +14,372 @@
height="32"
id="svg2"
sodipodi:version="0.32"
- inkscape:version="0.48.4 r9939"
+ inkscape:version="0.48.2 r9819"
version="1.0"
sodipodi:docname="detailed_view.svg"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ style="display:inline">
<defs
id="defs4">
<linearGradient
- id="linearGradient3648">
+ id="linearGradient3850">
<stop
- id="stop3650"
+ id="stop3852"
offset="0"
- style="stop-color:#c4c4c4;stop-opacity:1" />
+ style="stop-color:#5f6e95;stop-opacity:1;" />
<stop
- id="stop3652"
+ id="stop3854"
offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
+ style="stop-color:#5f6e95;stop-opacity:1;" />
</linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 16 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="32 : 16 : 1"
- inkscape:persp3d-origin="16 : 10.666667 : 1"
- id="perspective45" />
- <linearGradient
- id="linearGradient3923">
+ <linearGradient
+ id="linearGradient3826">
<stop
- id="stop3925"
+ style="stop-color:#5f6e95;stop-opacity:1;"
offset="0"
- style="stop-color:#7da0a8;stop-opacity:1" />
+ id="stop3828" />
<stop
- id="stop3927"
+ style="stop-color:#f5f6f8;stop-opacity:0.98214287;"
offset="1"
- style="stop-color:#d9e4e7;stop-opacity:1;" />
+ id="stop3830" />
</linearGradient>
<linearGradient
- id="linearGradient3715">
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4"
+ id="linearGradient4624-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,1.3907176,31.533672,-33.145535)"
+ x1="-26.96797"
+ y1="24.2332"
+ x2="-34.544411"
+ y2="24.435719" />
+ <linearGradient
+ id="linearGradient4448-4">
+ <stop
+ style="stop-color:#f1d98c;stop-opacity:1;"
+ offset="0"
+ id="stop4450-8" />
+ <stop
+ style="stop-color:#fefcf7;stop-opacity:1;"
+ offset="1"
+ id="stop4452-8" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4"
+ id="linearGradient4618-2"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,1.3907176,23.414741,-33.145534)"
+ x1="-25.550787"
+ y1="25.120838"
+ x2="-35.127956"
+ y2="25.407894" />
+ <linearGradient
+ y2="26.126455"
+ x2="-34.627769"
+ y1="26.008472"
+ x1="-24.717148"
+ gradientTransform="matrix(0.70514374,0,0,1.3907176,15.354595,-33.145532)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4677"
+ xlink:href="#linearGradient4448-4"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient8630">
<stop
- style="stop-color:#d2d2d2;stop-opacity:1;"
+ style="stop-color:#b6dff1;stop-opacity:1;"
offset="0"
- id="stop3717" />
+ id="stop8632" />
<stop
- style="stop-color:#ffffff;stop-opacity:1;"
+ style="stop-color:#77acf3;stop-opacity:1;"
offset="1"
- id="stop3719" />
+ id="stop8634" />
</linearGradient>
<linearGradient
- id="linearGradient3665">
+ y2="11.483637"
+ x2="-23.07486"
+ y1="25.826216"
+ x1="-28.71571"
+ gradientTransform="matrix(1.0812532,0,0,0.26217721,45.789166,-49.680057)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3026"
+ xlink:href="#linearGradient8630"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3556195,0,0,0.26217721,47.883785,-66.578165)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3053"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3556195,0,0,0.27785119,47.883785,-72.054213)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ id="linearGradient3878-5">
<stop
- style="stop-color:#233690;stop-opacity:1;"
+ style="stop-color:#98b6d3;stop-opacity:1;"
offset="0"
- id="stop3667" />
+ id="stop3880-4" />
<stop
- style="stop-color:#79c6dd;stop-opacity:1;"
+ style="stop-color:#d8dde2;stop-opacity:1;"
offset="1"
- id="stop3669" />
+ id="stop3882-8" />
</linearGradient>
<linearGradient
- id="linearGradient5774">
+ id="linearGradient3868-2">
<stop
- id="stop5776"
+ id="stop3870-8"
offset="0"
- style="stop-color:#a8abab;stop-opacity:1;" />
+ style="stop-color:#ffffff;stop-opacity:1;" />
<stop
- id="stop5778"
+ id="stop3872-9"
offset="1"
- style="stop-color:#e2e9eb;stop-opacity:1;" />
+ style="stop-color:#cdcdcd;stop-opacity:1;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient5774"
- id="linearGradient2886"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3905"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.80897999,0,0,0.59391541,-26.080126,-1.0973868)"
- x1="32.000004"
- y1="3.5336473"
- x2="-1.0000013"
- y2="7.6579084" />
+ gradientTransform="matrix(0.46782267,0,0,0.31274677,38.251605,-11.60609)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
<linearGradient
- id="linearGradient3665-6">
+ id="linearGradient8630-0">
<stop
- style="stop-color:#5e6ba6;stop-opacity:1;"
+ style="stop-color:#5faed0;stop-opacity:1;"
offset="0"
- id="stop3667-9" />
+ id="stop8632-2" />
<stop
- style="stop-color:#d9e4e7;stop-opacity:1;"
+ style="stop-color:#4a5f7b;stop-opacity:1;"
offset="1"
- id="stop3669-2" />
+ id="stop8634-1" />
</linearGradient>
<linearGradient
+ y2="11.483637"
+ x2="-23.07486"
+ y1="29.218405"
+ x1="-33.278461"
+ gradientTransform="matrix(0.70514376,0,0,0.42662293,15.095889,7.5224808)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3960"
+ xlink:href="#linearGradient8630-0"
+ inkscape:collect="always" />
+ <linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3648"
- id="linearGradient3721"
- x1="-0.31546342"
- y1="2.5266564"
- x2="23.518356"
- y2="21.141323"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3027"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.032834,0,0,1.0916659,-0.29039613,-0.12398887)" />
+ gradientTransform="matrix(0.70514376,0,0,0.42662293,24.999177,5.8513009)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3665"
- id="linearGradient3733"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3031"
gradientUnits="userSpaceOnUse"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11"
- gradientTransform="translate(1.8418579e-7,10)" />
+ gradientTransform="matrix(0.70514376,0,0,0.42662293,25.618133,0.77586512)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3665"
- id="linearGradient3761"
+ xlink:href="#linearGradient3826"
+ id="linearGradient3832"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751"
gradientUnits="userSpaceOnUse"
- gradientTransform="translate(9.9999975,1)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(1.0970085,0,0,1.0002867,-23.066899,-0.2476131)" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3665"
- id="linearGradient3765"
+ xlink:href="#linearGradient3826"
+ id="linearGradient3840"
gradientUnits="userSpaceOnUse"
- gradientTransform="translate(9.9999981,10)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(0.45506937,0,0,0.71225112,-34.320711,12.705412)"
+ x1="-15.732942"
+ y1="10.538728"
+ x2="-14.341308"
+ y2="26.729496" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3665"
- id="linearGradient3769"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3856"
gradientUnits="userSpaceOnUse"
- gradientTransform="translate(19.000002,1)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(0.70514376,0,0,0.42662293,9.5252895,-1.8237475)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3665-6"
- id="linearGradient3794"
+ xlink:href="#linearGradient3850"
+ id="linearGradient3866"
gradientUnits="userSpaceOnUse"
- gradientTransform="translate(1.9999997,10)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(1.138293,0,0,0.2681129,31.273844,24.87561)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3665-6"
- id="linearGradient3798"
+ xlink:href="#linearGradient3826"
+ id="linearGradient3868"
gradientUnits="userSpaceOnUse"
- gradientTransform="translate(15.000001,1)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(1.1358636,0,0,1,-22.172833,1.4854933)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3665-6"
- id="linearGradient3802"
+ xlink:href="#linearGradient3826"
+ id="linearGradient3901"
gradientUnits="userSpaceOnUse"
- gradientTransform="translate(15.000002,10)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(3.6223632,0,0,0.20380729,47.077248,9.5138297)"
+ x1="-17.001196"
+ y1="-5.6625152"
+ x2="-16.928577"
+ y2="37.462383" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3715"
- id="linearGradient3646"
+ xlink:href="#linearGradient3826"
+ id="linearGradient3906"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1.0085347,0,0,-0.92400198,26.222385,24.816007)"
- x1="13"
- y1="8.5197887"
- x2="23.518356"
- y2="21.141323" />
- <inkscape:perspective
- id="perspective3666"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
+ gradientTransform="matrix(0.73511347,0,0,0.93221911,-33.700473,0.05361873)"
+ x1="-17.643429"
+ y1="-9.4478245"
+ x2="-14.92276"
+ y2="28.096996" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3923-6"
- id="linearGradient3931-4"
+ xlink:href="#linearGradient3826"
+ id="linearGradient4463"
gradientUnits="userSpaceOnUse"
- gradientTransform="translate(16.000001,10.999998)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(0.73511347,0,0,0.93221911,29.826789,1.1072494)"
+ x1="-17.643429"
+ y1="-9.4478245"
+ x2="-14.92276"
+ y2="28.096996" />
<linearGradient
- id="linearGradient3923-6">
- <stop
- id="stop3925-9"
- offset="0"
- style="stop-color:#7da0a8;stop-opacity:1" />
- <stop
- id="stop3927-2"
- offset="1"
- style="stop-color:#d9e4e7;stop-opacity:1;" />
- </linearGradient>
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.138293,0,0,0.2681129,48.295121,1.5409874)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4467"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.138293,0,0,0.2681129,48.295121,-8.6098834)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.138293,0,0,0.2681129,48.234422,11.270926)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3826"
+ id="linearGradient4471"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.73511347,0,0,0.93221911,20.272448,1.1677387)"
+ x1="-17.643429"
+ y1="-9.4478245"
+ x2="-14.92276"
+ y2="28.096996" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3826"
+ id="linearGradient4485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45506937,0,0,0.71225112,-44.595371,13.943323)"
+ x1="-15.732942"
+ y1="10.538728"
+ x2="-14.341308"
+ y2="26.729496" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4489"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.6223632,0,0,0.20380729,47.262935,9.0186658)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.6223632,0,0,0.20380729,47.201038,-0.07998031)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3715"
- id="linearGradient3799"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4497"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1.2466743,0,0,-1.1316794,31.175847,31.167266)"
- x1="13"
- y1="8.5197887"
- x2="23.518356"
- y2="21.141323" />
+ gradientTransform="matrix(3.6223632,0,0,0.20380729,47.201038,-9.0548357)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient5774"
- id="linearGradient3803"
+ xlink:href="#linearGradient3826"
+ id="linearGradient4501"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.99999982,0,0,0.72740301,-30.999997,-0.57038572)"
- x1="32.000004"
- y1="3.5336473"
- x2="-1.0000013"
- y2="7.6579084" />
+ gradientTransform="matrix(3.6223632,0,0,0.20380729,47.015352,0.04381034)"
+ x1="-17.001196"
+ y1="-5.6625152"
+ x2="-16.928577"
+ y2="37.462383" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3648"
- id="linearGradient3806"
+ xlink:href="#linearGradient3826"
+ id="linearGradient4505"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2767112,0,0,1.3370272,-1.5972457,0.62179177)"
- x1="-0.31546342"
- y1="2.5266564"
- x2="23.518356"
- y2="21.141323" />
+ gradientTransform="matrix(3.6223632,0,0,0.20380729,47.077247,-9.3643132)"
+ x1="-17.001196"
+ y1="-5.6625152"
+ x2="-16.928577"
+ y2="37.462383" />
</defs>
<sodipodi:namedview
id="base"
@@ -261,24 +388,25 @@
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
- inkscape:zoom="17.011593"
- inkscape:cx="9.7754732"
- inkscape:cy="14.237351"
+ inkscape:zoom="16.15625"
+ inkscape:cx="23.922631"
+ inkscape:cy="16.351171"
inkscape:document-units="px"
- inkscape:current-layer="g3845"
+ inkscape:current-layer="layer2"
inkscape:showpageshadow="false"
showborder="true"
borderlayer="top"
showgrid="true"
inkscape:grid-points="false"
- inkscape:window-width="1366"
- inkscape:window-height="706"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
inkscape:window-x="-8"
inkscape:window-y="-8"
width="32px"
height="32px"
inkscape:window-maximized="1"
- inkscape:snap-grids="false">
+ inkscape:snap-grids="false"
+ inkscape:snap-to-guides="false">
<inkscape:grid
id="GridFromPre046Settings"
type="xygrid"
@@ -290,7 +418,10 @@
empcolor="#9f9f9f"
opacity="0.10196078"
empopacity="0.25490196"
- empspacing="10" />
+ empspacing="10"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
@@ -325,47 +456,39 @@
</metadata>
<g
inkscape:groupmode="layer"
- id="layer4"
- inkscape:label="prof header"
- style="display:inline">
- <g
- id="g3845"
- transform="translate(1.0000014,1)">
- <rect
- style="fill:url(#linearGradient3806);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:0.61783040000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="rect10509"
- width="30"
- height="27.569721"
- x="-1.3333558e-006"
- y="2.4302771" />
- <rect
- transform="scale(-1,1)"
- style="fill:url(#linearGradient3803);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:0.63949221;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="rect10511"
- width="30"
- height="5.8429823"
- x="-29.999998"
- y="0.15701789" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc"
- id="rect3637"
- d="M 0.33716858,6.2974099 0.25383031,29.609904 1.0416654,29.666671 0.99999808,7.0000049 29.624998,7.0416712 l -0.0091,-0.7442568 -29.2786928,0 z"
- style="fill:url(#linearGradient3799);fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <g
- style="display:inline"
- inkscape:label="add"
- id="layer7" />
- <path
- style="fill:none;stroke:#585c65;stroke-width:0.69999999000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 10.512113,6.0526989 10.470446,30.052699"
- id="path3779"
- inkscape:connector-curvature="0" />
- <path
- id="path3781"
- d="M 20.419029,6.2634951 20.377359,30.263495"
- style="fill:none;stroke:#585c65;stroke-width:0.69999999000000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- inkscape:connector-curvature="0" />
- </g>
+ id="layer2"
+ inkscape:label="Layer"
+ style="display:inline"
+ transform="translate(0,16)">
+ <rect
+ ry="0.27661207"
+ rx="0"
+ y="5.999999"
+ x="-29.919258"
+ height="6.0812383"
+ width="28.054159"
+ id="rect4487"
+ style="fill:url(#linearGradient4489);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:url(#linearGradient4493);fill-opacity:1;stroke:none;display:inline"
+ id="rect4491"
+ width="28.054159"
+ height="6.0812383"
+ x="-29.981153"
+ y="-3.0986466"
+ rx="0"
+ ry="0.27661207" />
+ <rect
+ ry="0.27661207"
+ rx="0"
+ y="-12.073503"
+ x="-29.981155"
+ height="6.0812383"
+ width="28.054159"
+ id="rect4495"
+ style="fill:url(#linearGradient4497);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
</g>
</svg>
diff --git a/src/images/link.svg b/src/images/directory_arrow.svg
similarity index 54%
copy from src/images/link.svg
copy to src/images/directory_arrow.svg
index e1d2d12..5d5eea5 100644
--- a/src/images/link.svg
+++ b/src/images/directory_arrow.svg
@@ -13,27 +13,20 @@
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
- sodipodi:docname="link.svg">
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="directory_arrow.svg">
<defs
id="defs4">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 16 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="32 : 16 : 1"
- inkscape:persp3d-origin="16 : 10.666667 : 1"
- id="perspective14" />
<linearGradient
- id="linearGradient3759">
+ id="linearGradient3624">
<stop
- style="stop-color:#0f1934;stop-opacity:1;"
+ style="stop-color:#b2b2b2;stop-opacity:1;"
offset="0"
- id="stop3761" />
+ id="stop3626" />
<stop
- style="stop-color:#0f1123;stop-opacity:1;"
+ style="stop-color:#515151;stop-opacity:1;"
offset="1"
- id="stop3763" />
+ id="stop3628" />
</linearGradient>
</defs>
<sodipodi:namedview
@@ -43,22 +36,22 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="16.15625"
- inkscape:cx="-0.52526343"
- inkscape:cy="17.039481"
+ inkscape:zoom="15.46875"
+ inkscape:cx="-6.1737377"
+ inkscape:cy="16.354555"
inkscape:document-units="px"
- inkscape:current-layer="layer1"
+ inkscape:current-layer="layer3"
showgrid="true"
- inkscape:snap-grids="false"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
inkscape:snap-to-guides="false"
- inkscape:window-width="1885"
- inkscape:window-height="1144"
- inkscape:window-x="1916"
- inkscape:window-y="31"
- inkscape:window-maximized="1">
+ inkscape:snap-grids="true">
<inkscape:grid
type="xygrid"
- id="grid2985"
+ id="grid2831"
empspacing="5"
visible="true"
enabled="true"
@@ -96,22 +89,19 @@
</rdf:RDF>
</metadata>
<g
- inkscape:label="Layer 1"
inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1020.3622)">
- <rect
- style="fill:#ffffff;fill-opacity:1;stroke:#0c0c0d;stroke-width:1.05381035999999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect2987"
- width="31.17182"
- height="30.907959"
- x="0.53787953"
- y="1020.9786" />
+ id="layer3"
+ inkscape:label="arrow"
+ style="display:inline">
<path
- style="fill:#00112b;fill-opacity:1;stroke:none"
- d="m 25.356946,1044.3837 0.0031,-18.2581 -19.76294,0.047 6.734225,6.2099 c 0,0 -2.8911019,2.5538 -3.533378,5.4816 -0.4655709,2.1225 -0.8992526,7.6955 7.331605,11.1939 -1.861536,-4.5315 -1.902962,-6.3922 -0.904302,-8.6057 0.805852,-1.7862 2.952325,-2.6003 2.952325,-2.6003 2.588758,2.3511 4.554585,4.2169 7.178911,6.5345 z"
- id="path3757"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccscsccc" />
+ style="fill:#002255;fill-opacity:1;stroke:none"
+ d="M 10,24 22,16 10,8 z"
+ id="path3622"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
</g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="bar" />
</svg>
diff --git a/src/images/drawer.svg b/src/images/drawer.svg
index bb1c08c..eb50184 100644
--- a/src/images/drawer.svg
+++ b/src/images/drawer.svg
@@ -10,17 +10,28 @@
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
+ width="32"
+ height="32"
id="svg2"
sodipodi:version="0.32"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
version="1.0"
sodipodi:docname="drawer.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
<linearGradient
+ id="linearGradient3776">
+ <stop
+ id="stop3778"
+ offset="0"
+ style="stop-color:#b7dcf4;stop-opacity:1;" />
+ <stop
+ id="stop3780"
+ offset="1"
+ style="stop-color:#edf0f1;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
id="linearGradient2828">
<stop
id="stop2830"
@@ -38,7 +49,7 @@
offset="0"
id="stop3136" />
<stop
- style="stop-color:#b8c5c8;stop-opacity:1;"
+ style="stop-color:#edf0f1;stop-opacity:1;"
offset="1"
id="stop3138" />
</linearGradient>
@@ -51,33 +62,43 @@
y1="58.145554"
x2="38.280991"
y2="27.284977"
- gradientTransform="matrix(0.7010416,0,0,0.6043896,-46.559891,4.7317659)" />
+ gradientTransform="matrix(0.45470628,0,0,0.45176478,-46.471748,1.5241964)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2828"
id="linearGradient2849"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,-1.092724,1.0174397,0,-0.8065182,28.792278)"
+ gradientTransform="matrix(0,-0.70875749,0.76050848,0,31.041099,10.664311)"
x1="4.7154722"
y1="10.295263"
x2="-22.359737"
y2="34.304337" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient2828"
+ xlink:href="#linearGradient3776"
id="linearGradient3629"
- x1="-16.24024"
- y1="35.806011"
- x2="1.2411834"
- y2="21.927578"
+ x1="-7.9329214"
+ y1="24.043108"
+ x2="-18.725143"
+ y2="22.705267"
gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-30.190925,0.05498628)" />
+ gradientTransform="matrix(0.64861526,0,0,0.74747279,-35.854586,-1.9715691)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3134"
id="linearGradient3645"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,0.68598001,-0.57554319,0,42.404582,2.2282024)"
+ gradientTransform="matrix(0,0.44493712,-0.43020286,0,29.683601,17.71754)"
+ x1="4.2422905"
+ y1="58.145554"
+ x2="38.280991"
+ y2="27.284977" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3134"
+ id="linearGradient3768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0,0.44493712,-0.43020286,0,21.505357,-3.2313464)"
x1="4.2422905"
y1="58.145554"
x2="38.280991"
@@ -94,22 +115,26 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="15.895833"
- inkscape:cx="24"
- inkscape:cy="24"
+ inkscape:cx="13.997379"
+ inkscape:cy="22.686474"
inkscape:document-units="px"
inkscape:current-layer="layer1"
width="48px"
height="48px"
showgrid="true"
- inkscape:window-width="1885"
- inkscape:window-height="1104"
- inkscape:window-x="31"
- inkscape:window-y="31"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
inkscape:window-maximized="1"
- inkscape:snap-grids="false">
+ inkscape:snap-grids="true">
<inkscape:grid
type="xygrid"
- id="grid3647" />
+ id="grid3647"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
@@ -119,7 +144,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
<cc:license
rdf:resource="Apache License 2.0" />
<dc:creator>
@@ -146,38 +171,47 @@
inkscape:groupmode="layer"
id="layer2"
inkscape:label="l1"
- style="display:inline">
+ style="display:inline"
+ transform="translate(0,-16)">
<rect
- style="fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect2161"
- width="42.984715"
- height="36.924061"
- x="-45.492359"
- y="5.5682945"
+ width="27.880543"
+ height="27.59973"
+ x="-45.779335"
+ y="2.1494787"
transform="matrix(0,-1,1,0,0,0)" />
<path
style="fill:url(#linearGradient3645);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 41.583872,6.0546369 -32.410993,0.06375 -0.1255942,25.8046961 -2.6081963,0 0,-28.6521537 35.1447835,0 0,2.7837088 z"
+ d="m 29.070143,20.199423 -24.2263355,0.04135 -0.093879,16.737321 -1.9495557,0 0,-18.584225 26.269769,0 0,1.805556 z"
id="rect3631"
- sodipodi:nodetypes="ccccccc" />
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0" />
</g>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
- style="display:inline">
+ style="display:inline"
+ transform="translate(0,-16)">
<rect
- style="fill:url(#linearGradient3629);fill-opacity:1;fill-rule:evenodd;stroke:#24344d;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient3629);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3153"
- width="12.739919"
- height="36.920658"
- x="-45.531166"
- y="5.5946541"
+ width="8.2633066"
+ height="27.597187"
+ x="-45.804504"
+ y="2.1691821"
transform="matrix(0,-1,1,0,0,0)" />
<path
- style="fill:url(#linearGradient2849);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 6.4757718,33.59178 35.1016712,0 -0.06291,2.640254 -32.6007532,-0.125819 0.06291,8.578158 -2.500918,-0.06291 0,-11.029683 z"
- id="rect2839"
- sodipodi:nodetypes="ccccccc" />
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 11,38 0,7.939712"
+ id="path3770"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 21,38 0,8"
+ id="path3772"
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/src/images/drawer_close.svg b/src/images/drawer_close.svg
new file mode 100644
index 0000000..f3e90d8
--- /dev/null
+++ b/src/images/drawer_close.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="drawer_close.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient3760">
+ <stop
+ id="stop3762"
+ offset="0"
+ style="stop-color:#676363;stop-opacity:1;" />
+ <stop
+ id="stop3764"
+ offset="1"
+ style="stop-color:#f4f4f4;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4000">
+ <stop
+ style="stop-color:#da0a0a;stop-opacity:1;"
+ offset="0"
+ id="stop4002" />
+ <stop
+ style="stop-color:#f9bdbd;stop-opacity:1;"
+ offset="1"
+ id="stop4004" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3760"
+ id="linearGradient4006"
+ x1="0.76666671"
+ y1="30.486666"
+ x2="33.526669"
+ y2="7.0666671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93451327,0,0,0.98521257,1.0298524,0.55304991)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.15625"
+ inkscape:cx="6.344294"
+ inkscape:cy="16"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer7"
+ showgrid="true"
+ inkscape:snap-grids="false"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2816"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="Layer" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="left">
+ <path
+ sodipodi:type="star"
+ style="fill:#8e9590;fill-opacity:1;stroke:#6b6b6b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path3768"
+ sodipodi:sides="3"
+ sodipodi:cx="8.9129591"
+ sodipodi:cy="9.6557064"
+ sodipodi:r1="8.79004"
+ sodipodi:r2="4.39502"
+ sodipodi:arg1="0.014083576"
+ sodipodi:arg2="1.0612811"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 17.702127,9.7794975 11.056648,13.492476 4.4111687,17.205454 4.518375,9.593811 4.6255812,1.9821678 11.163854,5.8808326 z"
+ inkscape:transform-center-x="-0.0077246867"
+ inkscape:transform-center-y="3.8423729"
+ transform="matrix(0.02229967,1.7514857,-1.7080924,0.02286618,32.074244,-2.8731395)" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer8"
+ inkscape:label="screw" />
+</svg>
diff --git a/src/images/drawer_open.svg b/src/images/drawer_open.svg
new file mode 100644
index 0000000..284613c
--- /dev/null
+++ b/src/images/drawer_open.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="drawer_open.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient3760">
+ <stop
+ id="stop3762"
+ offset="0"
+ style="stop-color:#676363;stop-opacity:1;" />
+ <stop
+ id="stop3764"
+ offset="1"
+ style="stop-color:#f4f4f4;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4000">
+ <stop
+ style="stop-color:#da0a0a;stop-opacity:1;"
+ offset="0"
+ id="stop4002" />
+ <stop
+ style="stop-color:#f9bdbd;stop-opacity:1;"
+ offset="1"
+ id="stop4004" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3760"
+ id="linearGradient4006"
+ x1="0.76666671"
+ y1="30.486666"
+ x2="33.526669"
+ y2="7.0666671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.93451327,0,0,0.98521257,1.0298524,0.55304991)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.15625"
+ inkscape:cx="6.344294"
+ inkscape:cy="16"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer7"
+ showgrid="true"
+ inkscape:snap-grids="false"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2816"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="Layer" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="left">
+ <path
+ sodipodi:type="star"
+ style="fill:#8e9590;fill-opacity:1;stroke:#6b6b6b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path3768"
+ sodipodi:sides="3"
+ sodipodi:cx="8.9129591"
+ sodipodi:cy="9.6557064"
+ sodipodi:r1="8.79004"
+ sodipodi:r2="4.39502"
+ sodipodi:arg1="0.014083576"
+ sodipodi:arg2="1.0612811"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 17.702127,9.7794975 11.056648,13.492476 4.4111687,17.205454 4.518375,9.593811 4.6255812,1.9821678 11.163854,5.8808326 z"
+ inkscape:transform-center-x="-4.1408629"
+ inkscape:transform-center-y="-0.0076893717"
+ transform="matrix(1.8875478,-0.02219372,0.02464251,1.6999775,-4.9585582,0.09597224)" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer8"
+ inkscape:label="screw" />
+</svg>
diff --git a/src/images/duplicate.svg b/src/images/duplicate.svg
index 5f200ad..735684f 100644
--- a/src/images/duplicate.svg
+++ b/src/images/duplicate.svg
@@ -10,8 +10,8 @@
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
+ width="32"
+ height="32"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.48.2 r9819"
@@ -38,7 +38,7 @@
offset="0"
id="stop3136" />
<stop
- style="stop-color:#ededed;stop-opacity:1;"
+ style="stop-color:#abc8d1;stop-opacity:1;"
offset="1"
id="stop3138" />
</linearGradient>
@@ -51,7 +51,7 @@
y1="58.145554"
x2="38.280991"
y2="27.284977"
- gradientTransform="matrix(0.49276403,0,0,0.6043896,-45.895596,7.3436429)" />
+ gradientTransform="matrix(0.28901431,0,0,0.29123343,-29.252358,26.663641)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2828"
@@ -67,7 +67,7 @@
xlink:href="#linearGradient3134"
id="linearGradient3645"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.67694305,0,0,-0.57657342,14.915915,45.0191)"
+ gradientTransform="matrix(0.39801128,0,0,-0.27342092,10.998458,44.653449)"
x1="4.2422905"
y1="58.145554"
x2="38.280991"
@@ -77,7 +77,7 @@
xlink:href="#linearGradient3134"
id="linearGradient3645-4"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.54304224,0,0,-0.40662859,2.8728752,29.159527)"
+ gradientTransform="matrix(0.37169411,0,0,-0.2466681,2.9715811,34.826981)"
x1="4.2422905"
y1="58.145554"
x2="38.280991"
@@ -98,7 +98,7 @@
x2="38.280991"
y1="58.145554"
x1="4.2422905"
- gradientTransform="matrix(0.39529424,0,0,0.42624594,-27.724709,2.7776266)"
+ gradientTransform="matrix(0.27056558,0,0,0.25856832,-20.058287,18.593861)"
gradientUnits="userSpaceOnUse"
id="linearGradient2854"
xlink:href="#linearGradient3134"
@@ -114,11 +114,11 @@
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="15.895833"
- inkscape:cx="13.395779"
- inkscape:cy="24"
+ inkscape:zoom="26.15625"
+ inkscape:cx="16"
+ inkscape:cy="16"
inkscape:document-units="px"
- inkscape:current-layer="layer1"
+ inkscape:current-layer="layer2"
width="48px"
height="48px"
showgrid="true"
@@ -130,7 +130,11 @@
inkscape:snap-grids="false">
<inkscape:grid
type="xygrid"
- id="grid3647" />
+ id="grid3647"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
@@ -167,18 +171,19 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
- style="display:inline">
+ style="display:inline"
+ transform="translate(0,-16)">
<rect
- style="fill:url(#linearGradient2854);fill-opacity:1;fill-rule:evenodd;stroke:#0c0c0c;stroke-width:1.79999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="fill:url(#linearGradient2854);fill-opacity:1;fill-rule:evenodd;stroke:#0c0c0c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
id="rect2161-4"
- width="24.237663"
- height="26.040705"
- x="-27.122765"
- y="3.3675885"
+ width="16.589863"
+ height="15.796752"
+ x="-19.646275"
+ y="18.951744"
transform="scale(-1,1)" />
<path
- style="fill:url(#linearGradient3645-4);fill-opacity:1.0;fill-rule:evenodd;stroke:none;display:inline"
- d="M 5.8286102,28.283713 5.9524614,5.6809052 26.1915,5.5921716 l 0,-1.7169044 -22.4931713,-0.1258196 0.2201571,24.4602754 1.9101244,0.07399 z"
+ style="fill:url(#linearGradient3645-4);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 4.9946821,34.295697 0.084772,-13.711264 13.8529399,-0.05382 0,-1.041504 -15.3958178,-0.07632 0.1506901,14.838035 1.3074158,0.04489 z"
id="rect3631-7"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -187,19 +192,21 @@
inkscape:groupmode="layer"
id="layer2"
inkscape:label="l1"
- style="display:inline">
+ style="display:inline"
+ transform="translate(0,-16)">
<rect
- style="fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#000205;stroke-width:1.79999994999999990;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#000205;stroke-width:0.99579608;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect2161"
- width="30.214071"
- height="36.924061"
- x="-45.145226"
- y="8.180172"
+ width="17.721056"
+ height="17.792362"
+ x="-28.812252"
+ y="27.066732"
transform="scale(-1,1)" />
<path
style="fill:url(#linearGradient3645);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 18.691941,44.196921 0.06291,-32.469009 25.464751,-0.125819 0,-2.6128646 -28.274697,0 0,35.2076926 2.747037,0 z"
+ d="m 13.218587,44.263557 0.03699,-15.397356 14.972099,-0.05966 0,-1.239066 -16.624218,0 0,16.696087 1.615131,0 z"
id="rect3631"
- sodipodi:nodetypes="ccccccc" />
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/src/images/edit.svg b/src/images/edit.svg
index fb86177..fd27835 100644
--- a/src/images/edit.svg
+++ b/src/images/edit.svg
@@ -27,7 +27,7 @@
<stop
id="stop3712-2"
offset="0"
- style="stop-color:#dcdcdc;stop-opacity:1;" />
+ style="stop-color:#f8f8f8;stop-opacity:1;" />
<stop
id="stop3714-2"
offset="1"
@@ -38,7 +38,7 @@
x2="23.48575"
y1="30.518726"
x1="4.5201936"
- gradientTransform="matrix(1.0420975,0,0,0.96389885,-0.17180634,0.90619192)"
+ gradientTransform="matrix(1.0420975,0,0,0.93450031,-0.17180634,0.96498889)"
gradientUnits="userSpaceOnUse"
id="linearGradient3110"
xlink:href="#linearGradient3710-9"
@@ -127,7 +127,7 @@
inkscape:zoom="26.28125"
inkscape:cx="16.450691"
inkscape:cy="15.079834"
- inkscape:current-layer="layer8"
+ inkscape:current-layer="layer2"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
@@ -138,8 +138,8 @@
inkscape:window-maximized="0"
inkscape:snap-smooth-nodes="false"
inkscape:object-nodes="false"
- inkscape:snap-grids="false"
- inkscape:snap-to-guides="false">
+ inkscape:snap-grids="true"
+ inkscape:snap-to-guides="true">
<inkscape:grid
type="xygrid"
id="grid3734"
@@ -185,10 +185,11 @@
inkscape:label="paper 2"
style="display:inline">
<path
- style="fill:url(#linearGradient3110);fill-opacity:1;stroke:#080808;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 5.0386825,2.8339896 0,26.9891684 21.8840475,0 0,-19.277978 -8.044056,0.06932 0.07493,-7.7111895 -13.9149278,-0.06931 z"
+ style="fill:url(#linearGradient3110);fill-opacity:1;stroke:#080808;stroke-width:0.98463219;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 5.0386825,2.8339896 0,26.1660104 21.8840475,0 0,-18.690008 -8.044056,0.0672 0.07493,-7.4760006 -13.9149278,-0.067196 z"
id="path3698-4"
- sodipodi:nodetypes="ccccccc" />
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0" />
</g>
<g
id="layer1"
diff --git a/src/images/editcopy.svg b/src/images/editcopy.svg
index f1441b1..796fe07 100644
--- a/src/images/editcopy.svg
+++ b/src/images/editcopy.svg
@@ -14,7 +14,7 @@
height="32"
id="svg1455"
sodipodi:version="0.32"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="editcopy.svg"
inkscape:export-xdpi="120.00000"
inkscape:export-ydpi="120.00000"
@@ -27,7 +27,7 @@
<stop
id="stop3712-2"
offset="0"
- style="stop-color:#cccccc;stop-opacity:1" />
+ style="stop-color:#e1e1e1;stop-opacity:1;" />
<stop
id="stop3714-2"
offset="1"
@@ -48,7 +48,7 @@
<stop
id="stop3712-2-9"
offset="0"
- style="stop-color:#cccccc;stop-opacity:1" />
+ style="stop-color:#e1e1e1;stop-opacity:1;" />
<stop
id="stop3714-2-2"
offset="1"
@@ -73,17 +73,17 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="26.28125"
- inkscape:cx="15.499443"
+ inkscape:cx="9.5636523"
inkscape:cy="16.184033"
- inkscape:current-layer="layer3"
+ inkscape:current-layer="layer2"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
- inkscape:window-width="1438"
- inkscape:window-height="1146"
- inkscape:window-x="300"
- inkscape:window-y="25"
- inkscape:window-maximized="0"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
inkscape:snap-smooth-nodes="false"
inkscape:object-nodes="false"
inkscape:snap-grids="false">
@@ -132,7 +132,7 @@
inkscape:label="paper 2"
style="display:inline">
<path
- style="fill:url(#linearGradient3110);fill-opacity:1;stroke:#717171;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="fill:url(#linearGradient3110);fill-opacity:1;stroke:#000000;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 2.4132344,1.6163914 0,20.1401796 14.3882116,0 0,-14.3858432 -5.288765,0.051729 0.04926,-5.7543356 -9.1487157,-0.051721 z"
id="path3698-4"
sodipodi:nodetypes="ccccccc" />
@@ -144,7 +144,7 @@
transform="translate(0,-16)"
style="display:inline">
<path
- style="fill:none;stroke:#717171;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="fill:none;stroke:#000000;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 11.661407,17.554636 5.216396,5.6884"
id="path3783-4"
sodipodi:nodetypes="cc" />
@@ -154,12 +154,12 @@
id="layer3"
inkscape:label="paper3">
<path
- style="fill:url(#linearGradient3975);fill-opacity:1;stroke:#717171;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="fill:url(#linearGradient3975);fill-opacity:1;stroke:#000000;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 15.23621,10.419803 0,19.91188 14.388211,0 0,-14.222772 -5.288765,0.05114 0.04926,-5.689108 -9.148716,-0.05114 z"
id="path3698-4-2"
sodipodi:nodetypes="ccccccc" />
<path
- style="fill:none;stroke:#717171;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="fill:none;stroke:#000000;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 24.508121,10.336588 5.24502,5.693268"
id="path3783-4-4"
sodipodi:nodetypes="cc" />
diff --git a/src/images/editcut.svg b/src/images/editcut.svg
index b60e4c2..8314a02 100644
--- a/src/images/editcut.svg
+++ b/src/images/editcut.svg
@@ -14,7 +14,7 @@
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="editcut.svg">
<defs
id="defs4">
@@ -32,11 +32,11 @@
<linearGradient
id="linearGradient3885">
<stop
- style="stop-color:#d2d2d2;stop-opacity:1;"
+ style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3887" />
<stop
- style="stop-color:#d4d4d4;stop-opacity:1;"
+ style="stop-color:#ebebeb;stop-opacity:1;"
offset="1"
id="stop3889" />
</linearGradient>
@@ -63,11 +63,11 @@
<linearGradient
id="linearGradient3885-4">
<stop
- style="stop-color:#d7d7d7;stop-opacity:1;"
+ style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3887-1" />
<stop
- style="stop-color:#d4d4d4;stop-opacity:1;"
+ style="stop-color:#ebebeb;stop-opacity:1;"
offset="1"
id="stop3889-7" />
</linearGradient>
@@ -98,17 +98,17 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="18.75"
- inkscape:cx="8.7199422"
+ inkscape:cx="0.3999422"
inkscape:cy="16.554812"
inkscape:document-units="px"
- inkscape:current-layer="layer6"
+ inkscape:current-layer="layer7"
showgrid="true"
inkscape:snap-grids="false"
- inkscape:window-width="1599"
- inkscape:window-height="990"
- inkscape:window-x="214"
- inkscape:window-y="35"
- inkscape:window-maximized="0">
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid2816"
@@ -158,7 +158,7 @@
id="path3865"
sodipodi:nodetypes="cccssssscccscsssc" />
<path
- style="fill:url(#linearGradient3883);fill-opacity:1;stroke:#4e4e4e;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:url(#linearGradient3883);fill-opacity:1;stroke:#0a0a0a;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 17.37347,18.566209 c 0,0 -8.6152304,-8.6521771 -9.6391977,-14.3121167 C 7.574868,3.3729914 8.3591107,1.6415621 8.3591107,1.6415621 L 19.933647,16.326744 17.37347,18.566209 z"
id="path3873"
sodipodi:nodetypes="caccc" />
@@ -173,10 +173,11 @@
id="path3865-9"
sodipodi:nodetypes="cccssssscccscsssc" />
<path
- style="fill:url(#linearGradient3883-0);fill-opacity:1;stroke:#4e4e4e;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 14.869694,18.326902 c 0,0 8.61523,-8.6521764 9.639198,-14.3121164 0.159404,-0.8811009 -0.624839,-2.6125302 -0.624839,-2.6125302 l -11.574536,14.6851816 2.560177,2.239465 z"
+ style="fill:url(#linearGradient3883-0);fill-opacity:1;stroke:#0a0a0a;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 14.869694,18.326902 c 0,0 4.614322,-4.634111 7.49038,-9.3379801 C 23.413877,7.2654002 24.234312,5.5325133 24.508892,4.0147856 24.668296,3.1336848 23.884053,1.4022554 23.884053,1.4022554 L 12.309517,16.087437 z"
id="path3873-3"
- sodipodi:nodetypes="caccc" />
+ sodipodi:nodetypes="cssccc"
+ inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
diff --git a/src/images/examine.svg b/src/images/examine.svg
index bc67fbc..ee1bc95 100755
--- a/src/images/examine.svg
+++ b/src/images/examine.svg
@@ -19,24 +19,35 @@
<defs
id="defs4">
<linearGradient
+ id="linearGradient3792">
+ <stop
+ style="stop-color:#eceded;stop-opacity:1;"
+ offset="0"
+ id="stop3794" />
+ <stop
+ style="stop-color:#b5c6d0;stop-opacity:1;"
+ offset="1"
+ id="stop3796" />
+ </linearGradient>
+ <linearGradient
id="linearGradient3804">
<stop
- style="stop-color:#93481b;stop-opacity:1;"
+ style="stop-color:#464c90;stop-opacity:1;"
offset="0"
id="stop3806" />
<stop
- style="stop-color:#c17242;stop-opacity:1;"
+ style="stop-color:#355560;stop-opacity:1;"
offset="1"
id="stop3808" />
</linearGradient>
<linearGradient
id="linearGradient3796">
<stop
- style="stop-color:#f4f421;stop-opacity:1;"
+ style="stop-color:#545d96;stop-opacity:1;"
offset="0"
id="stop3798" />
<stop
- style="stop-color:#ed8159;stop-opacity:1;"
+ style="stop-color:#76a1ab;stop-opacity:1;"
offset="1"
id="stop3800" />
</linearGradient>
@@ -194,12 +205,30 @@
inkscape:collect="always"
xlink:href="#linearGradient3796"
id="linearGradient3802"
- x1="15.914507"
- y1="23.599308"
- x2="30.455095"
- y2="23.599308"
+ x1="16.469282"
+ y1="19.969231"
+ x2="30.424255"
+ y2="29.308765"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2121763,-0.04965461,0.04965461,1.2121763,-7.0612789,-5.2490049)" />
+ gradientTransform="matrix(1.0888164,-0.04400451,0.04460139,1.0742453,-3.5520659,-1.0646126)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3804"
+ id="linearGradient3810"
+ x1="-4.8221865"
+ y1="14.796071"
+ x2="-2.044286"
+ y2="16.069"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3792"
+ id="linearGradient3798"
+ x1="-5.485003"
+ y1="15.777266"
+ x2="-0.78516209"
+ y2="15.000709"
+ gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
@@ -209,17 +238,17 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="18.09375"
- inkscape:cx="9.9491394"
+ inkscape:cx="7.3782383"
inkscape:cy="16"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="true"
inkscape:snap-grids="false"
- inkscape:window-width="1881"
- inkscape:window-height="1026"
- inkscape:window-x="-8"
- inkscape:window-y="-8"
- inkscape:window-maximized="1">
+ inkscape:window-width="1349"
+ inkscape:window-height="768"
+ inkscape:window-x="90"
+ inkscape:window-y="107"
+ inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid2816"
@@ -271,8 +300,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:url(#linearGradient3802);fill-opacity:1;stroke:#000000;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 13.780035,16.981945 3.164712,-3.015223 13.655024,12.258011 -1.096124,2.729167 -2.890113,1.527625 z"
+ style="fill:url(#linearGradient3802);fill-opacity:1;stroke:#47475d;stroke-width:1.08241331999999990px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 15.168282,18.636722 2.842647,-2.672126 12.265389,10.863197 -0.984575,2.41862 -2.595995,1.3538 z"
id="path3794"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
@@ -284,13 +313,13 @@
style="display:inline">
<path
sodipodi:type="arc"
- style="fill:#ebf2f2;fill-opacity:1;stroke:#000000;stroke-width:1.56218109;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path3849"
- sodipodi:cx="-18.321243"
- sodipodi:cy="31.392056"
- sodipodi:rx="7.599309"
- sodipodi:ry="7.1848016"
- d="m -10.721934,31.392056 a 7.599309,7.1848016 0 1 1 -15.198618,0 7.599309,7.1848016 0 1 1 15.198618,0 z"
- transform="matrix(1.2448556,0,0,1.316674,34.176042,-30.152621)" />
+ style="fill:url(#linearGradient3798);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3810);stroke-width:0.57523709999999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995000000010;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ id="path3869"
+ sodipodi:cx="-3.3759081"
+ sodipodi:cy="15.175204"
+ sodipodi:rx="2.6094856"
+ sodipodi:ry="1.2408743"
+ d="m -0.76642251,15.175204 a 2.6094856,1.2408743 0 1 1 -5.21897129,0 2.6094856,1.2408743 0 1 1 5.21897129,0 z"
+ transform="matrix(3.6787747,-0.22457079,0.50928106,7.3623341,16.260354,-101.24139)" />
</g>
</svg>
diff --git a/src/images/folder.svg b/src/images/folder.svg
index fb5a7ce..484638b 100644
--- a/src/images/folder.svg
+++ b/src/images/folder.svg
@@ -14,7 +14,7 @@
height="64px"
id="svg2985"
version="1.1"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="FOLDER.svg"
sodipodi:version="0.32"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
@@ -23,26 +23,97 @@
<defs
id="defs2987">
<linearGradient
- id="linearGradient3753">
+ id="linearGradient5915">
<stop
- style="stop-color:#e2c36e;stop-opacity:1;"
+ id="stop5917"
offset="0"
- id="stop3755" />
+ style="stop-color:#e9a552;stop-opacity:1;" />
<stop
- style="stop-color:#ffef8a;stop-opacity:0.34210527;"
+ id="stop5919"
offset="1"
- id="stop3757" />
+ style="stop-color:#e7d28b;stop-opacity:1;" />
</linearGradient>
<linearGradient
+ id="linearGradient3782">
+ <stop
+ style="stop-color:#6a6d71;stop-opacity:1;"
+ offset="0"
+ id="stop3784" />
+ <stop
+ style="stop-color:#606164;stop-opacity:1;"
+ offset="1"
+ id="stop3786" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3765">
+ <stop
+ style="stop-color:#e8c25e;stop-opacity:1;"
+ offset="0"
+ id="stop3767" />
+ <stop
+ style="stop-color:#f7e198;stop-opacity:1;"
+ offset="1"
+ id="stop3769" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3775">
+ <stop
+ id="stop3777"
+ offset="0"
+ style="stop-color:#f5f5f5;stop-opacity:1;" />
+ <stop
+ id="stop3779"
+ offset="1"
+ style="stop-color:#d3d8da;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3765"
+ id="linearGradient3771"
+ x1="42.063648"
+ y1="53.744427"
+ x2="6.6376882"
+ y2="20.168556"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97402742,0,0,0.98533799,0.9262646,-0.51992866)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3775"
+ id="linearGradient3776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.51031759,0,0,-0.10859702,5.7447143,12.683803)"
+ x1="35.657509"
+ y1="8.7720575"
+ x2="10.400817"
+ y2="59.972881" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3782"
+ id="linearGradient3788"
+ x1="71.889565"
+ y1="61.835026"
+ x2="-7.6111097"
+ y2="20.009457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97402742,0,0,0.98533799,1.0519451,0.22244489)" />
+ <linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3753"
- id="linearGradient3759"
- x1="20.381924"
- y1="25.776665"
- x2="36.550461"
- y2="-0.56834435"
+ xlink:href="#linearGradient5915"
+ id="linearGradient3908"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0942429,0,0,1.0732344,-1.9950829,-1.8776448)" />
+ gradientTransform="matrix(0.97812443,0,0,0.96376754,0.26680554,0.27169084)"
+ x1="57.456539"
+ y1="55.657021"
+ x2="21.214657"
+ y2="28.643499" />
+ <filter
+ inkscape:collect="always"
+ id="filter3958">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.52577735"
+ id="feGaussianBlur3960" />
+ </filter>
</defs>
<sodipodi:namedview
id="base"
@@ -51,22 +122,26 @@
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
- inkscape:zoom="10.27"
- inkscape:cx="14.271484"
- inkscape:cy="29.889877"
+ inkscape:zoom="13.078125"
+ inkscape:cx="19.842294"
+ inkscape:cy="31.016187"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
- inkscape:window-width="1672"
- inkscape:window-height="973"
- inkscape:window-x="0"
- inkscape:window-y="0"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:snap-from-guide="false"
objecttolerance="2"
gridtolerance="2"
- guidetolerance="2">
+ guidetolerance="2"
+ inkscape:snap-grids="false"
+ inkscape:snap-to-guides="false"
+ showguides="true"
+ inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid2995"
@@ -83,7 +158,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title>Metview icon</dc:title>
<cc:license
rdf:resource="Apache License 2.0" />
<dc:creator>
@@ -107,20 +182,45 @@
</rdf:RDF>
</metadata>
<g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="bg" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="back"
+ style="display:inline">
+ <path
+ sodipodi:nodetypes="cscsssccscc"
+ inkscape:connector-curvature="0"
+ id="path3773"
+ d="m 14.639003,18.145717 c 0,0 -10.8865307,1.596686 -10.8865307,0.36494 l 0,-10.8387185 C 4.1886774,4.486631 6.9531595,4.9691395 8.6280197,4.9691395 l 12.8291753,0 c 3.723824,0 4.890189,5.0308615 7.51339,5.0308615 l 14.60995,0 13.290761,0 c 2.624204,-0.025138 4.203767,0.05826 4.231965,2.598628 l 0.06562,5.912028 z"
+ style="fill:url(#linearGradient3776);fill-opacity:1;stroke:#67697a;stroke-width:0.97966641000000021;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
- style="fill:url(#linearGradient3759);fill-opacity:1;stroke:#000000;stroke-width:0.91029769000000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 15,11 1.581791,-6.9553125 12.469348,3.7367772 2.255924,-3.4100421 9.343738,2.403001 -0.330091,4.3734044 c 7.786256,2.404387 11.284931,2.859172 19.842246,4.961637 L 51.55289,61.721726 7.8648109,40.823438 4.7046001,8.1600399 24.33753,14.182435 l -0.156955,3.272483 11.16368,3.580674 0.959165,-3.353576 13.555361,3.888862 1.763869,39.771774"
- id="rect2984"
+ style="fill:url(#linearGradient3771);fill-opacity:1;stroke:url(#linearGradient3788);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 2.2227165,15.900209 3,58 61.647623,58.150685 c 0.01089,-0.03484 0.09732,-9.244196 0.186629,-19.082195 0.102615,-11.304034 0.209032,-23.438023 0.209032,-23.438023 z"
+ id="path2995"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccccccc" />
+ sodipodi:nodetypes="cccscc" />
+ <rect
+ style="fill:#939dac;fill-opacity:1;stroke:none"
+ id="rect3780"
+ width="16.300121"
+ height="2.2715573"
+ x="6.0729151"
+ y="7.5083022"
+ rx="0"
+ ry="0" />
<path
- style="fill:#0056c8;fill-opacity:1;stroke:#0056c8;stroke-width:0.89524412;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
- d="M 31.5222,5.3369036 39.610516,7.4558961 39.486855,11 30,8 31.5222,5.3369036 z"
- id="rect3761"
+ style="fill:url(#linearGradient3908);fill-opacity:1.0;stroke:none;filter:url(#filter3958)"
+ d="m 60.74873,16.781922 -7.969482,0.152927 c 0.811526,2.291673 1.223877,3.868364 1.223877,6.341886 0,15.977042 -17.99942,28.915335 -40.199634,28.915335 -4.0250374,0 -6.1915181,-0.323257 -9.8580012,-1.115606 L 3.9312729,56.898826 60.334674,57.12812 C 59.364188,56.213801 60.748742,16.781922 60.74873,16.781922 z"
+ id="path3893"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
+ sodipodi:nodetypes="ccsscccc" />
</g>
</svg>
diff --git a/src/images/history.svg b/src/images/history.svg
index 56f33ef..acaed53 100644
--- a/src/images/history.svg
+++ b/src/images/history.svg
@@ -346,15 +346,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="13.75"
- inkscape:cx="16"
+ inkscape:cx="4.6545455"
inkscape:cy="14.50303"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="true"
width="64px"
inkscape:snap-grids="false"
- inkscape:window-width="914"
- inkscape:window-height="629"
+ inkscape:window-width="1482"
+ inkscape:window-height="934"
inkscape:window-x="54"
inkscape:window-y="23"
inkscape:window-maximized="0"
@@ -375,7 +375,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
<cc:license
rdf:resource="Apache License 2.0" />
<dc:creator>
@@ -404,9 +404,11 @@
inkscape:label="desktop"
style="display:inline">
<path
- style="fill:#a6b4e3;stroke:#446f8a;stroke-width:0.99999994000000003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
- d="M 16.21875 1.3125 C 8.0951569 1.3125 1.5 7.8764068 1.5 16 C 1.5 24.123593 8.0951569 30.71875 16.21875 30.71875 C 24.342343 30.71875 30.90625 24.123593 30.90625 16 C 30.90625 7.8764068 24.342343 1.3125 16.21875 1.3125 z M 16.21875 3.40625 C 23.17696 3.40625 28.8125 9.04179 28.8125 16 C 28.8125 22.95821 23.17696 28.625 16.21875 28.625 C 9.2605402 28.625 3.625 22.95821 3.625 16 C 3.625 9.04179 9.2605402 3.40625 16.21875 3.40625 z "
- id="path3070" />
+ style="fill:#a6b4e3;fill-opacity:1;stroke:#000000;stroke-width:0.99999994000000003;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 16.21875,1.3125 C 8.0951569,1.3125 1.5,7.8764068 1.5,16 c 0,8.123593 6.5951569,14.71875 14.71875,14.71875 7.383192,0 13.478049,-5.44775 14.527712,-12.539474 C 30.851725,17.468105 30.90625,16.740401 30.90625,16 c 0,-8.1235932 -6.563907,-14.6875 -14.6875,-14.6875 z m 0,2.09375 c 6.95821,0 12.59375,5.63554 12.59375,12.59375 0,6.95821 -5.63554,12.625 -12.59375,12.625 C 9.2605402,28.625 3.625,22.95821 3.625,16 3.625,9.04179 9.2605402,3.40625 16.21875,3.40625 z"
+ id="path3070"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssss" />
</g>
<g
inkscape:groupmode="layer"
@@ -418,7 +420,7 @@
inkscape:label="hand"
style="display:inline">
<path
- style="fill:#7bbfcf;fill-opacity:1;stroke:#3c6d92;stroke-width:1.02823055000000000px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ style="fill:#7bbfcf;fill-opacity:1;stroke:#1e2d38;stroke-width:1.02823055000000000px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
d="m 15.927272,16.286745 -1.018181,-9.119003 1.163636,-2.7222873 1.018182,2.803343 -0.578881,4.2845913 -0.584756,4.830247"
id="path3843"
inkscape:connector-curvature="0"
@@ -428,10 +430,10 @@
inkscape:connector-curvature="0"
id="path3845"
d="m 16.611446,16.512283 5.416144,3.47022 1.326995,2.195284 -2.065572,-0.867277 -2.232824,-2.203655 -1.78106,-1.882519 -1.116216,-0.993233"
- style="fill:#7bbfcf;fill-opacity:1;stroke:#3c6d92;stroke-width:0.78629643000000005px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ style="fill:#7bbfcf;fill-opacity:1;stroke:#132736;stroke-width:0.78629643000000005px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
<path
sodipodi:type="arc"
- style="fill:#216778;fill-opacity:1;stroke:none;display:inline"
+ style="fill:#000000;fill-opacity:1;stroke:none;display:inline;stroke-opacity:1"
id="path3847"
sodipodi:cx="10.8"
sodipodi:cy="22.618181"
@@ -440,7 +442,7 @@
d="m 11.709091,22.618181 a 0.90909094,0.94545454 0 1 1 -1.8181817,0 0.90909094,0.94545454 0 1 1 1.8181817,0 z"
transform="matrix(1.65,0,0,1.65,-1.747273,-21.101817)" />
<path
- style="fill:#216778;stroke:#4d7a97;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ style="fill:#216778;stroke:#1a2227;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 4.0727273,15.854545 c 2.8363632,0 2.9090912,0 2.9090912,0"
id="path3867"
inkscape:connector-curvature="0" />
@@ -453,11 +455,11 @@
inkscape:connector-curvature="0"
id="path3871"
d="m 25.454545,16.072727 c 2.836364,0 2.909091,0 2.909091,0"
- style="fill:#216778;stroke:#4d7a97;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ style="fill:#216778;stroke:#1c2932;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3880"
d="m 16.072727,28.218183 c 0,-2.836364 0,-2.909092 0,-2.909092"
- style="fill:#216778;stroke:#4d7a97;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ style="fill:#216778;stroke:#142a39;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</svg>
diff --git a/src/images/home.svg b/src/images/home.svg
index a794454..453ab02 100644
--- a/src/images/home.svg
+++ b/src/images/home.svg
@@ -15,10 +15,28 @@
id="svg2"
version="1.1"
inkscape:version="0.47 r22583"
- sodipodi:docname="home.svg"
+ sodipodi:docname="HOME.svg"
style="display:inline">
<defs
id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ id="perspective77" />
+ <linearGradient
+ id="linearGradient4494">
+ <stop
+ style="stop-color:#bfbfbf;stop-opacity:1;"
+ offset="0"
+ id="stop4496" />
+ <stop
+ style="stop-color:#4e4e4e;stop-opacity:1;"
+ offset="1"
+ id="stop4498" />
+ </linearGradient>
<linearGradient
id="linearGradient3753">
<stop
@@ -44,6 +62,287 @@
id="linearGradient2910"
xlink:href="#linearGradient3753"
inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5915"
+ id="linearGradient3908"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97812443,0,0,0.96376754,-22.733194,1017.6339)"
+ x1="57.456539"
+ y1="55.657021"
+ x2="21.214657"
+ y2="28.643499" />
+ <linearGradient
+ id="linearGradient5915">
+ <stop
+ id="stop5917"
+ offset="0"
+ style="stop-color:#0b3591;stop-opacity:1;" />
+ <stop
+ id="stop5919"
+ offset="1"
+ style="stop-color:#81aecf;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3765"
+ id="linearGradient3771"
+ x1="42.063648"
+ y1="53.744427"
+ x2="6.6376882"
+ y2="20.168556"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.48530728,0,0,0.49093759,-47.142318,1039.6734)" />
+ <linearGradient
+ id="linearGradient3765">
+ <stop
+ style="stop-color:#2f56ab;stop-opacity:1;"
+ offset="0"
+ id="stop3767" />
+ <stop
+ style="stop-color:#3c79ab;stop-opacity:1;"
+ offset="1"
+ id="stop3769" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3782"
+ id="linearGradient3788"
+ x1="71.889565"
+ y1="61.835026"
+ x2="-7.6111097"
+ y2="20.009457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.48530728,0,0,0.49093759,-47.079698,1040.0432)" />
+ <linearGradient
+ id="linearGradient3782">
+ <stop
+ style="stop-color:#6a6d71;stop-opacity:1;"
+ offset="0"
+ id="stop3784" />
+ <stop
+ style="stop-color:#606164;stop-opacity:1;"
+ offset="1"
+ id="stop3786" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3775"
+ id="linearGradient3776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.51031759,0,0,-0.10859702,5.7447143,12.683803)"
+ x1="35.657509"
+ y1="8.7720575"
+ x2="10.400817"
+ y2="59.972881" />
+ <linearGradient
+ id="linearGradient3775">
+ <stop
+ id="stop3777"
+ offset="0"
+ style="stop-color:#f5f5f5;stop-opacity:1;" />
+ <stop
+ id="stop3779"
+ offset="1"
+ style="stop-color:#d3d8da;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ y2="59.972881"
+ x2="10.400817"
+ y1="8.7720575"
+ x1="35.657509"
+ gradientTransform="matrix(0.25426475,0,0,-0.05410769,-44.741535,1046.252)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6551"
+ xlink:href="#linearGradient3775"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3753-9"
+ id="linearGradient4500-8"
+ x1="14.476191"
+ y1="1055.2544"
+ x2="16.796991"
+ y2="1033.8058"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29.197995,-11.160401)" />
+ <linearGradient
+ id="linearGradient3753-9">
+ <stop
+ style="stop-color:#539ec0;stop-opacity:1;"
+ offset="0"
+ id="stop3755-8" />
+ <stop
+ id="stop3713-3"
+ offset="0.5"
+ style="stop-color:#6798c4;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5391d7;stop-opacity:1;"
+ offset="1"
+ id="stop3757-5" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3728">
+ <stop
+ style="stop-color:#f1f3fb;stop-opacity:1;"
+ offset="0"
+ id="stop3730" />
+ <stop
+ style="stop-color:#273df9;stop-opacity:0;"
+ offset="1"
+ id="stop3732" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3756">
+ <stop
+ id="stop3758"
+ offset="0"
+ style="stop-color:#519aed;stop-opacity:1;" />
+ <stop
+ id="stop3760"
+ offset="1"
+ style="stop-color:#e9dddd;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3614"
+ id="linearGradient3691"
+ gradientUnits="userSpaceOnUse"
+ x1="15.413333"
+ y1="12.89746"
+ x2="15.413333"
+ y2="31.085577" />
+ <linearGradient
+ id="linearGradient3614">
+ <stop
+ style="stop-color:#2c71d9;stop-opacity:1;"
+ offset="0"
+ id="stop3616" />
+ <stop
+ style="stop-color:#ececec;stop-opacity:1;"
+ offset="1"
+ id="stop3618" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3602"
+ id="linearGradient3693"
+ gradientUnits="userSpaceOnUse"
+ x1="15.413333"
+ y1="2.2337441"
+ x2="15.413333"
+ y2="31.085577" />
+ <linearGradient
+ id="linearGradient3602">
+ <stop
+ style="stop-color:#f5f5f5;stop-opacity:1;"
+ offset="0"
+ id="stop3604" />
+ <stop
+ style="stop-color:#141bc6;stop-opacity:1;"
+ offset="1"
+ id="stop3606" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3728-2"
+ id="linearGradient3710-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1228948,0,0,-1.210218,1.8048354,72.453625)"
+ x1="15.413333"
+ y1="3.4795053"
+ x2="15.941438"
+ y2="18.883736" />
+ <linearGradient
+ id="linearGradient3728-2">
+ <stop
+ style="stop-color:#113684;stop-opacity:1;"
+ offset="0"
+ id="stop3730-3" />
+ <stop
+ style="stop-color:#273df9;stop-opacity:0;"
+ offset="1"
+ id="stop3732-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3756-6"
+ id="linearGradient3720-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1228948,0,0,-1.210218,1.8048354,72.453625)"
+ x1="24.437176"
+ y1="3.4853487"
+ x2="15.941438"
+ y2="18.883736" />
+ <linearGradient
+ id="linearGradient3756-6">
+ <stop
+ id="stop3758-6"
+ offset="0"
+ style="stop-color:#519aed;stop-opacity:1;" />
+ <stop
+ id="stop3760-6"
+ offset="1"
+ style="stop-color:#0c3a87;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ y2="31.085577"
+ x2="15.413333"
+ y1="12.89746"
+ x1="15.413333"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6782-2"
+ xlink:href="#linearGradient3614-9"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3614-9">
+ <stop
+ style="stop-color:#1a52b9;stop-opacity:1;"
+ offset="0"
+ id="stop3616-0" />
+ <stop
+ style="stop-color:#7da0d8;stop-opacity:1;"
+ offset="1"
+ id="stop3618-4" />
+ </linearGradient>
+ <linearGradient
+ y2="31.085577"
+ x2="15.413333"
+ y1="2.2337441"
+ x1="15.413333"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6784-9"
+ xlink:href="#linearGradient3602-3"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3602-3">
+ <stop
+ style="stop-color:#7da0ff;stop-opacity:1;"
+ offset="0"
+ id="stop3604-1" />
+ <stop
+ style="stop-color:#16459c;stop-opacity:1;"
+ offset="1"
+ id="stop3606-1" />
+ </linearGradient>
+ <linearGradient
+ y2="31.015812"
+ x2="15.261118"
+ y1="10.246381"
+ x1="15.413333"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6868"
+ xlink:href="#linearGradient3614-9"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="31.015812"
+ x2="15.261118"
+ y1="2.2337441"
+ x1="15.413333"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6870"
+ xlink:href="#linearGradient3602-3"
+ inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
@@ -53,15 +352,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="12.46875"
- inkscape:cx="1.5704858"
- inkscape:cy="19.139085"
+ inkscape:cx="-2.6714122"
+ inkscape:cy="10.244397"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:window-width="1651"
- inkscape:window-height="1068"
- inkscape:window-x="2159"
- inkscape:window-y="103"
+ inkscape:window-height="967"
+ inkscape:window-x="1920"
+ inkscape:window-y="35"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true"
@@ -107,16 +406,36 @@
</rdf:RDF>
</metadata>
<g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="bg" />
+ <g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1020.3622)"
style="display:inline">
<path
- sodipodi:nodetypes="ccccccccccccccc"
+ style="fill:#4a88c4;fill-opacity:1;stroke:none"
+ d="m -0.09022506,1033.2486 3.19970496,3.5934 12.9992101,-9.7552 13.309483,9.8567 2.672054,-3.6424 -15.981537,-11.5429 z"
+ id="path6943"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:none;stroke:none"
+ d="m -24.701754,1035.9211 -0.0802,10.7469 5.694235,0 -0.0802,-6.4161 4.812029,-0.08 0.0802,6.4963 3.127819,0.08 -0.240601,-10.5063 -6.817043,-6.3358 z"
+ id="path6945"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#4a88c4;fill-opacity:1;stroke:none"
+ d="m 5.7920614,1036.1315 0,13.9199 10.3166286,0 0,-8.8581 6.447891,0 0,8.8581 3.868736,0 0,-13.9199 -10.316627,-7.5926 z"
+ id="path6949"
inkscape:connector-curvature="0"
- id="path3715"
- d="m 5.2413216,1050.9903 0.133129,-18.308 -4.2264311,0 12.5644495,-9.0077 2.228061,-1.5976 6.339645,4.3196 8.765878,6.5227 -3.949479,0 -0.02429,18.0705 -4.91255,5e-4 0,-10.8423 -8.886327,0 0,10.8423 -8.0320799,-5e-4 -1.6e-6,5e-4 z"
- style="fill:#87aade;fill-opacity:1;stroke:#2c2e6d;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ sodipodi:nodetypes="cccccccccc" />
</g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="fg"
+ style="display:inline" />
</svg>
diff --git a/src/images/icon_group.svg b/src/images/icon_group.svg
index fad7341..c15769e 100644
--- a/src/images/icon_group.svg
+++ b/src/images/icon_group.svg
@@ -91,15 +91,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="13.75"
- inkscape:cx="16"
+ inkscape:cx="4.6545455"
inkscape:cy="16"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="true"
width="64px"
inkscape:snap-grids="false"
- inkscape:window-width="914"
- inkscape:window-height="629"
+ inkscape:window-width="1599"
+ inkscape:window-height="980"
inkscape:window-x="54"
inkscape:window-y="23"
inkscape:window-maximized="0"
@@ -120,7 +120,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
<cc:license
rdf:resource="Apache License 2.0" />
<dc:creator>
@@ -159,38 +159,38 @@
style="display:inline">
<path
sodipodi:type="arc"
- style="fill:url(#linearGradient3889);fill-opacity:1;stroke:#4d7a97;stroke-width:0.15151516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="fill:url(#linearGradient3889);fill-opacity:1;stroke:#000000;stroke-width:0.15151516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
id="path3847"
sodipodi:cx="10.8"
sodipodi:cy="22.618181"
sodipodi:rx="0.90909094"
sodipodi:ry="0.94545454"
d="m 11.709091,22.618181 a 0.90909094,0.94545454 0 1 1 -1.8181817,0 0.90909094,0.94545454 0 1 1 1.8181817,0 z"
- transform="matrix(6.1014218,0,0,5.8667519,-56.004449,-124.05343)" />
+ transform="matrix(6.9990158,0,0,6.394262,-66.501978,-136.52305)" />
<path
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 6.6909091,16.872727 z"
+ style="fill:none;stroke:#000000;stroke-width:1.11814809px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 5.4166364,17.074512 z"
id="path3869"
inkscape:connector-curvature="0" />
<path
- transform="matrix(6.1014218,0,0,5.8667518,-50.258996,-116.708)"
+ transform="matrix(6.9990158,0,0,6.3942619,-59.911299,-128.51715)"
d="m 11.709091,22.618181 a 0.90909094,0.94545454 0 1 1 -1.8181817,0 0.90909094,0.94545454 0 1 1 1.8181817,0 z"
sodipodi:ry="0.94545454"
sodipodi:rx="0.90909094"
sodipodi:cy="22.618181"
sodipodi:cx="10.8"
id="path3891"
- style="fill:url(#linearGradient3893);fill-opacity:1;stroke:#4d7a97;stroke-width:0.15151516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="fill:url(#linearGradient3893);fill-opacity:1;stroke:#000000;stroke-width:0.15151516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
- style="fill:url(#linearGradient3897);fill-opacity:1;stroke:#4d7a97;stroke-width:0.15151516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="fill:url(#linearGradient3897);fill-opacity:1;stroke:#000000;stroke-width:0.15151516;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
id="path3895"
sodipodi:cx="10.8"
sodipodi:cy="22.618181"
sodipodi:rx="0.90909094"
sodipodi:ry="0.94545454"
d="m 11.709091,22.618181 a 0.90909094,0.94545454 0 1 1 -1.8181817,0 0.90909094,0.94545454 0 1 1 1.8181817,0 z"
- transform="matrix(6.1014218,0,0,5.8667518,-44.586268,-109.65343)" />
+ transform="matrix(6.9990158,0,0,6.3942619,-53.404043,-120.82827)" />
</g>
</svg>
diff --git a/src/images/icon_view.svg b/src/images/icon_view.svg
index 51d1f7f..9db3922 100644
--- a/src/images/icon_view.svg
+++ b/src/images/icon_view.svg
@@ -14,7 +14,7 @@
height="32"
id="svg2"
sodipodi:version="0.32"
- inkscape:version="0.48.4 r9939"
+ inkscape:version="0.48.2 r9819"
version="1.0"
sodipodi:docname="icon_view.svg"
inkscape:export-xdpi="90"
@@ -22,12 +22,52 @@
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ id="perspective97" />
+ <linearGradient
+ id="linearGradient8566">
+ <stop
+ id="stop8568"
+ offset="0"
+ style="stop-color:#7a8dc9;stop-opacity:1;" />
+ <stop
+ id="stop8570"
+ offset="1"
+ style="stop-color:#8191aa;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8558">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop8560" />
+ <stop
+ style="stop-color:#e8e8e8;stop-opacity:1;"
+ offset="1"
+ id="stop8562" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4436">
+ <stop
+ style="stop-color:#6885ae;stop-opacity:1;"
+ offset="0"
+ id="stop4438" />
+ <stop
+ style="stop-color:#898f97;stop-opacity:1;"
+ offset="1"
+ id="stop4440" />
+ </linearGradient>
<linearGradient
id="linearGradient3648">
<stop
id="stop3650"
offset="0"
- style="stop-color:#c4c4c4;stop-opacity:1;" />
+ style="stop-color:#e6e6e6;stop-opacity:1;" />
<stop
id="stop3652"
offset="1"
@@ -116,75 +156,819 @@
x2="26.593204"
y2="21.976063" />
<linearGradient
- y2="11"
- x2="8.999999"
- y1="14"
- x1="1.9999986"
- gradientTransform="matrix(1.5442783,0,0,1.2571263,-0.02487577,-2.1514095)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient4428"
+ id="linearGradient4434"
+ x1="-0.79460019"
+ y1="3.7538743"
+ x2="31.007923"
+ y2="3.7538743"
gradientUnits="userSpaceOnUse"
- id="linearGradient3675"
- xlink:href="#linearGradient5774"
+ gradientTransform="matrix(1.0066451,0,0,0.89665592,-0.18890291,-0.15622848)" />
+ <linearGradient
+ id="linearGradient4428">
+ <stop
+ style="stop-color:#cedef2;stop-opacity:1;"
+ offset="0"
+ id="stop4430" />
+ <stop
+ style="stop-color:#d2d2d2;stop-opacity:1;"
+ offset="1"
+ id="stop4432" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4436-7"
+ id="linearGradient4442-1"
+ x1="1.1585789"
+ y1="8.2169533"
+ x2="12.576051"
+ y2="8.2169533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.89372082,0,0,0.89916557,1.889794,7.0985051)" />
+ <linearGradient
+ id="linearGradient4436-7">
+ <stop
+ style="stop-color:#6885ae;stop-opacity:1;"
+ offset="0"
+ id="stop4438-4" />
+ <stop
+ style="stop-color:#898f97;stop-opacity:1;"
+ offset="1"
+ id="stop4440-0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4436-8"
+ id="linearGradient4442-4"
+ x1="1.1585789"
+ y1="8.2169533"
+ x2="12.576051"
+ y2="8.2169533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.89372082,0,0,0.89916557,1.889794,7.0985051)" />
+ <linearGradient
+ id="linearGradient4436-8">
+ <stop
+ style="stop-color:#6885ae;stop-opacity:1;"
+ offset="0"
+ id="stop4438-8" />
+ <stop
+ style="stop-color:#898f97;stop-opacity:1;"
+ offset="1"
+ id="stop4440-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4436-1"
+ id="linearGradient4442-5"
+ x1="1.1585789"
+ y1="8.2169533"
+ x2="12.576051"
+ y2="8.2169533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.89372082,0,0,0.89916557,1.889794,7.0985051)" />
+ <linearGradient
+ id="linearGradient4436-1">
+ <stop
+ style="stop-color:#6885ae;stop-opacity:1;"
+ offset="0"
+ id="stop4438-7" />
+ <stop
+ style="stop-color:#898f97;stop-opacity:1;"
+ offset="1"
+ id="stop4440-1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4448">
+ <stop
+ style="stop-color:#f3eccf;stop-opacity:1;"
+ offset="0"
+ id="stop4450" />
+ <stop
+ style="stop-color:#eccb63;stop-opacity:0.98198199;"
+ offset="1"
+ id="stop4452" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient4756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.4851531,0,0,0.29352515,29.143485,11.271623)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient8465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,29.236865,-30.372203)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8566"
+ id="linearGradient8517"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,42.560071,-17.755798)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient8519"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,42.669506,-17.372203)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8558"
+ id="linearGradient8564"
+ x1="2"
+ y1="-3"
+ x2="27"
+ y2="32"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.97499595,0,0,0.97901584,0.23431518,0.23107844)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8566"
+ id="linearGradient8577"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,42.560071,-31.755799)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8566"
+ id="linearGradient8600"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,30.56007,-17.755798)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8566"
+ id="linearGradient8602"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,30.560071,-31.7558)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient8606"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,42.669506,-30.372205)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ id="linearGradient4448-2">
+ <stop
+ style="stop-color:#8fb4e1;stop-opacity:1;"
+ offset="0"
+ id="stop4450-7" />
+ <stop
+ style="stop-color:#ebeff2;stop-opacity:1;"
+ offset="1"
+ id="stop4452-8" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8623">
+ <stop
+ style="stop-color:#8fb4e1;stop-opacity:1;"
+ offset="0"
+ id="stop8625" />
+ <stop
+ style="stop-color:#ebeff2;stop-opacity:1;"
+ offset="1"
+ id="stop8627" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8630">
+ <stop
+ style="stop-color:#b6dff1;stop-opacity:1;"
+ offset="0"
+ id="stop8632" />
+ <stop
+ style="stop-color:#77acf3;stop-opacity:1;"
+ offset="1"
+ id="stop8634" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-2"
+ id="linearGradient4756-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,29.56007,-17.323162)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ id="linearGradient8637">
+ <stop
+ style="stop-color:#8fb4e1;stop-opacity:1;"
+ offset="0"
+ id="stop8639" />
+ <stop
+ style="stop-color:#ebeff2;stop-opacity:1;"
+ offset="1"
+ id="stop8641" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3648-1"
+ id="linearGradient3857"
+ x1="8.493144"
+ y1="29.64798"
+ x2="2.9682624"
+ y2="15.010903"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0002398,0,0,0.99086533,-0.00113439,0.28207179)" />
+ <linearGradient
+ id="linearGradient3648-1">
+ <stop
+ id="stop3650-7"
+ offset="0"
+ style="stop-color:#dadada;stop-opacity:1;" />
+ <stop
+ id="stop3652-4"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ y2="15.494732"
+ x2="0.77612877"
+ y1="32.644901"
+ x1="9.4908981"
+ gradientTransform="matrix(2.8668763,0,0,1.2261738,-40.427854,28.386213)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4002"
+ xlink:href="#linearGradient3648-1"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3715"
- id="linearGradient3800"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3691"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1.2466743,0,0,-1.1316794,31.175847,31.167266)"
- x1="13.007086"
- y1="9.1088839"
- x2="26.593204"
- y2="21.976063" />
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,38.265601,18.053034)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient5774"
- id="linearGradient3803"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3693"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.99999982,0,0,0.72740301,-30.999997,-0.57038572)"
- x1="33.000004"
- y1="-0.59061384"
- x2="-1.0000013"
- y2="7.6579084" />
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,38.265598,5.0530334)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3648"
- id="linearGradient3806"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3695"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2767112,0,0,1.3370272,-1.5972457,0.62179177)"
- x1="-2.0451682"
- y1="2.183856"
- x2="22.758142"
- y2="20.695072" />
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,51.698239,18.053033)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient5774"
- id="linearGradient3810"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3697"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5442783,0,0,1.2571263,13.016627,-2.08871)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(0.74327785,0,0,0.44969456,51.698239,5.0530314)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient5774"
- id="linearGradient3814"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3701"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5442783,0,0,1.2571263,-0.0875753,7.9432155)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(0.88144094,0,0,0.52325447,32.232476,-33.667036)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient5774"
- id="linearGradient3818"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3707"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5442783,0,0,1.2571263,13.016628,7.9432155)"
- x1="1.9999986"
- y1="14"
- x2="8.999999"
- y2="11" />
+ gradientTransform="matrix(0.88144094,0,0,0.52325447,48.095458,-18.49375)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.88144094,0,0,0.52325447,48.095458,-33.855135)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3713"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.57938522,0,0,0.35053705,35.195879,-18.847028)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.57938522,0,0,0.35053705,44.074702,-10.004446)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3723"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.57938522,0,0,0.35053705,44.038462,-18.901388)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.4564043,0,0,0.27613169,33.376739,-16.661626)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3729"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.4851531,0,0,0.29352515,32.208904,7.5274276)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3735"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.4851531,0,0,0.29352515,37.007584,7.2852126)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3737"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.4851531,0,0,0.29352515,41.522781,-8.840338)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <inkscape:perspective
+ id="perspective4045"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ id="linearGradient8630-0">
+ <stop
+ style="stop-color:#5faed0;stop-opacity:1;"
+ offset="0"
+ id="stop8632-2" />
+ <stop
+ style="stop-color:#4a5f7b;stop-opacity:1;"
+ offset="1"
+ id="stop8634-1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3878-5"
+ id="linearGradient3876-7"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.42498552,0,0,1.6763976,24.940322,0.52935333)"
+ x1="-28.824118"
+ y1="14.946127"
+ x2="-28.824118"
+ y2="29.774111" />
+ <linearGradient
+ id="linearGradient3878-5">
+ <stop
+ style="stop-color:#98b6d3;stop-opacity:1;"
+ offset="0"
+ id="stop3880-4" />
+ <stop
+ style="stop-color:#d8dde2;stop-opacity:1;"
+ offset="1"
+ id="stop3882-8" />
+ </linearGradient>
+ <linearGradient
+ y2="11.483637"
+ x2="-23.07486"
+ y1="29.218405"
+ x1="-33.278461"
+ gradientTransform="matrix(1.3349002,0,0,0.82523821,62.484546,-25.498767)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3988"
+ xlink:href="#linearGradient3868-2"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3868-2">
+ <stop
+ id="stop3870-8"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop3872-9"
+ offset="1"
+ style="stop-color:#cdcdcd;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ y2="11.483637"
+ x2="-23.07486"
+ y1="29.218405"
+ x1="-33.278461"
+ gradientTransform="matrix(2.7181866,0,0,1.6763976,103.06072,1.6519013)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4065"
+ xlink:href="#linearGradient3868-2"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,25.045349,-13.89585)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0-7"
+ id="linearGradient3101-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.40003825,0,0,0.24532956,19.709826,-27.260351)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ id="linearGradient8630-0-7">
+ <stop
+ style="stop-color:#5faed0;stop-opacity:1;"
+ offset="0"
+ id="stop8632-2-4" />
+ <stop
+ style="stop-color:#4a5f7b;stop-opacity:1;"
+ offset="1"
+ id="stop8634-1-0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0-7"
+ id="linearGradient3908"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.40003825,0,0,0.24532956,33.698221,-13.21006)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0-7"
+ id="linearGradient3914"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.40003825,0,0,0.24532956,33.698221,-27.322246)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0-8"
+ id="linearGradient3101-8"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.40003825,0,0,0.24532956,36.978685,6.2251428)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ id="linearGradient8630-0-8">
+ <stop
+ style="stop-color:#5faed0;stop-opacity:1;"
+ offset="0"
+ id="stop8632-2-2" />
+ <stop
+ style="stop-color:#4a5f7b;stop-opacity:1;"
+ offset="1"
+ id="stop8634-1-4" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,25.04535,-23.984826)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3940"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,25.04535,-34.135696)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3948"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,35.072428,-13.957746)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3950"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,35.072429,-24.046722)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3952"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,35.072429,-34.197592)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3960"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,45.037611,-13.89585)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3962"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,45.037612,-23.984826)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3964"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,45.037612,-34.135696)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient3848"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.138293,0,0,0.2681129,14.500149,10.26826)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ id="linearGradient3850">
+ <stop
+ id="stop3852"
+ offset="0"
+ style="stop-color:#5f6e95;stop-opacity:1;" />
+ <stop
+ id="stop3854"
+ offset="1"
+ style="stop-color:#5f6e95;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ y2="0.10771751"
+ x2="-13.562426"
+ y1="0.10771751"
+ x1="-21.307137"
+ gradientTransform="matrix(1.032963,0,0,0.2681129,8.1603546,-10.063695)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3891"
+ xlink:href="#linearGradient3850"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4026"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.032963,0,0,0.2681129,-2.1143069,-10.063695)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850-7"
+ id="linearGradient3848-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.138293,0,0,0.2681129,14.500149,10.26826)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ id="linearGradient3850-7">
+ <stop
+ id="stop3852-1"
+ offset="0"
+ style="stop-color:#5f6e95;stop-opacity:1;" />
+ <stop
+ id="stop3854-1"
+ offset="1"
+ style="stop-color:#5f6e95;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ y2="0.10771751"
+ x2="-13.562426"
+ y1="0.10771751"
+ x1="-21.307137"
+ gradientTransform="matrix(1.138293,0,0,0.2681129,-5.6371811,-5.0895733)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3891-5"
+ xlink:href="#linearGradient3850-7"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4088"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.032963,0,0,0.2681129,8.2841456,-20.028879)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4090"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.032963,0,0,0.2681129,-1.9905158,-20.028879)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.95539147,0,0,0.25073246,11.346004,-5.9671169)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.95539147,0,0,0.25073246,1.8429297,-5.9671169)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.95539147,0,0,0.25073246,-7.3166597,-5.9092342)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.95539147,0,0,0.25073246,11.460499,-15.286307)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.95539147,0,0,0.25073246,1.9574254,-15.286307)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.95539147,0,0,0.25073246,-7.2021649,-15.228424)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.95539147,0,0,0.25073246,11.403252,-24.547613)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.95539147,0,0,0.25073246,1.9001776,-24.547613)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.95539147,0,0,0.25073246,-7.2594118,-24.489731)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
</defs>
<sodipodi:namedview
id="base"
@@ -193,9 +977,9 @@
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
- inkscape:zoom="15.949082"
- inkscape:cx="15.213847"
- inkscape:cy="16"
+ inkscape:zoom="16.15625"
+ inkscape:cx="13.152041"
+ inkscape:cy="6.5230995"
inkscape:document-units="px"
inkscape:current-layer="g3845"
inkscape:showpageshadow="false"
@@ -203,14 +987,15 @@
borderlayer="top"
showgrid="true"
inkscape:grid-points="false"
- inkscape:window-width="1014"
- inkscape:window-height="697"
- inkscape:window-x="47"
- inkscape:window-y="2"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
width="32px"
height="32px"
- inkscape:window-maximized="0"
- inkscape:snap-grids="false">
+ inkscape:window-maximized="1"
+ inkscape:snap-grids="true"
+ inkscape:snap-to-guides="false">
<inkscape:grid
id="GridFromPre046Settings"
type="xygrid"
@@ -222,7 +1007,10 @@
empcolor="#9f9f9f"
opacity="0.10196078"
empopacity="0.25490196"
- empspacing="10" />
+ empspacing="10"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
@@ -257,73 +1045,111 @@
</metadata>
<g
inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="bg#1"
+ style="display:inline" />
+ <g
+ inkscape:groupmode="layer"
id="layer4"
inkscape:label="prof header"
style="display:inline">
<g
id="g3845"
transform="translate(1.0000014,1)">
- <rect
- style="fill:url(#linearGradient3806);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:0.618;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="rect10509"
- width="30"
- height="27.569721"
- x="-1.3333558e-006"
- y="2.4302771" />
- <rect
- transform="scale(-1,1)"
- style="fill:url(#linearGradient3803);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:0.63949221;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="rect10511"
- width="30"
- height="5.8429823"
- x="-29.999998"
- y="0.15701789" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc"
- id="rect3637"
- d="M 0.3371687,6.2974099 0.25383044,29.609904 0.95833216,29.75 0.99999944,7 29.666667,7 l -0.05081,-0.7025901 -29.27869256,0 z"
- style="fill:url(#linearGradient3800);fill-opacity:1;fill-rule:evenodd;stroke:none" />
<g
style="display:inline"
inkscape:label="add"
id="layer7" />
<rect
- ry="0"
- rx="0.64596623"
- y="10.419856"
- x="4.6079535"
- height="5.0285039"
- width="7.7213922"
- id="rect3929-2"
- style="fill:url(#linearGradient3675);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+ ry="0.34030005"
+ rx="0"
+ y="-9.680809"
+ x="-9.0106506"
+ height="7.4813995"
+ width="7.399231"
+ id="rect4061"
+ style="fill:url(#linearGradient4079);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:url(#linearGradient4081);fill-opacity:1;stroke:none;display:inline"
+ id="rect4063"
+ width="7.399231"
+ height="7.4813995"
+ x="-18.513723"
+ y="-9.680809"
+ rx="0"
+ ry="0.34030005" />
+ <rect
+ ry="0.34030005"
+ rx="0"
+ y="-9.6229258"
+ x="-27.673313"
+ height="7.4813995"
+ width="7.399231"
+ id="rect4065"
+ style="fill:url(#linearGradient4083);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:url(#linearGradient4085);fill-opacity:1;stroke:none;display:inline"
+ id="rect4067"
+ width="7.399231"
+ height="7.4813995"
+ x="-8.8961554"
+ y="-19"
+ rx="0"
+ ry="0.34030005" />
+ <rect
+ ry="0.34030005"
+ rx="0"
+ y="-19"
+ x="-18.399229"
+ height="7.4813995"
+ width="7.399231"
+ id="rect4069"
+ style="fill:url(#linearGradient4087);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:url(#linearGradient4089);fill-opacity:1;stroke:none;display:inline"
+ id="rect4071"
+ width="7.399231"
+ height="7.4813995"
+ x="-27.558819"
+ y="-18.942118"
+ rx="0"
+ ry="0.34030005" />
<rect
- style="fill:url(#linearGradient3810);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- id="rect3808"
- width="7.7213922"
- height="5.0285039"
- x="17.649458"
- y="10.482555"
- rx="0.64596623"
- ry="0" />
+ ry="0.34030005"
+ rx="0"
+ y="-28.261307"
+ x="-8.9534044"
+ height="7.4813995"
+ width="7.399231"
+ id="rect4073"
+ style="fill:url(#linearGradient4091);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
<rect
- style="fill:url(#linearGradient3814);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- id="rect3812"
- width="7.7213922"
- height="5.0285039"
- x="4.5452542"
- y="20.514481"
- rx="0.64596623"
- ry="0" />
+ transform="scale(-1,-1)"
+ style="fill:url(#linearGradient4093);fill-opacity:1;stroke:none;display:inline"
+ id="rect4075"
+ width="7.399231"
+ height="7.4813995"
+ x="-18.456476"
+ y="-28.261307"
+ rx="0"
+ ry="0.34030005" />
<rect
- style="fill:url(#linearGradient3818);fill-opacity:1;fill-rule:evenodd;stroke:#585c65;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- id="rect3816"
- width="7.7213922"
- height="5.0285039"
- x="17.649458"
- y="20.514482"
- rx="0.64596623"
- ry="0" />
+ ry="0.34030005"
+ rx="0"
+ y="-28.203423"
+ x="-27.616066"
+ height="7.4813995"
+ width="7.399231"
+ id="rect4077"
+ style="fill:url(#linearGradient4095);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
</g>
</g>
</svg>
diff --git a/src/images/link.svg b/src/images/link.svg
index e1d2d12..a299122 100644
--- a/src/images/link.svg
+++ b/src/images/link.svg
@@ -7,16 +7,36 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="32"
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="link.svg">
<defs
id="defs4">
+ <linearGradient
+ id="linearGradient3789">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3791" />
+ <stop
+ id="stop3799"
+ offset="0.88180226"
+ style="stop-color:#e9e9e9;stop-opacity:1;" />
+ <stop
+ id="stop3797"
+ offset="0.93817902"
+ style="stop-color:#e1e1e1;stop-opacity:1;" />
+ <stop
+ style="stop-color:#d1d1d1;stop-opacity:1;"
+ offset="1"
+ id="stop3793" />
+ </linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
@@ -35,6 +55,23 @@
offset="1"
id="stop3763" />
</linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3785">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.18563191"
+ id="feGaussianBlur3787" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3789"
+ id="linearGradient3795"
+ x1="17.180531"
+ y1="1024.3629"
+ x2="17.914242"
+ y2="1050.4209"
+ gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
@@ -44,17 +81,17 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16.15625"
- inkscape:cx="-0.52526343"
+ inkscape:cx="-10.366656"
inkscape:cy="17.039481"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
- inkscape:window-width="1885"
- inkscape:window-height="1144"
- inkscape:window-x="1916"
- inkscape:window-y="31"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
@@ -101,14 +138,15 @@
id="layer1"
transform="translate(0,-1020.3622)">
<rect
- style="fill:#ffffff;fill-opacity:1;stroke:#0c0c0d;stroke-width:1.05381035999999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:url(#linearGradient3795);fill-opacity:1;stroke:#53535a;stroke-width:1.50000000000000000;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect2987"
width="31.17182"
height="30.907959"
x="0.53787953"
- y="1020.9786" />
+ y="1020.9786"
+ ry="1.5473888" />
<path
- style="fill:#00112b;fill-opacity:1;stroke:none"
+ style="fill:#232323;fill-opacity:1;stroke:none;filter:url(#filter3785)"
d="m 25.356946,1044.3837 0.0031,-18.2581 -19.76294,0.047 6.734225,6.2099 c 0,0 -2.8911019,2.5538 -3.533378,5.4816 -0.4655709,2.1225 -0.8992526,7.6955 7.331605,11.1939 -1.861536,-4.5315 -1.902962,-6.3922 -0.904302,-8.6057 0.805852,-1.7862 2.952325,-2.6003 2.952325,-2.6003 2.588758,2.3511 4.554585,4.2169 7.178911,6.5345 z"
id="path3757"
inkscape:connector-curvature="0"
diff --git a/src/images/home.svg b/src/images/menu_arrow_down.svg
similarity index 56%
copy from src/images/home.svg
copy to src/images/menu_arrow_down.svg
index a794454..1cea54c 100644
--- a/src/images/home.svg
+++ b/src/images/menu_arrow_down.svg
@@ -14,36 +14,31 @@
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
- sodipodi:docname="home.svg"
- style="display:inline">
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="menu_arrow_down.svg">
<defs
id="defs4">
<linearGradient
- id="linearGradient3753">
+ id="linearGradient3601">
<stop
- style="stop-color:#539ec0;stop-opacity:1;"
+ style="stop-color:#a2a2a2;stop-opacity:1;"
offset="0"
- id="stop3755" />
+ id="stop3603" />
<stop
- id="stop3713"
- offset="0.5"
- style="stop-color:#6798c4;stop-opacity:1;" />
- <stop
- style="stop-color:#5391d7;stop-opacity:1;"
+ style="stop-color:#343434;stop-opacity:1;"
offset="1"
- id="stop3757" />
+ id="stop3605" />
</linearGradient>
<linearGradient
- y2="-0.56834435"
- x2="36.550461"
- y1="25.776665"
- x1="20.381924"
- gradientTransform="matrix(0.55845763,0,0,0.55794702,-1.3287357,-1.8666085)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient3601"
+ id="linearGradient3607"
+ x1="14.194276"
+ y1="14.459461"
+ x2="17.471718"
+ y2="39.653805"
gradientUnits="userSpaceOnUse"
- id="linearGradient2910"
- xlink:href="#linearGradient3753"
- inkscape:collect="always" />
+ gradientTransform="matrix(0.96774194,0,0,0.96774194,-38.540698,-10.847573)" />
</defs>
<sodipodi:namedview
id="base"
@@ -52,24 +47,22 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="12.46875"
- inkscape:cx="1.5704858"
- inkscape:cy="19.139085"
+ inkscape:zoom="15.46875"
+ inkscape:cx="-6.3676771"
+ inkscape:cy="16.354555"
inkscape:document-units="px"
- inkscape:current-layer="layer1"
+ inkscape:current-layer="layer3"
showgrid="true"
- inkscape:window-width="1651"
- inkscape:window-height="1068"
- inkscape:window-x="2159"
- inkscape:window-y="103"
- inkscape:window-maximized="0"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:snap-grids="false"
- inkscape:snap-to-guides="false">
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:snap-to-guides="false"
+ inkscape:snap-grids="true">
<inkscape:grid
type="xygrid"
- id="grid2985"
+ id="grid2831"
empspacing="5"
visible="true"
enabled="true"
@@ -83,7 +76,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title></dc:title>
<cc:license
rdf:resource="Apache License 2.0" />
<dc:creator>
@@ -107,16 +100,19 @@
</rdf:RDF>
</metadata>
<g
- inkscape:label="Layer 1"
inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1020.3622)"
+ id="layer3"
+ inkscape:label="arrow"
style="display:inline">
<path
- sodipodi:nodetypes="ccccccccccccccc"
+ style="opacity:0.98999999;fill:none;stroke:#464646;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 6,12 16,22 26,12"
+ id="path3009"
inkscape:connector-curvature="0"
- id="path3715"
- d="m 5.2413216,1050.9903 0.133129,-18.308 -4.2264311,0 12.5644495,-9.0077 2.228061,-1.5976 6.339645,4.3196 8.765878,6.5227 -3.949479,0 -0.02429,18.0705 -4.91255,5e-4 0,-10.8423 -8.886327,0 0,10.8423 -8.0320799,-5e-4 -1.6e-6,5e-4 z"
- style="fill:#87aade;fill-opacity:1;stroke:#2c2e6d;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ sodipodi:nodetypes="ccc" />
</g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="bar" />
</svg>
diff --git a/src/images/padlock.svg b/src/images/padlock.svg
index ab2f3fa..e216074 100644
--- a/src/images/padlock.svg
+++ b/src/images/padlock.svg
@@ -14,82 +14,70 @@
height="32"
id="svg2"
version="1.1"
- inkscape:version="0.47 r22583"
+ inkscape:version="0.48.2 r9819"
sodipodi:docname="padlock.svg">
<defs
id="defs4">
<linearGradient
- id="linearGradient3610">
+ id="linearGradient3855">
<stop
- id="stop3612"
+ style="stop-color:#4a4a4a;stop-opacity:1;"
offset="0"
- style="stop-color:#f5d12a;stop-opacity:1;" />
+ id="stop3857" />
<stop
- id="stop3614"
+ style="stop-color:#535353;stop-opacity:1;"
offset="1"
- style="stop-color:#ea3e3b;stop-opacity:1;" />
+ id="stop3859" />
</linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 16 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="32 : 16 : 1"
- inkscape:persp3d-origin="16 : 10.666667 : 1"
- id="perspective17" />
<linearGradient
- id="linearGradient3773">
+ id="linearGradient3834">
<stop
- style="stop-color:#6a6a6a;stop-opacity:1;"
+ style="stop-color:#cd9f63;stop-opacity:1;"
offset="0"
- id="stop3775" />
+ id="stop3836" />
<stop
- style="stop-color:#0b0000;stop-opacity:1;"
+ style="stop-color:#f6cf96;stop-opacity:1;"
offset="1"
- id="stop3777" />
+ id="stop3838" />
</linearGradient>
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3773"
- id="linearGradient3779"
- x1="5.3230176"
- y1="19.404255"
- x2="26.862669"
- y2="19.404255"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.89367816,0,0,0.89367816,1.8657596,2.7243)" />
+ xlink:href="#linearGradient3834"
+ id="linearGradient3840"
+ x1="2.047343"
+ y1="21.78453"
+ x2="30.09038"
+ y2="21.78453"
+ gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3773"
- id="linearGradient3821"
- x1="-10.279497"
- y1="18.785299"
- x2="4.3375244"
- y2="18.785299"
- gradientUnits="userSpaceOnUse" />
+ xlink:href="#linearGradient3834"
+ id="linearGradient3843"
+ gradientUnits="userSpaceOnUse"
+ x1="2.047343"
+ y1="21.78453"
+ x2="30.09038"
+ y2="21.78453"
+ gradientTransform="translate(-1.2648222,22.197628)" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3773"
- id="linearGradient3002"
+ xlink:href="#linearGradient3834"
+ id="linearGradient3853"
+ x1="-13.521739"
+ y1="24.379448"
+ x2="12.952569"
+ y2="24.379448"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.89367816,0,0,0.89367816,1.8657596,2.7243)"
- x1="5.3230176"
- y1="19.404255"
- x2="26.862669"
- y2="19.404255" />
- <inkscape:perspective
- id="perspective3626"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3624"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
+ gradientTransform="matrix(1.1115393,0,0,0.99709303,16.411189,-2.9647027)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3855"
+ id="linearGradient3861"
+ x1="4.0152406"
+ y1="1028.0546"
+ x2="28.12775"
+ y2="1028.0546"
+ gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
@@ -99,17 +87,17 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="15.8125"
- inkscape:cx="4.5533597"
- inkscape:cy="16"
+ inkscape:cx="9.7522767"
+ inkscape:cy="9.9664087"
inkscape:document-units="px"
- inkscape:current-layer="layer1"
+ inkscape:current-layer="layer3"
showgrid="true"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
inkscape:window-width="1256"
- inkscape:window-height="767"
+ inkscape:window-height="934"
inkscape:window-x="551"
- inkscape:window-y="218"
+ inkscape:window-y="51"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
@@ -135,7 +123,7 @@
inkscape:groupmode="layer"
id="layer2"
inkscape:label="bg"
- style="display:inline">
+ style="display:none">
<rect
y="0.48412517"
x="0.41408974"
@@ -153,15 +141,16 @@
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none"
id="rect2987"
- width="12.850737"
- height="12.834458"
- x="8.8937807"
- y="1034.286" />
+ width="16.296986"
+ height="16.558722"
+ x="7.0974593"
+ y="1033.7483" />
<path
- style="fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.99999994000000003;stroke-opacity:1"
- d="m 7.3397103,1034.8308 17.4549587,-0.2372 c 0.03041,-7.5368 -4.486899,-10.2518 -8.723449,-10.2206 -4.23655,0.031 -8.807814,2.4387 -8.7315097,10.4576 l 0,-10e-5 0,3e-4 z m 14.9438947,0.037 c 0.01107,0.068 -5.887621,-0.079 -6.461184,-0.079 l -5.9336673,0 c -0.06324,-6.8613 3.3144033,-8.1159 6.1180073,-8.1046 3.045953,0.047 6.758172,1.1468 6.276844,8.1839 l 0,-3e-4 z"
+ style="fill:url(#linearGradient3861);fill-opacity:1;stroke:#333333;stroke-width:1.22500000000000010;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 16.068862,1021.747 c -9.1332157,-0.01 -11.325695,7.3932 -11.4412852,12.5566 7.6274952,-0.012 15.5712622,0 23.1987762,0 0.220005,-7.1919 -4.372842,-12.7546 -11.757491,-12.5566 z m 0,12.5518 c 0.350174,0.064 -5.742645,0.084 -8.5809639,0 0.1156457,-5.1124 3.4044459,-9.4542 8.5177229,-9.4807 5.006237,-0.076 8.904693,3.3177 8.867897,9.5441 -2.977067,-0.017 -8.454482,0 -8.804656,-0.064 z"
id="rect3771"
- sodipodi:nodetypes="cczcccczcscc" />
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0" />
<rect
style="opacity:0;fill:#ff5555;fill-opacity:1;fill-rule:evenodd;stroke:#b1575c;stroke-opacity:1"
id="rect2831"
@@ -182,9 +171,9 @@
sodipodi:arg1="0.65139717"
sodipodi:arg2="1.6985947"
inkscape:flatsided="false"
- inkscape:rounded="-3.469447e-18"
+ inkscape:rounded="-3.469447e-018"
inkscape:randomized="0"
- d="M -22.158606,16.649903 -41.01185,14.227286 -59.865095,11.804668 -48.340424,-3.3114119 -36.815753,-18.427492 -29.48718,-0.88879442 -22.158606,16.649903 z"
+ d="M -22.158606,16.649903 -41.01185,14.227286 -59.865095,11.804668 -48.340424,-3.3114119 -36.815753,-18.427492 -29.48718,-0.88879442 z"
transform="translate(0,1020.3622)" />
</g>
<g
@@ -193,11 +182,32 @@
inkscape:label="fg"
style="display:inline">
<rect
- style="fill:#4d4d4d;fill-opacity:1;stroke:none;display:inline"
- id="rect3613"
- width="21.206635"
- height="13.453413"
- x="5.4235935"
- y="13.873748" />
+ style="fill:url(#linearGradient3853);fill-opacity:1;stroke:#484848;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3845"
+ width="27.204155"
+ height="18.097435"
+ x="2.4927843"
+ y="12.295156"
+ ry="0.56916994" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#484848;fill-opacity:1;stroke:#484848;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path3879"
+ sodipodi:cx="24.094862"
+ sodipodi:cy="22.671936"
+ sodipodi:rx="2.4664032"
+ sodipodi:ry="2.4347825"
+ d="m 26.561265,22.671936 a 2.4664032,2.4347825 0 1 1 -4.932806,0 2.4664032,2.4347825 0 1 1 4.932806,0 z"
+ transform="translate(-0.63241106,-2.3399209)" />
+ <path
+ transform="matrix(-1,-0.01824401,0,1,47.557313,1.2617218)"
+ d="m 24.853755,22.671936 a 0.75889337,2.4347825 0 1 1 -1.517786,0 0.75889337,2.4347825 0 1 1 1.517786,0 z"
+ sodipodi:ry="2.4347825"
+ sodipodi:rx="0.75889337"
+ sodipodi:cy="22.671936"
+ sodipodi:cx="24.094862"
+ id="path3881"
+ style="fill:#484848;fill-opacity:1;stroke:#484848;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
</g>
</svg>
diff --git a/src/images/examine.svg b/src/images/reset_lineEditor.svg
old mode 100755
new mode 100644
similarity index 50%
copy from src/images/examine.svg
copy to src/images/reset_lineEditor.svg
index bc67fbc..06e11bd
--- a/src/images/examine.svg
+++ b/src/images/reset_lineEditor.svg
@@ -15,39 +15,10 @@
id="svg2"
version="1.1"
inkscape:version="0.48.2 r9819"
- sodipodi:docname="examine.svg">
+ sodipodi:docname="reset_lineEditor.svg">
<defs
id="defs4">
<linearGradient
- id="linearGradient3804">
- <stop
- style="stop-color:#93481b;stop-opacity:1;"
- offset="0"
- id="stop3806" />
- <stop
- style="stop-color:#c17242;stop-opacity:1;"
- offset="1"
- id="stop3808" />
- </linearGradient>
- <linearGradient
- id="linearGradient3796">
- <stop
- style="stop-color:#f4f421;stop-opacity:1;"
- offset="0"
- id="stop3798" />
- <stop
- style="stop-color:#ed8159;stop-opacity:1;"
- offset="1"
- id="stop3800" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 16 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="32 : 16 : 1"
- inkscape:persp3d-origin="16 : 10.666667 : 1"
- id="perspective35" />
- <linearGradient
id="linearGradient3852">
<stop
style="stop-color:#467b3c;stop-opacity:1;"
@@ -72,11 +43,11 @@
<linearGradient
id="linearGradient3777">
<stop
- style="stop-color:#5b7db3;stop-opacity:1;"
+ style="stop-color:#0000ad;stop-opacity:1;"
offset="0"
id="stop3779" />
<stop
- style="stop-color:#2589ce;stop-opacity:1;"
+ style="stop-color:#25d4ce;stop-opacity:1;"
offset="1"
id="stop3781" />
</linearGradient>
@@ -107,7 +78,7 @@
xlink:href="#linearGradient3728"
id="linearGradient3710"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+ gradientTransform="matrix(-1.1066784,0,0,-1.2085368,31.113487,37.26001)"
x1="15.413333"
y1="3.4795053"
x2="15.941438"
@@ -117,7 +88,7 @@
xlink:href="#linearGradient3756"
id="linearGradient3720"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+ gradientTransform="matrix(-1.1066784,0,0,-1.2085368,31.113487,37.26001)"
x1="24.437176"
y1="3.4853487"
x2="15.941438"
@@ -134,15 +105,6 @@
gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3799"
- id="linearGradient3834"
- x1="-9.2158766"
- y1="17.617861"
- x2="36.303471"
- y2="17.617861"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
xlink:href="#linearGradient3852"
id="linearGradient3858"
x1="4.4050612"
@@ -150,56 +112,7 @@
x2="23.332099"
y2="16.521188"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.96778437,0,0,0.96778437,1.3383248,1.0794304)" />
- <inkscape:perspective
- id="perspective2935"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4026"
- id="linearGradient4032"
- x1="16.804222"
- y1="14.95285"
- x2="27.970543"
- y2="14.95285"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.7702794,0,0,1.4225865,-38.983045,1.405527)" />
- <linearGradient
- id="linearGradient4026">
- <stop
- style="stop-color:#f30e1e;stop-opacity:1;"
- offset="0"
- id="stop4028" />
- <stop
- style="stop-color:#ba2f39;stop-opacity:1;"
- offset="1"
- id="stop4030" />
- </linearGradient>
- <linearGradient
- id="linearGradient3975">
- <stop
- style="stop-color:#565c64;stop-opacity:1;"
- offset="0"
- id="stop3977" />
- <stop
- style="stop-color:#99a4b4;stop-opacity:1;"
- offset="1"
- id="stop3979" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3796"
- id="linearGradient3802"
- x1="15.914507"
- y1="23.599308"
- x2="30.455095"
- y2="23.599308"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2121763,-0.04965461,0.04965461,1.2121763,-7.0612789,-5.2490049)" />
+ gradientTransform="matrix(-0.96778437,0,0,0.96778437,30.00582,1.0794304)" />
</defs>
<sodipodi:namedview
id="base"
@@ -208,18 +121,19 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="18.09375"
- inkscape:cx="9.9491394"
- inkscape:cy="16"
+ inkscape:zoom="18.75"
+ inkscape:cx="10.841212"
+ inkscape:cy="14.909718"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="true"
inkscape:snap-grids="false"
- inkscape:window-width="1881"
- inkscape:window-height="1026"
- inkscape:window-x="-8"
- inkscape:window-y="-8"
- inkscape:window-maximized="1">
+ inkscape:window-width="1391"
+ inkscape:window-height="888"
+ inkscape:window-x="388"
+ inkscape:window-y="44"
+ inkscape:window-maximized="0"
+ inkscape:snap-to-guides="false">
<inkscape:grid
type="xygrid"
id="grid2816"
@@ -261,21 +175,17 @@
</metadata>
<g
inkscape:groupmode="layer"
- id="layer3"
- inkscape:label="circle"
+ id="layer1"
+ inkscape:label="bg"
style="display:inline">
- <path
- style="fill:url(#linearGradient3710);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3720);stroke-width:1.03536737;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 3.2264279,23.061819 c -2.1124368,6.24846 -1.0562184,3.12423 0,0 z"
- id="path3695"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:url(#linearGradient3802);fill-opacity:1;stroke:#000000;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 13.780035,16.981945 3.164712,-3.015223 13.655024,12.258011 -1.096124,2.729167 -2.890113,1.527625 z"
- id="path3794"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
+ <rect
+ style="fill:#318be0;fill-opacity:1;stroke:#1a5581;stroke-width:1.04364991;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect3822"
+ width="31.277409"
+ height="31.224468"
+ x="0.36149034"
+ y="0.46776733"
+ ry="0" />
</g>
<g
inkscape:groupmode="layer"
@@ -283,14 +193,10 @@
inkscape:label="item"
style="display:inline">
<path
- sodipodi:type="arc"
- style="fill:#ebf2f2;fill-opacity:1;stroke:#000000;stroke-width:1.56218109;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path3849"
- sodipodi:cx="-18.321243"
- sodipodi:cy="31.392056"
- sodipodi:rx="7.599309"
- sodipodi:ry="7.1848016"
- d="m -10.721934,31.392056 a 7.599309,7.1848016 0 1 1 -15.198618,0 7.599309,7.1848016 0 1 1 15.198618,0 z"
- transform="matrix(1.2448556,0,0,1.316674,34.176042,-30.152621)" />
+ id="path3823"
+ style="fill:#feffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.74834377;stroke-miterlimit:4;stroke-opacity:1"
+ d="m 11.713694,20.683726 c 2.155789,2.371821 5.834163,2.55421 8.21588,0.40738 1.072241,-0.966495 1.698883,-2.240302 1.867118,-3.565249 0.205457,-1.618092 -0.27278,-3.312456 -1.45804,-4.61649 -2.155786,-2.371821 -5.834162,-2.55421 -8.215878,-0.407379 -0.02133,0.01924 2.751114,3.398825 2.730064,3.418369 L 6.2366334,15.210291 6.5679371,5.7069971 9.4331157,9.168171 C 13.586672,5.4242433 20.001511,5.7423193 23.76106,9.878615 27.520611,14.01491 27.201208,20.403094 23.047653,24.147021 18 [...]
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssssccccssc" />
</g>
</svg>
diff --git a/src/images/examine.svg b/src/images/search_decor.svg
old mode 100755
new mode 100644
similarity index 78%
copy from src/images/examine.svg
copy to src/images/search_decor.svg
index bc67fbc..a3deb3d
--- a/src/images/examine.svg
+++ b/src/images/search_decor.svg
@@ -10,33 +10,44 @@
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="32"
- height="32"
+ width="16"
+ height="16"
id="svg2"
version="1.1"
inkscape:version="0.48.2 r9819"
- sodipodi:docname="examine.svg">
+ sodipodi:docname="search_decor.svg">
<defs
id="defs4">
<linearGradient
+ id="linearGradient3792">
+ <stop
+ style="stop-color:#eceded;stop-opacity:1;"
+ offset="0"
+ id="stop3794" />
+ <stop
+ style="stop-color:#b5c6d0;stop-opacity:1;"
+ offset="1"
+ id="stop3796" />
+ </linearGradient>
+ <linearGradient
id="linearGradient3804">
<stop
- style="stop-color:#93481b;stop-opacity:1;"
+ style="stop-color:#464c90;stop-opacity:1;"
offset="0"
id="stop3806" />
<stop
- style="stop-color:#c17242;stop-opacity:1;"
+ style="stop-color:#355560;stop-opacity:1;"
offset="1"
id="stop3808" />
</linearGradient>
<linearGradient
id="linearGradient3796">
<stop
- style="stop-color:#f4f421;stop-opacity:1;"
+ style="stop-color:#545d96;stop-opacity:1;"
offset="0"
id="stop3798" />
<stop
- style="stop-color:#ed8159;stop-opacity:1;"
+ style="stop-color:#76a1ab;stop-opacity:1;"
offset="1"
id="stop3800" />
</linearGradient>
@@ -107,7 +118,7 @@
xlink:href="#linearGradient3728"
id="linearGradient3710"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+ gradientTransform="matrix(0.4057742,0,0,-0.45657261,0.07287404,33.882272)"
x1="15.413333"
y1="3.4795053"
x2="15.941438"
@@ -117,7 +128,7 @@
xlink:href="#linearGradient3756"
id="linearGradient3720"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1066784,0,0,-1.2085368,0.23065739,37.26001)"
+ gradientTransform="matrix(0.4057742,0,0,-0.45657261,0.07287404,33.882272)"
x1="24.437176"
y1="3.4853487"
x2="15.941438"
@@ -128,7 +139,7 @@
id="linearGradient3783"
x1="1.4276053"
y1="16.374115"
- x2="28.440671"
+ x2="28.440672"
y2="16.374115"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
@@ -147,8 +158,8 @@
id="linearGradient3858"
x1="4.4050612"
y1="16.300755"
- x2="23.332099"
- y2="16.521188"
+ x2="23.3321"
+ y2="16.521189"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.96778437,0,0,0.96778437,1.3383248,1.0794304)" />
<inkscape:perspective
@@ -190,16 +201,6 @@
offset="1"
id="stop3979" />
</linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3796"
- id="linearGradient3802"
- x1="15.914507"
- y1="23.599308"
- x2="30.455095"
- y2="23.599308"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2121763,-0.04965461,0.04965461,1.2121763,-7.0612789,-5.2490049)" />
</defs>
<sodipodi:namedview
id="base"
@@ -208,11 +209,11 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="18.09375"
- inkscape:cx="9.9491394"
- inkscape:cy="16"
+ inkscape:zoom="52.3125"
+ inkscape:cx="8"
+ inkscape:cy="8"
inkscape:document-units="px"
- inkscape:current-layer="layer2"
+ inkscape:current-layer="layer3"
showgrid="true"
inkscape:snap-grids="false"
inkscape:window-width="1881"
@@ -263,16 +264,17 @@
inkscape:groupmode="layer"
id="layer3"
inkscape:label="circle"
- style="display:inline">
+ style="display:inline"
+ transform="translate(0,-16)">
<path
- style="fill:url(#linearGradient3710);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3720);stroke-width:1.03536737;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 3.2264279,23.061819 c -2.1124368,6.24846 -1.0562184,3.12423 0,0 z"
+ style="fill:url(#linearGradient3710);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3720);stroke-width:0.38534608;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 1.171302,28.518341 c -0.77454518,2.360603 -0.38727254,1.180301 0,0 z"
id="path3695"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:url(#linearGradient3802);fill-opacity:1;stroke:#000000;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 13.780035,16.981945 3.164712,-3.015223 13.655024,12.258011 -1.096124,2.729167 -2.890113,1.527625 z"
+ style="fill:#333333;fill-opacity:1;stroke:none"
+ d="m 8.2375861,25.448284 1.4276415,-1.469342 6.2367334,5.897885 -0.489356,1.324905 -1.307492,0.748092 z"
id="path3794"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
@@ -281,16 +283,17 @@
inkscape:groupmode="layer"
id="layer2"
inkscape:label="item"
- style="display:inline">
+ style="display:inline"
+ transform="translate(0,-16)">
<path
sodipodi:type="arc"
- style="fill:#ebf2f2;fill-opacity:1;stroke:#000000;stroke-width:1.56218109;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path3849"
- sodipodi:cx="-18.321243"
- sodipodi:cy="31.392056"
- sodipodi:rx="7.599309"
- sodipodi:ry="7.1848016"
- d="m -10.721934,31.392056 a 7.599309,7.1848016 0 1 1 -15.198618,0 7.599309,7.1848016 0 1 1 15.198618,0 z"
- transform="matrix(1.2448556,0,0,1.316674,34.176042,-30.152621)" />
+ style="fill:none;stroke:#484848;stroke-width:0.7589606;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.29999995;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ id="path3869"
+ sodipodi:cx="-3.3759081"
+ sodipodi:cy="15.175204"
+ sodipodi:rx="2.6094856"
+ sodipodi:ry="1.2408743"
+ d="m -0.76642251,15.175204 a 2.6094856,1.2408743 0 1 1 -5.21897129,0 2.6094856,1.2408743 0 1 1 5.21897129,0 z"
+ transform="matrix(1.8705985,-0.12000338,0.25896131,3.9341941,8.3069113,-38.139786)" />
</g>
</svg>
diff --git a/src/images/simple_view.svg b/src/images/simple_view.svg
new file mode 100644
index 0000000..dda03d6
--- /dev/null
+++ b/src/images/simple_view.svg
@@ -0,0 +1,1144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.48.2 r9819"
+ version="1.0"
+ sodipodi:docname="simple_view.svg"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient3851">
+ <stop
+ style="stop-color:#f4e3e3;stop-opacity:1;"
+ offset="0"
+ id="stop3853" />
+ <stop
+ style="stop-color:#f4e3e3;stop-opacity:0;"
+ offset="1"
+ id="stop3855" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4448">
+ <stop
+ style="stop-color:#9db7d8;stop-opacity:1;"
+ offset="0"
+ id="stop4450" />
+ <stop
+ style="stop-color:#c5daeb;stop-opacity:1;"
+ offset="1"
+ id="stop4452" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4428">
+ <stop
+ style="stop-color:#cedef2;stop-opacity:1;"
+ offset="0"
+ id="stop4430" />
+ <stop
+ style="stop-color:#d2d2d2;stop-opacity:1;"
+ offset="1"
+ id="stop4432" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3648">
+ <stop
+ id="stop3650"
+ offset="0"
+ style="stop-color:#dadada;stop-opacity:1;" />
+ <stop
+ id="stop3652"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ id="perspective45" />
+ <linearGradient
+ id="linearGradient3923">
+ <stop
+ id="stop3925"
+ offset="0"
+ style="stop-color:#7da0a8;stop-opacity:1" />
+ <stop
+ id="stop3927"
+ offset="1"
+ style="stop-color:#d9e4e7;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3715">
+ <stop
+ style="stop-color:#e8e8e8;stop-opacity:1;"
+ offset="0"
+ id="stop3717" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop3719" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3665">
+ <stop
+ style="stop-color:#233690;stop-opacity:1;"
+ offset="0"
+ id="stop3667" />
+ <stop
+ style="stop-color:#79c6dd;stop-opacity:1;"
+ offset="1"
+ id="stop3669" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5774">
+ <stop
+ id="stop5776"
+ offset="0"
+ style="stop-color:#a8abab;stop-opacity:1;" />
+ <stop
+ id="stop5778"
+ offset="1"
+ style="stop-color:#e2e9eb;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5774"
+ id="linearGradient2886"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.80897999,0,0,0.59391541,-26.080126,-1.0973868)"
+ x1="32.000004"
+ y1="3.5336473"
+ x2="-1.0000013"
+ y2="7.6579084" />
+ <linearGradient
+ id="linearGradient3665-6">
+ <stop
+ style="stop-color:#5e6ba6;stop-opacity:1;"
+ offset="0"
+ id="stop3667-9" />
+ <stop
+ style="stop-color:#d9e4e7;stop-opacity:1;"
+ offset="1"
+ id="stop3669-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3648"
+ id="linearGradient3721"
+ x1="-0.31546342"
+ y1="2.5266564"
+ x2="23.518356"
+ y2="21.141323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.032834,0,0,1.0916659,-0.29039613,-0.12398887)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3665"
+ id="linearGradient3733"
+ gradientUnits="userSpaceOnUse"
+ x1="1.9999986"
+ y1="14"
+ x2="8.999999"
+ y2="11"
+ gradientTransform="translate(1.8418579e-7,10)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3665"
+ id="linearGradient3761"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(9.9999975,1)"
+ x1="1.9999986"
+ y1="14"
+ x2="8.999999"
+ y2="11" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3665"
+ id="linearGradient3765"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(9.9999981,10)"
+ x1="1.9999986"
+ y1="14"
+ x2="8.999999"
+ y2="11" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3665"
+ id="linearGradient3769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(19.000002,1)"
+ x1="1.9999986"
+ y1="14"
+ x2="8.999999"
+ y2="11" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3665-6"
+ id="linearGradient3794"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(1.9999997,10)"
+ x1="1.9999986"
+ y1="14"
+ x2="8.999999"
+ y2="11" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3665-6"
+ id="linearGradient3798"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(15.000001,1)"
+ x1="1.9999986"
+ y1="14"
+ x2="8.999999"
+ y2="11" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3665-6"
+ id="linearGradient3802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(15.000002,10)"
+ x1="1.9999986"
+ y1="14"
+ x2="8.999999"
+ y2="11" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3715"
+ id="linearGradient3646"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0085347,0,0,-0.92400198,26.222385,24.816007)"
+ x1="13"
+ y1="8.5197887"
+ x2="23.518356"
+ y2="21.141323" />
+ <inkscape:perspective
+ id="perspective3666"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3923-6"
+ id="linearGradient3931-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(16.000001,10.999998)"
+ x1="1.9999986"
+ y1="14"
+ x2="8.999999"
+ y2="11" />
+ <linearGradient
+ id="linearGradient3923-6">
+ <stop
+ id="stop3925-9"
+ offset="0"
+ style="stop-color:#7da0a8;stop-opacity:1" />
+ <stop
+ id="stop3927-2"
+ offset="1"
+ style="stop-color:#d9e4e7;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3715"
+ id="linearGradient3799"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.2816056,0,0,-1.4932035,-4.8737324,33.527714)"
+ x1="13"
+ y1="8.5197887"
+ x2="23.518356"
+ y2="21.141323" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5774"
+ id="linearGradient3803"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99999982,0,0,0.72740301,4.0937182,-7.3304816)"
+ x1="32.000004"
+ y1="3.5336473"
+ x2="-1.0000013"
+ y2="7.6579084" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3715"
+ id="linearGradient3892"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2990713,0,0,1.4761237,-23.616032,-1.4685829)"
+ x1="13"
+ y1="8.5197887"
+ x2="23.518356"
+ y2="21.141323" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3715"
+ id="linearGradient3898"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.2940811,0,0,-1.473277,-25.020934,-5.8836139)"
+ x1="13"
+ y1="8.5197887"
+ x2="23.518356"
+ y2="21.141323" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3715"
+ id="linearGradient3900"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3015664,0,0,1.4761236,-45.041399,-7.886872)"
+ x1="13"
+ y1="8.5197887"
+ x2="23.518356"
+ y2="21.141323" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448"
+ id="linearGradient4592"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,1.3907176,18.90009,-4.8422795)"
+ x1="-24.717148"
+ y1="26.008472"
+ x2="-34.627769"
+ y2="26.126455" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448"
+ id="linearGradient4618"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,1.3907176,26.960236,-4.8422815)"
+ x1="-25.550787"
+ y1="25.120838"
+ x2="-35.127956"
+ y2="25.407894" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448"
+ id="linearGradient4624"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,1.3907176,35.079167,-4.8422825)"
+ x1="-26.96797"
+ y1="24.2332"
+ x2="-34.544411"
+ y2="24.435719" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3648"
+ id="linearGradient3857"
+ x1="8.493144"
+ y1="29.64798"
+ x2="2.9682624"
+ y2="15.010903"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0002398,0,0,0.99086533,-4.2923257,9.0995882)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3648"
+ id="linearGradient3861"
+ gradientUnits="userSpaceOnUse"
+ x1="8.493144"
+ y1="29.64798"
+ x2="2.9682624"
+ y2="15.010903"
+ gradientTransform="matrix(0.90602628,0,0,0.99196302,6.6756717,9.079819)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3648"
+ id="linearGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9531173,0,0,0.99140746,16.710577,9.0898252)"
+ x1="8.493144"
+ y1="29.64798"
+ x2="2.9682624"
+ y2="15.010903" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4"
+ id="linearGradient4624-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,0.96438547,23.774258,-34.565095)"
+ x1="-26.96797"
+ y1="24.2332"
+ x2="-34.544411"
+ y2="24.435719" />
+ <linearGradient
+ id="linearGradient4448-4">
+ <stop
+ style="stop-color:#f1d98c;stop-opacity:1;"
+ offset="0"
+ id="stop4450-8" />
+ <stop
+ style="stop-color:#fefcf7;stop-opacity:1;"
+ offset="1"
+ id="stop4452-8" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4"
+ id="linearGradient4618-2"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,0.96438547,15.655327,-34.565095)"
+ x1="-25.550787"
+ y1="25.120838"
+ x2="-35.127956"
+ y2="25.407894" />
+ <linearGradient
+ id="linearGradient4661">
+ <stop
+ style="stop-color:#9db7d8;stop-opacity:1;"
+ offset="0"
+ id="stop4663" />
+ <stop
+ style="stop-color:#c5daeb;stop-opacity:1;"
+ offset="1"
+ id="stop4665" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4"
+ id="linearGradient4592-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,1.3907176,18.90009,-4.8422795)"
+ x1="-24.717148"
+ y1="26.008472"
+ x2="-34.627769"
+ y2="26.126455" />
+ <linearGradient
+ id="linearGradient4668">
+ <stop
+ style="stop-color:#9db7d8;stop-opacity:1;"
+ offset="0"
+ id="stop4670" />
+ <stop
+ style="stop-color:#c5daeb;stop-opacity:1;"
+ offset="1"
+ id="stop4672" />
+ </linearGradient>
+ <linearGradient
+ y2="26.126455"
+ x2="-34.627769"
+ y1="26.008472"
+ x1="-24.717148"
+ gradientTransform="matrix(0.70514374,0,0,0.96438547,7.595181,-34.565093)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4677"
+ xlink:href="#linearGradient4448-4"
+ inkscape:collect="always" />
+ <inkscape:perspective
+ id="perspective2892"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4-2"
+ id="linearGradient4624-9-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.62742354,0,0,0.60388401,27.156285,-8.3127321)"
+ x1="-26.96797"
+ y1="24.2332"
+ x2="-34.544411"
+ y2="24.435719" />
+ <linearGradient
+ id="linearGradient4448-4-2">
+ <stop
+ style="stop-color:#f1d98c;stop-opacity:1;"
+ offset="0"
+ id="stop4450-8-2" />
+ <stop
+ style="stop-color:#fefcf7;stop-opacity:1;"
+ offset="1"
+ id="stop4452-8-4" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4-2"
+ id="linearGradient4618-2-7"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,0.96438547,37.934252,-38.386022)"
+ x1="-25.550787"
+ y1="25.120838"
+ x2="-35.127956"
+ y2="25.407894" />
+ <linearGradient
+ id="linearGradient2901">
+ <stop
+ style="stop-color:#f1d98c;stop-opacity:1;"
+ offset="0"
+ id="stop2903" />
+ <stop
+ style="stop-color:#fefcf7;stop-opacity:1;"
+ offset="1"
+ id="stop2905" />
+ </linearGradient>
+ <linearGradient
+ y2="26.126455"
+ x2="-34.627769"
+ y1="26.008472"
+ x1="-24.717148"
+ gradientTransform="matrix(0.70514374,0,0,0.96438547,7.595181,-34.565093)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4677-7"
+ xlink:href="#linearGradient4448-4-2"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient2908">
+ <stop
+ style="stop-color:#f1d98c;stop-opacity:1;"
+ offset="0"
+ id="stop2910" />
+ <stop
+ style="stop-color:#fefcf7;stop-opacity:1;"
+ offset="1"
+ id="stop2912" />
+ </linearGradient>
+ <linearGradient
+ y2="26.126455"
+ x2="-34.627769"
+ y1="26.008472"
+ x1="-24.717148"
+ gradientTransform="matrix(0.71550642,0,0,0.87974603,20.060924,-69.538665)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2917"
+ xlink:href="#linearGradient4448-4-2"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4"
+ id="linearGradient2960"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.72068778,0,0,0.40639195,20.180318,-42.832171)"
+ x1="-24.717148"
+ y1="26.008472"
+ x2="-34.627769"
+ y2="26.126455" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4"
+ id="linearGradient2966"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6585116,0,0,0.44400946,14.691529,-9.9472463)"
+ x1="-24.717148"
+ y1="26.008472"
+ x2="-34.627769"
+ y2="26.126455" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4-2"
+ id="linearGradient2968"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70514374,0,0,0.96438547,34.825545,-17.400333)"
+ x1="-26.96797"
+ y1="24.2332"
+ x2="-34.544411"
+ y2="24.435719" />
+ <inkscape:perspective
+ id="perspective2978"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4-28"
+ id="linearGradient2960-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.72068778,0,0,0.5035706,34.001243,-45.951747)"
+ x1="-24.717148"
+ y1="26.008472"
+ x2="-34.627769"
+ y2="26.126455" />
+ <linearGradient
+ id="linearGradient4448-4-28">
+ <stop
+ style="stop-color:#f1d98c;stop-opacity:1;"
+ offset="0"
+ id="stop4450-8-9" />
+ <stop
+ style="stop-color:#fefcf7;stop-opacity:1;"
+ offset="1"
+ id="stop4452-8-3" />
+ </linearGradient>
+ <linearGradient
+ y2="26.126455"
+ x2="-34.627769"
+ y1="26.008472"
+ x1="-24.717148"
+ gradientTransform="matrix(0.71550642,0,0,0.80764572,19.29674,-68.861541)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2917-6"
+ xlink:href="#linearGradient4448-4-2-8"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4448-4-2-8">
+ <stop
+ style="stop-color:#f1d98c;stop-opacity:1;"
+ offset="0"
+ id="stop4450-8-2-0" />
+ <stop
+ style="stop-color:#fefcf7;stop-opacity:1;"
+ offset="1"
+ id="stop4452-8-4-2" />
+ </linearGradient>
+ <linearGradient
+ y2="26.126455"
+ x2="-34.627769"
+ y1="26.008472"
+ x1="-24.717148"
+ gradientTransform="matrix(0.71550642,0,0,0.80764572,33.823066,-68.067964)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2992"
+ xlink:href="#linearGradient4448-4-2-8"
+ inkscape:collect="always" />
+ <inkscape:perspective
+ id="perspective3218"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4-1"
+ id="linearGradient2960-8"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.72068778,0,0,0.40639195,20.121535,-42.949738)"
+ x1="-24.717148"
+ y1="26.008472"
+ x2="-34.627769"
+ y2="26.126455" />
+ <linearGradient
+ id="linearGradient4448-4-1">
+ <stop
+ style="stop-color:#f1d98c;stop-opacity:1;"
+ offset="0"
+ id="stop4450-8-3" />
+ <stop
+ style="stop-color:#fefcf7;stop-opacity:1;"
+ offset="1"
+ id="stop4452-8-1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4-2"
+ id="linearGradient4034"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.71550642,0,0,0.87974603,33.404765,-69.656232)"
+ x1="-24.717148"
+ y1="26.008472"
+ x2="-34.627769"
+ y2="26.126455" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4448-4"
+ id="linearGradient4036"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.72068778,0,0,0.40639195,33.524159,-42.949738)"
+ x1="-24.717148"
+ y1="26.008472"
+ x2="-34.627769"
+ y2="26.126455" />
+ <inkscape:perspective
+ id="perspective4052"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient4756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.4851531,0,0,0.29352515,32.970121,-13.225389)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ id="linearGradient8630">
+ <stop
+ style="stop-color:#b6dff1;stop-opacity:1;"
+ offset="0"
+ id="stop8632" />
+ <stop
+ style="stop-color:#77acf3;stop-opacity:1;"
+ offset="1"
+ id="stop8634" />
+ </linearGradient>
+ <linearGradient
+ y2="11.483637"
+ x2="-23.07486"
+ y1="29.218405"
+ x1="-33.278461"
+ gradientTransform="matrix(0.29862459,0,0,0.1932117,34.249665,22.657912)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4061"
+ xlink:href="#linearGradient8630"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient3709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.29862459,0,0,0.1932117,42.302996,22.716695)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <inkscape:perspective
+ id="perspective3972"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ id="linearGradient3878-5">
+ <stop
+ style="stop-color:#98b6d3;stop-opacity:1;"
+ offset="0"
+ id="stop3880-4" />
+ <stop
+ style="stop-color:#d8dde2;stop-opacity:1;"
+ offset="1"
+ id="stop3882-8" />
+ </linearGradient>
+ <linearGradient
+ y2="11.483637"
+ x2="-23.07486"
+ y1="29.218405"
+ x1="-33.278461"
+ gradientTransform="matrix(1.3349002,0,0,0.82523821,46.473127,-25.565771)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3906"
+ xlink:href="#linearGradient3868-2"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3868-2">
+ <stop
+ id="stop3870-8"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop3872-9"
+ offset="1"
+ style="stop-color:#cdcdcd;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630"
+ id="linearGradient4033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.29862459,0,0,0.1932117,40.398009,31.577098)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3964"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.69968813,0,0,0.42332214,45.037612,-34.135696)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ id="linearGradient8630-0">
+ <stop
+ style="stop-color:#5faed0;stop-opacity:1;"
+ offset="0"
+ id="stop8632-2" />
+ <stop
+ style="stop-color:#4a5f7b;stop-opacity:1;"
+ offset="1"
+ id="stop8634-1" />
+ </linearGradient>
+ <linearGradient
+ y2="11.483637"
+ x2="-23.07486"
+ y1="29.218405"
+ x1="-33.278461"
+ gradientTransform="matrix(0.60523703,0,0,0.36617777,22.697352,-12.400311)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3981"
+ xlink:href="#linearGradient8630-0"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3868-2-7"
+ id="linearGradient3907-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3349002,0,0,0.82523821,56.748091,-59.578208)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ id="linearGradient3868-2-7">
+ <stop
+ id="stop3870-8-4"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop3872-9-0"
+ offset="1"
+ style="stop-color:#cdcdcd;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient3999"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.60523703,0,0,0.36617777,22.697352,-28.307468)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient4009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.60523703,0,0,0.36617777,32.786327,-12.462207)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient4011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.60523703,0,0,0.36617777,32.786327,-28.369364)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient4021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.60523703,0,0,0.36617777,42.751511,-12.338416)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8630-0"
+ id="linearGradient4023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.60523703,0,0,0.36617777,42.751511,-28.245573)"
+ x1="-33.278461"
+ y1="29.218405"
+ x2="-23.07486"
+ y2="11.483637" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4092"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.032963,0,0,0.2681129,-7.0057496,-15.000599)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ id="linearGradient3850">
+ <stop
+ id="stop3852"
+ offset="0"
+ style="stop-color:#5f6e95;stop-opacity:1;" />
+ <stop
+ id="stop3854"
+ offset="1"
+ style="stop-color:#5f6e95;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4441"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.83969802,0,0,0.2135181,9.2529422,-7.0015316)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4443"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.83969802,0,0,0.2135181,-6.1047727,-7.0015316)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4445"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.83969802,0,0,0.2135181,9.1338903,-16.506991)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4447"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.83969802,0,0,0.2135181,-6.161929,-16.445095)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4449"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.83969802,0,0,0.2135181,9.0148383,-25.837503)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3850"
+ id="linearGradient4451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.83969802,0,0,0.2135181,-6.3428766,-25.837503)"
+ x1="-21.307137"
+ y1="0.10771751"
+ x2="-13.562426"
+ y2="0.10771751" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#efefef"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.15625"
+ inkscape:cx="15.234872"
+ inkscape:cy="16"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ inkscape:showpageshadow="false"
+ showborder="true"
+ borderlayer="top"
+ showgrid="true"
+ inkscape:grid-points="false"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ width="32px"
+ height="32px"
+ inkscape:window-maximized="1"
+ inkscape:snap-grids="false"
+ inkscape:snap-to-guides="false">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="1px"
+ spacingy="1px"
+ color="#9f9f9f"
+ empcolor="#9f9f9f"
+ opacity="0.10196078"
+ empopacity="0.25490196"
+ empspacing="10"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="prof header"
+ style="display:inline" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="bg"
+ style="display:inline">
+ <rect
+ ry="0.25673151"
+ rx="0"
+ y="-14.617261"
+ x="5.955338"
+ height="5.6441684"
+ width="1.7567891"
+ id="rect4417"
+ style="fill:#5f6e95;fill-opacity:1;stroke:none;display:inline"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="fill:#5f6e95;fill-opacity:1;stroke:none;display:inline"
+ id="rect4419"
+ width="1.7567891"
+ height="5.7703042"
+ x="5.9907818"
+ y="-30.123791"
+ rx="0"
+ ry="0.26246893" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:url(#linearGradient4441);fill-opacity:1;stroke:none;display:inline"
+ id="rect4421"
+ width="6.5032187"
+ height="6.3709903"
+ x="-8.6386147"
+ y="-10.164028"
+ rx="0"
+ ry="0.28979185" />
+ <rect
+ ry="0.28979185"
+ rx="0"
+ y="-10.164028"
+ x="-23.99633"
+ height="6.3709903"
+ width="6.5032187"
+ id="rect4423"
+ style="fill:url(#linearGradient4443);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="fill:#5f6e95;fill-opacity:1;stroke:none;display:inline"
+ id="rect4425"
+ width="1.7567891"
+ height="5.5251169"
+ x="15.460797"
+ y="-14.617261"
+ rx="0"
+ ry="0.25131631" />
+ <rect
+ ry="0.25200549"
+ rx="0"
+ y="-29.990129"
+ x="15.519113"
+ height="5.5402684"
+ width="1.7567891"
+ id="rect4427"
+ style="fill:#5f6e95;fill-opacity:1;stroke:none;display:inline"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ ry="0.28979185"
+ rx="0"
+ y="-19.669487"
+ x="-8.7576666"
+ height="6.3709903"
+ width="6.5032187"
+ id="rect4429"
+ style="fill:url(#linearGradient4445);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:url(#linearGradient4447);fill-opacity:1;stroke:none;display:inline"
+ id="rect4431"
+ width="6.5032187"
+ height="6.3709903"
+ x="-24.053488"
+ y="-19.607592"
+ rx="0"
+ ry="0.28979185" />
+ <rect
+ ry="0.24590102"
+ rx="0"
+ y="-14.617261"
+ x="24.791309"
+ height="5.4060631"
+ width="1.7567891"
+ id="rect4433"
+ style="fill:#5f6e95;fill-opacity:1;stroke:none;display:inline"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="fill:#5f6e95;fill-opacity:1;stroke:none;display:inline"
+ id="rect4435"
+ width="1.7567891"
+ height="5.421216"
+ x="24.849625"
+ y="-29.990129"
+ rx="0"
+ ry="0.24659026" />
+ <rect
+ transform="scale(-1,-1)"
+ style="fill:url(#linearGradient4449);fill-opacity:1;stroke:none;display:inline"
+ id="rect4437"
+ width="6.5032187"
+ height="6.3709903"
+ x="-8.8767185"
+ y="-29"
+ rx="0"
+ ry="0.28979185" />
+ <rect
+ ry="0.28979185"
+ rx="0"
+ y="-29"
+ x="-24.234434"
+ height="6.3709903"
+ width="6.5032187"
+ id="rect4439"
+ style="fill:url(#linearGradient4451);fill-opacity:1;stroke:none;display:inline"
+ transform="scale(-1,-1)" />
+ </g>
+</svg>
diff --git a/src/images/duplicate.svg b/src/images/statusbar.svg
similarity index 59%
copy from src/images/duplicate.svg
copy to src/images/statusbar.svg
index 5f200ad..5f363f7 100644
--- a/src/images/duplicate.svg
+++ b/src/images/statusbar.svg
@@ -10,13 +10,13 @@
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
+ width="32"
+ height="32"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.48.2 r9819"
version="1.0"
- sodipodi:docname="duplicate.svg"
+ sodipodi:docname="statusbar.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
@@ -38,70 +38,82 @@
offset="0"
id="stop3136" />
<stop
- style="stop-color:#ededed;stop-opacity:1;"
+ style="stop-color:#b8c5c8;stop-opacity:1;"
offset="1"
id="stop3138" />
</linearGradient>
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3134"
- id="linearGradient3157"
+ xlink:href="#linearGradient3776"
+ id="linearGradient3629-1"
+ x1="-7.9329214"
+ y1="24.043108"
+ x2="-18.725143"
+ y2="22.705267"
gradientUnits="userSpaceOnUse"
- x1="4.2422905"
- y1="58.145554"
- x2="38.280991"
- y2="27.284977"
- gradientTransform="matrix(0.49276403,0,0,0.6043896,-45.895596,7.3436429)" />
+ gradientTransform="matrix(0.32763947,0,0,0.74747279,-40.57133,-1.5730053)" />
<linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2828"
- id="linearGradient3629"
- x1="-16.24024"
- y1="35.806011"
- x2="1.2411834"
- y2="21.927578"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-52.264255,3.648755)" />
+ id="linearGradient3776">
+ <stop
+ id="stop3778"
+ offset="0"
+ style="stop-color:#94bad0;stop-opacity:1;" />
+ <stop
+ id="stop3780"
+ offset="1"
+ style="stop-color:#edf0f1;stop-opacity:1;" />
+ </linearGradient>
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3134"
- id="linearGradient3645"
+ xlink:href="#linearGradient3134-4"
+ id="linearGradient3645-7"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.67694305,0,0,-0.57657342,14.915915,45.0191)"
+ gradientTransform="matrix(0,0.43452884,-0.43020286,0,30.082165,18.167465)"
x1="4.2422905"
y1="58.145554"
x2="38.280991"
y2="27.284977" />
<linearGradient
+ id="linearGradient3134-4">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3136-0" />
+ <stop
+ style="stop-color:#edf0f1;stop-opacity:1;"
+ offset="1"
+ id="stop3138-9" />
+ </linearGradient>
+ <linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient3134"
- id="linearGradient3645-4"
+ xlink:href="#linearGradient3134-4"
+ id="linearGradient3157-4"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.54304224,0,0,-0.40662859,2.8728752,29.159527)"
x1="4.2422905"
y1="58.145554"
x2="38.280991"
- y2="27.284977" />
+ y2="27.284977"
+ gradientTransform="matrix(0.45470628,0,0,0.45176478,-46.471748,1.5241964)" />
<linearGradient
- id="linearGradient3134-6">
+ id="linearGradient3801">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
- id="stop3136-9" />
+ id="stop3803" />
<stop
- style="stop-color:#b8c5c8;stop-opacity:1;"
+ style="stop-color:#edf0f1;stop-opacity:1;"
offset="1"
- id="stop3138-2" />
+ id="stop3805" />
</linearGradient>
<linearGradient
y2="27.284977"
x2="38.280991"
y1="58.145554"
x1="4.2422905"
- gradientTransform="matrix(0.39529424,0,0,0.42624594,-27.724709,2.7776266)"
+ gradientTransform="matrix(0.44406948,0,0,0.45176478,-46.249035,1.9227607)"
gradientUnits="userSpaceOnUse"
- id="linearGradient2854"
- xlink:href="#linearGradient3134"
+ id="linearGradient3812"
+ xlink:href="#linearGradient3134-4"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
@@ -115,7 +127,7 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="15.895833"
- inkscape:cx="13.395779"
+ inkscape:cx="13.997379"
inkscape:cy="24"
inkscape:document-units="px"
inkscape:current-layer="layer1"
@@ -130,7 +142,11 @@
inkscape:snap-grids="false">
<inkscape:grid
type="xygrid"
- id="grid3647" />
+ id="grid3647"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
@@ -164,42 +180,38 @@
</rdf:RDF>
</metadata>
<g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="l1"
+ style="display:inline"
+ transform="translate(0,-16)" />
+ <g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
- style="display:inline">
+ style="display:inline"
+ transform="translate(0,-16)">
<rect
- style="fill:url(#linearGradient2854);fill-opacity:1;fill-rule:evenodd;stroke:#0c0c0c;stroke-width:1.79999983;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- id="rect2161-4"
- width="24.237663"
- height="26.040705"
- x="-27.122765"
- y="3.3675885"
- transform="scale(-1,1)" />
+ style="fill:url(#linearGradient3812);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.98823446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ id="rect2161-8"
+ width="27.228342"
+ height="27.59973"
+ x="-45.572823"
+ y="2.5480428"
+ transform="matrix(0,-1,1,0,0,0)" />
<path
- style="fill:url(#linearGradient3645-4);fill-opacity:1.0;fill-rule:evenodd;stroke:none;display:inline"
- d="M 5.8286102,28.283713 5.9524614,5.6809052 26.1915,5.5921716 l 0,-1.7169044 -22.4931713,-0.1258196 0.2201571,24.4602754 1.9101244,0.07399 z"
- id="rect3631-7"
+ style="fill:url(#linearGradient3645-7);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 29.468707,20.59129 -24.2263353,0.04038 -0.09388,16.34579 -1.949556,0 0,-18.14949 26.2697693,0 0,1.763319 z"
+ id="rect3631-8"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="l1"
- style="display:inline">
<rect
- style="fill:url(#linearGradient3157);fill-opacity:1;fill-rule:evenodd;stroke:#000205;stroke-width:1.79999994999999990;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="rect2161"
- width="30.214071"
- height="36.924061"
- x="-45.145226"
- y="8.180172"
- transform="scale(-1,1)" />
- <path
- style="fill:url(#linearGradient3645);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 18.691941,44.196921 0.06291,-32.469009 25.464751,-0.125819 0,-2.6128646 -28.274697,0 0,35.2076926 2.747037,0 z"
- id="rect3631"
- sodipodi:nodetypes="ccccccc" />
+ style="fill:url(#linearGradient3629-1);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99211001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ id="rect3153-2"
+ width="4.1741009"
+ height="27.597187"
+ x="-45.597401"
+ y="2.5677457"
+ transform="matrix(0,-1,1,0,0,0)" />
</g>
</svg>
diff --git a/src/images/use_global_iconsize.svg b/src/images/use_global_iconsize.svg
new file mode 100644
index 0000000..d6b2bea
--- /dev/null
+++ b/src/images/use_global_iconsize.svg
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="use_global_iconsize.svg">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ id="perspective41" />
+ <linearGradient
+ id="linearGradient3851">
+ <stop
+ style="stop-color:#fafafa;stop-opacity:1;"
+ offset="0"
+ id="stop3853" />
+ <stop
+ style="stop-color:#e6e6e6;stop-opacity:1;"
+ offset="1"
+ id="stop3855" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3852">
+ <stop
+ style="stop-color:#467b3c;stop-opacity:1;"
+ offset="0"
+ id="stop3854" />
+ <stop
+ style="stop-color:#3d9f3d;stop-opacity:0.99215686;"
+ offset="1"
+ id="stop3856" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3799">
+ <stop
+ style="stop-color:#aae1be;stop-opacity:1;"
+ offset="0"
+ id="stop3801" />
+ <stop
+ style="stop-color:#4bc82b;stop-opacity:1;"
+ offset="1"
+ id="stop3803" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3777">
+ <stop
+ style="stop-color:#0000ad;stop-opacity:1;"
+ offset="0"
+ id="stop3779" />
+ <stop
+ style="stop-color:#25d4ce;stop-opacity:1;"
+ offset="1"
+ id="stop3781" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3756">
+ <stop
+ id="stop3758"
+ offset="0"
+ style="stop-color:#519aed;stop-opacity:1;" />
+ <stop
+ id="stop3760"
+ offset="1"
+ style="stop-color:#e9dddd;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3728">
+ <stop
+ style="stop-color:#f1f3fb;stop-opacity:1;"
+ offset="0"
+ id="stop3730" />
+ <stop
+ style="stop-color:#273df9;stop-opacity:0;"
+ offset="1"
+ id="stop3732" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3777"
+ id="linearGradient3783"
+ x1="1.4276053"
+ y1="16.374115"
+ x2="28.440671"
+ y2="16.374115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0279887,0,0,1.0323478,7.1553463,-2.2096664)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3851"
+ id="linearGradient3857"
+ x1="4.3920174"
+ y1="20.106667"
+ x2="16.766666"
+ y2="28.320002"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1006907,0,0,1.0370581,-1.1739438,-0.04592383)" />
+ <linearGradient
+ y2="27.622316"
+ x2="14.933549"
+ y1="20.106667"
+ x1="4.3920174"
+ gradientTransform="matrix(1.7717798,0,0,1.9166829,-1.75708,-28.310245)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5028"
+ xlink:href="#linearGradient3851-1"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3851-1">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3853-7" />
+ <stop
+ style="stop-color:#c0c1c2;stop-opacity:1;"
+ offset="1"
+ id="stop3855-4" />
+ </linearGradient>
+ <linearGradient
+ y2="27.622316"
+ x2="14.933549"
+ y1="22.261148"
+ x1="8.4925022"
+ gradientTransform="matrix(0.66953084,0,0,0.81412173,-0.42607296,6.1804433)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3953"
+ xlink:href="#linearGradient3851-1"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3851-1"
+ id="linearGradient3646"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.55903965,0,0,0.73656128,20.061451,-11.822925)"
+ x1="8.4925022"
+ y1="22.261148"
+ x2="14.933549"
+ y2="27.622316" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3851-1"
+ id="linearGradient3650"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.55903965,0,0,0.73656128,-0.31188233,8.977075)"
+ x1="8.4925022"
+ y1="22.261148"
+ x2="14.933549"
+ y2="27.622316" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.75"
+ inkscape:cx="-0.62234547"
+ inkscape:cy="19.808208"
+ inkscape:document-units="px"
+ inkscape:current-layer="svg2"
+ showgrid="true"
+ inkscape:snap-grids="false"
+ inkscape:window-width="1885"
+ inkscape:window-height="1144"
+ inkscape:window-x="1916"
+ inkscape:window-y="31"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2816"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path
+ inkscape:connector-curvature="0"
+ id="path4514"
+ d="m 10.656602,22.104322 c 5.219769,-5.190483 5.219769,-5.190483 5.219769,-5.190483"
+ style="fill:#1a1a1a;stroke:#d40000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4516"
+ d="m 11.242826,12.877614 8.837701,8.863508 1.800129,-11.7806443 z"
+ style="fill:#d40000;stroke:none" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0;fill:#008080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path2849"
+ sodipodi:cx="1.2266667"
+ sodipodi:cy="17.333334"
+ sodipodi:rx="7.0933332"
+ sodipodi:ry="6.9333334"
+ d="m 8.3199999,17.333334 a 7.0933332,6.9333334 0 1 1 -14.1866665,0 7.0933332,6.9333334 0 1 1 14.1866665,0 z" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="circle">
+ <rect
+ style="opacity:0;fill:#aa0000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect2858"
+ width="10.133333"
+ height="13.28"
+ x="-48.799999"
+ y="-2.6666667" />
+ <rect
+ style="opacity:0;fill:#aa0000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect2860"
+ width="11.893333"
+ height="10.133333"
+ x="-49.813332"
+ y="0.10666667" />
+ </g>
+ <rect
+ ry="4.0518866"
+ y="1.5669609"
+ x="21.718592"
+ height="8.1037731"
+ width="8.365181"
+ id="rect3644"
+ style="fill:url(#linearGradient3646);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ style="fill:url(#linearGradient3650);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3648"
+ width="8.365181"
+ height="8.1037731"
+ x="1.3452584"
+ y="22.366961"
+ ry="4.0518866" />
+</svg>
diff --git a/src/images/videowall.svg b/src/images/videowall.svg
new file mode 100644
index 0000000..2925fa1
--- /dev/null
+++ b/src/images/videowall.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="videowall.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient5256">
+ <stop
+ style="stop-color:#cedcdd;stop-opacity:1;"
+ offset="0"
+ id="stop5258" />
+ <stop
+ style="stop-color:#7199cb;stop-opacity:1;"
+ offset="1"
+ id="stop5260" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5222">
+ <stop
+ style="stop-color:#91b3e7;stop-opacity:1;"
+ offset="0"
+ id="stop5224" />
+ <stop
+ style="stop-color:#e5f5ff;stop-opacity:1;"
+ offset="1"
+ id="stop5226" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5194">
+ <stop
+ style="stop-color:#204492;stop-opacity:1;"
+ offset="0"
+ id="stop5196" />
+ <stop
+ style="stop-color:#81a2d2;stop-opacity:1;"
+ offset="1"
+ id="stop5198" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5186">
+ <stop
+ style="stop-color:#eba34c;stop-opacity:1;"
+ offset="0"
+ id="stop5188" />
+ <stop
+ style="stop-color:#f9f9f9;stop-opacity:1;"
+ offset="1"
+ id="stop5190" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3795">
+ <stop
+ style="stop-color:#c53143;stop-opacity:1;"
+ offset="0"
+ id="stop3797" />
+ <stop
+ style="stop-color:#b8382b;stop-opacity:0;"
+ offset="1"
+ id="stop3799" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3728">
+ <stop
+ style="stop-color:#fa0c1e;stop-opacity:1;"
+ offset="0"
+ id="stop3730" />
+ <stop
+ style="stop-color:#d9afb1;stop-opacity:0;"
+ offset="1"
+ id="stop3732" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3614">
+ <stop
+ style="stop-color:#e8220f;stop-opacity:1;"
+ offset="0"
+ id="stop3616" />
+ <stop
+ style="stop-color:#ececec;stop-opacity:1;"
+ offset="1"
+ id="stop3618" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3602">
+ <stop
+ style="stop-color:#932626;stop-opacity:1;"
+ offset="0"
+ id="stop3604" />
+ <stop
+ style="stop-color:#bc4343;stop-opacity:1;"
+ offset="1"
+ id="stop3606" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5256"
+ id="linearGradient5262"
+ x1="-5.8968949"
+ y1="8.2935667"
+ x2="-5.5726938"
+ y2="4.0554204"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1587301,0,0,1.299435,14.55492,0.92896427)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5256"
+ id="linearGradient5266"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(13.173333,13.813334)"
+ x1="-6.1533332"
+ y1="7.3333344"
+ x2="-5.5266666"
+ y2="3.9733334" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5256"
+ id="linearGradient5270"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(30.026666,20.213334)"
+ x1="-6.5266666"
+ y1="3.4400015"
+ x2="-6.1133332"
+ y2="0.18666674" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5256"
+ id="linearGradient5274"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(26.826667,5.3333334)"
+ x1="-6.5266666"
+ y1="9.0933342"
+ x2="-5.5266666"
+ y2="3.9733334" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.75"
+ inkscape:cx="10.772358"
+ inkscape:cy="15.459013"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ showgrid="true"
+ inkscape:snap-grids="false"
+ inkscape:window-width="1469"
+ inkscape:window-height="966"
+ inkscape:window-x="214"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:snap-to-guides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2816"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="item"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Calibri;-inkscape-font-specification:Calibri"
+ x="3.8399999"
+ y="21.973333"
+ id="text3783"><tspan
+ sodipodi:role="line"
+ id="tspan3785"
+ x="3.8399999"
+ y="21.973333" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="7.2533331"
+ y="15.146667"
+ id="text3787"><tspan
+ sodipodi:role="line"
+ id="tspan3789"
+ x="7.2533331"
+ y="15.146667" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.98199999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 1.7199999,2.6933334 26.9999991,2.5333333 0,16.9066673 0,8.56 -26.9999991,-5.8 z"
+ id="path5218"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 14.426666,15.819874 c -0.03556,3.702307 0.08889,7.937947 0.05333,11.640254"
+ id="path5230"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#00000e;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 1.8799999,13.586667 23.7096861,3.533711 3.39698,0.506289"
+ id="path5232"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:#333333;stroke:none"
+ d="M 1.1866665,2.12 3.7066666,0.83999997 30.813332,3.0533333 29.093332,4.96 z"
+ id="path5234"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path5236"
+ d="m 29.186666,31.400001 -0.04,-26.4533346 1.613332,-1.8933327 0.200001,26.1733343 z"
+ style="fill:#333333;stroke:none" />
+ <path
+ style="fill:url(#linearGradient5262);fill-opacity:1;stroke:none"
+ d="m 2.1333333,3.1466668 0.1151283,9.5484752 26.0546044,3.78486 0.01694,-10.9185708 z"
+ id="path5238"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path5264"
+ d="m 2.1866666,14.613335 0.05333,9.866666 11.2000024,2.453333 0.106669,-10.666666 z"
+ style="fill:url(#linearGradient5266);fill-opacity:1;stroke:none" />
+ <path
+ style="fill:url(#linearGradient5270);fill-opacity:1;stroke:none"
+ d="m 15.413332,16.480001 0.106664,10.88 12.693334,2.666667 5e-6,-11.466667 z"
+ id="path5268"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="top"
+ style="display:inline" />
+</svg>
diff --git a/src/images/wall_screen.svg b/src/images/wall_screen.svg
new file mode 100644
index 0000000..756fb53
--- /dev/null
+++ b/src/images/wall_screen.svg
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="wall_screen.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5204">
+ <stop
+ style="stop-color:#1e2b39;stop-opacity:1;"
+ offset="0"
+ id="stop5206" />
+ <stop
+ style="stop-color:#1e2b39;stop-opacity:0;"
+ offset="1"
+ id="stop5208" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5194">
+ <stop
+ style="stop-color:#204492;stop-opacity:1;"
+ offset="0"
+ id="stop5196" />
+ <stop
+ style="stop-color:#81a2d2;stop-opacity:1;"
+ offset="1"
+ id="stop5198" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5186">
+ <stop
+ style="stop-color:#0879ff;stop-opacity:1;"
+ offset="0"
+ id="stop5188" />
+ <stop
+ style="stop-color:#bcf4ff;stop-opacity:1;"
+ offset="1"
+ id="stop5190" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3795">
+ <stop
+ style="stop-color:#c53143;stop-opacity:1;"
+ offset="0"
+ id="stop3797" />
+ <stop
+ style="stop-color:#b8382b;stop-opacity:0;"
+ offset="1"
+ id="stop3799" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3728">
+ <stop
+ style="stop-color:#fa0c1e;stop-opacity:1;"
+ offset="0"
+ id="stop3730" />
+ <stop
+ style="stop-color:#d9afb1;stop-opacity:0;"
+ offset="1"
+ id="stop3732" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3614">
+ <stop
+ style="stop-color:#e8220f;stop-opacity:1;"
+ offset="0"
+ id="stop3616" />
+ <stop
+ style="stop-color:#ececec;stop-opacity:1;"
+ offset="1"
+ id="stop3618" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3602">
+ <stop
+ style="stop-color:#932626;stop-opacity:1;"
+ offset="0"
+ id="stop3604" />
+ <stop
+ style="stop-color:#bc4343;stop-opacity:1;"
+ offset="1"
+ id="stop3606" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5186"
+ id="linearGradient5192"
+ x1="20.887331"
+ y1="14.621915"
+ x2="-1.6798856"
+ y2="10.869921"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.19678843,1.0995515,-1.0218195,0.21175855,32.839809,-0.20128421)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5204"
+ id="radialGradient5210"
+ cx="16.118987"
+ cy="16.293334"
+ fx="16.118987"
+ fy="16.293334"
+ r="16.148118"
+ gradientTransform="matrix(1,0,0,0.88859467,-5.1733333,0.32183087)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.75"
+ inkscape:cx="10.772358"
+ inkscape:cy="15.367291"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ showgrid="true"
+ inkscape:snap-grids="false"
+ inkscape:window-width="1469"
+ inkscape:window-height="966"
+ inkscape:window-x="214"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:snap-to-guides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2816"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="item"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Calibri;-inkscape-font-specification:Calibri"
+ x="3.8399999"
+ y="21.973333"
+ id="text3783"><tspan
+ sodipodi:role="line"
+ id="tspan3785"
+ x="3.8399999"
+ y="21.973333" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="7.2533331"
+ y="15.146667"
+ id="text3787"><tspan
+ sodipodi:role="line"
+ id="tspan3789"
+ x="7.2533331"
+ y="15.146667" /></text>
+ <rect
+ style="fill:#247fd4;fill-opacity:1;stroke:#3a3a3a;stroke-width:2.18179011;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect4674"
+ width="29.934303"
+ height="30.058758"
+ x="1.0543216"
+ y="0.99728853"
+ ry="0" />
+ <path
+ style="fill:url(#linearGradient5192);fill-opacity:1;stroke:none"
+ d="M 29.893354,2.0533333 10,2.1067685 c 0.0124,-0.022885 6.882858,27.8398975 6.882858,27.8398975 l 13.014325,-0.04034 z"
+ id="path5184"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="top"
+ style="display:inline" />
+</svg>
diff --git a/src/images/wall_screen_selected.svg b/src/images/wall_screen_selected.svg
new file mode 100644
index 0000000..a46d252
--- /dev/null
+++ b/src/images/wall_screen_selected.svg
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="wall_screen_selected.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5204">
+ <stop
+ style="stop-color:#1e2b39;stop-opacity:1;"
+ offset="0"
+ id="stop5206" />
+ <stop
+ style="stop-color:#1e2b39;stop-opacity:0;"
+ offset="1"
+ id="stop5208" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5194">
+ <stop
+ style="stop-color:#204492;stop-opacity:1;"
+ offset="0"
+ id="stop5196" />
+ <stop
+ style="stop-color:#81a2d2;stop-opacity:1;"
+ offset="1"
+ id="stop5198" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5186">
+ <stop
+ style="stop-color:#eba34c;stop-opacity:1;"
+ offset="0"
+ id="stop5188" />
+ <stop
+ style="stop-color:#f9f9f9;stop-opacity:1;"
+ offset="1"
+ id="stop5190" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3795">
+ <stop
+ style="stop-color:#c53143;stop-opacity:1;"
+ offset="0"
+ id="stop3797" />
+ <stop
+ style="stop-color:#b8382b;stop-opacity:0;"
+ offset="1"
+ id="stop3799" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3728">
+ <stop
+ style="stop-color:#fa0c1e;stop-opacity:1;"
+ offset="0"
+ id="stop3730" />
+ <stop
+ style="stop-color:#d9afb1;stop-opacity:0;"
+ offset="1"
+ id="stop3732" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3614">
+ <stop
+ style="stop-color:#e8220f;stop-opacity:1;"
+ offset="0"
+ id="stop3616" />
+ <stop
+ style="stop-color:#ececec;stop-opacity:1;"
+ offset="1"
+ id="stop3618" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3602">
+ <stop
+ style="stop-color:#932626;stop-opacity:1;"
+ offset="0"
+ id="stop3604" />
+ <stop
+ style="stop-color:#bc4343;stop-opacity:1;"
+ offset="1"
+ id="stop3606" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5186"
+ id="linearGradient5192"
+ x1="20.887331"
+ y1="14.621915"
+ x2="-1.6798856"
+ y2="10.869921"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.19678843,1.0995515,-1.0218195,0.21175855,32.839809,-0.20128421)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5204"
+ id="radialGradient5210"
+ cx="16.118987"
+ cy="16.293334"
+ fx="16.118987"
+ fy="16.293334"
+ r="16.148118"
+ gradientTransform="matrix(1,0,0,0.88859467,-5.1733333,0.32183087)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.75"
+ inkscape:cx="10.772358"
+ inkscape:cy="15.367291"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ showgrid="true"
+ inkscape:snap-grids="false"
+ inkscape:window-width="1469"
+ inkscape:window-height="966"
+ inkscape:window-x="214"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:snap-to-guides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2816"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ <cc:license
+ rdf:resource="Apache License 2.0" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:creator>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>ECMWF</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>en-GB</dc:language>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Metview icon</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Metview icon</dc:description>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="item"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Calibri;-inkscape-font-specification:Calibri"
+ x="3.8399999"
+ y="21.973333"
+ id="text3783"><tspan
+ sodipodi:role="line"
+ id="tspan3785"
+ x="3.8399999"
+ y="21.973333" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="7.2533331"
+ y="15.146667"
+ id="text3787"><tspan
+ sodipodi:role="line"
+ id="tspan3789"
+ x="7.2533331"
+ y="15.146667" /></text>
+ <rect
+ style="fill:#b97228;fill-opacity:1;stroke:#3a3a3a;stroke-width:2.18179011000000010;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect4674"
+ width="29.934303"
+ height="30.058758"
+ x="1.0543216"
+ y="0.99728853"
+ ry="0" />
+ <path
+ style="fill:url(#linearGradient5192);fill-opacity:1;stroke:none"
+ d="M 29.893354,2.0533333 10,2.1067685 c 0.0124,-0.022885 6.882858,27.8398975 6.882858,27.8398975 l 13.014325,-0.04034 z"
+ id="path5184"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="top"
+ style="display:inline" />
+</svg>
diff --git a/src/images/wastebasket.svg b/src/images/wastebasket.svg
index a368410..55f42ae 100644
--- a/src/images/wastebasket.svg
+++ b/src/images/wastebasket.svg
@@ -10,190 +10,203 @@
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="32px"
- height="32px"
- id="svg3797"
- version="1.1"
+ width="64"
+ height="64"
+ id="svg2"
+ sodipodi:version="0.32"
inkscape:version="0.48.2 r9819"
- sodipodi:docname="New document 4">
+ version="1.0"
+ sodipodi:docname="wastebasket.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/var/tmp/cgi/PERFORCE/metview_4/metview/share/metview/icons/WASTEBASKET.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ style="display:inline">
<defs
- id="defs3799">
+ id="defs4">
<linearGradient
- id="linearGradient4484">
+ id="linearGradient3982">
<stop
- id="stop4486"
+ style="stop-color:#000000;stop-opacity:1;"
offset="0"
- style="stop-color:#cbd7d9;stop-opacity:1;" />
+ id="stop3984" />
<stop
- id="stop4488"
+ style="stop-color:#646464;stop-opacity:1;"
offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
+ id="stop3986" />
</linearGradient>
<linearGradient
- id="linearGradient4405">
+ id="linearGradient3860">
<stop
- style="stop-color:#949494;stop-opacity:1;"
+ id="stop3862"
offset="0"
- id="stop4407" />
- <stop
- id="stop4453"
- offset="0.27231014"
- style="stop-color:#dadada;stop-opacity:1;" />
+ style="stop-color:#dcdcdc;stop-opacity:1;" />
<stop
- style="stop-color:#919191;stop-opacity:1;"
+ id="stop3864"
offset="1"
- id="stop4409" />
+ style="stop-color:#dcdcdc;stop-opacity:0;" />
</linearGradient>
<linearGradient
- id="linearGradient4395">
+ id="linearGradient3852">
<stop
- style="stop-color:#83aeb5;stop-opacity:0.33035713;"
+ id="stop3854"
offset="0"
- id="stop4397" />
- <stop
- id="stop4490"
- offset="0.23168908"
- style="stop-color:#f4f4f4;stop-opacity:0.76785713;" />
+ style="stop-color:#000000;stop-opacity:1;" />
<stop
- style="stop-color:#7fb7b8;stop-opacity:0.5089286;"
+ id="stop3856"
offset="1"
- id="stop4399" />
+ style="stop-color:#dcdcdc;stop-opacity:1;" />
</linearGradient>
<linearGradient
- id="linearGradient4326">
+ id="linearGradient3811">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
- id="stop4328" />
+ id="stop3813" />
<stop
- style="stop-color:#dbd0d0;stop-opacity:0.98214287;"
+ style="stop-color:#dcdcdc;stop-opacity:1;"
offset="1"
- id="stop4330" />
+ id="stop3815" />
</linearGradient>
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient4326-7"
- id="linearGradient4332-1"
- x1="4"
- y1="20"
- x2="13.5"
- y2="19.5"
- gradientUnits="userSpaceOnUse" />
+ xlink:href="#linearGradient3811"
+ id="linearGradient3817"
+ x1="-35"
+ y1="59"
+ x2="-35"
+ y2="84"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(10,-10)" />
<linearGradient
- id="linearGradient4326-7">
+ inkscape:collect="always"
+ xlink:href="#linearGradient3811"
+ id="linearGradient3825"
+ x1="-35"
+ y1="84"
+ x2="-35"
+ y2="59"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(10,-10)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3852"
+ id="linearGradient3858"
+ gradientUnits="userSpaceOnUse"
+ x1="-35"
+ y1="89"
+ x2="-35"
+ y2="54"
+ gradientTransform="translate(10,-10)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3860"
+ id="linearGradient3866"
+ gradientUnits="userSpaceOnUse"
+ x1="-35"
+ y1="54"
+ x2="-35"
+ y2="89"
+ gradientTransform="translate(10,-10)" />
+ <linearGradient
+ id="linearGradient3811-5">
<stop
- style="stop-color:#000000;stop-opacity:1;"
+ style="stop-color:#303030;stop-opacity:1;"
offset="0"
- id="stop4328-4" />
+ id="stop3813-5" />
<stop
- style="stop-color:#dbd0d0;stop-opacity:0.98214287;"
+ style="stop-color:#9f9f9f;stop-opacity:1;"
offset="1"
- id="stop4330-0" />
+ id="stop3815-2" />
</linearGradient>
<linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4326-8"
- id="linearGradient4332-4"
- x1="4"
- y1="20"
- x2="13.5"
- y2="19.5"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient4326-8">
+ id="linearGradient3892">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
- id="stop4328-8" />
+ id="stop3894" />
<stop
- style="stop-color:#dbd0d0;stop-opacity:0.98214287;"
+ style="stop-color:#dcdcdc;stop-opacity:1;"
offset="1"
- id="stop4330-2" />
+ id="stop3896" />
</linearGradient>
<linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4395"
- id="linearGradient4401"
- x1="4.5378874"
- y1="17.720084"
- x2="27.447205"
- y2="14.120708"
- gradientUnits="userSpaceOnUse" />
+ y2="102.12186"
+ x2="-15.960573"
+ y1="56.4375"
+ x1="-37.40625"
+ gradientTransform="matrix(1,0,0,0.92527173,65.4085,-29.975543)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3900"
+ xlink:href="#linearGradient3811-5"
+ inkscape:collect="always" />
<linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4405"
- id="linearGradient4415"
- x1="6.6356025"
- y1="25.970015"
- x2="25.064154"
- y2="22.812668"
- gradientUnits="userSpaceOnUse" />
+ y2="56.4375"
+ x2="-37.40625"
+ y1="102.12186"
+ x1="-15.960573"
+ gradientTransform="matrix(1,0,0,0.92527173,65.4085,-29.975543)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3902"
+ xlink:href="#linearGradient3982"
+ inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient4405-1"
- id="linearGradient4415-5"
- x1="6.6356025"
- y1="25.970015"
- x2="24.622126"
- y2="25.970015"
- gradientUnits="userSpaceOnUse" />
+ xlink:href="#linearGradient3982"
+ id="linearGradient3958"
+ x1="57.897251"
+ y1="15"
+ x2="4.8972521"
+ y2="6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99999735,0.00230033,-0.00230033,0.99999735,-0.25205611,1.8843847)" />
<linearGradient
inkscape:collect="always"
- id="linearGradient4405-1">
- <stop
- style="stop-color:#949494;stop-opacity:1;"
- offset="0"
- id="stop4407-7" />
- <stop
- style="stop-color:#949494;stop-opacity:0;"
- offset="1"
- id="stop4409-1" />
- </linearGradient>
- <linearGradient
- gradientTransform="matrix(1,0,0,-1,-0.14115083,49.09877)"
- y2="26.285749"
- x2="24.116951"
- y1="25.970015"
- x1="6.6356025"
+ xlink:href="#linearGradient3892"
+ id="linearGradient3966"
+ x1="33"
+ y1="6"
+ x2="33"
+ y2="1"
gradientUnits="userSpaceOnUse"
- id="linearGradient4433"
- xlink:href="#linearGradient4405-1"
- inkscape:collect="always" />
+ gradientTransform="matrix(0.99999735,0.00230033,-0.00230033,0.99999735,-0.77578957,0.91539766)" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient4484"
- id="linearGradient4482"
- x1="4.6149011"
- y1="5.8973427"
- x2="18.496874"
- y2="11.138537"
+ xlink:href="#linearGradient3892"
+ id="linearGradient3974"
+ x1="23"
+ y1="6"
+ x2="43"
+ y2="16"
gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-1.9813129e-8,-0.44202853)" />
+ gradientTransform="matrix(0.99999735,0.00230033,-0.00230033,0.99999735,-0.35250357,0.88415096)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
- inkscape:pageopacity="0.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="1"
inkscape:pageshadow="2"
- inkscape:zoom="15.836083"
- inkscape:cx="11.439751"
- inkscape:cy="17.823852"
- inkscape:current-layer="layer1"
- showgrid="true"
- inkscape:grid-bbox="true"
+ inkscape:zoom="6.3425978"
+ inkscape:cx="1.8510207"
+ inkscape:cy="20.551866"
inkscape:document-units="px"
- inkscape:snap-to-guides="true"
- inkscape:snap-grids="false"
- inkscape:window-width="1227"
- inkscape:window-height="635"
- inkscape:window-x="13"
- inkscape:window-y="0"
- inkscape:window-maximized="0">
+ inkscape:current-layer="layer2"
+ width="64px"
+ height="64px"
+ inkscape:window-width="1881"
+ inkscape:window-height="1026"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ showgrid="true"
+ inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
- id="grid3805" />
+ id="grid2989" />
</sodipodi:namedview>
<metadata
id="metadata7">
@@ -228,56 +241,50 @@
</metadata>
<g
inkscape:groupmode="layer"
- id="layer4"
- inkscape:label="back1"
- style="display:inline"
- sodipodi:insensitive="true">
+ id="layer1"
+ inkscape:label="back">
<path
- style="fill:url(#linearGradient4482);fill-opacity:1;stroke:#7f889b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 5.1149009,5.7940253 7.7437436,27.080392 23.704446,27.354529 26.633885,5.938433 26.648003,5.7940254 C 21.852931,3.632815 19.715169,3.2717258 16.005965,3.326084 12.296761,3.3804422 8.9792445,3.9899149 5.6397402,5.3746701 5.4301369,5.461584 5.1149009,5.7940253 5.1149009,5.7940253 z"
- id="path4474"
+ sodipodi:nodetypes="ccssssc"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccczsc" />
+ id="path3807-6"
+ d="M 12.000003,19.063859 52,19.063859 52,57 c 0,2.775979 -4.364268,4.626359 -6.5915,4.626359 l -28.059617,0 c -2.099855,0 -5.359636,-1.956401 -5.34888,-3.701087 z"
+ style="fill:url(#linearGradient3900);fill-opacity:1;stroke:url(#linearGradient3902);stroke-width:0.82832384;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
- inkscape:label="back"
- style="display:inline">
- <path
- style="fill:url(#linearGradient4433);fill-opacity:1;stroke:#7f889b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 7.1207457,22.466258 C 12.193549,20.866536 18.845024,20.403459 24.170415,22.592553 l -0.947203,4.862313 C 17.329499,25.265772 13.39334,24.844792 7.8153622,27.139134 z"
- id="path4403-1"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- </g>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- style="display:inline">
+ inkscape:label="circle">
<path
- style="fill:url(#linearGradient4401);fill-opacity:1;stroke:#7f889b;stroke-opacity:1"
- d="M 5.1641813,6.4556946 C 11.757763,9.6107676 19.82091,9.6107676 26.442028,6.295033 l -2.810559,21.252588 c -5,2 -11,2 -15.9999997,0 0,0 -1.4548629,-14.00495 -2.467288,-21.0919264 z"
- id="rect3807"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- style="fill:#1a1a1a;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 20,-1 20,0 1,-2 c -2,-0.6666666 -4,-1.3333335 -6,-2 l -11,0 -5,2 z"
- id="path4322"
+ style="fill:url(#linearGradient3974);fill-opacity:1;stroke:url(#linearGradient3958);stroke-width:1.05907857;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 15.609847,8.920891 29.629014,8.95314 50,9 c 5.729393,1.013182 5.600549,3.22879 5.717892,6.013169 L 23.242469,14.938465 8.7180158,14.905053 C 8.7057524,11.120913 12.0079,8.9438803 15.609847,8.920891 z"
+ id="rect7069"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
<path
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 17,-1 1,-2 2,0 1,2 z"
- id="path4385"
- inkscape:connector-curvature="0" />
- <path
- style="fill:url(#linearGradient4415);fill-opacity:1;stroke:#7f889b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 7.767072,27.579715 c 5.072803,1.599722 10.587634,2.0628 15.913025,-0.126294 L 23.995832,23.15943 C 18.102119,25.348524 12.713581,25.264328 7.1356027,22.969989 z"
- id="path4403"
+ sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
+ id="path3004"
+ d="M 28.682947,2.983168 36,3 c 1.21836,0.5028039 1.189482,1.6106894 1.212608,3.0027973 L 27.212634,5.9797937 C 27.212487,4.0877373 27.916553,2.9970426 28.682947,2.983168 z"
+ style="fill:#000000;fill-opacity:1;stroke:url(#linearGradient3966);stroke-width:0.34543338;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+ <rect
+ ry="2.8391356"
+ inkscape:export-ydpi="45"
+ inkscape:export-xdpi="45"
+ y="23.06386"
+ x="20.000004"
+ height="34.623634"
+ width="8"
+ id="rect3775"
+ style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#aaaaaa;stroke-width:1.11251199;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ ry="2.8391356"
+ inkscape:export-ydpi="45"
+ inkscape:export-xdpi="45"
+ y="23.06386"
+ x="36.000004"
+ height="34.623634"
+ width="8"
+ id="rect3779"
+ style="fill:#f2f2f8;fill-opacity:0.96408841;stroke:#aaaaaa;stroke-width:1.11251199;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
</svg>
diff --git a/src/libFTimeUtil/Makefile.in b/src/libFTimeUtil/Makefile.in
index d5a89c0..6f05d86 100644
--- a/src/libFTimeUtil/Makefile.in
+++ b/src/libFTimeUtil/Makefile.in
@@ -39,6 +39,7 @@ subdir = src/libFTimeUtil
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -116,6 +117,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -139,6 +142,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/libMars-ecregrid/Makefile.in b/src/libMars-ecregrid/Makefile.in
index 1f8a093..5ec24be 100644
--- a/src/libMars-ecregrid/Makefile.in
+++ b/src/libMars-ecregrid/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/libMars-ecregrid
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in langy.c
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -229,6 +230,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -252,6 +255,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/libMars/Makefile.in b/src/libMars/Makefile.in
index dc41559..130648b 100644
--- a/src/libMars/Makefile.in
+++ b/src/libMars/Makefile.in
@@ -42,6 +42,7 @@ DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in langy.c
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -232,6 +233,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -255,6 +258,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/libMars/field.c b/src/libMars/field.c
index 96c215f..c55f5a6 100644
--- a/src/libMars/field.c
+++ b/src/libMars/field.c
@@ -467,14 +467,14 @@ static err to_packed_mem(field *g)
{
/* Accuracy */
long accuracy = -1;
- if((e = grib_get_long(g->handle,"numberOfBitsContainingEachPackedValue",&accuracy)))
+ if((e = grib_get_long(g->handle,"bitsPerValue",&accuracy)))
{
marslog(LOG_EROR,"grib_api: cannot get accuracy %s",grib_get_error_message(e));
return e;
}
accuracy = best_packing(accuracy);
- if(e = grib_set_long(g->handle,"numberOfBitsContainingEachPackedValue",accuracy))
+ if(e = grib_set_long(g->handle,"bitsPerValue",accuracy))
{
marslog(LOG_EROR,"grib_api: cannot set accuracy to %ld (%s)",accuracy,grib_get_error_message(e));
return e;
diff --git a/src/libMars/nfdbbase.c b/src/libMars/nfdbbase.c
index 62a6470..68c8361 100644
--- a/src/libMars/nfdbbase.c
+++ b/src/libMars/nfdbbase.c
@@ -481,6 +481,7 @@ static err setallvalues(fdbdata *fdb,request *s)
const char *stream = get_value(s,"STREAM",0);
boolean fp = false; /* Forecast Probability */
boolean stream_enfo = false;
+ boolean stream_enfh = false;
const char *ignore_wave_fg = getenv("MARS_IGNORE_WAVE_FG_FDB");
if(type && stream && EQ(type,"FG") && (EQ(stream,"WAVE") || EQ(stream,"SCWV")))
@@ -495,6 +496,9 @@ static err setallvalues(fdbdata *fdb,request *s)
if(stream && EQ(stream,"ENFO"))
stream_enfo = true;
+ if(stream && EQ(stream,"ENFH"))
+ stream_enfh = true;
+
/* Override behaviour via environment variable */
/* All this code should go once dissemination can handle step ranges for FP */
if(mars.no_special_fp)
@@ -538,6 +542,7 @@ static err setallvalues(fdbdata *fdb,request *s)
if(strcmp(p->name,"STREAM") == 0)
{
stream_enfo = (strcmp(p->values->name,"ENFO") == 0) ;
+ stream_enfh = (strcmp(p->values->name,"ENFH") == 0) ;
setvalsfdb(&fdb->ref,p->name,(char *)lowcase(p->values->name));
}
else if (strcmp(p->name,"DATE") == 0)
@@ -633,7 +638,7 @@ static err setallvalues(fdbdata *fdb,request *s)
long table = -1;
paramtable(lowcase(no_quotes(q)),&par,&table,false);
- if(table >= 210 || table == 201 || table == 162 || (fdb->set_table && table != -1) || (stream_enfo && (table == 171 || table == 173)))
+ if(table >= 210 || table == 201 || table == 162 || (fdb->set_table && table != -1) || (stream_enfo && (table == 171 || table == 173)) || (stream_enfh && (table == 151)))
{
char npar[7];
sprintf(npar,"%ld%03ld",table,par);
@@ -776,7 +781,8 @@ void request_to_fdb(int ref,request *r,int y2k)
if(leg != NULL)
{
- SETVALFDB(&ref,"leg",no_quotes(leg));
+ if( atoi(leg) != 0 )
+ SETVALFDB(&ref,"leg",no_quotes(leg));
}
else
{
diff --git a/src/libMars/request.c b/src/libMars/request.c
index df48c31..a4c2853 100755
--- a/src/libMars/request.c
+++ b/src/libMars/request.c
@@ -200,18 +200,22 @@ void paramtable(const char *p, long *param, long *table, boolean paramIdMode)
if(paramIdMode)
{
/* Special case for param=228015 => 15.228 */
- if((*param != NO_PARAM) && (*table == NO_TABLE) && (len==6))
+ /* if((*param != NO_PARAM) && (*table == NO_TABLE) && (len==6)) */
+ if((*param != NO_PARAM) && (*table == NO_TABLE) && (len>3))
{
+ /* Note table is not always 3 digits, it could be 1 for tables < 10. Keep it in 'n' */
+ /* param must be always 3 digits */
+ int n = len - 3;
p = q;
char tbl[4];
char par[4];
- strncpy(tbl,p,3); tbl[3]='\0';
- strncpy(par,p+3,3); par[3]='\0';
+ strncpy(tbl,p,n); tbl[3]='\0';
+ strncpy(par,p+n,3); par[3]='\0';
*param = atol(par);
*table = atol(tbl);
- marslog(LOG_DBUG,"Translate %s => param=%ld, table=%ld",p,*param,*table);
}
}
+ marslog(LOG_DBUG,"Translate %s => param=%ld, table=%ld",q,*param,*table);
}
@@ -410,6 +414,7 @@ static char *names[] = {
"REFERENCE",
"STEP",
+ "ANOFFSET",
"VERIFY",
"FCMONTH",
"FCPERIOD",
@@ -464,6 +469,7 @@ static namecmp cmpnames[] = {
eq_default, /* REFERENCE */
eq_range, /* STEP */
+ eq_range, /* ANOFFSET */
eq_default, /* VERIFY */
eq_default, /* FCMONTH */
eq_range, /* FCPERIOD: It's like step range */
@@ -1158,7 +1164,7 @@ boolean is_netcdf(const request* r)
boolean is_odb(const request* r)
{
const char *t = get_value(r,"TYPE",0);
- return t && (EQ(t,"OFB") || EQ(t,"MFB"));
+ return t && (EQ(t,"OFB") || EQ(t,"MFB") || EQ(t,"OAI"));
}
boolean is_grib(const request* r)
diff --git a/src/libMars/timer.c b/src/libMars/timer.c
index ae8d670..e855b68 100644
--- a/src/libMars/timer.c
+++ b/src/libMars/timer.c
@@ -133,11 +133,20 @@ void timer_print(timer* t)
marslog(LOG_WARN,"Internal error: timer_print() called with NULL timer");
return;
}
+ name = t->name_?t->name_:"";
+ marslog(LOG_DBUG,"timer_=%g:active_=%d:name_=%s:count_=%d:total_=%lld:elapsed_=%d:cpu_=%g:total_cpu_=%g",
+ t->timer_,
+ t->active_,
+ name,
+ t->count_,
+ t->total_,
+ t->elapsed_,
+ t->cpu_,
+ t->total_cpu_);
- name = t->name_?t->name_:"";
/* Print timers longer than 1 second or those that have a rate */
- if((t->timer_>=1) || (t->total_ != 0))
+ if((t->timer_>=1) || (t->total_ != 0 && t->timer_>0))
{
char cpu[1024] = "";
diff --git a/src/libMars/xservice.c b/src/libMars/xservice.c
index dad8086..7506d78 100644
--- a/src/libMars/xservice.c
+++ b/src/libMars/xservice.c
@@ -8,7 +8,7 @@
* does it submit to any jurisdiction.
*/
-#ifdef METVIEW
+#ifdef METVIEW_MOTIF
#include <X11/Intrinsic.h>
#include "mars.h"
diff --git a/src/libMetview/Makefile.in b/src/libMetview/Makefile.in
index aa131b6..78c0dfa 100644
--- a/src/libMetview/Makefile.in
+++ b/src/libMetview/Makefile.in
@@ -39,6 +39,7 @@ subdir = src/libMetview
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -127,6 +128,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -150,6 +153,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/libMetview/MvApplication.cc b/src/libMetview/MvApplication.cc
index 1d78a11..903695b 100644
--- a/src/libMetview/MvApplication.cc
+++ b/src/libMetview/MvApplication.cc
@@ -161,6 +161,16 @@ MvRequest MvApplication::getExpandedPreferences(const char *name)
return langMetview.expandOne ( req );
}
+void MvApplication::setPreferences(const MvRequest& req,const char *name)
+{
+ const char *prefs_name = (name == NULL) ? cPreferencesFile : name;
+ char buf[1024];
+ sprintf(buf,"%s/System/Preferences/%s",
+ getenv("METVIEW_USER_DIRECTORY"),prefs_name);
+
+ req.save(buf);
+}
+
//! (used by MvApplication)
/*! This class is used by method MvApplication::wantPreferences().
*/
diff --git a/src/libMetview/MvApplication.h b/src/libMetview/MvApplication.h
index 9459dbe..5c334f9 100644
--- a/src/libMetview/MvApplication.h
+++ b/src/libMetview/MvApplication.h
@@ -49,6 +49,7 @@ static void setProcessReplies(boolean onOff) { ProcessReplies = onOff; }
static MvRequest getPreferences(const char* = NULL);
static MvRequest getExpandedPreferences(const char* = NULL);
+static void setPreferences(const MvRequest&,const char* = NULL);
//! Sends request \c req to service \c name.
static void callService(const char* name, const MvRequest& req, void* ref);
diff --git a/src/libMetview/MvFieldSet.cc b/src/libMetview/MvFieldSet.cc
index 338d4d3..77fae0d 100644
--- a/src/libMetview/MvFieldSet.cc
+++ b/src/libMetview/MvFieldSet.cc
@@ -1219,6 +1219,10 @@ double MvField::integrate (double north, double west, double south, double east)
double sum = 0;
bool have_valid_values = false;
+ // The init function is not expanding the field.
+ // So, we must expand it here before accessing its values
+ MvFieldExpander x(*this);
+
for( int j=0; j < mvgrid_->length(); ++j )
{
if( geoArea.isInside( mvgrid_->lat_y(), mvgrid_->lon_x() ) )
diff --git a/src/libMetview/MvGeoPoints.cc b/src/libMetview/MvGeoPoints.cc
index fb35968..7ef6568 100644
--- a/src/libMetview/MvGeoPoints.cc
+++ b/src/libMetview/MvGeoPoints.cc
@@ -97,7 +97,7 @@ MvGeoP1::operator < ( const MvGeoP1& in )
//_____________________________________________________________________
void
-MvGeoP1::extract( const char* line, eGeoFormat geoFmt )
+MvGeoP1::extract( const char* line, eGeoFormat &geoFmt )
{
char buf[ 255 ]; //-- for numeric/string check
@@ -108,7 +108,8 @@ MvGeoP1::extract( const char* line, eGeoFormat geoFmt )
{
myInput >> longitude_ >> latitude_ >> buf;
- _stringOrNumber( buf );
+ _stringOrNumber( buf ); // here it would not make sense to update the gobal format
+ // as eGeoString is assumed to have 6 columns
height_ = 0;
date_ = time_ = 0;
@@ -120,17 +121,20 @@ MvGeoP1::extract( const char* line, eGeoFormat geoFmt )
double d_time;
if( hasVector() ) //-- polar or XY vector?
- {
- myInput >> latitude_ >> longitude_ >> height_ >> d_date >> d_time >> value_ >> value2_;
- }
+ {
+ myInput >> latitude_ >> longitude_ >> height_ >> d_date >> d_time >> value_ >> value2_;
+ }
else //-- TRADITIONAL: Lat/Lon/lev/dat/tim/Val
- {
- myInput >> latitude_ >> longitude_ >> height_ >> d_date >> d_time >> buf;
+ {
+ myInput >> latitude_ >> longitude_ >> height_ >> d_date >> d_time >> buf;
- _stringOrNumber( buf );
+ _stringOrNumber( buf );
+
+ if (gfmt_ == eGeoString) // update the 'global' geo format?
+ geoFmt = eGeoString;
- value2_ = 0;
- }
+ value2_ = 0;
+ }
date_ = (long)d_date;
time_ = (long)d_time;
diff --git a/src/libMetview/MvGeoPoints.h b/src/libMetview/MvGeoPoints.h
index 4772114..41206ca 100644
--- a/src/libMetview/MvGeoPoints.h
+++ b/src/libMetview/MvGeoPoints.h
@@ -102,8 +102,9 @@ class MvGeoP1
//! Extracts data values from a line from a geopoints file
/*! Used mainly by class MvGeoPoints to access geopoints files.
+ * geoFmt is updated if the value turns out to be a string.
*/
- void extract( const char* line, eGeoFormat geoFmt = eGeoTraditional );
+ void extract( const char* line, eGeoFormat &geoFmt );
//! Returns the column value
string column ( int, int& );
diff --git a/src/libMetview/MvGrid.cc b/src/libMetview/MvGrid.cc
index 473f9cb..f852dee 100644
--- a/src/libMetview/MvGrid.cc
+++ b/src/libMetview/MvGrid.cc
@@ -977,9 +977,12 @@ MvGridPoint MvLatLonGrid::nearestGridpoint( double lat_y, double lon_x )
int j = int( rint( (lat_y - lat1) / dy_ ) ); //-- nearest gridpoint
int i = int( rint( (lon_x - lon1) / dx_ ) );
//-- prerequisite: horizontal scanning !
- return MvGridPoint( valueAt( nlon*j + i )
+
+ long index = nlon*j + i;
+ return MvGridPoint( valueAt( index )
, (lat1+j*dy_)
- , (lon1+i*dx_) );
+ , (lon1+i*dx_)
+ , index );
}
//------------------------------------------------------
@@ -1414,7 +1417,7 @@ MvGridPoint MvLatLonRotatedGrid::nearestGridpoint( double lat_y, double lon_x )
//-- this one for debug checking, dbLoc should be equal to input loc --
MvLocation dbLoc = unRotate( gp.loc_.latitude(), gp.loc_.longitude( ) );
- return MvGridPoint( gp.value_, dbLoc.latitude(), dbLoc.longitude() );
+ return MvGridPoint( gp.value_, dbLoc.latitude(), dbLoc.longitude(), gp.index_ );
}
//------------------------------------------------------
@@ -1911,8 +1914,8 @@ MvGridPoint MvIrregularGrid::nearestGridpoint( double lat_y, double lon_x )
MvLocation point( lat_y, lon_x );
MvGridPoint gridPoint[4]; //-- surrounding grid points
- gridPoint[0] = MvGridPoint( grid_11, lat1, lon_x1 );
- gridPoint[1] = MvGridPoint( grid_12, lat1, lon_x1+dx1 );
+ gridPoint[0] = MvGridPoint( grid_11, lat1, lon_x1, firstIndex+ix1 );
+ gridPoint[1] = MvGridPoint( grid_12, lat1, lon_x1+dx1, firstIndex+ix2 );
double closestDistance = point.distanceInMeters( gridPoint[0].loc_ );
if( point.distanceInMeters( gridPoint[1].loc_ ) < closestDistance )
@@ -1939,8 +1942,8 @@ MvGridPoint MvIrregularGrid::nearestGridpoint( double lat_y, double lon_x )
double lon_x9 = firstLon + ix1*dx9;
- gridPoint[2] = MvGridPoint( grid_11, lat9, lon_x9 );
- gridPoint[3] = MvGridPoint( grid_12, lat9, lon_x9+dx9 );
+ gridPoint[2] = MvGridPoint( grid_11, lat9, lon_x9, firstIndex+ix1 );
+ gridPoint[3] = MvGridPoint( grid_12, lat9, lon_x9+dx9, firstIndex+ix2 );
for(int p=2; p<4; ++p ) //-- either one closer?
{
diff --git a/src/libMetview/MvGrid.h b/src/libMetview/MvGrid.h
index f6c063d..b752136 100644
--- a/src/libMetview/MvGrid.h
+++ b/src/libMetview/MvGrid.h
@@ -59,15 +59,16 @@ MvGridBase* MvGridFactory( field* myfield,
struct MvGridPoint
{
- MvGridPoint( double value, double lat_y, double lon_x )
- : value_( value ), loc_( lat_y, lon_x ){ }
- MvGridPoint( double value, const MvLocation& loc )
- : value_( value ), loc_( loc ){ }
+ MvGridPoint( double value, double lat_y, double lon_x, long index=-1 )
+ : value_( value ), loc_( lat_y, lon_x ), index_(index) { }
+ MvGridPoint( double value, const MvLocation& loc, long index=-1 )
+ : value_( value ), loc_( loc ), index_(index) { }
MvGridPoint()
- : value_( mars.grib_missing_value ), loc_( 0, 0 ){ }
+ : value_( mars.grib_missing_value ), loc_( 0, 0 ), index_(-1) { }
double value_;
MvLocation loc_;
+ long index_;
};
const double cMvGridMissingValue = DBL_MAX; // mars.grib_missing_value;
@@ -236,7 +237,7 @@ class MvGridBase
long length() const { return field_ ? (long)(field_->value_count) : 0; }
//! Returns the value and the location of the current grid point [iterator]
- MvGridPoint gridPoint() const { return MvGridPoint( value(), lat_y(), lon_x() ); }
+ MvGridPoint gridPoint() const { return MvGridPoint( value(), lat_y(), lon_x(), currentIndex_ ); }
virtual vector<double> averageCalc(bool ew,double N,double W,double S,double E,double gridInterval);
diff --git a/src/libMetview/MvLanguage.cc b/src/libMetview/MvLanguage.cc
index cf6d2ab..6074947 100644
--- a/src/libMetview/MvLanguage.cc
+++ b/src/libMetview/MvLanguage.cc
@@ -48,9 +48,11 @@ MvRequest MvLanguage::trimOne(const MvRequest& r)
MvRequest MvLanguage::expandOne(const MvRequest& r)
{
reset();
- expand_flags(Flags);
+ long oldFlags = expand_flags(Flags);
MvRequest one = r.justOneRequest();
- return MvRequest(expand_all_requests(Lang, Rule, one), false);
+ request *req = expand_all_requests(Lang, Rule, one);
+ expand_flags(oldFlags); // restore the expand flags to their previous value
+ return MvRequest(req, false);
}
void MvLanguage::reset(void)
diff --git a/src/libMetview/MvRequest.cc b/src/libMetview/MvRequest.cc
index fb3d5fa..64fcfad 100644
--- a/src/libMetview/MvRequest.cc
+++ b/src/libMetview/MvRequest.cc
@@ -997,7 +997,7 @@ bool MvRequest::getValueId(const char* par,string& value,const std::map<string,s
value.clear();
}
}
- else
+ else if(!canBeEmpty)
{
errTxt="Parameter not found: " + string(par);
return false;
@@ -1024,7 +1024,7 @@ bool MvRequest::getValue(const char* par,string& value,bool canBeEmpty,string &e
{
value=string(cval);
}
- else
+ else if(!canBeEmpty)
{
errTxt="Parameter not found: " + string(par);
return false;
@@ -1048,7 +1048,8 @@ bool MvRequest::getValue(const char* par,std::vector<string>& value,bool canBeEm
if(cnt==0)
{
- return false;
+ if(!canBeEmpty)
+ return false;
}
else if(cnt == 1)
{
diff --git a/src/libMetview/MvScanFileType.cc b/src/libMetview/MvScanFileType.cc
index 22f3918..1c172c5 100644
--- a/src/libMetview/MvScanFileType.cc
+++ b/src/libMetview/MvScanFileType.cc
@@ -207,6 +207,7 @@ static const char *scan_file(const char *file)
if (scan_file_extension (file, length, ".mv")) return "MACRO";
if (scan_file_extension (file, length, ".csv")) return "TABLE";
if (scan_file_extension (file, length, ".tsv")) return "TABLE";
+ if (scan_file_extension (file, length, ".vdf")) return "VAPOR_VDF_FILE";
//if (scan_file_extension (file, length, ".odb")) return "ODB_DB";
// check the file extension for known types
diff --git a/src/libMetview/Path.cc b/src/libMetview/Path.cc
index 29c65bd..ed2bf31 100644
--- a/src/libMetview/Path.cc
+++ b/src/libMetview/Path.cc
@@ -338,4 +338,8 @@ string Path::owner() const
return "???";
}
-
\ No newline at end of file
+
+bool Path::locked() const
+{
+ return faccess(path_.c_str(),W_OK);
+}
\ No newline at end of file
diff --git a/src/libMetview/Path.h b/src/libMetview/Path.h
index c0a784c..e94c548 100644
--- a/src/libMetview/Path.h
+++ b/src/libMetview/Path.h
@@ -68,7 +68,8 @@ public:
set<string> directories() const;
bool exists() const;
-
+ bool locked() const;
+
string loadText() const;
void saveText(const string&) const;
diff --git a/src/libMvMotif/Makefile.in b/src/libMvMotif/Makefile.in
index 6f1ad44..34f2bae 100644
--- a/src/libMvMotif/Makefile.in
+++ b/src/libMvMotif/Makefile.in
@@ -39,6 +39,7 @@ subdir = src/libMvMotif
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -126,6 +127,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -149,6 +152,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/libMvNetCDF/Makefile.in b/src/libMvNetCDF/Makefile.in
index 41fff63..d8bfe11 100644
--- a/src/libMvNetCDF/Makefile.in
+++ b/src/libMvNetCDF/Makefile.in
@@ -39,6 +39,7 @@ subdir = src/libMvNetCDF
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -115,6 +116,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -138,6 +141,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/libMvNetCDF/MvNetCDF.cc b/src/libMvNetCDF/MvNetCDF.cc
index 1006b52..6d3188a 100644
--- a/src/libMvNetCDF/MvNetCDF.cc
+++ b/src/libMvNetCDF/MvNetCDF.cc
@@ -561,27 +561,27 @@ MvNcVar* MvNetCDF::addVariable(const string &name,NcType type, long dimsize0,
int number = 0;
char dim_name[100];
- if ( dimsize0 > 0 )
+ if ( dimsize0 >= 0 )
{
sprintf(dim_name,"%s_%d",name.c_str() ,number+1);
dim[number++] = addDimension(dim_name,dimsize0);
}
- if ( dimsize1 > 0 )
+ if ( dimsize1 >= 0 )
{
sprintf(dim_name,"%s_%d",name.c_str(),number+1);
dim[number++] = addDimension(dim_name,dimsize1);
}
- if ( dimsize2 > 0 )
+ if ( dimsize2 >= 0 )
{
sprintf(dim_name,"%s_%d",name.c_str(),number+1);
dim[number++] = addDimension(dim_name,dimsize2);
}
- if ( dimsize3 > 0 )
+ if ( dimsize3 >= 0 )
{
sprintf(dim_name,"%s_%d",name.c_str(),number+1);
dim[number++] = addDimension(dim_name,dimsize3);
}
- if ( dimsize4 > 0 )
+ if ( dimsize4 >= 0 )
{
sprintf(dim_name,"%s_%d",name.c_str(),number+1);
dim[number++] = addDimension(dim_name,dimsize4);
@@ -795,7 +795,11 @@ NcDim* MvNetCDF::addDimension(const string &name,long size )
if ( dimensionExists(name) )
return getDimension(name);
- return ncFile_->add_dim(name.c_str(),size);
+ // size = 0 means unlimited dimension
+ if ( size )
+ return ncFile_->add_dim(name.c_str(),size);
+ else
+ return ncFile_->add_dim(name.c_str());
}
NcBool MvNetCDF::dimensionExists(const string& name)
diff --git a/src/libMvNetCDF/MvNetCDF.h b/src/libMvNetCDF/MvNetCDF.h
index 2bc23ff..230fa29 100644
--- a/src/libMvNetCDF/MvNetCDF.h
+++ b/src/libMvNetCDF/MvNetCDF.h
@@ -363,8 +363,8 @@ public:
// use this when adding the variable. Used for normal one-dim variables where
// dimsize2 = 0, or for strings, where dimsize2 is length of string.
MvNcVar *addVariable(const string &name,NcType type,long dimsize0,
- long dimsize1 = 0,long dimsize2 = 0, long dimsize3 = 0,
- long dimsize4 = 0);
+ long dimsize1 = -1,long dimsize2 = -1, long dimsize3 = -1,
+ long dimsize4 = -1);
MvNcVar *addVariable(const string &name,NcType type,
vector<long>& dimsize, vector<string>& vname);
@@ -409,7 +409,7 @@ public:
int getNumberOfDimensions() { return ncFile_->num_dims(); }
NcDim *getDimension(const string &name) { return ncFile_->get_dim(name.c_str() ); }
NcDim *getDimension(int index) { return ncFile_->get_dim(index); }
- NcDim *addDimension(const string&,long);
+ NcDim *addDimension(const string&,long s=0);
NcBool dimensionExists(const string&);
// Attributes.
diff --git a/src/libMvQtGui/Makefile.am b/src/libMvQtGui/Makefile.am
index abb142b..2f9632a 100755
--- a/src/libMvQtGui/Makefile.am
+++ b/src/libMvQtGui/Makefile.am
@@ -169,4 +169,4 @@ lib:
clean:
-rm -f *.o *.moc.cpp *.qrc.cpp
-EXTRA_DIST = edit.qrc examiner.qrc find.qrc keyDialog.qrc mail.qrc.cpp window.qrc
+EXTRA_DIST = edit.qrc examiner.qrc find.qrc keyDialog.qrc mail.qrc window.qrc
diff --git a/src/libMvQtGui/Makefile.in b/src/libMvQtGui/Makefile.in
index c24dbd3..4040893 100644
--- a/src/libMvQtGui/Makefile.in
+++ b/src/libMvQtGui/Makefile.in
@@ -80,6 +80,7 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
subdir = src/libMvQtGui
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -276,6 +277,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -299,6 +302,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -550,7 +554,7 @@ BUILT_SOURCES = lib MvQAbstractMessageExaminer.moc.cpp \
MvQWebViewSearchLine.moc.cpp MvQMemoryWidget.moc.cpp \
edit.qrc.cpp examiner.qrc.cpp find.qrc.cpp keyDialog.qrc.cpp \
mail.qrc.cpp window.qrc.cpp $(am__append_5)
-EXTRA_DIST = edit.qrc examiner.qrc find.qrc keyDialog.qrc mail.qrc.cpp window.qrc
+EXTRA_DIST = edit.qrc examiner.qrc find.qrc keyDialog.qrc mail.qrc window.qrc
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
diff --git a/src/libMvQtGui/MvQAbstractMessageExaminer.cc b/src/libMvQtGui/MvQAbstractMessageExaminer.cc
index 9acd9be..f648acf 100644
--- a/src/libMvQtGui/MvQAbstractMessageExaminer.cc
+++ b/src/libMvQtGui/MvQAbstractMessageExaminer.cc
@@ -428,12 +428,19 @@ void MvQAbstractMessageExaminer::init(MvMessageMetaData *data,MvQKeyManager *man
}
+ //If we do not find a matching a item will select the last one!
+ if(currentIndex == 0)
+ currentIndex=keyCombo_->count()-1;
+
+ //Set the keyCombo_'s current index to -1 and define the signal-slot for the keyCombo_
keyCombo_->setCurrentIndex(-1);
connect(keyCombo_, SIGNAL(currentIndexChanged(int)),
this,SLOT(slotLoadKeyProfile(int)));
-
+ //Now the currentIndex in keyCombo_ is set to -1, but the currentIndex local variable stores
+ //a non-negativ value. So by setting the current index in the keyCombo_ the slot
+ //above will be called and the right key profile will be loaded.
keyCombo_->setCurrentIndex(currentIndex);
//Set tree focus
diff --git a/src/libMvQtGui/MvQFileDialog.cc b/src/libMvQtGui/MvQFileDialog.cc
index cbbdefb..189f66b 100644
--- a/src/libMvQtGui/MvQFileDialog.cc
+++ b/src/libMvQtGui/MvQFileDialog.cc
@@ -10,6 +10,7 @@
#include "MvQFileDialog.h"
#include <QDebug>
+#include <QDesktopServices>
#include <QFileSystemModel>
#include <QUrl>
@@ -21,30 +22,44 @@
MvQFileIconProvider::MvQFileIconProvider()
{
- char *mvhome=getenv("METVIEW_DIR_SHARE");
+ char *iconHome=getenv("METVIEW_DIR_SHARE");
- if (mvhome == 0)
+ if (iconHome == 0)
{
return;
}
- path_= QString(mvhome);
+ path_= QString(iconHome);
path_.append("/icons/");
pixCache_=new MvQPixmapCache(QPixmap());
+
+
+ char *mv=getenv("METVIEW_USER_DIRECTORY");
+ if(mv)
+ mvHome_=QString(mv);
}
QIcon MvQFileIconProvider::icon(const QFileInfo& info) const
{
if(info.isDir())
{
- QPixmap pix=pixCache_->pixmap("FOLDER");
+ QString pixName="FOLDER";
+
+ if(!mvHome_.isEmpty() && info.filePath() == mvHome_)
+ {
+ pixName="HOME";
+ }
+
+ QPixmap pix=pixCache_->pixmap(pixName);
if(pix.isNull())
{
- pix=QPixmap(path_ + "FOLDER.svg");
- pixCache_->add("FOLDER",pix);
+ pix=QPixmap(path_ + pixName + ".svg");
+ if(!pix.isNull())
+ pixCache_->add(pixName,pix);
}
- return QIcon(pix);
+
+ return QIcon(pix);
}
return QFileIconProvider::icon(info);
@@ -118,14 +133,22 @@ MvQFileDialog::MvQFileDialog(QString startDir,QString title,QWidget *parent): QF
setOptions(QFileDialog::DontUseNativeDialog);
//url sidebar
- QList<QUrl> urlLst=sidebarUrls();
- urlLst << QUrl::fromLocalFile(startDir);
+ QList<QUrl> urlLst;
- char *mvDir=getenv("METVIEW_USER_DIRECTORY");
- if(mvDir)
+ urlLst << QUrl("file:");
+
+ urlLst << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::HomeLocation));
+ //urlLst << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation));
+
+ if(char *mvDir=getenv("METVIEW_USER_DIRECTORY"))
{
urlLst << QUrl::fromLocalFile(QString(mvDir));
- }
+ }
+ /*if(char *scratchDir=getenv("SCRATCH"))
+ {
+ urlLst << QUrl::fromLocalFile(QString(scratchDir));
+ }*/
+
setSidebarUrls(urlLst);
//Filter model
diff --git a/src/libMvQtGui/MvQFileDialog.h b/src/libMvQtGui/MvQFileDialog.h
index d825623..ac06d3d 100644
--- a/src/libMvQtGui/MvQFileDialog.h
+++ b/src/libMvQtGui/MvQFileDialog.h
@@ -30,6 +30,7 @@ public:
private:
QString path_;
MvQPixmapCache* pixCache_;
+ QString mvHome_;
};
diff --git a/src/libMvQtGui/MvQLineEdit.cc b/src/libMvQtGui/MvQLineEdit.cc
index 0604b61..27be16c 100644
--- a/src/libMvQtGui/MvQLineEdit.cc
+++ b/src/libMvQtGui/MvQLineEdit.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -9,11 +9,14 @@
#include "MvQLineEdit.h"
+#include <QLabel>
#include <QResizeEvent>
#include <QStyle>
#include <QToolButton>
-MvQLineEdit::MvQLineEdit(QWidget *parent): QLineEdit(parent)
+MvQLineEdit::MvQLineEdit(QWidget *parent):
+ QLineEdit(parent),
+ iconLabel_(0)
{
clearTb_=new QToolButton(this);
clearTb_->setIcon(QPixmap(":/edit/clear_left.svg"));
@@ -24,24 +27,75 @@ MvQLineEdit::MvQLineEdit(QWidget *parent): QLineEdit(parent)
connect(clearTb_,SIGNAL(clicked()),
this,SLOT(slotClear()));
- QSize tbSize=clearTb_->sizeHint();
+ adjustSize();
+
+ /*QSize tbSize=clearTb_->sizeHint();
int frame = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
setStyleSheet(QString("QLineEdit { padding-right: %1px; } ").arg(tbSize.width()+frame+1));
QSize minSize = minimumSizeHint();
setMinimumSize(qMax(minSize.width(),tbSize.height()+frame*2+2),
- qMax(minSize.height(),tbSize.height()+frame*2+2));
+ qMax(minSize.height(),tbSize.height()+frame*2+2));*/
+
}
-
+
+void MvQLineEdit::setDecoration(QPixmap pix)
+{
+ if(!iconLabel_)
+ iconLabel_=new QLabel(this);
+
+ iconLabel_->setPixmap(pix);
+ iconLabel_->setProperty("lineEdit","true");
+
+ adjustSize();
+
+ /*QSize icSize=iconLabel_->sizeHint();
+ QSize tbSize=clearTb_->sizeHint();
+
+ int frame = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+ setStyleSheet(QString("QLineEdit { padding-left: %1px; } ").arg(icSize.width()+frame+1));
+ QSize minSize = minimumSizeHint();
+ setMinimumSize(qMax(minSize.width(),icSize.width()+tbSize.width()+frame*2+2),
+ qMax(minSize.height(),tbSize.height()+frame*2+2));*/
+}
+
+
+void MvQLineEdit::adjustSize()
+{
+ int frame = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+ QSize tbSize=clearTb_->sizeHint();
+ setStyleSheet(QString("QLineEdit { padding-right: %1px; } ").arg(tbSize.width()+frame+1));
+
+ int leftWidth=0;
+ if(iconLabel_)
+ {
+ QSize icSize=iconLabel_->sizeHint();
+ setStyleSheet(QString("QLineEdit { padding-left: %1px; } ").arg(icSize.width()+frame+1));
+ leftWidth=+icSize.width();
+ }
+ QSize minSize = minimumSizeHint();
+ setMinimumSize(qMax(minSize.width(),leftWidth+tbSize.width()+frame*2+2),
+ qMax(minSize.height(),tbSize.height()+frame*2+2));
+}
+
void MvQLineEdit::resizeEvent(QResizeEvent *)
{
- QSize tbSize = clearTb_->sizeHint();
int frame = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
- clearTb_->move(rect().right()-frame-tbSize.width(),
- (rect().bottom()+ 1-tbSize.height())/2);
+
+ QSize tbSize = clearTb_->sizeHint();
+ clearTb_->move(rect().right()-frame-tbSize.width(),
+ (rect().bottom()+ 1-tbSize.height())/2);
+
+ if(iconLabel_)
+ {
+ QSize icSize=iconLabel_->sizeHint();
+ iconLabel_->move(rect().left()+frame+1,
+ (rect().bottom()+ 1-icSize.height())/2);
+ }
}
+
void MvQLineEdit::slotClear()
{
clear();
diff --git a/src/libMvQtGui/MvQLineEdit.h b/src/libMvQtGui/MvQLineEdit.h
index 29bb5a3..cccbb68 100644
--- a/src/libMvQtGui/MvQLineEdit.h
+++ b/src/libMvQtGui/MvQLineEdit.h
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2013 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -12,6 +12,7 @@
#include <QLineEdit>
+class QLabel;
class QToolButton;
using namespace std;
@@ -22,7 +23,8 @@ Q_OBJECT
public:
MvQLineEdit (QWidget *parent=0);
-
+ void setDecoration(QPixmap);
+
public slots:
void slotClear();
@@ -30,8 +32,12 @@ signals:
void textCleared();
protected:
+ void adjustSize();
void resizeEvent(QResizeEvent*);
+
QToolButton *clearTb_;
+ QLabel* iconLabel_;
+
};
diff --git a/src/libMvQtGui/MvQMainWindow.cc b/src/libMvQtGui/MvQMainWindow.cc
index 1487b4f..633fedf 100644
--- a/src/libMvQtGui/MvQMainWindow.cc
+++ b/src/libMvQtGui/MvQMainWindow.cc
@@ -20,7 +20,7 @@
#include "MvQMainWindow.h"
-MvQMainWindow::MvQMainWindow(QWidget *parent) : QMainWindow(parent)
+MvQMainWindow::MvQMainWindow(QWidget *parent) : QMainWindow(parent), movableToolBars_(true)
{
QApplication::setWindowIcon(
QIcon(QPixmap(QString::fromUtf8(":/window/metview_logo"))));
@@ -44,7 +44,7 @@ MvQMainWindow::MvQMainWindow(QWidget *parent) : QMainWindow(parent)
ProfilesMenu << AnimationMenu << StepMenu <<
ZoomMenu << SelectionMenu << ToolsMenu << SettingsMenu << HelpMenu;
- setIconSize(QSize(20,20));
+ //setIconSize(QSize(20,20));
}
@@ -174,6 +174,9 @@ QToolBar *MvQMainWindow::createToolBar(QString name,QString objectName,Qt::ToolB
toolBar->setObjectName(objectName);
toolBar->setAllowedAreas(allowedAreas);
+ if(movableToolBars_==false)
+ toolBar->setMovable(false);
+
if(toolBar->allowedAreas() == Qt::AllToolBarAreas)
{
addToolBar(Qt::TopToolBarArea,toolBar);
diff --git a/src/libMvQtGui/MvQMainWindow.h b/src/libMvQtGui/MvQMainWindow.h
index 305a6ac..b2bcde8 100644
--- a/src/libMvQtGui/MvQMainWindow.h
+++ b/src/libMvQtGui/MvQMainWindow.h
@@ -38,6 +38,7 @@ public:
static QAction* createAction(ActionType,QObject*);
static QAction* createAction(QString,QString,QString,QObject* parent=0);
static QAction* createSeparator(QObject* parent=0);
+ void setMovableToolBars(bool b) {movableToolBars_=b;}
protected:
void setupMenus(MenuItemMap, MenuOption option = NoOption);
@@ -56,6 +57,7 @@ protected:
QMap<MenuType,QString> menuName_;
QList<MenuType> menuOrder_;
+ bool movableToolBars_;
};
#endif
diff --git a/src/libMvQtGui/MvQOdbModel.cc b/src/libMvQtGui/MvQOdbModel.cc
index 75db0ee..640b0b9 100644
--- a/src/libMvQtGui/MvQOdbModel.cc
+++ b/src/libMvQtGui/MvQOdbModel.cc
@@ -147,9 +147,9 @@ int MvQOdbColumnModel::columnCount( const QModelIndex& /* parent */ ) const
else if(odbVersion_ == MvQOdbMetaData::Version2)
{
if(showTableColumn_)
- return 7;
+ return 6;
else
- return 6;
+ return 5;
}
else
return 0;
@@ -238,9 +238,9 @@ QVariant MvQOdbColumnModel::headerData( const int section, const Qt::Orientation
return tr("Min");
case 4:
return tr("Max");
+ //case 5:
+ // return tr("Missing value");
case 5:
- return tr("Missing value");
- case 6:
return (showTableColumn_)?tr("Table"):QVariant();
default:
return QVariant();
@@ -308,12 +308,12 @@ QVariant MvQOdbColumnModel::headerData( const int section, const Qt::Orientation
else
return QString("N/A");
}
+ //case 5:
+ //{
+ // return ((col->type() =="float" || col->type() == "int") && col->hasMissingValue())?QString::number(col->missingValue()):QString("N/A");
+ //}
case 5:
{
- return ((col->type() =="float" || col->type() == "int") && col->hasMissingValue())?QString::number(col->missingValue()):QString("N/A");
- }
- case 6:
- {
return (showTableColumn_)?col->table():QString();
}
diff --git a/src/libMvQtGui/MvQScmDataWidget.cc b/src/libMvQtGui/MvQScmDataWidget.cc
index 51113a1..6901482 100644
--- a/src/libMvQtGui/MvQScmDataWidget.cc
+++ b/src/libMvQtGui/MvQScmDataWidget.cc
@@ -139,9 +139,15 @@ bool MvQScmDataPanel::selectParam(MvScmVar* var)
if(!var)
return false;
- QModelIndex index=filterModel_->mapFromSource(model_->indexForVar(var,model_->step(),0));
+ int row=0;
+ QModelIndex current=view_->currentIndex();
+ if(current.isValid())
+ row=current.row();
+
+ QModelIndex index=filterModel_->mapFromSource(model_->indexForVar(var,model_->step(),row));
if(index.isValid())
{
+ view_->setCurrentIndex(index);
view_->scrollTo(index,QAbstractItemView::PositionAtCenter);
return true;
}
diff --git a/src/libMvQtGui/mail.qrc b/src/libMvQtGui/mail.qrc
new file mode 100644
index 0000000..24a3a00
--- /dev/null
+++ b/src/libMvQtGui/mail.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="mail" >
+ <file alias="mail_send.svg">../images/mail_send.svg</file>
+ </qresource>
+</RCC>
diff --git a/src/libMvQtGui/mail.qrc.cpp b/src/libMvQtGui/mail.qrc.cpp
deleted file mode 100644
index 8c39e49..0000000
--- a/src/libMvQtGui/mail.qrc.cpp
+++ /dev/null
@@ -1,374 +0,0 @@
-/****************************************************************************
-** Resource object code
-**
-** Created:
-** by: The Resource Compiler for Qt version 4.6.3
-**
-** WARNING! All changes made in this file will be lost!
-*****************************************************************************/
-
-#include <QtCore/qglobal.h>
-
-static const unsigned char qt_resource_data[] = {
- // /vol/metview/data/p4/mv4dev_suse113_inst/metview/src/images/mail_send.svg
- 0x0,0x0,0x12,0xe4,
- 0x3c,
- 0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,
- 0x30,0x22,0x20,0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22,0x55,0x54,0x46,
- 0x2d,0x38,0x22,0x20,0x73,0x74,0x61,0x6e,0x64,0x61,0x6c,0x6f,0x6e,0x65,0x3d,0x22,
- 0x6e,0x6f,0x22,0x3f,0x3e,0xa,0x3c,0x21,0x2d,0x2d,0x20,0x43,0x72,0x65,0x61,0x74,
- 0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x49,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,
- 0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,
- 0x73,0x63,0x61,0x70,0x65,0x2e,0x6f,0x72,0x67,0x2f,0x29,0x20,0x2d,0x2d,0x3e,0xa,
- 0xa,0x3c,0x73,0x76,0x67,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x64,
- 0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,
- 0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x2f,0x31,
- 0x2e,0x31,0x2f,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x63,0x63,
- 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x63,0x72,0x65,0x61,0x74,0x69,0x76,
- 0x65,0x63,0x6f,0x6d,0x6d,0x6f,0x6e,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x6e,0x73,0x23,
- 0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,
- 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,
- 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,
- 0x2d,0x73,0x79,0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0xa,0x20,0x20,0x20,
- 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73,0x76,0x67,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,
- 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,
- 0x30,0x2f,0x73,0x76,0x67,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,
- 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,
- 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0xa,0x20,0x20,0x20,
- 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,
- 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,
- 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22,0xa,0x20,0x20,0x20,0x78,0x6d,
- 0x6c,0x6e,0x73,0x3a,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3d,0x22,0x68,0x74,
- 0x74,0x70,0x3a,0x2f,0x2f,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x2e,0x73,0x6f,
- 0x75,0x72,0x63,0x65,0x66,0x6f,0x72,0x67,0x65,0x2e,0x6e,0x65,0x74,0x2f,0x44,0x54,
- 0x44,0x2f,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x2d,0x30,0x2e,0x64,0x74,0x64,
- 0x22,0xa,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x69,0x6e,0x6b,0x73,0x63,
- 0x61,0x70,0x65,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,
- 0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x2e,0x6f,0x72,0x67,0x2f,0x6e,0x61,0x6d,
- 0x65,0x73,0x70,0x61,0x63,0x65,0x73,0x2f,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,
- 0x22,0xa,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x32,0x22,0xa,
- 0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x32,0x22,0xa,0x20,
- 0x20,0x20,0x69,0x64,0x3d,0x22,0x73,0x76,0x67,0x32,0x22,0xa,0x20,0x20,0x20,0x76,
- 0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31,0x22,0xa,0x20,0x20,0x20,
- 0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,
- 0x3d,0x22,0x30,0x2e,0x34,0x38,0x2e,0x32,0x20,0x72,0x39,0x38,0x31,0x39,0x22,0xa,
- 0x20,0x20,0x20,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x64,0x6f,0x63,0x6e,
- 0x61,0x6d,0x65,0x3d,0x22,0x6d,0x61,0x69,0x6c,0x5f,0x73,0x65,0x6e,0x64,0x2e,0x73,
- 0x76,0x67,0x22,0x3e,0xa,0x20,0x20,0x3c,0x64,0x65,0x66,0x73,0xa,0x20,0x20,0x20,
- 0x20,0x20,0x69,0x64,0x3d,0x22,0x64,0x65,0x66,0x73,0x34,0x22,0x3e,0xa,0x20,0x20,
- 0x20,0x20,0x3c,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,
- 0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6c,0x69,0x6e,
- 0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x33,0x37,0x38,0x39,0x22,
- 0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x6f,0x70,0xa,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x73,0x74,
- 0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x64,0x37,0x65,0x33,0x66,0x34,
- 0x3b,0x73,0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,
- 0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x66,0x66,0x73,0x65,
- 0x74,0x3d,0x22,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,
- 0x64,0x3d,0x22,0x73,0x74,0x6f,0x70,0x33,0x37,0x39,0x31,0x22,0x20,0x2f,0x3e,0xa,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x6f,0x70,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x73,0x74,0x6f,0x70,
- 0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x66,0x37,0x66,0x37,0x66,0x37,0x3b,0x73,
- 0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,0x22,0xa,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,
- 0x22,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,
- 0x22,0x73,0x74,0x6f,0x70,0x33,0x37,0x39,0x33,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,
- 0x20,0x20,0x3c,0x2f,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,
- 0x6e,0x74,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,
- 0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,
- 0x64,0x3d,0x22,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,
- 0x74,0x34,0x30,0x30,0x30,0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,
- 0x74,0x6f,0x70,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,
- 0x22,0x73,0x74,0x6f,0x70,0x33,0x37,0x38,0x33,0x22,0xa,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,0x22,0x30,0x22,0xa,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x73,
- 0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x61,0x64,0x63,0x62,0x64,
- 0x64,0x3b,0x73,0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,
- 0x3b,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x6f,
- 0x70,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,
- 0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x66,0x66,
- 0x66,0x66,0x66,0x66,0x3b,0x73,0x74,0x6f,0x70,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,
- 0x79,0x3a,0x31,0x3b,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,
- 0x66,0x66,0x73,0x65,0x74,0x3d,0x22,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x73,0x74,0x6f,0x70,0x34,0x30,0x30,0x34,0x22,
- 0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x2f,0x6c,0x69,0x6e,0x65,0x61,0x72,
- 0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x6c,
- 0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0xa,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,
- 0x6c,0x6c,0x65,0x63,0x74,0x3d,0x22,0x61,0x6c,0x77,0x61,0x79,0x73,0x22,0xa,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6c,0x69,0x6e,0x6b,0x3a,0x68,0x72,0x65,0x66,
- 0x3d,0x22,0x23,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,
- 0x74,0x33,0x37,0x38,0x39,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,
- 0x3d,0x22,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,
- 0x33,0x37,0x39,0x35,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x31,0x3d,
- 0x22,0x31,0x31,0x2e,0x35,0x35,0x33,0x33,0x33,0x33,0x22,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x79,0x31,0x3d,0x22,0x33,0x2e,0x30,0x31,0x33,0x33,0x33,0x31,0x39,
- 0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x32,0x3d,0x22,0x31,0x34,0x2e,
- 0x36,0x30,0x36,0x36,0x36,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x79,
- 0x32,0x3d,0x22,0x31,0x33,0x2e,0x35,0x37,0x33,0x33,0x33,0x33,0x22,0xa,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x55,0x6e,0x69,
- 0x74,0x73,0x3d,0x22,0x75,0x73,0x65,0x72,0x53,0x70,0x61,0x63,0x65,0x4f,0x6e,0x55,
- 0x73,0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x72,0x61,0x64,0x69,
- 0x65,0x6e,0x74,0x54,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,
- 0x74,0x72,0x69,0x78,0x28,0x31,0x2c,0x30,0x2c,0x30,0x2c,0x30,0x2e,0x39,0x36,0x30,
- 0x31,0x39,0x38,0x39,0x39,0x2c,0x30,0x2e,0x31,0x31,0x39,0x39,0x39,0x39,0x36,0x37,
- 0x2c,0x2d,0x30,0x2e,0x34,0x34,0x35,0x32,0x38,0x39,0x32,0x29,0x22,0x20,0x2f,0x3e,
- 0xa,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,
- 0x69,0x65,0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,
- 0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,0x6c,0x6c,0x65,0x63,0x74,0x3d,0x22,0x61,0x6c,
- 0x77,0x61,0x79,0x73,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6c,0x69,
- 0x6e,0x6b,0x3a,0x68,0x72,0x65,0x66,0x3d,0x22,0x23,0x6c,0x69,0x6e,0x65,0x61,0x72,
- 0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x33,0x37,0x38,0x39,0x22,0xa,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,
- 0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x33,0x38,0x30,0x33,0x22,0xa,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x78,0x31,0x3d,0x22,0x31,0x34,0x2e,0x36,0x33,0x33,0x33,0x33,
- 0x33,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x79,0x31,0x3d,0x22,0x33,0x32,
- 0x2e,0x36,0x36,0x36,0x36,0x36,0x38,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x78,0x32,0x3d,0x22,0x31,0x35,0x2e,0x39,0x32,0x36,0x36,0x36,0x36,0x22,0xa,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x79,0x32,0x3d,0x22,0x2d,0x30,0x2e,0x33,0x34,0x36,
- 0x36,0x36,0x36,0x36,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x72,
- 0x61,0x64,0x69,0x65,0x6e,0x74,0x55,0x6e,0x69,0x74,0x73,0x3d,0x22,0x75,0x73,0x65,
- 0x72,0x53,0x70,0x61,0x63,0x65,0x4f,0x6e,0x55,0x73,0x65,0x22,0xa,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x54,0x72,0x61,0x6e,
- 0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72,0x69,0x78,0x28,0x31,0x2c,
- 0x30,0x2c,0x30,0x2c,0x30,0x2e,0x38,0x38,0x39,0x33,0x37,0x38,0x39,0x39,0x2c,0x30,
- 0x2e,0x31,0x31,0x39,0x39,0x39,0x39,0x36,0x37,0x2c,0x2d,0x30,0x2e,0x30,0x31,0x34,
- 0x37,0x30,0x33,0x35,0x31,0x29,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,0x2f,0x64,
- 0x65,0x66,0x73,0x3e,0xa,0x20,0x20,0x3c,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,
- 0x3a,0x6e,0x61,0x6d,0x65,0x64,0x76,0x69,0x65,0x77,0xa,0x20,0x20,0x20,0x20,0x20,
- 0x69,0x64,0x3d,0x22,0x62,0x61,0x73,0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x70,
- 0x61,0x67,0x65,0x63,0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x23,0x66,0x66,0x66,0x66,0x66,
- 0x66,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x63,0x6f,
- 0x6c,0x6f,0x72,0x3d,0x22,0x23,0x36,0x36,0x36,0x36,0x36,0x36,0x22,0xa,0x20,0x20,
- 0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,
- 0x3d,0x22,0x31,0x2e,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,
- 0x63,0x61,0x70,0x65,0x3a,0x70,0x61,0x67,0x65,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,
- 0x3d,0x22,0x30,0x2e,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,
- 0x63,0x61,0x70,0x65,0x3a,0x70,0x61,0x67,0x65,0x73,0x68,0x61,0x64,0x6f,0x77,0x3d,
- 0x22,0x32,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,
- 0x65,0x3a,0x7a,0x6f,0x6f,0x6d,0x3d,0x22,0x31,0x38,0x2e,0x37,0x35,0x22,0xa,0x20,
- 0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x78,0x3d,
- 0x22,0x35,0x2e,0x36,0x32,0x34,0x32,0x32,0x34,0x32,0x22,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x79,0x3d,0x22,0x31,0x31,
- 0x2e,0x35,0x33,0x39,0x32,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,
- 0x63,0x61,0x70,0x65,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2d,0x75,0x6e,
- 0x69,0x74,0x73,0x3d,0x22,0x70,0x78,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,
- 0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2d,0x6c,
- 0x61,0x79,0x65,0x72,0x3d,0x22,0x6c,0x61,0x79,0x65,0x72,0x36,0x22,0xa,0x20,0x20,
- 0x20,0x20,0x20,0x73,0x68,0x6f,0x77,0x67,0x72,0x69,0x64,0x3d,0x22,0x74,0x72,0x75,
- 0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,
- 0x3a,0x73,0x6e,0x61,0x70,0x2d,0x67,0x72,0x69,0x64,0x73,0x3d,0x22,0x66,0x61,0x6c,
- 0x73,0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,
- 0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,
- 0x31,0x35,0x39,0x39,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,
- 0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x68,0x65,0x69,0x67,0x68,
- 0x74,0x3d,0x22,0x39,0x39,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,
- 0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x78,0x3d,0x22,
- 0x39,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,
- 0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x79,0x3d,0x22,0x32,0x30,0x22,0xa,
- 0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,
- 0x6e,0x64,0x6f,0x77,0x2d,0x6d,0x61,0x78,0x69,0x6d,0x69,0x7a,0x65,0x64,0x3d,0x22,
- 0x30,0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,
- 0x65,0x3a,0x67,0x72,0x69,0x64,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x79,
- 0x70,0x65,0x3d,0x22,0x78,0x79,0x67,0x72,0x69,0x64,0x22,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x67,0x72,0x69,0x64,0x32,0x38,0x31,0x36,0x22,
- 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6d,0x70,0x73,0x70,0x61,0x63,0x69,
- 0x6e,0x67,0x3d,0x22,0x35,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x69,
- 0x73,0x69,0x62,0x6c,0x65,0x3d,0x22,0x74,0x72,0x75,0x65,0x22,0xa,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x64,0x3d,0x22,0x74,0x72,0x75,
- 0x65,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x6e,0x61,0x70,0x76,0x69,
- 0x73,0x69,0x62,0x6c,0x65,0x67,0x72,0x69,0x64,0x6c,0x69,0x6e,0x65,0x73,0x6f,0x6e,
- 0x6c,0x79,0x3d,0x22,0x74,0x72,0x75,0x65,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,
- 0x2f,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x6e,0x61,0x6d,0x65,0x64,0x76,
- 0x69,0x65,0x77,0x3e,0xa,0x20,0x20,0x3c,0x6d,0x65,0x74,0x61,0x64,0x61,0x74,0x61,
- 0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6d,0x65,0x74,0x61,0x64,0x61,
- 0x74,0x61,0x37,0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,
- 0x44,0x46,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x63,0x63,0x3a,0x57,0x6f,
- 0x72,0x6b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x64,0x66,0x3a,
- 0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x3c,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e,0x69,0x6d,0x61,
- 0x67,0x65,0x2f,0x73,0x76,0x67,0x2b,0x78,0x6d,0x6c,0x3c,0x2f,0x64,0x63,0x3a,0x66,
- 0x6f,0x72,0x6d,0x61,0x74,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
- 0x64,0x63,0x3a,0x74,0x79,0x70,0x65,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x72,0x64,0x66,0x3a,0x72,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x3d,
- 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,
- 0x2f,0x64,0x63,0x2f,0x64,0x63,0x6d,0x69,0x74,0x79,0x70,0x65,0x2f,0x53,0x74,0x69,
- 0x6c,0x6c,0x49,0x6d,0x61,0x67,0x65,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x74,0x69,0x74,0x6c,0x65,0x20,0x2f,0x3e,
- 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x63,0x63,0x3a,0x6c,0x69,0x63,
- 0x65,0x6e,0x73,0x65,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x72,0x64,0x66,0x3a,0x72,0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x3d,0x22,0x41,0x70,
- 0x61,0x63,0x68,0x65,0x20,0x4c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x32,0x2e,0x30,
- 0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,
- 0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x3c,0x63,0x63,0x3a,0x41,0x67,0x65,0x6e,0x74,0x3e,0xa,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x74,
- 0x69,0x74,0x6c,0x65,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x3c,0x2f,0x63,0x63,0x3a,0x41,0x67,0x65,0x6e,0x74,0x3e,0xa,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x63,0x72,0x65,0x61,0x74,
- 0x6f,0x72,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,
- 0x70,0x75,0x62,0x6c,0x69,0x73,0x68,0x65,0x72,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x3c,0x63,0x63,0x3a,0x41,0x67,0x65,0x6e,0x74,0x3e,0xa,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,
- 0x74,0x69,0x74,0x6c,0x65,0x3e,0x45,0x43,0x4d,0x57,0x46,0x3c,0x2f,0x64,0x63,0x3a,
- 0x74,0x69,0x74,0x6c,0x65,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x3c,0x2f,0x63,0x63,0x3a,0x41,0x67,0x65,0x6e,0x74,0x3e,0xa,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x70,0x75,0x62,0x6c,0x69,0x73,
- 0x68,0x65,0x72,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,
- 0x3a,0x6c,0x61,0x6e,0x67,0x75,0x61,0x67,0x65,0x3e,0x65,0x6e,0x2d,0x47,0x42,0x3c,
- 0x2f,0x64,0x63,0x3a,0x6c,0x61,0x6e,0x67,0x75,0x61,0x67,0x65,0x3e,0xa,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x73,0x75,0x62,0x6a,0x65,0x63,
- 0x74,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,
- 0x66,0x3a,0x42,0x61,0x67,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x4d,0x65,0x74,0x76,0x69,
- 0x65,0x77,0x20,0x69,0x63,0x6f,0x6e,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,
- 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,
- 0x3a,0x42,0x61,0x67,0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,
- 0x64,0x63,0x3a,0x73,0x75,0x62,0x6a,0x65,0x63,0x74,0x3e,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x64,0x65,0x73,0x63,0x72,0x69,0x70,0x74,
- 0x69,0x6f,0x6e,0x3e,0x4d,0x65,0x74,0x76,0x69,0x65,0x77,0x20,0x69,0x63,0x6f,0x6e,
- 0x3c,0x2f,0x64,0x63,0x3a,0x64,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,
- 0x3e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x63,0x63,0x3a,0x57,0x6f,0x72,
- 0x6b,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,
- 0x3e,0xa,0x20,0x20,0x3c,0x2f,0x6d,0x65,0x74,0x61,0x64,0x61,0x74,0x61,0x3e,0xa,
- 0x20,0x20,0x3c,0x67,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,
- 0x70,0x65,0x3a,0x67,0x72,0x6f,0x75,0x70,0x6d,0x6f,0x64,0x65,0x3d,0x22,0x6c,0x61,
- 0x79,0x65,0x72,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6c,0x61,
- 0x79,0x65,0x72,0x36,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,
- 0x61,0x70,0x65,0x3a,0x6c,0x61,0x62,0x65,0x6c,0x3d,0x22,0x4c,0x61,0x79,0x65,0x72,
- 0x22,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x72,0x65,0x63,0x74,0xa,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,
- 0x75,0x72,0x6c,0x28,0x23,0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,
- 0x65,0x6e,0x74,0x33,0x38,0x30,0x33,0x29,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x6f,0x70,
- 0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x72,0x75,0x6c,
- 0x65,0x3a,0x65,0x76,0x65,0x6e,0x6f,0x64,0x64,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,
- 0x3a,0x23,0x31,0x34,0x32,0x31,0x34,0x63,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,
- 0x77,0x69,0x64,0x74,0x68,0x3a,0x30,0x2e,0x39,0x34,0x33,0x30,0x36,0x38,0x39,0x32,
- 0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x63,0x61,0x70,0x3a,
- 0x62,0x75,0x74,0x74,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,
- 0x6a,0x6f,0x69,0x6e,0x3a,0x6d,0x69,0x74,0x65,0x72,0x3b,0x73,0x74,0x72,0x6f,0x6b,
- 0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c,0x69,0x6d,0x69,0x74,0x3a,0x34,0x3b,0x73,
- 0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,
- 0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x64,0x61,0x73,0x68,0x61,0x72,0x72,0x61,0x79,
- 0x3a,0x6e,0x6f,0x6e,0x65,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x64,0x61,0x73,
- 0x68,0x6f,0x66,0x66,0x73,0x65,0x74,0x3a,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x69,0x64,0x3d,0x22,0x72,0x65,0x63,0x74,0x33,0x39,0x39,0x38,0x22,0xa,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x30,
- 0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,
- 0x22,0x32,0x31,0x2e,0x33,0x34,0x35,0x30,0x39,0x35,0x22,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x78,0x3d,0x22,0x31,0x2e,0x31,0x31,0x39,0x39,0x39,0x39,0x36,0x22,
- 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x79,0x3d,0x22,0x35,0x2e,0x33,0x32,0x31,
- 0x35,0x37,0x30,0x34,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x79,0x3d,
- 0x22,0x31,0x2e,0x30,0x32,0x38,0x36,0x38,0x34,0x35,0x22,0x20,0x2f,0x3e,0xa,0x20,
- 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x6e,0x6f,0x6e,0x65,
- 0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3a,0x23,0x31,0x34,0x32,0x31,0x34,0x63,0x3b,
- 0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x30,0x2e,0x39,
- 0x34,0x33,0x30,0x36,0x38,0x39,0x32,0x70,0x78,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,
- 0x2d,0x6c,0x69,0x6e,0x65,0x63,0x61,0x70,0x3a,0x72,0x6f,0x75,0x6e,0x64,0x3b,0x73,
- 0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3a,0x72,
- 0x6f,0x75,0x6e,0x64,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6f,0x70,0x61,0x63,
- 0x69,0x74,0x79,0x3a,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d,
- 0x22,0x4d,0x20,0x31,0x2e,0x37,0x34,0x36,0x36,0x36,0x36,0x34,0x2c,0x32,0x36,0x2e,
- 0x31,0x30,0x39,0x33,0x32,0x31,0x20,0x31,0x36,0x2e,0x31,0x32,0x2c,0x31,0x33,0x2e,
- 0x31,0x36,0x35,0x39,0x38,0x31,0x20,0x33,0x30,0x2e,0x37,0x34,0x36,0x36,0x36,0x37,
- 0x2c,0x32,0x36,0x2e,0x33,0x33,0x34,0x36,0x33,0x32,0x22,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74,0x68,0x33,0x37,0x38,0x35,0x22,
- 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,
- 0x3a,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x6f,0x72,0x2d,0x63,0x75,0x72,0x76,0x61,
- 0x74,0x75,0x72,0x65,0x3d,0x22,0x30,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x6e,0x6f,0x64,0x65,0x74,0x79,0x70,
- 0x65,0x73,0x3d,0x22,0x63,0x63,0x63,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x20,0x20,
- 0x3c,0x70,0x61,0x74,0x68,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,
- 0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x6f,0x72,0x2d,
- 0x63,0x75,0x72,0x76,0x61,0x74,0x75,0x72,0x65,0x3d,0x22,0x30,0x22,0xa,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74,0x68,0x33,0x37,0x38,
- 0x37,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d,0x22,0x4d,0x20,0x31,
- 0x33,0x2e,0x31,0x32,0x2c,0x31,0x36,0x2e,0x38,0x33,0x38,0x32,0x39,0x33,0x20,0x31,
- 0x2e,0x36,0x36,0x36,0x36,0x36,0x36,0x34,0x2c,0x35,0x2e,0x34,0x39,0x35,0x31,0x34,
- 0x31,0x39,0x20,0x33,0x30,0x2e,0x33,0x33,0x33,0x33,0x33,0x32,0x2c,0x35,0x2e,0x33,
- 0x39,0x32,0x37,0x31,0x38,0x38,0x20,0x31,0x39,0x2e,0x31,0x32,0x2c,0x31,0x36,0x2e,
- 0x38,0x33,0x38,0x32,0x39,0x33,0x20,0x63,0x20,0x2d,0x32,0x2e,0x30,0x30,0x33,0x34,
- 0x38,0x36,0x2c,0x31,0x2e,0x37,0x38,0x35,0x34,0x32,0x20,0x2d,0x33,0x2e,0x39,0x31,
- 0x32,0x38,0x38,0x37,0x2c,0x31,0x2e,0x39,0x38,0x34,0x36,0x30,0x33,0x20,0x2d,0x36,
- 0x2c,0x30,0x20,0x7a,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,
- 0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x75,0x72,0x6c,0x28,0x23,0x6c,0x69,
- 0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x33,0x37,0x39,0x35,
- 0x29,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,
- 0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3a,0x23,0x31,0x34,0x32,0x31,0x34,0x63,0x3b,
- 0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x30,0x2e,0x39,
- 0x37,0x39,0x38,0x39,0x37,0x34,0x34,0x70,0x78,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,
- 0x2d,0x6c,0x69,0x6e,0x65,0x63,0x61,0x70,0x3a,0x72,0x6f,0x75,0x6e,0x64,0x3b,0x73,
- 0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3a,0x72,
- 0x6f,0x75,0x6e,0x64,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6f,0x70,0x61,0x63,
- 0x69,0x74,0x79,0x3a,0x31,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x6f,
- 0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x6e,0x6f,0x64,0x65,0x74,0x79,0x70,0x65,0x73,
- 0x3d,0x22,0x63,0x63,0x63,0x63,0x63,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,0x2f,
- 0x67,0x3e,0xa,0x20,0x20,0x3c,0x67,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,
- 0x73,0x63,0x61,0x70,0x65,0x3a,0x67,0x72,0x6f,0x75,0x70,0x6d,0x6f,0x64,0x65,0x3d,
- 0x22,0x6c,0x61,0x79,0x65,0x72,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,
- 0x22,0x6c,0x61,0x79,0x65,0x72,0x37,0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,
- 0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x6c,0x61,0x62,0x65,0x6c,0x3d,0x22,0x6c,0x65,
- 0x66,0x74,0x22,0x20,0x2f,0x3e,0xa,0x20,0x20,0x3c,0x67,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x67,0x72,0x6f,0x75,0x70,0x6d,
- 0x6f,0x64,0x65,0x3d,0x22,0x6c,0x61,0x79,0x65,0x72,0x22,0xa,0x20,0x20,0x20,0x20,
- 0x20,0x69,0x64,0x3d,0x22,0x6c,0x61,0x79,0x65,0x72,0x38,0x22,0xa,0x20,0x20,0x20,
- 0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x6c,0x61,0x62,0x65,0x6c,
- 0x3d,0x22,0x73,0x63,0x72,0x65,0x77,0x22,0x20,0x2f,0x3e,0xa,0x3c,0x2f,0x73,0x76,
- 0x67,0x3e,0xa,
-
-};
-
-static const unsigned char qt_resource_name[] = {
- // mail
- 0x0,0x4,
- 0x0,0x7,0x37,0xfc,
- 0x0,0x6d,
- 0x0,0x61,0x0,0x69,0x0,0x6c,
- // mail_send.svg
- 0x0,0xd,
- 0xf,0x47,0x16,0x27,
- 0x0,0x6d,
- 0x0,0x61,0x0,0x69,0x0,0x6c,0x0,0x5f,0x0,0x73,0x0,0x65,0x0,0x6e,0x0,0x64,0x0,0x2e,0x0,0x73,0x0,0x76,0x0,0x67,
-
-};
-
-static const unsigned char qt_resource_struct[] = {
- // :
- 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,
- // :/mail
- 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,
- // :/mail/mail_send.svg
- 0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,
-
-};
-
-QT_BEGIN_NAMESPACE
-
-extern Q_CORE_EXPORT bool qRegisterResourceData
- (int, const unsigned char *, const unsigned char *, const unsigned char *);
-
-extern Q_CORE_EXPORT bool qUnregisterResourceData
- (int, const unsigned char *, const unsigned char *, const unsigned char *);
-
-QT_END_NAMESPACE
-
-
-int QT_MANGLE_NAMESPACE(qInitResources_mail)()
-{
- QT_PREPEND_NAMESPACE(qRegisterResourceData)
- (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
- return 1;
-}
-
-Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_mail))
-
-int QT_MANGLE_NAMESPACE(qCleanupResources_mail)()
-{
- QT_PREPEND_NAMESPACE(qUnregisterResourceData)
- (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
- return 1;
-}
-
-Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_mail))
-
diff --git a/src/libMvQtUtil/Makefile.am b/src/libMvQtUtil/Makefile.am
index 69c41cf..5678f9d 100644
--- a/src/libMvQtUtil/Makefile.am
+++ b/src/libMvQtUtil/Makefile.am
@@ -8,9 +8,10 @@ lib_libMvQtUtil_a_SOURCES = MvQKeyManager.cc \
MvQObstatScatterData.cc \
MvQVisDefManager.cc \
MvQXmlQuery.cc \
- MvQKeyManager.h MvQNetworkAccessManager.h MvQNetworkProxyFactory.h MvQObstatScatterData.h MvQVisDefManager.h MvQXmlQuery.h
+ MvQWeatherRoomManager.cc \
+ MvQKeyManager.h MvQNetworkAccessManager.h MvQNetworkProxyFactory.h MvQObstatScatterData.h MvQVisDefManager.h MvQXmlQuery.h MvQWeatherRoomManager.h
-nodist_lib_libMvQtUtil_a_SOURCES = MvQNetworkAccessManager.moc.cpp
+nodist_lib_libMvQtUtil_a_SOURCES = MvQNetworkAccessManager.moc.cpp MvQWeatherRoomManager.moc.cpp
lib_libMvQtUtil_a_CPPFLAGS =
@@ -21,7 +22,7 @@ endif
lib_libMvQtUtil_a_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
lib_libMvQtUtil_a_CPPFLAGS += $(QT_CPPFLAGS) $(MAGPLUS_CPPFLAGS) $(AM_CPPFLAGS)
-BUILT_SOURCES = lib MvQNetworkAccessManager.moc.cpp
+BUILT_SOURCES = lib MvQNetworkAccessManager.moc.cpp MvQWeatherRoomManager.moc.cpp
#all: bin
diff --git a/src/libMvQtUtil/Makefile.in b/src/libMvQtUtil/Makefile.in
index cdd1b3b..522ae3f 100644
--- a/src/libMvQtUtil/Makefile.in
+++ b/src/libMvQtUtil/Makefile.in
@@ -77,6 +77,7 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
subdir = src/libMvQtUtil
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -97,10 +98,10 @@ lib_libMvQtUtil_a_LIBADD =
am__lib_libMvQtUtil_a_SOURCES_DIST = MvQKeyManager.cc \
MvQNetworkAccessManager.cc MvQNetworkProxyFactory.cc \
MvQObstatScatterData.cc MvQVisDefManager.cc MvQXmlQuery.cc \
- MvQKeyManager.h MvQNetworkAccessManager.h \
- MvQNetworkProxyFactory.h MvQObstatScatterData.h \
- MvQVisDefManager.h MvQXmlQuery.h MvQOdbMetaData.cc \
- MvQOdbMetaData.h
+ MvQWeatherRoomManager.cc MvQKeyManager.h \
+ MvQNetworkAccessManager.h MvQNetworkProxyFactory.h \
+ MvQObstatScatterData.h MvQVisDefManager.h MvQXmlQuery.h \
+ MvQWeatherRoomManager.h MvQOdbMetaData.cc MvQOdbMetaData.h
@METVIEW_ODB_TRUE at am__objects_1 = \
@METVIEW_ODB_TRUE@ lib_libMvQtUtil_a-MvQOdbMetaData.$(OBJEXT)
am_lib_libMvQtUtil_a_OBJECTS = \
@@ -109,9 +110,12 @@ am_lib_libMvQtUtil_a_OBJECTS = \
lib_libMvQtUtil_a-MvQNetworkProxyFactory.$(OBJEXT) \
lib_libMvQtUtil_a-MvQObstatScatterData.$(OBJEXT) \
lib_libMvQtUtil_a-MvQVisDefManager.$(OBJEXT) \
- lib_libMvQtUtil_a-MvQXmlQuery.$(OBJEXT) $(am__objects_1)
+ lib_libMvQtUtil_a-MvQXmlQuery.$(OBJEXT) \
+ lib_libMvQtUtil_a-MvQWeatherRoomManager.$(OBJEXT) \
+ $(am__objects_1)
nodist_lib_libMvQtUtil_a_OBJECTS = \
- lib_libMvQtUtil_a-MvQNetworkAccessManager.moc.$(OBJEXT)
+ lib_libMvQtUtil_a-MvQNetworkAccessManager.moc.$(OBJEXT) \
+ lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.$(OBJEXT)
lib_libMvQtUtil_a_OBJECTS = $(am_lib_libMvQtUtil_a_OBJECTS) \
$(nodist_lib_libMvQtUtil_a_OBJECTS)
am__dirstamp = $(am__leading_dot)dirstamp
@@ -172,6 +176,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -195,6 +201,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -381,14 +388,15 @@ noinst_LIBRARIES = lib/libMvQtUtil.a
lib_libMvQtUtil_a_SOURCES = MvQKeyManager.cc \
MvQNetworkAccessManager.cc MvQNetworkProxyFactory.cc \
MvQObstatScatterData.cc MvQVisDefManager.cc MvQXmlQuery.cc \
- MvQKeyManager.h MvQNetworkAccessManager.h \
- MvQNetworkProxyFactory.h MvQObstatScatterData.h \
- MvQVisDefManager.h MvQXmlQuery.h $(am__append_1)
-nodist_lib_libMvQtUtil_a_SOURCES = MvQNetworkAccessManager.moc.cpp
+ MvQWeatherRoomManager.cc MvQKeyManager.h \
+ MvQNetworkAccessManager.h MvQNetworkProxyFactory.h \
+ MvQObstatScatterData.h MvQVisDefManager.h MvQXmlQuery.h \
+ MvQWeatherRoomManager.h $(am__append_1)
+nodist_lib_libMvQtUtil_a_SOURCES = MvQNetworkAccessManager.moc.cpp MvQWeatherRoomManager.moc.cpp
lib_libMvQtUtil_a_CPPFLAGS = $(am__append_2) $(QT_CPPFLAGS) \
$(MAGPLUS_CPPFLAGS) $(AM_CPPFLAGS)
lib_libMvQtUtil_a_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
-BUILT_SOURCES = lib MvQNetworkAccessManager.moc.cpp
+BUILT_SOURCES = lib MvQNetworkAccessManager.moc.cpp MvQWeatherRoomManager.moc.cpp
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -448,6 +456,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtUtil_a-MvQObstatScatterData.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtUtil_a-MvQOdbMetaData.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtUtil_a-MvQVisDefManager.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_libMvQtUtil_a-MvQXmlQuery.Po at am__quote@
.cc.o:
@@ -570,6 +580,22 @@ lib_libMvQtUtil_a-MvQXmlQuery.obj: MvQXmlQuery.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtUtil_a-MvQXmlQuery.obj `if test -f 'MvQXmlQuery.cc'; then $(CYGPATH_W) 'MvQXmlQuery.cc'; else $(CYGPATH_W) '$(srcdir)/MvQXmlQuery.cc'; fi`
+lib_libMvQtUtil_a-MvQWeatherRoomManager.o: MvQWeatherRoomManager.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtUtil_a-MvQWeatherRoomManager.o -MD -MP -MF $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.Tpo -c -o lib_libMvQtUtil_a-MvQWeatherRoomManager.o `test -f 'MvQWeatherRoomManager.cc' || echo '$(srcdir)/'`MvQWeatherRoomManager.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.Tpo $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQWeatherRoomManager.cc' object='lib_libMvQtUtil_a-MvQWeatherRoomManager.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtUtil_a-MvQWeatherRoomManager.o `test -f 'MvQWeatherRoomManager.cc' || echo '$(srcdir)/'`MvQWeatherRoomManager.cc
+
+lib_libMvQtUtil_a-MvQWeatherRoomManager.obj: MvQWeatherRoomManager.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtUtil_a-MvQWeatherRoomManager.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.Tpo -c -o lib_libMvQtUtil_a-MvQWeatherRoomManager.obj `if test -f 'MvQWeatherRoomManager.cc'; then $(CYGPATH_W) 'MvQWeatherRoomManager.cc'; else $(CYGPATH_W) '$(srcdir)/MvQWeatherRoomManager.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.Tpo $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQWeatherRoomManager.cc' object='lib_libMvQtUtil_a-MvQWeatherRoomManager.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtUtil_a-MvQWeatherRoomManager.obj `if test -f 'MvQWeatherRoomManager.cc'; then $(CYGPATH_W) 'MvQWeatherRoomManager.cc'; else $(CYGPATH_W) '$(srcdir)/MvQWeatherRoomManager.cc'; fi`
+
lib_libMvQtUtil_a-MvQOdbMetaData.o: MvQOdbMetaData.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtUtil_a-MvQOdbMetaData.o -MD -MP -MF $(DEPDIR)/lib_libMvQtUtil_a-MvQOdbMetaData.Tpo -c -o lib_libMvQtUtil_a-MvQOdbMetaData.o `test -f 'MvQOdbMetaData.cc' || echo '$(srcdir)/'`MvQOdbMetaData.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtUtil_a-MvQOdbMetaData.Tpo $(DEPDIR)/lib_libMvQtUtil_a-MvQOdbMetaData.Po
@@ -602,6 +628,22 @@ lib_libMvQtUtil_a-MvQNetworkAccessManager.moc.obj: MvQNetworkAccessManager.moc.c
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtUtil_a-MvQNetworkAccessManager.moc.obj `if test -f 'MvQNetworkAccessManager.moc.cpp'; then $(CYGPATH_W) 'MvQNetworkAccessManager.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQNetworkAccessManager.moc.cpp'; fi`
+lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.o: MvQWeatherRoomManager.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.o -MD -MP -MF $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.Tpo -c -o lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.o `test -f 'MvQWeatherRoomManager.moc.cpp' || echo '$(srcdir)/'`MvQWeatherRoomManager.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.Tpo $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQWeatherRoomManager.moc.cpp' object='lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.o `test -f 'MvQWeatherRoomManager.moc.cpp' || echo '$(srcdir)/'`MvQWeatherRoomManager.moc.cpp
+
+lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.obj: MvQWeatherRoomManager.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -MT lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.obj -MD -MP -MF $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.Tpo -c -o lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.obj `if test -f 'MvQWeatherRoomManager.moc.cpp'; then $(CYGPATH_W) 'MvQWeatherRoomManager.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQWeatherRoomManager.moc.c [...]
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.Tpo $(DEPDIR)/lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQWeatherRoomManager.moc.cpp' object='lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libMvQtUtil_a_CPPFLAGS) $(CPPFLAGS) $(lib_libMvQtUtil_a_CXXFLAGS) $(CXXFLAGS) -c -o lib_libMvQtUtil_a-MvQWeatherRoomManager.moc.obj `if test -f 'MvQWeatherRoomManager.moc.cpp'; then $(CYGPATH_W) 'MvQWeatherRoomManager.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQWeatherRoomManager.moc.cpp'; fi`
+
.cpp.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
diff --git a/src/libMvQtUtil/MvQKeyManager.cc b/src/libMvQtUtil/MvQKeyManager.cc
index 969d499..42e966b 100644
--- a/src/libMvQtUtil/MvQKeyManager.cc
+++ b/src/libMvQtUtil/MvQKeyManager.cc
@@ -286,19 +286,36 @@ MvKeyProfile* MvQKeyManager::findProfile(string name)
void MvQKeyManager::loadProfiles()
{
+ MvKeyProfile *firstSysProf=0;
loadProfiles(fProfDefault_,data_);
for(vector<MvKeyProfile*>::iterator it=data_.begin(); it != data_.end(); it++)
{
(*it)->setSystemProfile(true);
+ if(!firstSysProf)
+ {
+ firstSysProf=*it;
+ }
}
+ //If there are no user profiles
if(!systemProfOnly_ && loadProfiles(fProfUser_,data_) == false)
{
+ //If there are no system profiles
if(data_.size() == 0)
{
addProfile("Default");
//createDefaultProfile(prof);
}
+ //If there is at least one system profile we create a
+ //copy of it and add it to the profile list as "Default" and
+ //make it editable
+ else if(firstSysProf)
+ {
+ MvKeyProfile* p=firstSysProf->clone();
+ p->setSystemProfile(false);
+ p->setName("Default");
+ data_.push_back(p);
+ }
saveProfiles();
}
}
diff --git a/src/libMvQtUtil/MvQNetworkProxyFactory.cc b/src/libMvQtUtil/MvQNetworkProxyFactory.cc
index ff95c9a..c43a573 100644
--- a/src/libMvQtUtil/MvQNetworkProxyFactory.cc
+++ b/src/libMvQtUtil/MvQNetworkProxyFactory.cc
@@ -31,7 +31,7 @@ void MvQNetworkProxyFactory::updateSettings()
const char* useProxy = myPref( "USE_NETWORK_PROXY" );
if((useProxy != NULL))
- useProxy_=(strcmp(useProxy, "Yes") == 0 ||
+ useProxy_=(strcmp(useProxy, "Yes") == 0 || strcmp(useProxy, "YES") ==
strcmp(useProxy, "yes") == 0)?true:false;
if(useProxy_)
diff --git a/src/libMvQtUtil/MvQWeatherRoomManager.cc b/src/libMvQtUtil/MvQWeatherRoomManager.cc
new file mode 100644
index 0000000..dc61b47
--- /dev/null
+++ b/src/libMvQtUtil/MvQWeatherRoomManager.cc
@@ -0,0 +1,166 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+
+#include <QDebug>
+#include <QMessageBox>
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
+#include <QNetworkRequest>
+#include <QFile>
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/foreach.hpp>
+
+#include "MvQWeatherRoomManager.h"
+#include "mars.h"
+
+MvQVideoWallUploader::MvQVideoWallUploader(QObject* parent) : QObject(parent)
+{
+ // Create a network access manager to upload the file
+ fileUploadManager_ = new QNetworkAccessManager(this);
+ connect(fileUploadManager_, SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(slotFileUpload(QNetworkReply*)));
+
+ // Create a network access manager to update the wall
+ wallUpdateManager_ = new QNetworkAccessManager(this);
+ connect(wallUpdateManager_, SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(slotWallUpdate(QNetworkReply*)));
+
+ // Define URL
+ //URL_ = "http://eccharts-test.ecmwf.int/wall"; // default, should be in preferences
+ const char *URL = getenv ("METVIEW_WALL_URL"); // override if env var exists
+ URL_ = URL ? URL : "http://localhost:8001/wall";
+
+ // Define token
+ //token_ = "metview"; // default, should be in preferences
+ const char *token = getenv ("METVIEW_WALL_TOKEN"); // override if env var exists
+ token_ = token ? token : "key0";
+}
+
+void MvQVideoWallUploader::wrUpLoader(QString fileName)
+{
+ // Create a network request. Currently, it is hardcoded to "image/png"
+ QString req = QString("%1/upload/?key=%2").arg(URL_).arg(token_);
+ QNetworkRequest netReq(QUrl::fromPercentEncoding(req.toUtf8()));
+ netReq.setHeader(QNetworkRequest::ContentTypeHeader,"image/png");
+
+ // Open input file
+ QFile f(fileName);
+ if ( !f.open(QIODevice::ReadOnly) )
+ {
+ QMessageBox::warning(0, QString("Metview"),
+ tr("Error, unable to open file : %1").
+ arg(fileName));
+
+ return;
+ }
+
+ // Upload file
+ fileUploadManager_->post(netReq,f.readAll());
+}
+
+void MvQVideoWallUploader::slotFileUpload(QNetworkReply* reply)
+{
+ // Check for errors
+ if(reply->error() != QNetworkReply::NoError)
+ {
+ QMessageBox::warning(0, QString("Metview"),
+ tr("Error, unable to get server response : %1").
+ arg(reply->errorString()));
+
+ //marslog(LOG_EROR,"Logo download failed!\nError: %s ",reply->errorString().toStdString().c_str());
+ //log->error(reply->errorString().toStdString() + "\n");
+ //QApplication::exit();
+ return;
+ }
+
+ // Read network reply
+ QByteArray ba = reply->readAll();
+ QString res(ba);
+
+ // Get Id from the reply
+ QString sId = this->getId(res);
+
+ // Create a network request
+ QString url = QString("%1/update-cell/?key=%2").arg(URL_).arg(token_);
+ QNetworkRequest netReq(QUrl::fromPercentEncoding(url.toUtf8()));
+
+ // Create the request
+ QString req = QString("{\"wall\" : \"localhost\", \"cell\" : 0, \"id\": \"%1\"}").arg(sId);
+
+//qDebug() << "reply" << res;
+//qDebug() << "command" << req;
+
+ // Post the network request
+ wallUpdateManager_->post(netReq,req.toUtf8());
+
+ reply->deleteLater();
+}
+
+void MvQVideoWallUploader::slotWallUpdate(QNetworkReply* reply)
+{
+ // Check for errors
+ if(reply->error() != QNetworkReply::NoError)
+ {
+ QMessageBox::warning(0, QString("Metview"),
+ tr("Error, unable to get server response : %1").
+ arg(reply->errorString()));
+
+ //marslog(LOG_EROR,"Logo download failed!\nError: %s ",reply->errorString().toStdString().c_str());
+ //log->error(reply->errorString().toStdString() + "\n");
+ //QApplication::exit();
+ return;
+ }
+
+ reply->deleteLater();
+}
+
+QString MvQVideoWallUploader::getId( QString& res )
+{
+ // Create a text file to write the server response
+ QString tmpFilename(marstmp());
+ QFile tmpFile(tmpFilename);
+ tmpFile.open(QIODevice::WriteOnly);
+
+ // Did we manage to open the tmp file for writing?
+ if (!tmpFile.isOpen())
+ {
+ QMessageBox::warning(0, QString("Metview"),
+ tr("Error, unable to open temporary file %1 to write server response")
+ .arg(tmpFilename));
+
+ return QString("");
+ }
+
+ // Write the server response to the file
+ QTextStream outStream(&tmpFile);
+ outStream << res;
+ tmpFile.close();
+
+ // Parse the response using the boost JSON property tree parser
+ using boost::property_tree::ptree;
+ ptree pt;
+ std::string tmpFilenameStd = tmpFilename.toUtf8().constData();
+
+ try
+ {
+ read_json(tmpFilenameStd, pt);
+ }
+ catch (const boost::property_tree::json_parser::json_parser_error& e)
+ {
+ QMessageBox::warning(0, QString("Metview"),
+ tr("Error, unable to parse JSON response from server"));
+
+ return QString("");
+ }
+
+ return QString(pt.get<std::string>("id").c_str());
+}
diff --git a/src/libMvQtUtil/MvQWeatherRoomManager.h b/src/libMvQtUtil/MvQWeatherRoomManager.h
new file mode 100644
index 0000000..9a30763
--- /dev/null
+++ b/src/libMvQtUtil/MvQWeatherRoomManager.h
@@ -0,0 +1,51 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef MvQWeatherRoomManager_H
+#define MvQWeatherRoomManager_H
+
+#include <QObject>
+
+class QNetworkAccessManager;
+class QNetworkReply;
+
+using namespace std;
+
+// ----------------------------------------------
+// MvQVideoWallUploader
+// Handles communication with a video wall server
+// ----------------------------------------------
+
+class MvQVideoWallUploader : public QObject
+{
+Q_OBJECT
+
+public:
+ MvQVideoWallUploader(QObject* parent=0);
+
+ QString &URL() {return URL_;}
+ QString &token() {return token_;}
+
+ void wrUpLoader(QString);
+
+protected:
+ QString getId( QString& );
+
+protected slots:
+ void slotFileUpload(QNetworkReply*);
+ void slotWallUpdate(QNetworkReply*);
+
+private:
+ QString URL_;
+ QString token_;
+ QNetworkAccessManager* fileUploadManager_;
+ QNetworkAccessManager* wallUpdateManager_;
+};
+
+#endif
diff --git a/src/libUtil/GribMetaData.cc b/src/libUtil/GribMetaData.cc
index 7faedeb..9d914ff 100644
--- a/src/libUtil/GribMetaData.cc
+++ b/src/libUtil/GribMetaData.cc
@@ -1,6 +1,6 @@
/***************************** LICENSE START ***********************************
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
of the Apache License version 2.0. In applying this license, ECMWF does not
waive the privileges and immunities granted to it by virtue of its status as
an Intergovernmental Organization or submit itself to any jurisdiction.
@@ -22,7 +22,6 @@
#include "MvMessageMetaData.h"
#include "LogHandler.h"
-extern string ftmp;
static string GRIB_DEFINITION_PATH_ENV;
static string GRIB_DUMP_EXE;
@@ -30,9 +29,8 @@ static string GRIB_COUNT_EXE;
map<int,string> GribMvDump::keyMap_;
-static void shellCommand(string &, stringstream&, stringstream&);
-void shellCommand(string &command, stringstream& out,stringstream& err)
+static void shellCommand(string &command, stringstream& out,stringstream& err, string &ftmp)
{
FILE *in;
char cbuf[512];
@@ -125,7 +123,7 @@ void GribWmoDump::read(const string& fgrib, int count)
log->command(buf);
//Run dump command
- shellCommand(buf,in,err);
+ shellCommand(buf,in,err,tmpfilename_);
//Get stdout of command
text_=in.str();
@@ -278,7 +276,7 @@ void GribStdDump::read(const string& fgrib, int count)
log->description(sst.str());
log->command(buf);
- shellCommand(buf,in,err);
+ shellCommand(buf,in,err,tmpfilename_);
//Get stdout of command
text_=in.str();
@@ -401,8 +399,10 @@ void GribStdDump::read(const string& fgrib, int count)
//
//===================================================
-GribMvDump::GribMvDump()
+GribMvDump::GribMvDump(string &tmpfilename)
{
+ tmpfilename_ = tmpfilename;
+
if(keyMap_.empty())
{
keyMap_[GRIB_TYPE_STRING]="string";
@@ -437,6 +437,7 @@ void GribMvDump::read(const string& fgrib, int count)
name_space.push_back("ls");
name_space.push_back("mars");
name_space.push_back("parameter");
+ name_space.push_back("statistics");
name_space.push_back("time");
name_space.push_back("vertical");
@@ -448,6 +449,10 @@ void GribMvDump::read(const string& fgrib, int count)
key_blacklist.push_back("distinctLongitudes");
key_blacklist.push_back("distinctLatitudes");
+ // keys which are redundant or not properly defined
+ key_blacklist.push_back("GRIBEditionNumber");
+
+
//Other keys which define constant values and are not really useful for users
key_blacklist.push_back("7777");
key_blacklist.push_back("x");
@@ -913,7 +918,7 @@ int GribMetaData::computeTotalMessageNum()
/*stringstream in, err;
string buf=GRIB_COUNT_EXE + " " + "\"" + fileName_ + "\"" ;
- shellCommand(buf,in,err);
+ shellCommand(buf,in,err,tmpfilename_);
if(!err.str().empty())
return -1;
@@ -976,21 +981,24 @@ void GribMetaData::readMessages(MvKeyProfile *prof)
return;
}
+ //For filtered datasets
if(filterEnabled_==true)
- {
+ {
+ //At the first scan we need o find the message cnt for each filtered message.
+ //The goal is to fill up the filterCnt_ vector.
if(firstScan_)
{
//long currentOffset=0;
int msgCnt=0;
while((gh = grib_handle_new_from_file(0,fp,&err)) != NULL)
{
- if(!gh)
+ if(!gh)
{
- stringstream sst;
+ stringstream sst;
sst << "GribMetaData::readMessages() ---> Unable to create grib handle for message count: " << grib_count+1;
log->error(sst.str());
- return;
- }
+ return;
+ }
msgCnt++;
@@ -1001,14 +1009,7 @@ void GribMetaData::readMessages(MvKeyProfile *prof)
file_offset offset_diff = longValue - filterOffset_[i];
if(ABS(offset_diff) < 120)
{
- grib_count++;
-
filterCnt_[i] = msgCnt;
-
- readMessage(prof,gh);
-
- observer_->messageScanStepChanged(grib_count);
-
break;
}
}
@@ -1018,7 +1019,7 @@ void GribMetaData::readMessages(MvKeyProfile *prof)
stringstream sst;
sst << "GribMetaData::readMessages() ---> Cannot get offset for message count: " << grib_count+1;
log->error(sst.str());
- grib_handle_delete(gh);
+ grib_handle_delete(gh);
return;
}
@@ -1027,33 +1028,32 @@ void GribMetaData::readMessages(MvKeyProfile *prof)
grib_handle_delete(gh);
}
}
- else
+
+ //Read the filtered messages
+ for(unsigned int i=0; i < filterOffset_.size(); i++)
{
- for(unsigned int i=0; i < filterOffset_.size(); i++)
- {
- grib_count++;
+ grib_count++;
- fseek(fp,filterOffset_[i],SEEK_SET);
+ fseek(fp,filterOffset_[i],SEEK_SET);
- int err;
- gh = grib_handle_new_from_file(0,fp,&err);
+ int err;
+ gh = grib_handle_new_from_file(0,fp,&err);
- if(!gh)
- {
- stringstream sst;
- sst << "GribMetaData::readMessages() ---> Unable to create grib handle for offset: " << filterOffset_[i];
- log->error(sst.str());
- return;
- }
+ if(!gh)
+ {
+ stringstream sst;
+ sst << "GribMetaData::readMessages() ---> Unable to create grib handle for offset: " << filterOffset_[i];
+ log->error(sst.str());
+ return;
+ }
- readMessage(prof,gh);
+ readMessage(prof,gh);
- observer_->messageScanStepChanged(grib_count);
+ observer_->messageScanStepChanged(grib_count);
- grib_handle_delete(gh);
- }
- }
- }
+ grib_handle_delete(gh);
+ }
+ }
else
{
//Get messages form the file
diff --git a/src/libUtil/GribMetaData.h b/src/libUtil/GribMetaData.h
index 8988d81..9430736 100644
--- a/src/libUtil/GribMetaData.h
+++ b/src/libUtil/GribMetaData.h
@@ -85,7 +85,7 @@ protected:
class GribWmoDump
{
public:
- GribWmoDump() {};
+ GribWmoDump(string &tmpfilename) {tmpfilename_ = tmpfilename;};
~GribWmoDump();
void clear();
void read(const string&, int);
@@ -96,12 +96,13 @@ public:
protected:
vector<GribSection*> section_;
string text_;
+ string tmpfilename_;
};
class GribStdDump
{
public:
- GribStdDump() {};
+ GribStdDump(string &tmpfilename) {tmpfilename_ = tmpfilename;};
~GribStdDump();
void clear();
void read(const string&, int);
@@ -112,12 +113,13 @@ public:
protected:
vector<GribItem*> item_;
string text_;
+ string tmpfilename_;
};
class GribMvDump
{
public:
- GribMvDump();
+ GribMvDump(string &tmpfilename);
~GribMvDump();
void clear();
void read(const string&, int);
@@ -126,6 +128,7 @@ public:
protected:
vector<GribItem*> item_;
+ string tmpfilename_;
static map<int,string> keyMap_;
};
diff --git a/src/libUtil/Makefile.in b/src/libUtil/Makefile.in
index 2bd9c9d..f9c5eb1 100644
--- a/src/libUtil/Makefile.in
+++ b/src/libUtil/Makefile.in
@@ -40,6 +40,7 @@ subdir = src/libUtil
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -165,6 +166,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -188,6 +191,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/src/libUtil/MvMiscelaneous.cc b/src/libUtil/MvMiscelaneous.cc
index 8c4115f..25f7364 100644
--- a/src/libUtil/MvMiscelaneous.cc
+++ b/src/libUtil/MvMiscelaneous.cc
@@ -16,6 +16,18 @@ inline double exp10(const double r) { return exp(r*2.302585093);} // exp(r*ln(10
namespace metview {
+const double cTMELT = 273.16;
+const double cR3LES = 17.502;
+const double cR3IES = 22.587;
+const double cR4LES = 32.19;
+const double cR4IES = -0.7;
+const double cRD = 287.05;
+const double cRV = 461.51;
+const double cRESTT = 611.21;
+const double cR2ES = cRESTT*cRD/cRV;
+const double cVTMPC1= cRV/cRD-1.;
+const double RAD = 180./3.14159;
+
// Call a shell command
// Returns the result and an error message
void shellCommand(string &command, stringstream& out,stringstream& err)
@@ -64,11 +76,10 @@ bool createWorkDir(string prefix,string& tmpPath,string& errTxt)
}
time_t sec=time(NULL);
- srand (sec);
- int rNum = rand() % 1000 + 1;
+ pid_t pid = getpid();
std::stringstream out;
- out << tmpRoot << "/" + prefix + "_" << sec << "_" << rNum;
+ out << tmpRoot << "/" + prefix + "_" << sec << "_" << pid;
tmpPath=out.str();
if(mkdir(tmpPath.c_str(),0777) != 0)
@@ -253,9 +264,51 @@ double ozonePPMV(double r)
{
double mmr2vmr = 28.97/48.0;
return 1000000*r*mmr2vmr;
-}
-
-
+}
+
+double dewPointFromQ(double p, double t, double q, const string& formula)
+{
+ const string cMixedFormula( "MIXED_PHASE_0_TO_-23" );
+ double ZCVM3, ZCVM4;
+
+ if( formula == cMixedFormula )
+ {
+ double rtwat = cTMELT;
+ double rtice = cTMELT - 23.0;
+ double foealfa = min(1.,pow(((max(rtice,min(rtwat,t))-rtice)/(rtwat-rtice)),2.0) );
+
+ ZCVM3 = foealfa*cR3LES + (1.-foealfa)*cR3IES;
+ ZCVM4 = foealfa*cR4LES + (1.-foealfa)*cR4IES;
+ }
+ else
+ {
+ if( t > cTMELT )
+ {
+ ZCVM3=cR3LES;
+ ZCVM4=cR4LES;
+ }
+ else
+ {
+ ZCVM3=cR3IES;
+ ZCVM4=cR4IES;
+ }
+ }
+
+ double ZFRAC = log(p*q/(cR2ES*(1.+cVTMPC1*q)))/ZCVM3;
+
+ return (cTMELT-ZFRAC*ZCVM4)/(1.-ZFRAC);
+}
+
+double speed( double u, double v )
+{
+ return sqrt(pow(u,2) + pow(v,2));
+}
+
+double direction( double u, double v )
+{
+ return (-90.0 - atan2(v,u)*RAD);
+}
+
} //namespace metview
diff --git a/src/libUtil/MvMiscelaneous.h b/src/libUtil/MvMiscelaneous.h
index 73a2814..45758a1 100644
--- a/src/libUtil/MvMiscelaneous.h
+++ b/src/libUtil/MvMiscelaneous.h
@@ -28,6 +28,9 @@ double saturationVapourPressure(double t);
double vapourPressure(double p,double q);
double vapourPPMV(double p,double q);
double ozonePPMV(double r);
+double dewPointFromQ(double p, double t, double q, const string& formula);
+double speed(double u, double v);
+double direction(double u, double v);
template<typename TYPE>
inline string toString(const TYPE& in)
diff --git a/src/metview_config.h b/src/metview_config.h
index cab83ef..4e0994a 100644
--- a/src/metview_config.h
+++ b/src/metview_config.h
@@ -1,6 +1,9 @@
/* src/metview_config.h. Generated from metview_config.h.in by configure. */
/* src/metview_config.h.in. Generated from configure.ac by autoheader. */
+/* define if the Boost library is available */
+#define HAVE_BOOST /**/
+
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
@@ -72,7 +75,7 @@
/* #undef METVIEW_32BIT */
/* Turn on any additional debugging support */
-/* #undef METVIEW_DEBUG */
+#define METVIEW_DEBUG 1
/* Turn on experimental interpolation library - only in developments. */
#define METVIEW_ECREGRID 1
@@ -90,10 +93,10 @@
#define METVIEW_GUI 1
/* Turn on the INPE support */
-/* #undef METVIEW_INPE */
+#define METVIEW_INPE 1
/* Install path. */
-#define METVIEW_INSTALL_PATH "/usr/local/apps/Metview/4.4.3"
+#define METVIEW_INSTALL_PATH "/tmp/cgi/mv4_install"
/* Turn on Magics++ related modules. */
#define METVIEW_MAGICS 1
@@ -102,7 +105,7 @@
#define METVIEW_MARS 1
/* Turn on the MARS catalog support. */
-/* #undef METVIEW_MARS_CATALOG */
+#define METVIEW_MARS_CATALOG 1
/* Turn on the MARS ODB support */
#define METVIEW_MARS_ODB 1
@@ -141,7 +144,7 @@
/* #undef METVIEW_QTDEBUG */
/* Release date of this version. */
-#define METVIEW_RELEASE_DATE "15-October-2013"
+#define METVIEW_RELEASE_DATE "12-May-2014"
/* Turn on the SCM auxillary files */
/* #undef METVIEW_SCM_AUX */
@@ -150,7 +153,10 @@
#define METVIEW_SITE "ecmwf"
/* Version of Metview. */
-#define METVIEW_VERSION "4.4.3"
+#define METVIEW_VERSION "4.4.7"
+
+/* Turn on the Weather Room export facility */
+#define METVIEW_WEATHER_ROOM 1
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
/* #undef NO_MINUS_C_MINUS_O */
diff --git a/src/metview_config.h.in b/src/metview_config.h.in
index 825e6e3..5057012 100644
--- a/src/metview_config.h.in
+++ b/src/metview_config.h.in
@@ -1,5 +1,8 @@
/* src/metview_config.h.in. Generated from configure.ac by autoheader. */
+/* define if the Boost library is available */
+#undef HAVE_BOOST
+
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
@@ -151,6 +154,9 @@
/* Version of Metview. */
#undef METVIEW_VERSION
+/* Turn on the Weather Room export facility */
+#undef METVIEW_WEATHER_ROOM
+
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
diff --git a/src/uPlot/AverageView.cc b/src/uPlot/AverageView.cc
index 19ccc90..250dde1 100644
--- a/src/uPlot/AverageView.cc
+++ b/src/uPlot/AverageView.cc
@@ -29,6 +29,9 @@ AverageViewFactory::Build ( Page& page,
// Expand request
MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
+ // Copy hidden parameters
+ expReq.mars_merge(contextRequest);
+
// Instantiate a Average view
return new AverageView ( page, expReq, setupRequest );
}
@@ -90,7 +93,8 @@ AverageViewM3Factory::Translate ( const MvRequest& in )
AverageView::AverageView ( Page& owner,
const MvRequest& viewRequest,
const MvRequest& setupRequest ):
- CommonXSectView ( owner, viewRequest, setupRequest )
+ CommonXSectView ( owner, viewRequest, setupRequest ),
+ yReverse_("off")
{
ApplicationName("MXAVERAGE");
SetVariables(viewRequest,true);
@@ -98,7 +102,8 @@ AverageView::AverageView ( Page& owner,
AverageView::AverageView (const AverageView &old) :
CommonXSectView(old),
- axisType_(old.axisType_)
+ axisType_(old.axisType_),
+ yReverse_("off")
{
}
@@ -165,31 +170,54 @@ bool AverageView::UpdateView ()
if ( string(viewRequest_.getVerb()) == CARTESIANVIEW )
return true;
- // Translate geographical coordinates
+ // Check where the axes min/max values should be taken from
+ bool axisAuto = false;
+ if ( (const char*)viewRequest_("_DEFAULT") &&
+ (int)viewRequest_("_DEFAULT") == 1 &&
+ (const char*)viewRequest_("_DATAATTACHED") &&
+ strcmp((const char*)viewRequest_("_DATAATTACHED"),"YES") == 0
+ )
+ axisAuto = true;
+
+ // Translate X coordinates
MvRequest cartView("CARTESIANVIEW");
- cartView("X_AUTOMATIC") = "off";
+ if ( axisAuto )
+ cartView("X_AUTOMATIC") = "on";
+ else
+ {
+ cartView("X_AUTOMATIC") = "off";
+ if ( axisType_ == "LATITUDE" )
+ {
+ cartView("X_MIN") = latMin_;
+ cartView("X_MAX") = latMax_;
+ }
+ else
+ {
+ cartView("X_MIN") = lonMin_;
+ cartView("X_MAX") = lonMax_;
+ }
+ }
cartView("X_AXIS_TYPE") = axisType_.c_str();
- if ( axisType_ == "LATITUDE" )
+
+ // Translate Y coordinates
+ if ( axisAuto )
{
- cartView("X_MIN") = latMin_;
- cartView("X_MAX") = latMax_;
+ cartView("Y_AUTOMATIC") = "on";
+ cartView("Y_AUTOMATIC_REVERSE") = yReverse_.c_str();
}
else
{
- cartView("X_MIN") = lonMin_;
- cartView("X_MAX") = lonMax_;
+ cartView("Y_AUTOMATIC") = "off";
+ cartView("Y_MIN") = yMin_;
+ cartView("Y_MAX") = yMax_;
}
- // Translate Y coordinates
- cartView("Y_AUTOMATIC") = "off";
const char* log = viewRequest_("VERTICAL_SCALING");
if ( log && strcmp(log,"LOG") == 0)
cartView("Y_AXIS_TYPE") = "logarithmic";
else
cartView("Y_AXIS_TYPE") = "regular";
- cartView("Y_MIN") = yMin_;
- cartView("Y_MAX") = yMax_;
// Copy axis definition
cartView.setValue("HORIZONTAL_AXIS",viewRequest_.getSubrequest("HORIZONTAL_AXIS"));
@@ -215,3 +243,10 @@ bool AverageView::UpdateView ()
return true;
}
+
+void AverageView::ApplicationInfo ( MvRequest& req )
+{
+ // Save direction of the vertical axis
+ if ( (const char*)req("Y_AUTOMATIC_REVERSE") )
+ yReverse_ = (const char*)req("Y_AUTOMATIC_REVERSE");
+}
diff --git a/src/uPlot/AverageView.h b/src/uPlot/AverageView.h
index 1c68212..92600fd 100644
--- a/src/uPlot/AverageView.h
+++ b/src/uPlot/AverageView.h
@@ -114,10 +114,15 @@ public:
private:
- string axisType_;
+ // Save some data specific to some DataApplication
+ virtual void ApplicationInfo( MvRequest& );
// No assignment
AverageView& operator=(const AverageView&);
+
+ // Variables members
+ string axisType_; // X axis type: "latitude"/"longitude"
+ string yReverse_; // Y axis direction: "on"/"off"
};
#endif
diff --git a/src/uPlot/CommonXSectView.cc b/src/uPlot/CommonXSectView.cc
index f778ab6..d39981d 100644
--- a/src/uPlot/CommonXSectView.cc
+++ b/src/uPlot/CommonXSectView.cc
@@ -52,13 +52,14 @@ CommonXSectView::~CommonXSectView()
// Synchronous call service. Calls a service and wait its return.
bool CommonXSectView::CallService(const MvRequest &dataReq, PmContext & context, MvRequest& replyReq)
{
- if ( dataReq.getVerb() != GRIB )
+ if ( dataReq.getVerb() != GRIB && dataReq.getVerb() != NETCDF )
return false;
MvRequest appRequest(ApplicationName().c_str());
appRequest("DATA") = dataReq;
appRequest("_CONTEXT") = viewRequest_;
appRequest("_ACTION") = (const char*)dataReq("_ACTION") ? (const char*)dataReq("_ACTION") : "prepare";
+ appRequest("_VERB") = (const char*)dataReq("_VERB") ? (const char*)dataReq("_VERB") : "";
//( new PlotModTask (this, context, serviceName_.c_str(), appRequest ) )->run();
PlotModTask* pmt = new PlotModTask (this, context, serviceName_.c_str(), appRequest );
diff --git a/src/uPlot/CommonXSectView.h b/src/uPlot/CommonXSectView.h
index 03db6ff..bcbc114 100644
--- a/src/uPlot/CommonXSectView.h
+++ b/src/uPlot/CommonXSectView.h
@@ -111,7 +111,7 @@ protected:
virtual void Draw(SubPage *);
// Save some data specific to some DataApplication
- virtual void ApplicationInfo( MvRequest& ) {}
+ virtual void ApplicationInfo( MvRequest& ) = 0;
#if 0
// Provide Axis information
diff --git a/src/uPlot/DataBuilder.cc b/src/uPlot/DataBuilder.cc
index a6f661e..a999660 100644
--- a/src/uPlot/DataBuilder.cc
+++ b/src/uPlot/DataBuilder.cc
@@ -24,17 +24,23 @@ static DataBuilder dataBuilderInstance("DataBuilder");
Presentable*
DataBuilder::Execute (PmContext& context)
{
- MvRequest dataReq = context.InRequest();
+ MvRequest dataReq = context.InRequest();
- // Creation of a new PlotPage and associated pages
- Presentable* superpage = 0;
- MvRequest defaultSuperPage = ObjectList::CreateDefaultRequest ( "PLOT_SUPERPAGE" );
+ // Make sure the macro is generated in current dir, even when defaults are used.
+ const char* fullName = (const char*)dataReq("_NAME");
+ const char* path = 0;
+ if ( fullName )
+ path = dirname(fullName);
- // Create default page and add view to this request
- MvRequest pageRequest = ObjectList::CreateDefaultRequest ( "PLOT_PAGE" );
+ // Creation of a new PlotPage and associated pages
+ Presentable* superpage = 0;
+ MvRequest defaultSuperPage = ObjectList::CreateDefaultRequest ( "PLOT_SUPERPAGE",0,path );
- // First try to get view from the context
- const char* viewName = GetView(context);
+ // Create default page and add view to this request
+ MvRequest pageRequest = ObjectList::CreateDefaultRequest ( "PLOT_PAGE" );
+
+ // First try to get view from the context
+ const char* viewName = GetView(context);
#if 0 //uPlot
// This code is doing nothing for GRIB data.
@@ -49,35 +55,35 @@ DataBuilder::Execute (PmContext& context)
}
#endif
- // Create view request
- if ( viewName )
- {
- // Check if there is a view request
- MvRequest viewRequest = dataReq("_VIEW_REQUEST");
- if ( !viewRequest )
- {
- // Build a default
- viewRequest = ObjectList::CreateDefaultRequest( viewName,EXPAND_NO_DEFAULT );
- viewRequest("_ORIGIN") = "DataBuilder";
- }
- pageRequest("VIEW") = viewRequest;
- }
-
- defaultSuperPage("PAGES") = pageRequest;
-
- superpage = new SuperPage ( defaultSuperPage );
- ensure ( superpage != 0 );
-
- // Put the new branch in the tree
- Root::Instance().Insert ( superpage );
-
- // Add the page Ids in the reply
- // Create a Reply
- MvRequest reply;
- superpage->CreateReply ( reply );
- context.AddToReply ( reply );
-
- // Drop the data and add draw task if needed
+ // Create view request
+ if ( viewName )
+ {
+ // Check if there is a view request
+ MvRequest viewRequest = dataReq("_VIEW_REQUEST");
+ if ( !viewRequest )
+ {
+ // Build a default
+ viewRequest = ObjectList::CreateDefaultRequest( viewName,EXPAND_NO_DEFAULT );
+ viewRequest("_ORIGIN") = "DataBuilder";
+ }
+ pageRequest("VIEW") = viewRequest;
+ }
+
+ defaultSuperPage("PAGES") = pageRequest;
+
+ superpage = new SuperPage ( defaultSuperPage );
+ ensure ( superpage != 0 );
+
+ // Put the new branch in the tree
+ Root::Instance().Insert ( superpage );
+
+ // Add the page Ids in the reply
+ // Create a Reply
+ MvRequest reply;
+ superpage->CreateReply ( reply );
+ context.AddToReply ( reply );
+
+ // Drop the data and add draw task if needed
#if 0
if ( !superpage->HasDrawTask () )
{
@@ -86,7 +92,7 @@ if ( !superpage->HasDrawTask () )
superpage->HasDrawTask ( true );
}
#endif
- superpage->Drop(context);
+ superpage->Drop(context);
- return superpage;
+ return superpage;
}
diff --git a/src/uPlot/HovmoellerView.cc b/src/uPlot/HovmoellerView.cc
index 2d3ba38..96d864d 100644
--- a/src/uPlot/HovmoellerView.cc
+++ b/src/uPlot/HovmoellerView.cc
@@ -31,6 +31,9 @@ HovmoellerViewFactory::Build ( Page& page,
// Expand request
MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
+ // Copy hidden parameters
+ expReq.mars_merge(contextRequest);
+
// Instantiate a Hovmoeller view
return new HovmoellerView ( page, expReq, setupRequest );
}
@@ -189,7 +192,7 @@ bool HovmoellerView::UpdateView ()
else if ( type_ == HOVAREA )
UpdateViewArea( swapAxes, viewRequest_, cartView );
else
- UpdateViewVert( swapAxes, viewRequest_, cartView );
+ UpdateViewVert( viewRequest_, cartView );
// Copy PAGE and SUBPAGE definition
CopySomeParameters( viewRequest_,cartView,"PAGE" );
@@ -214,9 +217,23 @@ bool HovmoellerView::UpdateView ()
void HovmoellerView::UpdateViewLine ( bool swapAxes, MvRequest& in, MvRequest& cartView )
{
+ // Check where the axes min/max values should be taken from
+ if ( (const char*)viewRequest_("_DEFAULT") &&
+ (int)viewRequest_("_DEFAULT") == 1 &&
+ (const char*)viewRequest_("_DATAATTACHED") &&
+ strcmp((const char*)viewRequest_("_DATAATTACHED"),"YES") == 0
+ )
+ {
+ cartView("X_AUTOMATIC") = "on";
+ cartView("Y_AUTOMATIC") = "on";
+ }
+ else
+ {
+ cartView("X_AUTOMATIC") = "off";
+ cartView("Y_AUTOMATIC") = "off";
+ }
+
// Translate Geographical and Time coordinates
- cartView("X_AUTOMATIC") = "off";
- cartView("Y_AUTOMATIC") = "off";
if ( swapAxes )
{
cartView("Y_AXIS_TYPE") = "geoline";
@@ -258,9 +275,26 @@ void HovmoellerView::UpdateViewArea ( bool swapAxes, MvRequest& in, MvRequest& c
if ( !geoAxisReq )
geoAxisReq.setVerb("MAXIS");
+ // Check where the axes min/max values should be taken from
+ bool axisAuto;
+ if ( (const char*)viewRequest_("_DEFAULT") &&
+ (int)viewRequest_("_DEFAULT") == 1 &&
+ (const char*)viewRequest_("_DATAATTACHED") &&
+ strcmp((const char*)viewRequest_("_DATAATTACHED"),"YES") == 0
+ )
+ {
+ cartView("X_AUTOMATIC") = "on";
+ cartView("Y_AUTOMATIC") = "on";
+ axisAuto = true;
+ }
+ else
+ {
+ cartView("X_AUTOMATIC") = "off";
+ cartView("Y_AUTOMATIC") = "off";
+ axisAuto = false;
+ }
+
// Translate Geographical and Time coordinates
- cartView("X_AUTOMATIC") = "off";
- cartView("Y_AUTOMATIC") = "off";
string dir = (const char*)in("AVERAGE_DIRECTION");
int hAxis, vAxis; // 1 - time, 2 - latitude, 3 - longitude
if ( swapAxes )
@@ -283,9 +317,14 @@ void HovmoellerView::UpdateViewArea ( bool swapAxes, MvRequest& in, MvRequest& c
geoAxisReq("AXIS_ORIENTATION") = "VERTICAL";
if ( vAxis == 2 ) // vertical latitude axis
{
- cartView("Y_MIN") = latMin_;
- cartView("Y_MAX") = latMax_;
geoAxisReq("AXIS_TICK_LABEL_TYPE") = "LATITUDE";
+ if ( axisAuto )
+ cartView("Y_AUTOMATIC_REVERSE") = "on";
+ else
+ {
+ cartView("Y_MIN") = latMin_;
+ cartView("Y_MAX") = latMax_;
+ }
}
else // vertical longitude axis
{
@@ -330,61 +369,75 @@ void HovmoellerView::UpdateViewArea ( bool swapAxes, MvRequest& in, MvRequest& c
}
}
-void HovmoellerView::UpdateViewVert ( bool swapAxes, MvRequest& in, MvRequest& cartView )
+void HovmoellerView::UpdateViewVert ( MvRequest& in, MvRequest& cartView )
{
- // Translate Geographical and Time coordinates
+ // Vertical scaling mode
const char* vs = "regular";
if ( (const char*)in("VERTICAL_SCALING") && strcmp((const char*)in("VERTICAL_SCALING"),"LOG") == 0 )
vs = "logarithmic";
- cartView("X_AUTOMATIC") = "off";
- cartView("Y_AUTOMATIC") = "off";
- if ( swapAxes )
+ // Check where the axes min/max values should be taken from
+ if ( (const char*)viewRequest_("_DEFAULT") &&
+ (int)viewRequest_("_DEFAULT") == 1 &&
+ (const char*)viewRequest_("_DATAATTACHED") &&
+ strcmp((const char*)viewRequest_("_DATAATTACHED"),"YES") == 0
+ )
{
- cartView("X_AXIS_TYPE") = vs;
- cartView("X_MIN") = yMin_;
- cartView("X_MAX") = yMax_;
-
- cartView("Y_AXIS_TYPE") = "date";
- cartView("Y_DATE_MIN") = dateMin_.c_str();
- cartView("Y_DATE_MAX") = dateMax_.c_str();
-
- // Copy axis definition
- cartView.setValue("HORIZONTAL_AXIS",in.getSubrequest("VERTICAL_AXIS"));
- cartView.setValue("VERTICAL_AXIS",in.getSubrequest("TIME_AXIS"));
+ cartView("X_AUTOMATIC") = "on";
+ cartView("Y_AUTOMATIC") = "on";
}
else
{
- cartView("X_AXIS_TYPE") = "date";
- cartView("X_DATE_MIN") = dateMin_.c_str();
- cartView("X_DATE_MAX") = dateMax_.c_str();
+ cartView("X_AUTOMATIC") = "off";
+ cartView("Y_AUTOMATIC") = "off";
+ }
- cartView("Y_AXIS_TYPE") = vs;
- cartView("Y_MIN") = yMin_;
- cartView("Y_MAX") = yMax_;
+ // Translate Vertical and Time coordinates
+ cartView("X_AXIS_TYPE") = "date";
+ cartView("X_DATE_MIN") = dateMin_.c_str();
+ cartView("X_DATE_MAX") = dateMax_.c_str();
- // Copy axis definition
- cartView.setValue("HORIZONTAL_AXIS",in.getSubrequest("TIME_AXIS"));
- cartView.setValue("VERTICAL_AXIS",in.getSubrequest("VERTICAL_AXIS"));
- }
+ cartView("Y_AXIS_TYPE") = vs;
+ cartView("Y_MIN") = yMin_;
+ cartView("Y_MAX") = yMax_;
+
+ // Copy axis definition
+ cartView.setValue("HORIZONTAL_AXIS",in.getSubrequest("TIME_AXIS"));
+ cartView.setValue("VERTICAL_AXIS",in.getSubrequest("VERTICAL_AXIS"));
}
void HovmoellerView::ApplicationInfo( MvRequest& req)
{
+ // If it is not a VIEW request, try to find a hidden VIEW in the request
+ MvRequest viewReq;
+ if ( ObjectList::IsView(req.getVerb()) )
+ viewReq = req;
+ else
+ {
+ MvRequest aux = req.getSubrequest("NETCDF_DATA");
+ if ( (const char*)aux("_CARTESIANVIEW") )
+ viewReq = aux.getSubrequest("_CARTESIANVIEW");
+ else
+ {
+ PlotMod::Instance().MetviewError ("Missing View Request in HovmoellerView::ApplicationInfo","WARNING");
+ return;
+ }
+ }
+
// Update the DATE_MIN/MAX parameters in the View if the original values
// were AUTOMATIC and the Hovmoeller application provided new values
if ( bDateMin_ )
{
- string str = (const char*)req("X_DATE_MIN") ? "X_DATE_MIN" : "Y_DATE_MIN";
- dateMin_ = (const char*)req(str.c_str());
- viewRequest_(str.c_str()) = (const char*)req(str.c_str());
+ string str = (const char*)viewReq("X_DATE_MIN") ? "X_DATE_MIN" : "Y_DATE_MIN";
+ dateMin_ = (const char*)viewReq(str.c_str());
+ viewRequest_(str.c_str()) = dateMin_.c_str();
bDateMin_ = false;
}
if ( bDateMax_ )
{
- string str = (const char*)req("X_DATE_MAX") ? "X_DATE_MAX" : "Y_DATE_MAX";
- dateMax_ = (const char*)req(str.c_str());
- viewRequest_(str.c_str()) = (const char*)req(str.c_str());
+ string str = (const char*)viewReq("X_DATE_MAX") ? "X_DATE_MAX" : "Y_DATE_MAX";
+ dateMax_ = (const char*)viewReq(str.c_str());
+ viewRequest_(str.c_str()) = dateMax_.c_str();
bDateMax_ = false;
}
diff --git a/src/uPlot/HovmoellerView.h b/src/uPlot/HovmoellerView.h
index e988400..962ee9f 100644
--- a/src/uPlot/HovmoellerView.h
+++ b/src/uPlot/HovmoellerView.h
@@ -119,7 +119,7 @@ private:
// Update View according to the Hovmoeller type
void UpdateViewLine ( bool, MvRequest&, MvRequest& );
void UpdateViewArea ( bool, MvRequest&, MvRequest& );
- void UpdateViewVert ( bool, MvRequest&, MvRequest& );
+ void UpdateViewVert ( MvRequest&, MvRequest& );
// Variable members
string type_; // Line, Area, Vertical
diff --git a/src/uPlot/MagicsTranslator.cc b/src/uPlot/MagicsTranslator.cc
index 0745edf..6c644fc 100644
--- a/src/uPlot/MagicsTranslator.cc
+++ b/src/uPlot/MagicsTranslator.cc
@@ -36,8 +36,9 @@ NetCDFTranslator ncGeoPTranslatorInstance ( "NETCDF_GEO_POINTS" );
NetCDFTranslator ncGeoVTranslatorInstance ( "NETCDF_GEO_VECTORS" );
NetCDFTranslator ncGeoMTranslatorInstance ( "NETCDF_GEO_MATRIX" );
NetCDFTranslator ncMatTranslatorInstance ( "NETCDF_XY_MATRIX" );
+NetCDFTranslator ncXYVTTranslatorInstance ( "NETCDF_XY_VECTORS" );
NetCDFTranslator ncXYPTranslatorInstance ( "NETCDF_XY_POINTS" );
-ObsTranslator obsTranslatorInstance ( "POBS" );
+ObsTranslator obsTranslatorInstance ( "MOBS" );
PageTranslator pageTranslatorInstance ( "PAGE" );
SymbolTranslator symbolTranslatorInstance ( "PSYMB" );
TextTranslator textTranslatorInstance ( "PTEXT" );
@@ -275,9 +276,9 @@ BufrTranslator::Execute ( const MvRequest& dataUnitRequest,
// Obs Translator, for setting how the obs. should be plotted.
//
MvRequest
-ObsTranslator::Execute ( const MvRequest& mapviewRequest )
+ObsTranslator::Execute ( const MvRequest& req )
{
- return mapviewRequest;
+ return req;
}
//=================================================================
@@ -379,7 +380,7 @@ MvRequest
PageTranslator::Execute ( const MvRequest& viewRequest )
{
// Set layout
- MvRequest metviewRequest = viewRequest;
+ MvRequest metviewRequest = viewRequest;
MvRequest magicsRequest("PAGE");
double width = metviewRequest ( "_WIDTH" );
double height = metviewRequest ( "_HEIGHT" );
@@ -432,18 +433,18 @@ PageTranslator::Execute ( const MvRequest& viewRequest )
}
else if ( projection )
{
- // Translate AREA parameter
- const char* area = metviewRequest( "AREA" );
- if ( area != 0 )
- {
- magicsRequest( "SUBPAGE_LOWER_LEFT_LATITUDE" ) = (double)metviewRequest ( "AREA", 0 );
- magicsRequest( "SUBPAGE_LOWER_LEFT_LONGITUDE") = (double)metviewRequest ( "AREA", 1 );
- magicsRequest( "SUBPAGE_UPPER_RIGHT_LATITUDE") = (double)metviewRequest ( "AREA", 2 );
- magicsRequest( "SUBPAGE_UPPER_RIGHT_LONGITUDE")= (double)metviewRequest ( "AREA", 3 );
- }
-
- // Translate MAP to SUBPAGE_MAP parameters
- CopySomeParameters ( metviewRequest,magicsRequest,"MAP_","SUBPAGE_MAP_" );
+ // Translate AREA parameter
+ const char* area = metviewRequest( "AREA" );
+ if ( area != 0 )
+ {
+ magicsRequest( "SUBPAGE_LOWER_LEFT_LATITUDE" ) = (double)metviewRequest ( "AREA", 0 );
+ magicsRequest( "SUBPAGE_LOWER_LEFT_LONGITUDE") = (double)metviewRequest ( "AREA", 1 );
+ magicsRequest( "SUBPAGE_UPPER_RIGHT_LATITUDE") = (double)metviewRequest ( "AREA", 2 );
+ magicsRequest( "SUBPAGE_UPPER_RIGHT_LONGITUDE")= (double)metviewRequest ( "AREA", 3 );
+ }
+
+ // Translate MAP to SUBPAGE_MAP parameters
+ CopySomeParameters ( metviewRequest,magicsRequest,"MAP_","SUBPAGE_MAP_" );
}
#if 0 //SatelliteView is not available at the moment
else if ( metviewRequest.getVerb() == Cached ( "SATELLITEVIEW" ) )
diff --git a/src/uPlot/Makefile.am b/src/uPlot/Makefile.am
index 353e49f..9f68f50 100755
--- a/src/uPlot/Makefile.am
+++ b/src/uPlot/Makefile.am
@@ -10,6 +10,13 @@ bin_PROGRAMS += bin/uPlot \
endif
+# #-------- extra compilation flags ----------------------------------------------------
+
+if METVIEW_WEATHER_ROOM
+ WEATHER_ROOM_FLAGS=-DMETVIEW_WEATHER_ROOM
+endif
+
+
#-------- uPLOT COMMON SOURCES--------------------------------------------------
uPlot_COMMON_SOURCES = AnnotationView.cc AverageView.cc BufrDecoder.cc \
@@ -57,7 +64,7 @@ uPlot_COMMON_QT_SOURCES = MvQCursorData.cc \
MvQContentsModel.cc \
MvQContentsWidget.cc \
MvQDataWidget.cc \
- MvQLayerContentsIcon.cc \
+ MvQLayerContentsIcon.cc \
MvQLayerDataWidget.cc \
MvQLayerMetaDataWidget.cc \
MvQLayerModel.cc \
@@ -89,7 +96,7 @@ uPlot_COMMON_QT_SOURCES = MvQCursorData.cc \
MvQStepWidget.h MvQZoom.h MvQZoomStackWidget.h
-uPlot_COMMON_QT_SOURCES_nodist = MvQContentsWidget.moc.cpp MvQCursorData.moc.cpp MvQCursorDataWidget.moc.cpp \
+nodist_uPlot_COMMON_QT_SOURCES = MvQContentsWidget.moc.cpp MvQCursorData.moc.cpp MvQCursorDataWidget.moc.cpp \
MvQDataWidget.moc.cpp \
MvQLayerModel.moc.cpp MvQLayerWidget.moc.cpp \
MvQLayerDataWidget.moc.cpp MvQLayerMetaDataWidget.moc.cpp \
@@ -103,30 +110,38 @@ uPlot_COMMON_QT_SOURCES_nodist = MvQContentsWidget.moc.cpp MvQCursorData.moc.cpp
MvQZoomStackWidget.moc.cpp
-uPlot_COMMON_UI_SOURCES = ExportDialog.cc \
+uPlot_COMMON_UI_SOURCES = ExportDialog.cc\
MagPlusInteractiveService.cc PlotModInteractive.cc \
uPlotBase.cc \
ExportDialog.h MagPlusInteractiveService.h PlotModInteractive.h \
uPlotBase.h \
uPlot.qrc
-uPlot_COMMON_UI_SOURCES_nodist = ExportDialog.moc.cpp uPlotBase.moc.cpp uPlot.qrc.cpp
+nodist_uPlot_COMMON_UI_SOURCES = ExportDialog.moc.cpp uPlotBase.moc.cpp uPlot.qrc.cpp
#-------- uPLOT ------------------------------------------------------------------
+if METVIEW_WEATHER_ROOM
+ uPlot_WR_QT_SOURCES = MvQWeatherRoomDialog.cc \
+ MvQWeatherRoomDialog.h
+ nodist_uPlot_WR_QT_SOURCES = MvQWeatherRoomDialog.moc.cpp
+endif
+
+
bin_uPlot_SOURCES = MvMain.cc \
${uPlot_COMMON_SOURCES} \
${uPlot_COMMON_QT_SOURCES} \
${uPlot_COMMON_UI_SOURCES} \
+ ${uPlot_WR_QT_SOURCES} \
uPlot.cc uPlotApp.cc \
uPlot.h uPlotApp.h
-nodist_bin_uPlot_SOURCES = ${uPlot_COMMON_QT_SOURCES_nodist} ${uPlot_COMMON_UI_SOURCES_nodist} \
- uPlot.moc.cpp
+nodist_bin_uPlot_SOURCES = ${nodist_uPlot_COMMON_QT_SOURCES} ${nodist_uPlot_COMMON_UI_SOURCES} \
+ ${nodist_uPlot_WR_QT_SOURCES} uPlot.moc.cpp
-bin_uPlot_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
+bin_uPlot_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) $(WEATHER_ROOM_FLAGS)
bin_uPlot_LDFLAGS = $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
bin_uPlot_LDADD = $(LDADD) $(MAGPLUS_LIB) $(MAGPLUS_LIB_QT) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
bin_uPlot_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
@@ -168,7 +183,7 @@ bin_GeoTool_SOURCES = MvMainGeoTool.cc \
uPlotApp.cc uPlotApp.h \
geoSelect.qrc
-nodist_bin_GeoTool_SOURCES = ${uPlot_COMMON_QT_SOURCES_nodist} ${uPlot_COMMON_UI_SOURCES_nodist} \
+nodist_bin_GeoTool_SOURCES = ${nodist_uPlot_COMMON_QT_SOURCES} ${nodist_uPlot_COMMON_UI_SOURCES} \
GeoTool.moc.cpp geoSelect.qrc.cpp
diff --git a/src/uPlot/Makefile.in b/src/uPlot/Makefile.in
index 8cb9aaa..9c94ba2 100644
--- a/src/uPlot/Makefile.in
+++ b/src/uPlot/Makefile.in
@@ -90,6 +90,7 @@ bin_PROGRAMS = bin/uPlotBatch$(EXEEXT) bin/uPlotManager$(EXEEXT) \
subdir = src/uPlot
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -234,6 +235,64 @@ bin_GeoToolManager_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
$(AM_CXXFLAGS) $(CXXFLAGS) $(bin_GeoToolManager_LDFLAGS) \
$(LDFLAGS) -o $@
+am__bin_uPlot_SOURCES_DIST = MvMain.cc AnnotationView.cc \
+ AverageView.cc BufrDecoder.cc Canvas.cc CartesianView.cc \
+ CommonXSectView.cc CreateAction.cc CreateTypeAction.cc \
+ DataBuilder.cc DataObject.cc Decoder.cc Device.cc \
+ DrawingPriority.cc DropAction.cc GeopointsDecoder.cc \
+ GraphicsEngine.cc GribDecoder.cc HovmoellerView.cc Location.cc \
+ MvLayer.cc MacroConverter.cc MacroVisitor.cc \
+ MagicsGraphicsEngine.cc MagicsTranslator.cc MagPlusService.cc \
+ MapView.cc MatchingCriteria.cc MatchingInfo.cc MvIcon.cc \
+ MvIconDataBase.cc NewpageAction.cc ObjectInfo.cc ObjectList.cc \
+ OutputFormatAction.cc Page.cc PlotAction.cc PlotMod.cc \
+ PlotModAction.cc PlotModBuilder.cc PlotModService.cc \
+ PlotModTask.cc PlotModView.cc PlotPageBuilder.cc PmContext.cc \
+ PmIndividualProjection.cc PmGeneralProjection.cc \
+ PmProjection.cc Preferences.cc Presentable.cc Root.cc \
+ SatelliteProjection.cc SimpleDecoder.cc SkipAction.cc \
+ SubPage.cc SuperPage.cc Task.cc VertProfView.cc XDevice.cc \
+ XSectView.cc ZoomStacks.cc AnnotationView.h AverageView.h \
+ BufrDecoder.h Canvas.h CartesianView.h CommonXSectView.h \
+ Counted.h CreateAction.h CreateTypeAction.h DataBuilder.h \
+ DataObject.h Decoder.h Device.h DeviceData.h DrawingPriority.h \
+ DropAction.h GeopointsDecoder.h GraphicsEngine.h GribDecoder.h \
+ HovmoellerView.h Location.h MvLayer.h MacroConverter.h \
+ MacroVisitor.h MagPlusService.h MagicsGraphicsEngine.h \
+ MagicsTranslator.h MapView.h MatchingCriteria.h MatchingInfo.h \
+ MvIcon.h MvIconDataBase.h ObjectInfo.h ObjectList.h \
+ OutputFormatAction.h NewpageAction.h Page.h PaperSize.h \
+ PlotAction.h PlotMod.h PlotModAction.h PlotModBuilder.h \
+ PlotModConst.h PlotModService.h PlotModTask.h PlotModView.h \
+ PlotPageBuilder.h PmContext.h PmGeneralProjection.h \
+ PmIndividualProjection.h PmProjection.h Preferences.h \
+ Presentable.h Root.h SatelliteProjection.h SimpleDecoder.h \
+ SkipAction.h SubPage.h SuperPage.h Task.h VertProfView.h \
+ Visitor.h XDevice.h XSectView.h ZoomStacks.h GenAppService.cc \
+ GenAppService.hpp MvCallback.hpp MvQCursorData.cc \
+ MvQCursorDataWidget.cc MvQContentsModel.cc \
+ MvQContentsWidget.cc MvQDataWidget.cc MvQLayerContentsIcon.cc \
+ MvQLayerDataWidget.cc MvQLayerMetaDataWidget.cc \
+ MvQLayerModel.cc MvQLayerWidget.cc MvQMagnifier.cc \
+ MvQPlaceMark.cc MvQPlaceMarkDialog.cc MvQPlaceMarkMimeData.cc \
+ MvQPlaceMarkWidget.cc MvQPlaceMarkModel.cc MvQPlotView.cc \
+ MvQPointSelection.cc MvQProgressItem.cc MvQStepModel.cc \
+ MvQStepWidget.cc MvQZoom.cc MvQAreaSelection.cc \
+ MvQLineSelection.cc MvQZoomStackWidget.cc MvQAreaSelection.h \
+ MvQLineSelection.h MvQCursorData.h MvQCursorDataWidget.h \
+ MvQContentsModel.h MvQContentsWidget.h MvQLayerContentsIcon.h \
+ MvQLayerDataWidget.h MvQLayerWidget.h MvQDataWidget.h \
+ MvQLayerMetaDataWidget.h MvQLayerModel.h MvQMagnifier.h \
+ MvQPlaceMark.h MvQPlaceMarkDialog.h MvQPlaceMarkModel.h \
+ MvQPlaceMarkWidget.h MvQPlaceMarkMimeData.h MvQPlotItem.h \
+ MvQPlotView.h MvQPointSelection.h MvQProgressItem.h \
+ MvQPushButton.h MvQStepModel.h MvQStepWidget.h MvQZoom.h \
+ MvQZoomStackWidget.h ExportDialog.cc \
+ MagPlusInteractiveService.cc PlotModInteractive.cc \
+ uPlotBase.cc ExportDialog.h MagPlusInteractiveService.h \
+ PlotModInteractive.h uPlotBase.h uPlot.qrc \
+ MvQWeatherRoomDialog.cc MvQWeatherRoomDialog.h uPlot.cc \
+ uPlotApp.cc uPlot.h uPlotApp.h
am__objects_6 = bin_uPlot-AnnotationView.$(OBJEXT) \
bin_uPlot-AverageView.$(OBJEXT) \
bin_uPlot-BufrDecoder.$(OBJEXT) bin_uPlot-Canvas.$(OBJEXT) \
@@ -309,10 +368,11 @@ am__objects_8 = bin_uPlot-ExportDialog.$(OBJEXT) \
bin_uPlot-MagPlusInteractiveService.$(OBJEXT) \
bin_uPlot-PlotModInteractive.$(OBJEXT) \
bin_uPlot-uPlotBase.$(OBJEXT)
+ at METVIEW_WEATHER_ROOM_TRUE@am__objects_9 = bin_uPlot-MvQWeatherRoomDialog.$(OBJEXT)
am_bin_uPlot_OBJECTS = bin_uPlot-MvMain.$(OBJEXT) $(am__objects_6) \
- $(am__objects_7) $(am__objects_8) bin_uPlot-uPlot.$(OBJEXT) \
- bin_uPlot-uPlotApp.$(OBJEXT)
-am__objects_9 = bin_uPlot-MvQContentsWidget.moc.$(OBJEXT) \
+ $(am__objects_7) $(am__objects_8) $(am__objects_9) \
+ bin_uPlot-uPlot.$(OBJEXT) bin_uPlot-uPlotApp.$(OBJEXT)
+am__objects_10 = bin_uPlot-MvQContentsWidget.moc.$(OBJEXT) \
bin_uPlot-MvQCursorData.moc.$(OBJEXT) \
bin_uPlot-MvQCursorDataWidget.moc.$(OBJEXT) \
bin_uPlot-MvQDataWidget.moc.$(OBJEXT) \
@@ -334,17 +394,18 @@ am__objects_9 = bin_uPlot-MvQContentsWidget.moc.$(OBJEXT) \
bin_uPlot-MvQAreaSelection.moc.$(OBJEXT) \
bin_uPlot-MvQLineSelection.moc.$(OBJEXT) \
bin_uPlot-MvQZoomStackWidget.moc.$(OBJEXT)
-am__objects_10 = bin_uPlot-ExportDialog.moc.$(OBJEXT) \
+am__objects_11 = bin_uPlot-ExportDialog.moc.$(OBJEXT) \
bin_uPlot-uPlotBase.moc.$(OBJEXT) \
bin_uPlot-uPlot.qrc.$(OBJEXT)
-nodist_bin_uPlot_OBJECTS = $(am__objects_9) $(am__objects_10) \
- bin_uPlot-uPlot.moc.$(OBJEXT)
+ at METVIEW_WEATHER_ROOM_TRUE@am__objects_12 = bin_uPlot-MvQWeatherRoomDialog.moc.$(OBJEXT)
+nodist_bin_uPlot_OBJECTS = $(am__objects_10) $(am__objects_11) \
+ $(am__objects_12) bin_uPlot-uPlot.moc.$(OBJEXT)
bin_uPlot_OBJECTS = $(am_bin_uPlot_OBJECTS) \
$(nodist_bin_uPlot_OBJECTS)
bin_uPlot_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
$(CXXFLAGS) $(bin_uPlot_LDFLAGS) $(LDFLAGS) -o $@
-am__objects_11 = bin_uPlotBatch-AnnotationView.$(OBJEXT) \
+am__objects_13 = bin_uPlotBatch-AnnotationView.$(OBJEXT) \
bin_uPlotBatch-AverageView.$(OBJEXT) \
bin_uPlotBatch-BufrDecoder.$(OBJEXT) \
bin_uPlotBatch-Canvas.$(OBJEXT) \
@@ -406,7 +467,7 @@ am__objects_11 = bin_uPlotBatch-AnnotationView.$(OBJEXT) \
bin_uPlotBatch-ZoomStacks.$(OBJEXT) \
bin_uPlotBatch-GenAppService.$(OBJEXT)
am_bin_uPlotBatch_OBJECTS = bin_uPlotBatch-MvMainuPlotBatch.$(OBJEXT) \
- $(am__objects_11) bin_uPlotBatch-MagPlusBatchService.$(OBJEXT) \
+ $(am__objects_13) bin_uPlotBatch-MagPlusBatchService.$(OBJEXT) \
bin_uPlotBatch-PlotModBatch.$(OBJEXT) \
bin_uPlotBatch-uPlotBatchApp.$(OBJEXT)
bin_uPlotBatch_OBJECTS = $(am_bin_uPlotBatch_OBJECTS)
@@ -468,7 +529,7 @@ SOURCES = $(bin_GeoTool_SOURCES) $(nodist_bin_GeoTool_SOURCES) \
$(nodist_bin_uPlot_SOURCES) $(bin_uPlotBatch_SOURCES) \
$(bin_uPlotManager_SOURCES)
DIST_SOURCES = $(bin_GeoTool_SOURCES) $(bin_GeoToolManager_SOURCES) \
- $(bin_uPlot_SOURCES) $(bin_uPlotBatch_SOURCES) \
+ $(am__bin_uPlot_SOURCES_DIST) $(bin_uPlotBatch_SOURCES) \
$(bin_uPlotManager_SOURCES)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
@@ -504,6 +565,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -527,6 +590,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
@@ -710,6 +774,9 @@ SUFFIXES = .moc.cpp .moc.cc .moc.cxx .moc.C .h .hh .hpp \
DISTCLEANFILES = $(BUILT_SOURCES)
+# #-------- extra compilation flags ----------------------------------------------------
+ at METVIEW_WEATHER_ROOM_TRUE@WEATHER_ROOM_FLAGS = -DMETVIEW_WEATHER_ROOM
+
#-------- uPLOT COMMON SOURCES--------------------------------------------------
uPlot_COMMON_SOURCES = AnnotationView.cc AverageView.cc BufrDecoder.cc \
Canvas.cc CartesianView.cc CommonXSectView.cc \
@@ -756,7 +823,7 @@ uPlot_COMMON_QT_SOURCES = MvQCursorData.cc \
MvQContentsModel.cc \
MvQContentsWidget.cc \
MvQDataWidget.cc \
- MvQLayerContentsIcon.cc \
+ MvQLayerContentsIcon.cc \
MvQLayerDataWidget.cc \
MvQLayerMetaDataWidget.cc \
MvQLayerModel.cc \
@@ -787,7 +854,7 @@ uPlot_COMMON_QT_SOURCES = MvQCursorData.cc \
MvQStepModel.h \
MvQStepWidget.h MvQZoom.h MvQZoomStackWidget.h
-uPlot_COMMON_QT_SOURCES_nodist = MvQContentsWidget.moc.cpp MvQCursorData.moc.cpp MvQCursorDataWidget.moc.cpp \
+nodist_uPlot_COMMON_QT_SOURCES = MvQContentsWidget.moc.cpp MvQCursorData.moc.cpp MvQCursorDataWidget.moc.cpp \
MvQDataWidget.moc.cpp \
MvQLayerModel.moc.cpp MvQLayerWidget.moc.cpp \
MvQLayerDataWidget.moc.cpp MvQLayerMetaDataWidget.moc.cpp \
@@ -800,27 +867,32 @@ uPlot_COMMON_QT_SOURCES_nodist = MvQContentsWidget.moc.cpp MvQCursorData.moc.cpp
MvQZoom.moc.cpp MvQAreaSelection.moc.cpp MvQLineSelection.moc.cpp \
MvQZoomStackWidget.moc.cpp
-uPlot_COMMON_UI_SOURCES = ExportDialog.cc \
+uPlot_COMMON_UI_SOURCES = ExportDialog.cc\
MagPlusInteractiveService.cc PlotModInteractive.cc \
uPlotBase.cc \
ExportDialog.h MagPlusInteractiveService.h PlotModInteractive.h \
uPlotBase.h \
uPlot.qrc
-uPlot_COMMON_UI_SOURCES_nodist = ExportDialog.moc.cpp uPlotBase.moc.cpp uPlot.qrc.cpp
+nodist_uPlot_COMMON_UI_SOURCES = ExportDialog.moc.cpp uPlotBase.moc.cpp uPlot.qrc.cpp
#-------- uPLOT ------------------------------------------------------------------
+ at METVIEW_WEATHER_ROOM_TRUE@uPlot_WR_QT_SOURCES = MvQWeatherRoomDialog.cc \
+ at METVIEW_WEATHER_ROOM_TRUE@ MvQWeatherRoomDialog.h
+
+ at METVIEW_WEATHER_ROOM_TRUE@nodist_uPlot_WR_QT_SOURCES = MvQWeatherRoomDialog.moc.cpp
bin_uPlot_SOURCES = MvMain.cc \
${uPlot_COMMON_SOURCES} \
${uPlot_COMMON_QT_SOURCES} \
${uPlot_COMMON_UI_SOURCES} \
+ ${uPlot_WR_QT_SOURCES} \
uPlot.cc uPlotApp.cc \
uPlot.h uPlotApp.h
-nodist_bin_uPlot_SOURCES = ${uPlot_COMMON_QT_SOURCES_nodist} ${uPlot_COMMON_UI_SOURCES_nodist} \
- uPlot.moc.cpp
+nodist_bin_uPlot_SOURCES = ${nodist_uPlot_COMMON_QT_SOURCES} ${nodist_uPlot_COMMON_UI_SOURCES} \
+ ${nodist_uPlot_WR_QT_SOURCES} uPlot.moc.cpp
-bin_uPlot_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
+bin_uPlot_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS) $(WEATHER_ROOM_FLAGS)
bin_uPlot_LDFLAGS = $(QT_LDFLAGS) -L../../lib $(MAGPLUS_LDFLAGS) $(LDFLAGS) $(ODB_LDFLAGS)
bin_uPlot_LDADD = $(LDADD) $(MAGPLUS_LIB) $(MAGPLUS_LIB_QT) -lMvQtGui -lMvQtUtil $(STANDARD_METVIEW_LIBS) $(ODB_LIBS) $(FLIBS) $(QT_LIBS)
bin_uPlot_DEPENDENCIES = ../../lib/libMvQtGui.a ../../lib/libMvQtUtil.a ../../lib/libUtil.a ../../lib/libMetview.a
@@ -857,7 +929,7 @@ bin_GeoTool_SOURCES = MvMainGeoTool.cc \
uPlotApp.cc uPlotApp.h \
geoSelect.qrc
-nodist_bin_GeoTool_SOURCES = ${uPlot_COMMON_QT_SOURCES_nodist} ${uPlot_COMMON_UI_SOURCES_nodist} \
+nodist_bin_GeoTool_SOURCES = ${nodist_uPlot_COMMON_QT_SOURCES} ${nodist_uPlot_COMMON_UI_SOURCES} \
GeoTool.moc.cpp geoSelect.qrc.cpp
bin_GeoTool_CPPFLAGS = -I../libMvQtGui -I../libMvQtUtil $(MAGPLUS_CPPFLAGS) $(MAGICS_CFLAGS) $(QT_CPPFLAGS) $(AM_CPPFLAGS)
@@ -1182,6 +1254,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MvQStepModel.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MvQStepWidget.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MvQStepWidget.moc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MvQZoom.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MvQZoom.moc.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bin_uPlot-MvQZoomStackWidget.Po at am__quote@
@@ -4707,6 +4781,22 @@ bin_uPlot-uPlotBase.obj: uPlotBase.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-uPlotBase.obj `if test -f 'uPlotBase.cc'; then $(CYGPATH_W) 'uPlotBase.cc'; else $(CYGPATH_W) '$(srcdir)/uPlotBase.cc'; fi`
+bin_uPlot-MvQWeatherRoomDialog.o: MvQWeatherRoomDialog.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-MvQWeatherRoomDialog.o -MD -MP -MF $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.Tpo -c -o bin_uPlot-MvQWeatherRoomDialog.o `test -f 'MvQWeatherRoomDialog.cc' || echo '$(srcdir)/'`MvQWeatherRoomDialog.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.Tpo $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQWeatherRoomDialog.cc' object='bin_uPlot-MvQWeatherRoomDialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-MvQWeatherRoomDialog.o `test -f 'MvQWeatherRoomDialog.cc' || echo '$(srcdir)/'`MvQWeatherRoomDialog.cc
+
+bin_uPlot-MvQWeatherRoomDialog.obj: MvQWeatherRoomDialog.cc
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-MvQWeatherRoomDialog.obj -MD -MP -MF $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.Tpo -c -o bin_uPlot-MvQWeatherRoomDialog.obj `if test -f 'MvQWeatherRoomDialog.cc'; then $(CYGPATH_W) 'MvQWeatherRoomDialog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQWeatherRoomDialog.cc'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.Tpo $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQWeatherRoomDialog.cc' object='bin_uPlot-MvQWeatherRoomDialog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-MvQWeatherRoomDialog.obj `if test -f 'MvQWeatherRoomDialog.cc'; then $(CYGPATH_W) 'MvQWeatherRoomDialog.cc'; else $(CYGPATH_W) '$(srcdir)/MvQWeatherRoomDialog.cc'; fi`
+
bin_uPlot-uPlot.o: uPlot.cc
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-uPlot.o -MD -MP -MF $(DEPDIR)/bin_uPlot-uPlot.Tpo -c -o bin_uPlot-uPlot.o `test -f 'uPlot.cc' || echo '$(srcdir)/'`uPlot.cc
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-uPlot.Tpo $(DEPDIR)/bin_uPlot-uPlot.Po
@@ -5139,6 +5229,22 @@ bin_uPlot-uPlot.qrc.obj: uPlot.qrc.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-uPlot.qrc.obj `if test -f 'uPlot.qrc.cpp'; then $(CYGPATH_W) 'uPlot.qrc.cpp'; else $(CYGPATH_W) '$(srcdir)/uPlot.qrc.cpp'; fi`
+bin_uPlot-MvQWeatherRoomDialog.moc.o: MvQWeatherRoomDialog.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-MvQWeatherRoomDialog.moc.o -MD -MP -MF $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.moc.Tpo -c -o bin_uPlot-MvQWeatherRoomDialog.moc.o `test -f 'MvQWeatherRoomDialog.moc.cpp' || echo '$(srcdir)/'`MvQWeatherRoomDialog.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.moc.Tpo $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQWeatherRoomDialog.moc.cpp' object='bin_uPlot-MvQWeatherRoomDialog.moc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-MvQWeatherRoomDialog.moc.o `test -f 'MvQWeatherRoomDialog.moc.cpp' || echo '$(srcdir)/'`MvQWeatherRoomDialog.moc.cpp
+
+bin_uPlot-MvQWeatherRoomDialog.moc.obj: MvQWeatherRoomDialog.moc.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-MvQWeatherRoomDialog.moc.obj -MD -MP -MF $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.moc.Tpo -c -o bin_uPlot-MvQWeatherRoomDialog.moc.obj `if test -f 'MvQWeatherRoomDialog.moc.cpp'; then $(CYGPATH_W) 'MvQWeatherRoomDialog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQWeatherRoomDialog.moc.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.moc.Tpo $(DEPDIR)/bin_uPlot-MvQWeatherRoomDialog.moc.Po
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='MvQWeatherRoomDialog.moc.cpp' object='bin_uPlot-MvQWeatherRoomDialog.moc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o bin_uPlot-MvQWeatherRoomDialog.moc.obj `if test -f 'MvQWeatherRoomDialog.moc.cpp'; then $(CYGPATH_W) 'MvQWeatherRoomDialog.moc.cpp'; else $(CYGPATH_W) '$(srcdir)/MvQWeatherRoomDialog.moc.cpp'; fi`
+
bin_uPlot-uPlot.moc.o: uPlot.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bin_uPlot_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT bin_uPlot-uPlot.moc.o -MD -MP -MF $(DEPDIR)/bin_uPlot-uPlot.moc.Tpo -c -o bin_uPlot-uPlot.moc.o `test -f 'uPlot.moc.cpp' || echo '$(srcdir)/'`uPlot.moc.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bin_uPlot-uPlot.moc.Tpo $(DEPDIR)/bin_uPlot-uPlot.moc.Po
diff --git a/src/uPlot/MapView.cc b/src/uPlot/MapView.cc
index d8cab36..78349af 100644
--- a/src/uPlot/MapView.cc
+++ b/src/uPlot/MapView.cc
@@ -318,66 +318,42 @@ MapView::ConvertToSatellite ( MvRequest& decRequest )
void
MapView::UpdateView ( MvRequest& viewRequest )
{
-// if ( ObjectList::IsGeographicalView( viewRequest.getVerb() ) )
- if ( strcmp (viewRequest_.getVerb(),viewRequest.getVerb()) == 0)
- {
-#if 0 //FAMI022012 With the introduction of Proj4 in Magics there are many more
- // projections available. So, Magics should be now responsible for the projection
- // code.
- auto_ptr <PmProjection> proj ( PmProjectionFactory::Make ( viewRequest ) );
-
- Location area;
- if ( ! proj.get()->CheckGeodeticCoordinates (area))
- {
- PlotMod::Instance().UserMessage ( "Inconsistent geographic coordinates!\nReplaced by default values" );
- }
+ // uPlot recognises that MapView and GeoView are basically the same thing
+ if ( ObjectList::IsGeographicalView( viewRequest.getVerb() ) )
+// if ( strcmp (viewRequest_.getVerb(),viewRequest.getVerb()) == 0)
+ {
+ // Ensure coastlines exist
+ viewRequest_ = viewRequest;
+ MvRequest coastRequest = viewRequest_.getSubrequest ("COASTLINES");
+ if ( ! coastRequest )
+ {
+ coastRequest = ObjectList::UserDefaultRequest ( "MCOAST" );
+ viewRequest_ ( "COASTLINES" ) = coastRequest;
+ }
- viewRequest ( "AREA" ) = area.Bottom();
- viewRequest ( "AREA" ) += area.Left();
- viewRequest ( "AREA" ) += area.Top();
- viewRequest ( "AREA" ) += area.Right();
+ // Redraw this page
+ Owner().RedrawIfWindow();
+ Owner().NotifyObservers();
- double vertLong = proj.get()->CheckOriginLongitude ();
- viewRequest ( "MAP_VERTICAL_LONGITUDE" ) = vertLong;
-#endif
-#if 0
- if ( ! proj.get()->CheckCoord() )
- {
- PlotMod::UserMessage ( "Check later" );
- viewRequest = ObjectList::CreateDefaultRequest ( "MAPVIEW");
- }
-#endif
- viewRequest_ = viewRequest;
-
- // Ensure coastlines exist
- MvRequest coastRequest = viewRequest_.getSubrequest ("COASTLINES");
- if ( ! coastRequest )
- {
- coastRequest = ObjectList::UserDefaultRequest ( "MCOAST" );
- viewRequest_ ( "COASTLINES" ) = coastRequest;
- }
-
-//D Owner().EraseDraw();
- // Redraw this page
- Owner().RedrawIfWindow();
- Owner().NotifyObservers();
-
- Owner().InitZoomStacks();
- }
- else
- {
- // Changing MapView to another view is disabled at the moment.
- PlotMod::Instance().errorMessage("Changing MapView to another View is currently disabled");
- // The code below needs to be updated if uPlot will allow changing views
- #if 0
- RecreateData();
- viewRequest_ = viewRequest;
-
- // Create a view associated to the page
- auto_ptr <PlotModView> view ( PlotModViewFactory::Make (Owner(), viewRequest ) );
- Owner().SetView(view);
- #endif
- }
+ Owner().InitZoomStacks();
+ }
+ else
+ {
+ // Changing View is disabled at the moment
+ char text[128];
+ sprintf(text,"Changing View (%s to %s) is currently disabled",viewRequest_.getVerb(),viewRequest.getVerb() );
+ PlotMod::Instance().errorMessage(text);
+
+ // The code below needs to be updated if uPlot will allow changing views
+ #if 0
+ RecreateData();
+ viewRequest_ = viewRequest;
+
+ // Create a view associated to the page
+ auto_ptr <PlotModView> view ( PlotModViewFactory::Make (Owner(), viewRequest ) );
+ Owner().SetView(view);
+ #endif
+ }
}
void
@@ -429,8 +405,8 @@ MapView::DrawBackground ( )
// Account for land-sea shading and for the drawing order
// Check if Coastline Land Shade is to be drawn on the background
- string onoff = (const char*)expRequest ( "MAP_COASTLINE_LAND_SHADE" );
- if ( onoff == ON )
+ const char* onoff = (const char*)expRequest ( "MAP_COASTLINE_LAND_SHADE" );
+ if ( onoff && strcmp(onoff,"ON") == 0 )
{
int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_LAND_SHADE" );
if ( drawPrior == 999 )
@@ -441,7 +417,7 @@ MapView::DrawBackground ( )
// Check if Coastline Sea Shade is to be drawn on the background
onoff = (const char*)expRequest ( "MAP_COASTLINE_SEA_SHADE" );
- if ( onoff == ON )
+ if ( onoff && strcmp(onoff,"ON") == 0 )
{
int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_SEA_SHADE" );
if ( drawPrior == 999 )
@@ -452,7 +428,7 @@ MapView::DrawBackground ( )
// Check if Coastline is to be drawn on the background
onoff = (const char*)expRequest ( "MAP_COASTLINE" );
- if ( onoff == ON )
+ if ( onoff && strcmp(onoff,"ON") == 0 )
{
int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE" );
if ( drawPrior == 999 && draw == false )
@@ -504,8 +480,8 @@ MapView::DrawForeground ( )
// Account for land-sea shading and for the drawing order
// Check if Coastline Land Shade is to be drawn on the foreground
- string onoff = (const char*)expRequest ( "MAP_COASTLINE_LAND_SHADE" );
- if ( onoff == ON )
+ const char* onoff = (const char*)expRequest ( "MAP_COASTLINE_LAND_SHADE" );
+ if ( onoff && strcmp(onoff,"ON") == 0 )
{
int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_LAND_SHADE" );
if ( drawPrior == 999 )
@@ -516,7 +492,7 @@ MapView::DrawForeground ( )
// Check if Coastline Sea Shade is to be drawn on the foreground
onoff = (const char*)expRequest ( "MAP_COASTLINE_SEA_SHADE" );
- if ( onoff == ON )
+ if ( onoff && strcmp(onoff,"ON") == 0 )
{
int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE_SEA_SHADE" );
if ( drawPrior == 999 )
@@ -527,7 +503,7 @@ MapView::DrawForeground ( )
// Check if Coastline is to be drawn on the foreground
onoff = (const char*)expRequest ( "MAP_COASTLINE" );
- if ( onoff == ON )
+ if ( onoff && strcmp(onoff,"ON") == 0 )
{
int drawPrior = tmpDrawingPriority.GetPriority ( "COASTLINE" );
@@ -575,13 +551,19 @@ MapView::DrawForeground ( )
void
MapView::DescribeYourself ( ObjectInfo& description )
{
- // Describe the coastlines
-
- // convert my request to macro
- string defView = DEFAULTVIEW;
- std::transform(defView.begin(), defView.end(), defView.begin(), ::tolower);
- set<Cached> skipSet;
- description.ConvertRequestToMacro ( viewRequest_, PUT_END, MacroName().c_str(),defView.c_str(),skipSet);
+ // Translate MAPVIEW to GEOVIEW. Add GEOVIEW parameters, temporarily.
+ if ( (const char*)viewRequest_("AREA") )
+ viewRequest_("MAP_AREA_DEFINITION") = "CORNERS";
+
+ // Convert my request to macro
+ string defView = DEFAULTVIEW;
+ std::transform(defView.begin(), defView.end(), defView.begin(), ::tolower);
+ set<Cached> skipSet;
+ description.ConvertRequestToMacro ( viewRequest_, PUT_END, MacroName().c_str(),defView.c_str(),skipSet);
+
+ // Remove temporary GEOVIEW parameters
+ if ( (const char*)viewRequest_("AREA") )
+ viewRequest_.unsetParam("MAP_AREA_DEFINITION");
}
bool MapView::CallService(const MvRequest &req, PmContext &context)
diff --git a/src/uPlot/MvQCursorData.cc b/src/uPlot/MvQCursorData.cc
index 275d4b9..1a3566a 100644
--- a/src/uPlot/MvQCursorData.cc
+++ b/src/uPlot/MvQCursorData.cc
@@ -99,7 +99,8 @@ void MvQCursorData::prepareForReset()
void MvQCursorData::reset()
{
-
+ setData(cursorPos_);
+ update();
}
QRectF MvQCursorData::boundingRect() const
@@ -164,7 +165,9 @@ void MvQCursorData::changeProbeMode(QPointF& cursor)
void MvQCursorData::setCursorPos(QPointF& cursor)
{
- if(positionMode_ == FollowCursor)
+ cursorPos_=cursor;
+
+ if(positionMode_ == FollowCursor)
{
//setPos(cursor+offsetFromCursor_-boundingRect_.topLeft());
setPos(cursor+offsetFromCursor_);
@@ -488,65 +491,41 @@ void MvQCursorData::setText(QString str)
}
-void MvQCursorData::mousePressEventFromView(QMouseEvent *event)
+void MvQCursorData::setData(QPointF pos)
{
- if(activated_ && acceptMouseEvents_)
- {
- if(event->buttons() & Qt::LeftButton)
- {
- //Get scene position
- QPointF pos=plotView_->mapToScene(event->pos());
- changePositionMode(pos);
- }
- /*if(event->buttons() & Qt::MidButton)
- {
- //Get scene position
- QPointF pos=plotView_->mapToScene(event->pos());
- changeProbeMode(pos);
- }*/
- }
-}
+ //Scene position
+ //QPointF pos = plotView_->mapToScene(event->pos());
-void MvQCursorData::mouseMoveEventFromView(QMouseEvent *event)
-{
- if(!activated_ || !acceptMouseEvents_)
- return;
-
- //Scene position
- QPointF pos = plotView_->mapToScene(event->pos());
+ MgQLayoutItem* dataLayout=0;
- if(probeMode_ == FollowCursorProbe)
- {
- MgQLayoutItem* dataLayout=0;
-
- //Now if dataLayout_ is not null it should contain the point
- if(plotScene_->identifyPos(pos,&sceneItem_,&dataLayout))
+ //Now if dataLayout_ is not null it should contain the point
+ if(plotScene_->identifyPos(pos,&sceneItem_,&dataLayout))
+ {
+ QPointF posM=pos;
+ QPointF coord;
+ if(pointInMagnifier_)
{
- QPointF posM=pos;
- QPointF coord;
- if(pointInMagnifier_)
- {
- posM=magnifierScenePos_+(pos-magnifierScenePos_)/magnifierZoomFactor_;
- }
+ posM=magnifierScenePos_+(pos-magnifierScenePos_)/magnifierZoomFactor_;
+ }
- double searchRadiusX=2.;
- double searchRadiusY=2.;
+ double searchRadiusX=2.;
+ double searchRadiusY=2.;
- float plotScale=plotScene_->plotScale();
- double cx=dataLayout->coordRatioX();
- double cy=dataLayout->coordRatioY();
- if(cx != 0.)
- {
- searchRadiusX=20./fabs(cx*plotScale);
- }
- if(cy != 0.)
- {
- searchRadiusY=20./fabs(cy*plotScale);
- }
+ float plotScale=plotScene_->plotScale();
+ double cx=dataLayout->coordRatioX();
+ double cy=dataLayout->coordRatioY();
+ if(cx != 0.)
+ {
+ searchRadiusX=20./fabs(cx*plotScale);
+ }
+ if(cy != 0.)
+ {
+ searchRadiusY=20./fabs(cy*plotScale);
+ }
//qDebug() << "searchRadius:" << cx << cy << plotScale << searchRadiusX << searchRadiusY;
- dataLayout->mapFromSceneToGeoCoords(posM,coord);
+ dataLayout->mapFromSceneToGeoCoords(posM,coord);
//cursorData_->setCoordinates(coord);
/*QList<QPointF> posL;
@@ -554,10 +533,10 @@ void MvQCursorData::mouseMoveEventFromView(QMouseEvent *event)
dataLayout->mapFromSceneToProjectionCoords(pos,projCoord);
posL << projCoord;*/
- QList<QPointF> posL;
- posL << coord;;
+ QList<QPointF> posL;
+ posL << coord;;
- QList<ValuesCollector> layerData;
+ QList<ValuesCollector> layerData;
/*QList<QStringList> txtL;
foreach(QPointF pp,posL)
@@ -572,41 +551,71 @@ void MvQCursorData::mouseMoveEventFromView(QMouseEvent *event)
emit positionChanged(txtL[0]);*/
- qDebug() << "cursor:" << coord << posL;
+ qDebug() << "cursor:" << coord << posL;
- sceneItem_->collectLayerDataForCurrentStep(posL,layerData,
+ sceneItem_->collectLayerDataForCurrentStep(posL,layerData,
searchRadiusX,searchRadiusY);
- const Transformation& transformation = dataLayout->layout().transformation();
- QString nameX, nameY;
- bool hasDistance=false;
- switch(transformation.coordinateType())
- {
- case Transformation::GeoType:
+ const Transformation& transformation = dataLayout->layout().transformation();
+ QString nameX, nameY;
+ bool hasDistance=false;
+ switch(transformation.coordinateType())
+ {
+ case Transformation::GeoType:
nameX=tr("Lon");
nameY=tr("Lat");
hasDistance=true;
break;
- case Transformation::XyType:
- default:
+ case Transformation::XyType:
+ default:
nameX=tr("X");
nameY=tr("Y");
break;
- }
+ }
- setText(coord,layerData,nameX,nameY,hasDistance);
-
- //emit positionChanged(coord,layerData);
-
-
+ setText(coord,layerData,nameX,nameY,hasDistance);
+ //emit positionChanged(coord,layerData);
}
- else
- {
- setText();
+ else
+ {
+ setText();
+ }
+}
+
+
+
+void MvQCursorData::mousePressEventFromView(QMouseEvent *event)
+{
+ if(activated_ && acceptMouseEvents_)
+ {
+ if(event->buttons() & Qt::LeftButton)
+ {
+ //Get scene position
+ QPointF pos=plotView_->mapToScene(event->pos());
+ changePositionMode(pos);
}
+ /*if(event->buttons() & Qt::MidButton)
+ {
+ //Get scene position
+ QPointF pos=plotView_->mapToScene(event->pos());
+ changeProbeMode(pos);
+ }*/
+ }
+}
+void MvQCursorData::mouseMoveEventFromView(QMouseEvent *event)
+{
+ if(!activated_ || !acceptMouseEvents_)
+ return;
+
+ //Scene position
+ QPointF pos = plotView_->mapToScene(event->pos());
+
+ if(probeMode_ == FollowCursorProbe)
+ {
+ setData(pos);
setCursorPos(pos);
}
else
diff --git a/src/uPlot/MvQCursorData.h b/src/uPlot/MvQCursorData.h
index b7871b4..d55b2b1 100644
--- a/src/uPlot/MvQCursorData.h
+++ b/src/uPlot/MvQCursorData.h
@@ -70,13 +70,15 @@ signals:
private:
void setText(QString);
QString formatNumber(double);
+ void setData(QPointF);
QGraphicsScene* scene_;
QString text_;
QPointF coordinates_;
PositionMode positionMode_;
- QPointF offsetFromCursor_;
+ QPointF offsetFromCursor_;
+ QPointF cursorPos_;
ProbeMode probeMode_;
diff --git a/src/uPlot/MvQWeatherRoomDialog.cc b/src/uPlot/MvQWeatherRoomDialog.cc
new file mode 100644
index 0000000..fbf08be
--- /dev/null
+++ b/src/uPlot/MvQWeatherRoomDialog.cc
@@ -0,0 +1,676 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include <QComboBox>
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QGridLayout>
+#include <QGroupBox>
+#include <QHBoxLayout>
+#include <QImageReader>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMouseEvent>
+#include <QMessageBox>
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
+#include <QNetworkRequest>
+#include <QRadioButton>
+#include <QPainter>
+#include <QSettings>
+#include <QVBoxLayout>
+#include <QtCore/QTextStream>
+#include <QFile>
+#include <QMessageBox>
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/foreach.hpp>
+
+#include "MvQWeatherRoomDialog.h"
+
+//#include "uPlot.h"
+//#include "MvRequestUtil.hpp"
+
+MvQVideoWallCellInfo::MvQVideoWallCellInfo(double x, double y, double w, double h, int number)
+{
+ x_ = x;
+ y_ = y;
+ w_ = w;
+ h_ = h;
+ number_ = number;
+}
+
+
+//===========================================
+//
+// MvQVideoWallInfo
+//
+//============================================
+
+MvQVideoWallServer::MvQVideoWallServer(QObject* parent) : QObject(parent)
+{
+ QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+ connect(manager, SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(slotReply(QNetworkReply*)));
+
+
+ URL_ = "http://eccharts-test.ecmwf.int/wall"; // default, should be in preferences
+ token_ = "metview"; // default, should be in preferences
+
+ const char *URL = getenv ("METVIEW_WALL_URL"); // override if env var exists
+ if (URL)
+ URL_ = URL;
+
+ const char *token = getenv ("METVIEW_WALL_TOKEN"); // override if env var exists
+ if (token)
+ token_ = token;
+
+
+ //QString url("http://localhost:8001/wall");
+ //QString token("key0");
+ QString req= QString("%1/current-layouts/?key=%2").arg(URL_).arg(token_);
+
+ //http://localhost:8001/wall/setup/dummy?key=key0
+ QNetworkRequest netReq(QUrl::fromPercentEncoding(req.toUtf8()));
+
+ qDebug() << req;
+
+ manager->get(netReq);
+}
+
+
+bool MvQVideoWallServer::parseLayoutResponse(QString &response)
+{
+
+ // write the response to a text file
+ QString tmpFilename(marstmp());
+ QFile tmpFile(tmpFilename);
+ tmpFile.open(QIODevice::WriteOnly);
+
+
+ // did we manage to open the tmp file for writing?
+ if (!tmpFile.isOpen())
+ {
+ QMessageBox::warning(0, QString("Metview"),
+ tr("Error, unable to open temporary file %1 to write server response")
+ .arg(tmpFilename));
+ return false;
+ }
+
+ // write the server response to the file
+ QTextStream outStream(&tmpFile);
+ outStream << response;
+ tmpFile.close();
+
+
+
+ // parse the response using the boost JSON property tree parser
+ using boost::property_tree::ptree;
+ ptree pt;
+ std::string tmpFilenameStd = tmpFilename.toUtf8().constData();
+
+ try
+ {
+ read_json(tmpFilenameStd, pt);
+ }
+ catch (const boost::property_tree::json_parser::json_parser_error& e)
+ {
+ QMessageBox::warning(0, QString("Metview"),
+ tr("Error, unable to parse JSON response from server"));
+ return false;
+ }
+
+
+ wallInfos_.clear();
+
+ // for each layout
+ for (ptree::const_iterator itOuter = pt.begin(); itOuter != pt.end(); ++itOuter)
+ {
+ ptree const &layout = itOuter->second;
+ MvQVideoWallInfo wallInfo;
+
+ for (ptree::const_iterator itLayout = layout.begin(); itLayout != layout.end(); ++itLayout)
+ {
+ int totalRows = 0; // must take into account the rowspans
+ int totalCols = 0; // must take into account the colspans
+
+ if (itLayout->first == "layout")
+ {
+ ptree const &layout = itLayout->second;
+
+ // for each row
+ int r = 0;
+ for (ptree::const_iterator itRows = layout.begin(); itRows != layout.end(); ++itRows)
+ {
+ ptree const &row = itRows->second;
+
+ // for each column in the current row
+ int c=0;
+ for (ptree::const_iterator itCols = row.begin(); itCols != row.end(); ++itCols)
+ {
+ int colSpan = itCols->second.get<int>("colspan", 1);
+ int rowSpan = itCols->second.get<int>("rowspan", 1);
+
+ if (r + rowSpan > totalRows)
+ totalRows = r + rowSpan;
+
+ if (c + colSpan > totalCols)
+ totalCols = c + colSpan;
+
+ c += colSpan;
+ }
+ r += 1;
+ }
+
+
+ ////////////////////////////////////
+
+ //ptree const &layout = itLayout->second;
+ std::string cname = itLayout->second.get("name", "no_name");
+ int numRows = layout.size();
+
+ double rowHeight = 1.0 / totalRows;
+ double currentY = 0.0;
+
+ // for each row
+ for (ptree::const_iterator itRows = layout.begin(); itRows != layout.end(); ++itRows)
+ {
+ ptree const &row = itRows->second;
+ int numCols = row.size();
+ //std::cout << " num cols: " << numCols << std::endl;
+
+ double colWidth = 1.0 / totalCols;
+ double currentX = 0.0;
+
+ // for each column in the current row
+ for (ptree::const_iterator itCols = row.begin(); itCols != row.end(); ++itCols)
+ {
+ int cellNumber = itCols->second.get<int>("cell", -1);
+
+ if (cellNumber != -1)
+ {
+ int colSpan = itCols->second.get<int>("colspan", 1);
+ int rowSpan = itCols->second.get<int>("rowspan", 1);
+
+ MvQVideoWallCellInfo cellInfo(currentX, currentY, colWidth*colSpan, rowHeight*rowSpan, cellNumber);
+ wallInfo.addCellInfo(cellInfo);
+
+ // set up the x-coord for the next column
+ currentX += colWidth*colSpan;
+ }
+ else
+ {
+ currentX += colWidth;
+ }
+ }
+
+ // set up the y-coord for the next row
+ currentY += rowHeight;
+ }
+ }
+ else if (itLayout->first == "wall")
+ {
+ std::string cname = itLayout->second.get_value<std::string>("name");
+ QString qname(cname.c_str());
+ //std::cout << " name: " << cname << endl;
+ wallInfo.setName(qname);
+ }
+ }
+
+ wallInfos_.push_back(wallInfo);
+ }
+
+
+ //BOOST_FOREACH( ptree::value_type const &v, pt.get_child("") )
+ //{
+ // std::string f = v.first;
+ // std::string s = v.second.get<std::string>("carrier");
+ // qDebug() << "another layout!\n" << QString(v.first.c_str());
+ //}
+
+ //print(pt, 0);
+
+ return true;
+}
+
+
+
+void MvQVideoWallServer::slotReply(QNetworkReply* reply)
+{
+ QNetworkRequest r=reply->request();
+ QUrl url=r.url();
+
+ QString mimeType=reply->header(QNetworkRequest::ContentTypeHeader).toString();
+
+ qDebug() << "mimetype" << mimeType;
+
+ if(reply->error() != QNetworkReply::NoError)
+ {
+ QMessageBox::warning(0, QString("Metview"),
+ tr("Error, unable to get server response : ")
+ .arg(reply->errorString()));
+
+ //marslog(LOG_EROR,"Logo download failed!\nError: %s ",reply->errorString().toStdString().c_str());
+ //log->error(reply->errorString().toStdString() + "\n");
+ //QApplication::exit();
+ return;
+ }
+ else
+ {
+ QByteArray ba=reply->readAll();
+ QString res(ba);
+ parseLayoutResponse(res);
+
+ emit gotServerResponse();
+ }
+
+ reply->deleteLater();
+}
+
+
+
+//===========================================
+//
+// MvQVideoWallInfo
+//
+//============================================
+
+MvQVideoWallInfo::MvQVideoWallInfo()
+{
+}
+
+
+//===========================================
+//
+// MvQVideoWallWidget
+//
+//============================================
+
+MvQVideoWallWidget::MvQVideoWallWidget(QWidget *parent) :
+ QWidget(parent),
+ offset_(1),
+ current_(0)
+{
+ setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum));
+ setMinimumSize(QSize(128,128));
+
+ setMouseTracking(true);
+
+ int size=128;
+ QImageReader imgR(":/uPlot/wall_screen.svg");
+ if(imgR.canRead())
+ {
+ imgR.setScaledSize(QSize(size,size));
+ QImage img=imgR.read();
+ pix_=QPixmap::fromImage(img);
+ }
+ QImageReader imgRs(":/uPlot/wall_screen_selected.svg");
+ if(imgRs.canRead())
+ {
+ imgRs.setScaledSize(QSize(size,size));
+ QImage img=imgRs.read();
+ pixSelect_=QPixmap::fromImage(img);
+ }
+}
+
+
+void MvQVideoWallWidget::setWall(MvQVideoWallInfo *info)
+{
+ if (!info)
+ {
+ items_ << QRect(0,0,100,100);
+ }
+ else
+ {
+ items_.clear();
+ for (int i=0 ; i < info->cellInfos().size(); i++)
+ {
+ MvQVideoWallCellInfo *cell = &(info->cellInfos()[i]);
+ items_ << QRect(cell->x()*100., cell->y()*100., cell->w()*100., cell->h()*100.);
+ }
+ setEnabled(true);
+ }
+
+ update();
+}
+
+void MvQVideoWallWidget::paintEvent(QPaintEvent*)
+{
+ int w=width()-2*offset_;
+ int h=height()-2*offset_;
+
+ QPainter painter(this);
+
+ if (!isEnabled())
+ {
+ QString message("Retrieving layout from server...");
+ QTextOption textOptions;
+ textOptions.setAlignment(Qt::AlignHCenter);
+ textOptions.setWrapMode(QTextOption::WordWrap);
+
+ painter.drawText(QRect(0,0,w,h), message, textOptions);
+ return;
+ }
+
+
+ QColor col(128,128,255);
+ QBrush brush;
+ brush.setStyle(Qt::SolidPattern);
+
+ painter.setPen(Qt::black);
+
+ for(int i=0; i < items_.count(); i++)
+ {
+ QRectF r(offset_+(w*items_[i].x())*0.01,offset_+(h*items_[i].y())*0.01,
+ (w*items_[i].width())*0.01,(h*items_[i].height())*0.01);
+
+ //qDebug() << i << items_[i].x() << items_[i].y() << items_[i].width() << items_[i].height() << r;
+
+
+ if(i==current_)
+ painter.drawPixmap(r,pixSelect_,QRectF(0,0,pixSelect_.width(),pixSelect_.height()));
+ else
+ painter.drawPixmap(r,pix_,QRectF(0,0,pix_.width(),pix_.height()));
+
+ }
+}
+
+
+void MvQVideoWallWidget::updateSelection(const QString &selection)
+{
+ int screenNum = selection.toInt();
+ current_ = screenNum;
+ update();
+}
+
+
+void MvQVideoWallWidget::mousePressEvent(QMouseEvent *event)
+{
+ if(select(event->pos()))
+ {
+ update();
+ QString newSelection;
+ newSelection.setNum(current_);
+ emit selectionChanged(newSelection);
+ }
+}
+
+bool MvQVideoWallWidget::select(QPoint pos)
+{
+ int x=(pos.x()-offset_)*100/width();
+ int y=(pos.y()-offset_)*100/height();
+
+ for(int i=0; i < items_.count(); i++)
+ {
+ if(items_.at(i).contains(QPoint(x,y)))
+ {
+ current_=i;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+//===========================================
+//
+// MvQWeatherRoomDialog
+//
+//============================================
+
+MvQWeatherRoomDialog::MvQWeatherRoomDialog(int currentFrame, int totalFrames, QWidget *parent) :
+ QDialog(parent),
+ current_(currentFrame),
+ total_(totalFrames)
+{
+ QVBoxLayout* vb=new QVBoxLayout();
+ setLayout(vb);
+
+ //Wall combo
+ QLabel *label=new QLabel(tr("Video wall:"),this);
+ wallCb_=new QComboBox(this);
+ QHBoxLayout* hb=new QHBoxLayout();
+ hb->addWidget(label);
+ hb->addWidget(wallCb_,1);
+ vb->addLayout(hb);
+
+ wallServer_= new MvQVideoWallServer(this);
+ connect(wallServer_, SIGNAL(gotServerResponse()), this, SLOT(updateWallSelector()));
+ connect(wallCb_, SIGNAL(currentIndexChanged(int)), this, SLOT(updateWallSelection(int)));
+
+ wallCb_->addItem("No wall");
+
+ //Screen selector
+ screenSelector_= new MvQVideoWallWidget(this);
+
+
+ vb->addWidget(screenSelector_,1);
+
+ screenSelector_->setWall(NULL);
+ screenSelector_->setEnabled(false);
+
+ // screen selection text box (for if the layout plot is not sufficient)
+ QHBoxLayout* hb2 = new QHBoxLayout();
+ QLabel *screenSelectionLabel = new QLabel(tr("Screen:"),this);
+ hb2->addWidget(screenSelectionLabel);
+ leScreenSelection_ = new QLineEdit(this);
+ QValidator *intValidator = new QIntValidator(100, 999, this);
+ leScreenSelection_->setValidator(intValidator);
+ hb2->addWidget(leScreenSelection_);
+ vb->addLayout(hb2);
+
+ // two-way connection between the screen selection widget and text box
+ connect(leScreenSelection_, SIGNAL(textEdited(const QString &)),
+ screenSelector_, SLOT(updateSelection(const QString &)));
+
+ connect(screenSelector_, SIGNAL(selectionChanged(const QString &)),
+ leScreenSelection_, SLOT(setText(const QString &)));
+
+ leScreenSelection_->setText("0"); // initialise the text box
+
+
+ //Frame selection
+ buildFrameSelection(vb);
+
+ // Buttonbox
+ QDialogButtonBox* buttonBox= new QDialogButtonBox(this);
+
+ buttonBox->addButton(QDialogButtonBox::Ok);
+ buttonBox->addButton(QDialogButtonBox::Cancel);
+
+ connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+
+ vb->addWidget(buttonBox);
+
+ //Read the previous gui settings
+ readSettings();
+}
+
+// Destructor
+MvQWeatherRoomDialog::~MvQWeatherRoomDialog()
+{
+ writeSettings();
+}
+
+void MvQWeatherRoomDialog::setVisible(bool b)
+{
+ QDialog::setVisible(b);
+}
+
+void MvQWeatherRoomDialog::updateWallSelection(int wallIndex)
+{
+ if ((wallIndex > -1) && (wallServer_->numWalls() > 0))
+ screenSelector_->setWall(wallServer_->wallInfo(wallIndex));
+}
+
+
+
+void MvQWeatherRoomDialog::updateWallSelector()
+{
+ MvQVideoWallInfo *wallInfo;
+
+ // update the list of walls
+
+ wallCb_->clear();
+
+ for (size_t i = 0; i < wallServer_->numWalls(); i++)
+ {
+ wallInfo = wallServer_->wallInfo(i);
+ QString fullWallName = QString("Wall %1 : %2").arg(i+1).arg(wallInfo->name());
+ wallCb_->addItem(fullWallName);
+ }
+
+ screenSelector_->setWall(wallServer_->wallInfo(0)); // by default, choose the first wall
+}
+
+void MvQWeatherRoomDialog::slotRangeFrameSelection(bool checked)
+{
+ // Enable/Disable line edit
+ //leFs3_->setEnabled(checked);
+}
+
+void MvQWeatherRoomDialog::buildFrameSelection(QLayout *layout)
+{
+ // Group Box with radio buttons and one line edit
+ QGroupBox* gbFs = new QGroupBox( tr("Frame Selection"),this );
+ cbFs1_ = new QRadioButton( tr("&Current"), gbFs);
+ cbFs2_ = new QRadioButton( tr("&All"), gbFs );
+ cbFs3_ = new QRadioButton( tr("&Range"), gbFs );
+ cbFs1_->setChecked(true);
+
+ // Line edit with a validator
+ leFs3_ = new QLineEdit(this);
+ leFs3_->setToolTip(tr("Specify one or more frame ranges, e.g. 1-3,6,7"));
+ leFs3_->setEnabled(false);
+ QRegExp rx("^\\d{1,}(-\\d{1,})?(,\\d{1,}|,\\d{1,}-\\d{1,})*");
+ QValidator *validator = new QRegExpValidator(rx, this);
+ leFs3_->setValidator(validator);
+
+ // Set layout
+ QGridLayout* glFs = new QGridLayout( gbFs );
+ glFs->addWidget( cbFs1_, 0, 0 );
+ glFs->addWidget( cbFs2_, 1, 0 );
+ glFs->addWidget( cbFs3_, 2, 0 );
+ glFs->addWidget( leFs3_, 2, 1 );
+
+ connect(cbFs3_,SIGNAL(toggled(bool)), this, SLOT(slotRangeFrameSelection(bool)));
+
+ // Attach widget to the parent
+ layout->addWidget(gbFs);
+
+}
+
+bool MvQWeatherRoomDialog::getFrameSelection( MvRequest& req )
+{
+ // Three options: CURRENT, ALL, RANGE
+ // ALL: nothing need to be done
+ /*if ( cbFs2_->isChecked() )
+ return true;
+
+ // CURRENT: get the current frame numbeer
+ int i;
+ QList<int> list;
+ if ( cbFs1_->isChecked() )
+ {
+ list.append(current_+1); // start from 1, not from 0
+ }
+ else // RANGE
+ {
+ // Get the list of range entries (split by comma)
+ QStringList list1 = leFs3_->text().split(",", QString::SkipEmptyParts);
+
+ // Analyse all entries
+ for ( i = 0; i < list1.size(); i++)
+ {
+ // Check if it is a single value or a range of values
+ QStringList list2 = list1.at(i).split("-", QString::SkipEmptyParts);
+ if ( list2.size() == 1 ) // single value
+ list.append(list2.at(0).toInt());
+ else
+ {
+ int i1 = list2.at(0).toInt();
+ int i2 = list2.at(1).toInt();
+ if ( i1 > i2 ) // invert sequence
+ {
+ int iaux = i1;
+ i1 = i2;
+ i2 = iaux;
+ }
+ for ( int j = i1; j <= i2; j++ )
+ list.append(j);
+ }
+ }
+
+ // Check if the range of values is valid
+ qSort(list.begin(), list.end());
+ if ( list.at(list.size()-1) > total_ )
+ {
+ ostrstream info;
+ info << "Enter values from 1 to " << total_ << ends;
+ errorMessage("Invalid range!",(const char*)info.str());
+ return false;
+ }
+ }
+
+ // Save list of frames selection for all drivers
+ while ( req )
+ {
+ for ( i = 0; i < list.size(); i++)
+ req.addValue("OUTPUT_FRAME_LIST",list.at(i));
+
+ req.advance();
+ }
+
+ req.rewind();*/
+
+ return true;
+}
+
+void MvQWeatherRoomDialog::errorMessage (const char* msg, const char* info)
+{
+ /*QMessageBox msgBox;
+ msgBox.setIcon(QMessageBox::Critical);
+ msgBox.setWindowTitle(tr("Export Error"));
+ msgBox.setText(QString::fromUtf8(msg));
+ if ( info )
+ msgBox.setInformativeText(QString::fromUtf8(info));
+
+ msgBox.exec();*/
+}
+
+void MvQWeatherRoomDialog::readSettings()
+{
+ // Restore previous gui settings
+ QSettings settings("ECMWF","uPlot_MvQWeatherRoomDialog");
+
+ settings.beginGroup("main");
+ if(settings.contains("size"))
+ {
+ resize(settings.value("size").toSize());
+ }
+ else
+ {
+ resize(QSize(420,400));
+ }
+
+ settings.endGroup();
+}
+
+
+void MvQWeatherRoomDialog::writeSettings()
+{
+ // Save current gui settings
+ QSettings settings("ECMWF","uPlot_MvQWeatherRoomDialog");
+
+ settings.beginGroup("main");
+ settings.setValue("size",size());
+ settings.endGroup();
+}
diff --git a/src/uPlot/MvQWeatherRoomDialog.h b/src/uPlot/MvQWeatherRoomDialog.h
new file mode 100644
index 0000000..06c0f75
--- /dev/null
+++ b/src/uPlot/MvQWeatherRoomDialog.h
@@ -0,0 +1,188 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef MvQWeatherRoomDialog_H
+#define MvQWeatherRoomDialog_H
+
+#include <QDialog>
+#include <QWidget>
+
+#include "MvRequest.h"
+
+class QComboBox;
+class QGridLayout;
+class QLayout;
+class QNetworkReply;
+class QRadioButton;
+class QLineEdit;
+
+using namespace std;
+
+// ----------------------------------------------------------
+// MvQVideoWallCellInfo
+// Contains information for a single cell within a video wall
+// ----------------------------------------------------------
+
+class MvQVideoWallCellInfo
+{
+public:
+ MvQVideoWallCellInfo(double x, double y, double w, double h, int number);
+
+ int number() {return number_;}
+ double x() {return x_;}
+ double y() {return y_;}
+ double w() {return w_;}
+ double h() {return h_;}
+
+private:
+ int number_;
+ double x_;
+ double y_;
+ double w_;
+ double h_;
+};
+
+
+// --------------------------------------------
+// MvQVideoWallInfo
+// Contains information for a single video wall
+// --------------------------------------------
+
+class MvQVideoWallInfo
+{
+
+public:
+ MvQVideoWallInfo();
+ vector<MvQVideoWallCellInfo>& cellInfos(){return cellInfos_;}
+ QString &name() {return name_;}
+ void setName(QString &name) {name_ = name;}
+
+ void addCellInfo(MvQVideoWallCellInfo &cell) {cellInfos_.push_back(cell);}
+
+private:
+ QString name_;
+ vector<MvQVideoWallCellInfo> cellInfos_;
+ QString wallURL_;
+ QString wallToken_;
+
+};
+
+
+
+// ----------------------------------------------
+// MvQVideoWallServer
+// Handles communication with a video wall server
+// ----------------------------------------------
+
+class MvQVideoWallServer : public QObject
+{
+Q_OBJECT
+
+public:
+ MvQVideoWallServer(QObject* parent=0);
+ vector<MvQVideoWallInfo>& wallInfos(){return wallInfos_;}
+
+ QString &URL() {return URL_;}
+ QString &token() {return token_;}
+
+ size_t numWalls() {return wallInfos_.size();};
+ MvQVideoWallInfo *wallInfo(size_t wallNumber) {return &(wallInfos_[wallNumber]);};
+
+signals:
+ void gotServerResponse();
+
+protected:
+ bool parseLayoutResponse(QString &response);
+
+
+protected slots:
+ void slotReply(QNetworkReply*);
+
+private:
+ vector<MvQVideoWallInfo> wallInfos_;
+ QString URL_;
+ QString token_;
+};
+
+
+
+
+
+class MvQVideoWallWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ MvQVideoWallWidget(QWidget *parent=0);
+ void setWall(MvQVideoWallInfo *info);
+ int current() const {return current_;}
+
+public slots:
+ void updateSelection(const QString &);
+
+signals:
+ void selectionChanged(const QString &);
+
+protected:
+ void paintEvent(QPaintEvent*);
+ void mousePressEvent(QMouseEvent *);
+
+private:
+ bool select(QPoint);
+
+ int offset_;
+ int current_;
+ QList<QRect> items_;
+ QPixmap pix_;
+ QPixmap pixSelect_;
+
+};
+
+
+class MvQWeatherRoomDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ MvQWeatherRoomDialog(int,int,QWidget *parent = 0);
+ ~MvQWeatherRoomDialog();
+
+signals:
+ void sendExpDialogInfo(MvRequest*);
+
+public slots:
+ void slotRangeFrameSelection(bool);
+ void updateWallSelector();
+ void updateWallSelection(int);
+
+protected:
+ void setVisible(bool);
+ void readSettings();
+ void writeSettings();
+
+private:
+ bool getFrameSelection ( MvRequest& );
+ void buildFrameSelection(QLayout*);
+ void errorMessage ( const char*, const char* = 0 );
+
+ QComboBox* wallCb_;
+ MvQVideoWallWidget *screenSelector_;
+ MvQVideoWallServer *wallServer_;
+ QLineEdit *leScreenSelection_;
+
+ int current_; // Current frame
+ int total_; // Total number of frames
+
+ QLineEdit* leFs3_; // Frame selection: line edit
+ QRadioButton* cbFs1_; // Frame selection: Current radio button
+ QRadioButton* cbFs2_; // Frame selection: All radio button
+ QRadioButton* cbFs3_; // Frame selection: Range radio button
+};
+
+#endif
diff --git a/src/uPlot/ObjectList.cc b/src/uPlot/ObjectList.cc
index 37eb46f..b52e982 100644
--- a/src/uPlot/ObjectList.cc
+++ b/src/uPlot/ObjectList.cc
@@ -512,21 +512,39 @@ ObjectList::ExpandRequest ( const MvRequest& reqst, long expandFlag )
//
// -- INPUT :
//
-// -- OUTPUT :
+// -- OUTPUT :
+
MvRequest
-ObjectList::CreateDefaultRequest ( const char* requestName, int expandFlag )
+ObjectList::CreateDefaultRequest ( const char* requestName, int expandFlag, const char* path )
{
MvRequest request ( requestName );
- MvRequest expandedRequest = ObjectList::ExpandRequest ( request,expandFlag );
+ MvRequest expRequest = ObjectList::ExpandRequest ( request,expandFlag );
// Add hidden parameters
- string cname = (const char*)Find("object", requestName)("default_name");
- string name = "<" + cname + ">";
- expandedRequest("_NAME") = name.c_str();
- expandedRequest( "_CLASS" ) = requestName;
- expandedRequest("_DEFAULT") = true;
+ expRequest( "_CLASS" ) = requestName;
+ expRequest("_DEFAULT") = true;
+
+ // Add parameter _NAME, including the path if it is given
+ const char* name = (const char*)Find("object",requestName)("default_name");
+ string defName;
+ if ( name )
+ {
+ defName = "<";
+ defName += name;
+ defName += ">";
+ }
+ else
+ defName = "<default>";
+
+ if ( path )
+ {
+ string relName = path + string("/") + defName;
+ expRequest("_NAME") = relName.c_str();
+ }
+ else
+ expRequest("_NAME") = defName.c_str();
- return expandedRequest;
+ return expRequest;
}
// -- METHOD :
diff --git a/src/uPlot/ObjectList.h b/src/uPlot/ObjectList.h
index 943f457..a5df485 100644
--- a/src/uPlot/ObjectList.h
+++ b/src/uPlot/ObjectList.h
@@ -88,7 +88,7 @@ public:
// Create a request in case there isn't one.
// expandFlag = 0 means use the expand flag value from the ObjectList.
- static MvRequest CreateDefaultRequest( const char*, int expandFlag=0 );
+ static MvRequest CreateDefaultRequest( const char*, int expandFlag = 0, const char* path = 0 );
// Check objects
static bool IsDataUnit ( const Cached& );
diff --git a/src/uPlot/PlotMod.cc b/src/uPlot/PlotMod.cc
index 03f2f8c..4090825 100644
--- a/src/uPlot/PlotMod.cc
+++ b/src/uPlot/PlotMod.cc
@@ -219,7 +219,8 @@ void PlotMod::MetviewError ( const string & message, const string & errorlevel )
fullMsg += message;
printMessage(fullMsg, priority);
- UserMessage(fullMsg);
+ if (priority)
+ UserMessage(fullMsg);
if (exit)
exitWithError();
diff --git a/src/uPlot/PlotPageBuilder.cc b/src/uPlot/PlotPageBuilder.cc
index 4d0a4f4..ae1b84c 100644
--- a/src/uPlot/PlotPageBuilder.cc
+++ b/src/uPlot/PlotPageBuilder.cc
@@ -37,87 +37,93 @@ PlotPageBuilder::Instance()
Presentable*
PlotPageBuilder::Execute (PmContext& context)
{
- // Creation of a new PlotPage and associated pages
- // Check if request is a PLOTSUPERPAGE
- MvRequest contextReq = context.InRequest();
-
- const char* verb = contextReq.getVerb();
- Presentable* superpage = 0;
- MvRequest defaultSuperPage;
-
- // Build a PLOTSUPERPAGE. If the superpage structure
- // already exists, only add the new page
- if ( verb == PLOTSUPERPAGE )
- {
- superpage = Root::Instance().FindSuperPage();
- if ( superpage )
- {
- // Insert Page
- Page* page = superpage->InsertOnePage(contextReq);
-
- context.Advance(); // Skip request processed above
-
- // Deal with further requests
- page->DropSimulate(context);
-
- return superpage;
- }
- // for efficiency, only copy the portion of the request that we will need
- MvRequest nextReq;
- nextReq.copyFromCurrentTo(context.InRequest(), NEWPAGE.c_str());
-
- superpage = new SuperPage ( nextReq );
-// superpage = new SuperPage ( context.InRequest() );
- }
- else // build a default PLOTSUPERPAGE (to deal with MAPVIEW,...)
- {
- defaultSuperPage = ObjectList::CreateDefaultRequest ( "PLOT_SUPERPAGE" );
-
- if ( strcmp(verb,PLOTPAGE) == 0 )
- defaultSuperPage("PAGES") = context.InRequest();
- else if ( ObjectList::IsView(verb) ) // View
- {
- // Create default page and add view to this request.
- MvRequest pageRequest = ObjectList::CreateDefaultRequest ( "PLOT_PAGE" );
- pageRequest("VIEW") = contextReq.justOneRequest();
- defaultSuperPage("PAGES") = pageRequest;
- }
-
- // If there is a data unit, we try to build a view according to this.
- // Else a default superpage with nothing in it will be built.
- else if ( ObjectList::IsDataUnit(verb) || ObjectList::IsVisDef(verb))
- {
- MvRequest pageRequest = ObjectList::CreateDefaultRequest ( "PLOT_PAGE" );
-
- Cached viewName = GetView(context);
- if ( (const char *)viewName )
- {
- MvRequest viewRequest = ObjectList::CreateDefaultRequest( viewName );
-
- pageRequest("VIEW") = viewRequest;
- }
-
- defaultSuperPage("PAGES") = pageRequest;
- }
-
- superpage = new SuperPage ( defaultSuperPage );
- }
-
- ensure ( superpage != 0 );
-
- // Put the new branch in the tree
- Root::Instance().Insert ( superpage );
-
- // Add the page Ids in the reply
- // Create a Reply
- MvRequest reply;
- superpage->CreateReply ( reply );
- context.AddToReply ( reply );
-
- context.Advance(); // Skip request processed above
-
- // Deal with further requests
- superpage->DropSimulate(context);
-
- return superpage;
+ // Creation of a new PlotPage and associated pages
+ // Check if request is a PLOTSUPERPAGE
+ MvRequest contextReq = context.InRequest();
+
+ const char* verb = contextReq.getVerb();
+ Presentable* superpage = 0;
+ MvRequest defaultSuperPage;
+
+ // Build a PLOTSUPERPAGE. If the superpage structure
+ // already exists, only add the new page
+ if ( verb == PLOTSUPERPAGE )
+ {
+ superpage = Root::Instance().FindSuperPage();
+ if ( superpage )
+ {
+ // Insert Page
+ Page* page = superpage->InsertOnePage(contextReq);
+
+ context.Advance(); // Skip request processed above
+
+ // Deal with further requests
+ page->DropSimulate(context);
+
+ return superpage;
+ }
+ // for efficiency, only copy the portion of the request that we will need
+ MvRequest nextReq;
+ nextReq.copyFromCurrentTo(context.InRequest(), NEWPAGE.c_str());
+
+ superpage = new SuperPage ( nextReq );
+ }
+ else // build a default PLOTSUPERPAGE (to deal with MAPVIEW,...)
+ {
+ // Check internal parameter _NAME . It may be used later (e.g. automatic macro generation)
+ const char* fullName = (const char*)contextReq("_NAME");
+ const char* path = 0;
+ if ( fullName )
+ path = dirname(fullName);
+
+ defaultSuperPage = ObjectList::CreateDefaultRequest ( "PLOT_SUPERPAGE",0,path );
+
+ // Update Pages info
+ if ( strcmp(verb,PLOTPAGE) == 0 )
+ defaultSuperPage("PAGES") = context.InRequest();
+ else if ( ObjectList::IsView(verb) ) // View
+ {
+ // Create default page and add view to this request.
+ MvRequest pageRequest = ObjectList::CreateDefaultRequest ( "PLOT_PAGE" );
+ pageRequest("VIEW") = contextReq.justOneRequest();
+ defaultSuperPage("PAGES") = pageRequest;
+ }
+
+ // If there is a data unit, we try to build a view according to this.
+ // Else a default superpage with nothing in it will be built.
+ else if ( ObjectList::IsDataUnit(verb) || ObjectList::IsVisDef(verb))
+ {
+ MvRequest pageRequest = ObjectList::CreateDefaultRequest ( "PLOT_PAGE" );
+
+ Cached viewName = GetView(context);
+ if ( (const char *)viewName )
+ {
+ MvRequest viewRequest = ObjectList::CreateDefaultRequest( viewName );
+
+ pageRequest("VIEW") = viewRequest;
+ }
+
+ defaultSuperPage("PAGES") = pageRequest;
+ }
+
+ superpage = new SuperPage ( defaultSuperPage );
+ }
+
+ ensure ( superpage != 0 );
+
+ // Put the new branch in the tree
+ Root::Instance().Insert ( superpage );
+
+ // Add the page Ids in the reply
+ // Create a Reply
+ MvRequest reply;
+ superpage->CreateReply ( reply );
+ context.AddToReply ( reply );
+
+ context.Advance(); // Skip request processed above
+
+ // Deal with further requests
+ superpage->DropSimulate(context);
+
+ return superpage;
}
diff --git a/src/uPlot/PmGeneralProjection.cc b/src/uPlot/PmGeneralProjection.cc
index acd9777..28d148f 100644
--- a/src/uPlot/PmGeneralProjection.cc
+++ b/src/uPlot/PmGeneralProjection.cc
@@ -174,50 +174,43 @@ PmMercator::CheckOriginLongitude ()
bool
PmMercator::CheckGeodeticCoordinates (Location& area)
{
- bool flag = true;
-
- // check if individual values are within the range
- double x1 = ( geodCoord_.Left() < -360. ) ? -360 : geodCoord_.Left();
- double x2 = ( geodCoord_.Right() > 360. ) ? 360 : geodCoord_.Right();
- double y2 = ( geodCoord_.Top() > 89. ) ? 89 : geodCoord_.Top();
- double y1 = ( geodCoord_.Bottom() < -89. ) ? -89 : geodCoord_.Bottom();
-
- // check if difference between long values are within the range
- if ( (x2 - x1) > 360 )
- {
- x1 = -180.;
- x2 = +180.;
- }
-
- // check if direction is ok (S -> N, W -> E)
- if ( x2 < x1 ) x2 += 360.;
- if ( y2 <= y1 )
- {
- y1 = -90.;
- y2 = +90.;
- }
-
- // special cases
- if ( x2 == x1 )
- {
- if ( x2 == 0. ) x2 = 360.;
- else if ( x1 == 180. ) x1 = -180.;
- else if ( x2 == -180. ) x2 = 180.;
- }
-
- // check if some values have been changed
- if ( ( geodCoord_.Left() != x1 ) ||
- ( geodCoord_.Right() != x2 ) ||
- ( geodCoord_.Bottom() != y1 ) ||
- ( geodCoord_.Top() != y2 ) )
- {
- flag = false;
- geodCoord_ = Location ( y2, x1, y1, x2 );
- }
-
- area = geodCoord_;
-
- return flag;
+ bool flag = true;
+
+ // Check if individual values are within the range
+ // Magics now allows longitude coordinates to be greater than 360.
+ double x1 = geodCoord_.Left();
+ double x2 = geodCoord_.Right();
+ double y2 = ( geodCoord_.Top() > 89. ) ? 89 : geodCoord_.Top();
+ double y1 = ( geodCoord_.Bottom() < -89. ) ? -89 : geodCoord_.Bottom();
+
+ // Check if direction is ok (S -> N)
+ if ( y2 <= y1 )
+ {
+ y1 = -90.;
+ y2 = +90.;
+ }
+
+ // Special cases
+ if ( x2 == x1 )
+ {
+ if ( x2 == 0. ) x2 = 360.;
+ else if ( x1 == 180. ) x1 = -180.;
+ else if ( x2 == -180. ) x2 = 180.;
+ }
+
+ // Check if some values have been changed
+ if ( ( geodCoord_.Left() != x1 ) ||
+ ( geodCoord_.Right() != x2 ) ||
+ ( geodCoord_.Bottom() != y1 ) ||
+ ( geodCoord_.Top() != y2 ) )
+ {
+ flag = false;
+ geodCoord_ = Location ( y2, x1, y1, x2 );
+ }
+
+ area = geodCoord_;
+
+ return flag;
}
// =============================================================
@@ -288,50 +281,43 @@ PmCylindEquid::CheckOriginLongitude ()
bool
PmCylindEquid::CheckGeodeticCoordinates (Location& area)
{
- bool flag = true;
-
- // check if individual values are within the range
- double x1 = ( geodCoord_.Left() < -360. ) ? -360 : geodCoord_.Left();
- double x2 = ( geodCoord_.Right() > 360. ) ? 360 : geodCoord_.Right();
- double y2 = ( geodCoord_.Top() > 90. ) ? 90 : geodCoord_.Top();
- double y1 = ( geodCoord_.Bottom() < -90. ) ? -90 : geodCoord_.Bottom();
-
- // check if difference between long values are within the range
- if ( (x2 - x1) > 360 )
- {
- x1 = -180.;
- x2 = +180.;
- }
-
- // check if direction is ok (S -> N, W -> E)
- if ( x2 < x1 ) x2 += 360.;
- if ( y2 <= y1 )
- {
- y1 = -90.;
- y2 = +90.;
- }
-
- // special cases
- if ( x2 == x1 )
- {
- if ( x2 == 0. ) x2 = 360.;
- else if ( x1 == 180. ) x1 = -180.;
- else if ( x2 == -180. ) x2 = 180.;
- }
-
- // check if some values have been changed
- if ( ( geodCoord_.Left() != x1 ) ||
- ( geodCoord_.Right() != x2 ) ||
- ( geodCoord_.Bottom() != y1 ) ||
- ( geodCoord_.Top() != y2 ) )
- {
- flag = false;
- geodCoord_ = Location ( y2, x1, y1, x2 );
- }
-
- area = geodCoord_;
-
- return flag;
+ bool flag = true;
+
+ // Check if individual values are within the range.
+ // Magics now allows longitude coordinates to be greater than 360.
+ double x1 = geodCoord_.Left();
+ double x2 = geodCoord_.Right();
+ double y2 = ( geodCoord_.Top() > 90. ) ? 90 : geodCoord_.Top();
+ double y1 = ( geodCoord_.Bottom() < -90. ) ? -90 : geodCoord_.Bottom();
+
+ // Check if direction is ok (S -> N)
+ if ( y2 <= y1 )
+ {
+ y1 = -90.;
+ y2 = +90.;
+ }
+
+ // Special cases
+ if ( x2 == x1 )
+ {
+ if ( x2 == 0. ) x2 = 360.;
+ else if ( x1 == 180. ) x1 = -180.;
+ else if ( x2 == -180. ) x2 = 180.;
+ }
+
+ // Check if some values have been changed
+ if ( ( geodCoord_.Left() != x1 ) ||
+ ( geodCoord_.Right() != x2 ) ||
+ ( geodCoord_.Bottom() != y1 ) ||
+ ( geodCoord_.Top() != y2 ) )
+ {
+ flag = false;
+ geodCoord_ = Location ( y2, x1, y1, x2 );
+ }
+
+ area = geodCoord_;
+
+ return flag;
}
// =============================================================
diff --git a/src/uPlot/Presentable.h b/src/uPlot/Presentable.h
index 7089b4d..dff06fb 100644
--- a/src/uPlot/Presentable.h
+++ b/src/uPlot/Presentable.h
@@ -632,8 +632,8 @@ public:
virtual void DataUnit(MvIcon&) {}
- // Dealing with Export plotting
- virtual bool ExportPlot ( MvRequest* ) { return false; }
+ // Dealing with Export plotting
+ virtual bool ExportPlot ( MvRequest*, bool = false ) { return false; }
// Dealing with Print plotting
virtual void PrintFile ( MvRequest& ) { }
diff --git a/src/uPlot/SuperPage.cc b/src/uPlot/SuperPage.cc
index 39fb2e3..e24acb3 100644
--- a/src/uPlot/SuperPage.cc
+++ b/src/uPlot/SuperPage.cc
@@ -1341,26 +1341,34 @@ SuperPage::UpdateLayerStackingOrder ()
}
bool
-SuperPage::ExportPlot ( MvRequest* req )
+SuperPage::ExportPlot ( MvRequest* req, bool sync )
{
- MvRequest inReq = *req;
+ MvRequest inReq = *req;
- // Create printer request
- MvRequest printerReq( "PRINTER_MANAGER" );
- printerReq("DESTINATION") = MVFILE;
- printerReq("OUTPUT_DEVICES") = inReq;
+ // Create printer request
+ MvRequest printerReq( "PRINTER_MANAGER" );
+ printerReq("DESTINATION") = MVFILE;
+ printerReq("OUTPUT_DEVICES") = inReq;
- // Retrieve current plot request without output formats
- MvRequest plotReq;
- GetAllRequests( plotReq );
+ // Retrieve current plot request without output formats
+ MvRequest plotReq;
+ GetAllRequests( plotReq );
- // Create the full request: output formats + plot requests
- MvRequest newReq = printerReq + plotReq;
+ // Create the full request: output formats + plot requests
+ MvRequest newReq = printerReq + plotReq;
- // Call uPlotBatch to do the job
- MvApplication::callService ( "uPlotBatch", newReq, 0 );
+ // Call uPlotBatch (syncronous or asyncronous) to do the job
+ if ( sync )
+ {
+ int err;
+ MvApplication::waitService ( "uPlotBatch", newReq, err );
+ if ( err )
+ return false;
+ }
+ else
+ MvApplication::callService ( "uPlotBatch", newReq, 0 );
- return true;
+ return true;
}
void
diff --git a/src/uPlot/SuperPage.h b/src/uPlot/SuperPage.h
index 9d995a9..4c38e70 100644
--- a/src/uPlot/SuperPage.h
+++ b/src/uPlot/SuperPage.h
@@ -267,9 +267,10 @@ public:
// virtual void PrintInfo ();
- // Dealing with Export plotting
- // Save a copy of the plotting
- virtual bool ExportPlot ( MvRequest* );
+ // Dealing with Export plotting
+ // Save a copy of the plotting. Set sync to true to make sure
+ // that the file will be created before returning to the caller.
+ virtual bool ExportPlot ( MvRequest*, bool sync=false);
// Dealing with Print plotting
// Recreate the plotting and send it to a given printer
@@ -280,7 +281,7 @@ public:
// Dealing with Contents tools
virtual void contentsRequest( MvRequest& );
-
+
#ifndef NOMETVIEW_QT
static void setPlotApplication(uPlotBase * pa) {plotApplication_=pa;}
#endif
diff --git a/src/uPlot/VertProfView.cc b/src/uPlot/VertProfView.cc
index d3204f3..7d26cb7 100644
--- a/src/uPlot/VertProfView.cc
+++ b/src/uPlot/VertProfView.cc
@@ -24,6 +24,9 @@ VertProfViewFactory::Build ( Page& page,
// Expand request
MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
+ // Copy hidden parameters
+ expReq.mars_merge(contextRequest);
+
// Instantiate a VerticalProfile view
return new VertProfView ( page, expReq, setupRequest );
}
@@ -123,9 +126,12 @@ string VertProfView::Name()
void VertProfView::DescribeYourself ( ObjectInfo& description )
{
+ // Use the original request to describe the View
+ MvRequest viewReq = viewRequest_("_ORIGINAL_REQUEST");
+
// Convert my request to macro
set<Cached> skipSet;
- description.ConvertRequestToMacro ( viewRequest_, PUT_END, MacroName().c_str(),"mvertprofview",skipSet);
+ description.ConvertRequestToMacro ( viewReq, PUT_END, MacroName().c_str(),"mvertprofview",skipSet);
description.PutNewLine (" " );
}
@@ -184,35 +190,49 @@ bool VertProfView::UpdateView ()
return true;
}
+ // Check where the axes min/max values should be taken from
+ bool axisAuto = false;
+ if ( (const char*)viewRequest_("_DEFAULT") &&
+ (int)viewRequest_("_DEFAULT") == 1 &&
+ (const char*)viewRequest_("_DATAATTACHED") &&
+ strcmp((const char*)viewRequest_("_DATAATTACHED"),"YES") == 0
+ )
+ axisAuto = true;
+
// Translate X coordinates
bool ierror = false;
MvRequest cartView("CARTESIANVIEW");
- cartView("X_AUTOMATIC") = "OFF";
cartView("X_AXIS_TYPE") = "REGULAR";
- int nvals = viewRequest_.countValues("X_MIN_MAX");
- if ( nvals != 2 )
- ierror = true;
+ if ( axisAuto )
+ cartView("X_AUTOMATIC") = "on";
else
{
- // Read X valyes
- string sx1 = (const char*)viewRequest_("X_MIN_MAX",0);
- string sx2 = (const char*)viewRequest_("X_MIN_MAX",1);
- if ( sx1 == "AUTO" && sx2 == "AUTO" )
- {
- xValuesAuto_ = true;
- if ( (const char*)viewRequest_("_DATAATTACHED") &&
- strcmp((const char*)viewRequest_("_DATAATTACHED"),"YES") == 0 )
- cartView("X_AUTOMATIC") = "ON";
- }
- else if ( sx1 == "AUTO" || sx2 == "AUTO" )
+ cartView("X_AUTOMATIC") = "OFF";
+ int nvals = viewRequest_.countValues("X_MIN_MAX");
+ if ( nvals != 2 )
ierror = true;
else
{
- xValuesAuto_ = false;
- xMin_ = viewRequest_("X_MIN_MAX",0);
- xMax_ = viewRequest_("X_MIN_MAX",1);
- cartView("X_MIN") = xMin_;
- cartView("X_MAX") = xMax_;
+ // Read X values
+ string sx1 = (const char*)viewRequest_("X_MIN_MAX",0);
+ string sx2 = (const char*)viewRequest_("X_MIN_MAX",1);
+ if ( sx1 == "AUTO" && sx2 == "AUTO" )
+ {
+ xValuesAuto_ = true;
+ if ( (const char*)viewRequest_("_DATAATTACHED") &&
+ strcmp((const char*)viewRequest_("_DATAATTACHED"),"YES") == 0 )
+ cartView("X_AUTOMATIC") = "ON";
+ }
+ else if ( sx1 == "AUTO" || sx2 == "AUTO" )
+ ierror = true;
+ else
+ {
+ xValuesAuto_ = false;
+ xMin_ = viewRequest_("X_MIN_MAX",0);
+ xMax_ = viewRequest_("X_MIN_MAX",1);
+ cartView("X_MIN") = xMin_;
+ cartView("X_MAX") = xMax_;
+ }
}
}
@@ -223,28 +243,36 @@ bool VertProfView::UpdateView ()
}
// Translate Y coordinates
- cartView("Y_AUTOMATIC") = "OFF";
+ if ( axisAuto )
+ {
+ cartView("Y_AUTOMATIC") = "on";
+ cartView("Y_AUTOMATIC_REVERSE") = yReverse_.c_str();
+ }
+ else
+ {
+ cartView("Y_AUTOMATIC") = "OFF";
+ cartView("Y_MIN") = yMin_;
+ cartView("Y_MAX") = yMax_;
+ }
+
const char* log = viewRequest_("VERTICAL_SCALING");
cartView("Y_AXIS_TYPE") = ( log && strcmp(log,"LOG") == 0) ? "logarithmic" : "REGULAR";
- cartView("Y_MIN") = yMin_;
- cartView("Y_MAX") = yMax_;
-
- // Translate axes definitions
- cartView.setValue("HORIZONTAL_AXIS",viewRequest_.getSubrequest("VALUE_AXIS"));
- cartView.setValue("VERTICAL_AXIS",viewRequest_.getSubrequest("LEVEL_AXIS"));
+ // Translate axes definitions
+ cartView.setValue("HORIZONTAL_AXIS",viewRequest_.getSubrequest("VALUE_AXIS"));
+ cartView.setValue("VERTICAL_AXIS",viewRequest_.getSubrequest("LEVEL_AXIS"));
- // Copy PAGE and SUBPAGE definition
- CopySomeParameters( viewRequest_,cartView,"PAGE" );
- CopySomeParameters( viewRequest_,cartView,"SUBPAGE" );
+ // Copy PAGE and SUBPAGE definition
+ CopySomeParameters( viewRequest_,cartView,"PAGE" );
+ CopySomeParameters( viewRequest_,cartView,"SUBPAGE" );
- // Copy the original request without certain parameteres (to avoid duplication)
- RemoveParameters( viewRequest_, "VALUE_AXIS" );
- RemoveParameters( viewRequest_, "LEVEL_AXIS" );
- RemoveParameters( viewRequest_, "PAGE" );
- RemoveParameters( viewRequest_, "SUBPAGE" );
- RemoveParameters( viewRequest_, "_" );
- cartView("_ORIGINAL_REQUEST") = viewRequest_;
+ // Copy the original request without certain parameteres (to avoid duplication)
+// RemoveParameters( viewRequest_, "VALUE_AXIS" );
+// RemoveParameters( viewRequest_, "LEVEL_AXIS" );
+ RemoveParameters( viewRequest_, "PAGE" );
+ RemoveParameters( viewRequest_, "SUBPAGE" );
+// RemoveParameters( viewRequest_, "_" );
+ cartView("_ORIGINAL_REQUEST") = viewRequest_;
// Update request
viewRequest_ = cartView;;
@@ -254,3 +282,10 @@ bool VertProfView::UpdateView ()
return true;
}
+
+void VertProfView::ApplicationInfo ( MvRequest& req )
+{
+ // Save direction of the vertical axis
+ if ( (const char*)req("Y_AUTOMATIC_REVERSE") )
+ yReverse_ = (const char*)req("Y_AUTOMATIC_REVERSE");
+}
diff --git a/src/uPlot/VertProfView.h b/src/uPlot/VertProfView.h
index 56b8043..643a4a9 100644
--- a/src/uPlot/VertProfView.h
+++ b/src/uPlot/VertProfView.h
@@ -111,10 +111,15 @@ public:
private:
- bool xValuesAuto_; // true: x values provided by user
- double xMin_,xMax_; // X min/max values
+ // Save some data specific to some DataApplication
+ virtual void ApplicationInfo( MvRequest& );
// No assignment
VertProfView& operator=(const VertProfView&);
+
+ // Variables members
+ string yReverse_; // Y axis direction: "on"/"off"
+ bool xValuesAuto_; // true: x values provided by user
+ double xMin_,xMax_; // X min/max values
};
#endif
diff --git a/src/uPlot/XSectView.cc b/src/uPlot/XSectView.cc
index 4a03ee4..91f692d 100644
--- a/src/uPlot/XSectView.cc
+++ b/src/uPlot/XSectView.cc
@@ -30,6 +30,9 @@ XSectViewFactory::Build ( Page& page,
// Expand request
MvRequest expReq = ObjectList::ExpandRequest(contextRequest,EXPAND_DEFAULTS);
+ // Copy hidden parameters
+ expReq.mars_merge(contextRequest);
+
// Instantiate a Xsection view
return new XSectView ( page, expReq, setupRequest );
}
@@ -97,14 +100,16 @@ XSectViewM3Factory::Translate ( const MvRequest& in )
XSectView::XSectView ( Page& owner,
const MvRequest& viewRequest,
const MvRequest& setupRequest ):
- CommonXSectView ( owner, viewRequest, setupRequest )
+ CommonXSectView ( owner, viewRequest, setupRequest ),
+ yReverse_("off")
{
ApplicationName("MXSECTION");
SetVariables(viewRequest,true);
}
XSectView::XSectView (const XSectView &old) :
- CommonXSectView(old)
+ CommonXSectView(old),
+ yReverse_("off")
{
}
@@ -159,26 +164,47 @@ bool XSectView::UpdateView ()
if ( string(viewRequest_.getVerb()) == CARTESIANVIEW )
return true;
- // Translate geographical coordinates
+ // Check where the axes min/max values should be taken from
+ bool axisAuto = false;
+ if ( (const char*)viewRequest_("_DEFAULT") &&
+ (int)viewRequest_("_DEFAULT") == 1 &&
+ (const char*)viewRequest_("_DATAATTACHED") &&
+ strcmp((const char*)viewRequest_("_DATAATTACHED"),"YES") == 0
+ )
+ axisAuto = true;
+
+ // Translate X coordinates
MvRequest cartView("CARTESIANVIEW");
- cartView("X_AUTOMATIC") = "off";
- cartView("X_AXIS_TYPE") = "geoline";
- cartView("X_MIN_LATITUDE") = latMin_;
- cartView("X_MAX_LATITUDE") = latMax_;
- cartView("X_MIN_LONGITUDE") = lonMin_;
- cartView("X_MAX_LONGITUDE") = lonMax_;
+ if ( axisAuto )
+ cartView("X_AUTOMATIC") = "on";
+ else
+ {
+ cartView("X_AUTOMATIC") = "off";
+ cartView("X_MIN_LATITUDE") = latMin_;
+ cartView("X_MAX_LATITUDE") = latMax_;
+ cartView("X_MIN_LONGITUDE") = lonMin_;
+ cartView("X_MAX_LONGITUDE") = lonMax_;
+ }
+ cartView("X_AXIS_TYPE") = "geoline";
// Translate Y coordinates
- cartView("Y_AUTOMATIC") = "off";
+ if ( axisAuto )
+ {
+ cartView("Y_AUTOMATIC") = "on";
+ cartView("Y_AUTOMATIC_REVERSE") = yReverse_.c_str();
+ }
+ else
+ {
+ cartView("Y_MIN") = yMin_;
+ cartView("Y_MAX") = yMax_;
+ }
+
const char* log = viewRequest_("VERTICAL_SCALING");
if ( log && strcmp(log,"LOG") == 0 )
cartView("Y_AXIS_TYPE") = "logarithmic";
else
cartView("Y_AXIS_TYPE") = "regular";
- cartView("Y_MIN") = yMin_;
- cartView("Y_MAX") = yMax_;
-
// Copy axis definition
cartView.setValue("HORIZONTAL_AXIS",viewRequest_.getSubrequest("HORIZONTAL_AXIS"));
cartView.setValue("VERTICAL_AXIS",viewRequest_.getSubrequest("VERTICAL_AXIS"));
@@ -204,3 +230,9 @@ bool XSectView::UpdateView ()
return true;
}
+void XSectView::ApplicationInfo ( MvRequest& req )
+{
+ // Save direction of the vertical axis
+ if ( (const char*)req("Y_AUTOMATIC_REVERSE") )
+ yReverse_ = (const char*)req("Y_AUTOMATIC_REVERSE");
+}
diff --git a/src/uPlot/XSectView.h b/src/uPlot/XSectView.h
index 54f089a..7ffe81d 100644
--- a/src/uPlot/XSectView.h
+++ b/src/uPlot/XSectView.h
@@ -113,7 +113,13 @@ public:
private:
+ // Save some data specific to some DataApplication
+ virtual void ApplicationInfo( MvRequest& );
+
// No assignment
XSectView& operator=(const XSectView&);
+
+ // Variables members
+ string yReverse_; // Y axis direction: "on"/"off"
};
#endif
diff --git a/src/uPlot/uPlot.cc b/src/uPlot/uPlot.cc
index b26b34b..eb086b5 100644
--- a/src/uPlot/uPlot.cc
+++ b/src/uPlot/uPlot.cc
@@ -74,7 +74,8 @@ void MvQSceneComboBox::hidePopup()
uPlot::uPlot(QWidget *parent) : uPlotBase(parent),
- progressItem_(0)
+ progressItem_(0),
+ weatherRoom_(false)
{
setAttribute(Qt::WA_DeleteOnClose);
@@ -82,7 +83,17 @@ uPlot::uPlot(QWidget *parent) : uPlotBase(parent),
//Initial size
setInitialSize(1200,760);
+
+//Check if weather room is enabled
+#ifdef METVIEW_WEATHER_ROOM
+ if(char *wr=getenv("MV_WEATHER_ROOM"))
+ {
+ if(strcmp(wr,"1") == 0)
+ weatherRoom_=true;
+ }
+#endif
+
//---------------------
// The view
//---------------------
@@ -308,12 +319,30 @@ void uPlot::setupFileActions()
connect(actionMacro,SIGNAL(triggered()),
this,SLOT(slotGenerateMacro()));
-
+
MvQMainWindow::MenuType menuType=MvQMainWindow::FileMenu;
menuItems_[menuType].push_back(new MvQMenuItem(actionExport));
menuItems_[menuType].push_back(new MvQMenuItem(actionPrint));
menuItems_[menuType].push_back(new MvQMenuItem(actionMacro));
+
+//Weather room connection
+#ifdef METVIEW_WEATHER_ROOM
+
+ if(weatherRoom_)
+ {
+ QAction *actionWroom = new QAction(this);
+ actionWroom->setObjectName(QString::fromUtf8("actionWroom"));
+ actionWroom->setIcon(QPixmap(QString::fromUtf8(":/uPlot/videowall.svg")));
+ actionWroom->setText(tr("Export to &video wall"));
+
+ connect(actionWroom,SIGNAL(triggered()),
+ this,SLOT(slotLoadWeatherRoomDialog()));
+
+ menuItems_[menuType].push_back(new MvQMenuItem(actionWroom));
+ }
+#endif
+
}
void uPlot::setupToolsActions()
diff --git a/src/uPlot/uPlot.h b/src/uPlot/uPlot.h
index fc04156..025f766 100644
--- a/src/uPlot/uPlot.h
+++ b/src/uPlot/uPlot.h
@@ -145,6 +145,8 @@ protected:
MvQProgressItem* progressItem_;
QSplitter* mainSplitter_;
+
+ bool weatherRoom_;
};
#endif
diff --git a/src/uPlot/uPlot.qrc b/src/uPlot/uPlot.qrc
index ab367e3..f6751ae 100644
--- a/src/uPlot/uPlot.qrc
+++ b/src/uPlot/uPlot.qrc
@@ -1,5 +1,6 @@
<RCC>
- <qresource prefix="uPlot">
+ <qresource prefix="uPlot">
+ <file alias="animation.svg">../images/animation.svg</file>
<file alias="antialias.svg">../images/antialias.svg</file>
<file alias="magnifier.svg">../images/magnifier.svg</file>
<file alias="print.svg">../images/print.svg</file>
@@ -32,6 +33,9 @@
<file alias="layers.svg">../images/layers.svg</file>
<file alias="meta_data.svg">../images/meta_data.svg</file>
<file alias="reset.svg">../images/reset.svg</file>
+ <file alias="videowall.svg">../images/videowall.svg</file>
+ <file alias="wall_screen.svg">../images/wall_screen.svg</file>
+ <file alias="wall_screen_selected.svg">../images/wall_screen_selected.svg</file>
<file alias="layerInfo.css">layerInfo.css</file>
</qresource>
</RCC>
diff --git a/src/uPlot/uPlotBase.cc b/src/uPlot/uPlotBase.cc
index 169a39c..1d178d4 100644
--- a/src/uPlot/uPlotBase.cc
+++ b/src/uPlot/uPlotBase.cc
@@ -41,6 +41,12 @@
#include "ExportDialog.h"
#include "MvQAbout.h"
#include "MvQApplication.h"
+
+#ifdef METVIEW_WEATHER_ROOM
+#include "MvQWeatherRoomDialog.h"
+#include "MvQWeatherRoomManager.h"
+#endif
+
#include "MvQPlotView.h"
#include "MvQZoomStackWidget.h"
@@ -117,12 +123,15 @@ uPlotBase::uPlotBase(QWidget* parent) : MvQMainWindow(parent),
statusMessageLabel_ = new QLabel("");
statusMessageLabel_->setFrameShape(QFrame::NoFrame);
-
+
+ #ifdef METVIEW_WEATHER_ROOM
+ uploader_ = 0;
+ #endif
}
uPlotBase::~uPlotBase()
{
- owner_ = 0;
+ owner_ = 0;
}
void uPlotBase::setupViewActions()
@@ -443,12 +452,9 @@ void uPlotBase::processDrop(MvQIconDropItem* drop)
req("_CONTEXT") = reqView;
}
}
-
- req.print();
-
+
// Send drop request to the appropriate function
emit sendDropRequest(&req);
-
}
void uPlotBase::slotProcessDropInView(const MvQDrop& drop, QPoint pos)
@@ -674,6 +680,53 @@ void uPlotBase::slotLoadExportDialog()
return;
}
+void uPlotBase::slotLoadWeatherRoomDialog()
+{
+#ifdef METVIEW_WEATHER_ROOM
+ // Is there anything plotted?
+ if ( !owner_ )
+ {
+ cout << "Nothing to be exported" << endl;
+ return;
+ }
+
+ // Ask and wait for user options
+ MvQWeatherRoomDialog dialog(currentStep(),stepNum());
+ if( dialog.exec() != QDialog::Accepted )
+ return;
+
+ // Get information from the dialog window
+ //MvRequest out("WEATHER_ROOM");
+
+ // Define output device. Create a PNG temporary file.
+ MvRequest devReq("PNGOUTPUT");
+ string fname = marstmp();
+ devReq("OUTPUT_FULLNAME") = fname.c_str();
+ devReq("OUTPUT_FRAME_LIST") = 1;
+ devReq("OUTPUT_NAME_FIRST_PAGE_NUMBER") = "OFF";
+
+ // Ask my owner to recreate the plot and save it accordingly
+ // Set the syncronous flag, e.g. make sure the file is created
+ // before uploading it
+ if ( owner_->ExportPlot(&devReq,true) == false )
+ {
+ cout << "CREATE A ERROR WINDOW MESSAGE" << endl;
+ }
+
+ // Upload file to the weather room
+ if ( !uploader_ )
+ uploader_ = new MvQVideoWallUploader(this);
+
+ QString fileName = QString::fromUtf8(fname.c_str());
+ uploader_->wrUpLoader(fileName);
+
+ // Delete the PNG temporary file
+ char test[128];
+ sprintf(test,"rm -f %s",fname.c_str());
+ system(test);
+#endif
+}
+
void uPlotBase::slotLoadPrintDialog()
{
// Is there anything plotted?
@@ -769,7 +822,11 @@ void uPlotBase::slotExpDialogInfo (MvRequest* req1)
{
const char* fname;
req.getValue(fname,"OUTPUT_NAME");
- string verb = req.getVerb();
+ string verb = req.getVerb(); // Ask my owner to recreate the plot and save it accordingly
+ if ( owner_->ExportPlot(req1) == false )
+ {
+ cout << "CREATE A ERROR WINDOW MESSAGE" << endl;
+ }
size_t found = verb.find("OUTPUT");
string format = verb.substr(0,found);
std::transform(format.begin(), format.end(),format.begin(), ::tolower);
@@ -820,6 +877,7 @@ void uPlotBase::slotExpDialogInfo (MvRequest* req1)
#endif
}
+
void uPlotBase::slotGenerateMacro ()
{
if ( !owner_ ) {
@@ -1204,5 +1262,3 @@ void uPlotBase::setPlotWidgetSize(float hor,float ver)
{
setPlot(hor,ver);
}
-
-
diff --git a/src/uPlot/uPlotBase.h b/src/uPlot/uPlotBase.h
index 746a970..4d8dfa1 100644
--- a/src/uPlot/uPlotBase.h
+++ b/src/uPlot/uPlotBase.h
@@ -21,6 +21,10 @@
#include "Presentable.h"
+#ifdef METVIEW_WEATHER_ROOM
+class MvQVideoWallUploader; //"MvQWeatherRoomManager.h"
+#endif
+
class MvRequest;
class QAction;
@@ -88,6 +92,7 @@ public slots:
void slotResizeEvent(const QSize &);
void slotProcessDropInView(const MvQDrop&,QPoint);
virtual void slotSetActiveScene(MgQSceneItem*)=0;
+ void slotLoadWeatherRoomDialog();
protected:
void SetupResources();
@@ -152,6 +157,10 @@ protected:
//Progress
QLabel* statusMessageLabel_;
+
+#ifdef METVIEW_WEATHER_ROOM
+ MvQVideoWallUploader* uploader_;
+#endif
};
#endif
diff --git a/src/uPlot/uPlotManager.cc b/src/uPlot/uPlotManager.cc
index a8d2e6c..37e1c85 100644
--- a/src/uPlot/uPlotManager.cc
+++ b/src/uPlot/uPlotManager.cc
@@ -65,6 +65,7 @@ int main(int argc,char **argv)
uPlotManager nc2("NETCDF_GEO_MATRIX");
uPlotManager nc3("NETCDF_XY_MATRIX");
uPlotManager nc4("NETCDF_XY_POINTS");
+ uPlotManager nc5("NETCDF");
uPlotManager i1 ("INPUT_HISTOGRAM");
uPlotManager i2 ("INPUT_XY_POINTS");
diff --git a/test/Makefile.in b/test/Makefile.in
index 166375d..6c961bb 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -38,6 +38,7 @@ subdir = test
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -103,6 +104,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -126,6 +129,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/test/macros/Makefile.in b/test/macros/Makefile.in
index fcfa1d9..58ef9f9 100644
--- a/test/macros/Makefile.in
+++ b/test/macros/Makefile.in
@@ -39,6 +39,7 @@ subdir = test/macros
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/aux_build/autotroll.m4 \
+ $(top_srcdir)/aux_build/ax_boost_base.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -66,6 +67,8 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
AXX = @AXX@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -89,6 +92,7 @@ ECREGRID_LIBS = @ECREGRID_LIBS@
EGREP = @EGREP@
EMOS_LIB_NAME = @EMOS_LIB_NAME@
EXEEXT = @EXEEXT@
+EXTRA_LD_LIBRARY_PATHS = @EXTRA_LD_LIBRARY_PATHS@
F77 = @F77@
FC = @FC@
FCFLAGS = @FCFLAGS@
diff --git a/version.sh b/version.sh
index 28f1310..edb1efd 100644
--- a/version.sh
+++ b/version.sh
@@ -4,7 +4,7 @@
METVIEW_PACKAGE_NAME='Metview'
METVIEW_PACKAGE_VERSION_MAJOR='4'
METVIEW_PACKAGE_VERSION_MINOR='4'
-METVIEW_PACKAGE_VERSION_REVISION='3'
+METVIEW_PACKAGE_VERSION_REVISION='7'
METVIEW_PACKAGE_VERSION_LABEL=''
METVIEW_MAGICS_MIN_VERSION='2.18.1'
@@ -20,6 +20,6 @@ fi
METVIEW_PACKAGE_VERSION=${METVIEW_PACKAGE_VERSION_MAJOR}.${METVIEW_PACKAGE_VERSION_MINOR}.${METVIEW_PACKAGE_VERSION_REVISION}${METVIEW_PACKAGE_VERSION_LABEL_STRING}
-METVIEW_PACKAGE_COPYRIGHT_YEAR='2012'
-METVIEW_PACKAGE_COPYRIGHT_PERIOD='1990-2012'
+METVIEW_PACKAGE_COPYRIGHT_YEAR='2014'
+METVIEW_PACKAGE_COPYRIGHT_PERIOD='1990-2014'
METVIEW_PACKAGE_RELEASE_DATE=`date +%d-%B-%Y`
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/metview.git
More information about the debian-science-commits
mailing list