Combine a spin box and a slider into a SpinSlider widget. Use it in the brush tool.
This commit is contained in:
parent
07cdd46816
commit
97d94530c1
@ -4,7 +4,7 @@
|
||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||
import logging
|
||||
|
||||
from PySide import QtGui
|
||||
from PySide import QtGui, QtCore
|
||||
import numpy
|
||||
|
||||
from mcedit2.editortools import EditorTool
|
||||
@ -15,6 +15,7 @@ from mcedit2.util.load_ui import load_ui, registerCustomWidget
|
||||
from mcedit2.util.settings import Settings
|
||||
from mcedit2.util.showprogress import showProgress
|
||||
from mcedit2.util.worldloader import WorldLoader
|
||||
from mcedit2.widgets.layout import Row
|
||||
from mceditlib.geometry import Vector
|
||||
from mceditlib.selection import ShapedSelection, BoundingBox
|
||||
from mceditlib.util import exhaust
|
||||
@ -246,7 +247,6 @@ class FakeBrushChunk(object):
|
||||
|
||||
return section
|
||||
|
||||
|
||||
class BrushTool(EditorTool):
|
||||
name = "Brush"
|
||||
iconName = "brush"
|
||||
@ -259,13 +259,13 @@ class BrushTool(EditorTool):
|
||||
self.cursorWorldScene = None
|
||||
self.cursorNode = scenegraph.TranslateNode()
|
||||
|
||||
self.toolWidget.xSpinBox.valueChanged.connect(self.setX)
|
||||
self.toolWidget.ySpinBox.valueChanged.connect(self.setY)
|
||||
self.toolWidget.zSpinBox.valueChanged.connect(self.setZ)
|
||||
self.toolWidget.xSpinSlider.setMinimum(1)
|
||||
self.toolWidget.ySpinSlider.setMinimum(1)
|
||||
self.toolWidget.zSpinSlider.setMinimum(1)
|
||||
|
||||
self.toolWidget.xSlider.valueChanged.connect(self.setX)
|
||||
self.toolWidget.ySlider.valueChanged.connect(self.setY)
|
||||
self.toolWidget.zSlider.valueChanged.connect(self.setZ)
|
||||
self.toolWidget.xSpinSlider.valueChanged.connect(self.setX)
|
||||
self.toolWidget.ySpinSlider.valueChanged.connect(self.setY)
|
||||
self.toolWidget.zSpinSlider.valueChanged.connect(self.setZ)
|
||||
|
||||
self.toolWidget.blockTypeInput.editorSession = editorSession
|
||||
self.toolWidget.blockTypeInput.block = editorSession.worldEditor.blocktypes["minecraft:stone"]
|
||||
@ -277,9 +277,9 @@ class BrushTool(EditorTool):
|
||||
|
||||
self.brushSize = BrushSizeSetting.value(QtGui.QVector3D(5, 5, 5)).toTuple() # calls updateCursor
|
||||
|
||||
self.toolWidget.xSpinBox.setValue(self.brushSize[0])
|
||||
self.toolWidget.ySpinBox.setValue(self.brushSize[1])
|
||||
self.toolWidget.zSpinBox.setValue(self.brushSize[2])
|
||||
self.toolWidget.xSpinSlider.setValue(self.brushSize[0])
|
||||
self.toolWidget.ySpinSlider.setValue(self.brushSize[1])
|
||||
self.toolWidget.zSpinSlider.setValue(self.brushSize[2])
|
||||
|
||||
_brushSize = (0, 0, 0)
|
||||
@property
|
||||
@ -296,22 +296,16 @@ class BrushTool(EditorTool):
|
||||
x, y, z = self.brushSize
|
||||
x = float(val)
|
||||
self.brushSize = x, y, z
|
||||
self.toolWidget.xSlider.setValue(val)
|
||||
self.toolWidget.xSpinBox.setValue(val)
|
||||
|
||||
def setY(self, val):
|
||||
x, y, z = self.brushSize
|
||||
y = float(val)
|
||||
self.brushSize = x, y, z
|
||||
self.toolWidget.ySlider.setValue(val)
|
||||
self.toolWidget.ySpinBox.setValue(val)
|
||||
|
||||
def setZ(self, val):
|
||||
x, y, z = self.brushSize
|
||||
z = float(val)
|
||||
self.brushSize = x, y, z
|
||||
self.toolWidget.zSlider.setValue(val)
|
||||
self.toolWidget.zSpinBox.setValue(val)
|
||||
|
||||
def setBlocktypes(self, types):
|
||||
if len(types) == 0:
|
||||
|
@ -16,6 +16,16 @@
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0,0,0,0">
|
||||
<item row="4" column="1" colspan="2">
|
||||
<widget class="SpinSlider" name="xSpinSlider" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
@ -24,7 +34,14 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="2">
|
||||
<widget class="BrushModeWidget" name="brushModeInput" native="true"/>
|
||||
<widget class="BrushModeWidget" name="brushModeInput" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
@ -33,38 +50,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QSpinBox" name="xSpinBox">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1024</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QSlider" name="xSlider">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>80</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="invertedControls">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::NoTicks</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
@ -72,29 +57,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QSpinBox" name="ySpinBox">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1024</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QSlider" name="ySlider">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>80</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
@ -102,26 +64,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QSpinBox" name="zSpinBox">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1024</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QSlider" name="zSlider">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>80</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<item row="7" column="1" colspan="2">
|
||||
<widget class="SpinSlider" name="hoverSpinSlider" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -132,29 +81,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QSpinBox" name="hoverSpinBox">
|
||||
<property name="minimum">
|
||||
<number>-1024</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1024</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="2">
|
||||
<widget class="QSlider" name="hoverSlider">
|
||||
<property name="minimum">
|
||||
<number>-80</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>80</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
@ -165,8 +91,8 @@
|
||||
<item row="8" column="1" colspan="2">
|
||||
<widget class="BlockTypeButton" name="blockTypeInput" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>1</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
@ -181,6 +107,12 @@
|
||||
</item>
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
@ -208,6 +140,12 @@
|
||||
</property>
|
||||
<item>
|
||||
<widget class="ShapeWidget" name="brushShapeInput" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
@ -220,17 +158,40 @@
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1" colspan="2">
|
||||
<widget class="SpinSlider" name="ySpinSlider" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1" colspan="2">
|
||||
<widget class="SpinSlider" name="zSpinSlider" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -253,6 +214,12 @@
|
||||
<header>blocktypebutton.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>SpinSlider</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>spinslider.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../mcedit2.qrc"/>
|
||||
|
68
src/mcedit2/widgets/spinslider.py
Normal file
68
src/mcedit2/widgets/spinslider.py
Normal file
@ -0,0 +1,68 @@
|
||||
"""
|
||||
spinslider
|
||||
"""
|
||||
from __future__ import absolute_import, division, print_function
|
||||
import logging
|
||||
from PySide import QtGui, QtCore
|
||||
from PySide.QtCore import Qt
|
||||
from mcedit2.util.load_ui import registerCustomWidget
|
||||
from mcedit2.widgets.layout import Row
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@registerCustomWidget
|
||||
class SpinSlider(QtGui.QWidget):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(SpinSlider, self).__init__(*args, **kwargs)
|
||||
self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
|
||||
|
||||
self.spinBox = QtGui.QSpinBox()
|
||||
self.slider = QtGui.QSlider()
|
||||
self.slider.setOrientation(Qt.Horizontal)
|
||||
self._value = 0
|
||||
|
||||
self._minimum = -(2 << 31)
|
||||
self._maximum = (2 << 31) - 1
|
||||
|
||||
self.spinBox.valueChanged.connect(self.spinBoxChanged)
|
||||
self.slider.valueChanged.connect(self.sliderChanged)
|
||||
|
||||
self.setLayout(Row(self.spinBox, self.slider, margin=0))
|
||||
|
||||
def spinBoxChanged(self, value):
|
||||
self._value = value
|
||||
self.slider.setValue(value)
|
||||
self.valueChanged.emit(value)
|
||||
|
||||
def sliderChanged(self, value):
|
||||
self._value = value
|
||||
self.spinBox.setValue(value)
|
||||
self.valueChanged.emit(value)
|
||||
|
||||
def value(self):
|
||||
return self._value
|
||||
|
||||
def setValue(self, value):
|
||||
self._value = value
|
||||
self.spinBox.setValue(value)
|
||||
self.slider.setValue(value)
|
||||
|
||||
def minimum(self):
|
||||
return self._minimum
|
||||
|
||||
def setMinimum(self, value):
|
||||
self._minimum = value
|
||||
self.slider.setMinimum(value)
|
||||
self.spinBox.setMinimum(value)
|
||||
|
||||
def maximum(self):
|
||||
return self._maximum
|
||||
|
||||
def setMaximum(self, value):
|
||||
self._maximum = value
|
||||
self.slider.setMaximum(value)
|
||||
self.spinBox.setMaximum(value)
|
||||
|
||||
|
||||
valueChanged = QtCore.Signal(float)
|
Reference in New Issue
Block a user