Skip to content

Commit

Permalink
feat: Use SettingEditor to control layer naming format
Browse files Browse the repository at this point in the history
  • Loading branch information
daviddaytw committed Dec 15, 2024
1 parent 2c6f0cd commit 50bb0e6
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 4 deletions.
14 changes: 10 additions & 4 deletions package/PartSeg/plugins/napari_io/loader.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import os
import typing
from importlib.metadata import version
from os import path

import numpy as np
from packaging.version import parse as parse_version
Expand All @@ -10,6 +10,7 @@
from PartSegCore.analysis import ProjectTuple
from PartSegCore.io_utils import LoadBase, WrongFileTypeException
from PartSegCore.mask.io_functions import MaskProjectTuple
from PartSegCore.universal_const import format_layer_name
from PartSegImage import Image


Expand Down Expand Up @@ -55,15 +56,18 @@ def add_color(image: Image, idx: int) -> dict: # noqa: ARG001


def _image_to_layers(project_info, scale, translate):
layer_name_prefix = path.basename(project_info.file_path)
settings = get_settings()
filename = os.path.basename(project_info.file_path)
res_layers = []
if project_info.image.name == "ROI" and project_info.image.channels == 1:
res_layers.append(
(
project_info.image.get_channel(0),
{
"scale": scale,
"name": f"{layer_name_prefix} {project_info.image.channel_names[0]}",
"name": format_layer_name(
settings.layer_naming_format, filename, project_info.image.channel_names[0]
),
"translate": translate,
},
"labels",
Expand All @@ -75,7 +79,9 @@ def _image_to_layers(project_info, scale, translate):
project_info.image.get_channel(i),
{
"scale": scale,
"name": f"{layer_name_prefix} {project_info.image.channel_names[i]}",
"name": format_layer_name(
settings.layer_naming_format, filename, project_info.image.channel_names[i]
),
"blending": "additive",
"translate": translate,
"metadata": project_info.image.metadata,
Expand Down
22 changes: 22 additions & 0 deletions package/PartSeg/plugins/napari_widgets/_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from PartSeg.common_backend import napari_get_settings
from PartSegCore import Units
from PartSegCore.json_hooks import PartSegEncoder
from PartSegCore.universal_const import LayerNamingFormat

_SETTINGS = None

Expand All @@ -29,6 +30,14 @@ def io_units(self) -> Units:
def io_units(self, value: Units):
self.set("io_units", value)

@property
def layer_naming_format(self) -> LayerNamingFormat:
return self.get("layer_naming_format", LayerNamingFormat.channel_only)

@layer_naming_format.setter
def layer_naming_format(self, value: LayerNamingFormat):
self.set("layer_naming_format", value)

Check warning on line 39 in package/PartSeg/plugins/napari_widgets/_settings.py

View check run for this annotation

Codecov / codecov/patch

package/PartSeg/plugins/napari_widgets/_settings.py#L39

Added line #L39 was not covered by tests


def get_settings() -> PartSegNapariSettings:
global _SETTINGS # noqa: PLW0603 # pylint: disable=global-statement
Expand All @@ -51,10 +60,23 @@ def __init__(self):
self.units_select.changed.connect(self.units_selection_changed)
self.settings.connect_("io_units", self.units_changed)
self.append(self.units_select)
self.layer_naming_select = create_widget(
self.settings.layer_naming_format, annotation=LayerNamingFormat, label="Format for Layer Name"
)
self.layer_naming_select.changed.connect(self.layer_naming_format_selection_changed)
self.settings.connect_("layer_naming_format", self.layer_naming_format_changed)
self.append(self.layer_naming_select)

def units_selection_changed(self, value):
self.settings.io_units = value
self.settings.dump()

def units_changed(self):
self.units_select.value = self.settings.io_units

def layer_naming_format_selection_changed(self, value):
self.settings.layer_naming_format = value
self.settings.dump()

Check warning on line 79 in package/PartSeg/plugins/napari_widgets/_settings.py

View check run for this annotation

Codecov / codecov/patch

package/PartSeg/plugins/napari_widgets/_settings.py#L78-L79

Added lines #L78 - L79 were not covered by tests

def layer_naming_format_changed(self):
self.layer_naming_select.value = self.settings.layer_naming_format

Check warning on line 82 in package/PartSeg/plugins/napari_widgets/_settings.py

View check run for this annotation

Codecov / codecov/patch

package/PartSeg/plugins/napari_widgets/_settings.py#L82

Added line #L82 was not covered by tests
23 changes: 23 additions & 0 deletions package/PartSegCore/universal_const.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,26 @@ def __str__(self):

_UNITS_LIST = ["mm", "µm", "nm", "pm"]
UNIT_SCALE = [10**3, 10**6, 10**9, 10**12]


@register_class()
class LayerNamingFormat(Enum):
channel_only = 0
filename_only = 1
filename_channel = 2
channel_filename = 3

def __str__(self):
return self.name.replace("_", " ")

Check warning on line 30 in package/PartSegCore/universal_const.py

View check run for this annotation

Codecov / codecov/patch

package/PartSegCore/universal_const.py#L30

Added line #L30 was not covered by tests


def format_layer_name(layer_format: LayerNamingFormat, file_name: str, channel_name: str) -> str:
if layer_format == LayerNamingFormat.channel_only:
return channel_name
if layer_format == LayerNamingFormat.filename_only:
return file_name
if layer_format == LayerNamingFormat.filename_channel:
return f"{file_name} | {channel_name}"
if layer_format == LayerNamingFormat.channel_filename:
return f"{channel_name} | {file_name}"
raise ValueError("Unknown format")

Check warning on line 42 in package/PartSegCore/universal_const.py

View check run for this annotation

Codecov / codecov/patch

package/PartSegCore/universal_const.py#L36-L42

Added lines #L36 - L42 were not covered by tests

0 comments on commit 50bb0e6

Please sign in to comment.