added name and parent inputs, parent is filling based on selected asset

This commit is contained in:
Jakub Trllo 2019-02-20 17:49:43 +01:00
parent db9c07a32a
commit 81fd4283aa

View file

@ -21,6 +21,9 @@ class Window(QtWidgets.QDialog):
self.setFocusPolicy(QtCore.Qt.StrongFocus)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
# Validators
self.valid_parent = False
# assets
assets_widgets = QtWidgets.QWidget()
assets_widgets.setContentsMargins(0, 0, 0, 0)
@ -30,21 +33,31 @@ class Window(QtWidgets.QDialog):
assets_layout.addWidget(assets)
# info
widget_name = QtWidgets.QWidget()
widget_name.setContentsMargins(0, 0, 0, 0)
layout_name = QtWidgets.QHBoxLayout(widget_name)
label_name = QtWidgets.QLabel("Name:")
input_name = QtWidgets.QLineEdit()
input_name.setPlaceholderText("<asset name>")
layout_name.addWidget(label_name)
layout_name.addWidget(input_name)
# Parent
widget_parent = QtWidgets.QWidget()
widget_parent.setContentsMargins(0, 0, 0, 0)
layout_parent = QtWidgets.QHBoxLayout(widget_parent)
label_parent = QtWidgets.QLabel("Parent:")
input_parent = QtWidgets.QLineEdit()
input_parent.setReadOnly(True)
input_parent.setStyleSheet("background-color: #333333;") # greyed out
layout_parent.addWidget(label_parent)
layout_parent.addWidget(input_parent)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(label_name)
layout.addWidget(input_name)
layout.addWidget(label_parent)
layout.addWidget(input_parent)
info_widget = QtWidgets.QWidget()
info_widget.setContentsMargins(0, 0, 0, 0)
info_layout = QtWidgets.QVBoxLayout(info_widget)
info_layout.addWidget(widget_parent)
info_layout.addWidget(widget_name)
body = QtWidgets.QSplitter()
body.setContentsMargins(0, 0, 0, 0)
@ -52,9 +65,9 @@ class Window(QtWidgets.QDialog):
QtWidgets.QSizePolicy.Expanding)
body.setOrientation(QtCore.Qt.Horizontal)
body.addWidget(assets_widgets)
body.addWidget(layout)
body.addWidget(info_widget)
body.setStretchFactor(0, 100)
body.setStretchFactor(1, 65)
body.setStretchFactor(1, 200)
# statusbar
message = QtWidgets.QLabel()
@ -76,6 +89,10 @@ class Window(QtWidgets.QDialog):
"model": {
"assets": assets
},
"inputs": {
"parent": input_parent,
"name": input_name
},
"buttons": {
}
@ -83,18 +100,14 @@ class Window(QtWidgets.QDialog):
# signals
assets.selection_changed.connect(self.on_asset_changed)
assets.silo_changed.connect(self.on_silo_changed)
# on start
self.on_asset_changed()
self.resize(800, 500)
self.echo("Connected to project: {0}".format(project_name))
def refresh(self):
self.data["model"]["assets"].refresh()
# set silo on start so tasks for silo are shown
current_silo = self.data["model"]["assets"].get_current_silo()
if current_silo != "":
self.on_asset_changed()
def echo(self, message):
widget = self.data["label"]["message"]
@ -104,54 +117,25 @@ class Window(QtWidgets.QDialog):
print(message)
def on_add_asset(self):
"""Show add asset dialog"""
# Get parent asset (active index in selection)
model = self.data["model"]["assets"]
parent_id = model.get_active_asset()
# Get active silo
silo = model.get_current_silo()
if not silo:
QtWidgets.QMessageBox.critical(self, "Missing silo",
"Please create a silo first.\n"
"Use the + tab at the top left.")
return
def _on_current_asset_changed():
"""Callback on current asset changed in item widget.
Whenever the current index changes in the item widget we want to
update under which asset we're creating *to be created* asset.
"""
parent = model.get_active_asset()
# Signals
model.current_changed.connect(_on_current_asset_changed)
def on_asset_changed(self):
"""Callback on asset selection changed
This updates the task view.
"""
model = self.data["model"]["assets"]
selected = model.get_selected_assets()
# Show task of silo if nothing selected
if len(selected) < 1:
silo = model.get_silo_object()
if silo:
selected = [silo['_id']]
self.data['model']['tasks'].set_assets(selected)
def on_silo_changed(self, silo):
"""Callback on asset silo changed"""
if silo:
self.echo("Silo changed to: {0}".format(silo))
assets_model = self.data["model"]["assets"]
parent_input = self.data['inputs']['parent']
selected = assets_model.get_selected_assets()
if len(selected) > 1:
self.valid_parent = False
parent_input.setText('< Please select only one asset! >')
elif len(selected) == 1:
self.valid_parent = True
asset = io.find_one({"_id": selected[0], "type": "asset"})
parent_input.setText(asset['name'])
else:
self.valid_parent = False
parent_input.setText('< Nothing is selected >')
def show(root=None, debug=False, parent=None):