seriesmarker.gui.model.tree_series_model module

class Column[source]

Bases: enum.IntEnum

Convenience enumeration of columns used by TreeSeriesModel

EPISODE = <Column.EPISODE: 1>
PROGRESS = <Column.PROGRESS: 2>
SERIES = <Column.SERIES: 0>
__new__(value)
_member_map_ = OrderedDict([('SERIES', <Column.SERIES: 0>), ('EPISODE', <Column.EPISODE: 1>), ('PROGRESS', <Column.PROGRESS: 2>)])
_member_names_ = ['SERIES', 'EPISODE', 'PROGRESS']
_member_type_

alias of int

_value2member_map_ = {0: <Column.SERIES: 0>, 1: <Column.EPISODE: 1>, 2: <Column.PROGRESS: 2>}
class TreeSeriesModel(parent=None)[source]

Bases: PySide.QtCore.QAbstractItemModel

This model is used to display series data (including seasons and episodes) in a MainWindow.

The model stores data in a tree structure, using TreeNode and derived classes as nodes in it. Those nodes contain items (series, seasons and episodes), which contain the actual data to display.

__init__(parent=None)[source]

Initializes the model with a given parent.

Parameters:parent (PySide.QtCore.QObject) – The parent of the model.
add_item(item, parent_index=<PySide.QtCore.QModelIndex(-1, -1, 0x0, QObject(0x0) ) >)[source]

Adds a given item to the model under the given parent.

The item is wrapped in a matching TreeNode, depending on the item’s type, before it’s being added to the model. Series are being appended to the model’s root node, Season and Episode are inserted at the proper position in their parent’s children, so the display shows them in correct order (sorted by season respectively episode number).

Parameters:
  • item (object) – The item to add to the model.
  • parent_index (QModelIndex) – The index of the node to add the item to.
columnCount(parent=<PySide.QtCore.QModelIndex(-1, -1, 0x0, QObject(0x0) ) >)[source]

Describes the number of columns the model is using.

Parameters:parent (QModelIndex) – The parent to return the number of columns for.
Returns:The number of columns.

Overrides QAbstractItemModel.columnCount()

data(index, role=PySide.QtCore.Qt.ItemDataRole.DisplayRole)[source]

Returns the data stored under the given role at a given index.

Parameters:
  • index (QModelIndex) – Describes the node of the model to get data from.
  • role (int) – Determines the kind of data to get from the node.
Returns:

The string representation of the TreeNode at the given index for Qt.DisplayRole.

Returns:

The node at the given index itself for Qt.UserRole.

Returns:

The decoration() of the node at the given index for Qt.DecorationRole.

Returns:

The Qt.CheckState representing the checked() state of the node at the given index for Qt.CheckedStateRole.

Returns:

The text alignment to use for the string representation of the node at the given index for Qt.TextAlignmentRole.

Returns:

A monospace-family PySide.QtGui.QFont for column 1 and 2 for Qt.FontRole.

Returns:

None for an invalid index or other roles.

Overrides QAbstractItemModel.data()

flags(index)[source]

Describes the item flags for a given index.

Item flags determine the behavior of an item in the GUI. By (de)activating different flags, the ‘look and feel’ of an item can be changed.

Parameters:index (QModelIndex) – The index referring to the item to get flags for.
Returns:The flags Qt.ItemIsUserCheckable and Qt.ItemIsUserEnabled for TreeNode types that implement checked().
Returns:The flag Qt.ItemIsEnabled otherwise.

Overrides QAbstractItemModel.flags()

headerData(section, orientation, role)[source]

Defines the header data displayed in the GUI.

Parameters:
  • section (int) – Describes the column to get the header data for.
  • orientation (PySide.QtCore.Qt.Orientation) – Determines for which orientation of the header data should be get.
  • role (int) – Determines the kind of data to get from the model.
Returns:

The header caption for the given section as string for Qt.DisplayRole.

Returns:

PySide.QtCore.Qt.AlignCenter for Qt.TextAlignmentRole.

Returns:

None for orientations other than Qt.Horizontal.

Overrides QAbstractItemModel.headerData()

index(row, column, parent=<PySide.QtCore.QModelIndex(-1, -1, 0x0, QObject(0x0) ) >)[source]

Returns the index of the item at the given row and column of the given parent.

Parameters:
  • row (int) – The row of the item to get an index for.
  • column (int) – The column of the item to get an index for.
  • parent (QModelIndex) – The parent index of the item to get an index for.
Returns:

The QModelIndex of the item or an invalid index if no item exists at the given row or colum under the given parent.

Overrides QAbstractItemModel.index()

index_of(item, parent=<PySide.QtCore.QModelIndex(-1, -1, 0x0, QObject(0x0) ) >)[source]

Looks up the index of the item’s node in the model.

The method checks the children of the parent, referred by the given index, if any of them contains the given item as data. If the search is successful, an index referring to the containing node is returned.

Parameters:
  • item (object) – Data contained in a TreeNode to look for.
  • parent (QModelIndex) – The index referring to the parent node of the given item’s node.
Returns:

A QModelIndex, referring to the node which contains the given item if the search was successful, otherwise an invalid index.

node_at(index)[source]

Returns the node at the given index of the model.

Parameters:index (QModelIndex) – The index to get the associated node from.
Returns:The TreeNode if a node is associated with the given index, otherwise the model’s root node.
parent(child_index)[source]

Returns the index referring to the parent of the node referred by the given index.

Parameters:child_index (QModelIndex) – The index of the item to get the parent index for.
Returns:The QModelIndex, referring to the parent of the given index, or an invalid index if no parent exists.

Overrides QAbstractItemModel.parent()

Removes the series to which a given index is associated with from the model, regardless which part of the series the index describes (i.e. which part was selected in the GUI).

Parameters:index (QModelIndex) – The index which describes the series to remove.
Returns:The removed Series if successful, otherwise None.
removeRows(position, rows, parent=<PySide.QtCore.QModelIndex(-1, -1, 0x0, QObject(0x0) ) >)[source]

Removes a number of nodes from a given parent, beginning at a given position.

Parameters:
  • position (int) – The index to start removing nodes from.
  • rows (int) – The number of nodes to remove from the parent.
  • parent (QModelIndex) – The parent to remove the rows from.
Returns:

True if the nodes were successfully removed, otherwise False.

Overrides QAbstractItemModel.removeRows()

rowCount(parent=<PySide.QtCore.QModelIndex(-1, -1, 0x0, QObject(0x0) ) >)[source]

Returns the number of rows (nodes) under the given parent.

Parameters:parent (QModelIndex) – The parent to return the number of rows for.
Returns:The number of TreeNode added to the model as children of the given parent.

Overrides QAbstractItemModel.rowCount()

setData(index, value, role=PySide.QtCore.Qt.ItemDataRole.EditRole)[source]

Sets the given value of the given role at the given index.

This method is called whenever an episode is marked as (un)watched in the GUI. It then toggles the watched state of the corresponding Episode.

This method is also called whenever a banner was loaded to set a PySide.QtGui.Pixmap as the node’s decoration and refresh the views afterwards.

Parameters:
  • index (QModelIndex) – The position to set the value at.
  • value (object) – Value to be set at given index: Qt.CheckState for Qt.CheckStateRole, PySide.QtGui.Pixmap for Qt.DecorationRole.
  • role (PySide.QtCore.Qt.ItemDataRole) – Determines the kind of data to set for the item.
Returns:

True if successful, otherwise False.

Overrides QAbstractItemModel.setData()

Todo

Update of CheckState / progress kinda ugly, may be done in check(value), but needs reference to index and model - add reference to each node? Example: for change in changes: self.dataChanged.emit(change.get_index())

Todo

After upgrade to QT5, use SignalSpy in test case to check if only changes are emitted if there was really a change after checking.

staticMetaObject = <PySide.QtCore.QMetaObject object>