Page 3 of 9

PostPosted: October 12th, 2006, 12:41 am
by kokkoras
I am coming back to issue 14, regarding the addition of a OnSelectionChange event. The are basically 2 ways to select objects:
1. one object at a time
2. many objects at a time
In both cases we don't care if it is a first selection or a modification to a selection.

My suggestion is the following:
Have the TSG fire an OnSelectionChange event when either of the 2 selection methods is used. Then, let the user deside in the OnSelectionChange event handler if the event was handled. If the user says handled=false (which would be the default behaviour) then fire also the OnObjectSelect event for each individual objects selected/deselected.

It is like the behaviour in the onUpdate event handler of TToolBar, in which if the user says that the event was not handled then the onUpdate event handlers of the individual buttons are fired.

Well, Kambiz, what do you think?

16. Add group support.
I can think of the following way to do this: Create a special class of Graph object, say a GraphGroupNode. This will be like an ordinary graph node (that is, it will have a caption, alignment and layout properties, etc.) but will also include a list of the referents of the objects it includes. At the same time, all nodes should have a property defining the group node this node belongs to (if any). In this way, it will be possible to handle the various objects in diffenet ways according to the operation. For example:
>> during selection, objects belonging to a group are not marked as selected.
>> moving a group should mode its internals as well, an so on.

In another approach, maybe it is better to add this ability to the current GraphNode class and not create a GraphGroupNode. If a GraphNode has an emply list of grouped objects then it is not a group. If it belongs to no other graph node then it is an independent node that does not belong to any group.

In either case, being able to add groups inside a group is desirable. Having said this, I think that the 2nd approach proposed above looks more promising.

I understand though that I am only scratching the surface on this issue. It is definitely not so simple to add group support.

PostPosted: October 12th, 2006, 10:48 am
by Kambiz
I've already implemented (2-3 months ago) grouping and used a new graph object class.

However, I think it's time to write SG from scratch.

PostPosted: October 12th, 2006, 11:01 am
by kokkoras
Kambiz wrote:I've already implemented (2-3 months ago) grouping and used a new graph object class.


Opps! Is it in v2.61 ?


Kambiz wrote:However, I think it's time to write SG from scratch.


:shock: :shock: OK!
What time are you starting at? 8)

PostPosted: October 12th, 2006, 10:29 pm
by Kambiz
1. The update is not released to public domain. :-S

2. When I find a little time for my hobbies. :(

PostPosted: November 24th, 2006, 10:52 pm
by kokkoras
Kambiz wrote:I've already implemented (2-3 months ago) grouping and used a new graph object class.
However, I think it's time to write SG from scratch.


Kambiz, any chance of providing us with the "groups included" version? Is it stable?

PostPosted: November 25th, 2006, 2:22 pm
by Kambiz
It's not stable. :(

Honestly, I've reached to this point that the component needs to re-design.

PostPosted: December 1st, 2006, 8:55 am
by kokkoras
While looking for some ...competitor ;-) I fall upon this:

CodeAccelerate's SweetDrawingEngine
at http://www.codeaccelerate.com/

It's CAD oriented, has some nice features and is missing many more found in TSimpleGraph :roll:

PostPosted: December 1st, 2006, 8:00 pm
by HPW
Thanks for the link!
Indeed interesting but also missing a lot.
First absolut no documentation!
No community!
Missing some basic primitives like line etc.

And the demo compiles only when you have their other commercial component.
But the exe is nice.

PostPosted: December 1st, 2006, 10:23 pm
by kokkoras
You are right. I judged and posted based on the EXE. Latter on I saw the bare code and the lack of documentation... :(

Anyway, it shows it's commercial back-end.

PostPosted: December 2nd, 2006, 10:24 am
by Johnny_Bit
Practically, they suck. If we would gather to write some stuff I bet that we would beat them.

PostPosted: December 2nd, 2006, 1:41 pm
by Kambiz
It has some nice features that SG doesn't have. By the way, for gradient they have used my code (TGradient 2.60). :)

PostPosted: January 20th, 2007, 7:38 am
by HPW
I was asked about the possibility to make the runtime-dialogs 'LinkProp,MarginsProp,NodeProp,Objectprop,DesignProp' able to support multiple languages. I do not want to hardcode different versions.
So whats the best way to do it?
Read a INI-file on FormCreate and set all labels?

Other ideas?

PostPosted: January 20th, 2007, 9:43 am
by Kambiz
HPW wrote:Read a INI-file on FormCreate and set all labels?

I do in this way but instead of INI file I use XML which is more flexible.

PostPosted: January 20th, 2007, 9:48 am
by Johnny_Bit
It's good to use XML, but when I started working in some GPL'ed stuff in C++ I just loved the way it's handled there... Delphi sometimes suck at such cases.

PostPosted: January 21st, 2007, 7:36 am
by HPW
Thanks for the hints. Since I want to keep things simple, I ended with a flat stringlist which get loaded by my plugin from a neobook variable.

Example from object dialog:
Caption=Object Properties
Label1=Label:
Colors= Colors
LabelColFill=Fill:
LabelColLine=Line:
btnChangeFont=Change Font...
LabelOptions=Options:
PublicOptions=Linkable|Selectable|Show Caption
btnOK=OK
btnCancel=Cancel
btnApply=Apply


On FormCreate I use the value-property to get the captions.
(I gave some objects a more speaking name)