mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
hide items not available for specific user role
This commit is contained in:
parent
cfbe04d536
commit
6edabcb912
2 changed files with 86 additions and 13 deletions
|
|
@ -100,6 +100,8 @@ class SettingObject:
|
|||
self._is_nullable = False
|
||||
self._as_widget = False
|
||||
self._is_group = False
|
||||
self._roles = None
|
||||
self.hidden_by_role = False
|
||||
|
||||
# If value should be stored to environments
|
||||
self._env_group_key = None
|
||||
|
|
@ -125,6 +127,13 @@ class SettingObject:
|
|||
# Only for develop mode
|
||||
self.defaults_not_set = False
|
||||
|
||||
def available_for_role(self, role_name=None):
|
||||
if not self._roles:
|
||||
return True
|
||||
if role_name is None:
|
||||
role_name = self.user_role
|
||||
return role_name in self._roles
|
||||
|
||||
def initial_attributes(self, input_data, parent, as_widget):
|
||||
"""Prepare attributes based on entered arguments.
|
||||
|
||||
|
|
@ -136,10 +145,14 @@ class SettingObject:
|
|||
self._parent = parent
|
||||
self._as_widget = as_widget
|
||||
|
||||
self._roles = input_data.get("roles")
|
||||
if self._roles is not None and not isinstance(self._roles, list):
|
||||
self._roles = [self._roles]
|
||||
|
||||
self._is_group = input_data.get("is_group", False)
|
||||
self._env_group_key = input_data.get("env_group_key")
|
||||
# TODO not implemented yet
|
||||
self._is_nullable = input_data.get("is_nullable", False)
|
||||
self._env_group_key = input_data.get("env_group_key")
|
||||
|
||||
if self.is_environ:
|
||||
if not self.allow_to_environment:
|
||||
|
|
@ -166,15 +179,19 @@ class SettingObject:
|
|||
|
||||
self._any_parent_is_group = any_parent_is_group
|
||||
|
||||
if not self.available_for_role():
|
||||
self.hide()
|
||||
self.hidden_by_role = True
|
||||
|
||||
@property
|
||||
def develop_mode(self):
|
||||
"""Tool is in develop mode or not.
|
||||
def user_role(self):
|
||||
"""Tool is running with any user role.
|
||||
|
||||
Returns:
|
||||
bool
|
||||
str: user role as string.
|
||||
|
||||
"""
|
||||
return self._parent.develop_mode
|
||||
return self._parent.user_role
|
||||
|
||||
@property
|
||||
def log(self):
|
||||
|
|
@ -659,7 +676,7 @@ class InputObject(SettingObject):
|
|||
value = parent_values.get(self.key, NOT_SET)
|
||||
|
||||
if value is NOT_SET:
|
||||
if self.develop_mode:
|
||||
if self.available_for_role("developer"):
|
||||
self.defaults_not_set = True
|
||||
value = self.default_input_value
|
||||
if value is NOT_SET:
|
||||
|
|
@ -1000,7 +1017,6 @@ class TextWidget(QtWidgets.QWidget, InputObject):
|
|||
super(TextWidget, self).__init__(parent_widget)
|
||||
|
||||
self.initial_attributes(input_data, parent, as_widget)
|
||||
|
||||
self.multiline = input_data.get("multiline", False)
|
||||
placeholder = input_data.get("placeholder")
|
||||
|
||||
|
|
@ -1319,6 +1335,7 @@ class RawJsonWidget(QtWidgets.QWidget, InputObject):
|
|||
}
|
||||
return {self.key: value}
|
||||
|
||||
|
||||
class ListItem(QtWidgets.QWidget, SettingObject):
|
||||
_btn_size = 20
|
||||
value_changed = QtCore.Signal(object)
|
||||
|
|
@ -2390,6 +2407,15 @@ class DictWidget(QtWidgets.QWidget, SettingObject):
|
|||
else:
|
||||
self._ui_as_item(input_data)
|
||||
|
||||
any_visible = False
|
||||
for input_field in self.input_fields:
|
||||
if not input_field.hidden_by_role:
|
||||
any_visible = True
|
||||
break
|
||||
|
||||
if not any_visible:
|
||||
self.hide()
|
||||
|
||||
def _ui_as_item(self, input_data):
|
||||
self.key = input_data["key"]
|
||||
if input_data.get("highlight_content", False):
|
||||
|
|
@ -2485,6 +2511,8 @@ class DictWidget(QtWidgets.QWidget, SettingObject):
|
|||
item.value_changed.connect(self._on_value_change)
|
||||
|
||||
if label_widget:
|
||||
if item.hidden_by_role:
|
||||
label_widget.hide()
|
||||
label_widget.input_field = item
|
||||
self.content_layout.addWidget(item, row, 1, 1, 1)
|
||||
else:
|
||||
|
|
@ -2824,6 +2852,15 @@ class DictInvisible(QtWidgets.QWidget, SettingObject):
|
|||
for child_data in input_data.get("children", []):
|
||||
self.add_children_gui(child_data)
|
||||
|
||||
any_visible = False
|
||||
for input_field in self.input_fields:
|
||||
if not input_field.hidden_by_role:
|
||||
any_visible = True
|
||||
break
|
||||
|
||||
if not any_visible:
|
||||
self.hide()
|
||||
|
||||
def add_children_gui(self, child_configuration):
|
||||
item_type = child_configuration["type"]
|
||||
klass = TypeToKlass.types.get(item_type)
|
||||
|
|
@ -2845,6 +2882,8 @@ class DictInvisible(QtWidgets.QWidget, SettingObject):
|
|||
item.value_changed.connect(self._on_value_change)
|
||||
|
||||
if label_widget:
|
||||
if item.hidden_by_role:
|
||||
label_widget.hide()
|
||||
label_widget.input_field = item
|
||||
self.content_layout.addWidget(item, row, 1, 1, 1)
|
||||
else:
|
||||
|
|
@ -3202,7 +3241,7 @@ class PathWidget(QtWidgets.QWidget, SettingObject):
|
|||
value = parent_values.get(self.key, NOT_SET)
|
||||
|
||||
if value is NOT_SET:
|
||||
if self.develop_mode:
|
||||
if self.available_for_role("developer"):
|
||||
self.defaults_not_set = True
|
||||
value = self.default_input_value
|
||||
if value is NOT_SET:
|
||||
|
|
@ -3450,6 +3489,15 @@ class DictFormWidget(QtWidgets.QWidget, SettingObject):
|
|||
|
||||
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
|
||||
|
||||
any_visible = False
|
||||
for input_field in self.input_fields:
|
||||
if not input_field.hidden_by_role:
|
||||
any_visible = True
|
||||
break
|
||||
|
||||
if not any_visible:
|
||||
self.hide()
|
||||
|
||||
def add_children_gui(self, child_configuration):
|
||||
item_type = child_configuration["type"]
|
||||
# Pop label to not be set in child
|
||||
|
|
@ -3462,6 +3510,9 @@ class DictFormWidget(QtWidgets.QWidget, SettingObject):
|
|||
item = klass(child_configuration, self, label_widget=label_widget)
|
||||
label_widget.item = item
|
||||
|
||||
if item.hidden_by_role:
|
||||
label_widget.hide()
|
||||
|
||||
item.value_changed.connect(self._on_value_change)
|
||||
self.content_layout.addRow(label_widget, item)
|
||||
self.input_fields.append(item)
|
||||
|
|
@ -3636,7 +3687,7 @@ class DictFormWidget(QtWidgets.QWidget, SettingObject):
|
|||
class LabelWidget(QtWidgets.QWidget):
|
||||
is_input_type = False
|
||||
|
||||
def __init__(self, configuration, parent=None):
|
||||
def __init__(self, configuration, parent):
|
||||
super(LabelWidget, self).__init__(parent)
|
||||
self.setObjectName("LabelWidget")
|
||||
|
||||
|
|
@ -3647,12 +3698,23 @@ class LabelWidget(QtWidgets.QWidget):
|
|||
label_widget = QtWidgets.QLabel(label, self)
|
||||
layout.addWidget(label_widget)
|
||||
|
||||
# Role handling
|
||||
roles = configuration.get("roles")
|
||||
if roles is not None and not isinstance(roles, list):
|
||||
roles = [roles]
|
||||
|
||||
if roles and parent.user_role not in roles:
|
||||
self.hide()
|
||||
self.hidden_by_role = True
|
||||
else:
|
||||
self.hidden_by_role = False
|
||||
|
||||
|
||||
class SplitterWidget(QtWidgets.QWidget):
|
||||
is_input_type = False
|
||||
_height = 2
|
||||
|
||||
def __init__(self, configuration, parent=None):
|
||||
def __init__(self, configuration, parent):
|
||||
super(SplitterWidget, self).__init__(parent)
|
||||
|
||||
layout = QtWidgets.QHBoxLayout(self)
|
||||
|
|
@ -3663,6 +3725,17 @@ class SplitterWidget(QtWidgets.QWidget):
|
|||
splitter_item.setMaximumHeight(self._height)
|
||||
layout.addWidget(splitter_item)
|
||||
|
||||
# Role handling
|
||||
roles = configuration.get("roles")
|
||||
if roles is not None and not isinstance(roles, list):
|
||||
roles = [roles]
|
||||
|
||||
if roles and parent.user_role not in roles:
|
||||
self.hide()
|
||||
self.hidden_by_role = True
|
||||
else:
|
||||
self.hidden_by_role = False
|
||||
|
||||
|
||||
TypeToKlass.types["boolean"] = BooleanWidget
|
||||
TypeToKlass.types["number"] = NumberWidget
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ class MainWidget(QtWidgets.QWidget):
|
|||
widget_width = 1000
|
||||
widget_height = 600
|
||||
|
||||
def __init__(self, develop, parent=None):
|
||||
def __init__(self, user_role, parent=None):
|
||||
super(MainWidget, self).__init__(parent)
|
||||
self.setObjectName("MainWidget")
|
||||
self.setWindowTitle("Pype Settings")
|
||||
|
|
@ -15,8 +15,8 @@ class MainWidget(QtWidgets.QWidget):
|
|||
|
||||
header_tab_widget = QtWidgets.QTabWidget(parent=self)
|
||||
|
||||
studio_widget = SystemWidget(develop, header_tab_widget)
|
||||
project_widget = ProjectWidget(develop, header_tab_widget)
|
||||
studio_widget = SystemWidget(user_role, header_tab_widget)
|
||||
project_widget = ProjectWidget(user_role, header_tab_widget)
|
||||
header_tab_widget.addTab(studio_widget, "System")
|
||||
header_tab_widget.addTab(project_widget, "Project")
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue