Skip to content

Commit 4744a06

Browse files
committed
XYDomainModel: Consistently set map_x/map_y at the top if both available
1 parent 76a4403 commit 4744a06

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

orangecontrib/spectroscopy/utils/__init__.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import numpy as np
22

3-
from Orange.data import Domain, Table
3+
from Orange.data import Domain, Table, ContinuousVariable
4+
from Orange.widgets.utils.itemmodels import DomainModel
5+
from orangewidget.utils.itemmodels import PyListModel
46

57
MAP_X_VAR = "map_x"
68
MAP_Y_VAR = "map_y"
@@ -148,3 +150,24 @@ def split_to_size(size, interval):
148150
intervals.append(slice(pos, pos + min(size - pos, interval)))
149151
pos += min(size, interval)
150152
return intervals
153+
154+
155+
class XYDomainModel(DomainModel):
156+
XY = (DomainModel.METAS, PyListModel.Separator,
157+
DomainModel.CLASSES)
158+
159+
def __init__(self, order=XY, valid_types=ContinuousVariable, **kwargs):
160+
super().__init__(order=order, valid_types=valid_types, **kwargs)
161+
162+
def set_domain(self, domain):
163+
restore_order = False
164+
if domain is not None and self.order == self.XY:
165+
attr_x = [domain[var] for var in domain if var.name == MAP_X_VAR]
166+
attr_y = [domain[var] for var in domain if var.name == MAP_Y_VAR]
167+
xy = attr_x + attr_y
168+
if len(xy) == 2:
169+
self.order = (xy, PyListModel.Separator) + self.order
170+
restore_order = True
171+
super().set_domain(domain)
172+
if restore_order:
173+
self.order = self.order[2:]

orangecontrib/spectroscopy/widgets/owhyper.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
from orangewidget.utils.visual_settings_dlg import VisualSettingsDialog
4040

4141
from orangecontrib.spectroscopy.preprocess import Integrate
42-
from orangecontrib.spectroscopy.utils import values_to_linspace, index_values_nan, split_to_size
42+
from orangecontrib.spectroscopy.utils import values_to_linspace, index_values_nan, split_to_size, XYDomainModel
4343

4444
from orangecontrib.spectroscopy.widgets.owspectra import InteractiveViewBox, \
4545
MenuFocus, CurvePlot, SELECTONE, SELECTMANY, INDIVIDUAL, AVERAGE, \
@@ -287,8 +287,7 @@ def color_palette_model(palettes, iconsize=QSize(64, 16)):
287287
class AxesSettingsMixin:
288288

289289
def __init__(self):
290-
self.xy_model = DomainModel(DomainModel.METAS | DomainModel.CLASSES,
291-
valid_types=DomainModel.PRIMITIVE)
290+
self.xy_model = XYDomainModel()
292291

293292
def setup_axes_settings_box(self):
294293
box = gui.vBox(self)

0 commit comments

Comments
 (0)