def mousePressEvent(self, event): # Select the track selected_track = Track.whichTrack(event.y()) if selected_track <= len(self._tracks): self._selected_track = selected_track # Select the period bar self._selected = self.selectDelta(event.x(), event.y()) self._moving = False self._resizingBegin = False self._resizingEnd = False if self._selected is not None: # Select the action if event.buttons() == QtCore.Qt.LeftButton: if self._selected.canSlideEnd(event.x(), event.y()): self._resizingEnd = True elif self._selected.canSlideBegin(event.x(), event.y()): self._resizingBegin = True elif self._selected.collide(event.x(), event.y()): self._moving = True if event.y() <= 20 and not self._moving: self._pointer.position = event.x() self.repaint()
def mousePressEvent(self, event): # Select the track selected_track = Track.whichTrack(event.y()) if selected_track <= len(self._tracks): self._selected_track = selected_track # Select the period bar self._selected = self.selectDelta(event.x(), event.y()) self._moving = False self._resizingBegin = False self._resizingEnd = False if self._selected is not None: # Select the action if event.buttons() == QtCore.Qt.LeftButton: if self._selected.canSlideEnd(event.x(), event.y()): self._resizingEnd = True elif self._selected.canSlideBegin(event.x(), event.y()): self._resizingBegin = True elif self._selected.collide(event.x(), event.y()): self._moving = True if event.y() <= 20 and not self._moving: self._pointer.position = self.x2frame(event.x()) self.repaint()
def track(self, value): # if the object exists in other track remove it if self.track < len(self._parent._tracks) and self in self._parent._tracks[self.track].periods: self.remove() # Verify if the new track exists. In case not create it self._top = Track.whichTop(value) if self.track >= len(self._parent._tracks): self._parent.addTrack() # if do not exists in the track add it if self not in self._parent._tracks[self.track].periods: self._parent._tracks[self.track].periods.append(self)
def track(self, value): #if the object exists in other track remove it if self.track<len(self._parent._tracks) and self in self._parent._tracks[self.track].periods: self.remove() #Verify if the new track exists. In case not create it self._top = Track.whichTop(value) if self.track>=len(self._parent._tracks): self._parent.addTrack() #if do not exists in the track add it if self not in self._parent._tracks[self.track].periods: self._parent._tracks[self.track].periods.append(self)
def add_period(self, value, row=0, color=None): """Adds an annotated interval.""" begin, end, title = value period = TimelineDelta(begin, end, title=title, parent=self, top=Track.whichTop(row)) self._tracks[period.track].periods.append(period) return period
def import_csv(self, csvfileobject): """ Extracts info from a file object and stores it in memory in order to display it on the timeline. Refer to the `export` method to learn about input file format and structure. """ # Clear previously stored info self._tracks = [] self._selected = None for row in csvfileobject: if row[0] == "T": track = Track(parent=self) track.properties = row self._tracks.append(track) elif row[0] == "P": period = TimelineDelta(0, parent=self) period.properties = row
def move(self, x, y): if self._lock: return if (self.begin + x) >= 0 and (self.end + x) <= self._parent.width(): self._begin += x / self._parent._scale self._end += x / self._parent._scale current_track = self.track new_track = Track.whichTrack(y) if current_track != new_track and new_track >= 0 and new_track <= self._parent.numberoftracks: self.track = new_track self.checkNumberOfTracks()
def selectDelta(self, x, y): # Check if the timeline pointer was selected if y <= 20: if self._pointer.collide(x, y): return self._pointer else: return None # Check if the timeline periods were selected i = Track.whichTrack(y) if i >= len(self._tracks): return None return self._tracks[i].selectDelta(x, y)
def selectDelta(self, x, y): # Check if the timeline pointer was selected if y <= 20: if self._pointer.collide(x, y): return self._pointer else: return None # Check if the timeline periods were selected i = Track.whichTrack(y) if i>=len(self._tracks): return None return self._tracks[i].selectDelta(x,y)
def __init__(self, parent_control): super(TimelineWidget, self).__init__() self.parent_control = parent_control # self.setFocusPolicy(QtCore.Qt.StrongFocus) # self.grabKeyboard() self.setMouseTracking(True) self.setMinimumWidth(300000) # self.setMinimumHeight(30) # Timeline background color palette = self.palette() palette.setColor(self.backgroundRole(), QtCore.Qt.white) self.setPalette(palette) self._chartsColors = [ QtGui.QColor(255, 0, 0), QtGui.QColor(0, 100, 0), QtGui.QColor(0, 0, 255), QtGui.QColor(100, 100, 0), QtGui.QColor(100, 0, 100), QtGui.QColor(0, 100, 100) ] self._charts = [] self._tracks = [Track(parent=self)] self._scale = 1.0 self._lastMouseY = None self._moving = False self._resizingBegin = False self._resizingEnd = False self._creating_event = False self._creating_event_start = None self._creating_event_end = None self._n_tracks = 1 self._selected = None self._selected_track = 0 self._pointer = TimelinePointer(0, self) # Video playback controls self._video_playing = False self._video_fps = None self._video_fps_min = None self._video_fps_max = None self._video_fps_inc = None
def track(self, value): if value!=self.track: self.remove() self._top = Track.whichTop(value) self._parent._tracks[self.track].periods.append(self)
def track(self): return Track.whichTrack(self._top) @track.setter
def track(self): return Track.whichTrack(self._top)
def addPeriod(self, value, track=0, color=None): """Adds an annotated interval.""" begin, end, title = value period = TimelineDelta(begin, end, title=title, parent=self, top=Track.whichTop(track)) self._tracks[period.track].periods.append(period)
def track(self, value): if value != self.track: self.remove() self._top = Track.whichTop(value) if self.track >= len(self._parent._tracks): self._parent.addTrack() self._parent._tracks[self.track].periods.append(self)
def addTrack(self): t = Track(parent=self) self._tracks.append(t) self.setMinimumHeight( Track.whichTop( len(self._tracks) ) ) return t
def remove_track(self, track): self._tracks.remove(track) self.setMinimumHeight(Track.whichTop(len(self._tracks)))
def add_track(self): t = Track(parent=self) self._tracks.append(t) self.setMinimumHeight(Track.whichTop(len(self._tracks))) return t
def __init__(self, parent_control): super(TimelineWidget, self).__init__() self.parent_control = parent_control # self.setFocusPolicy(QtCore.Qt.StrongFocus) # self.grabKeyboard() self.setMouseTracking(True) self.setMinimumWidth(300000) # self.setMinimumHeight(30) # Timeline background color palette = self.palette() palette.setColor(self.backgroundRole(), QtCore.Qt.white) self.setPalette(palette) self._chartsColors = [ QColor(240, 163, 255), QColor(0, 117, 220), QColor(153, 63, 0), QColor(76, 0, 92), QColor(25, 25, 25), QColor(0, 92, 49), QColor(43, 206, 72), QColor(255, 204, 153), QColor(128, 128, 128), QColor(148, 255, 181), QColor(143, 124, 0), QColor(157, 204, 0), QColor(194, 0, 136), QColor(0, 51, 128), QColor(255, 164, 5), QColor(255, 168, 187), QColor(66, 102, 0), QColor(255, 0, 16), QColor(94, 241, 242), QColor(0, 153, 143), QColor(116, 10, 255), QColor(153, 0, 0), QColor(255, 255, 0), QColor(255, 80, 5) ] self._charts = [] self._tracks = [Track(parent=self)] self._scale = 1.0 self._lastMouseY = None self._mouse_current_pos = None self._moving = False self._resizingBegin = False self._resizingEnd = False self._creating_event = False self._creating_event_start = None self._creating_event_end = None self._n_tracks = 1 self._selected = None self._selected_track = 0 self._pointer = TimelinePointer(0, self) # Video playback controls self._video_playing = False self._video_fps = None self._video_fps_min = None self._video_fps_max = None self._video_fps_inc = None