================================
SitRepMapper v1.12.1 — Changelog
================================


Version 1.12.1  (2026-08-17)
-----------------------------
Added
  - Export Report Library…'s date-span fields now also accept a bare
    YYYYMMDD date, alongside the existing YYYY/MM/DD and YYYY-MM-DD
    (Delete by Date Range… gets this too, since it shares the same
    dialog).

Changed
  - Export Report Library…'s default filename now encodes what was
    exported: reports_<type>_<from>-<to>_<time>.reports.json, using
    the actual UTC time the file was created — e.g.
    reports_all_20260701-20260731_174029.reports.json for an All
    Types export spanning Jul 1-31, 2026. Either date falls back to
    "all" in the filename when left blank (no limit on that end).
  - Delete by Date Range…'s confirmation now warns explicitly when
    either date is left blank ("this will delete ALL matching
    reports, not just a range") and notes that deleted reports can be
    restored later by re-importing a file that contains them.

Fixed
  - Live reports read from JS8Call's own DIRECTED.TXT never got
    received_time set, so the "Record Date/Time Stamp" date-filter
    setting silently fell back to the sender's self-reported (and
    sometimes stale) embedded datecode instead of actual receipt time.


Version 1.12.0  (2026-08-14)
-----------------------------
Added
  - Circle areas: drag a circle's center to move it — snapping onto
    another circle's exact center for a concentric "bullseye" — or
    Shift+drag to move every circle sharing that center together as one
    group, each keeping its own radius. Right-click "Duplicate Circle"
    (or Copy from an individual circle's popup, opened via the stack
    picker) stacks an identical copy on top for repositioning. Two or
    more circles sharing a center show a numbered stack badge and
    picker, the same as flag pins and report pins; new circles default
    "Show center crosshair on map" to on.
  - Rectangle and polygon areas can now be reshaped after drawing by
    dragging: a rectangle corner resizes both adjacent sides (opposite
    corner fixed), a rectangle side resizes just that one dimension, and
    a polygon vertex reshapes the polygon at that point. Small square
    handle markers mark every draggable point.
  - Selectable title text size (Small/Medium/Large/Extra Large) for area
    titles, replacing the previous fixed size.
  - Deleting a flag pin and later re-importing a file that contains it
    now offers to restore it instead of silently discarding it — the
    same fix already shipped for reports in v1.11.0.
  - Reports > Raw Reports (As Received)…: every currently-visible
    report's literal raw text, grouped by report type and sorted
    oldest-first within each group — a plain-text record of exactly
    what came in, as opposed to the decoded/summarized reports above it.
  - Settings > Import/Export tab: separate default folders for the
    Import… dialogs and Export Report Library….

Changed
  - Reports menu reorganized into a submenu per report type (F!505 Area
    Reports / F!104 Reports / CommStat Reports) now that it covers
    several — previously a flat list with no indication of which type
    each item belonged to.
  - File menu's "Reports Import/Export" cascade renamed to
    "Import/Export Reports".
  - Settings > Auto-Update's version-check URL is no longer
    user-editable — only the "Check for updates on startup" checkbox
    remains.

Fixed
  - Export Report Library… (All Types, full date range) only ever
    exported explicitly-imported records, silently dropping the
    live-polled traffic that makes up most of what the map actually
    shows — export now includes both.
  - A date-bounded export could silently drop F!104/F!309/F!505 records
    that have no embedded #XXXX datecode.


Version 1.11.0  (2026-08-11)
-----------------------------
Added
  - Cross-user report import/export: share F!104/F!309/F!505/CommStat
    reports with group members who collect them by other means (no
    radio, or a different schedule/frequency). File > Reports
    Import/Export offers a raw per-type import (F!104 SitReps / F!309
    Map Pins / F!505 Reports / CommStat StatReps) reading directly
    from a plain-text log export, plus Import/Export Report Library…
    for SitRepMapper's own combined-JSON format covering all four
    types at once. View > Report Library… lists everything imported
    this way — sortable, with Delete, Delete by Date Range…, and a
    Deduplicate action. Imported records merge with whichever live
    source (JS8Spotter DB or JS8Call Directed Log) is active and
    survive that source's own re-scans instead of being wiped by them.
  - Deleting an imported report and later re-importing a file that
    contains it now offers to restore it instead of silently
    rejecting it.
  - Flag pins now stack the same way report pins already did: two or
    more sharing an exact spot show a small numbered badge; clicking
    it lists all of them, most recent first, to choose which one to
    open. Right-clicking an existing flag pin now also offers "Add
    Flag Pin Here…" (previously only available on empty map space),
    and dragging a flag pin onto another one snaps it into an exact
    stack instead of needing pixel-perfect placement.
  - Right-clicking inside a drawn area now also offers "Add Flag Pin
    Here…", anchored at the actual click point.
  - A circle area's center and radius are now both editable after
    drawing (previously fixed at draw time) — center as Lat/Lon,
    radius as linked miles/km fields that stay in sync as you type.
  - Tools > Date Code Tool… converts between Month/Day/Hour/Minute
    (UTC) and the #XXXX datecode used on F! form prepared-time fields.

Changed
  - Export Map Image… output is sharper (4x supersampling, up from
    2x) at negligible extra cost.

Fixed
  - A daily send schedule with more than one time of day could re-log
    an already-missed send every ~20 seconds for the rest of the day
    once a second time slot also went missed, growing the on-disk
    missed-sends log without bound and causing repeated slow disk
    writes. Missed sends for a day are now tracked per time-of-day
    instead of by a single last-missed marker.
  - Two or more stations reporting from the same grid square could be
    incorrectly collapsed into one on the map, since duplicate
    handling only compared grid squares, not callsign+grid — this
    under-counted stacked-pin badges below the actual number of
    distinct reports.
  - Clicking, right-clicking, or dragging a flag pin when two exactly
    coincided could act on the hidden one underneath instead of the
    one actually visible on top.
  - Concentric circle areas with titles stacked all their labels
    illegibly on top of each other; each ring's title now anchors at
    its own 12-o'clock point instead of the shared center.
  - Editing a circle area through the Areas… list window (as opposed
    to the map's right-click Edit) could silently drop its "show
    center crosshair" setting.


Version 1.10.0  (2026-08-03)
-----------------------------
Added
  - Send > Unformatted Text: compose and send (or schedule) plain,
    unformatted text — for quick messages, or forwarding non-SitRepMapper
    form content as-is. Auto-converts to upper case as you type, shows a
    running character count with a configurable length warning (Settings
    > General), and supports the same Send To / Send as MSG / Save Draft
    / Send Now / Close options as the other Send forms.
  - A busy (wait) cursor now appears during the program's few genuinely
    slow, unavoidable moments — loading map tiles into a not-yet-cached
    area, the one-time startup read of a JS8Call Directed Log, and the
    brief pause while confirming a send — so the program doesn't look
    frozen during them.

Performance
  - Drawing a map area (rectangle/circle/polygon) and dragging a flag pin
    no longer redo a full map redraw on every mouse movement — only
    panning previously had this fix; both now update smoothly with a
    single full-quality redraw once the action settles.
  - The background JS8Spotter Database poll no longer redoes duplicate
    checking and a full map redraw on every check when nothing new has
    arrived, matching a fix already made to the JS8Call Directed Log poll.
  - Fixed a case where the program's own busy-cursor handling was itself
    adding noticeable delay to ordinary actions (map zoom/pan, opening a
    Send form, program startup) on slower hardware — removing it made
    these visibly faster with no loss of the busy-cursor feedback above.


Version 1.9.0  (2026-08-01)
-----------------------------
Added
  - Send > Pause Auto-Send: a checkbox that stops scheduled drafts from
    firing while checked, without needing to delete or unschedule them.
    Resets to unpaused each time the program starts, the same as View >
    Pause Auto-Refresh.

Changed
  - Settings > Date Filter's "Record Date/Time Stamp" option now names
    whichever report source is actually active ("when JS8Spotter logged
    it" or "when JS8Call logged it") instead of always saying JS8Spotter,
    even when the JS8Call Directed Log source is selected.

Fixed
  - Manage Drafts and View Sent Log could develop intermittent click
    pauses the longer the program had been running, and repeatedly
    opening either from the Send menu could stack up multiple background
    refresh timers instead of reusing the already-open window.


Version 1.8.0  (2026-07-31)
-----------------------------
Performance
  - The map used to redo a full tile-and-pin redraw on every single
    mouse-movement event while dragging the map or resizing the window,
    so a single drag or resize could trigger dozens of full redraws.
    Panning and resizing now update smoothly, with one full-quality
    redraw once the drag/resize settles.
  - The background JS8Spotter database poll (every 60 seconds) used to
    re-scan the program's entire report history on every check; it now
    only reads reports added since the last check, so it no longer gets
    slower as the database grows.
  - The map's tile cache no longer discards and re-fetches tiles
    unnecessarily while panning or zooming, and the zoom in/out button
    availability check no longer re-reads the tile source on every
    pan/zoom/arrow-key move.


Version 1.7.0  (2026-07-31)
-----------------------------
Added
  - Toolbar View A / View B buttons: two saved-view slots for jumping back
    to a zoom level and center point of current interest. Click a button
    to recall its saved view; right-click it to save the map's current
    zoom/center into that slot (a brief "Saved!" confirms it). Saved views
    persist between sessions.

Changed
  - The "Missed Scheduled Sends" startup notice is now a plain count
    ("N Scheduled Sends were missed") instead of a detailed per-item list.
  - Update-only ZIPs are discontinued. Each one only ever covered the
    single prior release, so an installation more than one version behind
    that applied one could end up silently broken. Updating now uses the
    same full install ZIP as a fresh install — see "UPDATING FROM AN OLDER
    VERSION" in the Installation Guide.


Version 1.6.0  (2026-07-30)
-----------------------------
Fixed
  - Report pins that share an identical grid square — whether different
    report types (e.g. an F!104 and an F!505 from the same station) or,
    before the per-type duplicate-grid handling applies, the same type —
    used to render on the exact same map pixel with no way to reach
    whichever one was hidden underneath; clicking always silently
    resolved to one fixed type. A pin standing in for more than one
    report now shows a small numbered badge, and clicking it opens a
    list of every report at that spot, most recent first, to choose
    which to view. Pins are also now drawn oldest-to-newest per grid
    square, so the most recent report is always the one on top.
  - The Grid Locator toolbar field and Settings > General "Station grid"
    field now force uppercase as you type, instead of accepting mixed
    case.


Version 1.5.0  (2026-07-30)
-----------------------------
Added
  - Send menu: compose and transmit F!104, F!309, F!505, and CommStat
    StatRep reports directly over JS8Call. A round-trip encoding
    self-test blocks a send if the composed message wouldn't re-parse
    back to what was entered, and a "Send as MSG" option requests
    JS8Call's store-and-forward mode. Requires JS8Call's own TCP Server
    API (see SitRepMapper_Installation_Guide.txt).
  - Saved drafts (Send > Manage Drafts…): save any composed form without
    sending it, then recall, edit, reschedule, or delete it later.
  - Scheduled sending on any saved draft — once at a specific date/time,
    or daily at one or more recurring times — for as long as SitRepMapper
    keeps running.
  - Send > View Sent Log…: an auto-refreshing record of every message
    actually sent, manual or scheduled, with its exact over-the-air text.
  - Missed scheduled sends (e.g. JS8Call unreachable or busy for a
    schedule's entire window) are logged rather than silently dropped,
    and summarized in a notice shortly after the next launch.
  - Best-effort busy detection warns before sending if JS8Call already
    appears to be transmitting or has a message staged, to reduce silent
    collisions with JS8Spotter or another program sharing the same radio.
  - A received report's map-pin popup gained "Load into Send Form…",
    pre-filling the matching compose dialog from that report.


Version 1.4.0  (2026-07-25)
-----------------------------
Added
  - File > Open JS8Call Directed Log… and Settings > Data Source: reads
    F!505/F!104/F!309 forms and CommStat StatReps directly from JS8Call's
    own DIRECTED.TXT log, as an alternative to JS8Spotter's database — no
    dependency on JS8Spotter running, or its group filter matching, at the
    moment traffic is received. Data Source is a single either/or choice;
    switching it (from the Settings tab or by using either File > Open
    command) reloads immediately. Polls for new activity every 5 seconds,
    versus the JS8Spotter database's 60.
  - Settings > Pin Colors: the new-pin highlight window now accepts
    fractional hours (e.g. 0.5), not just whole numbers, for finer-grained
    triage when reports are arriving quickly.


Version 1.3.0  (2026-07-23)
-----------------------------
Added
  - Live dimension readouts while drawing an Area: circle drag shows the
    radius, rectangle drag shows width and height, and polygon vertex
    placement shows the current edge length — all in decimal miles, via a
    shared on-map label, so shapes can be sized precisely while drawing
    instead of only after the fact.
  - Polygon draw preview also shows the current edge's bearing alongside
    its length, so vertices can be placed at precise angles (e.g. drawing
    a right-angled rectangle as a polygon) without rotating the shape
    afterward.
  - Reports > CommStat Status Roster: a new report covering CommStat
    StatRep check-ins, one line per check-in (callsign, grid, group,
    scope, overall status, time, notes), with a choice of three sort
    orders — Sorted by Callsign, Sorted by Grid, or Sorted by Status
    (worst first). Honors the existing Date Filter/Time Lapse settings
    and supports Save to Export Folder / Save As like the other report
    types.
  - Settings > General > Export folder: choose where the Reports menu's
    Save to Export Folder button saves files. Defaults to an exports/
    subfolder directly under the program folder (previously a fixed,
    harder-to-find location under ~/.config/sitrepmapper/).

Fixed
  - Window position now restores correctly to a monitor positioned to the
    left of or above the primary display. The saved position in that case
    has a negative X or Y coordinate; previously any negative value was
    discarded on startup, silently forcing the window back onto the
    primary monitor every time instead of the monitor it was last placed
    on. This does not cover every multi-monitor case — see "Window
    reopens on the wrong monitor" in the User Manual's TROUBLESHOOTING
    section for a separate, unfixable Wayland limitation that still
    affects maximized windows on a secondary monitor.
  - Clearing the toolbar Grid Locator field is now persisted when the
    program closes. Previously the saved value only updated when jumping
    to a new grid, so an emptied field could reappear — and re-center the
    map — on the next launch instead of staying cleared.
  - Legend icons occasionally painted blank/grey on startup (Tk/X11
    canvases built before the window was ever mapped to screen). Now
    fixed automatically the moment the window becomes visible, instead of
    requiring a manual View > Show/Hide Legend toggle to force a redraw.
  - Export Map Image now renders anti-aliased instead of visibly rougher
    than a plain screenshot. Ghostscript's raster device (used to convert
    the map's Postscript export to PNG/JPEG) has no anti-aliasing of its
    own; the export now supersamples at 2x resolution and downsamples
    back down, which fakes it.


Version 1.1.0  (2026-07-20)
-----------------------------
Added
  - Group field on both Flag Pins and Areas: an optional free-text tag
    (combobox suggests groups already in use, but any text is accepted).
    Flag Pin groups and Area groups are independent of each other.
  - Export (Flag Pins and Areas, from the map's File menu or from their
    list/manage windows) now shows a "Select Groups to Export" checklist
    when two or more Group values are in use, so you can export just one
    or more selected groups instead of everything. If only one group (or
    none) is in use, Export behaves exactly as before — no extra step.
  - View > Flag Pin Groups and View > Area Groups: new submenus with a
    Show/Hide checkbutton per group, plus their own Show All Groups /
    Hide All Groups (named distinctly from the top-level Show All / Hide
    All below, which still toggles every layer), layered on top of the
    existing master Flag Pins / Areas toggles. Hidden-group state
    persists between sessions.
  - Group is shown in the Flag Pins…/Areas… list windows as a sortable
    column, and in the map click-popup for both flag pins and areas.
  - Tools > Remove Duplicate Flag Pins… and Tools > Remove Duplicate
    Areas…: new commands, matching FlagPinTool's Remove Duplicate Pins.
    Collapse flag pins/areas identical apart from id/Date/Time (flag
    pins: description, grid, lat/lon, source, color, severity, status,
    Group; areas: shape, geometry, description, color, line thickness,
    title/crosshair settings, Group) down to the most recently updated
    copy, with a confirmation prompt showing how many were found. Group
    is part of the match key either way, so pins/areas differing only by
    Group are never merged — the same location is often tracked
    separately per group on purpose, so it can be shown/hidden
    independently via View > Flag Pin Groups / Area Groups. Removed
    items are tombstoned, same as a normal delete.
  - The Flag Pins…/Areas… list windows now stay in sync with changes made
    elsewhere while left open — map edits, imports, and the new Remove
    Duplicate commands all update an open list window immediately instead
    of leaving it stale until reopened.


Version 1.0.0  (2026-07-18)
-----------------------------
Added
  - Initial release. SitRepMapper unifies MHGridMapper (offline map viewer)
    and JS8Reporter (JS8Spotter report parsing/reporting) into a single
    program; both predecessor projects are being retired in its favor.
  - Offline slippy-map viewer backed by MBTiles files or a tile-folder
    cache, with pan (drag or arrow keys), scroll/toolbar zoom, and a
    CONUS default view.
  - JS8Spotter database integration: File > Open JS8Spotter DB… reads
    F!505 Area Assessment, F!104 Situation Report, and F!309 Situation
    Map Pin records directly from JS8Spotter's SQLite database (opened
    read-only, safe while JS8Spotter is running).
  - Live JS8Spotter DB auto-refresh every 60 seconds, with a View > Pause
    DB Auto-Refresh control.
  - Report pins on the map, color-coded by score/status/severity, with a
    click popup showing the full record; duplicate-grid-square handling
    (latest report or averaged) is configurable per Settings > Filters.
  - Flag Pins: right-click the map to add a manually-placed marker
    (Description, Grid, Date/Time, Source, Color); drag to reposition,
    click for details, Import/Export in the shared sitrep_flags JSON
    format (interoperable with JS8Reporter/MHGridMapper flag files).
  - Tools > Grid Converter…: converts between Maidenhead, MGRS/USNG, and
    decimal Lat/Lon, with a "Go to Grid on Map" shortcut.
  - Toolbar Grid Locator field + Go button (jumps to a Maidenhead grid
    square and outlines it on the map) to the left of the zoom buttons.
  - Time Lapse: steps through the dates present in the loaded reports
    (oldest to newest) via toolbar ◀ / ▶ buttons or View > Time Lapse,
    filtering the map per a configurable mode (Rolling Window /
    Cumulative / Snapshot) set in Settings > Time Lapse.
  - Reports menu: the 12 JS8Reporter text-report generators (Area
    Assessment Summary, Full Detail, Score Rankings, Category Focus,
    Alert Records, Geographic Summary, Critical Infrastructure, Trend
    Analysis, Infrastructure Heat Map, Data Quality/Coverage, Worst
    Conditions, Network Coverage) plus an F!104 Situation Report
    Summary, each viewable on-screen and saveable to the exports folder.
  - Settings dialog: General, Pin Colors, Filters, Date Filter, Time
    Lapse, and Auto-Update tabs.
  - View menu: Icon Size / Flag Size selectors, per-report-type show/hide
    toggles plus Show All / Hide All, a map legend, and a "new pin"
    highlight ring (configurable age window) for at-a-glance triage of
    recently-received reports.
  - Date Filter (none / previous N days / specified date range), with a
    configurable date source (record received time vs. form date code).
  - Application icon and sitrepmapper.desktop Linux launcher.
  - Auto-update check (ported from MHGridMapper): silent on startup,
    explicit via Settings > Check for Updates Now; offers to open the
    download page when a newer version is posted, never applies an
    update automatically.
  - Toolbar Grid Locator now remembers the last-used grid locator across
    restarts, re-centering the map on it automatically at startup.
  - View > Flag Pins… opens a sortable list/manage window for all flag
    pins (Description, Grid, Source, Severity, Status, Date/Time columns
    — click a heading to sort), with Add/Edit/Delete/Jump-to-Map/Import/
    Export all available from that one window.
  - Areas: draw polygons, rectangles, and circles directly on the map via
    new toolbar Draw Polygon / Draw Rectangle / Draw Circle buttons, with
    per-area description, color, line thickness, and an optional
    always-visible title (circles also show their real-world center
    coordinates and radius, with an optional center crosshair). View >
    Areas… provides the same sortable list/manage window as Flag Pins;
    Import/Export in a new sitrep_areas JSON format — this and Flag Pins
    are the tools for building/sharing an Area Study with a local group.
  - CommStat StatRep integration: reads CommStat's dedicated csstatrep
    table from JS8Spotter's database, or via File > Import CommStat
    StatReps… from an exported text file, as a 4th map-pin input source
    alongside F!505/F!104/F!309. Both of CommStat's current status-string
    formats — the full 12-digit form and the newer "+" all-Green
    shorthand — are fully recognized as valid input, not treated as an
    edge case.
  - File > Export Map Image…: saves the currently visible map (tiles,
    report pins, flag pins, and areas) as a PNG or JPEG file.
  - TileDownloader is now bundled with SitRepMapper's release ZIP as a
    tiledownloader/ subfolder, so one download/install gives you both —
    File > Download Tiles… finds it there automatically; nothing extra
    to install. TileDownloader also gained its own UserGuide.txt.
  - Windows: added assets/icon.ico (multi-resolution) so the desktop
    shortcut can actually show an icon — Windows' "Change Icon" dialog
    doesn't accept .png directly. Installation_Guide.txt now points to
    the .ico instead.
  - Windows: automatic tile-drive detection now works. Previously it
    only checked Linux-style mount paths (/media, /mnt, /run/media), so
    a labelled SRMAP_NA flash drive was silently never found on Windows;
    it now checks every drive letter's root directly.
  - Fixed: the required-packages list (Installation_Guide.txt) and every
    pip install example on both platforms were missing "requests",
    needed by the bundled TileDownloader — requirements.txt already had
    it, but the install instructions had drifted out of sync.

Notes
  - This is the first packaged release. Development ran 2026-07-16 through
    2026-07-18 as an internal build (previously tagged 0.1.0, never
    distributed); see Notes-sitrepmapper.txt for the full development log.


================================================================================
  End of SitRepMapper Changelog
================================================================================
