Example #1
0
    def makeWidget(self):
        super().makeWidget()

        self.button_row = QtWidgets.QWidget(self.widget)
        self.button_lay = QtWidgets.QHBoxLayout(self.button_row)
        self.lay.addWidget(self.button_row)

        self.reset_button = QtWidgets.QPushButton("Reset", self.button_row)
        self.save_button = QtWidgets.QPushButton("Save", self.button_row)
        self.button_lay.addWidget(self.reset_button)
        self.button_lay.addWidget(self.save_button)
        self.save_button.setEnabled(False)
        # row class instance => column (blocksize)=> corresponding widget
        # ValkkaFSConfigRow has "blocksize" widget that is QSpinBox
        self.row_instance["blocksize"].widget.valueChanged.connect(
            self.mod_slot)
        self.row_instance["n_blocks"].widget.valueChanged.connect(
            self.mod_slot)
        # should fix cutemongoforms: SpinBoxIntegerColumn should have
        # getNotifySignal implemented..
        st = (
            "- Recording streams is experimental; please report bugs\n"
            "- Modifying & saving the new parameters will clear all your recordings\n"
        )
        self.info_label = QtWidgets.QLabel(st, self.widget)
        self.lay.addWidget(self.info_label)

        self.reset_button.clicked.connect(self.row_instance.clear)
        self.save_button.clicked.connect(self.save_slot)
Example #2
0
    def __init__(self, def_pixmap=None, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.signals = self.Signals()
        self.pre = "NLineCrossingVideoWidget : "
        self.lay = QtWidgets.QVBoxLayout(self)
        self.canvas = NLineCrossingCanvasWidget(self.signals,
                                                def_pixmap,
                                                parent=self)
        self.lay.addWidget(self.canvas)
        # WARNING: the numerical constants are reversed between min/max...!
        self.canvas.setSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                  QtWidgets.QSizePolicy.Minimum)
        self.buttons = QtWidgets.QWidget(self)
        self.lay.addWidget(self.buttons)

        self.button1 = QtWidgets.QPushButton("Set 1", self.buttons)
        self.linedef1 = QtWidgets.QSpinBox(self.buttons)
        self.cbutton1 = QtWidgets.QPushButton("Clear 1", self.buttons)

        self.button2 = QtWidgets.QPushButton("Set 2", self.buttons)
        self.linedef2 = QtWidgets.QSpinBox(self.buttons)
        self.cbutton2 = QtWidgets.QPushButton("Clear 2", self.buttons)

        self.label1 = QtWidgets.QLabel("Min object size:")
        self.sizedef = QtWidgets.QSpinBox(self.buttons)

        self.linedef1.setRange(4, 60)
        self.linedef2.setRange(4, 60)
        self.sizedef.setRange(0, 200 * 200)
        self.sizedef.setValue(50 * 100)  # a nice predefined value
        self.sizedef.setSingleStep(500)

        for b in [
                self.buttons, self.button1, self.linedef1, self.button2,
                self.linedef2
        ]:
            b.setSizePolicy(QtWidgets.QSizePolicy.Maximum,
                            QtWidgets.QSizePolicy.Maximum)

        self.button_lay = QtWidgets.QHBoxLayout(self.buttons)
        self.button_lay.addWidget(self.button1)
        self.button_lay.addWidget(self.cbutton1)
        self.button_lay.addWidget(self.linedef1)
        self.button_lay.addWidget(self.button2)
        self.button_lay.addWidget(self.cbutton2)
        self.button_lay.addWidget(self.linedef2)
        self.button_lay.addWidget(self.label1)
        self.button_lay.addWidget(self.sizedef)

        self.button1.clicked.connect(lambda: self.canvas.define_line_slot(0))
        self.button2.clicked.connect(lambda: self.canvas.define_line_slot(1))

        self.cbutton1.clicked.connect(lambda: self.canvas.clear_line_slot(0))
        self.cbutton2.clicked.connect(lambda: self.canvas.clear_line_slot(1))

        self.linedef1.valueChanged.connect(
            lambda i: self.canvas.set_line_width_slot(0, i))
        self.linedef2.valueChanged.connect(
            lambda i: self.canvas.set_line_width_slot(1, i))
        self.sizedef.valueChanged.connect(self.canvas.set_object_size_slot)
Example #3
0
    def makeWidget(self, parent=None):
        self.main_widget = self.ContainerWidget(parent)
        # self.signals.close.connect(self.close_slot) # not closed by clicking
        # the close symbol
        # this layout includes VideoWidget, buttons, alerts, etc.
        self.main_layout = QtWidgets.QVBoxLayout(self.main_widget)
        self.video = self.VideoWidget(
            parent=self.main_widget,
            mouse_gesture_handler=self.mouseGestureHandler)

        self.define_analyzer_button = QtWidgets.QPushButton(
            "Define Analyzer", self.main_widget)
        self.main_layout.addWidget(self.define_analyzer_button)

        self.main_layout.addWidget(self.video)
        self.video.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                 QtWidgets.QSizePolicy.Expanding)

        self.video.signals.drop.connect(self.setDevice)
        self.define_analyzer_button.clicked.connect(
            self.right_double_click_slot)  # show the analyzer widget windows

        # this VideoContainer was initialized with a device id, so we stream the video now
        if self.device_id > -1:
            self.setDeviceById(self.device_id)
Example #4
0
    def makeWidget(self, qscreen: QtGui.QScreen, geom: tuple = ()):
        # (re)create the widget, do the same for children
        # how children are placed on the parent widget, depends on the subclass
        self.window = self.ContainerWindow(self.signals, self.title,
                                           self.parent)

        # send to correct x-screen
        self.window.show()
        self.window.windowHandle().setScreen(qscreen)
        self.n_xscreen = self.gpu_handler.getXScreenNum(
            qscreen
        )  # the correct x-screen number must be passed upstream, to the VideoContainer

        # continue window / widget construction in the correct x screen
        self.main_widget = self.ContainerWidget(self.window)
        self.main_layout = QtWidgets.QVBoxLayout(self.main_widget)
        self.main_layout.setContentsMargins(0, 0, 0, 0)
        self.window.setCentralWidget(self.main_widget)

        if len(geom) >= 4:
            self.setGeom(geom[0], geom[1], geom[2], geom[3])

        # add here any extra turf to the widget you want in addition to the
        # grid

        # create the grid
        self.grid_widget = self.GridWidget(self.main_widget)
        self.main_layout.addWidget(self.grid_widget)

        self.grid_layout = QtWidgets.QGridLayout(self.grid_widget)
        self.grid_layout.setHorizontalSpacing(2)
        self.grid_layout.setVerticalSpacing(2)
        # ( int left, int top, int right, int bottom )
        self.grid_layout.setContentsMargins(0, 0, 0, 0)

        class ScreenMenu(QuickMenu):
            title = "Change Screen"
            elements = [
                QuickMenuElement(title="Screen 1"),
                QuickMenuElement(title="Screen 2")
            ]

        """ TODO: activate after gpu-hopping has been debugged
        self.screenmenu = ScreenMenu(self.window)
        self.screenmenu.screen_1.triggered.connect(self.test_slot)
        self.screenmenu.screen_2.triggered.connect(self.test_slot)
        """

        if (len(self.gpu_handler.true_screens) > 1):
            # so, there's more than a single x screen: create a button for
            # changing x-screens
            self.button = QtWidgets.QPushButton("Change Screen",
                                                self.main_widget)
            self.main_layout.addWidget(self.button)
            self.button.setSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                      QtWidgets.QSizePolicy.Minimum)
            self.button.clicked.connect(self.change_xscreen_slot)

        self.placeChildren()
Example #5
0
    def makeWidget(self):
        super().makeWidget()

        self.button_row = QtWidgets.QWidget(self.widget)
        self.button_lay = QtWidgets.QHBoxLayout(self.button_row)
        self.lay.addWidget(self.button_row)

        self.reset_button = QtWidgets.QPushButton("Reset", self.button_row)
        self.save_button = QtWidgets.QPushButton("Save", self.button_row)
        self.button_lay.addWidget(self.reset_button)
        self.button_lay.addWidget(self.save_button)

        self.info_label = QtWidgets.QLabel(
            "Saving restarts all Valkka services", self.widget)
        self.lay.addWidget(self.info_label)

        self.reset_button.clicked.connect(self.row_instance.clear)
        self.save_button.clicked.connect(self.save_slot)
Example #6
0
    def setupUi(self):
        self.setGeometry(QtCore.QRect(100, 100, 500, 500))
        self.w = QtWidgets.QWidget(self)
        self.setCentralWidget(self.w)

        self.lay = QtWidgets.QGridLayout(self.w)

        self.button1 = QtWidgets.QPushButton("Button 1", self.w)
        self.button2 = QtWidgets.QPushButton("Button 2", self.w)

        self.check1 = QtWidgets.QRadioButton(self.w)
        self.check2 = QtWidgets.QRadioButton(self.w)

        self.lay.addWidget(self.button1, 0, 0)
        self.lay.addWidget(self.check1, 0, 1)
        self.lay.addWidget(self.button2, 1, 0)
        self.lay.addWidget(self.check2, 1, 1)

        self.button1.clicked.connect(self.button1_slot)
        self.button2.clicked.connect(self.button2_slot)

        self.process1.signals.pong.connect(self.pong1_slot)
        self.process2.signals.pong.connect(self.pong2_slot)
Example #7
0
    def makeWidget(self):
        super().makeWidget()
        i = self.lay.count()
        self.info_label = QtWidgets.QLabel(
            ("Cameralists and services are reinitiated\n"
             "once you save & close this window\n"), self.widget)
        self.lay.insertWidget(i, self.info_label)

        # give a signal thats emitted once discovery has modified the camera list
        self.discovery_win = QCapsulate(
            DiscoveryWidget(sig=self.signals.modified), "Camera Discovery")
        self.discovery_win.hide()
        self.discovery_button = QtWidgets.QPushButton("Camera Search",
                                                      self.widget)
        self.discovery_button.clicked.connect(self.discovery_slot)
        self.lay.insertWidget(i + 1, self.discovery_button)
Example #8
0
    def setupUi(self):
        self.setGeometry(QtCore.QRect(100, 100, 500, 500))

        # create widget inside this window
        self.w = QtWidgets.QFrame(self)
        self.w.setAutoFillBackground(True)
        self.w.setStyleSheet("QFrame {background-color: blue;}")
        self.setCentralWidget(self.w)

        self.lay = QtWidgets.QVBoxLayout(self.w)

        self.thread = QOnvifThread(user="******",
                                   password="******",
                                   ip="192.168.0.134")

        self.b = QtWidgets.QPushButton(self, "Push Me")
        self.b.clicked.connect(self.b_slot)
        self.lay.addWidget(self.b)

        self.thread.start()
Example #9
0
    def setupUi(self):
        self.setGeometry(QtCore.QRect(100, 100, 500, 500))

        # create widget inside this window
        self.w = QtWidgets.QFrame(self)
        self.w.setAutoFillBackground(True)
        self.w.setStyleSheet("QFrame {background-color: blue;}")
        self.setCentralWidget(self.w)

        self.lay = QtWidgets.QVBoxLayout(self.w)

        self.thread = IPCQThread(
            "/tmp/test-socket.ipc"
        )

        self.b = QtWidgets.QPushButton(self, "Push Me")
        self.b.clicked.connect(self.b_slot)
        self.lay.addWidget(self.b)

        self.thread.start()
Example #10
0
    def setupUi(self):
        self.setGeometry(QtCore.QRect(100, 100, 500, 500))

        # create widget inside this window
        self.w = QtWidgets.QFrame(self)
        self.w.setAutoFillBackground(True)
        self.w.setStyleSheet("QFrame {background-color: blue;}")
        self.setCentralWidget(self.w)

        self.lay = QtWidgets.QVBoxLayout(self.w)

        self.thread = WWWQThread(singleton.ipc_dir.getFile("pyramid.ipc"),
                                 inspect.currentframe())
        self.ws_thread = WebSocketThread(singleton.ipc_dir.getFile("ws.ipc"))

        self.b = QtWidgets.QPushButton(self, "Push Me")
        self.b.clicked.connect(self.b_slot)
        self.lay.addWidget(self.b)

        self.ws_thread.signals.base.connect(self.ws_message)

        self.thread.start()
        time.sleep(1)
        self.ws_thread.start()
Example #11
0
    def setupUi(self):

        rec = QtWidgets.QApplication.desktop().screenGeometry()
        height = rec.height()
        width = rec.width()

        self.setGeometry(QtCore.QRect(0, 0, width, height // 2))
        self.w = QtWidgets.QWidget(self)
        self.setCentralWidget(self.w)
        self.lay = QtWidgets.QVBoxLayout(self.w)

        # return

        # divide window into three parts
        self.upper = QtWidgets.QWidget(self.w)
        self.middle = QtWidgets.QWidget(self.w)
        self.lower = QtWidgets.QWidget(self.w)
        self.lowest = QtWidgets.QWidget(self.w)
        self.lay.addWidget(self.upper)
        self.lay.addWidget(self.middle)
        self.lay.addWidget(self.lower)
        self.lay.addWidget(self.lowest)

        # upper part: detectors widget and the video itself
        self.upperlay = QtWidgets.QHBoxLayout(self.upper)

        # self.widget  =QtWidgets.QTextEdit(self.upper)
        self.widget = QtWidgets.QWidget(self.upper)
        self.widget_lay = QtWidgets.QVBoxLayout(self.widget)

        # self.widget = self.mvision_process.getWidget()
        # self.widget.setParent(self.upper)

        self.video_area = QtWidgets.QWidget(self.upper)
        self.video_lay = QtWidgets.QGridLayout(self.video_area)

        self.upperlay.addWidget(self.widget)
        self.upperlay.addWidget(self.video_area)
        self.widget.setSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                  QtWidgets.QSizePolicy.Minimum)
        self.video_area.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                      QtWidgets.QSizePolicy.Expanding)
        """
        [------|--------------------------------------]
        [Open File] [Close Live] [Play] [Stop] [Rewind]
        """

        self.middlelay = QtWidgets.QHBoxLayout(self.middle)
        self.slider = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal,
                                        self.middle)
        self.middlelay.addWidget(self.slider)
        self.slider.setTracking(False)

        self.lowerlay = QtWidgets.QHBoxLayout(self.lower)
        self.open_file_button = QtWidgets.QPushButton("Open File", self.lower)
        self.close_file_button = QtWidgets.QPushButton("Close File",
                                                       self.lower)
        self.play_button = QtWidgets.QPushButton("Play", self.lower)
        self.stop_button = QtWidgets.QPushButton("Stop", self.lower)
        self.rewind_button = QtWidgets.QPushButton("<<", self.lower)
        self.seek_label = QtWidgets.QLabel("<<", self.lower)

        self.lowerlay.addWidget(self.open_file_button)
        self.lowerlay.addWidget(self.close_file_button)
        self.lowerlay.addWidget(self.play_button)
        self.lowerlay.addWidget(self.stop_button)
        self.lowerlay.addWidget(self.rewind_button)
        self.lowerlay.addWidget(self.seek_label)

        self.open_file_button.clicked.connect(self.open_file_button_slot)
        self.close_file_button.clicked.connect(self.close_file_button_slot)
        self.play_button.clicked.connect(self.play_button_slot)
        self.stop_button.clicked.connect(self.stop_button_slot)
        self.rewind_button.clicked.connect(self.rewind_button_slot)
        self.slider.valueChanged.connect(self.slider_slot)

        # lowest part: some text
        self.lowestlay = QtWidgets.QVBoxLayout(self.lowest)
        self.infotext = QtWidgets.QLabel("info text", self.lowest)
        self.lowestlay.addWidget(self.infotext)
Example #12
0
 def makeButtons(self):
     super().makeButtons()
     self.copyto_button = QtWidgets.QPushButton("COPY", self.buttons)
     self.buttons_lay.addWidget(self.copyto_button)
     # self.copyto_button.clicked.connect(self.signals.copy_request)
     self.copyto_button.clicked.connect(self.copy_slot)
Example #13
0
    def __init__(self, ip, slot=1, max_slot=32, parent=None):
        """
        ip corresponds to slot
        
        max ip = ip + (max_slot - slot)
        
        """
        super().__init__(parent)
        self.setWindowTitle("Configuration Copy")
        
        self.max_dn = max_slot - slot
        
        assert(isinstance(slot, int))
        ip_nums=[]
        for part in ip.split("."):
            ip_nums.append(int(part))
            
        self.start_ip_text = ip
    
        self.min_num = ip_nums.pop(-1) # take the last number
        self.max_num = self.min_num + self.max_dn
        self.min_slot = slot
    
        self.stop_ip_text =""
        for part in ip_nums:
            self.stop_ip_text += str(part)+"."
    
        self.lay = QtWidgets.QVBoxLayout(self)
    
        self.field = QtWidgets.QWidget(self)
        self.buttons = QtWidgets.QWidget(self)
        
        self.lay.addWidget(self.field)
        self.lay.addWidget(self.buttons)
    
        self.field_lay = QtWidgets.QGridLayout(self.field)
        self.buttons_lay = QtWidgets.QHBoxLayout(self.buttons)
        
        self.ip_label = QtWidgets.QLabel("IP range", self.field)
        self.slot_label = QtWidgets.QLabel("Slot range", self.field)
        self.field_lay.addWidget(self.ip_label, 0, 0)
        self.field_lay.addWidget(self.slot_label, 1, 0)
        
        self.ip_field = QtWidgets.QWidget(self.field)
        self.slot_field = QtWidgets.QWidget(self.field)
        self.field_lay.addWidget(self.ip_field, 0, 1)
        self.field_lay.addWidget(self.slot_field, 1, 1)
        
        self.write_button = QtWidgets.QPushButton("Overwrite slots", self.buttons)
        self.cancel_button = QtWidgets.QPushButton("Cancel", self.buttons)
        # self.buttons_lay.addWidget(self.write_button, 2, 0)
        # self.buttons_lay.addWidget(self.cancel_button, 3, 0)
        self.buttons_lay.addWidget(self.write_button)
        self.buttons_lay.addWidget(self.cancel_button)

        self.ip_field_lay = QtWidgets.QHBoxLayout(self.ip_field)
        self.slot_field_lay = QtWidgets.QHBoxLayout(self.slot_field)

        self.ip_field_label = QtWidgets.QLabel(
            self.start_ip_text + 
            " - " + 
            self.stop_ip_text)
        
        
        self.ip_field_input = QtWidgets.QSpinBox(self.ip_field)
        self.ip_field_lay.addWidget(self.ip_field_label)
        self.ip_field_lay.addWidget(self.ip_field_input)
        self.ip_field_input.setMinimum(self.min_num)
        self.ip_field_input.setMaximum(self.max_num)
        
        self.slot_field_label = QtWidgets.QLabel(self.slot_field) 
        self.slot_field_lay.addWidget(self.slot_field_label)
        
        self.ip_field_input.valueChanged.connect(self.update_ip_slot)
        self.write_button.clicked.connect(lambda: self.done(1))
        self.cancel_button.clicked.connect(lambda: self.done(0))

        self.update_ip_slot(self.min_num)
Example #14
0
    def makeWidget(self, qscreen: QtGui.QScreen, geom: tuple = ()):
        # (re)create the widget, do the same for children
        # how children are placed on the parent widget, depends on the subclass
        self.window = self.ContainerWindow(self.signals, self.title,
                                           self.parent)

        # send to correct x-screen
        self.window.show()
        self.window.windowHandle().setScreen(qscreen)
        self.n_xscreen = self.gpu_handler.getXScreenNum(
            qscreen
        )  # the correct x-screen number must be passed upstream, to the VideoContainer

        # continue window / widget construction in the correct x screen
        self.main_widget = self.ContainerWidget(self.window)  # a QTabWidget
        self.main_layout = QtWidgets.QVBoxLayout(self.main_widget)
        self.window.setCentralWidget(self.main_widget)

        if len(geom) >= 4:
            self.window.setGeometry(geom[0], geom[1], geom[2], geom[3])

        # create tabs
        self.play_video_tab = QtWidgets.QWidget(None)
        self.play_video_lay = QtWidgets.QVBoxLayout(self.play_video_tab)

        self.calendar_tab = QtWidgets.QWidget(None)
        self.calendar_lay = QtWidgets.QVBoxLayout(self.calendar_tab)

        self.main_widget.addTab(self.play_video_tab, "Recordings")
        self.main_widget.addTab(self.calendar_tab, "Calendar")

        # **** Recordings tab *****
        # create the grid into "the Recordings" tab (self.play_video_tab)
        self.grid_widget = self.GridWidget(self.play_video_tab)
        self.play_video_lay.addWidget(self.grid_widget)

        self.grid_layout = QtWidgets.QGridLayout(self.grid_widget)
        self.grid_layout.setHorizontalSpacing(2)
        self.grid_layout.setVerticalSpacing(2)
        # ( int left, int top, int right, int bottom )
        self.grid_layout.setContentsMargins(0, 0, 0, 0)

        # put timeline widget under the grid
        self.timelinewidget = TimeLineWidget(datetime.date.today(),
                                             parent=self.play_video_tab)
        # self.timelinewidget.setLogLevel(logging.DEBUG)
        self.play_video_lay.addWidget(self.timelinewidget)

        # put buttons under the timeline
        self.buttons = QtWidgets.QWidget(self.play_video_tab)
        self.buttons_lay = QtWidgets.QHBoxLayout(self.buttons)

        self.play_video_lay.addWidget(self.buttons)

        self.play_button = QtWidgets.QPushButton("play", self.buttons)
        self.stop_button = QtWidgets.QPushButton("stop", self.buttons)
        self.zoom_to_fs_button = QtWidgets.QPushButton("limits", self.buttons)

        self.buttons_lay.addWidget(self.play_button)
        self.buttons_lay.addWidget(self.stop_button)
        self.buttons_lay.addWidget(self.zoom_to_fs_button)

        # **** Calendar tab *****
        # put the calendar into the "Calendar" tab (self.calendar_tab)
        # calendar
        self.calendarwidget = CalendarWidget(datetime.date.today(),
                                             parent=self.calendar_tab)
        self.calendar_lay.addWidget(self.calendarwidget)
        """
        self.playback_controller = PlaybackController(
            calendar_widget     = self.calendarwidget,
            timeline_widget     = self.timelinewidget,
            valkkafs_manager    = self.valkkafsmanager,
            play_button         = self.play_button,
            stop_button         = self.stop_button
            )
        """
        self.widget_set = WidgetSet(calendar_widget=self.calendarwidget,
                                    timeline_widget=self.timelinewidget,
                                    play_button=self.play_button,
                                    stop_button=self.stop_button,
                                    zoom_to_fs_button=self.zoom_to_fs_button)
        self.playback_controller.register(self.widget_set)

        class ScreenMenu(QuickMenu):
            title = "Change Screen"
            elements = [
                QuickMenuElement(title="Screen 1"),
                QuickMenuElement(title="Screen 2")
            ]

        """ TODO: activate after gpu-hopping has been debugged
        self.screenmenu = ScreenMenu(self.window)
        self.screenmenu.screen_1.triggered.connect(self.test_slot)
        self.screenmenu.screen_2.triggered.connect(self.test_slot)
        """

        if (len(self.gpu_handler.true_screens) > 1):
            # so, there's more than a single x screen: create a button for
            # changing x-screens
            self.button = QtWidgets.QPushButton("Change Screen",
                                                self.main_widget)
            self.main_layout.addWidget(self.button)
            self.button.setSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                      QtWidgets.QSizePolicy.Minimum)
            self.button.clicked.connect(self.change_xscreen_slot)

        self.placeChildren()