[Uml-devel] Re: karbon/umbrello
Dirk Schönberger
dirk.schoenberger at sz-online.de
Tue May 13 05:21:01 UTC 2003
Luis De la Parra Blum schreibt:
> hi all,
>
> On Monday 12 May 2003 15:39, Andrew Sutton wrote:
> > okay... i'm starting to get a better picture of our proposed general
> > purpose vector drawing lib. we have 3 parts to it:
> > - the painter
> > - the canvas/document
> > - the path core
>
> I've bee trying to follow this thread.
> some days ago I started a new diagramming code for Umbrello 1 (current
> version) in the hope of solving some problems which would be very difficult
> to fix in the current code.
I started a hopefully shared KCanvas class hierarchy in my kpainter project
in KDE CVS.
> I took a (quick) look at Karbon, and I really liked the idea behind it, but
> could not use it as a base because of the KoPoint Vs. QPoint conflicts, not
QPoint has only fixed point / integer coordinates
KoPoint and KoRect provide floating point coordinates
> so easy integration/dependencies as QCanvas, etc, so I think it'd be great to
> move those for now KOffice specifics which are not really KO speciffic to
> some kdelib.
This was my idea, to. Either that or put it into a separate library which
is only dependent on qt and the render libs like libart.
>
> The other reason I couldnt / didnt want to take Karbon's code as base, is that
> it seems to draw everything as a collection of paths ( vectors ). That is, a
> box is nothing more that four paths put together in some kind of container...
> this of course offers the most flexibility but for umbrello I thought it'd be
> easier to have more specialized objects that just paths, so instead of having
> a bunch of lines and texts for a UML::Class, I wanted a UMLClassShape which
> is specialized on drawing that kind of objects
>
Agreed. The pure path approach is fine for a general purpose graphics
editor, but for application specific graphic objects the way is
sub-optimal.
> So, to make it short, for those two reasons I could not take Karbon's code as
> base, and I wrote everything from scratch, but the code is somewhat inspired
> in Karbon's ( Tools, Shapes, Views )
>
Do you have code available?
Could you please check if it would be possible to work with my code in
kdenonbeta/painter/kcanvas (KDE CVS) instead?
> I've put two overview-diagrams (as png's) at Umbrello's site, in case someone
> is intereseted ( of course you can also have the code. it's under
> umbrello/diagram and umbrello/plugins/umlwidgets
>
> the code is (more or less) well documented, but here a small description so
> that you understand the diagrams:
>
> Diagram : this is the "document" -- not really a document, but it contains /
> manages the objects. in the case of Umbrello it's a part of our Document.
Check. Its KCanvasModel in my class hierarchy
> Note that this is not a visible object, you look at the diagram through the
> DiagramView (one or more views can be attaches to a Diagram)
>
> DiagramView: Renders the Diagram and allows user interaction. It has a ToolBar
> with a bunch of "Tools".
My KCanvasView is just a QScrollView which manages input events and
document rendering.
> When it receives events (key, click) it passes the
> events to the tools, and they decide what to do with them. The view knows
> pretty much nothing about the tools or the shapes it's rendering. The tools
I currently have a separate controller class (KCanvasController), which can
convert view events to documentation specific "high level" events.
I don't really like the current Karbon approach, because this approach
doesn't really allow the use of the KDE xmlgui framework, which allow
already for dynamic configuration of the GUI (menu, toolbar).
I would like to use this xmlgui/kaction framework whenever possible.
You get much better KDE integration by using existing frameworks instead of
implementing your own.
> are loade via ToolBar::addTool( string ), so the tools available for a
> diagram could even be loadef from a confing file, and the only shape it knows
> it's DiagramElement..
Check. A similar class at my class hierarchy is KCanvasElement.
> all other interaction is handled by the tools
>
> DiagramElement: Base class for all elements in a diagram ( I guess this would
> be your VObject) - offers basic functionality like move, setSelected and
> "executeDefaultAction"
>
I haven't worked in this direction, my KCanvasElement is only able to
render itself. I am, however fine, to use your definitions into
KCanvasElement.
> Path: A collection of lines ( or a multi-segment line, if you will )
>
- is not really part of the framework, but rather some helper class
- should consist of segments, where each segment may either be a line
segment or a bezier curve segment. If you need other special segment types,
line horizontal lines or arcs, you could check the KVectorPath class in
kdenonbeta/kpainter/kpainter.
> DiagramWidget: A DiagramElement to which an association can attach itself.
> AssociatonWidget: A Path that can attach itself to two DiagramWidgets.
Application specific widgets. Should be e.g. part of Umbrello itself.
> When
> they move, the Association adjusts its ending points or completly move along
> with them
>
> ** the real shapes are implemented in plugins, right now I have
> plugin umlwidgets
> (replace the word Widget with Shape if you prefere so, UMLWidget->UMLShape )
How about UMLCanvasElement?
>
> UMLWidget: a DiagramWidget which represents an UML::Element in a diagram. When
> it detects that the UML::Element has changed, foreces a recalculation/refresh
> of the widget
This is real interesting. I know that Canvas like class libraries need back
communication (i.e. from the model back to the view). However, I haven't
seen until now a real implementtation / interface for that. I would be
interested to look at your impl.
>
> UMLClassWidget: draws a UMLClass on a diagram
> UMLAssociaitonWidget: like an associationwidget, but it represents a
> UMLAssociation ( the normal AssociationWidget has no UML-meaing, it's only a
> visual thing)
> (the same for other UML::Elements)
>
> plugin generic shapes /tools
> Shapes like Notes, Boxes, TextLines, etc.
>
Do you already render the elements, if so, how?
>
> ***********
> All shapes are created by the corresponding Tool, or they can be created by
> the diagram through a WidgetFactory if they are droped into it ( for example,
> if you want to create a new UML::Class, you use the ClassTool -> when you
> click it creates a Class, and then a widget to represent it. But if you drag
> an already exisitng UMLClass into the diagrm, the diagram calls
> WidgetFactory::createWidget( object ), then the WidgetFactory quries all
> loaded plugins to see if one of them can handle that kind of object, and if
> yes, the plugin creates the widget and returns it.
>
Would it be possible to change this sequence so that the standard KAction
framework can be used, instead of a custom framework?
Regards
Dirk
More information about the umbrello-devel
mailing list