1 20 21 package org.apache.directory.ldapstudio.browser.common.widgets.entryeditor; 22 23 24 import org.apache.directory.ldapstudio.browser.common.BrowserCommonActivator; 25 import org.apache.directory.ldapstudio.browser.common.actions.SelectionUtils; 26 import org.apache.directory.ldapstudio.browser.core.events.BulkModificationEvent; 27 import org.apache.directory.ldapstudio.browser.core.events.EmptyValueAddedEvent; 28 import org.apache.directory.ldapstudio.browser.core.events.EmptyValueDeletedEvent; 29 import org.apache.directory.ldapstudio.browser.core.events.EntryModificationEvent; 30 import org.apache.directory.ldapstudio.browser.core.events.EntryUpdateListener; 31 import org.apache.directory.ldapstudio.browser.core.events.EventRegistry; 32 import org.apache.directory.ldapstudio.browser.core.events.ValueAddedEvent; 33 import org.apache.directory.ldapstudio.browser.core.events.ValueDeletedEvent; 34 import org.apache.directory.ldapstudio.browser.core.events.ValueModifiedEvent; 35 import org.apache.directory.ldapstudio.browser.core.events.ValueRenamedEvent; 36 import org.apache.directory.ldapstudio.browser.core.model.IAttribute; 37 import org.apache.directory.ldapstudio.browser.core.model.IValue; 38 import org.eclipse.jface.viewers.StructuredSelection; 39 import org.eclipse.jface.viewers.TreeViewer; 40 import org.eclipse.swt.events.MouseAdapter; 41 import org.eclipse.swt.events.MouseEvent; 42 import org.eclipse.swt.events.MouseListener; 43 import org.eclipse.swt.events.SelectionAdapter; 44 import org.eclipse.swt.events.SelectionEvent; 45 import org.eclipse.swt.events.SelectionListener; 46 47 48 54 public class EntryEditorWidgetUniversalListener implements EntryUpdateListener 55 { 56 57 58 protected TreeViewer viewer; 59 60 61 protected OpenDefaultEditorAction startEditAction; 62 63 64 protected SelectionListener viewerSelectionListener = new SelectionAdapter() 65 { 66 69 public void widgetSelected( SelectionEvent e ) 70 { 71 } 72 73 74 79 public void widgetDefaultSelected( SelectionEvent e ) 80 { 81 if ( startEditAction.isEnabled() ) 82 startEditAction.run(); 83 } 84 }; 85 86 87 protected MouseListener viewerMouseListener = new MouseAdapter() 88 { 89 94 public void mouseDoubleClick( MouseEvent e ) 95 { 96 if ( startEditAction.isEnabled() ) 97 { 98 startEditAction.run(); 99 } 100 101 IAttribute[] attributes = SelectionUtils.getAttributes( viewer.getSelection() ); 102 IValue[] values = SelectionUtils.getValues( viewer.getSelection() ); 103 if ( attributes.length == 1 && values.length == 0 ) 104 { 105 if ( viewer.getExpandedState( attributes[0] ) ) 106 { 107 viewer.collapseToLevel( attributes[0], 1 ); 108 } 109 else 110 { 111 viewer.expandToLevel( attributes[0], 1 ); 112 } 113 } 114 } 115 116 119 public void mouseDown( MouseEvent e ) 120 { 121 } 122 123 126 public void mouseUp( MouseEvent e ) 127 { 128 } 129 }; 130 131 132 138 public EntryEditorWidgetUniversalListener( TreeViewer treeViewer, OpenDefaultEditorAction startEditAction ) 139 { 140 this.startEditAction = startEditAction; 141 this.viewer = treeViewer; 142 143 viewer.getTree().addSelectionListener( viewerSelectionListener ); 145 viewer.getTree().addMouseListener( viewerMouseListener ); 146 EventRegistry.addEntryUpdateListener( this, BrowserCommonActivator.getDefault().getEventRunner() ); 147 } 148 149 150 153 public void dispose() 154 { 155 if ( viewer != null ) 156 { 157 EventRegistry.removeEntryUpdateListener( this ); 158 159 startEditAction = null; 160 viewer = null; 161 } 162 } 163 164 165 171 public void entryUpdated( EntryModificationEvent event ) 172 { 173 174 if ( viewer == null || viewer.getTree() == null || viewer.getTree().isDisposed() || viewer.getInput() == null 175 || ( event.getModifiedEntry() != viewer.getInput() && !( event instanceof BulkModificationEvent ) ) ) 176 { 177 return; 178 } 179 180 if ( viewer.isCellEditorActive() ) 182 { 183 viewer.cancelEditing(); 184 } 185 186 viewer.refresh(); 188 189 if ( event instanceof ValueAddedEvent ) 191 { 192 ValueAddedEvent vaEvent = ( ValueAddedEvent ) event; 194 viewer.setSelection( new StructuredSelection( vaEvent.getAddedValue() ), true ); 195 viewer.refresh(); 196 } 197 else if ( event instanceof ValueDeletedEvent ) 198 { 199 ValueDeletedEvent vdEvent = ( ValueDeletedEvent ) event; 201 if ( viewer.getSelection().isEmpty() && vdEvent.getDeletedValue().getAttribute().getValueSize() > 0 ) 202 { 203 viewer.setSelection( 204 new StructuredSelection( vdEvent.getDeletedValue().getAttribute().getValues()[0] ), true ); 205 } 206 } 207 else if ( event instanceof EmptyValueAddedEvent ) 208 { 209 EmptyValueAddedEvent evaEvent = ( EmptyValueAddedEvent ) event; 211 viewer.setSelection( new StructuredSelection( evaEvent.getAddedValue() ), true ); 212 if ( startEditAction.isEnabled() ) 213 { 214 startEditAction.run(); 215 } 216 } 217 else if ( event instanceof EmptyValueDeletedEvent ) 218 { 219 EmptyValueDeletedEvent evdEvent = ( EmptyValueDeletedEvent ) event; 221 if ( viewer.getSelection().isEmpty() && evdEvent.getDeletedValue().getAttribute().getValueSize() > 0 ) 222 { 223 viewer.setSelection( 224 new StructuredSelection( evdEvent.getDeletedValue().getAttribute().getValues()[0] ), true ); 225 } 226 } 227 else if ( event instanceof ValueModifiedEvent ) 228 { 229 ValueModifiedEvent vmEvent = ( ValueModifiedEvent ) event; 231 viewer.setSelection( new StructuredSelection( vmEvent.getNewValue() ), true ); 232 } 233 else if ( event instanceof ValueRenamedEvent ) 234 { 235 ValueRenamedEvent vrEvent = ( ValueRenamedEvent ) event; 237 viewer.setSelection( new StructuredSelection( vrEvent.getNewValue() ), true ); 238 } 239 } 240 241 } 242 | Popular Tags |