diff --git a/src/App/Material.h b/src/App/Material.h index ddde2cb8ba..cc91377219 100644 --- a/src/App/Material.h +++ b/src/App/Material.h @@ -29,6 +29,8 @@ #endif #include +#include +#include namespace App { @@ -116,6 +118,18 @@ public: { return(QColor(int(r*255.0),int(g*255.0),int(b*255.0))); } + /** + * returns color as CSS color "#RRGGBB" + * + */ + std::string asCSSString() { + std::stringstream ss; + ss << "#" << std::hex << std::uppercase << std::setfill('0') << std::setw(2) << int(r*255.0) + << std::setw(2) << int(g*255.0) + << std::setw(2) << int(b*255.0); + return ss.str(); +} + /// color values, public accesible float r,g,b,a; }; diff --git a/src/Mod/TechDraw/App/DrawViewAnnotation.cpp b/src/Mod/TechDraw/App/DrawViewAnnotation.cpp index ffe63105e5..eafe1e38ce 100644 --- a/src/Mod/TechDraw/App/DrawViewAnnotation.cpp +++ b/src/Mod/TechDraw/App/DrawViewAnnotation.cpp @@ -48,6 +48,11 @@ using namespace std; PROPERTY_SOURCE(TechDraw::DrawViewAnnotation, TechDraw::DrawView) +const char* DrawViewAnnotation::TextFormatEnums[]= {"Normal", + "Bold", + "Italic", + "Bold-Italic", + NULL}; DrawViewAnnotation::DrawViewAnnotation(void) { @@ -58,10 +63,15 @@ DrawViewAnnotation::DrawViewAnnotation(void) std::string fontName = hGrp->GetASCII("LabelFont", "osifont"); ADD_PROPERTY_TYPE(Text ,("Default Text"),vgroup,App::Prop_None,"The text to be displayed"); - ADD_PROPERTY_TYPE(Font ,(fontName.c_str()) ,vgroup,App::Prop_None, "The name of the font to use"); + ADD_PROPERTY_TYPE(Font ,(fontName.c_str()),vgroup,App::Prop_None, "The name of the font to use"); ADD_PROPERTY_TYPE(TextColor,(0.0f,0.0f,0.0f),vgroup,App::Prop_None,"The color of the text"); ADD_PROPERTY_TYPE(TextSize,(8),vgroup,App::Prop_None,"The size of the text in mm"); + ADD_PROPERTY_TYPE(MaxWidth,(-1.0),vgroup,App::Prop_None,"The maximum width of the Annotation block"); + ADD_PROPERTY_TYPE(LineSpace,(80),vgroup,App::Prop_None,"Line spacing adjustment"); + + TextFormat.setEnums(TextFormatEnums); + ADD_PROPERTY(TextFormat, ((long)0)); //Scale.StatusBits.set(3); //hide scale. n/a for Annotation //ScaleType.StatusBits.set(3); @@ -73,9 +83,30 @@ DrawViewAnnotation::~DrawViewAnnotation() { } +void DrawViewAnnotation::onChanged(const App::Property* prop) +{ + if (!isRestoring()) { + if (prop == &Text || + prop == &Font || + prop == &TextColor || + prop == &TextSize || + prop == &LineSpace || + prop == &TextFormat || //changing this doesn't recompute until focus changes?? + prop == &MaxWidth) { + try { + App::DocumentObjectExecReturn *ret = recompute(); + delete ret; + } + catch (...) { + } + } + } + TechDraw::DrawView::onChanged(prop); +} + App::DocumentObjectExecReturn *DrawViewAnnotation::execute(void) { - return App::DocumentObject::StdReturn; + return TechDraw::DrawView::execute(); } // Python Drawing feature --------------------------------------------------------- diff --git a/src/Mod/TechDraw/App/DrawViewAnnotation.h b/src/Mod/TechDraw/App/DrawViewAnnotation.h index 540cf5ef2f..23f243672e 100644 --- a/src/Mod/TechDraw/App/DrawViewAnnotation.h +++ b/src/Mod/TechDraw/App/DrawViewAnnotation.h @@ -21,7 +21,7 @@ * * ***************************************************************************/ - + #ifndef _DrawViewAnnotation_h_ @@ -30,9 +30,10 @@ #include #include -#include "DrawView.h" +#include "App/PropertyStandard.h" #include +#include "DrawView.h" namespace TechDraw { @@ -53,6 +54,9 @@ public: App::PropertyString Font; App::PropertyColor TextColor; App::PropertyInteger TextSize; + App::PropertyInteger LineSpace; + App::PropertyEnumeration TextFormat; // Plain,Bold,Italic,Bold-Italic + App::PropertyFloat MaxWidth; /** @name methods overide Feature */ //@{ @@ -64,6 +68,12 @@ public: virtual const char* getViewProviderName(void) const { return "TechDrawGui::ViewProviderAnnotation"; } + +protected: + virtual void onChanged(const App::Property* prop); + +private: + static const char* TextFormatEnums[]; }; typedef App::FeaturePythonT DrawViewAnnotationPython; diff --git a/src/Mod/TechDraw/App/DrawViewClipPyImp.cpp b/src/Mod/TechDraw/App/DrawViewClipPyImp.cpp index b68c8424be..4bd34ae3c6 100644 --- a/src/Mod/TechDraw/App/DrawViewClipPyImp.cpp +++ b/src/Mod/TechDraw/App/DrawViewClipPyImp.cpp @@ -82,7 +82,8 @@ PyObject* DrawViewClipPy::getChildViewNames(PyObject* args) std::vector::iterator it = strings.begin(); for( ; it != strings.end(); it++) { PyObject* pString = PyString_FromString(it->c_str()); //TODO: unicode & py3 - int rc = PyList_Append(result, pString); + //int rc = + static_cast (PyList_Append(result, pString)); } // PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented"); diff --git a/src/Mod/TechDraw/App/DrawViewDraft.h b/src/Mod/TechDraw/App/DrawViewDraft.h index 32df785932..42ba15b7f3 100644 --- a/src/Mod/TechDraw/App/DrawViewDraft.h +++ b/src/Mod/TechDraw/App/DrawViewDraft.h @@ -60,7 +60,7 @@ public: } protected: - void onChanged(const App::Property* prop); + virtual void onChanged(const App::Property* prop); Base::BoundBox3d bbox; std::string getSVGHead(void); std::string getSVGTail(void); diff --git a/src/Mod/TechDraw/App/DrawViewSymbol.h b/src/Mod/TechDraw/App/DrawViewSymbol.h index de9f164ce9..fd7bc7163f 100644 --- a/src/Mod/TechDraw/App/DrawViewSymbol.h +++ b/src/Mod/TechDraw/App/DrawViewSymbol.h @@ -58,7 +58,7 @@ public: } protected: - void onChanged(const App::Property* prop); + virtual void onChanged(const App::Property* prop); Base::BoundBox3d bbox; }; diff --git a/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp b/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp index dd68b970d5..7843806c03 100644 --- a/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp @@ -38,6 +38,11 @@ #endif #include +#include +#include +#include +#include +#include #include #include @@ -59,8 +64,13 @@ QGIViewAnnotation::QGIViewAnnotation(const QPoint &pos, QGraphicsScene *scene) setFlag(QGraphicsItem::ItemIsMovable, true); m_textItem = new QGCustomText(); + m_textItem->setTextInteractionFlags(Qt::NoTextInteraction); + //To allow on screen editing of text: + //m_textItem->setTextInteractionFlags(Qt::TextEditorInteraction); //this works + //QObject::connect(QGraphicsTextItem::document(), SIGNAL(contentsChanged()),m_textItem, SLOT(updateText())); //not tested addToGroup(m_textItem); m_textItem->setPos(0.,0.); + } QGIViewAnnotation::~QGIViewAnnotation() @@ -114,29 +124,43 @@ void QGIViewAnnotation::drawAnnotation() TechDraw::DrawViewAnnotation *viewAnno = dynamic_cast(getViewObject()); - // get the Text values const std::vector& annoText = viewAnno->Text.getValues(); + + //build HTML/CSS formating around Text lines std::stringstream ss; + ss << "\n\n\n\n\n

"; for(std::vector::const_iterator it = annoText.begin(); it != annoText.end(); it++) { if (it == annoText.begin()) { ss << *it; } else { - ss << "\n" << *it ; + ss << "
" << *it ; } } - - QFont font; - font.setFamily(QString::fromUtf8(viewAnno->Font.getValue())); - font.setPointSizeF(viewAnno->TextSize.getValue()); //scene units (mm), not points - m_textItem->setFont(font); - - App::Color c = viewAnno->TextColor.getValue(); - m_textItem->setDefaultTextColor(c.asQColor()); + ss << "

\n\n "; prepareGeometryChange(); + m_textItem->setTextWidth(viewAnno->MaxWidth.getValue()); QString qs = QString::fromUtf8(ss.str().c_str()); - m_textItem->setPlainText(qs); - m_textItem->adjustSize(); + m_textItem->setHtml(qs); m_textItem->setPos(0.,0.); }