mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Number of settings & mode are now displayed in open Project
CURA-1263
This commit is contained in:
parent
ea0cbec691
commit
6bb1b7ec80
3 changed files with 141 additions and 70 deletions
|
@ -103,8 +103,18 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
quality_changes_conflict = True
|
quality_changes_conflict = True
|
||||||
break
|
break
|
||||||
Job.yieldThread()
|
Job.yieldThread()
|
||||||
|
|
||||||
|
num_visible_settings = 0
|
||||||
try:
|
try:
|
||||||
archive.open("Cura/preferences.cfg")
|
temp_preferences = Preferences()
|
||||||
|
temp_preferences.readFromFile(io.TextIOWrapper(archive.open("Cura/preferences.cfg"))) # We need to wrap it, else the archive parser breaks.
|
||||||
|
|
||||||
|
visible_settings_string = temp_preferences.getValue("general/visible_settings")
|
||||||
|
if visible_settings_string is not None:
|
||||||
|
num_visible_settings = len(visible_settings_string.split(";"))
|
||||||
|
active_mode = temp_preferences.getValue("cura/active_mode")
|
||||||
|
if not active_mode:
|
||||||
|
active_mode = Preferences.getInstance().getValue("cura/active_mode")
|
||||||
except KeyError:
|
except KeyError:
|
||||||
# If there is no preferences file, it's not a workspace, so notify user of failure.
|
# If there is no preferences file, it's not a workspace, so notify user of failure.
|
||||||
Logger.log("w", "File %s is not a valid workspace.", file_name)
|
Logger.log("w", "File %s is not a valid workspace.", file_name)
|
||||||
|
@ -114,6 +124,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
self._dialog.setMachineConflict(machine_conflict)
|
self._dialog.setMachineConflict(machine_conflict)
|
||||||
self._dialog.setQualityChangesConflict(quality_changes_conflict)
|
self._dialog.setQualityChangesConflict(quality_changes_conflict)
|
||||||
self._dialog.setMaterialConflict(material_conflict)
|
self._dialog.setMaterialConflict(material_conflict)
|
||||||
|
self._dialog.setNumVisibleSettings(num_visible_settings)
|
||||||
|
self._dialog.setActiveMode(active_mode)
|
||||||
self._dialog.show()
|
self._dialog.show()
|
||||||
|
|
||||||
# Block until the dialog is closed.
|
# Block until the dialog is closed.
|
||||||
|
|
|
@ -3,10 +3,12 @@ from PyQt5.QtQml import QQmlComponent, QQmlContext
|
||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
i18n_catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
class WorkspaceDialog(QObject):
|
class WorkspaceDialog(QObject):
|
||||||
showDialogSignal = pyqtSignal()
|
showDialogSignal = pyqtSignal()
|
||||||
|
@ -28,10 +30,38 @@ class WorkspaceDialog(QObject):
|
||||||
self._has_quality_changes_conflict = False
|
self._has_quality_changes_conflict = False
|
||||||
self._has_machine_conflict = False
|
self._has_machine_conflict = False
|
||||||
self._has_material_conflict = False
|
self._has_material_conflict = False
|
||||||
|
self._num_visible_settings = 0
|
||||||
|
self._active_mode = ""
|
||||||
|
|
||||||
machineConflictChanged = pyqtSignal()
|
machineConflictChanged = pyqtSignal()
|
||||||
qualityChangesConflictChanged = pyqtSignal()
|
qualityChangesConflictChanged = pyqtSignal()
|
||||||
materialConflictChanged = pyqtSignal()
|
materialConflictChanged = pyqtSignal()
|
||||||
|
numVisibleSettingsChanged = pyqtSignal()
|
||||||
|
activeModeChanged = pyqtSignal()
|
||||||
|
|
||||||
|
@pyqtProperty(str, notify=activeModeChanged)
|
||||||
|
def activeMode(self):
|
||||||
|
return self._active_mode
|
||||||
|
|
||||||
|
def setActiveMode(self, active_mode):
|
||||||
|
if active_mode == 0:
|
||||||
|
self._active_mode = i18n_catalog.i18nc("@title:tab", "Recommended")
|
||||||
|
else:
|
||||||
|
self._active_mode = i18n_catalog.i18nc("@title:tab", "Custom")
|
||||||
|
self.activeModeChanged.emit()
|
||||||
|
|
||||||
|
@pyqtProperty(int, constant = True)
|
||||||
|
def totalNumberOfSettings(self):
|
||||||
|
# TODO: actually calculate this.
|
||||||
|
return 200
|
||||||
|
|
||||||
|
@pyqtProperty(int, notify = numVisibleSettingsChanged)
|
||||||
|
def numVisibleSettings(self):
|
||||||
|
return self._num_visible_settings
|
||||||
|
|
||||||
|
def setNumVisibleSettings(self, num_visible_settings):
|
||||||
|
self._num_visible_settings = num_visible_settings
|
||||||
|
self.numVisibleSettingsChanged.emit()
|
||||||
|
|
||||||
@pyqtProperty(bool, notify = machineConflictChanged)
|
@pyqtProperty(bool, notify = machineConflictChanged)
|
||||||
def machineConflict(self):
|
def machineConflict(self):
|
||||||
|
|
|
@ -12,13 +12,13 @@ UM.Dialog
|
||||||
{
|
{
|
||||||
title: catalog.i18nc("@title:window", "Import workspace conflict")
|
title: catalog.i18nc("@title:window", "Import workspace conflict")
|
||||||
|
|
||||||
width: 350 * Screen.devicePixelRatio;
|
width: 500 * Screen.devicePixelRatio;
|
||||||
minimumWidth: 350 * Screen.devicePixelRatio;
|
minimumWidth: 500 * Screen.devicePixelRatio;
|
||||||
maximumWidth: 350 * Screen.devicePixelRatio;
|
maximumWidth: 500 * Screen.devicePixelRatio;
|
||||||
|
|
||||||
height: 250 * Screen.devicePixelRatio;
|
height: 350 * Screen.devicePixelRatio;
|
||||||
minimumHeight: 250 * Screen.devicePixelRatio;
|
minimumHeight: 350 * Screen.devicePixelRatio;
|
||||||
maximumHeight: 250 * Screen.devicePixelRatio;
|
maximumHeight: 350 * Screen.devicePixelRatio;
|
||||||
|
|
||||||
onClosing: manager.notifyClosed()
|
onClosing: manager.notifyClosed()
|
||||||
onVisibleChanged:
|
onVisibleChanged:
|
||||||
|
@ -96,6 +96,26 @@ UM.Dialog
|
||||||
text: catalog.i18nc("@action:label", "TOCHANGE")
|
text: catalog.i18nc("@action:label", "TOCHANGE")
|
||||||
width: parent.width / 3
|
width: parent.width / 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UM.TooltipArea
|
||||||
|
{
|
||||||
|
id: machineResolveTooltip
|
||||||
|
width: parent.width / 3
|
||||||
|
height: visible ? 25 : 0
|
||||||
|
text: catalog.i18nc("@info:tooltip", "How should the conflict in the machine be resolved?")
|
||||||
|
ComboBox
|
||||||
|
{
|
||||||
|
model: resolveStrategiesModel
|
||||||
|
textRole: "label"
|
||||||
|
id: machineResolveComboBox
|
||||||
|
width: parent.width
|
||||||
|
enabled: manager.machineConflict
|
||||||
|
onActivated:
|
||||||
|
{
|
||||||
|
manager.setResolveStrategy("machine", resolveStrategiesModel.get(index).key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
|
@ -118,60 +138,20 @@ UM.Dialog
|
||||||
text: catalog.i18nc("@action:label", "TOCHANGE")
|
text: catalog.i18nc("@action:label", "TOCHANGE")
|
||||||
width: parent.width / 3
|
width: parent.width / 3
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
UM.TooltipArea
|
|
||||||
{
|
|
||||||
id: machineResolveTooltip
|
|
||||||
width: parent.width
|
|
||||||
height: visible ? 25 : 0
|
|
||||||
text: catalog.i18nc("@info:tooltip", "How should the conflict in the machine be resolved?")
|
|
||||||
visible: manager.machineConflict
|
|
||||||
Row
|
|
||||||
{
|
|
||||||
width: parent.width
|
|
||||||
height: childrenRect.height
|
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: catalog.i18nc("@action:label","Machine")
|
|
||||||
width: 150
|
|
||||||
}
|
|
||||||
|
|
||||||
ComboBox
|
|
||||||
{
|
|
||||||
model: resolveStrategiesModel
|
|
||||||
textRole: "label"
|
|
||||||
id: machineResolveComboBox
|
|
||||||
width: 150
|
|
||||||
onActivated:
|
|
||||||
{
|
|
||||||
manager.setResolveStrategy("machine", resolveStrategiesModel.get(index).key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
UM.TooltipArea
|
UM.TooltipArea
|
||||||
{
|
{
|
||||||
id: qualityChangesResolveTooltip
|
id: qualityChangesResolveTooltip
|
||||||
width: parent.width
|
width: parent.width / 3
|
||||||
height: visible ? 25 : 0
|
height: visible ? 25 : 0
|
||||||
text: catalog.i18nc("@info:tooltip", "How should the conflict in the profile be resolved?")
|
text: catalog.i18nc("@info:tooltip", "How should the conflict in the profile be resolved?")
|
||||||
visible: manager.qualityChangesConflict
|
|
||||||
Row
|
|
||||||
{
|
|
||||||
width: parent.width
|
|
||||||
height: childrenRect.height
|
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: catalog.i18nc("@action:label","Profile")
|
|
||||||
width: 150
|
|
||||||
}
|
|
||||||
|
|
||||||
ComboBox
|
ComboBox
|
||||||
{
|
{
|
||||||
model: resolveStrategiesModel
|
model: resolveStrategiesModel
|
||||||
textRole: "label"
|
textRole: "label"
|
||||||
id: qualityChangesResolveComboBox
|
id: qualityChangesResolveComboBox
|
||||||
|
enabled: manager.qualityChangesConflict
|
||||||
|
width: parent.width
|
||||||
onActivated:
|
onActivated:
|
||||||
{
|
{
|
||||||
manager.setResolveStrategy("quality_changes", resolveStrategiesModel.get(index).key)
|
manager.setResolveStrategy("quality_changes", resolveStrategiesModel.get(index).key)
|
||||||
|
@ -179,28 +159,41 @@ UM.Dialog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UM.TooltipArea
|
|
||||||
|
Label
|
||||||
{
|
{
|
||||||
id: materialResolveTooltip
|
text: catalog.i18nc("@action:label", "Material settings")
|
||||||
width: parent.width
|
font.bold: true
|
||||||
height: visible ? 25 : 0
|
}
|
||||||
text: catalog.i18nc("@info:tooltip", "How should the conflict in the material(s) be resolved?")
|
|
||||||
visible: manager.materialConflict
|
|
||||||
Row
|
Row
|
||||||
{
|
{
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: childrenRect.height
|
height: childrenRect.height
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:label","Material")
|
text: catalog.i18nc("@action:label", "Type")
|
||||||
width: 150
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "TOCHANGE")
|
||||||
|
width: parent.width / 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UM.TooltipArea
|
||||||
|
{
|
||||||
|
id: materialResolveTooltip
|
||||||
|
width: parent.width / 3
|
||||||
|
height: visible ? 25 : 0
|
||||||
|
text: catalog.i18nc("@info:tooltip", "How should the conflict in the profile be resolved?")
|
||||||
ComboBox
|
ComboBox
|
||||||
{
|
{
|
||||||
model: resolveStrategiesModel
|
model: resolveStrategiesModel
|
||||||
textRole: "label"
|
textRole: "label"
|
||||||
id: materialResolveComboBox
|
id: materialResolveComboBox
|
||||||
|
enabled: manager.materialConflict
|
||||||
|
width: parent.width
|
||||||
onActivated:
|
onActivated:
|
||||||
{
|
{
|
||||||
manager.setResolveStrategy("material", resolveStrategiesModel.get(index).key)
|
manager.setResolveStrategy("material", resolveStrategiesModel.get(index).key)
|
||||||
|
@ -208,6 +201,42 @@ UM.Dialog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Setting visibility")
|
||||||
|
font.bold: true
|
||||||
|
}
|
||||||
|
Row
|
||||||
|
{
|
||||||
|
width: parent.width
|
||||||
|
height: childrenRect.height
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Mode")
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: manager.activeMode
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Row
|
||||||
|
{
|
||||||
|
width: parent.width
|
||||||
|
height: childrenRect.height
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Visible settings:")
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings)
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rightButtons: [
|
rightButtons: [
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue