docs: def moveCursor(self, cursorAction, modifiers):
          """
          Returns a QModelIndex object pointing to the next object in the 
          view, based on the given cursorAction and keyboard modifiers 
          specified by modifiers.
          
          :param      modifiers | <QtCore.Qt.KeyboardModifiers>
          """
          # moves to the next index
          if cursorAction not in (self.MoveNext,
                                  self.MoveRight,
                                  self.MovePrevious,
                                  self.MoveLeft,
                                  self.MoveHome,
                                  self.MoveEnd):
              return super(XTreeWidget, self).moveCursor(cursorAction, modifiers)
          
          header = self.header()
          index = self.currentIndex()
          row  = index.row()
          col  = index.column()
          vcol = None
          
          if cursorAction == self.MoveEnd:
              vcol = header.count() - 1
              delta = -1
          elif cursorAction == self.MoveHome:
              vcol = 0
              delta = +1
          elif cursorAction in (self.MoveNext, self.MoveRight):
              delta = +1
          elif cursorAction in (self.MovePrevious, self.MoveLeft):
              delta = -1
          
          if vcol is None:
              vcol = header.visualIndex(col) + delta
          
          ncol = header.count()
          lcol = header.logicalIndex(vcol)
          
          while 0 <= vcol and vcol < ncol and self.isColumnHidden(lcol):
              vcol += delta
              lcol = header.logicalIndex(vcol)
          
          sibling = index.sibling(index.row(), lcol)
          if sibling and sibling.isValid():
              return sibling
          elif delta < 0:
              return index.sibling(index.row() - 1, header.logicalIndex(ncol - 1))
          else:
              return index.sibling(index.row() + 1, header.visualIndex(0))