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:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user