1010 QItemSelection , QItemSelectionModel
1111)
1212
13+ from Orange .util import deprecated
1314from Orange .widgets import gui , widget
1415from Orange .widgets .data .contexthandlers import \
1516 SelectAttributesDomainContextHandler
1617from Orange .widgets .settings import *
1718from Orange .data .table import Table
18- from Orange .widgets .utils import itemmodels , vartype
19+ from Orange .widgets .utils import vartype
20+ from Orange .widgets .utils .itemmodels import VariableListModel , PyListModel
1921import Orange
2022
2123
@@ -57,86 +59,30 @@ def source_indexes(indexes, view):
5759def delslice (model , start , end ):
5860 """ Delete the start, end slice (rows) from the model.
5961 """
60- if isinstance (model , itemmodels . PyListModel ):
62+ if isinstance (model , PyListModel ):
6163 del model [start :end ]
6264 elif isinstance (model , QAbstractItemModel ):
6365 model .removeRows (start , end - start )
6466 else :
6567 raise TypeError (type (model ))
6668
6769
68- class VariablesListItemModel (itemmodels .VariableListModel ):
69- """ An Qt item model for for list of orange.Variable objects.
70- Supports drag operations
71- """
72- def flags (self , index ):
73- flags = super ().flags (index )
74- if index .isValid ():
75- flags |= Qt .ItemIsDragEnabled
76- else :
77- flags |= Qt .ItemIsDropEnabled
78- return flags
79-
80- ###########
81- # Drag/Drop
82- ###########
83-
84- MIME_TYPE = "application/x-Orange-VariableListModelData"
85-
86- def supportedDropActions (self ):
87- return Qt .MoveAction
88-
89- def supportedDragActions (self ):
90- return Qt .MoveAction
91-
92- def mimeTypes (self ):
93- return [self .MIME_TYPE ]
94-
95- def mimeData (self , indexlist ):
96- descriptors = []
97- vars = []
98- for index in indexlist :
99- var = self [index .row ()]
100- descriptors .append ((var .name , vartype (var )))
101- vars .append (var )
102- mime = QMimeData ()
103- mime .setData (self .MIME_TYPE ,
104- QByteArray (str (descriptors ).encode ("utf-8" )))
105- mime ._vars = vars
106- return mime
107-
108- def dropMimeData (self , mime , action , row , column , parent ):
109- if action == Qt .IgnoreAction :
110- return True
111- vars = self .items_from_mime_data (mime )
112- if vars is None :
113- return False
114- if row == - 1 :
115- row = len (self )
116- self [row :row ] = vars
117- return True
118-
119- def items_from_mime_data (self , mime ):
120- if not mime .hasFormat (self .MIME_TYPE ):
121- return None , None
122- if hasattr (mime , "_vars" ):
123- vars = mime ._vars
124- return vars
125- else :
126- #TODO: get vars from orange.Variable.getExisting
127- return None , None
70+ # owloadcorpus in orange3-text used this
71+ @deprecated ('Orange.widgets.utils.itemmodels.VariableListModel' )
72+ def VariablesListItemModel (* args , ** kwargs ):
73+ return VariableListModel (* args , enable_dnd = True , ** kwargs )
12874
12975
130- class ClassVarListItemModel (VariablesListItemModel ):
76+ class ClassVarListItemModel (VariableListModel ):
13177 def dropMimeData (self , mime , action , row , column , parent ):
13278 """ Ensure only one variable can be dropped onto the view.
13379 """
134- vars = self . items_from_mime_data ( mime )
80+ vars = mime . property ( '_items' )
13581 if vars is None or len (self ) + len (vars ) > 1 :
13682 return False
13783 if action == Qt .IgnoreAction :
13884 return True
139- return VariablesListItemModel .dropMimeData (
85+ return VariableListModel .dropMimeData (
14086 self , mime , action , row , column , parent )
14187
14288
@@ -206,7 +152,7 @@ def acceptsDropEvent(self, event):
206152 return False
207153
208154 mime = event .mimeData ()
209- vars = source_model ( self ). items_from_mime_data ( mime )
155+ vars = mime . property ( '_items' )
210156 if vars is None :
211157 return False
212158
@@ -230,7 +176,7 @@ def acceptsDropEvent(self, event):
230176 """
231177 accepts = super ().acceptsDropEvent (event )
232178 mime = event .mimeData ()
233- vars = source_model ( self ). items_from_mime_data ( mime )
179+ vars = mime . property ( '_items' )
234180 if vars is None :
235181 return False
236182
@@ -263,7 +209,7 @@ def filter_accepts_variable(self, var):
263209
264210 def filterAcceptsRow (self , source_row , source_parent ):
265211 model = self .sourceModel ()
266- if isinstance (model , itemmodels . VariableListModel ):
212+ if isinstance (model , VariableListModel ):
267213 var = model [source_row ]
268214 return self .filter_accepts_variable (var )
269215 else :
@@ -336,7 +282,7 @@ def __init__(self):
336282 self .completer_navigator = CompleterNavigator (self )
337283 self .filter_edit .installEventFilter (self .completer_navigator )
338284
339- self .available_attrs = VariablesListItemModel ( )
285+ self .available_attrs = VariableListModel ( enable_dnd = True )
340286 self .available_attrs .rowsRemoved .connect (self .update_completer_model )
341287
342288 self .available_attrs_proxy = VariableFilterProxyModel ()
@@ -356,7 +302,7 @@ def __init__(self):
356302 layout .addWidget (box , 0 , 0 , 3 , 1 )
357303
358304 box = gui .vBox (self .controlArea , "Features" , addToLayout = False )
359- self .used_attrs = VariablesListItemModel ( )
305+ self .used_attrs = VariableListModel ( enable_dnd = True )
360306 self .used_attrs .rowsRemoved .connect (self .update_completer_model )
361307 self .used_attrs_view = VariablesListItemView (
362308 acceptedType = (Orange .data .DiscreteVariable ,
@@ -369,7 +315,7 @@ def __init__(self):
369315 layout .addWidget (box , 0 , 2 , 1 , 1 )
370316
371317 box = gui .vBox (self .controlArea , "Target Variable" , addToLayout = False )
372- self .class_attrs = ClassVarListItemModel ()
318+ self .class_attrs = ClassVarListItemModel (enable_dnd = True )
373319 self .class_attrs .rowsRemoved .connect (self .update_completer_model )
374320 self .class_attrs_view = ClassVariableItemView (
375321 acceptedType = (Orange .data .DiscreteVariable ,
@@ -382,7 +328,7 @@ def __init__(self):
382328 layout .addWidget (box , 1 , 2 , 1 , 1 )
383329
384330 box = gui .vBox (self .controlArea , "Meta Attributes" , addToLayout = False )
385- self .meta_attrs = VariablesListItemModel ( )
331+ self .meta_attrs = VariableListModel ( enable_dnd = True )
386332 self .meta_attrs .rowsRemoved .connect (self .update_completer_model )
387333 self .meta_attrs_view = VariablesListItemView (
388334 acceptedType = Orange .data .Variable )
0 commit comments