Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Rich Client Platform (RCP) » how to update a view in real-time?
how to update a view in real-time? [message #435652] Sun, 21 August 2005 02:37 Go to next message
Eclipse UserFriend
Originally posted by: Nickwtf.charter.net

lets say I have a class called "CurrentData" that keeps track of some data
that keeps changing, and it has a method like getData() which just returns
the current data

now if I had a view and i wanted to constantly update a table in the view
with the current data, how might i accomplish that?

Ive read how to update a view based on an action that occurs in another view
or from the menumanager, but i want this view to keep updating without being
triggered by any user action.

thanks for any help you can offer
Nick
Re: how to update a view in real-time? [message #435653 is a reply to message #435652] Sun, 21 August 2005 06:12 Go to previous messageGo to next message
Glenn Marintes is currently offline Glenn MarintesFriend
Messages: 23
Registered: July 2009
Junior Member
Each view in RCP have a unique id. Use that id to findView(..) or
showView(..) the view that contains the table dat you want to update.
Those two methods return an IViewPart which is basically the instance
of your view. You can safely typecast it to the actual class type
of your view and then call a method in your view ie.. setData(...)

Nick DelRossi wrote:
> lets say I have a class called "CurrentData" that keeps track of some data
> that keeps changing, and it has a method like getData() which just returns
> the current data
>
> now if I had a view and i wanted to constantly update a table in the view
> with the current data, how might i accomplish that?
>
> Ive read how to update a view based on an action that occurs in another view
> or from the menumanager, but i want this view to keep updating without being
> triggered by any user action.
>
> thanks for any help you can offer
> Nick
>
>
Re: how to update a view in real-time? [message #435709 is a reply to message #435652] Mon, 22 August 2005 11:50 Go to previous messageGo to next message
Ricky is currently offline RickyFriend
Messages: 204
Registered: July 2009
Senior Member
> now if I had a view and i wanted to constantly update a table in the view
> with the current data, how might i accomplish that?

Your CurrentData class could generate change events and your view
registers as a listener to this events directly at CurrentData. To
decouple things a bit you could create the class Mediator which listens to
change events from CurrentData and triggers changes in the view. This way
your "business logic" is encapsulated in the mediator and your view can
remain unaware of the model data.

To deflect myself from urgent work here my thoughts as untested code:

// Your Model
public class CurrentData
private List changeListeners;
public void addChangeListener(ChangeListener changeListener){
this.changeListeners.add(changeListener);
}
// Gets called whenever something interessting changed.
private void fireChangeEvent(){
EventObject event = new EventObject(this);
//loop changeListeners and call handleEvent(event).
}


public interface ChangeListener
public void handleEvent(EventObject event);


public class MyView implements ChangeListener
handleEvent(EventObject event){
// Something changed in the model, go get it.
CurrentData currentData = (CurrentData) event.getSource();
// get the data out of the model and stuff it into your controls.
}

To make the view unaware of the data source let the view have a proper API
to access the table from the outside and have a man-in-the-middle

class Mediator implements ChangeListener{
handleEvent(EventObject event){
CurrentData currentData = (CurrentData) event.getSource();
IViewPart myView =
MyPlugin.getDefault().getWorkbench().getActiveWorkbenchWindo w().getActivePage().findView( "id.of.myview");
// setData should be more general than getData or this Mediator
indirection is useless.
myView.setData(currentData.getData());

If you need a hard real time system you can optimize a bit by having only
one listener in CurrentData so you do not need to loop. Have only one
intance of EventObject created in the constructor and be sure that nobody
manipulates it. Caching the view is also a good idea and have fine
granular events to change only a bit at a time.

I hope I havent misunderstood you problem complety and this is of any use
to you.

Ricky
Re: how to update a view in real-time? [message #435746 is a reply to message #435653] Mon, 22 August 2005 18:46 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: Nickwtf.charter.net

thanks. I used the eventLoopIdle method in the WorkSpace advisor class to
call the setData method in my view and it worked well.

what i was missing was:

MyView myView = (MyView)
MyPlugin.getDefault().getWorkbench().getActiveWorkbenchWindo w().getActivePage().findView( "MyView");

my problem before was that i was just instantiating myView by just doing

MyView myView = new MyView();

this obviously didint work, but its working now with the new statement.
thanks again


"Glenn Marintes" <gmarintes@laseritesystems.com> wrote in message
news:de9645$f26$1@news.eclipse.org...
> Each view in RCP have a unique id. Use that id to findView(..) or
> showView(..) the view that contains the table dat you want to update.
> Those two methods return an IViewPart which is basically the instance
> of your view. You can safely typecast it to the actual class type
> of your view and then call a method in your view ie.. setData(...)
>
> Nick DelRossi wrote:
>> lets say I have a class called "CurrentData" that keeps track of some
>> data that keeps changing, and it has a method like getData() which just
>> returns the current data
>>
>> now if I had a view and i wanted to constantly update a table in the view
>> with the current data, how might i accomplish that?
>>
>> Ive read how to update a view based on an action that occurs in another
>> view or from the menumanager, but i want this view to keep updating
>> without being triggered by any user action.
>>
>> thanks for any help you can offer
>> Nick
Re: how to update a view in real-time? [message #435747 is a reply to message #435709] Mon, 22 August 2005 18:52 Go to previous message
Eclipse UserFriend
Originally posted by: Nickwtf.charter.net

This was a huge help. From what you and Glenn suggested, i was able to
figure it out. Thanks


"Ricky" <ImmortalRick@gmx.de> wrote in message
news:op.svwq6lqaaudqvk@localhost.localdomain...
>> now if I had a view and i wanted to constantly update a table in the view
>> with the current data, how might i accomplish that?
>
> Your CurrentData class could generate change events and your view
> registers as a listener to this events directly at CurrentData. To
> decouple things a bit you could create the class Mediator which listens to
> change events from CurrentData and triggers changes in the view. This way
> your "business logic" is encapsulated in the mediator and your view can
> remain unaware of the model data.
>
> To deflect myself from urgent work here my thoughts as untested code:
>
> // Your Model
> public class CurrentData
> private List changeListeners;
> public void addChangeListener(ChangeListener changeListener){
> this.changeListeners.add(changeListener);
> }
> // Gets called whenever something interessting changed.
> private void fireChangeEvent(){
> EventObject event = new EventObject(this);
> //loop changeListeners and call handleEvent(event).
> }
>
>
> public interface ChangeListener
> public void handleEvent(EventObject event);
>
>
> public class MyView implements ChangeListener
> handleEvent(EventObject event){
> // Something changed in the model, go get it.
> CurrentData currentData = (CurrentData) event.getSource();
> // get the data out of the model and stuff it into your controls.
> }
>
> To make the view unaware of the data source let the view have a proper API
> to access the table from the outside and have a man-in-the-middle
>
> class Mediator implements ChangeListener{
> handleEvent(EventObject event){
> CurrentData currentData = (CurrentData) event.getSource();
> IViewPart myView =
> MyPlugin.getDefault().getWorkbench().getActiveWorkbenchWindo w().getActivePage().findView( "id.of.myview");
> // setData should be more general than getData or this Mediator
> indirection is useless.
> myView.setData(currentData.getData());
>
> If you need a hard real time system you can optimize a bit by having only
> one listener in CurrentData so you do not need to loop. Have only one
> intance of EventObject created in the constructor and be sure that nobody
> manipulates it. Caching the view is also a good idea and have fine
> granular events to change only a bit at a time.
>
> I hope I havent misunderstood you problem complety and this is of any use
> to you.
>
> Ricky
Previous Topic:Feature Export jars some plugins even when I choose NOT to package plugins as individual jar files
Next Topic:HowTo: Editor --> Perspective
Goto Forum:
  


Current Time: Tue Dec 03 00:27:02 GMT 2024

Powered by FUDForum. Page generated in 0.03436 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top