Hi All.
I want to dynamically build a drop-down menu in Seaside based on the instance side methods I have in a class. #MyClass has method categories: "Attributes Links Paragraph....etc" Under Method category Links are methods #testLinkCategory, testLinkExternal, testLink....etc. I have been hunting for over an hour and I see no obvious way to retrieve this info (I have found a way to get all the methods, but not the category that houses them. The code I have in mind has form: *categories := categoriesFor: #MyClass. categories do:[:cat | |methods| methods := methodForClass:#MyClass category: cat. methods do:[:m | "dynamically build my html here" ]]l* Any help much appreciated. thx -- Sent from: http://forum.world.st/Squeak-Beginners-f107673.html _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
Hi Timothy,
On Jan 15, 2020, at 1:26 PM, tty wrote: > Hi All. > > I want to dynamically build a drop-down menu in Seaside based on the > instance side methods I have in a class. Have you looked at the Seaside sample code for the WABrowser? On some Seaside images it will be registered at tools/classbrowser by default. I believe it uses a normal Browser as its model, so that's where to go to find out what's actually going on in the background. > I have been hunting for over an hour and I see no obvious way to retrieve > this info (I have found a way to get all the methods, but not the category > that houses them. > > Any help much appreciated. Have you looked at ClassOrganizer and ClassDescription? best, a Tim _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
Hi Tim,
Thank you for the reply. I was able to get the data by middle clicking on the Browser pane displaying the data and inspecting the model. I then hand tweaked it, so my immediate task is solved. I did look at a ClassOrganizer and ClassDescription but I keep getting nothing for what look like obvious candidates. For example: *WikitextParserFactory allMethodCategoriesIntegratedThrough:WikitextParserFactory WikitextParserFactory whichCategoryIncludesSelector:#testTableCaption *both return nada. -- Sent from: http://forum.world.st/Squeak-Beginners-f107673.html _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
In reply to this post by tty
I just realized that I am trying to get Class side methods.
I have no Instance side methods. Interesting! I am going to change my WikitextParserFactory to a Singleton and move all the methods to Instanced side. bet it will work then. cheers! -- Sent from: http://forum.world.st/Squeak-Beginners-f107673.html _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
In reply to this post by tty
[resent due to attachment limit, sorry for the delay!]
Hi Timothy,
not sure if your question has already been answered, but maybe this approach can help you in general to find answers to problems like these. Let's dive into some reverse engineering tools of Squeak!
First, start a normal System Browser and open the halo on the message category list: Then open its debug menu by clicking the wrench icon and choose "browse action code":
And you get the method which the list is configured to call in order to get its contents:
By selecting #rawMessageCategoryList and pressing <cmd>m, you also get the second screenshot where you can see that your desired method is named #categories. Select #classOrMetaClassOrganizer and press <cmd>m again to find out where the organizer comes
from:
Okay, this is stored as an instance variable, but how is it set? Right-click the message from the list and choose "assignments..." (you can also do this in any class browser, btw). Next, select classOrganizer from the list.
And you will find:
So your script might look like this: MyClass organization categories.
I hope this might help you to answer future questions! And please forgive me if I told you something you already knew :-)
Have a nice time with Squeak!
Best,
Christoph
Von: Beginners <[hidden email]> im Auftrag von tty <[hidden email]>
Gesendet: Mittwoch, 15. Januar 2020 20:26 Uhr An: [hidden email] Betreff: [Newbies] code to retrieve all method categories and methods under a category Hi All.
I want to dynamically build a drop-down menu in Seaside based on the instance side methods I have in a class. #MyClass has method categories: "Attributes Links Paragraph....etc" Under Method category Links are methods #testLinkCategory, testLinkExternal, testLink....etc. I have been hunting for over an hour and I see no obvious way to retrieve this info (I have found a way to get all the methods, but not the category that houses them. The code I have in mind has form: *categories := categoriesFor: #MyClass. categories do:[:cat | |methods| methods := methodForClass:#MyClass category: cat. methods do:[:m | "dynamically build my html here" ]]l* Any help much appreciated. thx -- Sent from: http://forum.world.st/Squeak-Beginners-f107673.html
_______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners
Carpe Squeak!
|
Thank you Christoph.
-- Sent from: http://forum.world.st/Squeak-Beginners-f107673.html _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
In reply to this post by tty
Thanks to all for the pointers.
Here is what I came up with. To get all the categories, remove the "reject:" block > Transcript clear. > (((WikitextParserFactory > allMethodCategoriesIntegratedThrough:WikitextParserFactory) sorted) > reject:[:r | > |oc| > oc := OrderedCollection > with:#accessing > with: #'initialize-release' > with: #parsing > with: #'Templates Bogus'. > oc includes:r]) do:[:c | > > (WikitextParserFactory packageInfo methodsInCategory: c > ofClass:WikitextParserFactory) > do:[:m | > Transcript show: c , ' -> ', m methodSymbol; cr. > ]]. cheers. -- Sent from: http://forum.world.st/Squeak-Beginners-f107673.html _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
Free forum by Nabble | Edit this page |