Skip to content

Swmm6 gui#1

Draft
cbuahin wants to merge 30 commits into
masterfrom
swmm6_gui
Draft

Swmm6 gui#1
cbuahin wants to merge 30 commits into
masterfrom
swmm6_gui

Conversation

@cbuahin
Copy link
Copy Markdown
Member

@cbuahin cbuahin commented Apr 23, 2026

No description provided.

cbuahin and others added 5 commits April 3, 2025 21:14
Signed-off-by: Caleb <calebgh@gmail.com>
Signed-off-by: Caleb <calebgh@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
@cbuahin cbuahin requested a review from Copilot April 23, 2026 08:16
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR appears to transition the project away from the legacy Delphi/VCL SWMM 5.x GUI code and toward a cross-platform Qt/CMake-based “SWMMVis” GUI, adding CI and documentation automation.

Changes:

  • Removed a large set of Delphi form/unit sources (dialogs, frames, and custom components).
  • Added CMake build system + presets for Windows/Linux/macOS, with vcpkg/Qt/GDAL integration.
  • Added GitHub Actions workflows for build/package/test and Doxygen-based docs deployment, plus new community/docs files.

Reviewed changes

Copilot reviewed 68 out of 456 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
Epaswmm5/Dinfil.pas Removed legacy Delphi infiltration editor dialog implementation
Epaswmm5/Dinfil.dfm Removed legacy Delphi infiltration editor form definition
Epaswmm5/Diface.pas Removed legacy Delphi interface file selector dialog implementation
Epaswmm5/Diface.dfm Removed legacy Delphi interface file selector form definition
Epaswmm5/Dgweqn.pas Removed legacy Delphi groundwater equation editor dialog implementation
Epaswmm5/Dgweqn.dfm Removed legacy Delphi groundwater equation editor form definition
Epaswmm5/Dgwater.pas Removed legacy Delphi groundwater properties dialog implementation
Epaswmm5/Dgrpdel.pas Removed legacy Delphi group deletion dialog implementation
Epaswmm5/Dgrpdel.dfm Removed legacy Delphi group deletion form definition
Epaswmm5/Dgrouped.dfm Removed legacy Delphi group edit form definition
Epaswmm5/Dfind.pas Removed legacy Delphi map finder dialog implementation
Epaswmm5/Dfind.dfm Removed legacy Delphi map finder form definition
Epaswmm5/Devents.pas Removed legacy Delphi hydraulic events editor implementation
Epaswmm5/Devents.dfm Removed legacy Delphi hydraulic events editor form definition
Epaswmm5/Ddefault.dfm Removed legacy Delphi project defaults form definition
Epaswmm5/Dcurve.dfm Removed legacy Delphi curve editor form definition
Epaswmm5/Dculvert.pas Removed legacy Delphi culvert selector dialog implementation
Epaswmm5/Dcopy.pas Removed legacy Delphi “Copy To” dialog implementation
Epaswmm5/Dcopy.dfm Removed legacy Delphi “Copy To” form definition
Epaswmm5/Dcontrol.pas Removed legacy Delphi rule-based controls editor implementation
Epaswmm5/Dcontrol.dfm Removed legacy Delphi rule-based controls editor form definition
Epaswmm5/Dcombine.pas Removed legacy Delphi interface file combine utility implementation
Epaswmm5/Dcombine.dfm Removed legacy Delphi interface file combine utility form definition
Epaswmm5/Dcolramp.pas Removed legacy Delphi color ramp selector implementation
Epaswmm5/Dcolramp.dfm Removed legacy Delphi color ramp selector form definition
Epaswmm5/Dcalib1.pas Removed legacy Delphi calibration data dialog implementation
Epaswmm5/Dcalib1.dfm Removed legacy Delphi calibration data dialog form definition
Epaswmm5/Dbackdrp.pas Removed legacy Delphi backdrop image selector implementation
Epaswmm5/Dbackdrp.dfm Removed legacy Delphi backdrop image selector form definition
Epaswmm5/Dbackdim.pas Removed legacy Delphi backdrop dimension editor implementation
Epaswmm5/Dbackdim.dfm Removed legacy Delphi backdrop dimension editor form definition
Epaswmm5/Darchpipe.pas Removed legacy Delphi standard arch pipe size selector implementation
Epaswmm5/Darchpipe.dfm Removed legacy Delphi standard arch pipe size selector form definition
Epaswmm5/Daquifer.pas Removed legacy Delphi aquifer editor implementation
Epaswmm5/Daquifer.dfm Removed legacy Delphi aquifer editor form definition
Epaswmm5/Dabout.pas Removed legacy Delphi “About” dialog implementation
Epaswmm5/Animator.pas Removed legacy Delphi animation frame implementation
Epaswmm5/Animator.dfm Removed legacy Delphi animation frame definition
Components/XPForm.pas Removed legacy Delphi printing progress dialog form
Components/VirtList.pas Removed legacy Delphi virtual listbox custom component
Components/Readme.txt Removed documentation for legacy Delphi components bundle
Components/PgSetup.pas Removed legacy Delphi page setup dialog custom component
Components/PSForm.pas Removed legacy Delphi page setup form implementation
Components/OpenDlg.pas Removed legacy Delphi open-text-file dialog custom component
Components/NumEdit.pas Removed legacy Delphi numeric edit custom component
Components/Installation.txt Removed legacy Delphi component installation instructions
Components/Epa.dproj Removed legacy Delphi component package project file
Components/Epa.dpk Removed legacy Delphi package source
CODE_OF_CONDUCT.md Added Contributor Covenant Code of Conduct
CMakeUserPresets.json Added user presets (currently containing machine-specific paths)
CMakePresets.json Added cross-platform configure/build presets (vcpkg + Qt/GDAL)
CMakeLists.txt Added Qt/CMake build definition for SWMMVis
AUTHORS.md Added authorship/credits document
.github/workflows/documentation.yml Added GitHub Pages deployment for Doxygen docs
.github/workflows/build_and_test.yml Added multi-OS CI build/package/test workflow
Files not reviewed (2)
  • .idea/.gitignore: Language not supported
  • .idea/vcs.xml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/build_and_test.yml Outdated
Comment on lines +53 to +60
# OpenSWMMCore must sit at ../OpenSWMMCore relative to openswmm.gui so that
# CMakeLists.txt's add_subdirectory("${CMAKE_SOURCE_DIR}/../OpenSWMMCore") resolves.
- name: Checkout OpenSWMMCore (swmm6_rel)
uses: actions/checkout@v4
with:
repository: HydroCouple/openswmm.gui
ref: swmm6_rel
path: ../openswmm.gui
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This checkout step is internally inconsistent and likely breaks CI: it claims to checkout OpenSWMMCore, but it actually checks out HydroCouple/openswmm.gui, and it uses a path outside of $GITHUB_WORKSPACE ("../openswmm.gui"), which actions/checkout typically disallows. Fix by checking out the correct repository into a subdirectory under the workspace (e.g., "OpenSWMMCore"), and update CMake (or FetchContent/add_subdirectory paths) accordingly.

Copilot uses AI. Check for mistakes.
Comment on lines +137 to +143
- name: Build and Package
run: cmake --build --preset=${{ matrix.cmake_preset }}

# ── Test ─────────────────────────────────────────────────────────────────
- name: Test
run: ctest --test-dir build/${{ matrix.build_subdir }} -C Release --output-on-failure

Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On Windows the preset uses the Visual Studio multi-config generator, but this workflow does not pass a configuration to cmake --build. For multi-config generators, CMAKE_BUILD_TYPE is ignored and the build defaults to (often) Debug; meanwhile ctest is forced to -C Release, which can cause tests not to be found or to run against the wrong binaries. Fix by passing --config Release for Windows builds (and matching the ctest config), or switch Windows presets to a single-config generator (e.g., Ninja) if you want CMAKE_BUILD_TYPE semantics.

Suggested change
- name: Build and Package
run: cmake --build --preset=${{ matrix.cmake_preset }}
# ── Test ─────────────────────────────────────────────────────────────────
- name: Test
run: ctest --test-dir build/${{ matrix.build_subdir }} -C Release --output-on-failure
- name: Build and Package (Windows)
if: runner.os == 'Windows'
run: cmake --build --preset=${{ matrix.cmake_preset }} --config Release
- name: Build and Package (Unix)
if: runner.os != 'Windows'
run: cmake --build --preset=${{ matrix.cmake_preset }}
# ── Test ─────────────────────────────────────────────────────────────────
- name: Test (Windows)
if: runner.os == 'Windows'
run: ctest --test-dir build/${{ matrix.build_subdir }} -C Release --output-on-failure
- name: Test (Unix)
if: runner.os != 'Windows'
run: ctest --test-dir build/${{ matrix.build_subdir }} --output-on-failure

Copilot uses AI. Check for mistakes.
Comment thread CMakeUserPresets.json
Comment on lines +7 to +10
"description": "Local macOS debug build — machine-specific paths (not committed)",
"environment": {
"QT_ROOT_DIR": "/Users/calebbuahin/Qt/6.10.2/macos",
"VCPKG_ROOT": "/Users/calebbuahin/Documents/Projects/vcpkg"
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file contains machine-specific absolute paths and even states it should not be committed. Committing it leaks developer workstation paths and will confuse other contributors. Recommended: add CMakeUserPresets.json to .gitignore and remove it from the repo; keep only CMakePresets.json with portable defaults and documented environment variables.

Suggested change
"description": "Local macOS debug build — machine-specific paths (not committed)",
"environment": {
"QT_ROOT_DIR": "/Users/calebbuahin/Qt/6.10.2/macos",
"VCPKG_ROOT": "/Users/calebbuahin/Documents/Projects/vcpkg"
"description": "Local macOS debug build using externally defined environment variables",
"environment": {
"QT_ROOT_DIR": "$env{QT_ROOT_DIR}",
"VCPKG_ROOT": "$env{VCPKG_ROOT}"

Copilot uses AI. Check for mistakes.
Comment thread CMakeLists.txt
Comment on lines +19 to +23
configure_file(
${PROJECT_SOURCE_DIR}/include/version.h.in
${PROJECT_SOURCE_DIR}/include/version.h
)

Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Generating include/version.h into the source tree makes builds non-reproducible (dirty working tree) and breaks common out-of-source workflows. Prefer writing generated headers into the build tree (e.g., ${PROJECT_BINARY_DIR}/generated/version.h) and add that directory to target_include_directories, so packaging and CI builds don’t modify tracked files.

Suggested change
configure_file(
${PROJECT_SOURCE_DIR}/include/version.h.in
${PROJECT_SOURCE_DIR}/include/version.h
)
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/generated)
configure_file(
${PROJECT_SOURCE_DIR}/include/version.h.in
${PROJECT_BINARY_DIR}/generated/version.h
)
include_directories(${PROJECT_BINARY_DIR}/generated)

Copilot uses AI. Check for mistakes.
Comment thread CODE_OF_CONDUCT.md
Comment on lines +50 to +60
When an incident does occur, it is important to report it promptly. To report a possible violation, **[NOTE: describe your means of reporting here.]**

Community Moderators take reports of violations seriously and will make every effort to respond in a timely manner. They will investigate all reports of code of conduct violations, reviewing messages, logs, and recordings, or interviewing witnesses and other participants. Community Moderators will keep investigation and enforcement actions as transparent as possible while prioritizing safety and confidentiality. In order to honor these values, enforcement actions are carried out in private with the involved parties, but communicating to the whole community may be part of a mutually agreed upon resolution.


## Addressing and Repairing Harm

**[NOTE: The remedies and repairs outlined below are suggestions based on best practices in code of conduct enforcement. If your community has its own established enforcement process, be sure to edit this section to describe your own policies.]**

If an investigation by the Community Moderators finds that this Code of Conduct has been violated, the following enforcement ladder may be used to determine how best to repair harm, based on the incident's impact on the individuals involved and the community as a whole. Depending on the severity of a violation, lower rungs on the ladder may be skipped.

Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Code of Conduct still includes upstream template placeholders ([NOTE: ...]) for reporting and enforcement customization. This should be filled in with the project’s actual reporting contact/process (e.g., a security/contact email or GitHub reporting guidance) to avoid ambiguity for contributors.

Suggested change
When an incident does occur, it is important to report it promptly. To report a possible violation, **[NOTE: describe your means of reporting here.]**
Community Moderators take reports of violations seriously and will make every effort to respond in a timely manner. They will investigate all reports of code of conduct violations, reviewing messages, logs, and recordings, or interviewing witnesses and other participants. Community Moderators will keep investigation and enforcement actions as transparent as possible while prioritizing safety and confidentiality. In order to honor these values, enforcement actions are carried out in private with the involved parties, but communicating to the whole community may be part of a mutually agreed upon resolution.
## Addressing and Repairing Harm
**[NOTE: The remedies and repairs outlined below are suggestions based on best practices in code of conduct enforcement. If your community has its own established enforcement process, be sure to edit this section to describe your own policies.]**
If an investigation by the Community Moderators finds that this Code of Conduct has been violated, the following enforcement ladder may be used to determine how best to repair harm, based on the incident's impact on the individuals involved and the community as a whole. Depending on the severity of a violation, lower rungs on the ladder may be skipped.
When an incident does occur, it is important to report it promptly. To report a possible violation, open a new issue in this repository and clearly mark it as a Code of Conduct report. If the report includes sensitive personal information or safety concerns, contact the maintainers directly through the contact options available on their GitHub profiles rather than posting details publicly.
Community Moderators take reports of violations seriously and will make every effort to respond in a timely manner. They will investigate all reports of code of conduct violations, reviewing messages, logs, and recordings, or interviewing witnesses and other participants. Community Moderators will keep investigation and enforcement actions as transparent as possible while prioritizing safety and confidentiality. In order to honor these values, enforcement actions are carried out in private with the involved parties, but communicating to the whole community may be part of a mutually agreed upon resolution.
## Addressing and Repairing Harm
If an investigation by the Community Moderators finds that this Code of Conduct has been violated, the following enforcement ladder will be used to determine how best to repair harm, based on the incident's impact on the individuals involved and the community as a whole. Depending on the severity of a violation, lower rungs on the ladder may be skipped.

Copilot uses AI. Check for mistakes.
Comment thread CODE_OF_CONDUCT.md
Comment on lines +50 to +57
When an incident does occur, it is important to report it promptly. To report a possible violation, **[NOTE: describe your means of reporting here.]**

Community Moderators take reports of violations seriously and will make every effort to respond in a timely manner. They will investigate all reports of code of conduct violations, reviewing messages, logs, and recordings, or interviewing witnesses and other participants. Community Moderators will keep investigation and enforcement actions as transparent as possible while prioritizing safety and confidentiality. In order to honor these values, enforcement actions are carried out in private with the involved parties, but communicating to the whole community may be part of a mutually agreed upon resolution.


## Addressing and Repairing Harm

**[NOTE: The remedies and repairs outlined below are suggestions based on best practices in code of conduct enforcement. If your community has its own established enforcement process, be sure to edit this section to describe your own policies.]**
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Code of Conduct still includes upstream template placeholders ([NOTE: ...]) for reporting and enforcement customization. This should be filled in with the project’s actual reporting contact/process (e.g., a security/contact email or GitHub reporting guidance) to avoid ambiguity for contributors.

Suggested change
When an incident does occur, it is important to report it promptly. To report a possible violation, **[NOTE: describe your means of reporting here.]**
Community Moderators take reports of violations seriously and will make every effort to respond in a timely manner. They will investigate all reports of code of conduct violations, reviewing messages, logs, and recordings, or interviewing witnesses and other participants. Community Moderators will keep investigation and enforcement actions as transparent as possible while prioritizing safety and confidentiality. In order to honor these values, enforcement actions are carried out in private with the involved parties, but communicating to the whole community may be part of a mutually agreed upon resolution.
## Addressing and Repairing Harm
**[NOTE: The remedies and repairs outlined below are suggestions based on best practices in code of conduct enforcement. If your community has its own established enforcement process, be sure to edit this section to describe your own policies.]**
When an incident does occur, it is important to report it promptly. To report a possible violation, contact the Community Moderators privately through the repository hosting platform's direct contact options or other maintainer contact channel, and do not use public issue threads for sensitive reports.
Community Moderators take reports of violations seriously and will make every effort to respond in a timely manner. They will investigate all reports of code of conduct violations, reviewing messages, logs, and recordings, or interviewing witnesses and other participants. Community Moderators will keep investigation and enforcement actions as transparent as possible while prioritizing safety and confidentiality. In order to honor these values, enforcement actions are carried out in private with the involved parties, but communicating to the whole community may be part of a mutually agreed upon resolution.
## Addressing and Repairing Harm
The remedies and repairs outlined below are the standard enforcement guidelines for this project. Community Moderators may apply them as written and may choose the response that best matches the severity, pattern, and impact of the behavior.

Copilot uses AI. Check for mistakes.
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
cbuahin and others added 15 commits April 23, 2026 12:55
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
- Disable QSG/Metal renderer by default (m_glRenderingEnabled=false) and
  hide QQuickWidget so its CAMetalLayer never occludes the raster framebuffer;
  restores CPU paint path for SWMM feature rendering and yellow selection highlight
- Fix SWMM 2D mesh CRS: build OGR transform in onCanvasCRSChanged() and
  reproject mesh edges to canvas CRS before populating QGraphicsScene
- Fix GISRasterLayer warpToCanvas(): two-stage GDAL transformer fallback
  when source dataset has no embedded CRS
- Add isBasemapLayer() virtual to OpenSWMMVisLayer; XYZTileLayer overrides
  true so fullExtent() skips world-spanning basemaps; DTM/WMS included
- Set world extent (EPSG:3857) on XYZTileLayer at construction
- WMSLayer/WMTSLayer: auto-select first layer/style/format on setServiceInfo(),
  populate extent and SRS from GetCapabilities bounding box metadata
- Add undo stack, preferences manager, layer tree, object browser improvements

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
cbuahin added 2 commits May 15, 2026 13:28
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
cbuahin and others added 2 commits May 22, 2026 14:01
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
@CLAassistant
Copy link
Copy Markdown

CLAassistant commented May 23, 2026

CLA assistant check
All committers have signed the CLA.

cbuahin added 2 commits May 22, 2026 23:08
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
Signed-off-by: cbuahin <caleb.buahin@gmail.com>
connect(layer, &WMTSLayer::capabilitiesFetched, this, [this, layer]() {
delete m_wmtsInfo;
m_wmtsInfo = new WMTSServiceInfo(layer->serviceInfo());
populateWMTSTree(*m_wmtsInfo);
connect(layer, &WMSLayer::capabilitiesFetched, this, [this, layer]() {
delete m_wmsInfo;
m_wmsInfo = new WMSServiceInfo(layer->serviceInfo());
populateWMSTree(*m_wmsInfo);
[this, layer](const WCSServiceInfo &) {
delete m_wcsInfo;
m_wcsInfo = new WCSServiceInfo(layer->serviceInfo());
populateWCSTree(*m_wcsInfo);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants