And of couirse FsmIconVisitor is not enough, because TreeModel (menu) might need different icons than someone else....
So, perhaps the question boils down to: "How to add meta-description to object from another package without affecting the object's protocol or code?" ---- For example Roassal's RTElement exposes a dictionary to which I can add random stuff, however from my experience that gets messy fast (since I end up just manipulating symbols in structural/procedural code). Peter On Thu, Jun 18, 2015 at 8:37 AM, Peter Uhnák <i.uh...@gmail.com> wrote: > The worry is caused by the fact that I do not want to pollute the > protocol; this is not just about GTInspector, but also about other classes > such as the TreeModel. > > So, imagine following hierarchy; there are some "base" classes and then > unlimited number of packages, each with their own hierarchy. > > > > Now I could either have long switch (if/else/isKindOf:/isMemberOf:) in > TreeModel to specify icon, label, children and so forth for each of those > elements which is a) mess, and b) doesn't actually work because not all > packages might be loaded (this is what I have now, and instead of classes I > use symbols... and it's steaming mess). > Alternatively I could somehow use visitor, which would mean that I would > have visitor for each behavior: ChildrenVisitor, IconVisitor, ...; and then > there would be a method for each object. IconVisitor>>bormStateVisitor: ... > There is already visible name conflict (the visitor would have to add the > package name to the method which would mean special methods also on the > object's side) plus the methods themselves are related to the packages, so > basically I would have to have "FsmIconVisitor", "BormIconVisitor", etc. > Which is NxM visitors (number of behaviors x number of packages)... and > that's a lot of code. At this moment this seems like the "best" way, but to > me it feels like a very bad way to do this. > > Not sure if I made it any clearer though. :) > > Peter > > On Thu, Jun 18, 2015 at 8:12 AM, Tudor Girba <tu...@tudorgirba.com> wrote: > >> Hi Peter, >> >> I am not sure I understand. >> >> Is the worry caused by the fact that when there are multiple gtInspector* >> methods then the API would get polluted? >> >> Cheers, >> Doru >> >> >> >> On Thu, Jun 18, 2015 at 7:35 AM, Peter Uhnák <i.uh...@gmail.com> wrote: >> >>> Also the problem with visitor here is that I would need X number of >>> visitors for each method (GtInspectorVisitor, DisplayBlockVisitor, ...) not >>> to mention that I would need to have the implementation split among >>> multiple packages, so it is effectively NxM visitors. >>> >>> Peter >>> >>> On Thu, Jun 18, 2015 at 7:23 AM, Peter Uhnák <i.uh...@gmail.com> wrote: >>> >>>> Hi, >>>> >>>> I would like to describe some additional behavior for objects when they >>>> are interacting with another objects. >>>> >>>> The prime example is GTInspector; by default to add presentation you >>>> implement a method with "gtInspectorPresentationOrder:". This is fine if >>>> there is just one method like this, but when the object can serve multiple >>>> purposes it can quite mess up the protocol (in my opinion). >>>> >>>> Example of that could be (Spec) TreeModel; there are many methods like >>>> menu:, displayBlock:, childrenBlock: etc. that should be different based on >>>> the particular object. >>>> >>>> However having a method for each of those cases in the observed method >>>> is just a mess. So how could one approach this? >>>> >>>> The first thing that comes to my mind is a visitor. That might possibly >>>> work for code that I've written, but not for spotter/inspector as they work >>>> directly on the target object. >>>> >>>> Thanks, >>>> Peter >>>> >>>> >>> >> >> >> -- >> www.tudorgirba.com >> >> "Every thing has its own flow" >> > >