Commit Graph
19206 Commits
Author SHA1 Message Date
dependabot[bot] ea43526977 Bump docker/setup-buildx-action from 3 to 4
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 20:42:13 +02:00
dependabot[bot] de348f34d1 Bump docker/build-push-action from 6 to 7
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 20:41:30 +02:00
dependabot[bot] 347eddb93c Bump docker/login-action from 3 to 4
Bumps [docker/login-action](https://github.com/docker/login-action) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 20:40:49 +02:00
Magne Sjaastad f4e40e0287 Improve configuration for copilot agent run (#14040) 2026-05-24 19:19:47 +02:00
Magne Sjaastad bb49381997 Revert 5 commits, rolling back to 20b1ef95c7 2026-05-24 18:24:35 +02:00
Magne Sjaastad dfc007e54e CI: force CC=gcc-14 for vcpkg cache hits in copilot-setup-steps
vcpkg detects the compiler hash before the CMake toolchain file loads,
so -DCMAKE_C_COMPILER=gcc-14 on the cmake line was too late -- vcpkg
picked up /usr/bin/c++ (gcc-13 on Ubuntu 24.04) and computed an ABI
hash that did not match the gcc-14 entries baked into the image's
/opt/vcpkg-cache-gcc, restoring 0 packages and rebuilding all 102
ports from source. Export CC/CXX in the step env to match the
Dockerfile's vcpkg-builder-gcc stage.
2026-05-24 12:07:32 +02:00
Magne Sjaastad ecb928d832 CI: run copilot-setup-steps inside the prebuilt ci-ubuntu24 image
Switches the Copilot Coding Agent's pre-flight job to the prebuilt
ghcr.io/<repo>/ci-ubuntu24 image so the toolchain, Qt, vcpkg cache, and
warm ResInsight buildcache are already provisioned at the start of every
agent session. The setup only fetches source, installs the editable rips
package, and warms an incremental build.

The image's buildcache was baked at /src so source path matching matters
for hit rate. actions/checkout puts source at $GITHUB_WORKSPACE; this
adds a /src -> $GITHUB_WORKSPACE symlink and configures at /src so gcc
command lines reference /src/... and match the baked entries. CMake
records CMAKE_SOURCE_DIR as the string passed to -S without resolving
symlinks, so the indirection is transparent to the build and to Copilot
edits (which still land on the workspace files the symlink points at).

Drops the in-workflow apt/Qt/buildcache restore/vcpkg restore plumbing
that the image now obviates, including the temporary cache-layout
diagnostic block added while debugging the prior restore behavior.
2026-05-24 11:22:43 +02:00
Magne Sjaastad 713e977bfc CI: add Ubuntu 24.04 prebuilt Docker image for Linux CI and Copilot agent
Adds .github/docker/Dockerfile.ubuntu24 -- a multi-stage image bundling gcc-14, clang-19, Qt 6.7.0, the buildcache binary from the canonical GitLab repo, per-compiler vcpkg binary caches, and per-compiler warm ResInsight buildcaches. Published to ghcr.io/<repo>/ci-ubuntu24 by a new nightly build workflow that mirrors the RHEL8 pattern, with a matching daily cleanup workflow that applies the same GHCR retention rules.

Adds .github/workflows/ResInsightWithCacheLinuxContainer.yml -- a parallel companion to the existing Linux legs in ResInsightWithCache.yml, running both compilers in a matrix inside the container with /src as the working directory so buildcache hashes line up with the warmup baked into the image.

The existing ResInsightWithCache.yml Linux legs remain unchanged during the validation phase. copilot-setup-steps.yml will be migrated to the container in a follow-up once the image is proven.
2026-05-24 11:22:43 +02:00
Magne Sjaastad 2eb1f3bb51 CI: diagnose vcpkg cache layout on Copilot agent runs
Cache action reports a hit and extracts ~787 MB, but vcpkg then
restores 0 packages from the path it advertises. Same cache key
works on regular GitHub-hosted runners, so the suspicion is a
workspace path mismatch in the Copilot cloud agent's bind-mounted
environment. Add a temporary step to print pwd, GITHUB_WORKSPACE,
the action's output path, and locate any .vcpkg-cache on disk.
2026-05-24 08:26:19 +02:00
copilot-swe-agent[bot]andmagnesj e8628ac94d Fix Copilot setup-steps compatibility for agent runs
Agent-Logs-Url: https://github.com/magnesj/ResInsight/sessions/3b42d031-f22b-4a85-a4a7-9be76cd74263

Co-authored-by: magnesj <1793152+magnesj@users.noreply.github.com>
2026-05-24 08:11:04 +02:00
Magne Sjaastad 20b1ef95c7 CI: drop RESINSIGHT_QT5_BUNDLE_LIBRARIES from ResInsightWithCache
The CMake option is no longer defined, so passing it on the configure
line has been a no-op. Removing the last remaining reference.
2026-05-23 19:34:38 +02:00
Magne Sjaastad 16dea6e855 CI: drop RESINSIGHT_QT5_BUNDLE_LIBRARIES from Copilot setup-steps
The agent does not need a self-contained install tree with Qt staged
next to the binary; skipping the bundle step saves time without
affecting the buildcache/vcpkg cache the agent inherits.
2026-05-23 19:34:38 +02:00
Magne Sjaastad 37155c311d CI: add Copilot coding agent setup-steps for Ubuntu/gcc-14
Pre-flight workflow that GitHub Copilot's coding agent runs before each
session. Mirrors the Ubuntu/gcc-14 leg of ResInsightWithCache.yml so it
shares the same buildcache and vcpkg cache keys; the nightly CI run
warms the caches that this job restores.

Does a configure + build so the agent's first edit only recompiles the
translation units it actually touches. Unity build is off so a single
.cpp change doesn't invalidate a whole unity blob's cache entry.
2026-05-23 19:34:38 +02:00
Magne Sjaastad 0e259e49e8 RHEL8 CI: prebuilt Docker image with toolchain, vcpkg cache, and warm buildcache 2026-05-23 16:09:17 +02:00
Kristian Bendiksen 17b024e876 #4469 Python: Add async tests for Grid cell_centers and cell_corners
Fill the async-variant gaps in the Grid class. Both sync forms are
already exercised by test_10k; the new tests iterate the streaming
variants, accumulate the chunks, and assert length and a spot-check
cell against the sync result.

Fixes #4469.
2026-05-22 14:21:46 +02:00
Kristian Bendiksen f7e05d041a #4465 Python: Add async tests for remaining Properties commands
Fill the async-variant gaps in Properties / NNCProperties coverage that
already have sync tests: selected_cells_async, selected_cell_property_async,
nnc_connections_static_values_async, nnc_connections_generated_values_async.
Each test accumulates the streamed chunks and asserts equality with the
corresponding synchronous call.

Fixes #4465.
2026-05-22 14:21:46 +02:00
Kristian Bendiksen 8663cd5d8f #4468 Python: Add tests for Project plot, export_well_paths, fracture template, summary_cases
Cover four more Project APIs. test_plot_lookup mirrors the existing
views/view test using the WellLogPlot collection in 10KWithWellLog.rsp.
test_export_well_paths exercises the WELLPATHS export-folder path.
test_scale_fracture_template_and_set_containment opens
small-completion-export-fractures.rsp, asserts the scale factors round
trip via PDM descendants, then verifies set_fracture_containment by
saving the project and inspecting the .rsp XML (RimFractureContainment
fields are not scriptable). test_summary_cases uses
SIMPLE_SUMMARY2.SMSPEC and asserts summary_cases() reflects
import_summary_case.
2026-05-22 14:21:46 +02:00
Kristian Bendiksen 1e14e5b93b #4468 Python: Fix ScaleFractureTemplateRequest missing dFactor and conductivity
The Python wrapper Project.scale_fracture_template passes dFactor and
conductivity, but the proto message only declared id, halfLength, and
height. Constructing the protobuf message raised ValueError, making the
API uninvokable. The C++ Ricf handler already declares matching
scriptable fields, so the additions wire up automatically via the
reflection-based proto-to-PDM assignment in RiaGrpcCommandService.
2026-05-22 14:21:46 +02:00
Kristian Bendiksen 14a701773e #4468 Python: Add tests for Project import_formation_names and import_well_log_files
Verify import_formation_names via the FORMATION_NAMES branch of
available_properties on the target case. Verify import_well_log_files
via the well_log_folder argument, writing a minimal synthetic LAS file
into a tempdir and checking the returned well-path names contain the
LAS WELL header value.

Fixes #4468.
2026-05-22 14:21:46 +02:00
Kristian Bendiksen ac43c9ac71 #4468 Python: Add tests for Project save, views, well_path_by_name, grid_case_groups, key_values_async
Cover the easily-reachable gaps in Project API test coverage: save() round
trip, views()/view() lookup, well_path_by_name() hit and miss, the
grid_case_groups()/grid_case_group(id) lookup pair, and the async
key_values iterator.
2026-05-22 14:21:46 +02:00
Kristian Bendiksen ce3f2935d9 #4467 Python: Add async + classification tests for Case property/NNC APIs
Cover the remaining gaps in the Case Properties + NNC test batch:
grid_property_async, nnc_connections_async, and available_properties for
DYNAMIC_NATIVE and GENERATED branches.

Closes #4467.
2026-05-22 14:21:46 +02:00
magnesj 86d11f42fd Fixes by codespell 2026-05-22 06:58:22 +02:00
jonjenssen 379741b1d5 Add nullptr guard to avoid crash when looking at odb data 2026-05-22 06:57:48 +02:00
Jørgen Herje 291fb48b10 Adjust elastic search 2026-05-21 16:06:56 +02:00
Magne Sjaastad 5691333c61 MSW Export: Add preference for improved MSW data structures and rename extraction methods 2026-05-21 10:12:49 +02:00
Magne Sjaastad dad431edac RicPerforationCellFilterEvaluator: Guard against out-of-range global cell index 2026-05-21 10:12:49 +02:00
Kristian Bendiksen 294ab9f277 #13842 CI: Create dev fallback _version.py before pip install
The "Install dependencies" step does an editable install of the rips
package before CMake runs, so the CMake-generated rips/_version.py
does not yet exist and setuptools' attr: directive fails.

Write a dev fallback before pip install. The real version is regenerated
by CMake during the subsequent build step.
2026-05-21 08:32:45 +02:00
Kristian Bendiksen ab577949bd #13842 Python: Do not check in generated _version.py
Remove the committed rips/_version.py and add it to .gitignore. The file
is generated by CMake from rips/_version.py.cmake at configure time, so
checking it in caused the source tree to carry stale/duplicated state.

Addresses review feedback on PR #13847.
2026-05-21 08:32:45 +02:00
Kristian Bendiksen 5486c615a1 #13842 Python: Migrate from setup.py to pyproject.toml
Replace legacy setup.py packaging with modern pyproject.toml (PEP 517/518/621).
Version is dynamically resolved via setuptools attr: directive from rips/_version.py,
which CMake generates.

Consolidate requirements.txt, dev-requirements.txt, and build-requirements.txt
into pyproject.toml dependencies and [dev] optional-dependencies.
Consolidate rips/mypy.ini into [tool.mypy] section of pyproject.toml.
Update GitHub Actions workflow and CMakeLists.txt accordingly.
2026-05-21 08:32:45 +02:00
Jørgen Herje 182ea91e2e Fix cloud auth and sumo connection (#14026)
Ensure configured cloud services before RiaCloudConnector is constructed
2026-05-21 08:10:37 +02:00
Kristian Bendiksen cc574e7a7b #14006 CorrelationPlot: Guard against empty time steps in fieldChangedByUi
Changing the time step filter combo box crashed when the plot had no
available time steps: filteredTimeStepIndices returned an empty vector
and .back() invoked undefined behaviour. Skip the m_timeStep assignment
when either allDateTimes or filteredTimeStepIndices is empty.

Fixes #14006.
2026-05-20 18:04:01 +02:00
Kristian Bendiksen 37c6892102 #14022 DataFilter: Restore category options for case-level property filters on project load
The case-level RimDataFilterCollection lacked an equivalent of
RimEclipsePropertyFilterCollection::loadAndInitializePropertyFilters, so a
saved FORMATION_NAMES selection had its value preserved on reload but no
category options list to render against. The selection only appeared after
the user toggled the filter, which routes through fieldChangedByUi and
rebuilds the category cache. Add loadAndInitializeFilters and invoke it
from RimEclipseView::onLoadDataAndUpdate, once openReservoirCase has loaded
the grid and active formation names.
2026-05-20 18:03:19 +02:00
Magne Sjaastad 91fed8e48c #14020 Use perforation interval cell filter to limit COMPDAT and MSW export
* Completions: Apply perforation cell filter to COMPDAT and MSW export
* PerforationInterval: Limit Cell Filter dropdown to case-level filters
* PerforationInterval: Prefix Cell Filter entries with case name when multiple cases
* Completions: Use std::format for cell filter suppression log messages
2026-05-20 16:04:40 +02:00
Kristian Bendiksen 20087c6dd9 #13997 3dView: Show active filter name(s) below Z-scale indicator
Adds a new HUD label in the upper-left of the 3D view that reads
"Filter : <name(s)>" whenever a cell, property, or per-view data
filter is active. The label is hidden when nothing is enabled.

Names are joined per the source collection's AND/OR combine mode, and
contributions from different collections are concatenated with ", ".
On Eclipse views the unified RimFilterInViewCollection is used as the
single anchor; GeoMech views aggregate cell and GeoMech property
filters directly.
2026-05-20 14:16:04 +02:00
Magne Sjaastad af5c133736 #13998 Suppress MSVC C4875 deprecation warning from bundled gsl headers 2026-05-19 10:19:15 +02:00
Magne Sjaastad 4e65583425 #14004 resdata: Backport robustness fixes from equinor/resdata#1166
Guard zero-length keywords in ecl_kw_max_min, increase grdecl buffer to 256 and bound sscanf widths, and validate dimensions and keyword sizes (COORD, ZCORN, MAPAXES, CORSNUM, ACTNUM) when loading GRDECL grids.
2026-05-19 07:58:37 +02:00
Magne Sjaastad 3efdbafa0c #14004 surfio: Update to 0.0.20 and link fast_float from vcpkg 2026-05-19 07:58:37 +02:00
Kristian Bendiksen 92107da9ed #14011 FlowRateCurve: Guard against null plot curve in updateCurveAppearance
When the user toggles "Show Curve" off, updateCurvePresentation runs
updateCurveVisibility, which detaches and deletes m_plotCurve, before
calling updateCurveAppearance. The override in RimWellFlowRateCurve
dereferenced m_plotCurve unconditionally and crashed. Match the null
guard already present in RimPlotCurve::updateCurveAppearance.

Fixes #14011.
2026-05-18 21:48:13 +02:00
Kristian Bendiksen 90c7bcf743 #14008 MultiPlotPage: Avoid abort on stale visible-index mapping
Nested Qt event processing during toolbar clearing can trigger
performUpdate while the visible-index-to-position mapping is out of
sync with the current visible plot widgets. The lookup lambda in
alignAxis previously asserted on a miss, calling abort() which the
SIGABRT handler reported as a crash. Return std::optional and skip
widgets without a mapping entry instead, matching the defensive
null-pointer style used elsewhere in this file.

Fixes #14008.
2026-05-18 21:48:13 +02:00
Kristian Bendiksen a60d3aba43 #14010 Fractures: Don't assert on missing well path geometry
The CVF_ASSERT on the wellPathGeometry pointer aborted release builds
before the existing null check could return gracefully. A well path
without resolved geometry is a valid state, so drop the assert and let
the early return handle it.

Fixes #14010.
2026-05-18 21:48:13 +02:00
Kristian Bendiksen 44b0df7906 CellFilters: Drop AND/OR count suffix from combined filter name 2026-05-15 08:37:46 +02:00
Kristian Bendiksen 6edc17892f CellFilters: Unify view filter nodes under RimFilterInViewCollection 2026-05-15 08:37:46 +02:00
Kristian Bendiksen b15c8d383c CellFilters: Fix lifetime and notification issues from review
Three fixes from PR review on the data-filters refactor.

RimDataFilterInViewCollection::syncWithSource: avoid double-free on
project load when m_sourceCollection has not yet resolved. The first
pass deletes orphan wrappers but leaves them in the local snapshot;
the null-source branch then deleted them again. Replace the second
deletion with deleteChildren() on the wrapper field.

RimDataFilterInViewCollection::setSourceCollection: disconnect from
the previous source's filtersChanged signal before reassigning, so
edits to a previously-bound case no longer trigger spurious geometry
regen on this view.

RimEclipsePropertyFilter::fieldChangedByUi: always emit
triggerFilterChanged() after updating bounds and related fields.
Otherwise, when the property filter lives inside a combined filter
under a per-view RimEclipsePropertyFilterCollection, the combined
parent's auto-derived display name was never recomputed.
2026-05-15 08:37:46 +02:00
Kristian Bendiksen ddcfef736b Python: Add filtered_cells API for evaluating a data filter on a case
Adds case.filtered_cells(filter, time_step, grid_index) which applies any
RimCellFilter to an Eclipse case and returns a per-cell 0/1 mask. The mask
length and ordering match case.grid_property(..., grid_index), so callers
can combine the two vectors element-wise.

Implemented as a scriptable Rimc method (PdmVoidObjectMethod) on
RimEclipseCase that writes the mask via the existing key-value store, with
a thin Python wrapper mirroring the visible_cells() pattern. No proto or
gRPC service changes.
2026-05-15 08:37:46 +02:00
Kristian Bendiksen c9456bba62 Python: Add cell filter reference to perforation intervals
Lets a script attach a cell filter to a RimPerforationInterval as a
typed reference so subsequent work can gate completion-export
connections by the filter's cell mask. Pure metadata in this commit:
no consumer of RimPerforationInterval is modified, the field exists
purely as an API surface.

Add a non-scriptable caf::PdmPtrField<RimCellFilter*> m_cellFilter to
RimPerforationInterval with public cellFilter()/setCellFilter()
accessors and a "Cell Filter" group in the property panel between the
existing geometry/flow group and the Date Settings group. The field is
deliberately non-scriptable: a scriptable PdmPtrField round-trips in
Python as an opaque "ClassName:0xADDR" string rather than a resolved
object, defeating the point. Two CAF object methods on
RimcPerforationInterval expose the relationship:

- AddFilter (perf.add_filter(filter)) sets the pointer; replaces any
  existing filter (single filter per perforation).
- cell_filter (perf.cell_filter()) resolves to the referenced
  RimCellFilter object on read, mirroring the valve.template() pattern.

Composition stays in RimCombinedFilter: a script that wants AND/OR
across multiple filters attaches a combined filter as the single
filter on the perforation.

The Python example in PythonExamples builds a case-level AND combined
filter (PERMX 100..20000 AND K=5..10), creates a modeled well path
with two perforation intervals, and shares the same filter between
them. test_perforation_filter.py covers single-set, replace-on-second-
add, and shared-pointer round-trips.
2026-05-15 08:37:46 +02:00
Kristian Bendiksen 3a1ff7a1e3 CellFilters: Auto-derive combined-filter name from children
Combined filters used to always show whatever literal string the user
passed in (or the default "Combined Filter"). For programmatic creation
without a name, that string never reflected the children, leaving the
case-level "Data Filters" tree row stale when child bounds changed.

Add an m_autoDeriveName flag (default true) to RimCombinedFilter. When
on, the display name is recomputed on every relevant change — addFilter,
removeFilter, onChildAdded, onChildFilterChanged, and combineMode
toggle — by joining children's name() with " AND " / " OR ". The flag
flips to false the first time the user renames the filter via the UI
property panel or via Python (combined.user_description = "..."),
preserving any explicitly typed name verbatim from then on.

Two child-creation paths needed an extra triggerFilterChanged() so the
combined parent recomputes after the child's final name is set:
addPropertyFilterToCombinedFilter (setDefaults updates name without a
signal) and RimcCombinedFilter_addRangeFilter (Rimc applies user
params after addNewFilter).

The Rimc factory passes setAutoDeriveName(false) only when a name is
supplied. The Python example demonstrates both modes side by side, and
test_combined_filter.py adds three cases: named filter preserves its
name, auto-derived filter tracks bound mutations, and Python rename
locks the auto-derived filter.
2026-05-15 08:37:46 +02:00
Kristian Bendiksen 74fde9edef CellFilters: Mirror source filter's name in the per-view wrapper
RimDataFilterInView previously copied the source filter's name once, in
setSourceFilter() and initAfterRead() via syncNameFromSource(). That
left the wrapper showing the default "Combined Filter" when the source
was renamed after the wrapper was created — typical for the Python
add_combined_filter(name=...) flow, where the wrapper is constructed
during addFilter() before the user-supplied name reaches the source.

Replace the wrapper's reliance on its inherited m_name field for
display with a caf::PdmProxyValueField<QString> that delegates the
read to m_sourceFilter()->name() and the write to setName(). Override
userDescriptionField() so the PDM tree label and property panel route
through the proxy — both directions of rename now propagate.

Matches the m_nameProxy pattern already established in RimCellFilter.
The inherited m_name is no longer the display source of truth but is
left in place so RimNamedObject's serialization stays unchanged.
2026-05-15 08:37:46 +02:00
Kristian Bendiksen eb70d32eb1 Python: Add scriptable Data Filters API for combined filters
Expose the case-level RimDataFilterCollection (introduced for
case-shared cell filters) to Python so scripts can build combined
filters with property-filter and IJK-range children without going
through a view.

Scriptable surface:
- RimEclipseCase.m_dataFilterCollection -> case.data_filter_collection()
- RimDataFilterCollection (object + Filters child array) -> filters()
- RimEclipsePropertyFilter (object + m_lowerBound + m_upperBound) ->
  pf.lower_bound, pf.upper_bound
- RimCellRangeFilter (object + start_index_{i,j,k}, cell_count_{i,j,k})

New CAF object methods under ProjectDataModelCommands/:
- RimcDataFilterCollection: add_combined_filter(name, combine_mode)
- RimcCombinedFilter: add_property_filter(result_variable, result_type)
  and add_range_filter(name, start_{i,j,k}, cell_count_{i,j,k}).

Bounds are not part of add_property_filter because the Python class
generator emits a bare nan literal as the default for double fields
initialised to quiet_NaN, which fails to import. Bounds are set via
the now-scriptable lower_bound/upper_bound fields after creation,
matching the update() pattern used elsewhere in the API.

RicEclipsePropertyFilterFeatureImpl::addPropertyFilterToCombinedFilter
now returns the new RimEclipsePropertyFilter* so the CAF method can
hand it back to Python. setDefaults is relaxed to be view-tolerant:
case-level filters have no Rim3dView ancestor and the eclipse case is
already wired by RimEclipsePropertyFilter::setCase via the owning
collection's onItemsChanged hook.

End-to-end coverage in tests/test_combined_filter.py: round-trip
create, mode toggle, property-filter add/mutate, range-filter
add/mutate. Example script in PythonExamples builds an AND combined
filter that gates PERMX between 100 and 20000 against a K=5..10
slice.
2026-05-15 08:37:46 +02:00
Kristian Bendiksen 4ed6d70b73 CellFilters: Add case-level Data Filters with per-view wrappers
Introduce RimDataFilterCollection on RimEclipseCase to hold filter
configuration that is shared across all views of the case. Each
RimEclipseView gets a RimDataFilterInViewCollection of
RimDataFilterInView wrappers that auto-sync with the case-level list
and expose an independent on/off toggle per view. The wrapper's
applyToCellVisibility delegates to the wrapped RimCellFilter via the
existing unified virtual, so property, range, and combined filters all
work uniformly.

RimDataFilterCollection is built on caf::PdmObjectCollection<RimCellFilter>
and emits a filtersChanged signal on add/remove/reorder/child changes.
The wrapper collection mirrors RimSurfaceInViewCollection's sync pattern:
new wrappers default to checked, removed sources drop their wrappers,
and the wrapper list follows the case order. Per-view wrappers feed into
RivReservoirViewPartMgr::computePropertyVisibility after the existing
view-level property-filter loop.

The RicNew*Feature commands now route into a selected RimDataFilterCollection,
and the existing combined-filter path is generalized to allow combined
filters living under either a per-view RimEclipsePropertyFilterCollection
or the new case-level collection. Several Asserted ancestor lookups in
RimEclipsePropertyFilter, RimCellFilter and RimEclipseResultDefinition
that assumed a Rim3dView ancestor were relaxed to the non-asserting
variant with graceful fallbacks, so case-level filters can be created
and edited without a host view.

Backwards compatible: empty Data Filter collection is a no-op,
existing per-view RimEclipsePropertyFilterCollection and
RimCellFilterCollection paths are unchanged. GeoMech parity deferred.
2026-05-15 08:37:46 +02:00
Magne Sjaastad 3375e37ffc #13987 PDM: Make loadData() virtual on RimPolygonContainer
Replace the dynamic_cast dispatch in RimPolygonCollection::loadData() with a
virtual loadData() on RimPolygonContainer. The base recurses through
subCollections; RimPolygonFile overrides to load file data. The folder
RimPolygonCollection no longer needs its own loadData().

Move RimPolygonFile::canAddSubCollection() and RimPolygonInView::sourceItem()
implementations from headers to .cpp.

Simplify std::unexpected calls in RimcNestedCollectionBase by removing
redundant explicit QString construction.
2026-05-13 14:53:00 +02:00