예제 #1
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()
예제 #2
0
    def makeWidget(self):
        """Subclassed from Row : custom form.  Add a total disk space field.
        """
        self.widget = FormWidget()
        self.lay = QtWidgets.QGridLayout(self.widget)

        cc = 0
        # self.placeWidget(cc, "record"); cc+=1
        self.placeWidget(cc, "blocksize")
        cc += 1
        self.placeWidget(cc, "n_blocks")
        cc += 1

        self.label_total_size = QtWidgets.QLabel("Total Size (MB)",
                                                 self.widget)
        self.label_total_size_value = QtWidgets.QLabel("", self.widget)
        self.placeWidgetPair(
            cc, (self.label_total_size, self.label_total_size_value))
        cc += 1

        #self.placeWidget(cc, "fs_flavor"); cc+=1
        #self.placeWidget(cc, "partition_uuid"); cc+=1

        self.connectNotifications()

        def fs_size_changed():
            total_size_mb = self["blocksize"].getValue(
            ) * self["n_blocks"].getValue()
            self.label_total_size_value.setText(str(total_size_mb))

        """
        def block_device_slot():
            self["partition_uuid"].updateWidget()
            n_devs = self["partition_uuid"].widget.count() # QComboBox.count()
            if n_devs < 1:
                self["fs_flavor"]["file"].setChecked(True)
        """
        self["blocksize"].widget.valueChanged.connect(fs_size_changed)
        self["n_blocks"].widget.valueChanged.connect(fs_size_changed)
        # self["fs_flavor"]["valkkafs"].clicked.connect(block_device_slot)

        fs_size_changed()
        # block_device_slot()
        """
예제 #3
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)
예제 #4
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)
예제 #5
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)
예제 #6
0
    def makeWidget(self):
        """Subclassed from Row : custom form.  Add a summary RTSP address in the end of the form, etc.
        """
        # super().makeWidget() # do all by hand
        self.widget = FormWidget()
        self.lay = QtWidgets.QGridLayout(self.widget)

        cc = 0
        self.placeWidget(cc, "slot")
        cc += 1
        self.placeWidget(cc, "address")
        cc += 1
        self.placeWidget(cc, "username")
        cc += 1
        self.placeWidget(cc, "password")
        cc += 1
        self.placeWidget(cc, "port")
        cc += 1
        self.placeWidget(cc, "tail")
        cc += 1
        self.placeWidget(cc, "force_tcp")
        cc += 1
        self.placeWidget(cc, "record")
        cc += 1
        # self.setVisible("tail", False) # test

        # Mainstream
        self.label_mainstream = QtWidgets.QLabel("Mainstream", self.widget)
        self.label_mainstream.setStyleSheet(style.form_highlight)
        self.placeWidgetPair(cc, (self.label_mainstream, None))
        cc += 1
        self.placeWidget(cc, "subaddress_main")
        cc += 1
        # complete RTSP address
        self.label_mainstream_address = QtWidgets.QLabel(
            "RTSP address", self.widget)
        self.mainstream_address = QtWidgets.QLabel("", self.widget)
        self.placeWidgetPair(
            cc, (self.label_mainstream_address, self.mainstream_address))
        cc += 1
        # live and rec
        self.placeWidget(cc, "live_main")
        cc += 1
        self.placeWidget(cc, "rec_main")
        cc += 1

        # Substream
        self.label_substream = QtWidgets.QLabel("Substream", self.widget)
        self.label_substream.setStyleSheet(style.form_highlight)
        self.placeWidgetPair(cc, (self.label_substream, None))
        cc += 1
        self.label_substream.setVisible(False)  # hide for the moment
        self.placeWidget(cc, "subaddress_sub")
        cc += 1
        # complete RTSP address
        self.label_substream_address = QtWidgets.QLabel(
            "RTSP address", self.widget)
        self.substream_address = QtWidgets.QLabel("", self.widget)
        self.placeWidgetPair(
            cc, (self.label_substream_address, self.substream_address))
        cc += 1
        self.label_substream_address.setVisible(False)
        self.substream_address.setVisible(False)
        # .. hide for the moment

        # live and rec
        self.placeWidget(cc, "live_sub")
        cc += 1
        self.placeWidget(cc, "rec_sub")
        cc += 1
        """ # definitely NOT here!
        # self.copy_label = QtWidgets.QLabel("Copy this camera", self.widget)
        self.copy_button = QtWidgets.QPushButton("Copy", self.widget)
        self.placeWidgetPair(cc, (self.copy_button, None))
        self.copy_button.clicked.connect(self.copy_slot)
        """
        self.connectNotifications()

        def rec_main_clicked():
            if not self["live_main"].widget.isChecked():  # rec requires live
                print("live_main is NOT checked")
                self["rec_main"].widget.setChecked(False)
            if self["rec_main"].widget.isChecked(
            ):  # rec main excludes rec sub
                self["rec_sub"].widget.setChecked(False)

        def rec_sub_clicked():
            if not self["live_sub"].widget.isChecked():  # rec requires live
                print("live_sub is NOT checked")
                self["rec_sub"].widget.setChecked(False)
            if self["rec_sub"].widget.isChecked():  # rec sub excludes rec main
                self["rec_main"].widget.setChecked(False)

        self["rec_main"].widget.clicked.connect(rec_main_clicked)
        self["rec_sub"].widget.clicked.connect(rec_sub_clicked)
        self.widget.signals.show.connect(self.show_slot)

        # TODO: remove these restrictions once functional:
        """
        self["subaddress_main"].widget.setEnabled(False)
        self["subaddress_sub"].widget.setEnabled(False)
        self["live_main"].widget.setEnabled(False)
        self["rec_main"].widget.setEnabled(False)
        self["live_sub"].widget.setEnabled(False)
        self["rec_sub"].widget.setEnabled(False)
        """
        self.setVisible("subaddress_main", False)
        self.setVisible("subaddress_sub", False)
        self.setVisible("live_main", False)
        self.setVisible("rec_main", False)
        self.setVisible("live_sub", False)
        self.setVisible("rec_sub", False)
예제 #7
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()