thanks aaron.
i have implemented the remove part now i am reworking the add part.
does getOTObject(newStep) create a new object if not one exist?
OTObject otStep = controllerService.getOTObject(oldStep);
otStep keeps coming back null, is this because i need to do:
OTPasStep otStep = (OTPasStep) objService.createObject(OTPasStep.class);
this step could be any step evidence,etc....
then add it like:
otActivity.getStepList().add(otStep);
but the new step we are adding will always be a genric pasStep and not
the specific one that we want to add?
-Tony
On Mar 25, 2008, at 11:53 AM, Aaron Unger wrote:
> Yes, it should ideally do it for all step adds as well as deletions.
> Then you only need to have the
> ((OTrunkStep)newStep).setControllerService(controllerService);
> inside of the if (newStep instanceof OTrunkStep) block.
>
> so:
> Object newStep = evt.getNewValue();
>
> if (newStep instanceof OTrunkStep) {
>
> ((OTrunkStep)newStep).setControllerService(controllerService);
> }
> OTObject otStep =
> controllerService.getOTObject(newStep);
> otActivity.getStepList().add(otStep);
>
> and for deletions:
> Object oldStep = evt.getOldValue();
>
> OTObject otStep =
> controllerService.getOTObject(oldStep);
> otActivity.getStepList().remove(otStep);
>
> -- Aaron
>
> Anthony Perritano wrote:
>>
>>
>> right now i only have a property change listener do something when
>> otrunk step is added.
>>
>> Object newStep = evt.getNewValue();
>>
>> if (newStep instanceof OTrunkStep) {
>>
>> ((OTrunkStep)newStep).setControllerService(controllerService);
>> OTObject otStep =
>> controllerService.getOTObject(newStep);
>> otActivity.getStepList().add(otStep);
>> }
>>
>> rereading the email, i am a little confused, does this need to
>> happen for all step adds? all activity adds?
>>
>> similarly do we need to do this when an activity or step is removed?
>>
>>
>> -Tony
>>
>>
>>
>> On Mar 20, 2008, at 12:39 PM, Aaron Unger wrote:
>>> It should probably go inside registerRealObject() and it should do
>>> something like:
>>>
>>> PasStep newStep = ... get the new step...
>>> newStep.setControllerService(controllerService);
>>> OTObject otStep = controllerService.getOTObject(newStep);
>>> otPasActivity.getStepList().add(otStep);
>>>
>>> A similar thing should happen in PasProjectController as well:
>>>
>>> PasActivity newActivity = ... get the new activity...
>>> OTObject otActivity = controllerService.getOTObject(newActivity);
>>> otPasProject.getActivityList().add(otActivity);
>>>
>>> Ideally in each controller, you'd also set up listeners that (be
>>> careful of endless update loops):
>>> 1) listen to the OTObject for changes and update the real object
>>> appropriately
>>> 2) listen to the real object for changes and update the OTObject
>>> appropriately
>>>
>>> That way the OTrunk world and the Real Object world stay in sync
>>> in real-time, and theoretically negate needed to sync objects in
>>> saveRealObject().
>>>
>>> For an example, check out:
>>> https://svn.concord.org/svn/projects/trunk/common/java/simulations/biologica/src/org/concord/biologica/state/OTOrganismController.java
>>>
>>> -- Aaron
>>>
>>> Anthony Perritano wrote:
>>>>
>>>> ok. i added property change listeners on the PasProject and
>>>> PasActivity in their respect controllers. it listens for an add.
>>>> what i am not clear on is:
>>>>
>>>>>>>> And when it gets that event it can "save" the new step, by
>>>>>>>> calling
>>>>>>>> getOTObject with the new step.
>>>>
>>>> heres what i have in the loadReadObject method of the
>>>> OTPasActvitiyCOntroller
>>>>
>>>> activity.addPropertyChangeListener(PasActivity.STEPS, new
>>>> PropertyChangeListener() {
>>>>
>>>> public void propertyChange(PropertyChangeEvent evt) {
>>>> System.out.println("Step added calling from
>>>> OTPasActivityCOntroller");
>>>>
>>>> }
>>>> });
>>>>
>>>> -Tony
>>>>
>>>>
>>>>
>>>> On Mar 20, 2008, at 10:46 AM, Aaron Unger wrote:
>>>>> No, I think you can leave all of the PAS stuff the way it is.
>>>>> All you'll need to do is add the listeners to the
>>>>> PasProjectController and PasActivityController to handle
>>>>> creating/adding the otrunk objects for a new PasActivity and
>>>>> PasStep.
>>>>>
>>>>> I made changes to the OTrunkStep so that calling setType() will
>>>>> just store the Class and mark that it needs to be set up, and
>>>>> then when getComponent() is called it will then do all of its
>>>>> creation work.
>>>>>
>>>>> -- Aaron
>>>>>
>>>>> Anthony Perritano wrote:
>>>>>>
>>>>>> Aaron thats correct. the steps get added to the activity before
>>>>>> getComponent is called. getComponent is called only when a user
>>>>>> clicks on a bean in the tree. the authoring tool just gets what
>>>>>> ever getComponent gives and dumps it in the right pane.
>>>>>>
>>>>>> so do i need to do a call to getComponent after i create the
>>>>>> newInstance to fire things up?
>>>>>> -Tony
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mar 20, 2008, at 6:14 AM, Aaron Unger wrote:
>>>>>>> Scott, you were spot-on with the context, and you brought up a
>>>>>>> angle of it I hadn't thought about. I think what you described
>>>>>>> will work. Tony can correct me, but it looks to me like the
>>>>>>> steps are being added to the activity prior to getComponent
>>>>>>> being called. Then it's just a matter of making sure some sort
>>>>>>> of event gets passed on which the controller can catch.
>>>>>>>
>>>>>>> Thanks!
>>>>>>> -- Aaron
>>>>>>>
>>>>>>> Scott Cytacki wrote:
>>>>>>>>
>>>>>>>> I might have the context wrong, but I think I know what the
>>>>>>>> problem is.
>>>>>>>>
>>>>>>>> At runtime if the OTrunkStep is running inside of
>>>>>>>> OTrunkCurnit the
>>>>>>>> OTrunkStep gets its controllerService set by
>>>>>>>> its own controller OTGenericOTrunkStepController.
>>>>>>>>
>>>>>>>> At author time I'd guess you are creating the OTrunkStep
>>>>>>>> instance
>>>>>>>> directly. Which means the code in
>>>>>>>> OTGenericOTrunkStepController
>>>>>>>> will not get run.
>>>>>>>>
>>>>>>>> One way to work around that is to make sure to add the
>>>>>>>> OTrunkStep to its
>>>>>>>> PasActivity before calling getComponent.
>>>>>>>> Then the OTPasActivityController can be listening to an add
>>>>>>>> event on
>>>>>>>> PasActivity (you might need to add that event).
>>>>>>>> And when it gets that event it can "save" the new step, by
>>>>>>>> calling
>>>>>>>> getOTObject with the new step.
>>>>>>>>
>>>>>>>> This approach has a few benefits:
>>>>>>>> - it should fix the problem above
>>>>>>>> - it brings the controllers more inline with our existing
>>>>>>>> controllers
>>>>>>>> which save their OTObjects using events from the real objects.
>>>>>>>>
>>>>>>>> ---- futurist thinking ----
>>>>>>>>
>>>>>>>> Using events to update the OTObjects is good because it means
>>>>>>>> the
>>>>>>>> OTObjects are updated in realtime instead of at the end.
>>>>>>>> Most of the
>>>>>>>> benifits from this are still vaporware but hopefully they will
>>>>>>>> materialize some day soon:
>>>>>>>> - the OTrunk logging system can give a log of when an author
>>>>>>>> things not
>>>>>>>> just at end when they saved.
>>>>>>>> - if we get a better representation of the tree of OTObjects,
>>>>>>>> that can
>>>>>>>> be a used as an alternative way of visualizing the project.
>>>>>>>> - if we have searching system then an author can do fulltext
>>>>>>>> searching.
>>>>>>>> - if we integrate Jackrabbit as an OTDatabase, then the
>>>>>>>> jackrabbit data
>>>>>>>> for the activity would be updated immediately. Which would
>>>>>>>> make it
>>>>>>>> possible for collaborative editing like subethaedit
>>>>>>>> - if we integrate an "edit system" like emf has, then we can
>>>>>>>> add an real
>>>>>>>> "history" and "undo" functionality, which can go backward and
>>>>>>>> forward
>>>>>>>> multiple steps.
>>>>>>>>
>>>>>>>> Many of the things above are not that hard to implement. The
>>>>>>>> one that
>>>>>>>> is probably the most difficult is the "edit system", because
>>>>>>>> it will
>>>>>>>> probably require changes to much of the current controllers
>>>>>>>> and views.
>>>>>>>>
>>>>>>>> ------------------
>>>>>>>>
>>>>>>>> Scott
>>>>>>>>
>>>>>>>> Aaron Unger wrote:
>>>>>>>>
>>>>>>>>> Hmm, right. I was afraid the controllerService wouldn't get
>>>>>>>>> initialized. I'll see what I can do to change/work around
>>>>>>>>> that.
>>>>>>>>>
>>>>>>>>> -- Aaron
>>>>>>>>>
>>>>>>>>> Anthony Perritano wrote:
>>>>>>>>>
>>>>>>>>>> The new supportTypes is great, i load it into a quick and
>>>>>>>>>> dirty
>>>>>>>>>> dialog. However, when i try to instantiate a step i get the
>>>>>>>>>> following:
>>>>>>>>>>
>>>>>>>>>> java.lang.NullPointerException
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .telscenter.pas.otrunk.OTrunkStep.setType(OTrunkStep.java:
>>>>>>>>>> 335)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .telscenter
>>>>>>>>>> .pas
>>>>>>>>>> .authortool
>>>>>>>>>> .cards
>>>>>>>>>> .customizer
>>>>>>>>>> .pas.AddStepAction.addEmptyStep(AddStepAction.java:238)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .telscenter
>>>>>>>>>> .pas
>>>>>>>>>> .authortool
>>>>>>>>>> .cards
>>>>>>>>>> .customizer
>>>>>>>>>> .pas.AddStepAction.createNewStep(AddStepAction.java:190)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .telscenter
>>>>>>>>>> .pas.authortool.cards.customizer.pas.AddStepAction
>>>>>>>>>> $2.finish(AddStepAction.java:133)
>>>>>>>>>> at org.netbeans.spi.wizard.WizardPage
>>>>>>>>>> $CWPP.finish(WizardPage.java:996)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .netbeans
>>>>>>>>>> .spi.wizard.SimpleWizardInfo.finish(SimpleWizardInfo.java:
>>>>>>>>>> 145)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .netbeans.spi.wizard.SimpleWizard.finish(SimpleWizard.java:
>>>>>>>>>> 177)
>>>>>>>>>> at org.netbeans.spi.wizard.Wizard.finish(Wizard.java:222)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .netbeans
>>>>>>>>>> .api
>>>>>>>>>> .wizard
>>>>>>>>>> .displayer
>>>>>>>>>> .NavButtonManager
>>>>>>>>>> .processFinishProceed(NavButtonManager.java:453)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .netbeans
>>>>>>>>>> .api
>>>>>>>>>> .wizard
>>>>>>>>>> .displayer
>>>>>>>>>> .NavButtonManager.processFinish(NavButtonManager.java:437)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .netbeans
>>>>>>>>>> .api
>>>>>>>>>> .wizard
>>>>>>>>>> .displayer
>>>>>>>>>> .NavButtonManager.actionPerformed(NavButtonManager.java:258)
>>>>>>>>>> at
>>>>>>>>>> javax
>>>>>>>>>> .swing
>>>>>>>>>> .AbstractButton.fireActionPerformed(AbstractButton.java:1882)
>>>>>>>>>> at
>>>>>>>>>> javax.swing.AbstractButton
>>>>>>>>>> $Handler.actionPerformed(AbstractButton.java:2202)
>>>>>>>>>> at
>>>>>>>>>> javax
>>>>>>>>>> .swing
>>>>>>>>>> .DefaultButtonModel
>>>>>>>>>> .fireActionPerformed(DefaultButtonModel.java:420)
>>>>>>>>>> at
>>>>>>>>>> javax
>>>>>>>>>> .swing
>>>>>>>>>> .DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
>>>>>>>>>> at
>>>>>>>>>> javax
>>>>>>>>>> .swing
>>>>>>>>>> .plaf
>>>>>>>>>> .basic
>>>>>>>>>> .BasicButtonListener.mouseReleased(BasicButtonListener.java:
>>>>>>>>>> 236)
>>>>>>>>>> at java.awt.Component.processMouseEvent(Component.java:5602)
>>>>>>>>>> at javax.swing.JComponent.processMouseEvent(JComponent.java:
>>>>>>>>>> 3135)
>>>>>>>>>> at java.awt.Component.processEvent(Component.java:5367)
>>>>>>>>>> at java.awt.Container.processEvent(Container.java:2010)
>>>>>>>>>> at java.awt.Component.dispatchEventImpl(Component.java:4068)
>>>>>>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2068)
>>>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:3903)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .LightweightDispatcher.retargetMouseEvent(Container.java:
>>>>>>>>>> 4256)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt.LightweightDispatcher.processMouseEvent(Container.java:
>>>>>>>>>> 3936)
>>>>>>>>>> at
>>>>>>>>>> java.awt.LightweightDispatcher.dispatchEvent(Container.java:
>>>>>>>>>> 3866)
>>>>>>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2054)
>>>>>>>>>> at java.awt.Window.dispatchEventImpl(Window.java:1791)
>>>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:3903)
>>>>>>>>>> at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .EventDispatchThread
>>>>>>>>>> .pumpOneEventForHierarchy(EventDispatchThread.java:269)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .EventDispatchThread
>>>>>>>>>> .pumpEventsForHierarchy(EventDispatchThread.java:190)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .EventDispatchThread
>>>>>>>>>> .pumpEventsForHierarchy(EventDispatchThread.java:180)
>>>>>>>>>> at java.awt.Dialog$1.run(Dialog.java:535)
>>>>>>>>>> at java.awt.Dialog$2.run(Dialog.java:563)
>>>>>>>>>> at java.security.AccessController.doPrivileged(Native Method)
>>>>>>>>>> at java.awt.Dialog.show(Dialog.java:561)
>>>>>>>>>> at java.awt.Component.show(Component.java:1302)
>>>>>>>>>> at java.awt.Component.setVisible(Component.java:1255)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .netbeans
>>>>>>>>>> .api
>>>>>>>>>> .wizard
>>>>>>>>>> .displayer
>>>>>>>>>> .WizardDisplayerImpl.showInDialog(WizardDisplayerImpl.java:
>>>>>>>>>> 334)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .netbeans
>>>>>>>>>> .api
>>>>>>>>>> .wizard
>>>>>>>>>> .displayer
>>>>>>>>>> .WizardDisplayerImpl.show(WizardDisplayerImpl.java:250)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .netbeans
>>>>>>>>>> .api.wizard.WizardDisplayer.showWizard(WizardDisplayer.java:
>>>>>>>>>> 107)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .netbeans
>>>>>>>>>> .api.wizard.WizardDisplayer.showWizard(WizardDisplayer.java:
>>>>>>>>>> 135)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .telscenter
>>>>>>>>>> .pas
>>>>>>>>>> .authortool
>>>>>>>>>> .cards
>>>>>>>>>> .customizer
>>>>>>>>>> .pas.AddStepAction.actionPerformed(AddStepAction.java:152)
>>>>>>>>>> at
>>>>>>>>>> javax
>>>>>>>>>> .swing
>>>>>>>>>> .AbstractButton.fireActionPerformed(AbstractButton.java:1882)
>>>>>>>>>> at
>>>>>>>>>> javax.swing.AbstractButton
>>>>>>>>>> $Handler.actionPerformed(AbstractButton.java:2202)
>>>>>>>>>> at
>>>>>>>>>> javax
>>>>>>>>>> .swing
>>>>>>>>>> .DefaultButtonModel
>>>>>>>>>> .fireActionPerformed(DefaultButtonModel.java:420)
>>>>>>>>>> at
>>>>>>>>>> javax
>>>>>>>>>> .swing
>>>>>>>>>> .DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
>>>>>>>>>> at javax.swing.AbstractButton.doClick(AbstractButton.java:
>>>>>>>>>> 334)
>>>>>>>>>> at
>>>>>>>>>> javax
>>>>>>>>>> .swing
>>>>>>>>>> .plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:
>>>>>>>>>> 1051)
>>>>>>>>>> at
>>>>>>>>>> javax.swing.plaf.basic.BasicMenuItemUI
>>>>>>>>>> $Handler.mouseReleased(BasicMenuItemUI.java:1092)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:
>>>>>>>>>> 231)
>>>>>>>>>> at java.awt.Component.processMouseEvent(Component.java:5602)
>>>>>>>>>> at javax.swing.JComponent.processMouseEvent(JComponent.java:
>>>>>>>>>> 3135)
>>>>>>>>>> at java.awt.Component.processEvent(Component.java:5367)
>>>>>>>>>> at java.awt.Container.processEvent(Container.java:2010)
>>>>>>>>>> at java.awt.Component.dispatchEventImpl(Component.java:4068)
>>>>>>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2068)
>>>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:3903)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .LightweightDispatcher.retargetMouseEvent(Container.java:
>>>>>>>>>> 4256)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt.LightweightDispatcher.processMouseEvent(Container.java:
>>>>>>>>>> 3936)
>>>>>>>>>> at
>>>>>>>>>> java.awt.LightweightDispatcher.dispatchEvent(Container.java:
>>>>>>>>>> 3866)
>>>>>>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2054)
>>>>>>>>>> at java.awt.Window.dispatchEventImpl(Window.java:1791)
>>>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:3903)
>>>>>>>>>> at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .EventDispatchThread
>>>>>>>>>> .pumpOneEventForHierarchy(EventDispatchThread.java:269)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .EventDispatchThread
>>>>>>>>>> .pumpEventsForHierarchy(EventDispatchThread.java:190)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
>>>>>>>>>> at
>>>>>>>>>> java
>>>>>>>>>> .awt
>>>>>>>>>> .EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
>>>>>>>>>> at
>>>>>>>>>> java.awt.EventDispatchThread.run(EventDispatchThread.java:
>>>>>>>>>> 110)
>>>>>>>>>> java.lang.NullPointerException
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .concord
>>>>>>>>>> .otrunk
>>>>>>>>>> .view.OTViewerHelper.loadOTDatabase(OTViewerHelper.java:294)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .telscenter
>>>>>>>>>> .pas.otrunk.OTrunkStep.getComponent(OTrunkStep.java:149)
>>>>>>>>>> at
>>>>>>>>>> org.telscenter.pas.otrunk.OTrunkStepBeanInfo
>>>>>>>>>> $
>>>>>>>>>> OTrunkStepQuickEditorFactory
>>>>>>>>>> .getQuickEditor(OTrunkStepBeanInfo.java:56)
>>>>>>>>>> at
>>>>>>>>>> org
>>>>>>>>>> .telscenter
>>>>>>>>>> .pas
>>>>>>>>>> .authortool
>>>>>>>>>> .cards
>>>>>>>>>> .customizer
>>>>>>>>>> .pas
>>>>>>>>>> .PasCustomizerCardX.findQuickEditor(PasCustomizerCardX.java:
>>>>>>>>>> 671)
>>>>>>>>>>
>>>>>>>>>> its coming from:
>>>>>>>>>>
>>>>>>>>>> public void setType(Class type) throws Exception {
>>>>>>>>>> // set the current step type
>>>>>>>>>> // get the OTObject which corresponds to this step
>>>>>>>>>> // set its target to a new object of the type specified
>>>>>>>>>> HERE -> OTGenericOTrunkStep otStep = (OTGenericOTrunkStep)
>>>>>>>>>> controllerService.getOTObject(this);
>>>>>>>>>> OTObject obj =
>>>>>>>>>> otStep.getOTObjectService().createObject(type);
>>>>>>>>>> otStep.setTarget(obj);
>>>>>>>>>> this.setTarget(obj);
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> i have verified that setType is being called before
>>>>>>>>>> getComponent:
>>>>>>>>>>
>>>>>>>>>> public static class OTrunkStepQuickEditorFactory extends
>>>>>>>>>> AbstractQuickEditorFactory {
>>>>>>>>>> public JPanel getQuickEditor(Object bean) {
>>>>>>>>>>
>>>>>>>>>> final OTrunkStep otrunkBean = (OTrunkStep) bean;
>>>>>>>>>> JPanel p = (JPanel)
>>>>>>>>>> otrunkBean.getComponent(true);
>>>>>>>>>>
>>>>>>>>>> return p;
>>>>>>>>>> }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>> -Tony
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Mar 17, 2008, at 1:19 PM, Sam Fentress wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> [EMAIL PROTECTED]
>>>>>>>>>>> <mailto:[EMAIL PROTECTED]> writes:*
>>>>>>>>>>> At the same time, we could achieve an "open ended" step
>>>>>>>>>>> easily by
>>>>>>>>>>> embedding an OTCompoundDoc into the step instead of one of
>>>>>>>>>>> the other
>>>>>>>>>>> explicit OTObjects. The OTCompoundDoc would then have all
>>>>>>>>>>> of the UDL
>>>>>>>>>>> style WYSIWYG authoring, unlimited object insertion, etc.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On that note, I've added an example ot otrunk-examples
>>>>>>>>>>> which is a
>>>>>>>>>>> blank WYSIWYG editing page, with affordances to add almost
>>>>>>>>>>> any type
>>>>>>>>>>> of object that we currently support (with a few
>>>>>>>>>>> excceptions for the
>>>>>>>>>>> moment, such as question objects which I need to take out
>>>>>>>>>>> of the UDL
>>>>>>>>>>> project). You can find the document-edit example at the
>>>>>>>>>>> bottom of
>>>>>>>>>>> page in
>>>>>>>>>>> BasicExamples:http://continuum.concord.org/otrunk/examples/BasicExamples/ot-index.html
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> I left out the ability to switch back-and-forth between
>>>>>>>>>>> author and
>>>>>>>>>>> student views here so as not to confuse an already-long
>>>>>>>>>>> otml file.
>>>>>>>>>>> This could easily be added, however.
>>>>>>>>>>>
>>>>>>>>>>> Sam
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"SAIL-Dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/SAIL-Dev?hl=en
-~----------~----~----~----~------~----~------~--~---