|  | 
|  | 
|  | 
| 
| Re: [databinding] TreeViewer [message #331067 is a reply to message #331042] | Fri, 22 August 2008 15:12   |  | 
| Eclipse User  |  |  |  |  | Originally posted by: krzysztof.daniel.gmail.com 
 Thank you, thank you, thank you!
 I was able to achieve the goal but I had to modify slightly your code,
 basically because I had to support different objects (attached below).
 
 The only sad thing is that you have access only to ViewerLabel and you
 cannot use styled labels... any idea? should I open RFE?
 
 Regards,
 Chris
 
 
 public class ServersLabelProvider extends ListeningLabelProvider {
 
 public ServersLabelProvider(IObservableSet itemsThatNeedLabels) {
 super(itemsThatNeedLabels);
 }
 
 public String prepareText(Object element) {
 if (element instanceof ServerManager) {
 return "Mail accounts";
 }
 if (element instanceof Server) {
 return ((Server) element).getName();
 }
 if (element instanceof Folder) {
 return ((Folder) element).getName() + " "
 + ((Folder) element).getMessages().size();
 }
 return null;
 }
 
 Adapter adapter;
 
 @Override
 protected void addListenerTo(Object next) {
 if (adapter == null) {
 if (next instanceof Folder) {
 adapter = new Adapter() {
 
 @Override
 public Notifier getTarget() {
 return null;
 }
 
 @Override
 public boolean isAdapterForType(Object type) {
 return true;
 }
 
 @Override
 public void notifyChanged(final Notification notification) {
 Display.getDefault().syncExec(new Runnable(){
 
 @Override
 public void run() {
 fireChangeEvent(Collections.singleton(notification
 .getNotifier()));
 }
 
 });
 
 }
 
 @Override
 public void setTarget(Notifier newTarget) {
 
 }
 
 };
 ((Folder) next).eAdapters().add(adapter);
 }
 }
 }
 
 @Override
 protected void removeListenerFrom(Object next) {
 if (adapter != null && next instanceof Folder) {
 ((Folder) next).eAdapters().remove(adapter);
 }
 }
 
 public void updateLabel(ViewerLabel label, Object element) {
 label.setText(prepareText(element));
 }
 
 }
 
 
 On Thu, 2008-08-21 at 15:18 -0700, Matthew Hall wrote:
 > You need two things: the Folder object must fire some sort of change
 > event, and you need an observable capable of receiving those event
 > dispatches.
 >
 > For your situation, I recommend extending ListeningLabelProvider.  You
 > will have to implement the addListenerTo() and removeListenerFrom()
 > methods, and you will likely want to reimplement the updateLabel()
 > method as well.
 >
 > class FolderLabelProvider extends ListeningLabelProvider {
 >    public FolderLabelProvider(IObservableSet knownElements) {
 >      super(knownElements);
 >    }
 >
 >    // Must lazy init because addListenerTo is called by superconstructor
 >    PropertyChangeListener listener;
 >
 >    protected void addListenerTo(Object o) {
 >      if (listener == null) {
 >        listener = new PropertyChangeListener() {
 >          public void propertyChanged(PropertyChangeEvent e) {
 >            // If properties may be changed in another thread, you may
 >            // have to wrap this method call in a Realm.asyncExec()
 >            fireChangeEvent(Collections.singleton(e.getSource()));
 >          }
 >        }
 >      }
 >      ((Folder)o).addPropertyChangeListener(listener);
 >    }
 >
 >    protected void removeListenerFrom(Object o) {
 >      if (listener != null) {
 >        ((Folder)o).removePropertyChangeListener(listener);
 >      }
 >    }
 >
 >    public void updateLabel(ViewerLabel label, Object element) {
 >      Folder folder = (Folder) element;
 >      String text = folder.getLabel();
 >      if (folder.getUnreadItemCount() > 0)
 >        text = text + " ("+folder.getUnreadItemCount()+")";
 >      label.setText(text);
 >    }
 > }
 >
 > Matthew
 >
 > > Hi there,
 > >
 > > I am trying to learn databinding and I have run into following problem:
 > > I have a tree displayed in a TreeViewer (with databinding):
 > >
 > > Account
 > >  +- Folder
 > >
 > > Now, Folder has messages, and I would like to show only the number of
 > > messages in the Folder:
 > > Account
 > >  +- Folder (4)
 > >
 > > Then I populate messages in the background job and the Folder label is
 > > *not* updated.
 > >
 > > I use the code found somewhere in examples
 > > (TreeStructureAdvisor/IObservableFactory).
 > >
 > > How can I update the label of Folder when its observered message list
 > > changes?
 > >
 > > TIA
 > > Chris
 > >
 |  |  |  | 
| 
| Re: Trouble with lots of data , Swt Tables and DataBinding [message #331078 is a reply to message #331021] | Sat, 23 August 2008 07:23  |  | 
| Eclipse User  |  |  |  |  | could you provide a test-case and add a snippet for us to reproduce the faulty behaviour? Then please file a bug and attach me to it tom.schindl
 (at)bestsolution.at.
 
 Tom
 
 Nelson Fernando schrieb:
 > Hi to everyone , IŽm having some trouble when using databing into SWT tables
 > .
 >
 > The binding works , but I have a large amount of data ( 600 rows , each with
 > 25 colums )  , the table takes 1 hole minute to get ready  for presentation
 > .
 > Then I started looking for a solution and end up up the virtual table , but
 > it didnŽt change a thing it still took a lot of time to load the table .
 > But when I removed the databinding of the table and inserted the itens by
 > hand ( one by one ) using tableItens , it was faster than a split second .
 >
 > Is this a know  issue in table databinding ? Is there another solution ? Did
 > I post this in the right forum ?
 >
 > thanks in advance
 >
 >
 >
 >
 
 
 --
 B e s t S o l u t i o n . at
 ------------------------------------------------------------ --------
 Tom Schindl                                          JFace-Committer
 ------------------------------------------------------------ --------
 |  |  |  | 
Powered by 
FUDForum. Page generated in 0.04084 seconds