Esempio n. 1
0
File: boxes.py Progetto: jmmk/boxes
    def __init__(self, desktop):
        super(SelectionGrid, self).__init__()

        dimensions = desktop.availableGeometry()
        self.screen_width = dimensions.width()
        self.screen_height = dimensions.height()

        self.windows = WindowHelper()

        self.load_config()
        keybinder.bind(self.settings['hotkey'], self.toggle)
        self.construct_grid()
        self.init_grid_ui()
Esempio n. 2
0
File: boxes.py Progetto: jmmk/boxes
class SelectionGrid(QtGui.QFrame):


    reset_grid = QtCore.Signal()
    highlight_selection = QtCore.Signal()

    def __init__(self, desktop):
        super(SelectionGrid, self).__init__()

        dimensions = desktop.availableGeometry()
        self.screen_width = dimensions.width()
        self.screen_height = dimensions.height()

        self.windows = WindowHelper()

        self.load_config()
        keybinder.bind(self.settings['hotkey'], self.toggle)
        self.construct_grid()
        self.init_grid_ui()

    def construct_grid(self):
        self.grid = QtGui.QGridLayout(self)

        for i in range(1, self.settings['grid_rows'] + 1):
            for j in range(1, self.settings['grid_columns'] + 1):
                grid_box = GridBox(self, i, j)
                self.grid.addWidget(grid_box, i, j)

    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            grid_box = self.childAt(event.x(), event.y())
            color = self.settings['selected_box_background_color']
            grid_box.setStyleSheet('background-color: {color};border:none;'.format(color=color))
            row, col = self.get_box_position(grid_box)

            self.current_selection = {
                    'start_row': row,
                    'start_col': col
            }

    def mouseReleaseEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            self.windows.resize_window(*self.calculate_resize())
            self.hide()
            self.reset_grid.emit()

    def mouseMoveEvent(self, event):
        if event.buttons() & QtCore.Qt.LeftButton:
            grid_box = self.childAt(event.x(), event.y())
            if grid_box:
                row, col = self.get_box_position(grid_box)

                self.current_selection['outer_x'] = col
                self.current_selection['outer_y'] = row

                self.highlight_selection.emit()

    def calculate_resize(self):
        y1 = self.current_selection['start_row']
        y2 = self.current_selection['outer_y']
        x1 = self.current_selection['start_col']
        x2 = self.current_selection['outer_x']

        start_x, end_x = sorted((x1, x2))
        start_y, end_y = sorted((y1, y2))

        box_size_x = self.screen_width / self.settings['grid_columns']
        box_size_y = self.screen_height / self.settings['grid_rows']

        x_pos = (start_x - 1) * box_size_x
        y_pos = (start_y - 1) * box_size_y
        size_x = box_size_x * (end_x - start_x + 1)
        size_y = box_size_y * (end_y - start_y + 1)

        return (self.active_window_id, x_pos, y_pos, size_x, size_y)

    def get_box_position(self, grid_box):
        index = self.grid.indexOf(grid_box)
        row, col, __, __ = self.grid.getItemPosition(index)

        return (row, col)

    def init_grid_ui(self):
        w = self.settings['grid_window_width']
        h = self.settings['grid_window_height']

        x = (self.screen_width - w) / 2
        y = (self.screen_height - h) / 2

        self.setGeometry(x, y, w, h)
        self.setWindowTitle('boxes')
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        color = self.settings['background_color']
        self.setStyleSheet(
                'background-color: {color};'
                'border-radius: 5px;'
                .format(color=color)
        )

    def show_grid(self):
        self.active_window_id = self.windows.get_active_window()
        self.show()

    def toggle(self):
        if self.isVisible():
            self.hide()
        else:
            self.show_grid()

    def load_config(self):
        self.settings = DEFAULTS

        self.settings['grid_window_width'] = self.screen_width / 3.5
        self.settings['grid_window_height'] = self.screen_height / 3.5

        if os.path.isfile(CONFIG):
            cfg = ConfigParser.ConfigParser()

            with open(CONFIG) as f:
                cfg.readfp(f)

            for option in self.settings:
                method = 'getint' if type(self.settings[option]) == int else 'get'

                try:
                    self.settings[option] = getattr(cfg, method)('Grid', option)
                except:
                    continue