Exemple #1
0
    def __init__(self, parent, **params):
        self.parent = parent
        self.__completed_count__ = 0
        self.selectedRow = None
        self.params = Params(**params)
        labels = [
            "",  # first column is checkable column
            QT_I18N("datasource.files.column.filename", "Filename"),
            QT_I18N("datasource.files.column.size", "Size"),
            QT_I18N("datasource.files.column.path", "File path")
        ]
        self.labels = QStringList(labels)

        self.filesTableView = TableViewWidget(
            parent,
            selectionBehavior=QAbstractItemView.SelectRows,
            selectionMode=QAbstractItemView.SingleSelection,
            enabled_precheck_handler=self.params.enabled_precheck_handler)
        if self.params.model:
            self.filesTableView.setModel(self.params.model)
        self.filesTableView.model().setHorizontalHeaderLabels(labels)
        self.filesTableView.setEditTriggers(QAbstractItemView.NoEditTriggers)
        if self.params.onClickedAction:
            self.filesTableView.connect(self.filesTableView,
                                        SIGNAL('clicked(QModelIndex)'),
                                        self.params.onClickedAction)
            if not self.filesTableView.model() == None:
                #a signal used when selected row state is changed
                self.filesTableView.connect(
                    self.filesTableView.model(),
                    SIGNAL('itemChanged(QStandardItem *)'),
                    self.__itemChanged__)
        if self.params.sorting:
            self.filesTableView.setSortingEnabled(True)
 def __createTable__(self):
     self.__table__ = TableViewWidget(
         self,
         change_check_count_handler=self.params.
         change_selection_count_handler,  # @IgnorePep8
         check_handler=self.__check_handler__)
     self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
     self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)
Exemple #3
0
    def __init__(self, parent, **params):
        self.parent = parent
        self.__completed_count__ = 0
        self.selectedRow = None
        self.params = Params(**params)
        labels = ["",  # first column is checkable column
                  QT_I18N("datasource.files.column.filename", "Filename"),
                  QT_I18N("datasource.files.column.size", "Size"),
                  QT_I18N("datasource.files.column.path", "File path")]
        self.labels = QStringList(labels)

        self.filesTableView = TableViewWidget(parent,
                selectionBehavior=QAbstractItemView.SelectRows,
                selectionMode=QAbstractItemView.SingleSelection,
                enabled_precheck_handler=self.params.enabled_precheck_handler)
        if self.params.model:
            self.filesTableView.setModel(self.params.model)
        self.filesTableView.model().setHorizontalHeaderLabels(labels)
        self.filesTableView.setEditTriggers(QAbstractItemView.NoEditTriggers)
        if self.params.onClickedAction:
            self.filesTableView.connect(self.filesTableView,
                                        SIGNAL('clicked(QModelIndex)'),
                                        self.params.onClickedAction)
            if not self.filesTableView.model() == None:
                #a signal used when selected row state is changed
                self.filesTableView.connect(self.filesTableView.model(),
                                        SIGNAL('itemChanged(QStandardItem *)'),
                                        self.__itemChanged__)
        if self.params.sorting:
            self.filesTableView.setSortingEnabled(True)
    def __createHeadersTablePreview__(self):

        self.__createHeaderPreviewGroup__()

        self.headersTablePreview = TableViewWidget(self.fileHeaderPreviewGroup,
                            selectionBehavior=QAbstractItemView.SelectRows,
                            selectionMode=QAbstractItemView.SingleSelection)

        self.__globalCheckBox__ = CheckBoxWidget(
                                    self.fileHeaderPreviewGroup,
                                    i18n="global.data.column.index",
                                    i18n_def="Global columns indexes",
                                    clicked_handler=self.__globalClicked__)
        if self.__globalIndex__.signal:
            self.__globalCheckBox__.setChecked(True)
 def __createTable__(self):
     self.__table__ = TableViewWidget(self)
     self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
     self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)
     self.__table__.layout()
class PoincarePlotDatasourcesTableWidget(CompositeWidget):
    """
    a widget which displays selected poincare poincare plot datasource
    in a summary tachogram plots group widget
    """

    def __init__(self, parent, **params):
        get_or_put(params, "layout", QVBoxLayout())
        get_or_put(params, "i18n_def", "Selected poincare plot datasources")
        super(PoincarePlotDatasourcesTableWidget, self).__init__(parent, **params)

        self.params = Params(**params)

        self.__createTable__()
        self.__createModel__()

    def __createTable__(self):
        self.__table__ = TableViewWidget(self)
        self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
        self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.__table__.layout()

    def __createModel__(self):
        self.__table__.setModel(__PoincarePlotDatasourcesTableModel__(self))
        if self.params.data_accessors:
            for data_accessor in self.params.data_accessors:
                self.__table__.model().appendFile(data_accessor.source_name, data_accessor.path_name)

    def appendFile(self, _filename):
        self.__table__.model().appendFile(_filename)

    def checkMarkFile(self, _filename):
        pass
 def __init__(self, parent, **params):
     TableViewWidget.__init__(self, parent, **params)
     self.__dragger__ = CopyDragger(self, STATISTIC_MIME_ID, drag_only=True)
     self.setSelectionMode(QAbstractItemView.SingleSelection)
     self.setSelectionBehavior(QAbstractItemView.SelectRows)
     self.__createModel__()
 def __init__(self, parent, **params):
     TableViewWidget.__init__(self, parent, **params)
     self.params = Params(**params)
     self.setSelectionMode(QAbstractItemView.SingleSelection)
     self.setSelectionBehavior(QAbstractItemView.SelectRows)
     self.__createModel__()
 def __createTable__(self):
     self.__table__ = TableViewWidget(self,
         change_check_count_handler=self.params.change_selection_count_handler,  # @IgnorePep8
         check_handler=self.__check_handler__)
     self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
     self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)
class StatisticsSelectionWidget(GroupBoxWidget):
    #this value is set up in __createModel__ method
    VALUE_COLUMN = 0
    """
    widget which gives ability to select statistics
    """
    @temporarySettingsDecorator()
    def __init__(self, parent, **params):
        get_or_put(params, 'layout', QVBoxLayout())
        get_or_put(params, 'i18n_def', 'Statistics')
        super(StatisticsSelectionWidget, self).__init__(parent, **params)

        self.params = Params(**params)
        if self.params.statistics_base_classes == None:
            self.params.statistics_base_classes = [Asymmetry]

        if self.params.data_accessor:
            self.params.data_accessor.addListener(
                self, __StatisticsSelectionVectorListener__(self))

        self.__createButtons__()
        self.__createTable__()
        self.__createModel__()
        self.__fillStatistics__(self.params.statistics_base_classes)

    def __createTable__(self):
        self.__table__ = TableViewWidget(
            self,
            change_check_count_handler=self.params.
            change_selection_count_handler,  # @IgnorePep8
            check_handler=self.__check_handler__)
        self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
        self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)

    def __createModel__(self):
        model = __StatisticsSelectionModel__(self)
        labels = QStringList(["Statistic", "Description", "Value"])
        StatisticsSelectionWidget.VALUE_COLUMN = labels.indexOf("Value")
        model.setNumValueColumn(StatisticsSelectionWidget.VALUE_COLUMN)
        model.setHorizontalHeaderLabels(labels)
        self.__table__.setModel(model)
        self.__table__.setColumnHidden(StatisticsSelectionWidget.VALUE_COLUMN,
                                       True)

    def __createButtons__(self):
        buttons_composite = CompositeWidget(self, layout=QHBoxLayout())
        PushButtonWidget(buttons_composite,
                         i18n_def="Select all",
                         clicked_handler=self.__select_all_handler__)

        PushButtonWidget(buttons_composite,
                         i18n_def="Unselect all",
                         clicked_handler=self.__unselect_all_handler__)

    def __select_all_handler__(self):
        self.__table__.changeCheckStatForAll(True)

    def __unselect_all_handler__(self):
        self.__table__.changeCheckStatForAll(False)

    def __fillStatistics__(self, _statistics_base_classes):
        model = self.__table__.model()
        model.removeRows(0, model.rowCount())

        self.__statistics_classes__ = []

        for base_class in _statistics_base_classes:
            for subclass in get_subclasses(base_class):
                self.__statistics_classes__.append(subclass)

        #sort alphabetically
        cmp_stat = lambda x, y: cmp(x.__name__, y.__name__)
        self.__statistics_classes__ = sorted(self.__statistics_classes__,
                                             cmp_stat)

        for statistic_class in self.__statistics_classes__:
            check_column = QStandardItem('%s' % statistic_class.__name__)
            check_column.setCheckState(Qt.Unchecked)
            check_column.setCheckable(True)

            description_column = QStandardItem(
                str(statistic_class().description))  # @IgnorePep8

            value_column = QStandardItem('')

            model.appendRow([check_column, description_column, value_column])

    @property
    def statistics_classes(self):
        return self.__statistics_classes__

    def getSelectedStatisticsClasses(self):
        selected_classes = []
        model = self.__table__.model()
        for idx in range(model.rowCount()):
            item = model.item(idx)
            if item.isCheckable() and item.checkState() == Qt.Checked:
                selected_classes.append(self.__statistics_classes__[idx])
        return selected_classes

    def setStatisticsValues(self, values_map):
        """
        method to set up statistics values
        """
        if values_map == None:
            return
        #show value column
        self.__table__.setColumnHidden(StatisticsSelectionWidget.VALUE_COLUMN,
                                       False)
        for statistic_class in values_map:
            row = self.__statistics_classes__.index(statistic_class)
            self.__table__.model().setItem(
                row, StatisticsSelectionWidget.VALUE_COLUMN,
                QStandardItem(str(values_map[statistic_class])))

    def __check_handler__(self, item):
        """
        handler invoked when a user check selected row in statistics
        table view, the parameter is an model's item
        """
        if self.params.check_handler:
            if item.isCheckable():
                statistic_class = self.__statistics_classes__[item.row()]
                #parameters of outer handler check_handler are
                #statistics object and whether is checked or unchecked
                self.params.check_handler(statistic_class(),
                                          item.checkState() == Qt.Checked)

    def checkStatistic(self, _statistic):
        """
        method checks statistic identified by a parameter - statistic class
        """
        row = self.__statistics_classes__.index(_statistic)
        if row >= 0:
            item = self.__table__.model().item(row)
            if item.isCheckable():
                item.setCheckState(Qt.Checked)

    def __getSelectedStatisticsClassesNames__(self):
        return [
            statistic_class.__name__
            for statistic_class in self.getSelectedStatisticsClasses()
        ]

    @temporarySetterDecorator(
        name='selected_statistics',
        _conv=QVariant.toPyObject,
        _getter_handler=__getSelectedStatisticsClassesNames__)
    def __setSelectedStatistics__(self, _statistics_class_names):
        if not _statistics_class_names == None:
            model = self.__table__.model()
            for idx in range(model.rowCount()):
                item = model.item(idx)
                if item.isCheckable() and item.checkState() == Qt.Unchecked \
                    and self.__statistics_classes__[idx].__name__ in _statistics_class_names: # @IgnorePep8
                    item.setCheckState(Qt.Checked)
Exemple #11
0
 def __createTable__(self):
     self.__table__ = TableViewWidget(self,
             change_check_count_handler=self.__change_check_count_handler__,
             rows_inserted_handler=self.__rows_inserted_handler__)
     self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
     self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)
Exemple #12
0
class FilesTrackerWidget(CompositeWidget):
    """
    widget which tracks created files
    """
    def __init__(self, parent, **params):
        get_or_put(params, 'layout', QVBoxLayout())
        get_or_put(params, 'i18n_def', 'Files')
        super(FilesTrackerWidget, self).__init__(parent, **params)

        self.params = Params(**params)

        self.__create_oper_buttons__()
        self.__createTable__()
        self.__createModel__()
        self.__create_misc_buttons__()

    def __createTable__(self):
        self.__table__ = TableViewWidget(self,
                change_check_count_handler=self.__change_check_count_handler__,
                rows_inserted_handler=self.__rows_inserted_handler__)
        self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
        self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)

    def __createModel__(self):
        self.__table__.setModel(__FilesTrackerModel__(self))

    def __create_oper_buttons__(self):
        buttons_composite = CompositeWidget(self, layout=QHBoxLayout())
        self.__select_all__ = PushButtonWidget(buttons_composite,
                    i18n_def="Select all",
                    clicked_handler=self.__select_all_handler__,
                    enabled=False)

        self.__unselect_all__ = PushButtonWidget(buttons_composite,
                    i18n_def="Unselect all",
                    clicked_handler=self.__unselect_all_handler__,
                    enabled=False)

        self.__clear__ = PushButtonWidget(buttons_composite, i18n_def="Clear",
                    clicked_handler=self.__clear_handler__,
                    enabled=False)

    def __select_all_handler__(self):
        self.__table__.changeCheckStatForAll(True)

    def __unselect_all_handler__(self):
        self.__table__.changeCheckStatForAll(False)

    def __clear_handler__(self):
        self.__table__.clearRows()
        self.__select_all__.setEnabled(False)
        self.__unselect_all__.setEnabled(False)
        self.__clear__.setEnabled(False)
        self.__plain_view__.setEnabled(False)

    def appendFile(self, _filename):
        self.__table__.model().appendFile(_filename)

    def __create_misc_buttons__(self):
        buttons_composite = CompositeWidget(self, layout=QHBoxLayout())
        self.__plain_view__ = PushButtonWidget(buttons_composite,
                    i18n_def="Plain view",
                    clicked_handler=self.__plain_view_handler__,
                    enabled=False)

    def __plain_view_handler__(self):
        filesnames = self.__table__.model().getSelectedFiles()
        dialog = FilesPreviewDialog(normalize_filenames(filesnames), self)
        dialog.exec_()

    def __change_check_count_handler__(self, count):
        self.__plain_view__.setEnabled(count > 0)

    def __rows_inserted_handler__(self, model_index, start_row, end_row):
        self.__select_all__.setEnabled(True)
        self.__unselect_all__.setEnabled(True)
        self.__clear__.setEnabled(True)
Exemple #13
0
class FilesTableView(object):
    def __init__(self, parent, **params):
        self.parent = parent
        self.__completed_count__ = 0
        self.selectedRow = None
        self.params = Params(**params)
        labels = [
            "",  # first column is checkable column
            QT_I18N("datasource.files.column.filename", "Filename"),
            QT_I18N("datasource.files.column.size", "Size"),
            QT_I18N("datasource.files.column.path", "File path")
        ]
        self.labels = QStringList(labels)

        self.filesTableView = TableViewWidget(
            parent,
            selectionBehavior=QAbstractItemView.SelectRows,
            selectionMode=QAbstractItemView.SingleSelection,
            enabled_precheck_handler=self.params.enabled_precheck_handler)
        if self.params.model:
            self.filesTableView.setModel(self.params.model)
        self.filesTableView.model().setHorizontalHeaderLabels(labels)
        self.filesTableView.setEditTriggers(QAbstractItemView.NoEditTriggers)
        if self.params.onClickedAction:
            self.filesTableView.connect(self.filesTableView,
                                        SIGNAL('clicked(QModelIndex)'),
                                        self.params.onClickedAction)
            if not self.filesTableView.model() == None:
                #a signal used when selected row state is changed
                self.filesTableView.connect(
                    self.filesTableView.model(),
                    SIGNAL('itemChanged(QStandardItem *)'),
                    self.__itemChanged__)
        if self.params.sorting:
            self.filesTableView.setSortingEnabled(True)

    def reload(self):
        if self.filesTableView.model().rowCount() > 0:
            self.filesTableView.resizeColumnsToContents()
            self.filesTableView.scrollToTop()

    def __itemChanged__(self, item):
        self.changeCompleteState(
            1, 'add' if item.checkState() == Qt.Checked else 'sub')

    def addRow(self, row):
        self.filesTableView.model().appendRow(row)

    def clear(self):
        self.filesTableView.model().removeRows(
            0,
            self.filesTableView.model().rowCount())
        self.minCompleteState()

    def getSelectedPathAndFilename(self):
        return self.getPathAndFilename(self.selectedRow)

    def getPathAndFilename(self, modelIdx):
        if not modelIdx == None:
            model = modelIdx.model()
            path = model.item(modelIdx.row(), 3)
            filename = model.item(modelIdx.row(), 1)
            return FilePath(str(path.text()), str(filename.text()))

    def onClickedAction(self, selectedRow):
        self.selectedRow = selectedRow
        #do not remove leave as an useful example
        #checked = self.__rowChecked__(selectedRow)

    def getSelectedItems(self):
        return [
            self.filesTableView.model().item(row)
            for row in range(0,
                             self.filesTableView.model().rowCount())
            if self.filesTableView.model().item(row).checkState() == Qt.Checked
        ]

    def setCheckedRowState(self, idx, state):
        self.filesTableView.model().item(idx).setCheckState(state)

    def getRowCount(self):
        return self.filesTableView.model().rowCount()

    def setEnabled(self, enabled):
        self.filesTableView.setEnabled(enabled)

    def resizeColumnsToContents(self):
        self.filesTableView.resizeColumnsToContents()

    def changeCompleteState(self, value=0, operation='set'):
        """
        a method instead of emitting a signal completeChanged() which
        is intercepted by QWizard to enable/disable next, previous buttons
        based on value returned by isComplete method of a wizard page

        set up wizard operational's buttons enable states, because use of
        the completeChange signal causes jump to the beginning of
        a table view instead of sticking to the position where it was already
        and also dim of a selected row is observed
        """
        if operation == 'set' and value != 0:
            self.__completed_count__ = value
        elif operation == 'add':
            self.__completed_count__ = self.__completed_count__ + value
        elif operation == 'sub':
            if self.__completed_count__ - value >= 0:
                self.__completed_count__ = self.__completed_count__ - value

        #self.emit(SIGNAL("completeChanged()"))
        if self.params.wizardButtons and self.params.wizard_handler:
            for button in self.params.wizardButtons:
                self.params.wizard_handler().button(button).setEnabled(
                    self.isCompletedCount())

    def isCompletedCount(self):
        return self.getCompletedCount() > 0

    def getCompletedCount(self):
        return self.__completed_count__

    def maxCompleteState(self):
        self.changeCompleteState(self.getRowCount())

    def minCompleteState(self):
        self.changeCompleteState(0)

    def getModel(self):
        return self.filesTableView.model()

    def setColumnHidden(self, column, hide=True):
        self.filesTableView.setColumnHidden(column, hide)

    def getSelectedRow(self):
        return self.selectedRow

    def model(self):
        return self.filesTableView.model()

    def count(self):
        return self.filesTableView.model().rowCount()

    def getSelectedRowCount(self):
        return len(self.filesTableView.selectedIndexes()) / len(self.labels)

    def selectRow(self, row, emulate_click=True):
        self.filesTableView.selectRow(row)
        if emulate_click:
            model = self.filesTableView.model()
            for column in range(model.columnCount()):
                if self.filesTableView.isColumnHidden(column) == False:
                    #simulate a click on the first visible column
                    self.filesTableView.emit(SIGNAL('clicked(QModelIndex)'),
                                             model.index(row, column))
                    break
 def __init__(self, parent, **params):
     TableViewWidget.__init__(self, parent, **params)
     self.__dragger__ = CopyDragger(self, STATISTIC_MIME_ID, drag_only=True)
     self.setSelectionMode(QAbstractItemView.SingleSelection)
     self.setSelectionBehavior(QAbstractItemView.SelectRows)
     self.__createModel__()
class PoincarePlotDatasourcesTableWidget(CompositeWidget):
    """
    a widget which displays selected poincare poincare plot datasource
    in a summary tachogram plots group widget
    """
    def __init__(self, parent, **params):
        get_or_put(params, 'layout', QVBoxLayout())
        get_or_put(params, 'i18n_def', 'Selected poincare plot datasources')
        super(PoincarePlotDatasourcesTableWidget, self).__init__(parent,
                                                                 **params)

        self.params = Params(**params)

        self.__createTable__()
        self.__createModel__()

    def __createTable__(self):
        self.__table__ = TableViewWidget(self)
        self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
        self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.__table__.layout()

    def __createModel__(self):
        self.__table__.setModel(__PoincarePlotDatasourcesTableModel__(self))
        if self.params.data_accessors:
            for data_accessor in self.params.data_accessors:
                self.__table__.model().appendFile(data_accessor.source_name,
                                                  data_accessor.path_name)

    def appendFile(self, _filename):
        self.__table__.model().appendFile(_filename)

    def checkMarkFile(self, _filename):
        pass
class StatisticsSelectionWidget(GroupBoxWidget):
    #this value is set up in __createModel__ method
    VALUE_COLUMN = 0

    """
    widget which gives ability to select statistics
    """
    @temporarySettingsDecorator()
    def __init__(self, parent, **params):
        get_or_put(params, 'layout', QVBoxLayout())
        get_or_put(params, 'i18n_def', 'Statistics')
        super(StatisticsSelectionWidget, self).__init__(parent, **params)

        self.params = Params(**params)
        if self.params.statistics_base_classes == None:
            self.params.statistics_base_classes = [Asymmetry]

        if self.params.data_accessor:
            self.params.data_accessor.addListener(self,
                                __StatisticsSelectionVectorListener__(self))

        self.__createButtons__()
        self.__createTable__()
        self.__createModel__()
        self.__fillStatistics__(self.params.statistics_base_classes)

    def __createTable__(self):
        self.__table__ = TableViewWidget(self,
            change_check_count_handler=self.params.change_selection_count_handler,  # @IgnorePep8
            check_handler=self.__check_handler__)
        self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
        self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)

    def __createModel__(self):
        model = __StatisticsSelectionModel__(self)
        labels = QStringList(["Statistic", "Description", "Value"])
        StatisticsSelectionWidget.VALUE_COLUMN = labels.indexOf("Value")
        model.setNumValueColumn(StatisticsSelectionWidget.VALUE_COLUMN)
        model.setHorizontalHeaderLabels(labels)
        self.__table__.setModel(model)
        self.__table__.setColumnHidden(StatisticsSelectionWidget.VALUE_COLUMN,
                                       True)

    def __createButtons__(self):
        buttons_composite = CompositeWidget(self, layout=QHBoxLayout())
        PushButtonWidget(buttons_composite, i18n_def="Select all",
                    clicked_handler=self.__select_all_handler__)

        PushButtonWidget(buttons_composite, i18n_def="Unselect all",
                    clicked_handler=self.__unselect_all_handler__)

    def __select_all_handler__(self):
        self.__table__.changeCheckStatForAll(True)

    def __unselect_all_handler__(self):
        self.__table__.changeCheckStatForAll(False)

    def __fillStatistics__(self, _statistics_base_classes):
        model = self.__table__.model()
        model.removeRows(0, model.rowCount())

        self.__statistics_classes__ = []

        for base_class in _statistics_base_classes:
            for subclass in get_subclasses(base_class):
                self.__statistics_classes__.append(subclass)

        #sort alphabetically
        cmp_stat = lambda x, y: cmp(x.__name__, y.__name__)
        self.__statistics_classes__ = sorted(self.__statistics_classes__,
                                             cmp_stat)

        for statistic_class in self.__statistics_classes__:
            check_column = QStandardItem('%s' % statistic_class.__name__)
            check_column.setCheckState(Qt.Unchecked)
            check_column.setCheckable(True)

            description_column = QStandardItem(str(statistic_class().description)) # @IgnorePep8

            value_column = QStandardItem('')

            model.appendRow([check_column, description_column, value_column])

    @property
    def statistics_classes(self):
        return self.__statistics_classes__

    def getSelectedStatisticsClasses(self):
        selected_classes = []
        model = self.__table__.model()
        for idx in range(model.rowCount()):
            item = model.item(idx)
            if item.isCheckable() and item.checkState() == Qt.Checked:
                selected_classes.append(self.__statistics_classes__[idx])
        return selected_classes

    def setStatisticsValues(self, values_map):
        """
        method to set up statistics values
        """
        if values_map == None:
            return
        #show value column
        self.__table__.setColumnHidden(StatisticsSelectionWidget.VALUE_COLUMN,
                                       False)
        for statistic_class in values_map:
            row = self.__statistics_classes__.index(statistic_class)
            self.__table__.model().setItem(row,
                            StatisticsSelectionWidget.VALUE_COLUMN,
                            QStandardItem(str(values_map[statistic_class])))

    def __check_handler__(self, item):
        """
        handler invoked when a user check selected row in statistics
        table view, the parameter is an model's item
        """
        if self.params.check_handler:
            if item.isCheckable():
                statistic_class = self.__statistics_classes__[item.row()]
                #parameters of outer handler check_handler are
                #statistics object and whether is checked or unchecked
                self.params.check_handler(statistic_class(),
                                          item.checkState() == Qt.Checked)

    def checkStatistic(self, _statistic):
        """
        method checks statistic identified by a parameter - statistic class
        """
        row = self.__statistics_classes__.index(_statistic)
        if row >= 0:
            item = self.__table__.model().item(row)
            if item.isCheckable():
                item.setCheckState(Qt.Checked)

    def __getSelectedStatisticsClassesNames__(self):
        return [statistic_class.__name__
                for statistic_class in self.getSelectedStatisticsClasses()]

    @temporarySetterDecorator(name='selected_statistics',
                    _conv=QVariant.toPyObject,
                    _getter_handler=__getSelectedStatisticsClassesNames__)
    def __setSelectedStatistics__(self, _statistics_class_names):
        if not _statistics_class_names == None:
            model = self.__table__.model()
            for idx in range(model.rowCount()):
                item = model.item(idx)
                if item.isCheckable() and item.checkState() == Qt.Unchecked \
                    and self.__statistics_classes__[idx].__name__ in _statistics_class_names: # @IgnorePep8
                    item.setCheckState(Qt.Checked)
 def __createTable__(self):
     self.__table__ = TableViewWidget(self)
     self.__table__.setSelectionMode(QAbstractItemView.MultiSelection)
     self.__table__.setSelectionBehavior(QAbstractItemView.SelectRows)
     self.__table__.layout()
 def __init__(self, parent, **params):
     TableViewWidget.__init__(self, parent, **params)
     self.params = Params(**params)
     self.setSelectionMode(QAbstractItemView.SingleSelection)
     self.setSelectionBehavior(QAbstractItemView.SelectRows)
     self.__createModel__()
Exemple #19
0
class FilesTableView(object):
    def __init__(self, parent, **params):
        self.parent = parent
        self.__completed_count__ = 0
        self.selectedRow = None
        self.params = Params(**params)
        labels = ["",  # first column is checkable column
                  QT_I18N("datasource.files.column.filename", "Filename"),
                  QT_I18N("datasource.files.column.size", "Size"),
                  QT_I18N("datasource.files.column.path", "File path")]
        self.labels = QStringList(labels)

        self.filesTableView = TableViewWidget(parent,
                selectionBehavior=QAbstractItemView.SelectRows,
                selectionMode=QAbstractItemView.SingleSelection,
                enabled_precheck_handler=self.params.enabled_precheck_handler)
        if self.params.model:
            self.filesTableView.setModel(self.params.model)
        self.filesTableView.model().setHorizontalHeaderLabels(labels)
        self.filesTableView.setEditTriggers(QAbstractItemView.NoEditTriggers)
        if self.params.onClickedAction:
            self.filesTableView.connect(self.filesTableView,
                                        SIGNAL('clicked(QModelIndex)'),
                                        self.params.onClickedAction)
            if not self.filesTableView.model() == None:
                #a signal used when selected row state is changed
                self.filesTableView.connect(self.filesTableView.model(),
                                        SIGNAL('itemChanged(QStandardItem *)'),
                                        self.__itemChanged__)
        if self.params.sorting:
            self.filesTableView.setSortingEnabled(True)

    def reload(self):
        if self.filesTableView.model().rowCount() > 0:
            self.filesTableView.resizeColumnsToContents()
            self.filesTableView.scrollToTop()

    def __itemChanged__(self, item):
        self.changeCompleteState(1, 'add'
                if item.checkState() == Qt.Checked else 'sub')

    def addRow(self, row):
        self.filesTableView.model().appendRow(row)

    def clear(self):
        self.filesTableView.model().removeRows(0,
                                    self.filesTableView.model().rowCount())
        self.minCompleteState()

    def getSelectedPathAndFilename(self):
        return self.getPathAndFilename(self.selectedRow)

    def getPathAndFilename(self, modelIdx):
        if not modelIdx == None:
            model = modelIdx.model()
            path = model.item(modelIdx.row(), 3)
            filename = model.item(modelIdx.row(), 1)
            return FilePath(str(path.text()), str(filename.text()))

    def onClickedAction(self, selectedRow):
        self.selectedRow = selectedRow
        #do not remove leave as an useful example
        #checked = self.__rowChecked__(selectedRow)

    def getSelectedItems(self):
        return [self.filesTableView.model().item(row)
                for row in range(0, self.filesTableView.model().rowCount())
        if self.filesTableView.model().item(row).checkState() == Qt.Checked]

    def setCheckedRowState(self, idx, state):
        self.filesTableView.model().item(idx).setCheckState(state)

    def getRowCount(self):
        return self.filesTableView.model().rowCount()

    def setEnabled(self, enabled):
        self.filesTableView.setEnabled(enabled)

    def resizeColumnsToContents(self):
        self.filesTableView.resizeColumnsToContents()

    def changeCompleteState(self, value=0, operation='set'):
        """
        a method instead of emitting a signal completeChanged() which
        is intercepted by QWizard to enable/disable next, previous buttons
        based on value returned by isComplete method of a wizard page

        set up wizard operational's buttons enable states, because use of
        the completeChange signal causes jump to the beginning of
        a table view instead of sticking to the position where it was already
        and also dim of a selected row is observed
        """
        if operation == 'set' and value != 0:
            self.__completed_count__ = value
        elif operation == 'add':
            self.__completed_count__ = self.__completed_count__ + value
        elif operation == 'sub':
            if self.__completed_count__ - value >= 0:
                self.__completed_count__ = self.__completed_count__ - value

        #self.emit(SIGNAL("completeChanged()"))
        if self.params.wizardButtons and self.params.wizard_handler:
            for button in self.params.wizardButtons:
                self.params.wizard_handler().button(button).setEnabled(
                                                    self.isCompletedCount())

    def isCompletedCount(self):
        return self.getCompletedCount() > 0

    def getCompletedCount(self):
        return self.__completed_count__

    def maxCompleteState(self):
        self.changeCompleteState(self.getRowCount())

    def minCompleteState(self):
        self.changeCompleteState(0)

    def getModel(self):
        return self.filesTableView.model()

    def setColumnHidden(self, column, hide=True):
        self.filesTableView.setColumnHidden(column, hide)

    def getSelectedRow(self):
        return self.selectedRow

    def model(self):
        return self.filesTableView.model()

    def count(self):
        return self.filesTableView.model().rowCount()

    def getSelectedRowCount(self):
        return len(self.filesTableView.selectedIndexes()) / len(self.labels)

    def selectRow(self, row, emulate_click=True):
        self.filesTableView.selectRow(row)
        if emulate_click:
            model = self.filesTableView.model()
            for column in range(model.columnCount()):
                if self.filesTableView.isColumnHidden(column) == False:
                    #simulate a click on the first visible column
                    self.filesTableView.emit(SIGNAL('clicked(QModelIndex)'),
                                         model.index(row, column))
                    break