Ejemplo n.º 1
0
    def load_table_selection(self, selection_data):
        """
        Attempts to load selection by supplied data set.

        Args:
            selection_data(dict): See save method for data's structure.
        """
        self.clearSelection()

        if not selection_data:
            return

        selection_model = self.selectionModel()
        item_selection = QtCore.QItemSelection()

        for inf, vert_indexes in selection_data.items():
            if inf not in self.table_model.display_infs:
                continue

            column = self.table_model.display_infs.index(inf)

            for vert_index in vert_indexes:
                if vert_index not in self._editor_inst.vert_indexes:
                    continue

                row = self._editor_inst.vert_indexes.index(vert_index)
                index = self.model().index(row, column)
                item_selection.append(QtCore.QItemSelectionRange(index, index))

        selection_model.select(item_selection, QtCore.QItemSelectionModel.Select)
Ejemplo n.º 2
0
 def _selectRows(self, indexes: typing.Iterable[int]) -> None:
     for index in indexes:
         self.selectionModel().select(
             QtCore.QItemSelection(self.model().index(index, 0),
                                   self.model().index(index, 2)),
             gg(QtCore.QItemSelectionModel.Select, typing.Any)
             | QtCore.QItemSelectionModel.Rows)
Ejemplo n.º 3
0
 def dropEvent(self, event):
     """
     drop event handler : moving layer
     @param event:
     @type event: Qevent
     """
     if event.source() is not self:
         return
     # get selected rows and layers
     rows = set([mi.row() for mi in self.selectedIndexes()])
     rStack = self.img.layersStack[::-1]
     layers = [rStack[i] for i in rows]
     # get target row and layer
     targetRow = self.indexAt(event.pos()).row()
     targetLayer = rStack[targetRow]
     # remove target from selection
     if targetRow in rows:
         rows.discard(targetRow)
     rows = sorted(rows)
     if not rows:
         return
     # if target is below last row insert at the last position
     if targetRow == -1:
         targetRow = self.model().rowCount()
     # mapping of src (row) indices to target indices
     rowMapping = dict()
     for idx, row in enumerate(rows):
         if row < targetRow:
             rowMapping[row] = targetRow + idx
         else:
             rowMapping[row + len(rows)] = targetRow + idx
     # update layerStack using rowMapping
     # insert None items
     for _ in range(len(rows)):
         rStack.insert(targetRow, None)
     # copy moved items to their final place
     for srcRow, tgtRow in sorted(
             rowMapping.items()):  # python 3 iteritems->items
         rStack[tgtRow] = rStack[srcRow]
     # remove moved items from their initial place
     for row in reversed(sorted(
             rowMapping.keys())):  # python 3 iterkeys -> keys
         rStack.pop(row)
     self.img.layersStack = rStack[::-1]
     # update model
     # insert empty rows
     for _ in range(len(rows)):
         result = self.model().insertRow(targetRow, QModelIndex())
     # copy moved rows to their final place
     colCount = self.model().columnCount()
     for srcRow, tgtRow in sorted(
             rowMapping.items()):  # python 3 iteritems->items
         for col in range(0, colCount):
             # CAUTION : setItem calls the data changed event handler (cf. setLayers above)
             self.model().setItem(tgtRow, col,
                                  self.model().takeItem(srcRow, col))
     # remove moved rows from their initial place and keep track of moved items
     movedDict = rowMapping.copy()
     for row in reversed(sorted(
             rowMapping.keys())):  # python 3 iterkeys -> keys
         self.model().removeRow(row)
         for s, t in rowMapping.items():
             if t > row:
                 movedDict[s] -= 1
     ######################################### sanity check
     for r in range(self.model().rowCount()):
         id = self.model().index(r, 1)
         if id.data() != rStack[r].name:
             raise ValueError('Drop Error')
     ########################################
     # reselect moved rows
     sel = sorted(movedDict.values())
     selectionModel = QtCore.QItemSelectionModel(self.model())
     self.setSelectionModel(selectionModel)
     index1 = self.model().index(sel[0], 1)
     index2 = self.model().index(sel[-1], 1)
     itemSelection = QtCore.QItemSelection(index1, index2)
     self.selectionModel().select(
         itemSelection, QtCore.QItemSelectionModel.Rows
         | QtCore.QItemSelectionModel.Select)
     # multiple selection : display no window
     if len(sel) > 1:
         self.currentWin.hide()
         self.currentWin = None
     elif len(sel) == 1:
         self.img.setActiveLayer(len(self.img.layersStack) - sel[0] - 1)
     # update stack
     self.img.layersStack[0].applyToStack()
     self.img.onImageChanged()
Ejemplo n.º 4
0
 def _selectRowRange(self, fromRow, toRow):
     self.selectionModel().select(
         QtCore.QItemSelection(self.model().index(fromRow, 0),
                               self.model().index(toRow, 0)),
         gg(QtCore.QItemSelectionModel.Select, typing.Any)
         | QtCore.QItemSelectionModel.Rows)