Esempio n. 1
0
File: ui.py Progetto: eepp/yobr
 def _build_ui(self):
     hbox = qtwidgets.QHBoxLayout()
     hbox.addWidget(qtwidgets.QLabel('Find package build:'))
     self._edit = qtwidgets.QLineEdit()
     self._edit.setFont(_MONO_FONT_BOLD)
     self._edit.setPlaceholderText('Globbing pattern')
     self._edit.setFixedWidth(300)
     self._edit.returnPressed.connect(self.accept)
     hbox.addWidget(self._edit)
     self.setLayout(hbox)
Esempio n. 2
0
File: ui.py Progetto: eepp/yobr
 def _build_ui(self):
     hbox = qtwidgets.QHBoxLayout()
     pixmap = qtgui.QPixmap(_ICON_PATH).scaled(
         128, 128, qtcore.Qt.IgnoreAspectRatio,
         qtcore.Qt.SmoothTransformation)
     lbl = qtwidgets.QLabel()
     lbl.setPixmap(pixmap)
     hbox.addWidget(lbl)
     self.setLayout(hbox)
     vbox = qtwidgets.QVBoxLayout()
     lbl = qtwidgets.QLabel('YO Buildroot!')
     font = lbl.font()
     font.setPointSize(14)
     font.setItalic(True)
     font.setBold(True)
     lbl.setFont(font)
     vbox.addWidget(lbl)
     lbl = qtwidgets.QLabel('v{}'.format(yobr.__version__))
     lbl.setStyleSheet('color: rgba(0, 0, 0, .6); font-style: italic;')
     vbox.addWidget(lbl)
     vbox.addWidget(qtwidgets.QLabel())
     lbl = qtwidgets.QLabel(
         '<b>Author</b>: <a href="https://eepp.ca/">Philippe Proulx</a>')
     vbox.addWidget(lbl)
     lbl = qtwidgets.QLabel(
         '<b>Icon</b>: <i>srip</i> from <a href="https://www.flaticon.com/">www.flaticon.com</a>'
     )
     vbox.addWidget(lbl)
     lbl = qtwidgets.QLabel(
         '<b>Website</b>: <a href="https://github.com/eepp/yobr">github.com/eepp/yobr</a>'
     )
     vbox.addWidget(lbl)
     vbox.addStretch()
     hbox.addSpacing(10)
     hbox.addLayout(vbox)
Esempio n. 3
0
File: ui.py Progetto: eepp/yobr
    def _build_ui(self):
        # whole widget's tooltip: name and version (if any)
        tooltip = self._pkg_build.info.name

        if self._pkg_build.info.version is not None:
            tooltip += ' {}'.format(self._pkg_build.info.version)

        self.setToolTip(tooltip)

        # background label (no text; just for the colour); assigning
        # this as its parent makes the label float under the other
        # widgets managed by this widget's layout
        self._bg_lbl = qtwidgets.QLabel('', self)
        self._bg_lbl.setSizePolicy(qtwidgets.QSizePolicy.Fixed,
                                   qtwidgets.QSizePolicy.Fixed)

        # horizontal box for name label and progress bar
        hbox = qtwidgets.QHBoxLayout()
        hbox.setSpacing(0)
        hbox.setContentsMargins(0, 0, 0, 0)

        # left padding
        hbox.addSpacing(5)

        # name label
        self._name_lbl = qtwidgets.QLabel(self._pkg_build.info.name)
        self._name_lbl.setFont(_MONO_FONT_BOLD)
        hbox.addWidget(self._name_lbl)
        hbox.addStretch()

        # progress bar
        self._pbar = _MinimalistProgressBar()
        self._pbar.setFixedSize(24, 8)

        # `+ 1` because we count this package build as its own
        # dependency so that, when all a package build's dependencies
        # are built, its state's progress bar is not complete
        self._pbar.setRange(0, len(self._pkg_build.info.dependencies) + 1)
        self._pbar.setValue(0)
        self._pbar.setTextVisible(False)
        hbox.addWidget(self._pbar)

        # right padding
        hbox.addSpacing(5)

        # set horizontal box as this widget's layout
        self.setLayout(hbox)

        # horizontal size policy is to ignore so that this widget takes
        # as much horizontal space as possible
        self.setSizePolicy(qtwidgets.QSizePolicy.Ignored,
                           qtwidgets.QSizePolicy.Fixed)
        self.setFixedHeight(24)
Esempio n. 4
0
File: ui.py Progetto: eepp/yobr
    def _reset_pkg_build_states(self, vbox, name, pkg_infos):
        # get vertical box layout's current items
        items = []

        for i in range(vbox.count()):
            items.append(vbox.itemAt(i))

        # remove items
        for item in items:
            vbox.removeItem(item)

            # we own `item` now: delete it later
            if item.layout() is not None:
                item.layout().deleteLater()

            if item.widget() is not None:
                item.widget().deleteLater()

        if len(pkg_infos) == 0:
            # nothing to show
            return

        # title
        vbox.addSpacing(12)
        text = '{} ({}):'.format(name, len(pkg_infos))
        vbox.addWidget(qtwidgets.QLabel(text))

        # create one package build state for each dependency (sorted by
        # name)
        for pkg_info in sorted(list(pkg_infos), key=lambda pi: pi.name):
            pkg_build = self._pkg_build_monitor.pkg_builds[pkg_info.name]
            pkg_build_state = _PkgBuildState(pkg_build,
                                             self._pkg_build_monitor)
            pkg_build_state.clicked.connect(self._pkg_build_state_clicked)
            vbox.addWidget(pkg_build_state)
Esempio n. 5
0
File: ui.py Progetto: eepp/yobr
 def add_label(stage):
     lbl = qtwidgets.QLabel()
     font = qtgui.QFont(_MONO_FONT_BOLD)
     font.setPointSize(16)
     lbl.setFont(font)
     _set_build_stage_label(lbl, stage, _BUILD_STAGE_COLORS_BG)
     vbox.addWidget(lbl)
 def toggleLoadLast(self):
     if G.loadLast is True:
         G.loadLast = False
         self.actionLoad_last.setCheckable(False)
     else:
         G.loadLast = True
         self.actionLoad_last.setCheckable(True)
     'log.txt'(PyQt5.flush())
Esempio n. 7
0
File: ui.py Progetto: eepp/yobr
 def create_pbar(max, fmt):
     pbar = qtwidgets.QProgressBar()
     pbar.setRange(0, max)
     pbar.setFormat(fmt)
     pbar.setValue(0)
     pbar.setFixedHeight(16)
     pbar.setStyleSheet('font-size: 10px; font-weight: bold;')
     return pbar
Esempio n. 8
0
File: ui.py Progetto: eepp/yobr
    def _build_ui(self):
        # set window's title from application name
        self.setWindowTitle(self._app.applicationName())

        # set icon
        self._set_icon()

        # main layout is a vertical box
        main_layout = qtwidgets.QVBoxLayout()
        w = qtwidgets.QWidget()
        w.setLayout(main_layout)
        self.setCentralWidget(w)

        # build menu bar, progress (top), and package build state grid
        self._build_ui_menu_bar()
        self._build_ui_progress_bars()
        main_layout.addWidget(self._built_pbar)
        main_layout.addWidget(self._installed_pbar)
        self._build_ui_pkg_build_state_grid()

        # wrap the grid within a scroll area
        scroll_area = qtwidgets.QScrollArea()
        scroll_area.setWidgetResizable(True)
        scroll_area.setWidget(self._pkg_build_state_grid)
        scroll_area.setMinimumWidth(300)

        # center of the window is the grid on the left and, possibly,
        # the details on the right
        hbox = qtwidgets.QHBoxLayout()
        hbox.addWidget(scroll_area)

        # build the details pane and add to center horizontal box
        self._build_ui_details()
        hbox.addWidget(self._details_scroll_area)
        main_layout.addLayout(hbox)

        # build status bar
        self._build_ui_status_bar()
Esempio n. 9
0
File: ui.py Progetto: eepp/yobr
 def create_base_form(stage_lbl_attr, version_lbl_attr,
                      is_virtual_lbl_attr):
     form = qtwidgets.QFormLayout()
     form.setContentsMargins(0, 0, 0, 0)
     form.setVerticalSpacing(2)
     form.setHorizontalSpacing(16)
     lbl = create_mono_label(True)
     setattr(self, stage_lbl_attr, lbl)
     form.addRow('Build stage:', lbl)
     lbl = create_mono_label()
     setattr(self, version_lbl_attr, lbl)
     form.addRow('Version:', lbl)
     lbl = create_mono_label()
     setattr(self, is_virtual_lbl_attr, lbl)
     form.addRow('Virtual?', lbl)
     return form
Esempio n. 10
0
File: ui.py Progetto: eepp/yobr
    def _build_ui(self):
        def add_label(stage):
            lbl = qtwidgets.QLabel()
            font = qtgui.QFont(_MONO_FONT_BOLD)
            font.setPointSize(16)
            lbl.setFont(font)
            _set_build_stage_label(lbl, stage, _BUILD_STAGE_COLORS_BG)
            vbox.addWidget(lbl)

        vbox = qtwidgets.QVBoxLayout()
        add_label(yobr.br.PkgBuildStage.UNKNOWN)
        add_label(yobr.br.PkgBuildStage.DOWNLOADED)
        add_label(yobr.br.PkgBuildStage.EXTRACTED)
        add_label(yobr.br.PkgBuildStage.PATCHED)
        add_label(yobr.br.PkgBuildStage.CONFIGURED)
        add_label(yobr.br.PkgBuildStage.BUILT)
        add_label(yobr.br.PkgBuildStage.INSTALLED)
        self.setLayout(vbox)
Esempio n. 11
0
File: ui.py Progetto: eepp/yobr
    def _build_ui_details(self):
        def pkg_build_state_details_clicked(pkg_build_state):
            # change globally selected package build state
            self._pkg_build_state_grid.selected_pkg_build = pkg_build_state.pkg_build

        self._details = _PkgBuildStateDetails(self._pkg_build_monitor)
        self._details.pkg_build_state_clicked.connect(
            pkg_build_state_details_clicked)

        # wrap into a scroll area
        self._details_scroll_area = qtwidgets.QScrollArea()
        self._details_scroll_area.setWidgetResizable(True)
        self._details_scroll_area.setWidget(self._details)

        # no horizontal scrollbar: too ugly
        self._details_scroll_area.setHorizontalScrollBarPolicy(
            qtcore.Qt.ScrollBarAlwaysOff)

        # this seems to be enough
        self._details_scroll_area.setFixedWidth(300)

        # initially invisible
        self._details_scroll_area.setVisible(False)
Esempio n. 12
0
 def lcdBostonNeed(self):
     self.lcdBostonNeed = PyQt5.QtWidgets(self)
Esempio n. 13
0
 def btnStart(self):
     self.btnStart = PyQt5.QtWidgets(self)
Esempio n. 14
0
 def lcdtimer(self):
     self.lcdtimer = PyQt5.QtWidgets(self)
Esempio n. 15
0
 def lcdTotalCustomer(self):
     self.lcdTotalCustomer = PyQt5.QtWidgets(self)
Esempio n. 16
0
 def lcdCustomerOut(self):
     self.lcdCustomerOut = PyQt5.QtWidgets(self)
Esempio n. 17
0
File: ui.py Progetto: eepp/yobr
    def _build_ui(self):
        def create_mono_label(is_bold=False):
            lbl = qtwidgets.QLabel()
            lbl.setFont(_MONO_FONT_BOLD if is_bold else _MONO_FONT)
            return lbl

        # main layout is a vertical box
        vbox = qtwidgets.QVBoxLayout()

        # package's name
        self._name_lbl = create_mono_label(True)
        font = self._name_lbl.font()
        font.setPointSize(12)
        self._name_lbl.setFont(font)
        vbox.addWidget(self._name_lbl)
        vbox.addSpacing(12)

        def create_base_form(stage_lbl_attr, version_lbl_attr,
                             is_virtual_lbl_attr):
            form = qtwidgets.QFormLayout()
            form.setContentsMargins(0, 0, 0, 0)
            form.setVerticalSpacing(2)
            form.setHorizontalSpacing(16)
            lbl = create_mono_label(True)
            setattr(self, stage_lbl_attr, lbl)
            form.addRow('Build stage:', lbl)
            lbl = create_mono_label()
            setattr(self, version_lbl_attr, lbl)
            form.addRow('Version:', lbl)
            lbl = create_mono_label()
            setattr(self, is_virtual_lbl_attr, lbl)
            form.addRow('Virtual?', lbl)
            return form

        # textual information (target)
        form = create_base_form('_target_stage_lbl', '_target_version_lbl',
                                '_target_virtual_lbl')
        self._install_target_lbl = create_mono_label()
        form.addRow('Install (target)?', self._install_target_lbl)
        self._install_staging_lbl = create_mono_label()
        form.addRow('Install (staging)?', self._install_staging_lbl)
        self._install_images_lbl = create_mono_label()
        form.addRow('Install (images)?', self._install_images_lbl)
        self._target_info = qtwidgets.QWidget()
        self._target_info.setLayout(form)
        vbox.addWidget(self._target_info)

        # textual information (host)
        form = create_base_form('_host_stage_lbl', '_host_version_lbl',
                                '_host_virtual_lbl')
        self._host_info = qtwidgets.QWidget()
        self._host_info.setLayout(form)
        vbox.addWidget(self._host_info)

        # dependencies and dependants are within their own vertical box
        # (empty for the moment)
        self._dependencies_vbox = qtwidgets.QVBoxLayout()
        vbox.addLayout(self._dependencies_vbox)
        self._dependants_vbox = qtwidgets.QVBoxLayout()
        vbox.addLayout(self._dependants_vbox)

        vbox.addStretch()

        # set main vertical box as this widget's layout
        self.setLayout(vbox)
Esempio n. 18
0
File: ui.py Progetto: eepp/yobr
    def _build_ui_menu_bar(self):
        def add_refresh_interval_action(name, interval):
            action = menu.addAction('Refresh every {}'.format(name))
            action.setCheckable(True)
            refresh_interval_action_group.addAction(action)
            action.triggered.connect(
                functools.partial(self._emit_refresh_interval_changed,
                                  interval))
            return action

        def show_legend_window(checked):
            dlg = _BuildStageLegendDialog(self)
            dlg.exec()

        def show_about_window(checked):
            dlg = _AboutDialog(self)
            dlg.exec()

        def find_package(checked):
            dlg = _FindPkgBuildDialog(self)

            if dlg.exec() != qtwidgets.QDialog.Accepted:
                return

            pattern = dlg.pattern.strip()
            self._logger.debug(
                'Searching for package build `{}`.'.format(pattern))

            for pkg_build in sorted(
                    self._pkg_build_monitor.pkg_builds.values(),
                    key=lambda pb: pb.info.name):
                if fnmatch.fnmatch(pkg_build.info.name, pattern):
                    self._pkg_build_state_grid.selected_pkg_build = pkg_build
                    break

        # file menu
        menu = self.menuBar().addMenu('&File')
        action = menu.addAction('&Quit')
        action.setShortcut(qtgui.QKeySequence.Quit)
        action.triggered.connect(self._app.quit)

        # state menu
        menu = self.menuBar().addMenu('&State')
        self._refresh_action = menu.addAction('&Refresh now')
        self._refresh_action.setShortcut(qtgui.QKeySequence.Refresh)
        menu.addSeparator()
        refresh_interval_action_group = qtwidgets.QActionGroup(self)
        refresh_interval_action_group.setExclusive(True)
        action = add_refresh_interval_action('500 ms', 500)
        action = add_refresh_interval_action('second', 1000)
        action = add_refresh_interval_action('two seconds', 2000)
        action.setChecked(True)  # default
        action = add_refresh_interval_action('three seconds', 3000)
        action = add_refresh_interval_action('five seconds', 5000)
        action = add_refresh_interval_action('ten seconds', 10000)
        action = add_refresh_interval_action('30 seconds', 30000)
        action = add_refresh_interval_action('minute', 60000)

        # find menu
        menu = self.menuBar().addMenu('&Find')
        action = menu.addAction('Find &package build...')
        action.setShortcut(qtgui.QKeySequence.Find)
        action.triggered.connect(find_package)

        # help menu
        menu = self.menuBar().addMenu('&Help')
        action = menu.addAction('Build stage &legend...')
        action.triggered.connect(show_legend_window)
        menu.addSeparator()
        action = menu.addAction('&About yobr...')
        action.triggered.connect(show_about_window)
Esempio n. 19
0
File: ui.py Progetto: eepp/yobr
 def _build_ui_status_bar(self):
     self._status_bar = qtwidgets.QStatusBar()
     self.setStatusBar(self._status_bar)
Esempio n. 20
0
File: ui.py Progetto: eepp/yobr
def main():
    # refresh timer timeout
    def refresh_timer_timeout():
        logger.info('Updating package build monitor.')
        pkg_build_monitor.update()

    try:
        # create application
        app = qtwidgets.QApplication(sys.argv)
        app.setApplicationName('YO Buildroot!')
        app.setApplicationVersion(yobr.__version__)

        # setup signals
        _setup_signals()

        # parse and validate command-line arguments
        args = _parse_args(app)
        _validate_args(args)

        # configure logging
        logging.basicConfig(
            level=args.log_level,
            style='{',
            format='{asctime} [{name}] {{{levelname}}}: {message}')
        logger = logging.getLogger('main')

        # query Buildroot for package information
        logger.info('Starting application (v{}).'.format(yobr.__version__))
        logger.info('Getting package information from `{}`.'.format(
            args.br_root_dir))
        pkg_builds = yobr.br.pkg_builds_from_make(args.br_root_dir,
                                                  args.br_build_dir)
        pkg_build_monitor = _PkgBuildMonitor(pkg_builds)

        if len(pkg_build_monitor.pkg_builds) == 0:
            # weird
            raise RuntimeError('No packages found!')

        logger.info('Watching {} packages:'.format(
            len(pkg_build_monitor.pkg_builds)))

        for pkg_build in sorted(pkg_build_monitor.pkg_builds.values(),
                                key=lambda pb: pb.build_dir):
            logger.info('  `{}` ({} dependencies)'.format(
                pkg_build.build_dir, len(pkg_build.info.dependencies)))

        # create window
        logger.info('Starting UI.')
        w = _YoBrWindow(app, pkg_build_monitor)

        # connect "Refresh now" action
        w.refresh_action.triggered.connect(refresh_timer_timeout)

        # create refresh timer: initial interval is 2 s
        timer = qtcore.QTimer(app)
        timer.setInterval(2000)
        timer.timeout.connect(refresh_timer_timeout)

        # connect interval change signal
        w.refresh_interval_changed.connect(timer.setInterval)

        # start timer
        timer.start()

        # initial update
        pkg_build_monitor.update()

        # show window
        w.show()

        # we're done
        sys.exit(app.exec_())
    except Exception as exc:
        _perror(str(exc))
        sys.exit(1)
Esempio n. 21
0
 def lcdRenewable(self):
     self.lcdRenewable = PyQt5.QtWidgets(self)
Esempio n. 22
0
File: ui.py Progetto: eepp/yobr
 def create_mono_label(is_bold=False):
     lbl = qtwidgets.QLabel()
     lbl.setFont(_MONO_FONT_BOLD if is_bold else _MONO_FONT)
     return lbl
Esempio n. 23
0
 def lcdPercentGreen(self):
     self.lcdPercentGreen = PyQt5.QtWidgets(self)
Esempio n. 24
0
import sys
import PyQt5 as PyQt
#from PyQt5.QtWidgets import QApplication, QDialog
from designs.index import index

app = PyQt.QApplication(sys.argv)
window = PyQt.QDialog()
ui = index()
ui.setupUi(window)

window.show()
sys.exit(app.exec_())