boris-behav-obs 8.16.6__py3-none-any.whl → 9.7.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- boris/__init__.py +1 -1
- boris/__main__.py +1 -1
- boris/about.py +24 -40
- boris/add_modifier.py +88 -80
- boris/add_modifier_ui.py +235 -131
- boris/advanced_event_filtering.py +23 -29
- boris/analysis_plugins/__init__.py +0 -0
- boris/analysis_plugins/_latency.py +59 -0
- boris/analysis_plugins/irr_cohen_kappa.py +109 -0
- boris/analysis_plugins/irr_cohen_kappa_with_modifiers.py +112 -0
- boris/analysis_plugins/irr_weighted_cohen_kappa.py +157 -0
- boris/analysis_plugins/irr_weighted_cohen_kappa_with_modifiers.py +162 -0
- boris/analysis_plugins/list_of_dataframe_columns.py +22 -0
- boris/analysis_plugins/number_of_occurences.py +22 -0
- boris/analysis_plugins/number_of_occurences_by_independent_variable.py +54 -0
- boris/analysis_plugins/time_budget.py +61 -0
- boris/behav_coding_map_creator.py +228 -229
- boris/behavior_binary_table.py +33 -50
- boris/behaviors_coding_map.py +17 -18
- boris/boris_cli.py +6 -25
- boris/cmd_arguments.py +12 -1
- boris/coding_pad.py +16 -34
- boris/config.py +108 -49
- boris/config_file.py +58 -67
- boris/connections.py +105 -58
- boris/converters.py +13 -37
- boris/converters_ui.py +187 -110
- boris/cooccurence.py +250 -0
- boris/core.py +2106 -1277
- boris/core_qrc.py +15892 -10829
- boris/core_ui.py +941 -806
- boris/db_functions.py +17 -42
- boris/dev.py +134 -0
- boris/dialog.py +461 -242
- boris/duration_widget.py +9 -14
- boris/edit_event.py +61 -31
- boris/edit_event_ui.py +208 -97
- boris/event_operations.py +405 -281
- boris/events_cursor.py +25 -17
- boris/events_snapshots.py +36 -82
- boris/exclusion_matrix.py +4 -9
- boris/export_events.py +180 -203
- boris/export_observation.py +60 -73
- boris/external_processes.py +123 -98
- boris/geometric_measurement.py +427 -218
- boris/gui_utilities.py +91 -14
- boris/image_overlay.py +4 -4
- boris/import_observations.py +190 -98
- boris/ipc_mpv.py +304 -0
- boris/irr.py +20 -57
- boris/latency.py +31 -24
- boris/measurement_widget.py +14 -18
- boris/media_file.py +17 -19
- boris/menu_options.py +16 -6
- boris/modifier_coding_map_creator.py +1013 -0
- boris/modifiers_coding_map.py +7 -9
- boris/mpv2.py +127 -36
- boris/observation.py +493 -210
- boris/observation_operations.py +1010 -391
- boris/observation_ui.py +573 -363
- boris/observations_list.py +51 -58
- boris/otx_parser.py +74 -68
- boris/param_panel.py +45 -59
- boris/param_panel_ui.py +254 -138
- boris/player_dock_widget.py +91 -56
- boris/plot_data_module.py +18 -53
- boris/plot_events.py +56 -153
- boris/plot_events_rt.py +16 -30
- boris/plot_spectrogram_rt.py +80 -56
- boris/plot_waveform_rt.py +23 -48
- boris/plugins.py +431 -0
- boris/portion/__init__.py +18 -8
- boris/portion/const.py +35 -18
- boris/portion/dict.py +5 -5
- boris/portion/func.py +2 -2
- boris/portion/interval.py +21 -41
- boris/portion/io.py +41 -32
- boris/preferences.py +304 -123
- boris/preferences_ui.py +684 -227
- boris/project.py +293 -270
- boris/project_functions.py +618 -537
- boris/project_import_export.py +204 -213
- boris/project_ui.py +673 -441
- boris/qrc_boris.py +6 -3
- boris/qrc_boris5.py +6 -3
- boris/select_modifiers.py +62 -90
- boris/select_observations.py +19 -197
- boris/select_subj_behav.py +67 -39
- boris/state_events.py +51 -33
- boris/subjects_pad.py +6 -8
- boris/synthetic_time_budget.py +25 -17
- boris/time_budget_functions.py +169 -169
- boris/time_budget_widget.py +71 -86
- boris/transitions.py +41 -41
- boris/utilities.py +562 -222
- boris/version.py +3 -3
- boris/video_equalizer.py +16 -14
- boris/video_equalizer_ui.py +199 -130
- boris/video_operations.py +78 -28
- boris/view_df.py +104 -0
- boris/view_df_ui.py +75 -0
- boris/write_event.py +240 -136
- boris_behav_obs-9.7.2.dist-info/METADATA +140 -0
- boris_behav_obs-9.7.2.dist-info/RECORD +109 -0
- {boris_behav_obs-8.16.6.dist-info → boris_behav_obs-9.7.2.dist-info}/WHEEL +1 -1
- boris_behav_obs-9.7.2.dist-info/entry_points.txt +2 -0
- boris/README.TXT +0 -22
- boris/add_modifier.ui +0 -323
- boris/converters.ui +0 -289
- boris/core.qrc +0 -37
- boris/core.ui +0 -1571
- boris/edit_event.ui +0 -233
- boris/icons/logo_eye.ico +0 -0
- boris/map_creator.py +0 -982
- boris/observation.ui +0 -814
- boris/param_panel.ui +0 -379
- boris/preferences.ui +0 -537
- boris/project.ui +0 -1074
- boris/vlc_local.py +0 -90
- boris_behav_obs-8.16.6.dist-info/LICENSE.TXT +0 -674
- boris_behav_obs-8.16.6.dist-info/METADATA +0 -134
- boris_behav_obs-8.16.6.dist-info/RECORD +0 -106
- boris_behav_obs-8.16.6.dist-info/entry_points.txt +0 -2
- {boris → boris_behav_obs-9.7.2.dist-info/licenses}/LICENSE.TXT +0 -0
- {boris_behav_obs-8.16.6.dist-info → boris_behav_obs-9.7.2.dist-info}/top_level.txt +0 -0
boris/duration_widget.py
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
widget to edit duration > 24 h or < 0
|
|
4
4
|
|
|
5
|
-
https://stackoverflow.com/questions/44380202/creating-a-custom-widget-in-
|
|
5
|
+
https://stackoverflow.com/questions/44380202/creating-a-custom-widget-in-PySide6
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from decimal import Decimal as dec
|
|
9
9
|
|
|
10
|
-
from
|
|
10
|
+
from PySide6.QtWidgets import (
|
|
11
11
|
QWidget,
|
|
12
12
|
QHBoxLayout,
|
|
13
13
|
QPushButton,
|
|
@@ -20,14 +20,13 @@ from PyQt5.QtWidgets import (
|
|
|
20
20
|
QRadioButton,
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
-
from
|
|
23
|
+
from PySide6.QtCore import Signal
|
|
24
24
|
|
|
25
25
|
from . import config as cfg
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class Widget_hhmmss(QWidget):
|
|
29
|
-
|
|
30
|
-
time_changed_signal = pyqtSignal(float)
|
|
29
|
+
time_changed_signal = Signal(float)
|
|
31
30
|
|
|
32
31
|
def __init__(self, parent=None):
|
|
33
32
|
QWidget.__init__(self, parent=parent)
|
|
@@ -84,12 +83,7 @@ class Widget_hhmmss(QWidget):
|
|
|
84
83
|
self.update_time_value()
|
|
85
84
|
|
|
86
85
|
def update_time_value(self):
|
|
87
|
-
new_time = (
|
|
88
|
-
self.hours.value() * 3600
|
|
89
|
-
+ self.minutes.value() * 60
|
|
90
|
-
+ self.seconds.value()
|
|
91
|
-
+ self.milliseconds.value() / 1000
|
|
92
|
-
)
|
|
86
|
+
new_time = self.hours.value() * 3600 + self.minutes.value() * 60 + self.seconds.value() + self.milliseconds.value() / 1000
|
|
93
87
|
if self.sign.text() == "-":
|
|
94
88
|
new_time = -new_time
|
|
95
89
|
|
|
@@ -123,8 +117,7 @@ class Widget_hhmmss(QWidget):
|
|
|
123
117
|
|
|
124
118
|
|
|
125
119
|
class Widget_seconds(QWidget):
|
|
126
|
-
|
|
127
|
-
time_changed_signal = pyqtSignal(float)
|
|
120
|
+
time_changed_signal = Signal(float)
|
|
128
121
|
|
|
129
122
|
def __init__(self, parent=None):
|
|
130
123
|
QWidget.__init__(self, parent=parent)
|
|
@@ -151,7 +144,6 @@ class Widget_seconds(QWidget):
|
|
|
151
144
|
|
|
152
145
|
class Duration_widget(QWidget):
|
|
153
146
|
def __init__(self, time_value=0, parent=None):
|
|
154
|
-
|
|
155
147
|
super().__init__()
|
|
156
148
|
|
|
157
149
|
self.time_value = dec(time_value).quantize(dec(".001"))
|
|
@@ -161,6 +153,7 @@ class Duration_widget(QWidget):
|
|
|
161
153
|
lay.setContentsMargins(0, 0, 0, 0)
|
|
162
154
|
|
|
163
155
|
self.Stack = QStackedWidget()
|
|
156
|
+
|
|
164
157
|
self.w1 = Widget_hhmmss()
|
|
165
158
|
self.w1.time_changed_signal.connect(self.time_changed)
|
|
166
159
|
self.Stack.addWidget(self.w1)
|
|
@@ -192,6 +185,8 @@ class Duration_widget(QWidget):
|
|
|
192
185
|
self.time_value = x
|
|
193
186
|
|
|
194
187
|
def set_time(self, new_time):
|
|
188
|
+
if new_time.is_nan():
|
|
189
|
+
return
|
|
195
190
|
|
|
196
191
|
self.w1.sign.setText("-" if new_time < 0 else "+")
|
|
197
192
|
|
boris/edit_event.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
BORIS
|
|
3
3
|
Behavioral Observation Research Interactive Software
|
|
4
|
-
Copyright 2012-
|
|
4
|
+
Copyright 2012-2025 Olivier Friard
|
|
5
5
|
|
|
6
6
|
This file is part of BORIS.
|
|
7
7
|
|
|
@@ -21,10 +21,10 @@ This file is part of BORIS.
|
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
23
|
from decimal import Decimal as dec
|
|
24
|
+
import logging
|
|
24
25
|
|
|
25
|
-
from
|
|
26
|
+
from PySide6.QtWidgets import (
|
|
26
27
|
QDialog,
|
|
27
|
-
QSpinBox,
|
|
28
28
|
QHBoxLayout,
|
|
29
29
|
QLabel,
|
|
30
30
|
QLineEdit,
|
|
@@ -36,7 +36,7 @@ from PyQt5.QtWidgets import (
|
|
|
36
36
|
)
|
|
37
37
|
|
|
38
38
|
from . import config as cfg
|
|
39
|
-
from . import
|
|
39
|
+
from . import dialog
|
|
40
40
|
from .edit_event_ui import Ui_Form
|
|
41
41
|
|
|
42
42
|
|
|
@@ -44,14 +44,14 @@ class DlgEditEvent(QDialog, Ui_Form):
|
|
|
44
44
|
def __init__(
|
|
45
45
|
self,
|
|
46
46
|
observation_type: str,
|
|
47
|
-
time_value: dec = dec(
|
|
47
|
+
time_value: dec = dec("NaN"),
|
|
48
48
|
image_idx=None,
|
|
49
49
|
current_time=0,
|
|
50
50
|
time_format: str = cfg.S,
|
|
51
51
|
show_set_current_time: bool = False,
|
|
52
|
+
exif_date_time: dec | None = None,
|
|
52
53
|
parent=None,
|
|
53
54
|
):
|
|
54
|
-
|
|
55
55
|
super().__init__(parent)
|
|
56
56
|
self.setupUi(self)
|
|
57
57
|
self.time_value = time_value
|
|
@@ -60,61 +60,92 @@ class DlgEditEvent(QDialog, Ui_Form):
|
|
|
60
60
|
|
|
61
61
|
self.pb_set_to_current_time.setVisible(show_set_current_time)
|
|
62
62
|
self.current_time = current_time
|
|
63
|
+
self.exif_date_time = exif_date_time
|
|
64
|
+
|
|
65
|
+
# hide frame index for all observations
|
|
66
|
+
# frame index is determined in base of time
|
|
67
|
+
for w in (
|
|
68
|
+
self.lb_frame_idx,
|
|
69
|
+
self.sb_frame_idx,
|
|
70
|
+
self.cb_set_frame_idx_na,
|
|
71
|
+
):
|
|
72
|
+
w.setVisible(False)
|
|
63
73
|
|
|
64
74
|
# hide image index
|
|
65
75
|
if observation_type in (cfg.LIVE, cfg.MEDIA):
|
|
66
|
-
|
|
76
|
+
# hide image index
|
|
77
|
+
for w in (
|
|
78
|
+
self.cb_set_time_na,
|
|
79
|
+
self.gb_image_index,
|
|
80
|
+
):
|
|
67
81
|
w.setVisible(False)
|
|
68
82
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
):
|
|
72
|
-
self.time_widget = duration_widget.Duration_widget(self.time_value)
|
|
73
|
-
if time_format == cfg.S:
|
|
74
|
-
self.time_widget.set_format_s()
|
|
75
|
-
if time_format == cfg.HHMMSS:
|
|
76
|
-
self.time_widget.set_format_hhmmss()
|
|
83
|
+
# widget for time
|
|
84
|
+
self.time_widget = dialog.get_time_widget(self.time_value)
|
|
77
85
|
|
|
78
|
-
|
|
86
|
+
if time_format == cfg.S:
|
|
87
|
+
self.time_widget.rb_seconds.setChecked(True)
|
|
88
|
+
if time_format == cfg.HHMMSS:
|
|
89
|
+
self.time_widget.rb_time.setChecked(True)
|
|
90
|
+
if not self.time_value.is_nan() and int(self.time_value) > cfg.DATE_CUTOFF:
|
|
91
|
+
self.time_widget.rb_datetime.setChecked(True)
|
|
92
|
+
|
|
93
|
+
self.horizontalLayout_3.insertWidget(0, self.time_widget)
|
|
79
94
|
|
|
80
95
|
if observation_type == cfg.IMAGES:
|
|
81
96
|
# hide frame index widgets
|
|
82
|
-
|
|
83
|
-
w.setVisible(False)
|
|
97
|
+
self.pb_set_to_current_time.setVisible(self.exif_date_time is not None)
|
|
84
98
|
self.sb_image_idx.setValue(self.image_idx)
|
|
85
99
|
|
|
86
|
-
self.pb_set_to_current_time.setText("Set to current image index")
|
|
87
|
-
|
|
88
100
|
self.pb_set_to_current_time.clicked.connect(self.set_to_current_time)
|
|
101
|
+
self.pb_set_to_current_image_index.clicked.connect(self.set_to_current_image_index)
|
|
102
|
+
|
|
89
103
|
self.cb_set_time_na.stateChanged.connect(self.time_na)
|
|
90
104
|
|
|
91
|
-
self.cb_set_frame_idx_na.stateChanged.connect(self.frame_idx_na)
|
|
92
|
-
self.pbOK.clicked.connect(self.
|
|
105
|
+
# self.cb_set_frame_idx_na.stateChanged.connect(self.frame_idx_na)
|
|
106
|
+
self.pbOK.clicked.connect(self.close_widget)
|
|
93
107
|
self.pbCancel.clicked.connect(self.reject)
|
|
94
108
|
|
|
95
|
-
def
|
|
109
|
+
def close_widget(self):
|
|
96
110
|
"""
|
|
97
|
-
|
|
111
|
+
close the widget
|
|
98
112
|
"""
|
|
99
|
-
if self.observation_type in (cfg.
|
|
100
|
-
self.
|
|
113
|
+
if self.observation_type in (cfg.IMAGES):
|
|
114
|
+
if self.sb_image_idx.value() == 0:
|
|
115
|
+
QMessageBox.warning(self, cfg.programName, "The image index cannot be null")
|
|
116
|
+
return
|
|
117
|
+
self.accept()
|
|
101
118
|
|
|
119
|
+
def set_to_current_image_index(self):
|
|
120
|
+
"""
|
|
121
|
+
set image index to current image index
|
|
122
|
+
"""
|
|
102
123
|
if self.observation_type in (cfg.IMAGES):
|
|
103
124
|
self.sb_image_idx.setValue(int(self.current_time))
|
|
104
125
|
|
|
105
|
-
def
|
|
126
|
+
def set_to_current_time(self):
|
|
106
127
|
"""
|
|
107
|
-
set
|
|
128
|
+
set time to current media time
|
|
108
129
|
"""
|
|
109
|
-
|
|
110
|
-
self.
|
|
130
|
+
|
|
131
|
+
if self.observation_type in (cfg.LIVE, cfg.MEDIA):
|
|
132
|
+
self.time_widget.set_time(dec(float(self.current_time)))
|
|
133
|
+
|
|
134
|
+
if self.observation_type == cfg.IMAGES:
|
|
135
|
+
if self.exif_date_time is not None:
|
|
136
|
+
self.time_widget.set_time(dec(self.exif_date_time))
|
|
111
137
|
|
|
112
138
|
def time_na(self):
|
|
113
139
|
"""
|
|
114
140
|
set/unset time to NA
|
|
115
141
|
"""
|
|
116
142
|
|
|
143
|
+
logging.debug("time_na function")
|
|
144
|
+
|
|
145
|
+
self.time_widget.setVisible(not self.cb_set_time_na.isChecked())
|
|
117
146
|
self.time_widget.setEnabled(not self.cb_set_time_na.isChecked())
|
|
147
|
+
|
|
148
|
+
self.pb_set_to_current_time.setVisible(not self.cb_set_time_na.isChecked() and self.exif_date_time is not None)
|
|
118
149
|
self.pb_set_to_current_time.setEnabled(not self.cb_set_time_na.isChecked())
|
|
119
150
|
|
|
120
151
|
|
|
@@ -168,7 +199,6 @@ class EditSelectedEvents(QDialog):
|
|
|
168
199
|
self.setLayout(hbox)
|
|
169
200
|
|
|
170
201
|
def rb_changed(self):
|
|
171
|
-
|
|
172
202
|
self.newText.setEnabled(not self.rbComment.isChecked())
|
|
173
203
|
self.commentText.setEnabled(self.rbComment.isChecked())
|
|
174
204
|
|
boris/edit_event_ui.py
CHANGED
|
@@ -1,122 +1,233 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
from PyQt5 import QtCore, QtGui, QtWidgets
|
|
3
|
+
################################################################################
|
|
4
|
+
## Form generated from reading UI file 'edit_event.ui'
|
|
5
|
+
##
|
|
6
|
+
## Created by: Qt User Interface Compiler version 6.9.0
|
|
7
|
+
##
|
|
8
|
+
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
|
9
|
+
################################################################################
|
|
12
10
|
|
|
11
|
+
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
|
|
12
|
+
QMetaObject, QObject, QPoint, QRect,
|
|
13
|
+
QSize, QTime, QUrl, Qt)
|
|
14
|
+
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
|
|
15
|
+
QFont, QFontDatabase, QGradient, QIcon,
|
|
16
|
+
QImage, QKeySequence, QLinearGradient, QPainter,
|
|
17
|
+
QPalette, QPixmap, QRadialGradient, QTransform)
|
|
18
|
+
from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QGroupBox,
|
|
19
|
+
QHBoxLayout, QLabel, QPlainTextEdit, QPushButton,
|
|
20
|
+
QSizePolicy, QSpacerItem, QSpinBox, QVBoxLayout,
|
|
21
|
+
QWidget)
|
|
13
22
|
|
|
14
23
|
class Ui_Form(object):
|
|
15
24
|
def setupUi(self, Form):
|
|
16
|
-
Form.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
self.
|
|
20
|
-
self.
|
|
21
|
-
self.
|
|
22
|
-
self.
|
|
23
|
-
self.
|
|
24
|
-
self.
|
|
25
|
-
self.
|
|
26
|
-
self.
|
|
27
|
-
self.
|
|
28
|
-
self.
|
|
29
|
-
|
|
30
|
-
self.
|
|
31
|
-
|
|
32
|
-
self.
|
|
33
|
-
|
|
34
|
-
self.
|
|
25
|
+
if not Form.objectName():
|
|
26
|
+
Form.setObjectName(u"Form")
|
|
27
|
+
Form.resize(600, 638)
|
|
28
|
+
self.verticalLayout_3 = QVBoxLayout(Form)
|
|
29
|
+
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
|
30
|
+
self.gb_time = QGroupBox(Form)
|
|
31
|
+
self.gb_time.setObjectName(u"gb_time")
|
|
32
|
+
self.verticalLayout = QVBoxLayout(self.gb_time)
|
|
33
|
+
self.verticalLayout.setObjectName(u"verticalLayout")
|
|
34
|
+
self.horizontalLayout_8 = QHBoxLayout()
|
|
35
|
+
self.horizontalLayout_8.setObjectName(u"horizontalLayout_8")
|
|
36
|
+
self.cb_set_time_na = QCheckBox(self.gb_time)
|
|
37
|
+
self.cb_set_time_na.setObjectName(u"cb_set_time_na")
|
|
38
|
+
|
|
39
|
+
self.horizontalLayout_8.addWidget(self.cb_set_time_na)
|
|
40
|
+
|
|
41
|
+
self.horizontalSpacer_7 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
|
42
|
+
|
|
43
|
+
self.horizontalLayout_8.addItem(self.horizontalSpacer_7)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
self.verticalLayout.addLayout(self.horizontalLayout_8)
|
|
47
|
+
|
|
48
|
+
self.horizontalLayout_3 = QHBoxLayout()
|
|
49
|
+
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
|
|
50
|
+
self.lb_time = QLabel(self.gb_time)
|
|
51
|
+
self.lb_time.setObjectName(u"lb_time")
|
|
52
|
+
|
|
53
|
+
self.horizontalLayout_3.addWidget(self.lb_time)
|
|
54
|
+
|
|
55
|
+
self.horizontalLayout_2 = QHBoxLayout()
|
|
56
|
+
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
|
|
57
|
+
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
|
58
|
+
|
|
59
|
+
self.horizontalLayout_2.addItem(self.horizontalSpacer)
|
|
60
|
+
|
|
61
|
+
|
|
35
62
|
self.horizontalLayout_3.addLayout(self.horizontalLayout_2)
|
|
63
|
+
|
|
64
|
+
|
|
36
65
|
self.verticalLayout.addLayout(self.horizontalLayout_3)
|
|
37
|
-
|
|
38
|
-
self.
|
|
39
|
-
self.
|
|
40
|
-
self.
|
|
41
|
-
self.
|
|
42
|
-
|
|
66
|
+
|
|
67
|
+
self.horizontalLayout_9 = QHBoxLayout()
|
|
68
|
+
self.horizontalLayout_9.setObjectName(u"horizontalLayout_9")
|
|
69
|
+
self.pb_set_to_current_time = QPushButton(self.gb_time)
|
|
70
|
+
self.pb_set_to_current_time.setObjectName(u"pb_set_to_current_time")
|
|
71
|
+
|
|
72
|
+
self.horizontalLayout_9.addWidget(self.pb_set_to_current_time)
|
|
73
|
+
|
|
74
|
+
self.horizontalSpacer_8 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
|
75
|
+
|
|
76
|
+
self.horizontalLayout_9.addItem(self.horizontalSpacer_8)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
self.verticalLayout.addLayout(self.horizontalLayout_9)
|
|
80
|
+
|
|
81
|
+
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
|
|
82
|
+
|
|
83
|
+
self.verticalLayout.addItem(self.verticalSpacer)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
self.verticalLayout_3.addWidget(self.gb_time)
|
|
87
|
+
|
|
88
|
+
self.gb_image_index = QGroupBox(Form)
|
|
89
|
+
self.gb_image_index.setObjectName(u"gb_image_index")
|
|
90
|
+
self.verticalLayout_2 = QVBoxLayout(self.gb_image_index)
|
|
91
|
+
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
|
|
92
|
+
self.horizontalLayout_7 = QHBoxLayout()
|
|
93
|
+
self.horizontalLayout_7.setObjectName(u"horizontalLayout_7")
|
|
94
|
+
self.sb_image_idx = QSpinBox(self.gb_image_index)
|
|
95
|
+
self.sb_image_idx.setObjectName(u"sb_image_idx")
|
|
43
96
|
self.sb_image_idx.setMaximum(10000000)
|
|
44
|
-
|
|
97
|
+
|
|
45
98
|
self.horizontalLayout_7.addWidget(self.sb_image_idx)
|
|
46
|
-
|
|
47
|
-
self.
|
|
48
|
-
self.
|
|
49
|
-
|
|
50
|
-
self.
|
|
51
|
-
|
|
52
|
-
self.
|
|
99
|
+
|
|
100
|
+
self.pb_set_to_current_image_index = QPushButton(self.gb_image_index)
|
|
101
|
+
self.pb_set_to_current_image_index.setObjectName(u"pb_set_to_current_image_index")
|
|
102
|
+
|
|
103
|
+
self.horizontalLayout_7.addWidget(self.pb_set_to_current_image_index)
|
|
104
|
+
|
|
105
|
+
self.horizontalSpacer_6 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
|
106
|
+
|
|
107
|
+
self.horizontalLayout_7.addItem(self.horizontalSpacer_6)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
self.verticalLayout_2.addLayout(self.horizontalLayout_7)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
self.verticalLayout_3.addWidget(self.gb_image_index)
|
|
114
|
+
|
|
115
|
+
self.horizontalLayout_4 = QHBoxLayout()
|
|
116
|
+
self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
|
|
117
|
+
self.lbSubject = QLabel(Form)
|
|
118
|
+
self.lbSubject.setObjectName(u"lbSubject")
|
|
119
|
+
|
|
53
120
|
self.horizontalLayout_4.addWidget(self.lbSubject)
|
|
54
|
-
|
|
55
|
-
self.cobSubject
|
|
121
|
+
|
|
122
|
+
self.cobSubject = QComboBox(Form)
|
|
123
|
+
self.cobSubject.setObjectName(u"cobSubject")
|
|
124
|
+
|
|
56
125
|
self.horizontalLayout_4.addWidget(self.cobSubject)
|
|
57
|
-
|
|
58
|
-
self.
|
|
59
|
-
|
|
60
|
-
self.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
self.
|
|
126
|
+
|
|
127
|
+
self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
|
128
|
+
|
|
129
|
+
self.horizontalLayout_4.addItem(self.horizontalSpacer_2)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
self.verticalLayout_3.addLayout(self.horizontalLayout_4)
|
|
133
|
+
|
|
134
|
+
self.horizontalLayout_5 = QHBoxLayout()
|
|
135
|
+
self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
|
|
136
|
+
self.label_2 = QLabel(Form)
|
|
137
|
+
self.label_2.setObjectName(u"label_2")
|
|
138
|
+
|
|
64
139
|
self.horizontalLayout_5.addWidget(self.label_2)
|
|
65
|
-
|
|
66
|
-
self.cobCode
|
|
140
|
+
|
|
141
|
+
self.cobCode = QComboBox(Form)
|
|
142
|
+
self.cobCode.setObjectName(u"cobCode")
|
|
143
|
+
|
|
67
144
|
self.horizontalLayout_5.addWidget(self.cobCode)
|
|
68
|
-
|
|
69
|
-
self.
|
|
70
|
-
|
|
71
|
-
self.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
self.
|
|
145
|
+
|
|
146
|
+
self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
|
147
|
+
|
|
148
|
+
self.horizontalLayout_5.addItem(self.horizontalSpacer_3)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
self.verticalLayout_3.addLayout(self.horizontalLayout_5)
|
|
152
|
+
|
|
153
|
+
self.horizontalLayout_6 = QHBoxLayout()
|
|
154
|
+
self.horizontalLayout_6.setObjectName(u"horizontalLayout_6")
|
|
155
|
+
self.lb_frame_idx = QLabel(Form)
|
|
156
|
+
self.lb_frame_idx.setObjectName(u"lb_frame_idx")
|
|
157
|
+
|
|
75
158
|
self.horizontalLayout_6.addWidget(self.lb_frame_idx)
|
|
76
|
-
|
|
159
|
+
|
|
160
|
+
self.sb_frame_idx = QSpinBox(Form)
|
|
161
|
+
self.sb_frame_idx.setObjectName(u"sb_frame_idx")
|
|
77
162
|
self.sb_frame_idx.setMinimum(0)
|
|
78
163
|
self.sb_frame_idx.setMaximum(100000000)
|
|
79
|
-
|
|
164
|
+
|
|
80
165
|
self.horizontalLayout_6.addWidget(self.sb_frame_idx)
|
|
81
|
-
|
|
82
|
-
self.cb_set_frame_idx_na
|
|
166
|
+
|
|
167
|
+
self.cb_set_frame_idx_na = QCheckBox(Form)
|
|
168
|
+
self.cb_set_frame_idx_na.setObjectName(u"cb_set_frame_idx_na")
|
|
169
|
+
|
|
83
170
|
self.horizontalLayout_6.addWidget(self.cb_set_frame_idx_na)
|
|
84
|
-
|
|
85
|
-
self.
|
|
86
|
-
|
|
87
|
-
self.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
self.
|
|
91
|
-
|
|
92
|
-
self.
|
|
93
|
-
self.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
self.
|
|
98
|
-
self.
|
|
171
|
+
|
|
172
|
+
self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
|
173
|
+
|
|
174
|
+
self.horizontalLayout_6.addItem(self.horizontalSpacer_5)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
self.verticalLayout_3.addLayout(self.horizontalLayout_6)
|
|
178
|
+
|
|
179
|
+
self.label_4 = QLabel(Form)
|
|
180
|
+
self.label_4.setObjectName(u"label_4")
|
|
181
|
+
|
|
182
|
+
self.verticalLayout_3.addWidget(self.label_4)
|
|
183
|
+
|
|
184
|
+
self.leComment = QPlainTextEdit(Form)
|
|
185
|
+
self.leComment.setObjectName(u"leComment")
|
|
186
|
+
|
|
187
|
+
self.verticalLayout_3.addWidget(self.leComment)
|
|
188
|
+
|
|
189
|
+
self.horizontalLayout = QHBoxLayout()
|
|
190
|
+
self.horizontalLayout.setObjectName(u"horizontalLayout")
|
|
191
|
+
self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
|
192
|
+
|
|
193
|
+
self.horizontalLayout.addItem(self.horizontalSpacer_4)
|
|
194
|
+
|
|
195
|
+
self.pbCancel = QPushButton(Form)
|
|
196
|
+
self.pbCancel.setObjectName(u"pbCancel")
|
|
197
|
+
|
|
99
198
|
self.horizontalLayout.addWidget(self.pbCancel)
|
|
100
|
-
|
|
101
|
-
self.pbOK
|
|
102
|
-
self.pbOK.setObjectName("pbOK")
|
|
199
|
+
|
|
200
|
+
self.pbOK = QPushButton(Form)
|
|
201
|
+
self.pbOK.setObjectName(u"pbOK")
|
|
202
|
+
|
|
103
203
|
self.horizontalLayout.addWidget(self.pbOK)
|
|
104
|
-
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
self.verticalLayout_3.addLayout(self.horizontalLayout)
|
|
207
|
+
|
|
105
208
|
|
|
106
209
|
self.retranslateUi(Form)
|
|
107
|
-
|
|
210
|
+
|
|
211
|
+
self.pbOK.setDefault(True)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
QMetaObject.connectSlotsByName(Form)
|
|
215
|
+
# setupUi
|
|
108
216
|
|
|
109
217
|
def retranslateUi(self, Form):
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
self.
|
|
113
|
-
self.
|
|
114
|
-
self.
|
|
115
|
-
self.
|
|
116
|
-
self.
|
|
117
|
-
self.
|
|
118
|
-
self.
|
|
119
|
-
self.
|
|
120
|
-
self.
|
|
121
|
-
self.
|
|
122
|
-
self.
|
|
218
|
+
Form.setWindowTitle(QCoreApplication.translate("Form", u"Edit event", None))
|
|
219
|
+
self.gb_time.setTitle(QCoreApplication.translate("Form", u"Time", None))
|
|
220
|
+
self.cb_set_time_na.setText(QCoreApplication.translate("Form", u"Set time to NA", None))
|
|
221
|
+
self.lb_time.setText("")
|
|
222
|
+
self.pb_set_to_current_time.setText(QCoreApplication.translate("Form", u"Set to current time", None))
|
|
223
|
+
self.gb_image_index.setTitle(QCoreApplication.translate("Form", u"Image index", None))
|
|
224
|
+
self.pb_set_to_current_image_index.setText(QCoreApplication.translate("Form", u"Set to current image index", None))
|
|
225
|
+
self.lbSubject.setText(QCoreApplication.translate("Form", u"Subject", None))
|
|
226
|
+
self.label_2.setText(QCoreApplication.translate("Form", u"Behavior", None))
|
|
227
|
+
self.lb_frame_idx.setText(QCoreApplication.translate("Form", u"Frame index", None))
|
|
228
|
+
self.cb_set_frame_idx_na.setText(QCoreApplication.translate("Form", u"Set NA", None))
|
|
229
|
+
self.label_4.setText(QCoreApplication.translate("Form", u"Comment", None))
|
|
230
|
+
self.pbCancel.setText(QCoreApplication.translate("Form", u"Cancel", None))
|
|
231
|
+
self.pbOK.setText(QCoreApplication.translate("Form", u"OK", None))
|
|
232
|
+
# retranslateUi
|
|
233
|
+
|