Exemplo n.º 1
0
    def __init__(self, parent, i):
        BasePyzoWizardPage.__init__(self, parent, i)

        # Create label and checkbox
        t1 = translate('wizard',
                       "This wizard can be opened using 'Help > Pyzo wizard'")
        t2 = translate('wizard', "Show this wizard on startup")
        self._label_info = QtWidgets.QLabel(t1, self)
        #self._check_show = QtWidgets.QCheckBox(t2, self)
        #self._check_show.stateChanged.connect(self._setNewUser)

        # Create language switcher
        self._langLabel = QtWidgets.QLabel(
            translate('wizard', "Select language"), self)
        #
        self._langBox = QtWidgets.QComboBox(self)
        self._langBox.setEditable(False)
        # Fill
        index, theIndex = -1, -1
        cur = pyzo.config.settings.language
        for lang in sorted(LANGUAGES):
            index += 1
            self._langBox.addItem(lang)
            if lang == LANGUAGE_SYNONYMS.get(cur, cur):
                theIndex = index
        # Set current index
        if theIndex >= 0:
            self._langBox.setCurrentIndex(theIndex)
        # Bind signal
        self._langBox.activated.connect(self.onLanguageChange)

        # Init check state
        #if pyzo.config.state.newUser:
        #    self._check_show.setCheckState(QtCore.Qt.Checked)

        # Create sublayout
        layout = QtWidgets.QHBoxLayout()
        layout.addWidget(self._langLabel, 0)
        layout.addWidget(self._langBox, 0)
        layout.addStretch(2)
        self.layout().addLayout(layout)

        # Add to layout
        self.layout().addSpacing(10)
        self.layout().addWidget(self._label_info)
Exemplo n.º 2
0
    def __add_comboBox(self, key, name, *items):
        """this is a helper method to create a comboBox
            it adds the created widget (as a TitledWidget) to the layout and
            register a setter and listen to changes
        """

        combo = QtWidgets.QComboBox()
        combo.addItems(items)
        combo.currentTextChanged.connect(
            lambda txt, key=key: self.__update(key, txt))

        # Note: those setters may become problematic if
        # someone use the synonyms (defined in codeeditor/style.py)
        # i.e. a stylement is of form "linestyle:dashline"
        # instead of the "linestyle:dashed"
        self.setters[key] = lambda txt, cmb=combo: cmb.setCurrentText(
            txt.capitalize())
        self.layout.addWidget(TitledWidget(name, combo))
Exemplo n.º 3
0
    def __init__(self, parent):
        QtWidgets.QFrame.__init__(self, parent)

        # Init config
        toolId = self.__class__.__name__.lower()
        self._config = pyzo.config.tools[toolId]
        if not hasattr(self._config, 'zoomFactor'):
            self._config.zoomFactor = 1.0
        if not hasattr(self._config, 'bookMarks'):
            self._config.bookMarks = []
        for item in default_bookmarks:
            if item not in self._config.bookMarks:
                self._config.bookMarks.append(item)

        # Get style object (for icons)
        style = QtWidgets.QApplication.style()

        # Create some buttons
        self._back = QtWidgets.QToolButton(self)
        self._back.setIcon(style.standardIcon(style.SP_ArrowBack))
        self._back.setIconSize(QtCore.QSize(16, 16))
        #
        self._forward = QtWidgets.QToolButton(self)
        self._forward.setIcon(style.standardIcon(style.SP_ArrowForward))
        self._forward.setIconSize(QtCore.QSize(16, 16))

        # Create address bar
        #self._address = QtWidgets.QLineEdit(self)
        self._address = QtWidgets.QComboBox(self)
        self._address.setEditable(True)
        self._address.setInsertPolicy(self._address.NoInsert)
        #
        for a in self._config.bookMarks:
            self._address.addItem(a)
        self._address.setEditText('')

        # Create web view
        if imported_qtwebkit:
            self._view = QtWebKit.QWebView(self)
        else:
            self._view = WebView(self)
        #
#         self._view.setZoomFactor(self._config.zoomFactor)
#         settings = self._view.settings()
#         settings.setAttribute(settings.JavascriptEnabled, True)
#         settings.setAttribute(settings.PluginsEnabled, True)

# Layout
        self._sizer1 = QtWidgets.QVBoxLayout(self)
        self._sizer2 = QtWidgets.QHBoxLayout()
        #
        self._sizer2.addWidget(self._back, 0)
        self._sizer2.addWidget(self._forward, 0)
        self._sizer2.addWidget(self._address, 1)
        #
        self._sizer1.addLayout(self._sizer2, 0)
        self._sizer1.addWidget(self._view, 1)
        #
        self._sizer1.setSpacing(2)
        self.setLayout(self._sizer1)

        # Bind signals
        self._back.clicked.connect(self.onBack)
        self._forward.clicked.connect(self.onForward)
        self._address.lineEdit().returnPressed.connect(self.go)
        self._address.activated.connect(self.go)
        self._view.loadFinished.connect(self.onLoadEnd)
        self._view.loadStarted.connect(self.onLoadStart)

        # Start
        self._view.show()
        self.go('http://docs.python.org')
Exemplo n.º 4
0
    def __init__(self):
        super().__init__()

        from pyzo.util.qt import QtPrintSupport

        self.printer = QtPrintSupport.QPrinter(
            QtPrintSupport.QPrinter.HighResolution, )

        # To allow pdf export with color
        self.printer.setColorMode(QtPrintSupport.QPrinter.Color)

        # Default settings
        self.show_line_number = True
        self._enable_syntax_highlighting = True

        m = QtWidgets.QMessageBox(self)
        # Set title
        self.setWindowTitle(translate("menu dialog", 'Pdf Export'))

        # Set dialog size
        size = 1000, 600
        offset = 0
        size2 = size[0], size[1] + offset
        self.resize(*size2)
        # self.setMinimumSize(*size2)

        # Button to export to pdf
        self.validation_button = QtWidgets.QPushButton("Export")
        self.validation_button.clicked.connect(self._export_pdf)

        # Button to update the preview
        self.button_update_preview = QtWidgets.QPushButton(
            'Update preview', self)
        self.button_update_preview.clicked.connect(self._update_preview)

        # Previw widget
        self.preview = QtPrintSupport.QPrintPreviewWidget(self.printer)

        # Lines numbers option
        self.checkbox_line_number = QtWidgets.QCheckBox(
            "Print line number", self, checked=self.show_line_number)

        self.checkbox_line_number.stateChanged.connect(
            self._get_show_line_number)

        # Make of copy of the editor
        self.current_editor = pyzo.editors.getCurrentEditor()
        self.editor_name = self.current_editor.name
        self.editor_filename = self.current_editor.filename
        self.editor = pyzo.core.editor.PyzoEditor(
            pyzo.editors.getCurrentEditor().toPlainText())

        # Zoom
        # The default zoom is the current zoom used by the editor
        self.original_zoom = pyzo.config.view.zoom
        self.zoom_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        self.zoom_slider.setMinimum(-10)  # Maybe too much ?
        self.zoom_slider.setMaximum(10)
        self.zoom_slider.setTickInterval(1)
        self.zoom_selected = self.original_zoom
        self.zoom_slider.setValue(self.zoom_selected)
        self.zoom_value_label = QtWidgets.QLabel()
        self._zoom_value_changed()
        self.zoom_slider.valueChanged.connect(self._zoom_value_changed)

        # Option for syntax highlighting
        self.checkbox_syntax_highlighting = QtWidgets.QCheckBox(
            "Enable syntax highlighting",
            self,
            checked=self._enable_syntax_highlighting)

        self.checkbox_syntax_highlighting.stateChanged.connect(
            self._change_syntax_highlighting_option)

        self.combobox_file_name = QtWidgets.QComboBox(self)
        self.combobox_file_name.addItem("Do not print the file name", 0)
        self.combobox_file_name.addItem("Print with file name", 1)
        self.combobox_file_name.addItem(
            "Print with file name and absolute path", 2)
        self.combobox_file_name.setCurrentIndex(1)
        self.combobox_file_name.setToolTip(
            "The title at the top of the document")

        # Orientation
        self.combobox_orientation = QtWidgets.QComboBox(self)
        self.combobox_orientation.addItem("Portrait",
                                          QtPrintSupport.QPrinter.Portrait)
        self.combobox_orientation.addItem("Landscape",
                                          QtPrintSupport.QPrinter.Landscape)
        self.combobox_orientation.setToolTip("Orientation of the document")

        # Layout
        self.main_layout = QtWidgets.QHBoxLayout()
        self.setLayout(self.main_layout)
        self.preview.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                   QtWidgets.QSizePolicy.Expanding)
        self.right_layout = QtWidgets.QVBoxLayout()
        self.option_layout = QtWidgets.QFormLayout()
        self.main_layout.addWidget(self.preview)

        self.main_layout.addLayout(self.right_layout)
        self.right_layout.addLayout(self.option_layout)
        self.option_layout.addRow(self.combobox_file_name)
        self.option_layout.addRow(self.checkbox_line_number)
        self.option_layout.addRow(self.checkbox_syntax_highlighting)
        self.option_layout.addRow(self.zoom_value_label, self.zoom_slider)
        self.option_layout.addRow(self.combobox_orientation)
        self.bottom_layout = QtWidgets.QHBoxLayout()
        self.right_layout.addLayout(self.bottom_layout)
        self.bottom_layout.addStretch()
        self.bottom_layout.addWidget(self.button_update_preview)
        self.bottom_layout.addWidget(self.validation_button)

        self._update_preview()
Exemplo n.º 5
0
    def __init__(self, parent):
        QtWidgets.QWidget.__init__(self, parent)

        # Make sure there is a configuration entry for this tool
        # The pyzo tool manager makes sure that there is an entry in
        # config.tools before the tool is instantiated.

        toolId = self.__class__.__name__.lower()
        self._config = pyzo.config.tools[toolId]

        # Set config
        if not hasattr(self._config, "hideTypes"):
            self._config.hideTypes = []
        #
        if not hasattr(self._config, "fontSizeTree"):
            if sys.platform == "darwin":
                self._config.fontSizeTree = 12
            else:
                self._config.fontSizeTree = 10
        if not hasattr(self._config, "fontSizeHelp"):
            if sys.platform == "darwin":
                self._config.fontSizeHelp = 12
            else:
                self._config.fontSizeHelp = 10
        #
        if not hasattr(self._config, "historyMaximum"):
            self._config.historyMaximum = 10
        # if not hasattr(self._config, "historyFreeze"):
        #     self._config.historyFreeze = 0
        if not hasattr(self._config, "historyClearOnStartup"):
            self._config.historyClearOnStartup = 1

        style = QtWidgets.qApp.style()
        #
        self.initText = "<p>{}</p>".format(
            "Click an item in the list for Help information.")

        # Create empty label
        self._empty = QtWidgets.QLabel(self)
        self._empty.setText("")

        # ----- Layout 1 -----

        # Create Home tool button
        self._home = QtWidgets.QToolButton(self)
        self._home.setIcon(style.standardIcon(style.SP_ArrowUp))
        self._home.setIconSize(QtCore.QSize(16, 16))
        self._home.setToolTip("Home - return to the beginninig.")

        # Create Refresh tool button
        self._refresh = QtWidgets.QToolButton(self)
        self._refresh.setIcon(style.standardIcon(style.SP_BrowserReload))
        self._refresh.setIconSize(QtCore.QSize(16, 16))
        self._refresh.setToolTip("Reload the current command.")

        # Create Go back tool button
        self.back = QtWidgets.QToolButton(self)
        self.back.setIcon(style.standardIcon(style.SP_ArrowLeft))
        self.back.setIconSize(QtCore.QSize(16, 16))
        self.back.setToolTip("Go back to the previous command.")

        # Create "path" line edit
        self._line = QtWidgets.QLineEdit(self)
        self._line.setReadOnly(True)
        self._line.setStyleSheet("QLineEdit { background:#ddd; }")
        self._line.setFocusPolicy(QtCore.Qt.NoFocus)

        # Create selection tool button
        self._selection = QtWidgets.QToolButton(self)
        self._selection.setIcon(pyzo.icons.layout)
        self._selection.setIconSize(QtCore.QSize(16, 16))
        self._selection.setToolTip("Get selected  objects in the document.")
        self._selection.setEnabled(False)

        # Create "insert_code" button
        self._insert_code = QtWidgets.QToolButton(self)
        self._insert_code.setIcon(
            style.standardIcon(style.SP_FileDialogDetailedView))
        self._insert_code.setToolTip(
            "Insert code in the script at the cursor position")

        # ----- Layout 2 -----

        # Create element_index combo box
        self._element_index = QtWidgets.QComboBox(self)
        self._element_index.setToolTip(
            "Set the argument for getByIndex method.")
        self._element_index.setEnabled(False)

        # Create element_names combo box
        self._element_names = QtWidgets.QComboBox(self)
        self._element_names.setToolTip("Get by name")
        self._element_names.setEnabled(False)

        # Create enumerate combo box
        self._enumerate_index = QtWidgets.QComboBox(self)
        self._enumerate_index.setToolTip(
            "Objects enumerated by createEnumeration method")
        self._enumerate_index.setEnabled(False)

        # Create history combo box
        self._history = QtWidgets.QComboBox(self)
        self._history.setToolTip("Show the command history")
        self._history.setEnabled(True)

        # Create options menu
        self._options = QtWidgets.QToolButton(self)
        self._options.setToolTip("Tool configuration.")
        self._options.setIcon(pyzo.icons.filter)
        self._options.setIconSize(QtCore.QSize(16, 16))
        self._options.setPopupMode(self._options.InstantPopup)
        self._options.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
        # main menu
        self._options._menu = pyzo.core.menu.Menu(
            self, "Main menu")  # QtWidgets.QMenu()
        # submenus
        self._show_hide_menu = pyzo.core.menu.Menu(None, "Show/Hide")
        #
        self._font_size_menu = pyzo.core.menu.Menu(None, "Font size")
        self._font_size_tree_menu = pyzo.core.menu.Menu(None, "Workspace")
        self._font_size_help_menu = pyzo.core.menu.Menu(None, "Help")
        #
        self._history_menu = pyzo.core.menu.Menu(None, "History")

        # create menu
        self._options.setMenu(self._options._menu)
        self.onOptionsPress()

        # Show/hide Help button
        self._btn_toggle = QtWidgets.QToolButton(self)
        self._btn_toggle.setToolTip("Show/hide help")
        self._btn_toggle.setIcon(style.standardIcon(style.SP_DialogHelpButton))
        self._btn_toggle.setIconSize(QtCore.QSize(16, 16))
        self._btn_toggle.setCheckable(True)
        self._btn_toggle.setChecked(False)

        # ----- Layout 3 -----

        # Create tree
        self._tree = PyUNOWorkspaceTree(self)

        # Create message for when tree is empty
        self._initText = QtWidgets.QLabel(
            pyzo.translate(
                "pyzoWorkspace",
                """Lists the variables in the current shell's namespace.
        Currently, there are none. Some of them may be hidden because of the filters you configured.""",
            ),
            self,
        )

        self._initText.setVisible(False)
        self._initText.setWordWrap(True)

        # ----- Layout 4 -----
        # Create description widget

        self._description = QtWidgets.QTextBrowser(self)
        self._description.setText(self.initText)

        # ----- Layout 5 -----

        # Create counter
        self._desc_counter = QtWidgets.QLabel(self)
        self._desc_counter.setText("0")
        # Label
        self._desc_of = QtWidgets.QLabel(self)
        self._desc_of.setText(" of ")
        # Create all items counter
        self._desc_all_items = QtWidgets.QLabel(self)
        self._desc_all_items.setText("0")
        #
        self._search_line = QtWidgets.QLineEdit(self)
        self._search_line.setReadOnly(False)
        self._search_line.setToolTip("Search")
        self._search_line.setPlaceholderText("UNO API Search...")
        #
        self._match = QtWidgets.QCheckBox(self)
        self._match.setText("Match")
        self._match.setChecked(True)
        self._match.setToolTip("Match")
        #
        self._search = QtWidgets.QToolButton(self)
        self._search.setIconSize(QtCore.QSize(16, 16))
        self._search.setText("Search")
        self._search.setToolTip("Search")
        #
        self._clear = QtWidgets.QToolButton(self)
        self._clear.setIconSize(QtCore.QSize(16, 16))
        self._clear.setText("Clear")
        self._clear.setToolTip("Clear")

        # ------ Set layouts

        # Layout 1: Object and insert code layout
        layout_1 = QtWidgets.QHBoxLayout()
        layout_1.addWidget(self._home, 0)
        layout_1.addWidget(self._refresh, 0)
        layout_1.addWidget(self.back, 0)
        layout_1.addWidget(self._line, 1)
        layout_1.addWidget(self._selection, 0)
        layout_1.addWidget(self._insert_code, 0)

        # Layout 2: Display, arguments, history and option layout
        layout_2 = QtWidgets.QHBoxLayout()
        layout_2.addWidget(self._element_index, 0)
        layout_2.addWidget(self._element_names, 0)
        layout_2.addWidget(self._enumerate_index, 0)
        layout_2.addWidget(self._history, 1)
        layout_2.addWidget(self._options, 0)
        layout_2.addWidget(self._btn_toggle, 0)

        # Layout 3: Tree layout
        layout_3 = QtWidgets.QVBoxLayout()
        layout_3.addWidget(self._tree, 0)

        # Layout 5: Hidden help layout
        self._description_widget = QtWidgets.QWidget(self)
        self._description_widget.setVisible(False)

        layout_5 = QtWidgets.QVBoxLayout()
        layout_5.setSpacing(0)
        layout_5.setContentsMargins(0, 0, 0, 0)

        # Layout 6: Search layout
        layout_6 = QtWidgets.QHBoxLayout()
        layout_6.addWidget(self._desc_counter, 0)
        layout_6.addWidget(self._desc_of, 0)
        layout_6.addWidget(self._desc_all_items, 0)
        layout_6.addWidget(self._empty, 0)
        layout_6.addWidget(self._search_line, 0)
        layout_6.addWidget(self._empty, 0)
        layout_6.addWidget(self._match, 0)
        layout_6.addWidget(self._search, 0)
        layout_6.addWidget(self._clear, 0)

        # Layout 7: Help description layout
        layout_7 = QtWidgets.QVBoxLayout()
        layout_7.addWidget(self._description, 0)
        layout_5.addLayout(layout_7, 0)
        layout_5.addLayout(layout_6, 0)
        layout_7.setSpacing(0)
        layout_7.setContentsMargins(0, 0, 0, 0)

        # Main Layout
        mainLayout = QtWidgets.QVBoxLayout(self)
        mainLayout.addLayout(layout_1, 0)
        mainLayout.addLayout(layout_2, 0)
        mainLayout.addLayout(layout_3, 0)
        # add hidden widget
        mainLayout.addWidget(self._description_widget)
        self._description_widget.setLayout(layout_5)

        # set margins
        mainLayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(mainLayout)

        # ------ Bind events
        self._home.pressed.connect(self.onHomePress)
        self._refresh.pressed.connect(self.onRefreshPress)
        self.back.pressed.connect(self.onBackPress)
        #
        self._selection.pressed.connect(self.onCurrentSelectionPress)
        self._insert_code.pressed.connect(self.onInsertCodeInEditorPress)
        #
        self._element_names.activated[str].connect(self.onElementNamesPress)
        self._element_index.activated[str].connect(self.onElementIndexPress)
        self._enumerate_index.activated[str].connect(
            self.onEnumerateIndexPress)
        self._history.activated[str].connect(self.onHistoryPress)
        #
        self._options.pressed.connect(self.onOptionsPress)
        #
        self._show_hide_menu.triggered.connect(self.onShowHideMenuTiggered)
        self._font_size_help_menu.triggered.connect(
            self.onFontHelpOptionMenuTiggered)
        self._font_size_tree_menu.triggered.connect(
            self.onFontTreeOptionMenuTiggered)
        self._history_menu.triggered.connect(self.onHistoryOptionMenuTiggered)
        #
        self._btn_toggle.toggled.connect(self.onHelpTogglePress)
        #
        self._search.pressed.connect(self.onSearchPress)
        self._clear.pressed.connect(self.onClearHelpPress)

        # Create json result file
        createResultFile(),

        # Load History
        if self._config.historyClearOnStartup:
            #self._config.historyFreeze = 0
            createHistoryFile()
        self.loadHistory()
Exemplo n.º 6
0
    def __init__(self, themes, *args, editor=None, **kwargs):
        super().__init__(*args, **kwargs)

        # dict of themes, a deep copy of pyzo.themes
        self.themes = themes
        # We store the key name separate so we can easier track renames
        self.cur_theme_key = ""
        # The current theme being changed
        self.cur_theme = None

        # If an editor is given, connect to it
        self.editor = editor
        if self.editor is not None:
            self.editor.tokenClicked.connect(self.focusOnStyle)
            self.styleChanged.connect(self.editor.setStyle)

        # Display editables style formats in a scroll area
        self.scrollArea = scrollArea = QtWidgets.QScrollArea()
        self.scrollArea.setWidgetResizable(True)

        formLayout = QtWidgets.QFormLayout()
        self.styleEdits = {}

        # Add one pair of label and StyleEdit per style element description
        # to the formLayout and connect the StyleEdit signals to the updatedStyle method
        for styleDesc in pyzo.codeeditor.CodeEditor.getStyleElementDescriptions(
        ):
            label = QtWidgets.QLabel(text=styleDesc.name,
                                     toolTip=styleDesc.description)
            label.setWordWrap(True)
            styleEdit = StyleEdit(styleDesc, toolTip=styleDesc.description)
            styleEdit.styleChanged.connect(self.updatedStyle)
            self.styleEdits[styleDesc.key] = styleEdit
            formLayout.addRow(label, styleEdit)

        wrapper = QtWidgets.QWidget()
        wrapper.setLayout(formLayout)
        wrapper.setMinimumWidth(650)
        scrollArea.setWidget(wrapper)

        # Basic theme I/O

        curThemeLbl = QtWidgets.QLabel(text="Themes :")

        self.curThemeCmb = curThemeCmb = QtWidgets.QComboBox()
        current_index = -1
        for i, themeName in enumerate(self.themes.keys()):
            # We store the themeName in data in case the user renames one
            curThemeCmb.addItem(themeName, userData=themeName)
            if themeName == pyzo.config.settings.theme.lower():
                current_index = i
        curThemeCmb.addItem("New...")

        loadLayout = QtWidgets.QHBoxLayout()
        loadLayout.addWidget(curThemeLbl)
        loadLayout.addWidget(curThemeCmb)

        self.saveBtn = saveBtn = QtWidgets.QPushButton(text="Save")
        saveBtn.clicked.connect(self.saveTheme)
        exitBtn = QtWidgets.QPushButton(text="Apply theme")
        exitBtn.clicked.connect(self.ok)

        exitLayout = QtWidgets.QHBoxLayout()
        exitLayout.addWidget(exitBtn)
        exitLayout.addWidget(saveBtn)

        # Packing it up
        mainLayout = QtWidgets.QVBoxLayout()
        mainLayout.addLayout(loadLayout)
        mainLayout.addWidget(scrollArea)
        mainLayout.addLayout(exitLayout)
        self.setLayout(mainLayout)

        curThemeCmb.currentIndexChanged.connect(self.indexChanged)
        curThemeCmb.currentTextChanged.connect(self.setTheme)

        # Init
        if current_index >= 0:
            curThemeCmb.setCurrentIndex(current_index)
            self.setTheme(pyzo.config.settings.theme)
Exemplo n.º 7
0
    def __init__(self, parent):
        QtWidgets.QWidget.__init__(self, parent)

        # Make sure there is a configuration entry for this tool
        # The pyzo tool manager makes sure that there is an entry in
        # config.tools before the tool is instantiated.

        tool_id = self.__class__.__name__.lower()
        self._config = pyzo.config.tools[tool_id]
        if not hasattr(self._config, "fontSize"):
            if sys.platform == "darwin":
                self._config.fontSize = 12
            else:
                self._config.fontSize = 10

        # Style
        theme = pyzo.themes[pyzo.config.settings.theme.lower()]["data"]
        background_style = theme["editor.text"].split(",")
        background = background_style[1].split(":")[1]
        textcolor_style = theme["syntax.identifier"].split(",")
        textcolor = textcolor_style[0].split(":")[1]

        # Keep track of linter output
        self.output = ""

        # Folder for linter output file
        self.output_folder = os.path.join(pyzo.appDataDir, "tools",
                                          "pyzoLinter")

        self.process = None
        self.locale_codec = pyzo.QtCore.QTextCodec.codecForLocale()

        self.cur_dir_path = ""

        # Create button for parsing scope
        self._reload = QtWidgets.QToolButton(self)
        self._reload.setIcon(pyzo.icons.arrow_refresh)
        self._reload.setToolTip("Parse")
        # event
        self._reload.clicked.connect(self.start)

        # Create combo box Scope
        scope_list = ["Current document", "Current document directory"]
        self._scope = QtWidgets.QComboBox(self)
        self._scope.setToolTip("Get by index")
        self._scope.addItems(scope_list)

        # Create font options menu
        self._font_options = QtWidgets.QToolButton(self)
        self._font_options.setIcon(pyzo.icons.wrench)
        self._font_options.setIconSize(QtCore.QSize(16, 16))
        self._font_options.setPopupMode(self._font_options.InstantPopup)
        self._font_options.setToolButtonStyle(
            QtCore.Qt.ToolButtonTextBesideIcon)
        self._font_options._menu = QtWidgets.QMenu()
        self._font_options.setMenu(self._font_options._menu)
        self.on_font_options_press()  # create menu now
        # event
        self._font_options.pressed.connect(self.on_font_options_press)
        self._font_options._menu.triggered.connect(
            self.on_font_option_menu_tiggered)

        # Create button for opening output file in the editor
        self._open_file = QtWidgets.QToolButton(self)
        self._open_file.setIcon(pyzo.icons.page_white_text)
        self._open_file.setIconSize(QtCore.QSize(16, 16))
        self._open_file.setStyleSheet(
            "QToolButton { border: none; padding: 0px; }")
        self._open_file.setToolTip("Open output file in the editor")
        # event
        self._open_file.clicked.connect(self.on_open_output_file)

        # Ratings label
        self._ratings = QtWidgets.QLabel(self)
        self._ratings.setText("")
        self._ratings.setAlignment(QtCore.Qt.AlignCenter)
        style_sheet = "QLabel{color: black;background-color: #FFFFE0;font : bold;}"
        self._ratings.setStyleSheet(style_sheet)

        # Create radio box All
        self._all = QtWidgets.QRadioButton(self)
        self._all.setText(ALL)
        self._all.setChecked(True)
        self._all.setToolTip(ALL)

        # Create radio box Convention
        self._convention = QtWidgets.QRadioButton(self)
        self._convention.setText(CONVENTION)
        self._convention.setToolTip(CONVENTION)

        # Create radio box Refactor
        self._refactor = QtWidgets.QRadioButton(self)
        self._refactor.setText(REFACTOR)
        self._refactor.setToolTip(REFACTOR)

        # Create radio box Warning
        self._warning = QtWidgets.QRadioButton(self)
        self._warning.setText(WARNING)
        self._warning.setToolTip(WARNING)

        # Create radio box Error
        self._error = QtWidgets.QRadioButton(self)
        self._error.setText(ERROR)
        self._error.setToolTip(ERROR)

        # Radio box event
        self._all.toggled.connect(
            lambda: self.on_radio_change_state(self._all))
        self._convention.toggled.connect(
            lambda: self.on_radio_change_state(self._convention))
        self._refactor.toggled.connect(
            lambda: self.on_radio_change_state(self._refactor))
        self._warning.toggled.connect(
            lambda: self.on_radio_change_state(self._warning))
        self._error.toggled.connect(
            lambda: self.on_radio_change_state(self._error))

        # Create tree widget
        self._tree = QtWidgets.QTreeWidget(self)
        self._tree.setColumnCount(5)
        self._tree.setHeaderLabels(
            ["Description", "File", "Code", "Line", "Column"])
        self._tree.setColumnWidth(0, 400)
        self._tree.setColumnWidth(1, 80)
        self._tree.setHeaderHidden(False)
        self._tree.setSortingEnabled(True)
        self._tree.sortItems(1, QtCore.Qt.AscendingOrder)
        self._tree.sortItems(2, QtCore.Qt.AscendingOrder)
        self._tree.setRootIsDecorated(False)
        # style
        # set widget stye
        background = self.get_theme_item(item="editor.text")
        textcolor = self.get_theme_item(item="syntax.identifier")
        style_keys = ["background-color", "color"]
        style_values = [background["back"], textcolor["fore"]]
        self.set_widget_style_sheet(self._tree, style_keys, style_values)
        # event
        self._tree.clicked.connect(self.on_item_clicked)

        # Create two sizers
        self._sizer1 = QtWidgets.QVBoxLayout(self)
        self._sizer2 = QtWidgets.QHBoxLayout()
        self._sizer4 = QtWidgets.QHBoxLayout()
        #
        self._sizer1.setSpacing(2)
        self._sizer1.setContentsMargins(0, 0, 0, 0)

        # Set layout
        self._sizer1.addLayout(self._sizer2, 0)
        self._sizer1.addLayout(self._sizer4, 0)
        self._sizer1.addWidget(self._tree, 1)
        #
        self._sizer2.addWidget(self._reload, 0)
        self._sizer2.addWidget(self._scope, 0)
        self._sizer2.addWidget(self._ratings, 0)
        self._sizer2.addWidget(self._font_options, 0)
        #
        self._sizer4.addWidget(self._all, 0)
        self._sizer4.addWidget(self._convention, 0)
        self._sizer4.addWidget(self._refactor, 0)
        self._sizer4.addWidget(self._warning, 0)
        self._sizer4.addWidget(self._error, 0)
        self._sizer4.addWidget(self._open_file, 0)
        #
        self.setLayout(self._sizer1)