Merge pull request #4879 from Roy-043/Draft_Fix_Layer_List_Issues

Draft: Fix 3 issues with the Draft Tray layer list
This commit is contained in:
Yorik van Havre
2021-08-02 11:54:11 +02:00
committed by GitHub
2 changed files with 54 additions and 31 deletions

View File

@@ -254,14 +254,13 @@ class SetAutoGroup(gui_base.GuiCommandSimplest):
# and globally initialized in the `Gui` namespace to run
# some actions.
# If there is only a group selected, it runs the `AutoGroup` method.
params = App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft")
self.ui = Gui.draftToolBar
s = Gui.Selection.getSelection()
if len(s) == 1:
if (utils.get_type(s[0]) == "Layer") or \
(App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft").GetBool("AutogroupAddGroups", False)
and (s[0].isDerivedFrom("App::DocumentObjectGroup")
or utils.get_type(s[0]) in ["Site", "Building",
"Floor", "BuildingPart"])):
if (utils.get_type(s[0]) == "Layer"
or (params.GetBool("AutogroupAddGroups", False)
and groups.is_group(s[0]))):
self.ui.setAutoGroup(s[0].Name)
return
@@ -269,27 +268,26 @@ class SetAutoGroup(gui_base.GuiCommandSimplest):
# including the options "None" and "Add new layer".
self.groups = ["None"]
gn = [o.Name for o in self.doc.Objects if utils.get_type(o) == "Layer"]
if App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft").GetBool("AutogroupAddGroups", False):
if params.GetBool("AutogroupAddGroups", False):
gn.extend(groups.get_group_names())
if gn:
self.groups.extend(gn)
self.labels = [translate("draft", "None")]
self.icons = [self.ui.getIcon(":/icons/button_invalid.svg")]
for g in gn:
o = self.doc.getObject(g)
if o:
self.labels.append(o.Label)
self.icons.append(o.ViewObject.Icon)
self.labels.append(translate("draft", "Add new Layer"))
self.icons.append(self.ui.getIcon(":/icons/document-new.svg"))
self.groups.extend(gn)
self.labels = [translate("draft", "None")]
self.icons = [self.ui.getIcon(":/icons/button_invalid.svg")]
for g in gn:
o = self.doc.getObject(g)
if o:
self.labels.append(o.Label)
self.icons.append(o.ViewObject.Icon)
self.labels.append(translate("draft", "Add new Layer"))
self.icons.append(self.ui.getIcon(":/icons/document-new.svg"))
# With the lists created is uses the interface
# to pop up a menu with layer options.
# Once the desired option is chosen
# it launches the `proceed` method.
self.ui.sourceCmd = self
pos = self.ui.autoGroupButton.mapToGlobal(QtCore.QPoint(0, self.ui.autoGroupButton.geometry().height()))
self.ui.popupMenu(self.labels, self.icons, pos)
# With the lists created is uses the interface
# to pop up a menu with layer options.
# Once the desired option is chosen
# it launches the `proceed` method.
self.ui.sourceCmd = self
pos = self.ui.autoGroupButton.mapToGlobal(QtCore.QPoint(0, self.ui.autoGroupButton.geometry().height()))
self.ui.popupMenu(self.labels, self.icons, pos)
def proceed(self, labelname):
"""Set the defined autogroup, or create a new layer.

View File

@@ -41,6 +41,34 @@ from draftutils.translate import _tr
from draftutils.messages import _msg, _err
def is_group(obj):
"""Return True if the given object is considered a group.
Parameters
----------
obj : App::DocumentObject
The object to check.
Returns
-------
bool
Returns `True` if `obj` is considered a group:
The object is derived from `App::DocumentObjectGroup` but not
a `'LayerContainer'`.
Or the object is of the type `'Project'`, `'Site'`, `'Building'`,
`'Floor'` or `'BuildingPart'` from the Arch Workbench.
Otherwise returns `False`.
"""
return ((obj.isDerivedFrom("App::DocumentObjectGroup")
and obj.Name != "LayerContainer")
or utils.get_type(obj) in ("Project", "Site", "Building",
"Floor", "BuildingPart"))
def get_group_names(doc=None):
"""Return a list of names of existing groups in the document.
@@ -54,12 +82,10 @@ def get_group_names(doc=None):
Returns
-------
list of str
A list of names of objects that are "groups".
These are objects derived from `App::DocumentObjectGroup`
or which are of types `'Floor'`, `'Building'`, or `'Site'`
from the Arch Workbench.
A list of names of objects that are considered groups.
See the is_group function.
Otherwise, return an empty list.
Otherwise returns an empty list.
"""
if not doc:
found, doc = utils.find_doc(App.activeDocument())
@@ -71,8 +97,7 @@ def get_group_names(doc=None):
glist = []
for obj in doc.Objects:
if (obj.isDerivedFrom("App::DocumentObjectGroup")
or utils.get_type(obj) in ("Floor", "Building", "Site")):
if is_group(obj):
glist.append(obj.Name)
return glist