Print

Print


Inspectors are allocated dynamically.  They're not created until you have hit an object in a field (double-clicked on it).  So domAgentView shouldn't get called until after you have actually *clicked* on an agent.  Why wouldn't the agent have its information determined by then?

If instead you're trying to dynamically change the name list, then you're going to have to build a custom inspector with a custom drop-down.  That's more work of course.

Sean

> On Jan 22, 2019, at 1:37 PM, John Filleau <[log in to unmask]> wrote:
> 
> That doesn't quite work either, since foragerNames is always null whenever domAgentView() is called. I have a work around, so this isn't too much of a sticking point. I just thought a drop down list of agent names would be nice to have.
> 
> I'll put the documentation under my pillow tonight and see if I can figure it out (maybe I'll try reading it a little more as well).
> 
> Thanks all,
> John
> 
> -----Original Message-----
> From: MASON Multiagent Simulation Toolkit [mailto:[log in to unmask]] On Behalf Of Sean Luke
> Sent: Tuesday, January 22, 2019 1:26 PM
> To: [log in to unmask]
> Subject: Re: Custom Inspector with Domain of Agent Names
> 
>> On Jan 21, 2019, at 5:21 PM, John Filleau <[log in to unmask]> wrote:
>> 
>> How do I create a custom inspector drop down text widget with a domain of agent name strings?
>> 
>> I’m following the hexabug example program, where a drop-down menu is created to switch between rectangular or hexagonal display values, and trying to modify this to give a drop down list of agent names. I create an array in the main SimState child class of strings, and populate it in the start() method at the same time as I make the agents. Then, in the GUIState() child’s getInspector() method, I make a custom inspector with dom, get, and set methods. For the dom method, I return the String[] from my SimState child. However, this function is only called BEFORE SimState.start() is called.
>> 
>> Is there a way to create a drop down list inspector based on a String array that doesn’t exist until I hit the start button? Is there a method I can call somewhere in the GUIState after I start the simulation and my String[] foragerNames is populated?
> 
> Why not just say
> 
> public class AgentView {
>                int forager = 0;
>                public Object domAgentView() { if (((SocialFlowMonitoring)state).foragerNames == null) return new String[] {"Blah"}; else return ((SocialFlowMonitoring)state).foragerNames; }
>                public String nameAgentView() { return "Agent View"; }
>                public String desAgentView() { return "Shows the current view of the selected agent."; }
>                public int getAgentView() { if (((SocialFlowMonitoring)state).foragerNames == null) return 0; else return forager; }
>                public void setAgentView(int val) { if (((SocialFlowMonitoring)state).foragerNames != null) forager = val;
>                }
>    }
> 
> 
> Sean