Esempio n. 1
0
    def __init__(self, master):
        AbstractBeeDockWindow.__init__(self, master)

        # don't have a maximize button
        self.setWindowFlags(
            qtcore.Qt.CustomizeWindowHint | qtcore.Qt.WindowMinimizeButtonHint | qtcore.Qt.WindowCloseButtonHint
        )

        # setup ui
        self.ui = Ui_LayersWindow()
        self.ui.setupUi(self)
        self.show()

        layersListArea = qtgui.QScrollArea(self.ui.layersListArea.parentWidget())
        layout = self.ui.layersListArea.parentWidget().layout()

        # setup new scroll area options
        layersListArea.setGeometry(self.ui.layersListArea.geometry())
        layersListArea.setSizePolicy(self.ui.layersListArea.sizePolicy())
        layersListArea.setObjectName(self.ui.layersListArea.objectName())
        layersListArea.setVerticalScrollBarPolicy(qtcore.Qt.ScrollBarAlwaysOn)
        layersListArea.setHorizontalScrollBarPolicy(qtcore.Qt.ScrollBarAlwaysOff)

        scrollareawidth = LayerConfigWidget.getStandardGeometry().width()
        # layersListArea.setFixedWidth(scrollareawidth)
        layersListArea.setMinimumWidth(scrollareawidth + 15)
        layersListArea.setSizePolicy(qtgui.QSizePolicy.MinimumExpanding, qtgui.QSizePolicy.MinimumExpanding)

        # remove widget that I'm replacing in the layout
        index = layout.indexOf(self.ui.layersListArea)
        layout.removeWidget(self.ui.layersListArea)

        # replace widget with custom scroll area widget
        self.ui.layersListArea = layersListArea
        layout.insertWidget(index, layersListArea)

        # add frame to scrolled area
        frame = qtgui.QFrame(layersListArea)
        layersListArea.setWidget(frame)
        # frame.setSizePolicy(qtgui.QSizePolicy.MinimumExpanding,qtgui.QSizePolicy.MinimumExpanding)

        # add layout to frame inside the scroll area
        vbox = qtgui.QVBoxLayout()
        frame.setLayout(vbox)

        self.layersListArea = layersListArea
Esempio n. 2
0
class BeeLayersWindow(AbstractBeeDockWindow):
    def __init__(self, master):
        AbstractBeeDockWindow.__init__(self, master)

        # don't have a maximize button
        self.setWindowFlags(
            qtcore.Qt.CustomizeWindowHint | qtcore.Qt.WindowMinimizeButtonHint | qtcore.Qt.WindowCloseButtonHint
        )

        # setup ui
        self.ui = Ui_LayersWindow()
        self.ui.setupUi(self)
        self.show()

        layersListArea = qtgui.QScrollArea(self.ui.layersListArea.parentWidget())
        layout = self.ui.layersListArea.parentWidget().layout()

        # setup new scroll area options
        layersListArea.setGeometry(self.ui.layersListArea.geometry())
        layersListArea.setSizePolicy(self.ui.layersListArea.sizePolicy())
        layersListArea.setObjectName(self.ui.layersListArea.objectName())
        layersListArea.setVerticalScrollBarPolicy(qtcore.Qt.ScrollBarAlwaysOn)
        layersListArea.setHorizontalScrollBarPolicy(qtcore.Qt.ScrollBarAlwaysOff)

        scrollareawidth = LayerConfigWidget.getStandardGeometry().width()
        # layersListArea.setFixedWidth(scrollareawidth)
        layersListArea.setMinimumWidth(scrollareawidth + 15)
        layersListArea.setSizePolicy(qtgui.QSizePolicy.MinimumExpanding, qtgui.QSizePolicy.MinimumExpanding)

        # remove widget that I'm replacing in the layout
        index = layout.indexOf(self.ui.layersListArea)
        layout.removeWidget(self.ui.layersListArea)

        # replace widget with custom scroll area widget
        self.ui.layersListArea = layersListArea
        layout.insertWidget(index, layersListArea)

        # add frame to scrolled area
        frame = qtgui.QFrame(layersListArea)
        layersListArea.setWidget(frame)
        # frame.setSizePolicy(qtgui.QSizePolicy.MinimumExpanding,qtgui.QSizePolicy.MinimumExpanding)

        # add layout to frame inside the scroll area
        vbox = qtgui.QVBoxLayout()
        frame.setLayout(vbox)

        self.layersListArea = layersListArea

    def closeEvent(self, event):
        event.ignore()
        self.hide()

        # rebuild layers window by removing all the layers widgets and then adding them back in order

    def refreshLayersList(self, win, curlayerkey, winlock=None, layerslock=None):
        """ Update the list of layers displayed in the layers display window
		"""
        if not winlock:
            winlock = qtcore.QReadLocker(self.master.drawingwindowslock)

        frame = self.layersListArea.widget()

        vbox = frame.layout()

        # remove widgets from layout
        for widget in frame.children():
            # skip items of wrong type
            if not type(widget) is LayerConfigWidget:
                continue
            widget.hide()
            widget.setParent(None)
            vbox.removeWidget(widget)

            # make sure the window has not be unregistered already
        if not self.master.isWindowRegistered(win, winlock):
            return

        newwidget = None

        # ask each layer for it's widget and add it
        for layer in reversed(win.layers):
            # for floating in layer.childItems():
            sublocker = qtcore.QReadLocker(layer.sublayerslock)
            for floating in layer.sublayers:
                if floating.getType() == LayerTypes.floating:
                    newwidget = floating.getConfigWidget(winlock, layerslock)
                    vbox.addWidget(newwidget)
                    newwidget.show()

            sublocker = None

            newwidget = layer.getConfigWidget(winlock, layerslock)
            if layer.key == curlayerkey:
                newwidget.highlight()
            else:
                newwidget.unhighlight()
            vbox.addWidget(newwidget)
            newwidget.show()

        if newwidget:
            frame.setGeometry(qtcore.QRect(0, 0, newwidget.width, newwidget.height * vbox.count()))
        else:
            frame.setGeometry(qtcore.QRect(0, 0, 0, 0))

            # set proper highlight for layer with passed key

    def refreshLayerHighlight(self, win, key, lock=None):
        frame = self.layersListArea.widget()

        if not lock:
            lock = qtcore.QMutexLocker(win.curlayerkeymutex)

        winkey = win.getCurLayerKey(lock)

        # go through all the children of the frame
        # this seems like a hackish way to do things, but I've yet to find better and speed is not all that vital here
        for widget in frame.children():
            # skip items of wrong type
            if not type(widget) is LayerConfigWidget:
                continue

            if key == widget.layerkey:
                if key == winkey:
                    widget.highlight()
                    return
                else:
                    widget.unhighlight()
                    return

    def refreshLayerThumb(self, key=None):
        # lock=qtcore.QMutexLocker(self.mutex)
        vbox = self.layersListArea.widget().layout()
        for item in range(vbox.count()):
            widget = vbox.itemAt(item).widget()
            k = widget.layerkey
            if key == k or key == None:
                widget.refreshThumb()

    def on_new_layer_button_clicked(self, accept=True):
        if accept:
            if self.master.curwindow:
                self.master.curwindow.addLayer()

    def on_delete_layer_button_clicked(self, accept=True):
        if accept:
            if self.master.curwindow:
                self.master.curwindow.addRemoveLayerRequestToQueue(self.master.curwindow.getCurLayerKey())

    def on_layer_up_button_clicked(self, accept=True):
        if accept:
            if self.master.curwindow:
                self.master.curwindow.layerUpPushed()
                # self.master.curwindow.addLayerUpToQueue(self.master.curwindow.getCurLayerKey())

    def on_layer_down_button_clicked(self, accept=True):
        if accept:
            if self.master.curwindow:
                self.master.curwindow.layerDownPushed()
                # self.master.curwindow.addLayerDownToQueue(self.master.curwindow.getCurLayerKey())

    def hideEvent(self, event):
        if not self.isMinimized():
            self.master.uncheckWindowLayerBox()
        return qtgui.QWidget.hideEvent(self, event)