Changeset 6992:108adb473f04 in orange


Ignore:
Timestamp:
09/29/10 12:42:12 (4 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
bbfa094e2cda941145f30d54723f6a6a3de3412e
Message:
  • changed class selection from Combo box to List view
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWDataGenerator.py

    r6986 r6992  
    1111import OWToolbars 
    1212 
    13 from OWItemModels import VariableListModel, VariableDelegate, PyListModel 
     13from OWItemModels import VariableListModel, VariableDelegate, PyListModel, ModelActionsWidget 
     14from Image import NONE 
     15import OWColorPalette 
    1416 
    1517dir = OWToolbars.dir 
     
    2022icon_select = os.path.join(dir, "select-transparent_42px.png") 
    2123icon_lasso = os.path.join(dir, "lasso-transparent_42px.png") 
     24#icon_remove = os.path.join(dir, "remove.svg") 
    2225 
    2326class DataGeneratorGraph(OWGraph): 
     
    553556        self.graph.updateGraph() 
    554557         
     558class EnumVariableModel(PyListModel): 
     559    def __init__(self, var, parent=None, **kwargs): 
     560        PyListModel.__init__(self, [], parent, **kwargs) 
     561        self.wrap(var.values) 
     562        self.colorPalette = OWColorPalette.ColorPaletteHSV(len(self)) 
     563        self.connect(self, SIGNAL("columnsInserted(QModelIndex, int, int)"), self.updateColors) 
     564        self.connect(self, SIGNAL("columnsRemoved(QModelIndex, int, int)"), self.updateColors) 
     565 
     566    def __delitem__(self, index): 
     567        raise TypeErorr("Cannot delete EnumVariable value") 
     568     
     569    def __delslice__(self, i, j): 
     570        raise TypeErorr("Cannot delete EnumVariable values") 
     571     
     572    def __setitem__(self, index, item): 
     573        self._list[index] = str(item) 
     574         
     575    def data(self, index, role=Qt.DisplayRole): 
     576        if role == Qt.DecorationRole: 
     577            i = index.row() 
     578            return QVariant(self.itemQIcon(i)) 
     579        else: 
     580            return PyListModel.data(self, index, role) 
     581         
     582    def updateColors(self, index, start, end): 
     583        self.colorPalette = OWColorPalette.ColorPaletteHSV(len(self)) 
     584        self.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), self.index(0), self.index(len(self) - 1)) 
     585         
     586    def itemQIcon(self, i): 
     587        pixmap = QPixmap(64, 64) 
     588        pixmap.fill(QColor(255, 255, 255, 0)) 
     589        painter = QPainter(pixmap) 
     590        painter.setRenderHint(QPainter.Antialiasing, True) 
     591        painter.setBrush(self.colorPalette[i]) 
     592        painter.drawEllipse(QRectF(15, 15, 39, 39)) 
     593        painter.end() 
     594        return QIcon(pixmap) 
     595    
    555596class OWDataGenerator(OWWidget): 
    556597    TOOLS = [("Brush", "Create multiple instances", BrushTool,  icon_brush), 
     
    602643        self.classVariable = orange.EnumVariable("Class label", values=["Class 1", "Class 2"], baseValue=0) 
    603644         
    604         cb = OWGUI.comboBox(self.controlArea, self, "classIndex", "Class Label") 
    605         self.classValuesModel = PyListModel([], self) 
     645#        cb = OWGUI.comboBox(self.controlArea, self, "classIndex", "Class Label") 
     646        w = OWGUI.widgetBox(self.controlArea, "Class Label") 
     647         
     648        self.classValuesView = listView = QListView() 
     649        listView.setSelectionMode(QListView.SingleSelection) 
     650         
     651        self.classValuesModel = EnumVariableModel(self.classVariable, self, flags=Qt.ItemIsSelectable | Qt.ItemIsEnabled| Qt.ItemIsEditable) 
    606652        self.classValuesModel.wrap(self.classVariable.values) 
    607         cb.setModel(self.classValuesModel) 
    608         self.connect(cb, SIGNAL("currentIndexChanged(int)"), lambda base: setattr(self.classVariable, "baseValue", base)) 
    609         cb.box.layout().addSpacing(4) 
    610         OWGUI.button(cb.box, self, "Add new class label", callback=self.onAddClassLabel) 
     653         
     654        listView.setModel(self.classValuesModel) 
     655        listView.selectionModel().select(self.classValuesModel.index(0), QItemSelectionModel.ClearAndSelect) 
     656        self.connect(listView.selectionModel(), SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.onClassLabelSelection) 
     657        listView.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Maximum) 
     658        w.layout().addWidget(listView) 
     659         
     660        addClassLabel = QAction("+", self) 
     661        addClassLabel.pyqtConfigure(toolTip="Add class label", icon=QIcon(icon_put)) 
     662        self.connect(addClassLabel, SIGNAL("triggered()"), self.addNewClassLabel) 
     663         
     664#        removeClassLabel = QAction("-", self) 
     665#        removeClassLabel.pyqtConfigure(toolTip="Remove class label", icon=QIcon(icon_remove)) 
     666#        self.connect(removeClassLabel, SIGNAL("triggered()"), self.removeSelectedClassLabel) 
     667         
     668        actionsWidget = ModelActionsWidget([addClassLabel], self) # ModelActionsWidget([addClassLabel, removeClassLabel], self) 
     669        actionsWidget.layout().addStretch(10) 
     670        actionsWidget.setStyleSheet("QToolButton { qproperty-iconSize: 12px }") 
     671         
     672        w.layout().addWidget(actionsWidget) 
     673#        bc.setModel(self.classValuesModel) 
     674#        self.connect(cb, SIGNAL("currentIndexChanged(int)"), lambda base: setattr(self.classVariable, "baseValue", base)) 
     675#        cb.box.layout().addSpacing(4) 
     676#        OWGUI.button(cb.box, self, "Add new class label", callback=self.onAddClassLabel) 
    611677         
    612678        toolbox = OWGUI.widgetBox(self.controlArea, "Tools", orientation=QGridLayout()) 
     
    628694            self.toolActions.addAction(action) 
    629695             
     696        for column in range(3): 
     697            toolbox.layout().setColumnMinimumWidth(column, 10) 
     698            toolbox.layout().setColumnStretch(column, 1) 
     699             
    630700        self.optionsLayout = QStackedLayout() 
    631701        self.toolsStackCache = {} 
     
    652722        self.resize(800, 600) 
    653723         
     724    def addNewClassLabel(self): 
     725        self.classValuesModel.append("Class %i" % (len(self.classValuesModel) + 1)) 
     726         
     727    def removeSelectedClassLabel(self): 
     728        index = self.selectedClassLabelIndex() 
     729        if index is not None: 
     730            self.graph.data 
     731         
     732    def selectedClassLabelIndex(self): 
     733        rows = [i.row() for i in self.classValuesView.selectionModel().selectedRows()] 
     734        if rows: 
     735            return rows[0] 
     736        else: 
     737            return None 
     738         
     739    def onClassLabelSelection(self, selected, unselected): 
     740        index = self.selectedClassLabelIndex() 
     741        if index is not None: 
     742            self.classVariable.baseValue = index 
     743         
    654744    def onAddFeature(self): 
    655745        self.variablesModel.append(orange.FloatVariable("New feature")) 
     
    657747         
    658748    def onRemoveFeature(self): 
    659         pass 
    660      
     749        raise NotImplemented 
     750   
     751             
    661752    def onVariableSelectionChange(self, selected, deselected): 
    662753        self.selected 
     
    684775            else: 
    685776                self.data = orange.ExampleTable(self.domain) 
    686 #            print list(self.data) 
    687777            self.graph.setData(self.data, 0, 1) 
    688              
    689     def onAddClassLabel(self): 
    690         dialog = QDialog() 
    691         dialog.setWindowTitle("New class label") 
    692         form = QFormLayout() 
    693         lineEdit = QLineEdit() 
    694         form.addRow("Class label", lineEdit) 
    695         self.connect(lineEdit, SIGNAL("editingFinished"), dialog.accept) 
    696         blayout = QHBoxLayout() 
    697         b1 = QPushButton("Ok") 
    698         b2 = QPushButton("Cancel") 
    699         self.connect(b1, SIGNAL("clicked()"), dialog.accept) 
    700         self.connect(b2, SIGNAL("clicked()"), dialog.reject) 
    701         blayout.addStretch(10) 
    702         blayout.addWidget(b1) 
    703         blayout.addWidget(b2) 
    704         form.addRow(blayout) 
    705         dialog.setLayout(form) 
    706         if dialog.exec_() == QDialog.Accepted: 
    707             label = str(lineEdit.text()) 
    708             if label: 
    709                 self.classValuesModel.append(label) 
    710          
     778     
    711779    def commit(self): 
    712780        if self.addClassAsMeta: 
Note: See TracChangeset for help on using the changeset viewer.