Changeset 10703:5521edca468f in orange


Ignore:
Timestamp:
04/02/12 13:17:46 (2 years ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
rebase_source:
27f5b953ae8302436f63d53819859499d68cf2f8
Message:

Added copy (Control + C) support to Data Table widget.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Data/OWDataTable.py

    r10601 r10703  
    150150                  self.index(len(self.examples) - 1, len(self.all_attrs) - 1) 
    151151                  ) 
    152              
     152 
     153 
     154class TableViewWithCopy(QTableView): 
     155    def keyPressEvent(self, event): 
     156        if event == QKeySequence.Copy: 
     157            sel_model = self.selectionModel() 
     158            try: 
     159                self.copy_selection_to_clipboard(sel_model) 
     160            except Exception: 
     161                import traceback 
     162                traceback.print_exc(file=sys.stderr) 
     163        else: 
     164            return QTableView.keyPressEvent(self, event) 
     165             
     166    def copy_selection_to_clipboard(self, selection_model): 
     167        """Copy table selection to the clipboard. 
     168        """ 
     169        # TODO: html/rtf table 
     170        import csv 
     171        from StringIO import StringIO 
     172        rows = selection_model.selectedRows(0) 
     173        lines = [] 
     174        csv_str = StringIO() 
     175        csv_writer = csv.writer(csv_str, dialect="excel") 
     176        tsv_str = StringIO() 
     177        tsv_writer = csv.writer(tsv_str, dialect="excel-tab") 
     178        for row in rows: 
     179            line = [] 
     180            for i in range(self.model().columnCount()): 
     181                index = self.model().index(row.row(), i) 
     182                val = index.data(Qt.DisplayRole) 
     183                line.append(unicode(val.toString())) 
     184 
     185            csv_writer.writerow(line) 
     186            tsv_writer.writerow(line) 
     187 
     188        csv_lines = csv_str.getvalue() 
     189        tsv_lines = tsv_str.getvalue() 
     190 
     191        mime = QMimeData() 
     192        mime.setData("text/csv", QByteArray(csv_lines)) 
     193        mime.setData("text/tab-separated-values", QByteArray(tsv_lines)) 
     194        mime.setData("text/plain", QByteArray(tsv_lines)) 
     195        QApplication.clipboard().setMimeData(mime, QClipboard.Clipboard) 
     196 
    153197 
    154198class OWDataTable(OWWidget): 
     
    275319            self.showMetas[id] = (True, []) 
    276320 
    277             table = QTableView() 
     321            table = TableViewWithCopy() #QTableView() 
    278322            table.setSelectionBehavior(QAbstractItemView.SelectRows) 
    279323            table.setSortingEnabled(True) 
Note: See TracChangeset for help on using the changeset viewer.