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
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)