Merge branch '4.1' of github.com:Ultimaker/Cura

This commit is contained in:
Jaime van Kessel 2019-04-26 11:04:55 +02:00
commit 8210317c91
8 changed files with 147 additions and 16 deletions

View file

@ -23,6 +23,7 @@ from UM.Platform import Platform
from UM.PluginError import PluginNotFoundError from UM.PluginError import PluginNotFoundError
from UM.Resources import Resources from UM.Resources import Resources
from UM.Preferences import Preferences from UM.Preferences import Preferences
from UM.Qt.Bindings import MainWindow
from UM.Qt.QtApplication import QtApplication # The class we're inheriting from. from UM.Qt.QtApplication import QtApplication # The class we're inheriting from.
import UM.Util import UM.Util
from UM.View.SelectionPass import SelectionPass # For typing. from UM.View.SelectionPass import SelectionPass # For typing.
@ -522,6 +523,10 @@ class CuraApplication(QtApplication):
preferences.addPreference("cura/use_multi_build_plate", False) preferences.addPreference("cura/use_multi_build_plate", False)
preferences.addPreference("view/settings_list_height", 400) preferences.addPreference("view/settings_list_height", 400)
preferences.addPreference("view/settings_visible", False) preferences.addPreference("view/settings_visible", False)
preferences.addPreference("view/settings_xpos", 0)
preferences.addPreference("view/settings_ypos", 56)
preferences.addPreference("view/colorscheme_xpos", 0)
preferences.addPreference("view/colorscheme_ypos", 56)
preferences.addPreference("cura/currency", "") preferences.addPreference("cura/currency", "")
preferences.addPreference("cura/material_settings", "{}") preferences.addPreference("cura/material_settings", "{}")
@ -1782,3 +1787,19 @@ class CuraApplication(QtApplication):
# Only show the what's new dialog if there's no machine and we have just upgraded # Only show the what's new dialog if there's no machine and we have just upgraded
show_whatsnew_only = has_active_machine and has_app_just_upgraded show_whatsnew_only = has_active_machine and has_app_just_upgraded
return show_whatsnew_only return show_whatsnew_only
@pyqtSlot(result = int)
def appWidth(self) -> int:
main_window = QtApplication.getInstance().getMainWindow()
if main_window:
return main_window.width()
else:
return 0
@pyqtSlot(result = int)
def appHeight(self) -> int:
main_window = QtApplication.getInstance().getMainWindow()
if main_window:
return main_window.height()
else:
return 0

View file

@ -20,11 +20,19 @@ Item
name: "cura" name: "cura"
} }
anchors
{
left: parent.left
right: parent.right
leftMargin: UM.Theme.getSize("wide_margin").width
rightMargin: UM.Theme.getSize("wide_margin").width
}
// Item to ensure that all of the buttons are nicely centered. // Item to ensure that all of the buttons are nicely centered.
Item Item
{ {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
width: openFileButton.width + itemRow.width + UM.Theme.getSize("default_margin").width width: parent.width - 2 * UM.Theme.getSize("wide_margin").width
height: parent.height height: parent.height
RowLayout RowLayout
@ -32,9 +40,9 @@ Item
id: itemRow id: itemRow
anchors.left: openFileButton.right anchors.left: openFileButton.right
anchors.right: parent.right
anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.leftMargin: UM.Theme.getSize("default_margin").width
width: Math.round(0.9 * prepareMenu.width)
height: parent.height height: parent.height
spacing: 0 spacing: 0

View file

@ -20,15 +20,21 @@ Item
name: "cura" name: "cura"
} }
anchors
{
left: parent.left
right: parent.right
leftMargin: UM.Theme.getSize("wide_margin").width
rightMargin: UM.Theme.getSize("wide_margin").width
}
Row Row
{ {
id: stageMenuRow id: stageMenuRow
anchors.centerIn: parent
height: parent.height
width: childrenRect.width
// We want this row to have a preferred with equals to the 85% of the parent anchors.horizontalCenter: parent.horizontalCenter
property int preferredWidth: Math.round(0.85 * previewMenu.width) width: parent.width - 2 * UM.Theme.getSize("wide_margin").width
height: parent.height
Cura.ViewsSelector Cura.ViewsSelector
{ {
@ -49,12 +55,12 @@ Item
color: UM.Theme.getColor("lining") color: UM.Theme.getColor("lining")
} }
// This component will grow freely up to complete the preferredWidth of the row. // This component will grow freely up to complete the width of the row.
Loader Loader
{ {
id: viewPanel id: viewPanel
height: parent.height height: parent.height
width: source != "" ? (stageMenuRow.preferredWidth - viewsSelector.width - printSetupSelectorItem.width - 2 * UM.Theme.getSize("default_lining").width) : 0 width: source != "" ? (previewMenu.width - viewsSelector.width - printSetupSelectorItem.width - 2 * (UM.Theme.getSize("wide_margin").width + UM.Theme.getSize("default_lining").width)) : 0
source: UM.Controller.activeView != null && UM.Controller.activeView.stageMenuComponent != null ? UM.Controller.activeView.stageMenuComponent : "" source: UM.Controller.activeView != null && UM.Controller.activeView.stageMenuComponent != null ? UM.Controller.activeView.stageMenuComponent : ""
} }

View file

@ -15,6 +15,8 @@ Cura.ExpandableComponent
{ {
id: base id: base
dragPreferencesNamePrefix: "view/colorscheme"
contentHeaderTitle: catalog.i18nc("@label", "Color scheme") contentHeaderTitle: catalog.i18nc("@label", "Color scheme")
Connections Connections

View file

@ -78,11 +78,19 @@ Item
property int shadowOffset: 2 property int shadowOffset: 2
// Prefix used for the dragged position preferences. Preferences not used if empty. Don't translate!
property string dragPreferencesNamePrefix: ""
function toggleContent() function toggleContent()
{ {
contentContainer.visible = !expanded contentContainer.visible = !expanded
} }
function updateDragPosition()
{
contentContainer.trySetPosition(contentContainer.x, contentContainer.y);
}
// Add this binding since the background color is not updated otherwise // Add this binding since the background color is not updated otherwise
Binding Binding
{ {
@ -102,7 +110,8 @@ Item
{ {
if (!base.enabled && expanded) if (!base.enabled && expanded)
{ {
toggleContent() toggleContent();
updateDragPosition();
} }
} }
} }
@ -196,17 +205,19 @@ Item
Cura.RoundedRectangle Cura.RoundedRectangle
{ {
id: contentContainer id: contentContainer
property string dragPreferencesNameX: "_xpos"
property string dragPreferencesNameY: "_ypos"
visible: false visible: false
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
// Ensure that the content is located directly below the headerItem // Ensure that the content is located directly below the headerItem
y: background.height + base.shadowOffset + base.contentSpacingY y: dragPreferencesNamePrefix === "" ? (background.height + base.shadowOffset + base.contentSpacingY) : UM.Preferences.getValue(dragPreferencesNamePrefix + dragPreferencesNameY)
// Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left. // Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left.
// In case of right alignment, the 3x padding is due to left, right and padding between the button & text. // In case of right alignment, the 3x padding is due to left, right and padding between the button & text.
x: contentAlignment == ExpandableComponent.ContentAlignment.AlignRight ? -width + collapseButton.width + headerItemLoader.width + 3 * background.padding : 0 x: dragPreferencesNamePrefix === "" ? (contentAlignment == ExpandableComponent.ContentAlignment.AlignRight ? -width + collapseButton.width + headerItemLoader.width + 3 * background.padding : 0) : UM.Preferences.getValue(dragPreferencesNamePrefix + dragPreferencesNameX)
cornerSide: Cura.RoundedRectangle.Direction.All cornerSide: Cura.RoundedRectangle.Direction.All
color: contentBackgroundColor color: contentBackgroundColor
@ -214,6 +225,25 @@ Item
border.color: UM.Theme.getColor("lining") border.color: UM.Theme.getColor("lining")
radius: UM.Theme.getSize("default_radius").width radius: UM.Theme.getSize("default_radius").width
function trySetPosition(posNewX, posNewY)
{
var margin = UM.Theme.getSize("narrow_margin");
var minPt = base.mapFromItem(null, margin.width, margin.height);
var maxPt = base.mapFromItem(null,
CuraApplication.appWidth() - (contentContainer.width + margin.width),
CuraApplication.appHeight() - (contentContainer.height + margin.height));
var initialY = background.height + base.shadowOffset + margin.height;
contentContainer.x = Math.max(minPt.x, Math.min(maxPt.x, posNewX));
contentContainer.y = Math.max(initialY, Math.min(maxPt.y, posNewY));
if (dragPreferencesNamePrefix !== "")
{
UM.Preferences.setValue(dragPreferencesNamePrefix + dragPreferencesNameX, contentContainer.x);
UM.Preferences.setValue(dragPreferencesNamePrefix + dragPreferencesNameY, contentContainer.y);
}
}
ExpandableComponentHeader ExpandableComponentHeader
{ {
id: contentHeader id: contentHeader
@ -225,6 +255,55 @@ Item
left: parent.left left: parent.left
} }
MouseArea
{
id: dragRegion
anchors
{
top: parent.top
bottom: parent.bottom
left: parent.left
right: contentHeader.xPosCloseButton
}
property var clickPos: Qt.point(0, 0)
onPressed:
{
clickPos = Qt.point(mouse.x, mouse.y);
}
onPositionChanged:
{
var delta = Qt.point(mouse.x - clickPos.x, mouse.y - clickPos.y);
if (delta.x !== 0 || delta.y !== 0)
{
contentContainer.trySetPosition(contentContainer.x + delta.x, contentContainer.y + delta.y);
}
}
onDoubleClicked:
{
contentContainer.trySetPosition(0, 0);
}
Connections
{
target: UM.Preferences
onPreferenceChanged:
{
if
(
preference !== "general/window_height" &&
preference !== "general/window_width" &&
preference !== "general/window_state"
)
{
return;
}
contentContainer.trySetPosition(contentContainer.x, contentContainer.y);
}
}
}
} }
Control Control

View file

@ -13,6 +13,7 @@ Cura.RoundedRectangle
id: header id: header
property alias headerTitle: headerLabel.text property alias headerTitle: headerLabel.text
property alias xPosCloseButton: closeButton.left
height: UM.Theme.getSize("expandable_component_content_header").height height: UM.Theme.getSize("expandable_component_content_header").height
color: UM.Theme.getColor("secondary") color: UM.Theme.getColor("secondary")

View file

@ -11,6 +11,8 @@ Cura.ExpandableComponent
{ {
id: printSetupSelector id: printSetupSelector
dragPreferencesNamePrefix: "view/settings"
property bool preSlicedData: PrintInformation.preSliced property bool preSlicedData: PrintInformation.preSliced
contentPadding: UM.Theme.getSize("default_lining").width contentPadding: UM.Theme.getSize("default_lining").width

View file

@ -14,6 +14,8 @@ Item
{ {
id: content id: content
property int absoluteMinimumHeight: 200 * screenScaleFactor
width: UM.Theme.getSize("print_setup_widget").width - 2 * UM.Theme.getSize("default_margin").width width: UM.Theme.getSize("print_setup_widget").width - 2 * UM.Theme.getSize("default_margin").width
height: contents.height + buttonRow.height height: contents.height + buttonRow.height
@ -86,8 +88,14 @@ Item
Math.min Math.min
( (
UM.Preferences.getValue("view/settings_list_height"), UM.Preferences.getValue("view/settings_list_height"),
base.height - (customPrintSetup.mapToItem(null, 0, 0).y + buttonRow.height + UM.Theme.getSize("default_margin").height) Math.max
(
absoluteMinimumHeight,
base.height - (customPrintSetup.mapToItem(null, 0, 0).y + buttonRow.height + UM.Theme.getSize("default_margin").height)
)
); );
updateDragPosition();
} }
} }
visible: currentModeIndex == PrintSetupSelectorContents.Mode.Custom visible: currentModeIndex == PrintSetupSelectorContents.Mode.Custom
@ -143,7 +151,11 @@ Item
iconSource: UM.Theme.getIcon("arrow_right") iconSource: UM.Theme.getIcon("arrow_right")
isIconOnRightSide: true isIconOnRightSide: true
visible: currentModeIndex == PrintSetupSelectorContents.Mode.Recommended visible: currentModeIndex == PrintSetupSelectorContents.Mode.Recommended
onClicked: currentModeIndex = PrintSetupSelectorContents.Mode.Custom onClicked:
{
currentModeIndex = PrintSetupSelectorContents.Mode.Custom
updateDragPosition();
}
} }
//Invisible area at the bottom with which you can resize the panel. //Invisible area at the bottom with which you can resize the panel.
@ -171,9 +183,9 @@ Item
// position of mouse relative to dropdown align vertical centre of mouse area to cursor // position of mouse relative to dropdown align vertical centre of mouse area to cursor
// v------------------------------v v------------v // v------------------------------v v------------v
var h = mouseY + buttonRow.y + content.y - height / 2 | 0; var h = mouseY + buttonRow.y + content.y - height / 2 | 0;
if(h < 200 * screenScaleFactor) //Enforce a minimum size. if(h < absoluteMinimumHeight) //Enforce a minimum size.
{ {
h = 200 * screenScaleFactor; h = absoluteMinimumHeight;
} }
//Absolute mouse Y position in the window, to prevent it from going outside the window. //Absolute mouse Y position in the window, to prevent it from going outside the window.