Exemplo n.º 1
0
    def setup_buttons(self):

        # TODO how to fix this bug?
        # shortcut in plugin conflicts with shortcut in mainwindow
        # QAction::eventFilter: Ambiguous shortcut overload: Ctrl+O

        openfile_btn = create_toolbutton(self,
                                         icon=ima.icon('fileopen'),
                                         tip=_('Open file'),
                                         shortcut="Ctrl+O",
                                         triggered=self.open_file)
        savefile_btn = create_toolbutton(self,
                                         icon=ima.icon('filesave'),
                                         tip=_('Save to new file'),
                                         shortcut="Ctrl+S",
                                         triggered=self.save_file)
        runfile_btn = create_toolbutton(self,
                                        icon=ima.icon('run_file'),
                                        tip=_('Run code in file'),
                                        triggered=self.run_file)
        run_btn = create_toolbutton(self,
                                    icon=ima.icon('run'),
                                    tip=_('Run code in view'),
                                    shortcut="Ctrl+R",
                                    triggered=self.emit_script)
        help_btn = create_toolbutton_help(self, triggered=self.show_help)
        buttons = (openfile_btn, savefile_btn, runfile_btn, run_btn, help_btn)
        return buttons
Exemplo n.º 2
0
 def setup_buttons(self):
     clear_btn = create_toolbutton(self,
                                   icon=ima.icon('clear_text'),
                                   tip=_('Clear text'),
                                   shortcut="Ctrl+L",
                                   triggered=self.textBrowser.clear)
     dummy_btn = create_toolbutton(self,
                                   icon=ima.icon('fromcursor'),
                                   tip=_('Do nothing'))
     help_btn = create_toolbutton_help(self, triggered=self.show_help)
     return clear_btn, dummy_btn, help_btn
Exemplo n.º 3
0
 def create_browsefile(self,
                       text,
                       option,
                       default=NoDefault,
                       tip=None,
                       filters=None):
     widget = self.create_lineedit(text,
                                   option,
                                   default,
                                   alignment=Qt.Horizontal)
     for edit in self.lineedits:
         if widget.isAncestorOf(edit):
             break
     msg = _('Invalid file path')
     self.validate_data[edit] = (osp.isfile, msg)
     browse_btn = QPushButton(ima.icon('FileIcon'), '', self)
     browse_btn.setToolTip(_("Select file"))
     browse_btn.clicked.connect(lambda: self.select_file(edit, filters))
     layout = QHBoxLayout()
     layout.addWidget(widget)
     layout.addWidget(browse_btn)
     layout.setContentsMargins(0, 0, 0, 0)
     browsefile = QWidget(self)
     browsefile.lineedit = widget
     browsefile.setLayout(layout)
     return browsefile
Exemplo n.º 4
0
    def create_browsefile(self,
                          text,
                          default=None,
                          tip=None,
                          filters=None,
                          new=False):
        """Create browse file widget.

        :param text: key
        :type text: str
        :param default: default value
        :type default: str
        :param tip: tool tip
        :type tip: str
        :param filters: filters by filename extension
        :type filters: str
        :param new: select existing or create new file.
        :type new: bool
        :return: QWidget
        """
        widget = self.create_lineedit(text, default=default, tip=tip)
        edit = widget.edit
        browse_btn = QPushButton(ima.icon('FileIcon'), '', self)
        browse_btn.setToolTip(_("Select file"))
        browse_btn.clicked.connect(
            lambda: self.select_file(edit, filters, new))
        layout = QHBoxLayout()
        layout.addWidget(widget)
        layout.addWidget(browse_btn)
        layout.setContentsMargins(0, 0, 0, 0)
        browsefile = QWidget(self)
        browsefile.lineedit = widget
        browsefile.setLayout(layout)
        return browsefile
Exemplo n.º 5
0
    def create_grabob(self, text, default=None, tip=None, geom=None):
        """Create grab object widget.

        :param text: key
        :type text: str
        :param default: default value
        :type default: str
        :param tip: tool tip
        :type tip: str
        :param geom: geometry of the object to grab
        :type geom: list
        :return: QWidget
        """
        widget = self.create_lineedit(text, default=default, tip=tip)
        edit = widget.edit
        browse_btn = QPushButton(ima.icon('grab_object'), '', self)
        browse_btn.setToolTip(_("Grab object from tree"))
        browse_btn.clicked.connect(lambda: self.grab_object(edit, geom))
        layout = QHBoxLayout()
        layout.addWidget(widget)
        layout.addWidget(browse_btn)
        layout.setContentsMargins(0, 0, 0, 0)
        grabob = QWidget(self)
        grabob.lineedit = widget
        grabob.setLayout(layout)
        return grabob
Exemplo n.º 6
0
    def __init__(self, parent=None, objname=None):
        QDialog.__init__(self, parent)

        # If used for data object in tree, the main is the tree widget.
        self.parent = parent
        self.objname = objname

        # Widgets
        self.pages_widget = QStackedWidget()
        self.contents_widget = QListWidget()
        self.button_reset = QPushButton(_('Reset to defaults'))

        bbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Apply |
                                QDialogButtonBox.Cancel)
        self.apply_btn = bbox.button(QDialogButtonBox.Apply)

        # Widgets setup
        # Destroying the C++ object right after closing the dialog box,
        # otherwise it may be garbage-collected in another QThread
        # (e.g. the editor's analysis thread in Ezcad), thus leading to
        # a segmentation fault on UNIX or an application crash on Windows
        self.setAttribute(Qt.WA_DeleteOnClose)
        if self.objname is None:
            self.setWindowTitle(_('Preferences'))
        else:
            self.setWindowTitle(_('Preferences of ') + self.objname)
        self.setWindowIcon(ima.icon('configure'))
        self.contents_widget.setMovement(QListView.Static)
        self.contents_widget.setSpacing(1)
        self.contents_widget.setCurrentRow(0)

        # Layout
        hsplitter = QSplitter()
        hsplitter.addWidget(self.contents_widget)
        hsplitter.addWidget(self.pages_widget)
        hsplitter.setSizes([150,500])

        btnlayout = QHBoxLayout()
        btnlayout.addWidget(self.button_reset)
        btnlayout.addStretch(1)
        btnlayout.addWidget(bbox)

        vlayout = QVBoxLayout()
        vlayout.addWidget(hsplitter)
        vlayout.addLayout(btnlayout)

        self.setLayout(vlayout)

        # Signals and slots
        self.pages_widget.currentChanged.connect(self.current_page_changed)
        self.contents_widget.currentRowChanged.connect(
            self.pages_widget.setCurrentIndex)
        bbox.accepted.connect(self.accept)
        bbox.rejected.connect(self.reject)
        bbox.clicked.connect(self.button_clicked)

        # Ensures that the config is present on ezcad first run
        CONF.set('main', 'interface_language', load_lang_conf())
Exemplo n.º 7
0
    def __init__(self, parent, project):
        super(ProjectPreferences, self).__init__()

        self._main = parent
        self._project = project
        self._project_preferences = [WorkspaceConfigPage]

        self.setWindowTitle(_("Project preferences"))
        self.setWindowIcon(ima.icon('configure'))

        self.setup_dialog()
Exemplo n.º 8
0
 def setup_buttons(self):
     hide_all_btn = create_toolbutton(self,
                                      icon=ima.icon('hide_all'),
                                      tip=_('Hide all'),
                                      shortcut="Ctrl+L",
                                      triggered=self.base.hide_all)
     self.pick_btn = create_toolbutton(self,
                                       icon=ima.icon('pick_mode'),
                                       tip=_('Pick mode'),
                                       shortcut="P",
                                       toggled=self.base.toggle_pick_mode)
     color_btn = create_toolbutton(self,
                                   icon=ima.icon('bkgd_color'),
                                   tip=_('Background color'),
                                   triggered=self.base.set_background_color)
     export_btn = create_toolbutton(self,
                                    icon=ima.icon('photo'),
                                    tip=_('Export canvas to picture'),
                                    triggered=self.base.export_canvas)
     help_btn = create_toolbutton_help(self, triggered=self.show_help)
     return (hide_all_btn, self.pick_btn, color_btn, export_btn, help_btn)
Exemplo n.º 9
0
class WorkspaceConfigPage(ProjectConfigPage):
    CONF_SECTION = "workspace"
    NAME = _("General")
    ICON = ima.icon('genprefs')

    def setup_page(self):
        # --- Interface
        general_group = QGroupBox(_("TODO"))

        # --- Status bar
        sbar_group = QGroupBox(_("TODO"))

        # --- Path
        self.set_workdir = self.create_browsedir("Project working directory",
                                                 'project_working_directory')

        path_group = QGroupBox(_("Path"))
        path_layout = QVBoxLayout()
        path_layout.addWidget(self.set_workdir)
        path_group.setLayout(path_layout)

        tabs = QTabWidget()
        tabs.addTab(self.create_tab(path_group), _("Basic"))
        tabs.addTab(self.create_tab(general_group, sbar_group),
                    _("Advanced Settings"))

        vlayout = QVBoxLayout()
        vlayout.addWidget(tabs)
        self.setLayout(vlayout)

    def apply_settings(self, options):
        """
        Click apply button in configDialog, calls configPage.apply_changes,
        which saves the changes and calls configPage.apply_settings.
        """
        workdir = self.set_workdir.lineedit.textbox.text()
        if not osp.isdir(workdir):
            QMessageBox.critical(
                self, _('Error'),
                'The project work directory does not exist. Please reset.')

        # TODO Even with this check, the non-existing dir still gets saved
        # into the config file, e.g. /home/joe/.config/ezcad-py3/ezcad.ini
        # Cannot move save_conf behind configPage.apply_settings,
        # because the latter calls main.apply_settings which read the saved
        # conf to take proper actions, so must save before apply...

        # fname = self.set_sgmtfn.lineedit.textbox.text()
        # if not osp.isfile(fname):
        #     QMessageBox.critical(self, _('Error'),
        #         'The survey geometry file does not exist. Please reset.')

        self.main.apply_project_settings()
Exemplo n.º 10
0
 def create_browsedir(self, text, option, default=NoDefault, tip=None):
     widget = self.create_lineedit(text,
                                   option,
                                   default,
                                   alignment=Qt.Horizontal)
     for edit in self.lineedits:
         if widget.isAncestorOf(edit):
             break
     msg = _("Invalid directory path")
     self.validate_data[edit] = (osp.isdir, msg)
     browse_btn = QPushButton(ima.icon('DirOpenIcon'), '', self)
     browse_btn.setToolTip(_("Select directory"))
     browse_btn.clicked.connect(lambda: self.select_directory(edit))
     layout = QHBoxLayout()
     layout.addWidget(widget)
     layout.addWidget(browse_btn)
     layout.setContentsMargins(0, 0, 0, 0)
     browsedir = QWidget(self)
     browsedir.lineedit = widget
     browsedir.setLayout(layout)
     return browsedir
Exemplo n.º 11
0
    def create_browsedir(self, text, default=None, tip=None):
        """Create browse directory widget.

        :param text: key
        :type text: str
        :param default: default value
        :type default: str
        :param tip: tool tip
        :type tip: str
        :return: QWidget
        """
        widget = self.create_lineedit(text, default=default, tip=tip)
        edit = widget.edit
        browse_btn = QPushButton(ima.icon('DirOpenIcon'), '', self)
        browse_btn.setToolTip(_("Select directory"))
        browse_btn.clicked.connect(lambda: self.select_directory(edit))
        layout = QHBoxLayout()
        layout.addWidget(widget)
        layout.addWidget(browse_btn)
        layout.setContentsMargins(0, 0, 0, 0)
        browsedir = QWidget(self)
        browsedir.lineedit = widget
        browsedir.setLayout(layout)
        return browsedir
Exemplo n.º 12
0
def get_filetype_icon(fname):
    """Return file type icon"""
    ext = osp.splitext(fname)[1]
    if ext.startswith('.'):
        ext = ext[1:]
    return get_icon("%s.png" % ext, ima.icon('FileIcon'))
Exemplo n.º 13
0
def create_toolbutton_help(parent, triggered=None):
    button = create_toolbutton(parent,
                               icon=ima.icon('help'),
                               tip=_('Info on how to use'),
                               triggered=triggered)
    return button
Exemplo n.º 14
0
    def setup_page(self):
        self.ICON = ima.icon('genprefs')
        newcb = self.create_checkbox

        # --- Interface
        general_group = QGroupBox(_("General"))
        languages = LANGUAGE_CODES.items()
        language_choices = sorted([(val, key) for key, val in languages])
        language_combo = self.create_combobox(_('Language'),
                                              language_choices,
                                              'interface_language',
                                              restart=True)

        general_layout = QVBoxLayout()
        general_layout.addWidget(language_combo)
        general_group.setLayout(general_layout)

        # --- Status bar
        sbar_group = QGroupBox(_("Status bar"))
        show_status_bar = newcb(_("Show status bar"), 'show_status_bar')

        memory_box = newcb(_("Show memory usage every"),
                           'memory_usage/enable',
                           tip=self.main.mem_status.toolTip())
        memory_spin = self.create_spinbox("",
                                          _(" ms"),
                                          'memory_usage/timeout',
                                          min_=100,
                                          max_=1000000,
                                          step=100)
        memory_box.toggled.connect(memory_spin.setEnabled)
        memory_spin.setEnabled(self.get_option('memory_usage/enable'))
        memory_box.setEnabled(self.main.mem_status.is_supported())
        memory_spin.setEnabled(self.main.mem_status.is_supported())

        cpu_box = newcb(_("Show CPU usage every"),
                        'cpu_usage/enable',
                        tip=self.main.cpu_status.toolTip())
        cpu_spin = self.create_spinbox("",
                                       _(" ms"),
                                       'cpu_usage/timeout',
                                       min_=100,
                                       max_=1000000,
                                       step=100)
        cpu_box.toggled.connect(cpu_spin.setEnabled)
        cpu_spin.setEnabled(self.get_option('cpu_usage/enable'))

        cpu_box.setEnabled(self.main.cpu_status.is_supported())
        cpu_spin.setEnabled(self.main.cpu_status.is_supported())

        status_bar_o = self.get_option('show_status_bar')
        show_status_bar.toggled.connect(memory_box.setEnabled)
        show_status_bar.toggled.connect(memory_spin.setEnabled)
        show_status_bar.toggled.connect(cpu_box.setEnabled)
        show_status_bar.toggled.connect(cpu_spin.setEnabled)
        memory_box.setEnabled(status_bar_o)
        memory_spin.setEnabled(status_bar_o)
        cpu_box.setEnabled(status_bar_o)
        cpu_spin.setEnabled(status_bar_o)

        # Layout status bar
        cpu_memory_layout = QGridLayout()
        cpu_memory_layout.addWidget(memory_box, 0, 0)
        cpu_memory_layout.addWidget(memory_spin, 0, 1)
        cpu_memory_layout.addWidget(cpu_box, 1, 0)
        cpu_memory_layout.addWidget(cpu_spin, 1, 1)

        sbar_layout = QVBoxLayout()
        sbar_layout.addWidget(show_status_bar)
        sbar_layout.addLayout(cpu_memory_layout)
        sbar_group.setLayout(sbar_layout)

        # --- Path
        path_group = QGroupBox(_("TODO"))

        tabs = QTabWidget()
        tabs.addTab(self.create_tab(path_group), _("Basic"))
        tabs.addTab(self.create_tab(general_group, sbar_group),
                    _("Advanced Settings"))

        vlayout = QVBoxLayout()
        vlayout.addWidget(tabs)
        self.setLayout(vlayout)