diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index 781b7b0f1c..adebc37dc3 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -10,224 +10,117 @@ import UM 1.1 as UM Item { id: base; + property int currentIndex: UM.ActiveTool.properties.SelectedIndex; - width: 0; - height: 0; + width: childrenRect.width; + height: childrenRect.height; - property variant position: mapToItem(null, 0, 0) + Column { + id: items + anchors.top: parent.top; + anchors.left: parent.left; - property real viewportWidth: UM.Application.mainWindow.width * UM.Application.mainWindow.viewportRect.width; - property real viewportHeight: UM.Application.mainWindow.height * UM.Application.mainWindow.viewportRect.height; + spacing: UM.Theme.sizes.default_lining.height; - property int currentIndex; + UM.SettingItem { + id: profileSelection - Rectangle { - id: settingsPanel; + width: UM.Theme.sizes.setting.width; + height: UM.Theme.sizes.setting.height; - z: 3; + name: catalog.i18nc("@label", "Profile") + type: "enum" + indent: false - width: UM.Theme.sizes.per_object_settings_panel.width; - height: items.height + UM.Theme.sizes.default_margin.height * 2; + style: UM.Theme.styles.setting_item; - opacity: 0; - Behavior on opacity { NumberAnimation { } } + options: UM.ProfilesModel { addUseGlobal: true } - border.width: UM.Theme.sizes.per_object_settings_panel_border.width; - border.color: UM.Theme.colors.per_object_settings_panel_border; + value: UM.ActiveTool.properties.Model.getItem(base.currentIndex).profile - color: UM.Theme.colors.per_object_settings_panel_background; - - DropArea { - anchors.fill: parent; - } - - Button { - id: closeButton; - width: UM.Theme.sizes.message_close.width; - height: UM.Theme.sizes.message_close.height; - anchors { - right: parent.right; - rightMargin: UM.Theme.sizes.default_margin.width / 2; - top: parent.top; - topMargin: UM.Theme.sizes.default_margin.width / 2; - } - UM.RecolorImage { - anchors.fill: parent; - sourceSize.width: width - sourceSize.height: width - color: UM.Theme.colors.message_dismiss - source: UM.Theme.icons.cross2; - } - - onClicked: settingsPanel.opacity = 0 - - style: ButtonStyle { - background: Rectangle { - color: UM.Theme.colors.message_background - } + onItemValueChanged: { + var item = UM.ActiveTool.properties.Model.getItem(base.currentIndex); + UM.ActiveTool.properties.Model.setObjectProfile(item.id, value) } } - Column { - id: items - anchors.top: parent.top; - anchors.topMargin: UM.Theme.sizes.default_margin.height; + Item + { + height: UM.Theme.sizes.default_margin.height + width: parent.width + } - spacing: UM.Theme.sizes.default_lining.height; + Repeater { + id: settings; + + model: UM.ActiveTool.properties.Model.getItem(base.currentIndex).settings UM.SettingItem { - id: profileSelection - - x: UM.Theme.sizes.per_object_settings_panel_border.width + 1 - width: UM.Theme.sizes.setting.width; height: UM.Theme.sizes.setting.height; - name: catalog.i18nc("@label", "Profile") - type: "enum" + name: model.label; + type: model.type; + value: model.value; + description: model.description; + unit: model.unit; + valid: model.valid; + options: model.options + indent: false style: UM.Theme.styles.setting_item; - options: UM.ProfilesModel { addUseGlobal: true } - - value: UM.ActiveTool.properties.Model.getItem(base.currentIndex).profile - onItemValueChanged: { - var item = UM.ActiveTool.properties.Model.getItem(base.currentIndex); - UM.ActiveTool.properties.Model.setObjectProfile(item.id, value) + settings.model.setSettingValue(model.key, value) } - } - Repeater { - id: settings; + Button + { + anchors.left: parent.left; + anchors.leftMargin: UM.Theme.sizes.default_margin.width; - model: UM.ActiveTool.properties.Model.getItem(base.currentIndex).settings - - UM.SettingItem { - width: UM.Theme.sizes.setting.width; + width: UM.Theme.sizes.setting.height; height: UM.Theme.sizes.setting.height; - x: UM.Theme.sizes.per_object_settings_panel_border.width + 1 - name: model.label; - type: model.type; - value: model.value; - description: model.description; - unit: model.unit; - valid: model.valid; - options: model.options + opacity: parent.hovered || hovered ? 1 : 0; + onClicked: UM.ActiveTool.properties.Model.removeSettingOverride(UM.ActiveTool.properties.Model.getItem(base.currentIndex).id, model.key) - style: UM.Theme.styles.setting_item; - - onItemValueChanged: { - settings.model.setSettingValue(model.key, value) - } - - Button + style: ButtonStyle { - anchors.left: parent.horizontalCenter; - anchors.leftMargin: UM.Theme.sizes.default_margin.width; - - width: UM.Theme.sizes.setting.height; - height: UM.Theme.sizes.setting.height; - - opacity: parent.hovered || hovered ? 1 : 0; - onClicked: UM.ActiveTool.properties.Model.removeSettingOverride(UM.ActiveTool.properties.Model.getItem(base.currentIndex).id, model.key) - - style: ButtonStyle + background: Rectangle { - background: Rectangle + color: control.hovered ? control.parent.style.controlHighlightColor : control.parent.style.controlColor; + UM.RecolorImage { - color: control.hovered ? control.parent.style.controlHighlightColor : control.parent.style.controlColor; - UM.RecolorImage - { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width/2 - height: parent.height/2 - sourceSize.width: width - sourceSize.height: width - color: UM.Theme.colors.setting_control_revert - source: UM.Theme.icons.cross1 - } + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width/2 + height: parent.height/2 + sourceSize.width: width + sourceSize.height: width + color: UM.Theme.colors.setting_control_revert + source: UM.Theme.icons.cross1 } } } } } - - Item - { - height: UM.Theme.sizes.default_margin.height / 2 - width: parent.width - } - - Button - { - id: customise_settings_button; - anchors.right: profileSelection.right; - visible: parseInt(UM.Preferences.getValue("cura/active_mode")) == 1 - - text: catalog.i18nc("@action:button", "Customize Settings"); - - style: ButtonStyle - { - background: Rectangle - { - width: control.width; - height: control.height; - color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button; - } - label: Label - { - text: control.text; - color: UM.Theme.colors.load_save_button_text; - } - } - - onClicked: settingPickDialog.visible = true; - - Connections - { - target: UM.Preferences; - - onPreferenceChanged: - { - customise_settings_button.visible = parseInt(UM.Preferences.getValue("cura/active_mode")) - } - } - } } - UM.I18nCatalog { id: catalog; name: "uranium"; } - } + Item + { + height: UM.Theme.sizes.default_margin.height + width: parent.width + } - Repeater { - model: UM.ActiveTool.properties.Model; - delegate: Button { - x: ((model.x + 1.0) / 2.0) * base.viewportWidth - base.position.x - width / 2 - y: -((model.y + 1.0) / 2.0) * base.viewportHeight + (base.viewportHeight - base.position.y) + height / 2 + Button + { + id: customise_settings_button; + anchors.right: profileSelection.right; + height: UM.Theme.sizes.setting.height; + visible: parseInt(UM.Preferences.getValue("cura/active_mode")) == 1 - width: UM.Theme.sizes.per_object_settings_button.width - height: UM.Theme.sizes.per_object_settings_button.height - - tooltip: catalog.i18nc("@info:tooltip", "Customise settings for this object"); - - checkable: true; - onClicked: { - if(settingsPanel.opacity < 0.5) //Per-object panel is not currently displayed. - { - base.currentIndex = index; - - settingsPanel.anchors.left = right; - settingsPanel.anchors.top = top; - - settingsPanel.opacity = 1; - } - else //Per-object panel is already displayed. Deactivate it (same behaviour as the close button). - { - settingsPanel.opacity = 0; - } - } + text: catalog.i18nc("@action:button", "Add Setting"); style: ButtonStyle { @@ -235,20 +128,36 @@ Item { { width: control.width; height: control.height; - - color: control.hovered ? UM.Theme.colors.button_active : UM.Theme.colors.button_hover; + border.width: UM.Theme.sizes.default_lining.width; + border.color: control.pressed ? UM.Theme.colors.action_button_active_border : + control.hovered ? UM.Theme.colors.action_button_hovered_border : UM.Theme.colors.action_button_border + color: control.pressed ? UM.Theme.colors.action_button_active : + control.hovered ? UM.Theme.colors.action_button_hovered : UM.Theme.colors.action_button } - label: Image { - width: control.width; - height: control.height; - sourceSize.width: width; - sourceSize.height: height; - source: UM.Theme.icons.plus; + label: Label + { + text: control.text; + color: UM.Theme.colors.setting_control_text; + anchors.centerIn: parent + } + } + + onClicked: settingPickDialog.visible = true; + + Connections + { + target: UM.Preferences; + + onPreferenceChanged: + { + customise_settings_button.visible = parseInt(UM.Preferences.getValue("cura/active_mode")) } } } } + UM.I18nCatalog { id: catalog; name: "uranium"; } + UM.Dialog { id: settingPickDialog diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py index 664fe0c61d..06204e4b1c 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py @@ -2,6 +2,7 @@ # Uranium is released under the terms of the AGPLv3 or higher. from UM.Tool import Tool +from UM.Scene.Selection import Selection from . import PerObjectSettingsModel @@ -9,10 +10,15 @@ class PerObjectSettingsTool(Tool): def __init__(self): super().__init__() - self.setExposedProperties("Model") + self.setExposedProperties("Model", "SelectedIndex") def event(self, event): return False def getModel(self): return PerObjectSettingsModel.PerObjectSettingsModel() + + def getSelectedIndex(self): + selected_object_id = id(Selection.getSelectedObject(0)); + index = self.getModel().find("id", selected_object_id) + return index \ No newline at end of file