Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/v4' into v4
Browse files Browse the repository at this point in the history
  • Loading branch information
MicBoucinha committed May 3, 2019
2 parents facb9f4 + fb4d891 commit 2ac7740
Show file tree
Hide file tree
Showing 10 changed files with 208 additions and 34 deletions.
2 changes: 1 addition & 1 deletion pyforms_gui/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
__author__ = "Ricardo Ribeiro"
__credits__ = ["Ricardo Ribeiro"]
__license__ = "MIT"
__version__ = "4.7"
__version__ = "4.901"
__maintainer__ = "Ricardo Ribeiro"
__email__ = "ricardojvr@gmail.com"
__status__ = "Development"
Expand Down
27 changes: 27 additions & 0 deletions pyforms_gui/appmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ def __init__(self, ClassObject):
widget.form.layout().setMargin(widget.margin)

# print dock.objectName(),1
#widget.parent = self
dock.setWidget(widget.form)
dock.setWindowTitle(widget.label)
widget.dock = dock
Expand All @@ -96,6 +97,8 @@ def __init__(self, ClassObject):
elif _api.USED_API == _api.QT_API_PYQT5:
widget.form.layout().setMargin(widget.margin)

#widget.parent = self

# print dock.objectName(), 2
dock.setObjectName(name)
dock.setWidget(widget.form)
Expand All @@ -119,8 +122,32 @@ def __init__(self, ClassObject):
logger.debug('Import stylesheets: {0}'.format(stylesheet_files))
self.loadStyleSheetFile(stylesheet_files)

def keyReleaseEvent(self, evt):
super().keyReleaseEvent(evt)
self._widget.keyReleaseEvent(evt)

def keyPressEvent(self, evt):
super().keyPressEvent(evt)
self._widget.keyPressEvent(evt)

def mousePressEvent(self, evt):
super().mousePressEvent(evt)
self._widget.mousePressEvent(evt)

def mouseReleaseEvent(self, evt):
super().mouseReleaseEvent(evt)
self._widget.mouseReleaseEvent(evt)

def mouseMoveEvent(self, evt):
super().mouseMoveEvent(evt)
self._widget.mouseMoveEvent(evt)

def mouseDoubleClickEvent(self, evt):
super().mouseDoubleClickEvent(evt)
self._widget.mouseDoubleClickEvent(evt)

def closeEvent(self, event):
super().closeEvent(event)
self._widget.closeEvent(event)

def __initMainMenu(self, options, keys={}):
Expand Down
4 changes: 3 additions & 1 deletion pyforms_gui/basewidget.py
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,9 @@ def save_window(self):
self.save_form(data)

filename, _ = QFileDialog.getSaveFileName(self, 'Select file')
with open(filename, 'w') as output_file: json.dump(data, output_file)
if filename:
with open(filename, 'w') as output_file:
json.dump(data, output_file)

def load_form_filename(self, filename):
with open(filename, 'r') as pkl_file:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from pyforms_gui.controls.control_event_timeline.graphs.win_graph_to_event import Graph2Event
from pyforms_gui.controls.control_event_timeline.graphs.win_graph_properties import GraphsProperties
from pyforms_gui.controls.control_event_timeline.graphs.win_events_generator import GraphsEventsGenerator

import traceback


class ControlEventTimeline(ControlBase, QWidget):
Expand Down Expand Up @@ -217,14 +217,15 @@ def __sub__(self, other):
self._graph2event_win -= other
return self

def add_event(self, begin, end, title='', row=0):
def add_event(self, begin, end, title='', row=0, track=None):
"""
:param begin: Initial frame
:param end: Last frame
:param title: Event title
:param row: Row to which the event should be added.
"""
self._time.add_event(begin, end, title=title, row=row)

self._time.add_event(begin, end, title=title, track=track, row=row)
self._time.repaint()

def add_graph(self, name, data):
Expand All @@ -236,6 +237,24 @@ def add_graph(self, name, data):
"""
self._time.add_graph(name, data)

def add_track(self, title='', color=None):
"""
Add a new track.
:param str title: Title of the track.
:param QColor color: Default color of the events in the track.
:return: Return the added track.
"""
return self._time.add_track(title=title, color=color)

def get_track(self, title):
"""
Get a track by its title
:param str title: Title of the track.
:return: Return the track with the matching title.
"""
return self._time.get_track(title)


def rename_graph(self, graph_index, newname):
"""
Rename a graph by index.
Expand Down Expand Up @@ -365,6 +384,10 @@ def __graph2event_event(self):
#### PROPERTIES ##########################################################
##########################################################################

@property
def timeline_widget(self):
return self._time

@property
def value(self):
return self._time.position
Expand Down Expand Up @@ -512,6 +535,7 @@ def __export(self):
self._time.exportmatrix_events_to_csvwriter(spamwriter)

except Exception as e:
traceback.print_exc()
m = QMessageBox(QMessageBox.Critical, 'Error', str(e))
m.exec_()

Expand All @@ -530,6 +554,7 @@ def __export_2_csv_matrix(self):
spamwriter = csv.writer(csvfile, dialect='excel')
self._time.exportmatrix_events_to_csvwriter(spamwriter)
except Exception as e:
traceback.print_exc()
m = QMessageBox(QMessageBox.Critical, 'Error', str(e))
m.exec_()

Expand Down
3 changes: 2 additions & 1 deletion pyforms_gui/controls/control_event_timeline/graphs/graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ def __unicode__(self): return self._name
def __str__(self): return self._name

def __len__(self): return len(self._data)
def __getitem__(self, index): return self._data[index] if index<len(self) else None
def __getitem__(self, index):
return self._data[index] if index<len(self) else None
def __setitem__(self, index, value):
if index >= len(self):
for i in range(len(self), index + 1): self._data.append(None)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from pyforms_gui.controls.control_number import ControlNumber
from pyforms_gui.controls.control_label import ControlLabel
from AnyQt.QtWidgets import QMessageBox
import traceback

class Graph2Event(BaseWidget):

Expand Down Expand Up @@ -93,9 +94,12 @@ def __generage_events_evt(self):
last_value = False

try:
for i in range(max_frame):
value = eval(equation)

for i in range(max_frame):
try:
value = eval(equation)
except:
value = False

if not last_value and bool(value):
last_index = i
last_value = True
Expand All @@ -109,6 +113,7 @@ def __generage_events_evt(self):
if last_value and (max_frame-last_index) >= self._mindiff.value:
self._timeline.add_event(last_index, max_frame, title=self._eventname.value, row=int(self._rownumber.value) )
except Exception as e:
traceback.print_exc()
QMessageBox.warning( self, "Error!", str(e) )


Expand Down
122 changes: 113 additions & 9 deletions pyforms_gui/controls/control_event_timeline/timeline_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,18 @@ def add_track(self, title='', color=None):
self.setMinimumHeight(Track.which_top(len(self._tracks)))
return t

def add_event(self, begin, end, title='', track=None, lock=False, color=None):
def get_track(self, title):
"""
Get a track by its title
:param str title: Title of the track.
:return: Return the track with the matching title.
"""
for track in self.tracks:
if track.title==title:
return track
return None

def add_event(self, begin, end, title='', track=None, lock=False, color=None, row=0):
"""
Add a new event to the timeline.
:param int begin: Initial frame of the event.
Expand All @@ -147,6 +158,10 @@ def add_event(self, begin, end, title='', track=None, lock=False, color=None):
:param QColor color: Color of the event.
:return: Return the created Event object.
"""
if track is None:
for i in range( len(self._tracks), row+1):
self.add_track()
track = self._tracks[row]
return Event( begin, end, title=title, lock=lock, color=color, track=track, widget=self)

def remove_selected_event(self):
Expand Down Expand Up @@ -438,11 +453,6 @@ def mouseDoubleClickEvent(self, event):
self.repaint()

def key_release_event(self, event):
pass

def keyReleaseEvent(self, event: QKeyEvent):
self.key_release_event(event)

if self._selected is not None:
modifier = int(event.modifiers())

Expand All @@ -467,7 +477,7 @@ def keyReleaseEvent(self, event: QKeyEvent):
if event.key() == QtCore.Qt.Key_L:
self.toggle_selected_event_lock()

# Lock or unlock an event
# Move to the next event
if event.key() == QtCore.Qt.Key_E:
index = self.selected_row.events.index(self._selected)
if index < len(self.selected_row.events)-1:
Expand Down Expand Up @@ -555,8 +565,22 @@ def keyReleaseEvent(self, event: QKeyEvent):
elif event.key() == QtCore.Qt.Key_D:
self.position = self.position + 1

# Move to the first event
elif event.key() == QtCore.Qt.Key_E:
if self.selected_row is not None and len(self.selected_row)>0:
self._selected = self.selected_row.events[0]
self.position = self._selected.begin

# Move to the last event
elif event.key() == QtCore.Qt.Key_Q:
if self.selected_row is not None and len(self.selected_row)>0:
self._selected = self.selected_row.events[len(self.selected_row)-1]
self.position = self._selected.begin

def keyReleaseEvent(self, event: QKeyEvent):
super(TimelineWidget, self).keyReleaseEvent(event)

self.key_release_event(event)


def mousePressEvent(self, event):
Expand Down Expand Up @@ -708,8 +732,6 @@ def __set_frame_visible(self, frame_index):
#### PROPERTIES ##########################################################
##########################################################################



@property
def scrollbar(self):
"""
Expand Down Expand Up @@ -794,6 +816,88 @@ def current_mouseover_track(self):
return None
return (self._mouse_current_pos[1] - self.EVENT_HEIGHT) // self.TRACK_HEIGHT

self._moving = False # flag: moving an event.
self._resizing_began = False # flag: resize of an event is active.
self._resizing_ended = False # flag: resize of an event ended.
self._creating_event = False # flag: event is being created
self._creating_event_start = None # flag: the S key pressed to create an event is active
self._creating_event_end = None # flag: the S key was pressed to finish the event

self._selected = None # selected event.
self._selected_track = None # selected track.
self._pointer = Pointer(0, self) # timeline pointer.

# 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

@property
def selected(self):
return self._selected

@selected.setter
def selected(self, value):
self._selected = value

@property
def pointer(self):
return self._pointer

@pointer.setter
def pointer(self, value):
self._pointer = value

@property
def moving(self):
return self._moving

@moving.setter
def moving(self, value):
self._moving = value

@property
def resizing_began(self):
return self._resizing_began

@resizing_began.setter
def resizing_began(self, value):
self._resizing_began = value

@property
def resizing_ended(self):
return self._resizing_ended

@resizing_ended.setter
def resizing_ended(self, value):
self._resizing_ended = value

@property
def creating_event(self):
return self._creating_event

@creating_event.setter
def creating_event(self, value):
self._creating_event = value

@property
def creating_event_start(self):
return self._creating_event_start

@creating_event_start.setter
def creating_event_start(self, value):
self._creating_event_start = value

@property
def creating_event_end(self):
return self._creating_event_end

@creating_event_end.setter
def creating_event_end(self, value):
self._creating_event_end = value

@property
def selected_row(self):
"""
Expand Down

0 comments on commit 2ac7740

Please sign in to comment.