diff --git a/src/Mod/Draft/Resources/ui/dialog_AnnotationStyleEditor.ui b/src/Mod/Draft/Resources/ui/dialog_AnnotationStyleEditor.ui index 1a99f60ebd..7272c7d5fb 100644 --- a/src/Mod/Draft/Resources/ui/dialog_AnnotationStyleEditor.ui +++ b/src/Mod/Draft/Resources/ui/dialog_AnnotationStyleEditor.ui @@ -109,8 +109,8 @@ 0 0 - 419 - 632 + 420 + 589 @@ -168,12 +168,9 @@ - - - Line spacing in system units - - - 10.000000000000000 + + + 1.000000000000000 diff --git a/src/Mod/Draft/draftguitools/gui_annotationstyleeditor.py b/src/Mod/Draft/draftguitools/gui_annotationstyleeditor.py index e4a692fc6f..d3a31cc59e 100644 --- a/src/Mod/Draft/draftguitools/gui_annotationstyleeditor.py +++ b/src/Mod/Draft/draftguitools/gui_annotationstyleeditor.py @@ -35,7 +35,7 @@ param = App.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft") DEFAULT = { "FontName": ("font", param.GetString("textfont", "Sans")), "FontSize": ("str", str(param.GetFloat("textheight", 100))), - "LineSpacing": ("str", "1 cm"), + "LineSpacing": ("float", 1), "ScaleMultiplier": ("float", 1), "ShowUnit": ("bool", False), "UnitOverride": ("str", ""), @@ -189,18 +189,34 @@ class AnnotationStyleEditor(gui_base.GuiCommandSimplest): # propagate changes to all annotations for obj in self.get_annotations(): vobj = obj.ViewObject - if vobj.AnnotationStyle in self.renamed.keys(): - # temporarily add the new style and switch to it - vobj.AnnotationStyle = vobj.AnnotationStyle + [self.renamed[vobj.AnnotationStyle]] - vobj.AnnotationStyle = self.renamed[vobj.AnnotationStyle] - if vobj.AnnotationStyle in styles.keys(): - if vobj.AnnotationStyle in changedstyles: - for attr, attrvalue in styles[vobj.AnnotationStyle].items(): - if hasattr(vobj, attr): - setattr(vobj, attr, attrvalue) + try: + curent = vobj.AnnotationStyle + except AssertionError: + # empty annotation styles list + pass else: - vobj.AnnotationStyle = "" - vobj.AnnotationStyle = [""] + styles.keys() + if vobj.AnnotationStyle in self.renamed.keys(): + # the style has been renamed + # temporarily add the new style and switch to it + vobj.AnnotationStyle = vobj.AnnotationStyle + [self.renamed[vobj.AnnotationStyle]] + vobj.AnnotationStyle = self.renamed[vobj.AnnotationStyle] + if vobj.AnnotationStyle in styles.keys(): + if vobj.AnnotationStyle in changedstyles: + # the style has changed + for attr, attrvalue in styles[vobj.AnnotationStyle].items(): + if hasattr(vobj, attr): + try: + getattr(vobj,attr).setValue(attrvalue) + except: + try: + setattr(vobj,attr,attrvalue) + except: + unitvalue = FreeCAD.Units.Quantity(attrvalue,FreeCAD.Units.Length).Value + setattr(vobj,attr,unitvalue) + else: + # the style has been removed + vobj.AnnotationStyle = "" + vobj.AnnotationStyle = [""] + list(styles.keys()) def on_style_changed(self, index): """Execute as a callback when the styles combobox changes.""" @@ -333,7 +349,7 @@ class AnnotationStyleEditor(gui_base.GuiCommandSimplest): users = [] for obj in self.doc.Objects: vobj = obj.ViewObject - if hasattr(vobj, "AnnotationStyle"): + if "AnnotationStyle" in vobj.PropertiesList: users.append(obj) return users diff --git a/src/Mod/Draft/draftviewproviders/view_draft_annotation.py b/src/Mod/Draft/draftviewproviders/view_draft_annotation.py index bb43fe1478..a5804ae24a 100644 --- a/src/Mod/Draft/draftviewproviders/view_draft_annotation.py +++ b/src/Mod/Draft/draftviewproviders/view_draft_annotation.py @@ -48,6 +48,9 @@ class ViewProviderDraftAnnotation(object): vobj.addProperty("App::PropertyFloat","ScaleMultiplier", "Annotation",QT_TRANSLATE_NOOP("App::Property", "Dimension size overall multiplier")) + vobj.addProperty("App::PropertyEnumeration", "AnnotationStyle", + "Annotation", QT_TRANSLATE_NOOP("App::Property", + "Annotation style")) # graphics properties vobj.addProperty("App::PropertyFloat","LineWidth", @@ -59,6 +62,8 @@ class ViewProviderDraftAnnotation(object): annotation_scale = param.GetFloat("DraftAnnotationScale", 1.0) if annotation_scale != 0: vobj.ScaleMultiplier = 1 / annotation_scale + styles = [key[12:] for key in vobj.Object.Document.Meta.keys() if key.startswith("Draft_Style_")] + vobj.AnnotationStyle = [""] + styles def __getstate__(self): @@ -82,7 +87,31 @@ class ViewProviderDraftAnnotation(object): return mode def onChanged(self, vobj, prop): - return + if (prop == "AnnotationStyle") and hasattr(vobj,"AnnotationStyle"): + import gui_annotationstyleeditor + if (not vobj.AnnotationStyle) or (vobj.AnnotationStyle == " "): + # unset style + for visprop in gui_annotationstyleeditor.DEFAULT.keys(): + if visprop in vobj.PropertiesList: + # make property writable + vobj.setEditorMode(visprop,0) + else: + # set style + import json + styles = {} + for key, value in vobj.Object.Document.Meta.items(): + if key.startswith("Draft_Style_"): + styles[key[12:]] = json.loads(value) + if prop.AnnotationStyle in styles: + style = styles[prop.AnnotationStyle] + for visprop in style.keys(): + if visprop in vobj.PropertiesList: + try: + getattr(vobj,visprop).setValue(style[visprop]) + except: + setattr(vobj,visprop,style[visprop]) + # make property read-only + vobj.setEditorMode(visprop,1) def execute(self,vobj): return