Ejemplo n.º 1
0
    def contextMenuEvent(self, event):
        network_node = engine.node(self.network_level)

        menu = QtGui.QMenu(event.widget())
        group = QtGui.QActionGroup(menu)
        menu.addAction('Tool Menu...')

        add_operators_menu = menu.addMenu("Add")

        node_types = network_node.childTypeCategory().nodeTypes()
        for node_type_name, node_class in node_types.iteritems():
            icon = QtGui.QIcon(node_class.iconName())
            action = add_operators_menu.addAction(icon, node_type_name)
            action.setActionGroup(group)
            action.setData(node_type_name)

        group.triggered.connect(self.addOperator)

        menu.exec_(event.screenPos())
Ejemplo n.º 2
0
    def init_menubar(self):
        """
        Create menu bar and add all possible menu options. These are:
            - Image Plots: possible 2D image/scatter plots
            - Line Plots: possible 1D line plots
            - Probe Plots: possible 2D plots arranged according to probe geometry
            - Slice Plots: possible coronal slice images
            - Filter Units: filter displayed plots by unit type (All, Good, MUA)
            - Fit Options: possible keyboard interactions for applying alignment
            - Display Options: possible keyboard interactions to what is displayed on GUI
            - Session Information: extra info, session notes and Allen brain regions description
        """
        # Create menubar widget and add it to the main GUI window
        menu_bar = QtWidgets.QMenuBar(self)
        menu_bar.setNativeMenuBar(False)
        self.setMenuBar(menu_bar)

        # IMAGE PLOTS MENU BAR
        # Define all 2D scatter/ image plot options
        scatter_drift = QtGui.QAction('Amplitude',
                                      self,
                                      checkable=True,
                                      checked=False)
        scatter_drift.triggered.connect(
            lambda: self.plot_scatter(self.scat_drift_data))
        scatter_fr = QtGui.QAction('Cluster Amp vs Depth vs FR',
                                   self,
                                   checkable=True,
                                   checked=False)
        scatter_fr.triggered.connect(
            lambda: self.plot_scatter(self.scat_fr_data))
        scatter_p2t = QtGui.QAction('Cluster Amp vs Depth vs Duration',
                                    self,
                                    checkable=True,
                                    checked=False)
        scatter_p2t.triggered.connect(
            lambda: self.plot_scatter(self.scat_p2t_data))
        scatter_amp = QtGui.QAction('Cluster FR vs Depth vs Amp',
                                    self,
                                    checkable=True,
                                    checked=False)
        scatter_amp.triggered.connect(
            lambda: self.plot_scatter(self.scat_amp_data))
        img_fr = QtGui.QAction('Firing Rate',
                               self,
                               checkable=True,
                               checked=True)
        img_fr.triggered.connect(lambda: self.plot_image(self.img_fr_data))
        img_corr = QtGui.QAction('Correlation',
                                 self,
                                 checkable=True,
                                 checked=False)
        img_corr.triggered.connect(lambda: self.plot_image(self.img_corr_data))
        img_rmsAP = QtGui.QAction('rms AP',
                                  self,
                                  checkable=True,
                                  checked=False)
        img_rmsAP.triggered.connect(
            lambda: self.plot_image(self.img_rms_APdata))
        img_rmsLFP = QtGui.QAction('rms LFP',
                                   self,
                                   checkable=True,
                                   checked=False)
        img_rmsLFP.triggered.connect(
            lambda: self.plot_image(self.img_rms_LFPdata))
        img_LFP = QtGui.QAction('LFP Spectrum',
                                self,
                                checkable=True,
                                checked=False)
        img_LFP.triggered.connect(lambda: self.plot_image(self.img_lfp_data))

        # Initialise with firing rate 2D plot
        self.img_init = img_fr

        # Add menu bar for 2D scatter/ image plot options
        img_options = menu_bar.addMenu('Image Plots')
        # Add action group so we can toggle through 2D scatter/ image plot options
        self.img_options_group = QtGui.QActionGroup(img_options)
        # Only allow one to plot to be selected at any one time
        self.img_options_group.setExclusive(True)
        img_options.addAction(img_fr)
        self.img_options_group.addAction(img_fr)
        img_options.addAction(scatter_drift)
        self.img_options_group.addAction(scatter_drift)
        img_options.addAction(img_corr)
        self.img_options_group.addAction(img_corr)
        img_options.addAction(img_rmsAP)
        self.img_options_group.addAction(img_rmsAP)
        img_options.addAction(img_rmsLFP)
        self.img_options_group.addAction(img_rmsLFP)
        img_options.addAction(img_LFP)
        self.img_options_group.addAction(img_LFP)
        img_options.addAction(scatter_fr)
        self.img_options_group.addAction(scatter_fr)
        img_options.addAction(scatter_p2t)
        self.img_options_group.addAction(scatter_p2t)
        img_options.addAction(scatter_amp)
        self.img_options_group.addAction(scatter_amp)

        stim_type = list(self.img_stim_data.keys())
        for stim in stim_type:
            img = QtGui.QAction(stim, self, checkable=True, checked=False)
            img.triggered.connect(lambda checked, item=stim: self.plot_image(
                self.img_stim_data[item]))
            img_options.addAction(img)
            self.img_options_group.addAction(img)

        # LINE PLOTS MENU BAR
        # Define all 1D line plot options
        line_fr = QtGui.QAction('Firing Rate',
                                self,
                                checkable=True,
                                checked=True)
        line_fr.triggered.connect(lambda: self.plot_line(self.line_fr_data))
        line_amp = QtGui.QAction('Amplitude',
                                 self,
                                 checkable=True,
                                 checked=False)
        line_amp.triggered.connect(lambda: self.plot_line(self.line_amp_data))
        # Initialise with firing rate 1D plot
        self.line_init = line_fr
        # Add menu bar for 1D line plot options
        line_options = menu_bar.addMenu('Line Plots')
        # Add action group so we can toggle through 2D scatter/ image plot options
        self.line_options_group = QtGui.QActionGroup(line_options)
        # Only allow one to plot to be selected at any one time
        self.line_options_group.setExclusive(True)
        line_options.addAction(line_fr)
        self.line_options_group.addAction(line_fr)
        line_options.addAction(line_amp)
        self.line_options_group.addAction(line_amp)

        # PROBE PLOTS MENU BAR
        # Define all 2D probe plot options
        # In two stages 1) RMS plots manually, 2) frequency plots in for loop
        probe_rmsAP = QtGui.QAction('rms AP',
                                    self,
                                    checkable=True,
                                    checked=True)
        probe_rmsAP.triggered.connect(
            lambda: self.plot_probe(self.probe_rms_APdata))
        probe_rmsLFP = QtGui.QAction('rms LFP',
                                     self,
                                     checkable=True,
                                     checked=False)
        probe_rmsLFP.triggered.connect(
            lambda: self.plot_probe(self.probe_rms_LFPdata))

        # Initialise with rms of AP probe plot
        self.probe_init = probe_rmsAP

        # Add menu bar for 2D probe plot options
        probe_options = menu_bar.addMenu("Probe Plots")
        # Add action group so we can toggle through probe plot options
        self.probe_options_group = QtGui.QActionGroup(probe_options)
        self.probe_options_group.setExclusive(True)
        probe_options.addAction(probe_rmsAP)
        self.probe_options_group.addAction(probe_rmsAP)
        probe_options.addAction(probe_rmsLFP)
        self.probe_options_group.addAction(probe_rmsLFP)

        # Add the different frequency band options in a loop. These bands must be the same as
        # defined in plot_data
        freq_bands = np.vstack(([0, 4], [4, 10], [10, 30], [30, 80], [80,
                                                                      200]))
        for iF, freq in enumerate(freq_bands):
            band = f"{freq[0]} - {freq[1]} Hz"
            probe = QtGui.QAction(band, self, checkable=True, checked=False)
            probe.triggered.connect(lambda checked, item=band: self.plot_probe(
                self.probe_lfp_data[item]))
            probe_options.addAction(probe)
            self.probe_options_group.addAction(probe)

        sub_types = list(self.probe_rfmap.keys())
        for sub in sub_types:
            probe = QtGui.QAction(f'RF Map - {sub}',
                                  self,
                                  checkable=True,
                                  checked=False)
            probe.triggered.connect(lambda checked, item=sub: self.plot_probe(
                self.probe_rfmap[item], bounds=self.rfmap_boundaries))
            probe_options.addAction(probe)
            self.probe_options_group.addAction(probe)

        # SLICE PLOTS MENU BAR
        # Define all coronal slice plot options
        slice_hist_rd = QtGui.QAction('Histology Red',
                                      self,
                                      checkable=True,
                                      checked=True)
        slice_hist_rd.triggered.connect(
            lambda: self.plot_slice(self.slice_data, 'hist_rd'))
        slice_hist_gr = QtGui.QAction('Histology Green',
                                      self,
                                      checkable=True,
                                      checked=False)
        slice_hist_gr.triggered.connect(
            lambda: self.plot_slice(self.slice_data, 'hist_gr'))
        slice_ccf = QtGui.QAction('CCF', self, checkable=True, checked=False)
        slice_ccf.triggered.connect(
            lambda: self.plot_slice(self.slice_data, 'ccf'))
        slice_label = QtGui.QAction('Annotation',
                                    self,
                                    checkable=True,
                                    checked=False)
        slice_label.triggered.connect(
            lambda: self.plot_slice(self.slice_data, 'label'))
        # Initialise with raw histology image
        self.slice_init = slice_hist_rd

        # Add menu bar for slice plot

        slice_options = menu_bar.addMenu("Slice Plots")
        # Add action group so we can toggle through slice plot options
        self.slice_options_group = QtGui.QActionGroup(slice_options)
        self.slice_options_group.setExclusive(True)
        slice_options.addAction(slice_hist_rd)
        self.slice_options_group.addAction(slice_hist_rd)
        slice_options.addAction(slice_hist_gr)
        self.slice_options_group.addAction(slice_hist_gr)
        slice_options.addAction(slice_ccf)
        self.slice_options_group.addAction(slice_ccf)
        slice_options.addAction(slice_label)
        self.slice_options_group.addAction(slice_label)

        # FILTER UNITS MENU BAR
        # Define unit filtering options
        all_units = QtGui.QAction('All', self, checkable=True, checked=True)
        all_units.triggered.connect(lambda: self.filter_unit_pressed('all'))
        good_units = QtGui.QAction('KS good',
                                   self,
                                   checkable=True,
                                   checked=False)
        good_units.triggered.connect(
            lambda: self.filter_unit_pressed('KS good'))
        mua_units = QtGui.QAction('KS mua',
                                  self,
                                  checkable=True,
                                  checked=False)
        mua_units.triggered.connect(lambda: self.filter_unit_pressed('KS mua'))
        ibl_units = QtGui.QAction('IBL good',
                                  self,
                                  checkable=True,
                                  checked=False)
        ibl_units.triggered.connect(
            lambda: self.filter_unit_pressed('IBL good'))
        # Initialise with all units being shown
        self.unit_init = all_units

        # Add menu bar for slice plot options
        unit_filter_options = menu_bar.addMenu("Filter Units")
        # Add action group so we can toggle through unit options
        unit_filter_options_group = QtGui.QActionGroup(unit_filter_options)
        unit_filter_options_group.setExclusive(True)
        unit_filter_options.addAction(all_units)
        unit_filter_options_group.addAction(all_units)
        unit_filter_options.addAction(good_units)
        unit_filter_options_group.addAction(good_units)
        unit_filter_options.addAction(mua_units)
        unit_filter_options_group.addAction(mua_units)
        unit_filter_options.addAction(ibl_units)
        unit_filter_options_group.addAction(ibl_units)

        # FIT OPTIONS MENU BAR
        # Define all possible keyboard shortcut interactions for GUI
        # Shortcut to apply interpolation
        fit_option = QtGui.QAction('Fit', self)
        fit_option.setShortcut('Return')
        fit_option.triggered.connect(self.fit_button_pressed)
        # Shortcuts to apply offset
        offset_option = QtGui.QAction('Offset', self)
        offset_option.setShortcut('O')
        offset_option.triggered.connect(self.offset_button_pressed)
        moveup_option = QtGui.QAction('Offset + 50um', self)
        moveup_option.setShortcut('Shift+Up')
        moveup_option.triggered.connect(self.moveup_button_pressed)
        movedown_option = QtGui.QAction('Offset - 50um', self)
        movedown_option.setShortcut('Shift+Down')
        movedown_option.triggered.connect(self.movedown_button_pressed)
        # Shortcut to remove a reference line
        delete_line_option = QtGui.QAction('Remove Line', self)
        delete_line_option.setShortcut('Shift+D')
        delete_line_option.triggered.connect(self.delete_line_button_pressed)
        # Shortcut to move between previous/next moves
        next_option = QtGui.QAction('Next', self)
        next_option.setShortcut('Right')
        next_option.triggered.connect(self.next_button_pressed)
        prev_option = QtGui.QAction('Previous', self)
        prev_option.setShortcut('Left')
        prev_option.triggered.connect(self.prev_button_pressed)
        # Shortcut to reset GUI to initial state
        reset_option = QtGui.QAction('Reset', self)
        reset_option.setShortcut('Shift+R')
        reset_option.triggered.connect(self.reset_button_pressed)
        # Shortcut to upload final state to Alyx/to local file
        complete_option = QtGui.QAction('Upload', self)
        complete_option.setShortcut('Shift+U')
        if not self.offline:
            complete_option.triggered.connect(self.display_qc_options)
        else:
            complete_option.triggered.connect(
                self.complete_button_pressed_offline)

        # Add menu bar with all possible keyboard interactions
        fit_options = menu_bar.addMenu("Fit Options")
        fit_options.addAction(fit_option)
        fit_options.addAction(offset_option)
        fit_options.addAction(moveup_option)
        fit_options.addAction(movedown_option)
        fit_options.addAction(delete_line_option)
        fit_options.addAction(next_option)
        fit_options.addAction(prev_option)
        fit_options.addAction(reset_option)
        fit_options.addAction(complete_option)

        # DISPLAY OPTIONS MENU BAR
        # Define all possible keyboard shortcut for visualisation features
        # Shortcuts to toggle between plots options
        toggle1_option = QtGui.QAction('Toggle Image Plots', self)
        toggle1_option.setShortcut('Alt+1')
        toggle1_option.triggered.connect(
            lambda: self.toggle_plots(self.img_options_group))
        toggle2_option = QtGui.QAction('Toggle Line Plots', self)
        toggle2_option.setShortcut('Alt+2')
        toggle2_option.triggered.connect(
            lambda: self.toggle_plots(self.line_options_group))
        toggle3_option = QtGui.QAction('Toggle Probe Plots', self)
        toggle3_option.setShortcut('Alt+3')
        toggle3_option.triggered.connect(
            lambda: self.toggle_plots(self.probe_options_group))
        toggle4_option = QtGui.QAction('Toggle Slice Plots', self)
        toggle4_option.setShortcut('Alt+4')
        toggle4_option.triggered.connect(
            lambda: self.toggle_plots(self.slice_options_group))

        # Shortcuts to switch order of 3 panels in ephys plot
        view1_option = QtGui.QAction('View 1', self)
        view1_option.setShortcut('Shift+1')
        view1_option.triggered.connect(lambda: self.set_view(view=1))
        view2_option = QtGui.QAction('View 2', self)
        view2_option.setShortcut('Shift+2')
        view2_option.triggered.connect(lambda: self.set_view(view=2))
        view3_option = QtGui.QAction('View 3', self)
        view3_option.setShortcut('Shift+3')
        view3_option.triggered.connect(lambda: self.set_view(view=3))

        # Shortcut to reset axis on figures
        axis_option = QtGui.QAction('Reset Axis', self)
        axis_option.setShortcut('Shift+A')
        axis_option.triggered.connect(self.reset_axis_button_pressed)

        # Shortcut to hide/show region labels
        toggle_labels_option = QtGui.QAction('Hide/Show Labels', self)
        toggle_labels_option.setShortcut('Shift+L')
        toggle_labels_option.triggered.connect(
            self.toggle_labels_button_pressed)

        # Shortcut to hide/show reference lines
        toggle_lines_option = QtGui.QAction('Hide/Show Lines', self)
        toggle_lines_option.setShortcut('Shift+H')
        toggle_lines_option.triggered.connect(self.toggle_line_button_pressed)

        # Shortcut to hide/show reference lines and channels on slice image
        toggle_channels_option = QtGui.QAction('Hide/Show Channels', self)
        toggle_channels_option.setShortcut('Shift+C')
        toggle_channels_option.triggered.connect(
            self.toggle_channel_button_pressed)

        # Shortcut to change default histology reference image
        toggle_histology_option = QtGui.QAction('Hide/Show Nearby Boundaries',
                                                self)
        toggle_histology_option.setShortcut('Shift+N')
        toggle_histology_option.triggered.connect(
            self.toggle_histology_button_pressed)

        # Shortcuts for cluster popup window
        popup_minimise = QtGui.QAction('Minimise/Show Cluster Popup', self)
        popup_minimise.setShortcut('Alt+M')
        popup_minimise.triggered.connect(self.minimise_popups)
        popup_close = QtGui.QAction('Close Cluster Popup', self)
        popup_close.setShortcut('Alt+X')
        popup_close.triggered.connect(self.close_popups)

        # Option to save all plots
        save_plots = QtGui.QAction('Save Plots', self)
        save_plots.triggered.connect(self.save_plots)

        # Add menu bar with all possible display options
        display_options = menu_bar.addMenu('Display Options')
        display_options.addAction(toggle1_option)
        display_options.addAction(toggle2_option)
        display_options.addAction(toggle3_option)
        display_options.addAction(toggle4_option)
        display_options.addAction(view1_option)
        display_options.addAction(view2_option)
        display_options.addAction(view3_option)
        display_options.addAction(axis_option)
        display_options.addAction(toggle_labels_option)
        display_options.addAction(toggle_lines_option)
        display_options.addAction(toggle_channels_option)
        display_options.addAction(toggle_histology_option)
        display_options.addAction(popup_minimise)
        display_options.addAction(popup_close)
        display_options.addAction(save_plots)

        # SESSION INFORMATION MENU BAR
        # Define all session information options
        # Display any notes associated with recording session
        session_notes = QtGui.QAction('Session Notes', self)
        session_notes.triggered.connect(self.display_session_notes)
        # Shortcut to show label information
        region_info = QtGui.QAction('Region Info', self)
        region_info.setShortcut('Shift+I')
        region_info.triggered.connect(self.describe_labels_pressed)

        # Add menu bar with all possible session info options
        info_options = menu_bar.addMenu('Session Information')
        info_options.addAction(session_notes)
        info_options.addAction(region_info)

        # Display other sessions that are closeby if online mode
        if not self.offline:
            nearby_info = QtGui.QAction('Nearby Sessions', self)
            nearby_info.triggered.connect(self.display_nearby_sessions)
            info_options.addAction(nearby_info)
Ejemplo n.º 3
0
 def addMenuAndToolBar(self, name):
     self.menu[name] = self.menuBar.addMenu(name)
     self.toolBar[name] = self.addToolBar(name)
     self.actionGroup[name] = QtGui.QActionGroup(self)
Ejemplo n.º 4
0
    def __init__(self, lazy=False):
        super(MainWindow, self).__init__()
        uic.loadUi(Path(__file__).parent.joinpath('mainUI.ui'), self)

        self.atlas = AllenAtlas(25)

        # Configure the Menu bar
        menu_bar = QtWidgets.QMenuBar(self)
        menu_bar.setNativeMenuBar(False)
        self.setMenuBar(menu_bar)

        # Add menu bar for mappings
        self.map_menu = menu_bar.addMenu('Mappings')
        self.map_group = QtGui.QActionGroup(self.map_menu)
        # Only allow one to plot to be selected at any one time
        self.map_group.setExclusive(True)
        self.add_menu_bar(self.map_menu, self.map_group, list(self.atlas.regions.mappings.keys()),
                          callback=self.change_mapping, default='Allen')

        # Add menu bar for base image
        self.img_menu = menu_bar.addMenu('Images')
        self.img_group = QtGui.QActionGroup(self.img_menu)
        self.img_group.setExclusive(True)
        images = ['Image', 'Annotation']
        self.add_menu_bar(self.img_menu, self.img_group, images, callback=self.change_image,
                          default='Image')

        # Add menu bar for coverage
        self.coverage_menu = menu_bar.addMenu('Coverage')
        self.coverage_group = QtGui.QActionGroup(self.coverage_menu)
        self.coverage_group.setExclusive(True)
        coverages = ['Coverage cosine', 'Coverage grid 500', 'Coverage grid 250',
                     'Coverage grid 100']
        self.add_menu_bar(self.coverage_menu, self.coverage_group, coverages,
                          callback=self.add_coverage)

        # Add menubar for insertions
        self.insertion_menu = menu_bar.addMenu('Insertions')
        self.insertion_group = QtGui.QActionGroup(self.insertion_menu)
        self.insertion_group.setExclusive(True)
        insertions = ['Resolved', 'Ephys aligned histology track', 'Histology track',
                      'Histology track (best)', 'Micro-manipulator', 'Micro-manipulator (best)',
                      'Planned', 'Planned (best)']
        self.add_menu_bar(self.insertion_menu, self.insertion_group, insertions,
                          callback=self.add_insertions)


        self.coronal = SliceView(self, self.fig_coronal, self.atlas, slice='coronal',
                                 waxis=0, haxis=2, daxis=1)
        self.sagittal = SliceView(self, self.fig_sagittal, self.atlas, slice='sagittal',
                                  waxis=1, haxis=2, daxis=0)
        self.horizontal = SliceView(self, self.fig_horizontal, self.atlas, slice='horizontal',
                                    waxis=1, haxis=0, daxis=2)
        self.horizontal.fig_slice.getViewBox().invertY(True)

        self.top = TopView(self, self.fig_top, self.atlas)
        self.probe = ProbeView(self, self.fig_probe)
        self.coverage = CoverageView(self)
        self.probe_model = ProbeModel(one=one, ba=self.atlas, lazy=lazy)
        self.region = RegionView(self, self.atlas)
        self.change_mapping()

        layout = QtWidgets.QGridLayout()
        layout.addWidget(self.coverage)
        self.coverage_placeholder.setLayout(layout)

        layout = QtWidgets.QGridLayout()
        layout.addWidget(self.region)
        self.region_placeholder.setLayout(layout)

        self.target = None
Ejemplo n.º 5
0
    def create_actions(self):

        self.open_world_action = \
            QtGui.QAction(QtGui.QIcon.fromTheme("document-open",
                            QtGui.QIcon("./res/image/open.png")),
                          "Open XML &World",
                          self)
        self.open_world_action.triggered.connect(self.on_open_world)
        self.open_world_action.setShortcut(
            QtGui.QKeySequence(QtGui.QKeySequence.Open))

        self.open_world_action.setStatusTip("Open a new simulation")

        self.exit_action = \
            QtGui.QAction(QtGui.QIcon.fromTheme("application-exit"),
                    "E&xit",
                    self)
        self.exit_action.triggered.connect(self.close)
        self.exit_action.setShortcut(
            QtGui.QKeySequence(QtGui.QKeySequence.Quit))
        self.exit_action.setToolTip("Quit the Program")
        self.exit_action.setStatusTip("Exit QtSimiam")

        self.rev_action = \
            QtGui.QAction(QtGui.QIcon.fromTheme("media-seek-backward",
                            QtGui.QIcon("./res/image/arrow-left-double.png")),
                          "Rewind", self)
        self.rev_action.triggered.connect(self.on_rewind)
        self.rev_action.setStatusTip("Reset simulation")

        self.run_action = PlayPauseAction(self, self.on_run, self.on_pause)
        self.run_action.setEnabled(False)

        self.grid_action = \
            QtGui.QAction(QtGui.QIcon("./res/image/grid.png"),
                          "Show/Hide grid", self)
        self.grid_action.setStatusTip("Show/hide grid")
        self.grid_action.triggered[bool].connect(self.show_grid)
        self.grid_action.setCheckable(True)
        self.grid_action.setChecked(False)

        self.sens_action = \
            QtGui.QAction(QtGui.QIcon("./res/image/robot-sensors.png"),
                          "Show/Hide sensors", self)
        self.sens_action.setStatusTip("Show/hide robot sensors")
        self.sens_action.triggered[bool].connect(self.show_sensors)
        self.sens_action.setCheckable(True)
        self.sens_action.setChecked(True)

        self.trace_action = \
            QtGui.QAction(QtGui.QIcon("./res/image/robot-tracks.png"),
                          "Show/Hide robot trajectores", self)
        self.trace_action.setStatusTip("Show/hide robot trajectores")
        self.trace_action.triggered[bool].connect(self.show_tracks)
        self.trace_action.setCheckable(True)
        self.trace_action.setChecked(True)

        self.superv_action = \
            QtGui.QAction(QtGui.QIcon("./res/image/robot-supervisors.png"),
                          "Show/Hide supervisor information", self)
        self.superv_action.setStatusTip("Show/hide supervisor information")
        self.superv_action.triggered[bool].connect(self.show_supervisors)
        self.superv_action.setCheckable(True)
        self.superv_action.setChecked(False)

        zoom_group = QtGui.QActionGroup(self)

        self.zoom_world_action = \
            QtGui.QAction(QtGui.QIcon("./res/image/zoom-scene.png"),
                          "Show all", self)
        self.zoom_world_action.triggered.connect(self.zoom_scene)
        self.zoom_world_action.setStatusTip("Show the whole world in view")
        self.zoom_world_action.setCheckable(True)
        self.zoom_world_action.setChecked(True)
        zoom_group.addAction(self.zoom_world_action)

        self.zoom_robot_action = \
            QtGui.QAction(QtGui.QIcon("./res/image/zoom-robot.png"),
                          "Follow robot", self)
        self.zoom_robot_action.triggered.connect(self.zoom_robot)
        self.zoom_robot_action.setStatusTip("Center the view on robot")
        self.zoom_robot_action.setCheckable(True)
        self.zoom_robot_action.setChecked(False)
        zoom_group.addAction(self.zoom_robot_action)

        self.rotate_action = \
            QtGui.QAction(QtGui.QIcon("./res/image/zoom-robot-rot.png"),
                          "Follow robot orientation", self)
        self.rotate_action.triggered.connect(self.rot_robot)
        self.rotate_action.setStatusTip("Rotate the view with the robot")
        self.rotate_action.setCheckable(True)
        self.rotate_action.setChecked(False)
        self.rotate_action.setEnabled(False)

        self.showlog_action = QtGui.QAction("Show log", self)
        self.showlog_action.triggered.connect(self.add_logdock)

        self.about_action = \
            QtGui.QAction(QtGui.QIcon.fromTheme("help-about",
                            self.windowIcon()),
                          "About",self)
        self.about_action.setStatusTip("About QtSimiam")
        self.about_action.triggered.connect(self.about)
Ejemplo n.º 6
0
    def setupUi(self, MainWindow):
        #MainWindow.setWindowTitle('PictureWorkshop')
        MainWindow.setObjectName("Pupil Dilation Tracker")
        MainWindow.resize(1603, 1158)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setEnabled(True)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.centralwidget.sizePolicy().hasHeightForWidth())
        self.centralwidget.setSizePolicy(sizePolicy)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout.addLayout(self.verticalLayout, 1, 0, 1, 1)
        self.video_title = QtWidgets.QLabel(self.centralwidget)
        self.video_title.setStyleSheet("font: 75 11pt \"Adobe Devanagari\";")
        self.video_title.setObjectName("video_title")
        self.gridLayout.addWidget(self.video_title, 0, 0, 1, 2,
                                  QtCore.Qt.AlignHCenter)
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setObjectName("tabWidget")
        self.tab_FrameViewer = QtWidgets.QWidget()
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.tab_FrameViewer.sizePolicy().hasHeightForWidth())
        self.tab_FrameViewer.setSizePolicy(sizePolicy)
        self.tab_FrameViewer.setObjectName("tab_FrameViewer")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_FrameViewer)
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.frame = QtWidgets.QFrame(self.tab_FrameViewer)
        self.frame.setMinimumSize(QtCore.QSize(0, 100))
        self.frame.setSizeIncrement(QtCore.QSize(0, 0))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.frame)
        self.verticalLayout_3.setObjectName("verticalLayout_3")

        self.frame_2 = QtWidgets.QFrame(self.frame)
        self.frame_2.setMinimumSize(QtCore.QSize(0, 70))
        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")

        self.gridLayout_3 = QtWidgets.QGridLayout(self.frame_2)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.horizontalSlider = QtWidgets.QSlider(self.frame_2)
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.gridLayout_3.addWidget(self.horizontalSlider, 0, 1, 1, 2)
        self.label_frameNum = QtWidgets.QLabel(self.frame_2)
        self.label_frameNum.setStyleSheet("font: 75 9pt \"Adobe Devanagari\";")
        self.label_frameNum.setObjectName("label_frameNum")
        self.gridLayout_3.addWidget(self.label_frameNum, 2, 1, 1, 2,
                                    QtCore.Qt.AlignHCenter)
        spacerItem = QtWidgets.QSpacerItem(40, 20,
                                           QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_3.addItem(spacerItem, 1, 0, 1, 1)
        self.L_button = QtWidgets.QPushButton(self.frame_2)
        self.L_button.setMinimumSize(QtCore.QSize(100, 100))
        self.L_button.setMaximumSize(QtCore.QSize(100, 100))
        self.L_button.setStyleSheet("font: 16pt \"MS Shell Dlg 2\";")
        self.L_button.setObjectName("L_button")
        self.gridLayout_3.addWidget(self.L_button, 1, 1, 1, 1)
        self.R_button = QtWidgets.QPushButton(self.frame_2)
        self.R_button.setMinimumSize(QtCore.QSize(100, 100))
        self.R_button.setMaximumSize(QtCore.QSize(100, 100))
        self.R_button.setStyleSheet("font: 16pt \"MS Shell Dlg 2\";")
        self.R_button.setObjectName("R_button")
        self.gridLayout_3.addWidget(self.R_button, 1, 2, 1, 1)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20,
                                            QtWidgets.QSizePolicy.Expanding,
                                            QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_3.addItem(spacerItem1, 1, 3, 1, 1)

        self.verticalLayout_3.addWidget(self.frame_2)
        self.gridLayout_2.addWidget(self.frame, 2, 1, 1, 1)
        self.checkBox_UsePrevData = QtWidgets.QCheckBox(self.tab_FrameViewer)
        self.checkBox_UsePrevData.setObjectName("checkBox_UsePrevData")
        self.gridLayout_2.addWidget(self.checkBox_UsePrevData, 0, 1, 1, 1,
                                    QtCore.Qt.AlignRight)

        self.start_push_button = QtWidgets.QPushButton(self.tab_FrameViewer)
        # self.start_push_button.setGeometry(QtCore.QRect(350, 10, 131, 40))
        self.start_push_button.setGeometry(QtCore.QRect(180, 10, 131, 40))
        self.start_push_button.setObjectName("start_push_button")
        self.custom_range_box = QtWidgets.QLineEdit(self.tab_FrameViewer)
        self.custom_range_box.setGeometry(QtCore.QRect(90, 10, 71, 41))
        self.custom_range_box.setObjectName("custom_range_box")
        self.threshold_box = QtWidgets.QLineEdit(self.tab_FrameViewer)
        # self.threshold_box.setGeometry(QtCore.QRect(260, 10, 61, 41))
        self.threshold_box.setGeometry(QtCore.QRect(580, 10, 61, 41))
        self.threshold_box.setObjectName("threshold_box")
        self.threshold_label = QtWidgets.QLabel(self.tab_FrameViewer)
        # self.threshold_label.setGeometry(QtCore.QRect(170, 10, 81, 23))
        self.threshold_label.setGeometry(QtCore.QRect(490, 10, 81, 23))
        self.threshold_label.setObjectName("threshold_label")
        self.label_2 = QtWidgets.QLabel(self.tab_FrameViewer)
        self.label_2.setGeometry(QtCore.QRect(20, 10, 80, 23))
        self.label_2.setObjectName("label_2")
        self.customRange_label = QtWidgets.QLabel(self.tab_FrameViewer)
        self.customRange_label.setGeometry(QtCore.QRect(30, 30, 80, 23))
        self.customRange_label.setObjectName("customRange_label")
        self.progressBar = QtWidgets.QProgressBar(self.tab_FrameViewer)
        #self.progressBar.setGeometry(QtCore.QRect(500, 20, 124, 25))
        self.progressBar.setGeometry(QtCore.QRect(320, 20, 124, 25))
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.threshold_label_2 = QtWidgets.QLabel(self.tab_FrameViewer)
        # self.threshold_label_2.setGeometry(QtCore.QRect(170, 30, 81, 23))
        self.threshold_label_2.setGeometry(QtCore.QRect(490, 30, 81, 23))
        self.threshold_label_2.setObjectName("threshold_label_2")

        #self.graphicsView = PlotWidget(self.tab_FrameViewer)
        #self.graphicsView.setObjectName("graphicsView")
        #self.graphicsView.setAspectLocked(True) #keeps aspect locked for imported video frames, otherwise it stretches everything out.

        self.graphicsView = PlotWidget(self.tab_FrameViewer)
        self.graphicsView = self.graphicsView
        self.graphicsView.setObjectName("graphicsView")
        self.graphicsView.setAspectLocked(
            True
        )  #keeps aspect locked for imported video frames, otherwise it stretches everything out.
        self.gridLayout_2.setContentsMargins(
            0, 40, 0, 0
        )  # Lowers grphicsView a little, so the options are visible at the top

        self.gridLayout_2.addWidget(self.graphicsView, 1, 1, 1, 1)

        self.tabWidget.addTab(self.tab_FrameViewer, "")
        self.tab_Data = QtWidgets.QWidget()
        self.tab_Data.setObjectName("tab_Data")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab_Data)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")

        #self.graphicsView_Plot = QtWidgets.QGraphicsView(self.tab_Data)
        self.graphicsView_Plot = PlotWidget(self.tab_Data)
        self.graphicsView_Plot.setObjectName("graphicsView_Plot")

        #sizePolicy.setHeightForWidth(self.graphicsView_Plot.sizeAdjustPolicy())
        self.horizontalLayout_2.addWidget(self.graphicsView_Plot)
        self.dataDisplay = QtWidgets.QTextBrowser(self.tab_Data)
        self.dataDisplay.setMaximumSize(QtCore.QSize(640, 16777215))
        self.dataDisplay.setObjectName("dataDisplay")
        self.horizontalLayout_2.addWidget(self.dataDisplay)
        self.tabWidget.addTab(self.tab_Data, "")
        self.gridLayout.addWidget(self.tabWidget, 1, 1, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1603, 47))
        self.menubar.setObjectName("menubar")

        self.menuFile = QtWidgets.QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")
        self.menuOptions = QtWidgets.QMenu(self.menubar)
        self.menuOptions.setObjectName("menuOptions")

        self.menuHelp = QtWidgets.QMenu(self.menubar)
        self.menuHelp.setObjectName("menuHelp")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionUpload_new = QtWidgets.QAction(MainWindow)
        self.actionUpload_new.setObjectName("actionUpload_new")
        self.actionOpen = QtWidgets.QAction(MainWindow)
        self.actionOpen.setObjectName("actionOpen")
        self.actionSave = QtWidgets.QAction(MainWindow)
        self.actionSave.setObjectName("actionSave")
        self.actionKalman = QtWidgets.QAction(MainWindow)
        self.actionKalman.setObjectName("actionKalman")
        self.actionProperties = QtWidgets.QAction(MainWindow)
        self.actionProperties.setObjectName("actionProperties")
        self.actionTutorial = QtWidgets.QAction(MainWindow)
        self.actionTutorial.setObjectName("actionTutorial")

        self.actionEllipseFitting = QtWidgets.QAction(MainWindow)
        self.actionEllipseFitting.setObjectName("actionEllipseFitting")
        self.actionEllipseFitting.setCheckable(True)
        self.actionEllipseFitting.setChecked(True)

        # Commented out for now - until we can implement this feature in the future
        '''
        self.actionManualSelection = QtWidgets.QAction(MainWindow)
        self.actionManualSelection.setCheckable(True)
        self.actionManualSelection.setChecked(False)
        self.actionManualSelection.setObjectName("actionManualSelection")
        '''
        '''
        self.action1 = QtWidgets.QAction(MainWindow)
        self.action1.setCheckable(True)
        self.action1.setObjectName("action1")
        self.action2 = QtWidgets.QAction(MainWindow)
        self.action2.setObjectName("action2")
        self.action3 = QtWidgets.QAction(MainWindow)
        self.action3.setCheckable(True)
        self.action3.setObjectName("action3")
        '''

        # Adding menu actions under "FILE"
        self.menuFile.addAction(self.actionUpload_new)
        self.menuFile.addAction(self.actionOpen)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionSave)
        self.menuFile.addAction(self.actionKalman)

        #Adding menu actions under "OPTIONS"
        #   self.menuOptions.addAction(self.actionEllipseFitting)
        #   self.menuOptions.addAction(self.actionManualSelection)

        #Creating QActionGroup to have radio buttons in the file menu,  code w/o radio buttons commented out above
        self.ag = QtGui.QActionGroup(MainWindow, exclusive=True)
        self.a1 = self.ag.addAction(self.actionEllipseFitting)
        self.menuOptions.addAction(self.a1)
        #  self.a2 = self.ag.addAction(self.actionManualSelection)
        #  self.menuOptions.addAction(self.a2)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuOptions.menuAction())
        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)