Skip to content

Commit cdb4908

Browse files
committed
oweditdomain: Cleanup and pylint overrides
1 parent 5966b4f commit cdb4908

File tree

1 file changed

+66
-60
lines changed

1 file changed

+66
-60
lines changed

Orange/widgets/data/oweditdomain.py

Lines changed: 66 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,11 @@
2424
)
2525
from AnyQt.QtGui import QStandardItemModel, QStandardItem, QKeySequence, QIcon
2626
from AnyQt.QtCore import pyqtSignal as Signal, pyqtSlot as Slot
27-
from AnyQt.QtCore import Qt, QEvent, QSize, QModelIndex, QAbstractListModel
27+
from AnyQt.QtCore import Qt, QEvent, QSize, QModelIndex
2828

2929
import numpy as np
3030

3131
import Orange.data
32-
import Orange.preprocess.transformation
3332

3433
from Orange.preprocess.transformation import Identity, Lookup
3534
from Orange.widgets import widget, gui, settings
@@ -48,7 +47,7 @@ class Categorical(
4847
("categories", Tuple[str, ...]),
4948
("base", Optional[str]),
5049
("annotations", AnnotationsType),
51-
])): ...
50+
])): pass
5251

5352

5453
class Real(
@@ -57,21 +56,21 @@ class Real(
5756
# a precision (int, and a format specifier('f', 'g', or '')
5857
("format", Tuple[int, str]),
5958
("annotations", AnnotationsType),
60-
])): ...
59+
])): pass
6160

6261

6362
class String(
6463
NamedTuple("String", [
6564
("name", str),
6665
("annotations", AnnotationsType),
67-
])): ...
66+
])): pass
6867

6968

7069
class Time(
7170
NamedTuple("Time", [
7271
("name", str),
7372
("annotations", AnnotationsType),
74-
])): ...
73+
])): pass
7574

7675

7776
Variable = Union[Categorical, Real, Time, String]
@@ -519,51 +518,8 @@ def __init__(self, *args, **kwargs):
519518
shortcutContext=Qt.WidgetShortcut,
520519
)
521520

522-
model = self.values_model
523-
view = self.values_edit
524-
525-
@self.add_new_item.triggered.connect
526-
def _add_item():
527-
with disconnected(model.dataChanged, self.on_values_changed,
528-
Qt.UniqueConnection):
529-
row = model.rowCount()
530-
if not model.insertRow(model.rowCount()):
531-
return
532-
index = model.index(row, 0)
533-
model.setItemData(
534-
index, {
535-
Qt.EditRole: "",
536-
SourcePosRole: None,
537-
EditStateRole: ItemEditState.Added
538-
}
539-
)
540-
view.setCurrentIndex(index)
541-
view.edit(index)
542-
self.on_values_changed()
543-
544-
@self.remove_item.triggered.connect
545-
def _remove_item():
546-
view = self.values_edit
547-
rows = view.selectionModel().selectedRows(0)
548-
if not rows:
549-
return
550-
index = rows[0] # type: QModelIndex
551-
model = index.model()
552-
state = index.data(EditStateRole)
553-
pos = index.data(Qt.UserRole)
554-
if pos is not None and pos >= 0:
555-
# existing level -> only mark/toggle its dropped state
556-
model.setData(
557-
index,
558-
ItemEditState.Dropped if state != ItemEditState.Dropped
559-
else ItemEditState.NoState,
560-
EditStateRole)
561-
elif state == ItemEditState.Added:
562-
# new level -> remove it
563-
model.removeRow(index.row())
564-
else:
565-
assert False, "invalid state '{}' for {}" \
566-
.format(state, index.row())
521+
self.add_new_item.triggered.connect(self._add_category)
522+
self.remove_item.triggered.connect(self._remove_category)
567523

568524
button1 = FixedSizeButton(
569525
self, defaultAction=self.move_value_up,
@@ -737,6 +693,61 @@ def on_value_selection_changed(self):
737693
self.move_value_up.setEnabled(False)
738694
self.move_value_down.setEnabled(False)
739695

696+
def _remove_category(self):
697+
"""
698+
Remove the current selected category.
699+
700+
If the item is an existing category present in the source variable it
701+
is marked as removed in the view. But if it was added in the set
702+
transformation it is removed entirely from the model and view.
703+
"""
704+
view = self.values_edit
705+
rows = view.selectionModel().selectedRows(0)
706+
if not rows:
707+
return
708+
assert len(rows) == 1
709+
index = rows[0] # type: QModelIndex
710+
model = index.model()
711+
state = index.data(EditStateRole)
712+
pos = index.data(Qt.UserRole)
713+
if pos is not None and pos >= 0:
714+
# existing level -> only mark/toggle its dropped state
715+
model.setData(
716+
index,
717+
ItemEditState.Dropped if state != ItemEditState.Dropped
718+
else ItemEditState.NoState,
719+
EditStateRole)
720+
elif state == ItemEditState.Added:
721+
# new level -> remove it
722+
model.removeRow(index.row())
723+
else:
724+
assert False, "invalid state '{}' for {}" \
725+
.format(state, index.row())
726+
727+
def _add_category(self):
728+
"""
729+
Add a new category
730+
"""
731+
view = self.values_edit
732+
model = view.model()
733+
734+
with disconnected(model.dataChanged, self.on_values_changed,
735+
Qt.UniqueConnection):
736+
row = model.rowCount()
737+
if not model.insertRow(model.rowCount()):
738+
return
739+
index = model.index(row, 0)
740+
model.setItemData(
741+
index, {
742+
Qt.EditRole: "",
743+
SourcePosRole: None,
744+
EditStateRole: ItemEditState.Added
745+
}
746+
)
747+
view.setCurrentIndex(index)
748+
view.edit(index)
749+
self.on_values_changed()
750+
740751

741752
class ContinuousVariableEditor(VariableEditor):
742753
# TODO: enable editing of display format...
@@ -965,7 +976,7 @@ def reset_all(self):
965976
self._invalidate()
966977

967978
def selected_var_index(self):
968-
"""Return the selected row in 'Domain Features' view."""
979+
"""Return the current selected variable index."""
969980
rows = self.variables_view.selectedIndexes()
970981
assert len(rows) <= 1
971982
return rows[0].row() if rows else -1
@@ -975,10 +986,6 @@ def set_domain(self, domain):
975986
self.variables_model[:] = [abstract(v)
976987
for v in domain.variables + domain.metas]
977988

978-
def set_variables(self, variables):
979-
# type: (Iterable[Variable]) -> None
980-
self.variables_model[:] = variables
981-
982989
def _restore(self, ):
983990
"""
984991
Restore the edit transform from saved state.
@@ -1060,8 +1067,6 @@ def _on_variable_changed(self):
10601067

10611068
def _store_transform(self, var, transform):
10621069
# type: (Variable, List[Transform]) -> None
1063-
# print("store:", deconstruct(var))
1064-
# print(" ", [deconstruct(t) for t in transform])
10651070
self._domain_change_store[deconstruct(var)] = [deconstruct(t) for t in transform]
10661071

10671072
def _restore_transform(self, var):
@@ -1162,6 +1167,7 @@ def send_report(self):
11621167

11631168
@classmethod
11641169
def migrate_context(cls, context, version):
1170+
# pylint: disable=bad-continuation
11651171
if version is None or version <= 1:
11661172
hints_ = context.values.get("domain_change_hints", ({}, -2))[0]
11671173
store = []
@@ -1175,10 +1181,10 @@ def migrate_context(cls, context, version):
11751181
("Time", (name, ())),
11761182
"ContinuousVariable":
11771183
lambda name, _, attrs:
1178-
("Real", (name, (3, "f"), ())),
1184+
("Real", (name, (3, "f"), ())),
11791185
"StringVariable":
11801186
lambda name, _, attrs:
1181-
("String", (name, ())),
1187+
("String", (name, ())),
11821188
}
11831189
for (module, class_name, *rest), target in hints_.items():
11841190
if module != ns:

0 commit comments

Comments
 (0)