Exemple #1
0
    def __insert(self, item, target=None, after=False):
        if not isinstance(item, AbstractItem):
            raise TypeError(
                t('incompatible_type_argument',
                  name='item',
                  type='AbstractItem'))

        self.validate(item)

        item.reset()
        item.set_layout(self)

        if self.__head is None:
            self.__head = item
            self.__tail = item
            return

        if not isinstance(target, AbstractItem):
            raise TypeError(
                t('incompatible_type_argument',
                  name='target',
                  type='AbstractItem'))

        self.__do_insert_after(
            item, target) if after else self.__do_insert_before(item, target)
Exemple #2
0
    def set_prev(self, item):
        if item and not isinstance(item, AbstractItem):
            raise TypeError(
                t('incompatible_type_argument',
                  name='item',
                  type='AbstractItem'))

        self.__prev = item
Exemple #3
0
    def validate(self, item, throw=True):
        if not isinstance(item, AbstractItem):
            raise TypeError(
                t('incompatible_type_argument',
                  name='item',
                  type='AbstractItem'))

        if self.last() is None:
            return True

        _, src_unit = self.last().size()
        _, unit = item.size()

        if unit != src_unit:
            if throw:
                raise RuntimeError(
                    t('invalid_units', unit=unit, layout_unit=src_unit))
            return False

        return True
Exemple #4
0
    def set_window(self, wnd, select_by_click=False):
        if isinstance(wnd, int):
            self.__hwnd = wnd if WindowManager.is_exists(
                wnd) else WindowManager.find_by_pid(wnd)
            return

        if isinstance(wnd, str):
            self.__hwnd = WindowManager.find_by_title(wnd)
            return

        if select_by_click:
            self.__hwnd = WindowManager.find_by_mouse_click()
            return

        raise ValueError(t('invalid_argument_value', name='wnd'))
Exemple #5
0
    def remove(self, item):
        if not isinstance(item, AbstractItem):
            raise TypeError(
                t('incompatible_type_argument',
                  name='item',
                  type='AbstractItem'))

        if item.prev() is None:
            self.__head = item.next()
        else:
            item.prev().set_next(item.next())

        if item.next() is None:
            self.__tail = item.prev()
        else:
            item.next().set_prev(item.prev())

        item.reset()
Exemple #6
0
    def Popen(self, cargs, attempts=10, shell=False, **kwargs):
        """Каждая попытка выполняется раз в половину секунды."""

        opened = self.get_opened()
        proc = psutil.Popen(cargs, shell=shell, **kwargs)
        cmd = ' '.join(proc.cmdline())

        def find(latest):
            for hwnd in latest:
                pid = self.get_pid_by_hwnd(hwnd)
                p = psutil.Process(pid)

                if shell:
                    if psutil.pid_exists(proc.pid):
                        for child in proc.children():
                            if child.pid == p.pid:
                                return hwnd, proc

                    name = Path.basename(' '.join(p.cmdline()))

                    if cmd.find(name) != -1:
                        return hwnd, None
                else:
                    if pid == proc.pid:
                        return hwnd, proc

                    if p.name() == proc.name():
                        return hwnd, None

        while attempts:
            result = find(self.get_last_opened(opened))

            if result:
                return result

            attempts -= 1
            sleep(0.5)

        raise NoSuchWindowException(t('started_process_without_gui'))
Exemple #7
0
 def find_by_title(self, title):
     """Найти окно по заголовку, используется точное совпадение."""
     raise NotImplementedError(
         t('abstract_method', method='WindowManager.find_by_title()'))
Exemple #8
0
 def find_by_pid(self, pid):
     """Найти окно по идентификатору процесса."""
     raise NotImplementedError(
         t('abstract_method', method='WindowManager.find_by_pid()'))
Exemple #9
0
 def close(self, hwnd):
     """Закрыть указанное окно."""
     raise NotImplementedError(
         t('abstract_method', method='WindowManager.close()'))
Exemple #10
0
 def borders(self, hwnd):
     """Возвращает размеры декорации окна."""
     raise NotImplementedError(
         t('abstract_method', method='WindowManager.borders()'))
Exemple #11
0
 def move(self, hwnd, x, y, width, height):
     """Изменяет размеры окна и перемещает его в указанную позицию."""
     raise NotImplementedError(
         t('abstract_method', method='WindowManager.move()'))
Exemple #12
0
 def get_pid_by_hwnd(self, hwnd):
     raise NotImplementedError(
         t('abstract_method', method='WindowManager.get_pid_by_hwnd()'))
Exemple #13
0
 def close(self):
     """Завершает работу элемента."""
     raise NotImplementedError(t('abstract_method', method='Item.close()'))
Exemple #14
0
    def set_y(self, y):
        if self.layout() is not None:
            raise RuntimeError(t('property_calculated_automatically'))

        self.__y = int(y)
Exemple #15
0
 def geometry(self, hwnd):
     """Возвращает позицию и размеры окна относительно экрана."""
     raise NotImplementedError(
         t('abstract_method', method='WindowManager.geometry()'))
Exemple #16
0
 def get_opened(self):
     """Get all the open windows."""
     raise NotImplementedError(
         t('abstract_method', method='WindowManager.get_opened()'))
Exemple #17
0
    def __init__(self, layout):
        if not isinstance(layout, Layout):
            raise TypeError(
                t('incompatible_type_argument', name='layout', type='Layout'))

        self.__start = layout.first()
Exemple #18
0
 def is_exists(self, hwnd):
     """Возвращает True, если окно с указанным идентификатором существует."""
     raise NotImplementedError(
         t('abstract_method', method='WindowManager.is_exists()'))
Exemple #19
0
 def move(self):
     raise NotImplementedError(t('abstract_method', method='Item.move()'))
Exemple #20
0
    def set_layout(self, layout):
        if not isinstance(layout, Layout):
            raise TypeError(
                t('incompatible_type_argument', name='layout', type='Layout'))

        self.__layout = layout
Exemple #21
0
    def move(self):
        if self.__hwnd is None:
            raise RuntimeError(t('window_not_set'))

        WindowManager.move(self.__hwnd, self.x(), self.y(), self.width(),
                           self.height())