1. 26 Feb, 2017 1 commit
  2. 25 Feb, 2017 1 commit
  3. 24 Feb, 2017 1 commit
  4. 23 Feb, 2017 1 commit
  5. 20 Feb, 2017 2 commits
  6. 18 Feb, 2017 1 commit
  7. 17 Feb, 2017 4 commits
  8. 09 Jan, 2017 1 commit
  9. 09 Dec, 2016 1 commit
  10. 04 Nov, 2016 2 commits
  11. 06 Sep, 2016 1 commit
  12. 30 Aug, 2016 1 commit
  13. 18 Sep, 2015 1 commit
  14. 14 Sep, 2015 1 commit
  15. 29 Jun, 2015 2 commits
  16. 27 Jun, 2015 2 commits
  17. 09 Apr, 2015 1 commit
  18. 16 Mar, 2015 1 commit
  19. 12 Mar, 2015 1 commit
  20. 07 Mar, 2015 1 commit
  21. 27 Oct, 2014 1 commit
  22. 09 Sep, 2014 1 commit
    • Oliver Kellogg's avatar
      Address http://bugs.kde.org/show_bug.cgi?id=338797#c7, · d98c3db9
      Oliver Kellogg authored
      static_cast<UMLClassifier*>(m_umlObject) in ClassifierWidget::classifier()
      may be invalid:
      
      umbrello/widgets/classifierwidget.cpp
      - In function classifier(), replace static_cast by dynamic_cast.
      - In the entire class implementation, ensure return value from classifier()
        is non NULL before dereferencing.
      
      Since I could not reproduce the crash, I leave this bug REOPENED until the
      fix is verified.
      
      CCBUG: 338797
      FIXED-IN: 4.14.1
      d98c3db9
  23. 05 Sep, 2014 1 commit
    • Oliver Kellogg's avatar
      Address http://bugs.kde.org/show_bug.cgi?id=338797#c7, · 9a9f89f8
      Oliver Kellogg authored
      static_cast<UMLClassifier*>(m_umlObject) in ClassifierWidget::classifier()
      may be invalid:
      
      umbrello/widgets/classifierwidget.cpp
      - In function classifier(), replace static_cast by dynamic_cast.
      - In the entire class implementation, ensure return value from classifier()
        is non NULL before dereferencing.
      
      Since I could not reproduce the crash, I leave this bug REOPENED until the
      fix is verified.
      
      CCBUG: 338797
      9a9f89f8
  24. 02 Sep, 2014 1 commit
  25. 29 Aug, 2014 1 commit
    • Ralf Habacker's avatar
      Automate required namespace/package user interaction on c++ import. · 1de0459d
      Ralf Habacker authored
      If the type of an imported uml object could not be determined the import
      creates an uml class object and flags the stereotype to be "class-or-package".
      Such uml objects are displayed in the tree view by a dedicated icon.
      
      If the real type of the related uml object is determined later as a class,
      the flag is removed and the uml object is usable as a generic class.
      
      If the real object is a namespace, the flag is removed and the uml object
      is set to a package type and could be used as regular created package.
      This is possible because the initial created object of type UMLClassifier
      is derived from UMLPackage. In the latter case ClassifierWidget paints
      the object as Package.
      
      The tree view and classifier widget context menu has been extended to
      provide functions to convert a "class or package" uml object to a class
      or package.
      
      Because the "class or package" state is flagged in the stereotype, saving
      and loading of an umbrello project containing "class or package"
      flagged uml objects is completly transparent.
      
      CCBUG:336012
      1de0459d
  26. 22 Aug, 2014 1 commit
  27. 18 Aug, 2014 1 commit
    • Ralf Habacker's avatar
      Automate required namespace/package user interaction on c++ import. · 801d607a
      Ralf Habacker authored
      If the type of an imported uml object could not be determined the import
      creates an uml class object and flags the stereotype to be "class-or-package".
      Such uml objects are displayed in the tree view by a dedicated icon.
      
      If the real type of the related uml object is determined later as a class,
      the flag is removed and the uml object is usable as a generic class.
      
      If the real object is a namespace, the flag is removed and the uml object
      is set to a package type and could be used as regular created package.
      This is possible because the initial created object of type UMLClassifier
      is derived from UMLPackage. In the latter case ClassifierWidget paints
      the object as Package.
      
      The tree view and classifier widget context menu has been extended to
      provide functions to convert a "class or package" uml object to a class
      or package.
      
      Because the "class or package" state is flagged in the stereotype, saving
      and loading of an umbrello project containing "class or package"
      flagged uml objects is completly transparent.
      
      CCBUG:336012
      801d607a
  28. 10 Aug, 2014 1 commit
    • Oliver Kellogg's avatar
      (In reply to Ralf Habacker from comment #9) · 3360998e
      Oliver Kellogg authored
      > Comment on attachment 83576 [details]
      > Similar example for instantiated template class
      >
      > Here using correct widget shape for line intersecting would solve the issue.
      
      Here is an implementation for corrected widget shape of template classes.
      However, apparently Widget_Utils::closestPoints() still has a bug related to
      anchoring in the NorthWest, West, and SouthWest regions; I'll look into that
      next.
      
      umbrello/widgets/umlwidget.{h,cpp}
      - At function calculateSize() add optional bool argument `withExtensions'
        defaulting to true.
      - At functions calculateSize(), minimumSize(), and getFontMetrics(), add
        `const' qualifier to enable use in overriding QGraphicsItem::shape().
      - In function init() add allocation of the m_pFontMetrics array elements.
        Reason: Ad hoc allocation of m_pFontMetrics element is removed from
        getFontMetrics() in order to make that method `const'.
      - In function forceUpdateFontMetrics() for-loops let loop variable count
        backwards so that m_font ends up initialized to FT_NORMAL (index 0.)
      
      umbrello/widgets/classifierwidget.{h,cpp}
      - UMLWidget overriding function calculateSize() assumes minimumSize() body.
        If `withExtensions' arg is true then size is calculated to include
        template box; else size does not include template box.
      - Function minimumSize() now simply calls calculateSize() using default
        withExtensions argument.
      - Declare following functions `const':
        calculateTemplatesBoxSize(), calculateAsCircleSize(), minimumSize(),
        displayedMembers(), displayedAttributes(), displayedOperations().
        This is required due to their usage in overriding QGraphicsItem::shape().
      - In function paint() rename m_bodyOffsetY to bodyOffsetY.
        Reason: This is a local variable not a class member.
      - In function shape(), if calculateTemplatesBoxSize() returns non-zero then
        add the templates box rectangle to the path, and displace the main
        rectangle by a postive Y offset of templatesBoxSize.height() minus MARGIN.
      
      umbrello/widgets/notewidget.{h,cpp}
      - Adjust calculateSize() override to changed signature in UMLWidget.
      
      umbrello/widgets/activitywidget.{h,cpp}
      umbrello/widgets/actorwidget.{h,cpp}
      umbrello/widgets/artifactwidget.{h,cpp}
      umbrello/widgets/categorywidget.{h,cpp}
      umbrello/widgets/combinedfragmentwidget.{h,cpp}
      umbrello/widgets/componentwidget.{h,cpp}
      umbrello/widgets/datatypewidget.{h,cpp}
      umbrello/widgets/entitywidget.{h,cpp}
      umbrello/widgets/enumwidget.{h,cpp}
      umbrello/widgets/floatingtextwidget.{h,cpp}
      umbrello/widgets/forkjoinwidget.{h,cpp}
      umbrello/widgets/nodewidget.{h,cpp}
      umbrello/widgets/notewidget.{h,cpp}
      umbrello/widgets/usecasewidget.{h,cpp}
      umbrello/widgets/objectnodewidget.{h,cpp}
      umbrello/widgets/objectwidget.{h,cpp}
      umbrello/widgets/packagewidget.{h,cpp}
      umbrello/widgets/preconditionwidget.{h,cpp}
      umbrello/widgets/regionwidget.{h,cpp}
      umbrello/widgets/signalwidget.{h,cpp}
      umbrello/widgets/statewidget.{h,cpp}
      umbrello/widgets/umlwidget.{h,cpp}
      - Adjust minimumSize() override to changed signature in UMLWidget.
      
      umbrello/widgets/associationwidget.cpp
      - In function calculateEndingPoints(), apply
          QPolygonF::translated(pWidgetA->pos()) on polyA
        and apply
          QPolygonF::translated(pWidgetB->pos()) on polyB
        to properly handle non child widgets (i.e. with absolute pos().)
      - In function updateRegionLineCount(), for calculating `pt' employ
        Widget_Utils::closestPoints() following the pattern used in
        calculateEndingPoints().
      
      umbrello/widgets/widget_utils.cpp
      - New function middle() returns the middle value of two axis values.
        The function handles not only relative but also absolute coordinates.
      - In function closestPoints() employ function middle() in the
        result.setLine() arguments for regions North, South, West, and East.
      
      CCBUG:128351
      3360998e
  29. 06 Aug, 2014 2 commits
  30. 04 Aug, 2014 2 commits
    • Oliver Kellogg's avatar
      (In reply to Ralf Habacker from comment #8) · b32458c3
      Oliver Kellogg authored
      > Created attachment 88069 [details]
      > Hiding problems with UML2 interface ball an socket notation
      >
      > There are additional hiding problems in this diagram
      
      Thanks for the test case.  Here is my attempt at fixing; please confirm.
      
      umbrello/widgets/widget_utils.{h,cpp} function closestPoints()
      - New function determines the approximate closest points of two polygons.
      
      umbrello/widgets/associationwidget.cpp function calculateEndingPoints()
      - In case (size < 2), pass QPainterPath::toFillPolygon() converted shape()
        of pWidgetA and pWidgetB into call of Widget_Utils::closestPoints().
        Pass components p1() and p2() of returned QLine into call of
        m_associationLine->setEndPoints().
      
      umbrello/widgets/classifierwidget.{h,cpp}
      - New member m_pInterfaceName of type FloatingTextWidget holds the name in
        case of interface drawn as circle.
      - Reimplement UMLWidget functions onWidget() and widgetWithID() to include
        consideration of m_pInterfaceName.
      
      umbrello/widgets/classifierwidget.cpp
      - In function shape() case
          (classifier()->isInterface() && visualProperty(DrawAsCircle)),
        add only the ellipse of the current rect() to path.
      - In function drawAsCircle(),
        - In case (m_Assocs.size() > 1) fix Y value of requireArc;
        - Remove painting of name underneath circle, this is now delegated to
          the FloatingTextWidget m_pInterfaceName.
      - In function calculateAsCircleSize() remove coding of name underneath
        circle, this is now delegated to the FloatingTextWidget m_pInterfaceName.
      - In function setDrawAsCircle(),
        - In case drawAsCircle add allocation of m_pInterfaceName and set up its
          geometry;
        - Choose same center point between circular and rectangular display so
          that on toggling argument the widget changes shape but not position.
      - In function changeToClass() ensure that visualProperty(DrawAsCircle) is
        false.
      - In functions {loadFrom,saveTo}XMI add loading/saving of m_pInterfaceName
        as child <floatingtext>.
      
      umbrello/widgets/floatingtextwidget.cpp function onWidget()
      - Consider case pw->baseType() == wt_Interface with
        ClassifierWidget::getDrawAsCircle() returning true in on-widget test.
      - Clearly separate handling of parent-widget relative (isWidgetChild=true)
        from absolute (isWidgetChild=false) coordinates.
      
      umbrello/version.h
      - Increment XMI_FILE_VERSION due to added <floatingtext> in
        <interfacewidget drawascircle="1">
      
      CCBUG:128351
      b32458c3
    • Oliver Kellogg's avatar
      umbrello/widgets/classifierwidget.cpp function setVisualPropertyCmd() · 36f758fc
      Oliver Kellogg authored
      - Fix missing undo-ability of action "Draw As Circle" by adding code for
        case (property == DrawAsCircle).
      36f758fc
  31. 27 Jul, 2014 1 commit
    • Oliver Kellogg's avatar
      Support socket (half circle) notation for interface required by component · 44157ba7
      Oliver Kellogg authored
      or port on a component diagram:
      
      umbrello/widgets/classifierwidget.h
      - New constant SOCKET_INCREMENT defines the amount by which the socket
        arc is larger than the interface ball.
      
      umbrello/widgets/classifierwidget.cpp
      - In function shape() add SOCKET_INCREMENT to cirleSize if m_Assocs.size()
        is larger than 1.  The logic is that there can be only one interface
        provider, i.e. all further associations are related to interface clients.
        This could perhaps be refined, e.g. to support absence of provider.
      - In function drawAsCircle() implement drawing of socket for required
        interface using QPainter::drawArc(). Choose orientation of arc depending
        on the position of the port/component in relation to the interface:
        - If port/component is left of  interface then draw arc at left
        - If port/component is right of interface then draw arc at right
        - If port/component is above    interface then draw arc at top
        - If port/component is below    interface then draw arc at bottom
        - If port/component is close to a diagonal of interface then draw arc
          oriented to the respective diagonal.
      
      CCBUG:115269
      44157ba7