Hi Edward -
Thanks for the response. Unfortunately, I couldn't figure out how to get
a reference to a TableauFrame anywhere in XMLIcon, so I couldn't call
getConfiguration() (like your example in
ptolemy.domains.tm.kernel.SchedulePlotter).
I finally stumbled blindly upon the following solution, which uses the
existing (and life-saving) static Configuration.findEffigy() method, but
which works *only* if called from the getBackgroundFigure() or getIcon()
methods of XMLIcon. It does *not* work if called from the constructor -
maybe because the icon hasn't yet been added to the hierarchy by that
point...? Anyway, here it is for posterity, in case anyone else ever
needs it, or in case I forget how I did it :-)
///////// code called from XMLIcon's /////////
///////// getBackgroundFigure() or getIcon() methods /////////
Nameable container = this.getContainerOrContainerToBe();
if (container == null || !(container instanceof NamedObj)) {
return null;
}
NamedObj topLevelNamedObj = ((NamedObj)container).toplevel();
Effigy effigy = Configuration.findEffigy(topLevelNamedObj);
if (effigy == null) {
return null;
}
NamedObj effigyTopLevel = effigy.toplevel();
if (! (effigyTopLevel instanceof Configuration)) {
return null;
}
return (Configuration)(effigyTopLevel);
//////////////
--
---------------------------------------------
Matthew Brooke, Ph.D.
Marine Sciences Research Building, Room #3407
University of California
Santa Barbara, CA 93106-6150
ph: (805) 893-7108 fx: 805-893-8062
[EMAIL PROTECTED]
---------------------------------------------
Edward A. Lee wrote:
No, this won't do it... This will only yield a configuration
if the object is contained in a library rather than a model.
In fact, that it is difficult to get to the configuration is
a consequence of the deliberate decision that we made some time
ago that Ptolemy II models can run without Vergil. This means
that the model should have no chain of references to anything
in the UI, because if it does, then to load the model into
a JVM, you have to load the UI classes.
There are workarounds for this, but they are tricky.
I did a quick search, and found an example in
ptolemy.domains.tm.kernel.SchedulePlotter. Look
for the invocation therein of getConfiguration().
I'm sure there are other examples in the tree, but
I don't have time right now to look for them...
Edward
At 01:10 PM 11/18/2005 -0800, Christopher Brooks wrote:
Hi Matthew,
Edward knows this one, but I'll take a guess.
Trying going up the containment hierarchy until
you get to an object that is a Configuration.
moml/SharedParameter.java has code like:
/** Return the top level of the containment hierarchy, unless
* one of the containers is an instance of EntityLibrary,
* in which case, return null.
* @return The top level, or null if this is within a library.
*/
public NamedObj getRoot() {
NamedObj result = this;
while (result.getContainer() != null) {
result = (NamedObj) result.getContainer();
// FIXME: this means that ptolemy.moml depends on
// ptolemy.actor.gui. We could either do instanceof
// or else create ptolemy.kernel.ConfigurationBase
// and have Configuration extend it.
if (result instanceof Configuration) {
// If the results is a Configuration, then go no higher.
// If we do go higher, then we end up expanding the actor
// library tree which take a long time and fails if
// not all the actors are present. For example, not
// everyone will have Matlab or quicktime.
return null;
}
}
return result;
}
This might do it, though I think the object would need to have been
created from within the GUI.
Edward would know for sure.
_Christopher
--------
Hi all:
I'm working on the Kepler project (www.kepler-project.org), and am
having trouble getting at the configuration object from other
parts of
the application. Is there an "standard" ptii way to do this, without
explicitly passing references?
I'm interested in reading settings from the configuration.xml
file, but
it seems like I can get a reference only from a TableauFrame or
from the
MoMLApplication/VergilApplication classes. If I don't have a
reference
to any of those classes, how do I get the config?
One workaround would be to read the config myself each time, by
creating
my own MoMLParser, but this seems unnecessarily expensive, and
still has
the problem that the parser needs the URL for the config file, which
also doesn't seem to be available globally.
Any help from anyone would be greatly appreciated
Thanks!
Matthew
--
---------------------------------------------
Matthew Brooke, Ph.D.
Marine Sciences Research Building, Room #3407
University of California
Santa Barbara, CA 93106-6150
ph: (805) 893-7108 fx: 805-893-8062
[EMAIL PROTECTED]
---------------------------------------------
---------------------------------------------------------------------------
-
Posted to the ptolemy-hackers mailing list. Please send
administrative
mail for this list to:
[EMAIL PROTECTED]
--------
----------------------------------------------------------------------------
Posted to the ptolemy-hackers mailing list. Please send administrative
mail for this list to: [EMAIL PROTECTED]
------------
Edward A. Lee
Professor, Chair of the EE Division, Associate Chair of EECS
231 Cory Hall, UC Berkeley, Berkeley, CA 94720
phone: 510-642-0253 or 510-642-0455, fax: 510-642-2845
[EMAIL PROTECTED], http://ptolemy.eecs.berkeley.edu/~eal
----------------------------------------------------------------------------
Posted to the ptolemy-hackers mailing list. Please send administrative
mail for this list to: [EMAIL PROTECTED]
----------------------------------------------------------------------------
Posted to the ptolemy-hackers mailing list. Please send administrative
mail for this list to: [EMAIL PROTECTED]