# This file contains metadata for your plugin.

# This file should be included when you package your plugin.# Mandatory items:

[general]
name=movecost
qgisMinimumVersion=3.0
qgisMaximumVersion=4.99
description=R script for QGIS for Calculation of Slope-Dependent Accumulated Cost Surface, Least-Cost Paths, and Least-Cost Corridors Related to Human Movement
version=4.0.1
author=Enzo Cocca; Gianmarco Alberti
email=enzo.ccc@gmail.com

about=R script for QGIS for Calculation of Slope-Dependent Accumulated Cost Surface, Least-Cost Paths, and Least-Cost Corridors Related to Human Movement. Based on the movecost R package by Gianmarco Alberti. Requires the Processing R Provider plugin and R with the movecost package >= 3.0.0 (terra, sf, igraph, ggplot2; elevatr for the by-polygon variants).

tracker=https://github.com/enzococca/movecost/issues
repository=https://github.com/enzococca/movecost
# End of mandatory metadata

# Recommended items:

hasProcessingProvider=no

# Changelog
changelog=
    4.0.1 - Qt6 enum scoping (plugins.qgis.org Qt6 checker, 16 issues):
        - Fully scoped every Qt/QGIS enum flagged by the repository checker:
          Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.
          SmoothTransformation, Qt.KeyboardModifier.ShiftModifier,
          Qt.DockWidgetArea.RightDockWidgetArea, QgsRasterBandStats.Stats.All,
          QgsColorRampShader.Type.Interpolated (movecost.py,
          movecost_dialog.py, layer_organizer.py).
        - The scoped forms resolve on both Qt5 (PyQt5) and Qt6 (PyQt6)
          bindings, verified against QGIS 3.x/Qt5; no behavior change.
    4.0.0 - Port to the movecost R package 3.0.0 (mc_* API):
        - movecost 3.0.0 removed the legacy movecost()/movebound()/movecorr()/
          movealloc()/movecomp()/movenetw()/moverank() functions: every call
          now errors with ".Defunct". All 14 Processing scripts were ported
          to the new architecture: the cost surface is built once with
          mc_surface() and reused by every analysis (mc_accum, mc_paths,
          mc_corridor, mc_boundary, mc_alloc, mc_network, mc_rank, mc_comp).
        - Dependency stack updated: terra + sf + igraph + ggplot2 (raster is
          kept only because the QGIS R provider hands rasters over as
          RasterBrick; elevatr is needed by the by-polygon variants). The
          retired 2.x dependencies chron, gdistance, sp and Matrix are no
          longer installed.
        - The parameter interface of every algorithm is UNCHANGED (existing
          models and pyArchInit keep working). Two new optional parameters:
          Corridor_Method (reach/through) on Movecorr — 'through' is the new
          directional corridor of movecost 3.0 — and Penalty on Moverank,
          whose LCPN is no longer capped at 6.
        - IrregularDTM is kept for compatibility but has no effect: NoData
          cells are excluded from the cost graph by construction in 3.0.
        - Result fields preserved (cost, length_m, length_km, time_converted,
          area_m2/km2/ha) plus the new cost_hms from mc_paths/mc_rank;
          movebound polygons now carry the exact area and perimeter computed
          by mc_boundary; the corridor accumulated surfaces A/B are two
          cheap extra mc_accum() queries on the shared cost surface.
        - Plots are ggplot2-based and still saved to
          <tempdir>/movecost_plots/movecost_latest_plot.png for the
          pyArchInit results panel.
        - Note: movecost 3.0.0 also corrects errors of the 2.2 cost
          functions (ks, ma, pcf, p, vl, h and dynamic-speed metabolic
          costs with V=0): results with those settings differ (correctly)
          from the 2.x series.
    3.1.4 - Pass plugins.qgis.org Bandit + flake8 review (W503/W504 + B112/B110):
        - Collapsed the Qt5/Qt6 dock feature flags expression into a single
          line via getattr(QDockWidget, 'DockWidgetFeature', QDockWidget),
          removing the multi-line OR that triggered W503 when split before
          and W504 when split after the operator.
        - Narrowed 4 broad 'except Exception:' handlers in plot-discovery
          code to 'except (OSError, PermissionError):' to satisfy Bandit
          B112 (try-except-continue) and B110 (try-except-pass) rules.
          No behavior change: the operations that can fail are filesystem
          calls (os.listdir, glob, getmtime), which raise OSError variants.
    3.1.3 - Plugin repository W504 compliance:
        - In movecost_dialog.py (Qt5/Qt6 dock feature flags), moved the '|'
          operator to the beginning of the continuation lines instead of the
          end (modern PEP 8 recommendation; resolves W504 warnings from the
          plugins.qgis.org review).
    3.1.2 - Document Topo_Dist parameter in algorithm help files:
        - Added Topo_Dist parameter description to all 14 .rsx.help files
          (shown in the QGIS Processing parameter dialog when hovering).
        - Bumped Version 2.1 -> 2.2 marker in movecost.rsx.help ALG_DESC.
    3.1.1 - Plugin repository compliance:
        - Removed deprecated supportsQt6 metadata flag (Qt6 compatibility is
          now determined solely by qgisMaximumVersion=4.99).
        - Cleaned up Python source files to satisfy plugins.qgis.org's
          Bandit/flake8 review: removed ~30 unused imports, replaced bare
          'except:' with explicit 'except Exception:', fixed long lines,
          replaced star imports in movecost_dialog with explicit imports,
          removed orphan 'standard_library.install_aliases()' call.
        - No behavior changes; this is a tooling/cleanup release.
    3.1.0 - Support movecost R package 2.2 (topo.dist parameter):
        - New "Topo_Dist" parameter (default FALSE) added to all 14 algorithm scripts
          (movecost, movealloc, movebound, movecomp, movecorr, movenetw, moverank,
          plus their _by_polygon variants). When TRUE, accumulated cost is
          calculated using topographic surface distance instead of planar
          distance (surface = planar * sqrt(1 + slope^2)). Recommended for
          time-based hiking functions; use with caution on metabolic energy
          functions which are derived from planar measurements.
        - Bumped minimum required movecost R package version from 2.1 to 2.2
          (auto-installer in each rsx will now prompt the update).
    3.0.1 - Fix Qt6 compatibility: replaced PyQt5 import in resources_rc.py with qgis.PyQt
    3.0 - Major UI redesign and improvements:
        - Converted dialog to dockable panel (QDockWidget) that docks to right side of QGIS
        - New tabbed interface: Algorithms, Results, Export, Settings
        - R Plot Viewer: displays plots directly in the plugin panel
        - Cost Summary: shows statistics from analysis results
        - Export options: CSV tables, HTML reports
        - Modern CSS styling with color-coded algorithm buttons
        - movecomp: now supports unlimited cost function comparison (comma-separated input)
        - All LCP outputs now include cost, time_converted, length_m, length_km fields
        - All polygon outputs now include area_m2, area_km2, area_ha fields
        - Fixed barrier support: proper sf to Spatial conversion for all algorithms
        - Layer organization: automatic grouping and styling of output layers
    2.1 - Qt6/QGIS 4 compatibility, removed deprecated rgdal dependency, multilingual help files
    2.0 - Initial release with sf/terra support

# Tags are comma separated with spaces allowed
tags=python, R, least-cost path, cost surface, movement, archaeology, GIS

homepage=https://github.com/enzococca/movecost
category=Plugins
icon=movecost.png
# experimental flag
experimental=False

# deprecated flag (applies to the whole plugin, not just a single version)
deprecated=False

# Since QGIS 3.8, a comma separated list of plugins to be installed
# (or upgraded) can be specified.
# Check the documentation for more information.
# plugin_dependencies=

Category of the plugin: Raster, Vector, Database or Web
# category=

# If the plugin can run on QGIS Server.
server=False

