1 26 27 package org.nightlabs.editor2d.viewer.action; 28 29 import java.util.Collection ; 30 import java.util.HashMap ; 31 import java.util.Iterator ; 32 import java.util.Map ; 33 34 import org.eclipse.jface.util.Assert; 35 import org.eclipse.swt.SWT; 36 import org.eclipse.swt.events.DisposeEvent; 37 import org.eclipse.swt.events.DisposeListener; 38 import org.eclipse.swt.events.FocusEvent; 39 import org.eclipse.swt.events.FocusListener; 40 import org.eclipse.swt.events.SelectionEvent; 41 import org.eclipse.swt.events.SelectionListener; 42 import org.eclipse.swt.layout.GridData; 43 import org.eclipse.swt.layout.GridLayout; 44 import org.eclipse.swt.widgets.Button; 45 import org.eclipse.swt.widgets.Composite; 46 import org.eclipse.swt.widgets.Control; 47 import org.eclipse.swt.widgets.Menu; 48 import org.eclipse.swt.widgets.ToolBar; 49 import org.eclipse.swt.widgets.ToolItem; 50 import org.eclipse.ui.IPartListener; 51 import org.eclipse.ui.IWorkbenchPage; 52 import org.eclipse.ui.IWorkbenchPart; 53 import org.nightlabs.base.action.XContributionItem; 54 import org.nightlabs.base.composite.XComposite; 55 import org.nightlabs.base.composite.XComposite.LayoutMode; 56 import org.nightlabs.base.custom.ColorCombo; 57 import org.nightlabs.editor2d.render.RenderModeDescriptor; 58 import org.nightlabs.editor2d.render.RenderModeListener; 59 import org.nightlabs.editor2d.render.RenderModeManager; 60 import org.nightlabs.editor2d.render.Renderer; 61 import org.nightlabs.editor2d.render.ShapeRenderer; 62 import org.nightlabs.editor2d.render.StringRenderer; 63 import org.nightlabs.editor2d.viewer.ViewerPlugin; 64 65 public class RenderModeContributionItem 66 extends XContributionItem 67 { 68 public static final String ID = RenderModeContributionItem.class.getName(); 69 protected String initString = "RenderMode TEST"; 70 71 public RenderModeContributionItem(IWorkbenchPage page) 72 { 73 super(ID); 74 this.page = page; 75 this.page.addPartListener(partListener); 76 } 77 78 public RenderModeContributionItem(RenderModeManager renderModeMan) 79 { 80 super(ID); 81 setRenderModeMan(renderModeMan); 82 } 83 84 protected IPartListener partListener = new IPartListener() 85 { 86 public void partActivated(IWorkbenchPart part) 87 { 88 Object adapter = part.getAdapter(RenderModeManager.class); 89 if (adapter != null && adapter instanceof RenderModeManager) { 90 setRenderModeMan((RenderModeManager)adapter); 91 } 92 } 93 public void partOpened(IWorkbenchPart part) { 94 95 } 96 public void partDeactivated(IWorkbenchPart part) { 97 98 } 99 public void partClosed(IWorkbenchPart part) { 100 101 } 102 public void partBroughtToTop(IWorkbenchPart part) { 103 104 } 105 }; 106 107 protected Button showString; 108 protected Button showFillColor; 109 110 protected ColorCombo combo; 111 protected ToolItem toolitem; 112 protected IWorkbenchPage page; 113 114 protected Map entry2Index = new HashMap (); 115 protected Map index2RenderMode = new HashMap (); 116 117 protected void refresh(boolean repopulateCombo) 118 { 119 if (combo == null || combo.isDisposed()) 120 return; 121 122 if (renderModeMan == null) { 123 combo.setEnabled(false); 124 showString.setEnabled(false); 125 showFillColor.setEnabled(false); 126 } 127 128 if (renderModeMan != null) 129 { 130 checkRenderers(getCurrentRenderers()); 131 132 if (repopulateCombo) 133 { 134 combo.remove(0); 135 populateMaps(renderModeMan); 136 int counter = 0; 137 for (Iterator it = string2RenderMode.keySet().iterator(); it.hasNext(); ) 138 { 139 String entry = (String ) it.next(); 140 combo.add(null, entry, counter); 141 entry2Index.put(entry, new Integer (counter)); 142 index2RenderMode.put(new Integer (counter), new Integer (getRenderMode(entry))); 143 counter++; 144 } 145 } 146 int currentRenderMode = renderModeMan.getCurrentRenderMode(); 147 String entry = getEntry(currentRenderMode); 148 combo.select(getIndex(entry)); 149 combo.setEnabled(true); 150 } 151 } 152 153 158 protected int computeWidth(Control control) 159 { 160 int width = control.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x; 161 return width; 162 } 163 164 185 192 protected Control createControl(Composite parent) 193 { 194 Composite comp = new XComposite(parent, SWT.NONE); 196 comp.setLayout(new GridLayout(3, false)); 197 198 combo = new ColorCombo(comp, SWT.DROP_DOWN | SWT.BORDER); 199 combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 200 combo.addSelectionListener(comboSelectionListener); 201 combo.addFocusListener(comboFocusListener); 202 combo.addDisposeListener(comboDisposeListener); 203 204 combo.add(null, initString, 0); 206 207 showString = new Button(comp, SWT.CHECK); 208 showString.setText(ViewerPlugin.getResourceString("contribution.renderMode.showString.text")); 209 showString.setToolTipText(ViewerPlugin.getResourceString("contribution.renderMode.showString.tooltip")); 210 showString.addSelectionListener(showStringSelectionListener); 211 showString.addDisposeListener(showStringDisposeListener); 212 213 showFillColor = new Button(comp, SWT.CHECK); 214 showFillColor.setText(ViewerPlugin.getResourceString("contribution.renderMode.showFillColor.text")); 215 showFillColor.setToolTipText(ViewerPlugin.getResourceString("contribution.renderMode.showFillColor.tooltip")); 216 showFillColor.addSelectionListener(showShapeSelectionListener); 217 showFillColor.addDisposeListener(showFillColorDisposeListener); 218 219 toolitem.setWidth(computeWidth(comp)); 220 refresh(true); 221 222 return comp; 223 } 224 225 protected RenderModeManager renderModeMan; 226 public RenderModeManager getRenderModeMan() { 227 return renderModeMan; 228 } 229 public void setRenderModeMan(RenderModeManager rm) 230 { 231 if (renderModeMan == rm) 232 return; 233 if (renderModeMan != null) 234 renderModeMan.removeRenderModeListener(renderModeListener); 235 236 renderModeMan = rm; 237 refresh(true); 238 239 if (renderModeMan != null) 240 renderModeMan.addRenderModeListener(renderModeListener); 241 } 242 243 254 public void fill(ToolBar parent, int index) 255 { 256 toolitem = new ToolItem(parent, SWT.SEPARATOR, index); 257 Control control = createControl(parent); 258 toolitem.setControl(control); 259 } 260 261 269 public final void fill(Composite parent) { 270 createControl(parent); 271 } 272 273 280 public final void fill(Menu parent, int index) { 281 Assert.isTrue(false, "Can't add a control to a menu"); } 283 284 287 public void dispose() 288 { 289 if (partListener != null && page != null) 290 page.removePartListener(partListener); 291 292 if (renderModeMan != null) { 293 renderModeMan.removeRenderModeListener(renderModeListener); 294 renderModeMan = null; 295 } 296 if (combo != null) { 297 combo = null; 298 } 299 partListener = null; 300 } 301 302 protected Map string2RenderMode = new HashMap (); 303 protected Map renderMode2String = new HashMap (); 304 305 protected void populateMaps(RenderModeManager rmm) 306 { 307 for (Iterator it = rmm.getRenderModes().iterator(); it.hasNext(); ) 308 { 309 int renderMode = ((Integer ) it.next()).intValue(); 310 RenderModeDescriptor desc = rmm.getRenderModeDescriptor(renderMode); 311 String s = null; 312 if (desc != null) { 313 s = desc.getLocalizedText(); 314 } else { 315 s = "RenderMode "+renderMode; 316 } 317 string2RenderMode.put(s, new Integer (renderMode)); 318 renderMode2String.put(new Integer (renderMode), s); 320 } 321 } 322 323 protected int getRenderMode(String entry) 324 { 325 Integer i = (Integer ) string2RenderMode.get(entry); 326 if (i != null) 327 return i.intValue(); 328 else 329 return 0; 330 } 331 332 protected String getEntry(int renderMode) { 333 return (String ) renderMode2String.get(new Integer (renderMode)); 334 } 335 336 protected int getIndex(String entry) 337 { 338 Integer i = (Integer ) entry2Index.get(entry); 339 if (i != null) 340 return i.intValue(); 341 else 342 return 0; 343 } 344 345 protected int getRenderMode(int index) 346 { 347 Integer i = (Integer )index2RenderMode.get(new Integer (index)); 348 if (i != null) 349 return i.intValue(); 350 else 351 return 1; 352 } 353 354 379 protected Collection <Renderer> currentRenderers = null; 380 protected Collection <Renderer> getCurrentRenderers() { 381 return currentRenderers; 382 } 383 384 protected RenderModeListener renderModeListener = new RenderModeListener() 385 { 386 public void renderModeChanges(int renderMode) { 387 refresh(false); 388 currentRenderers = renderModeMan.getRenderers(renderMode); 389 } 390 }; 391 392 protected SelectionListener comboSelectionListener = new SelectionListener() 393 { 394 public void widgetDefaultSelected(SelectionEvent e) { 395 widgetSelected(e); 396 } 397 public void widgetSelected(SelectionEvent e) 398 { 399 int index = combo.getSelectionIndex(); 400 int renderMode = getRenderMode(index); 401 renderModeMan.setCurrentRenderMode(renderMode); 402 } 403 }; 404 405 protected FocusListener comboFocusListener = new FocusListener() 406 { 407 public void focusLost(FocusEvent e) { 408 refresh(false); 409 } 410 public void focusGained(FocusEvent e) { 411 } 413 }; 414 415 protected DisposeListener comboDisposeListener = new DisposeListener() 416 { 417 public void widgetDisposed(DisposeEvent e) 418 { 419 combo.removeSelectionListener(comboSelectionListener); 420 combo.removeFocusListener(comboFocusListener); 421 } 422 }; 423 424 protected DisposeListener showStringDisposeListener = new DisposeListener() 425 { 426 public void widgetDisposed(DisposeEvent e) { 427 showString.removeSelectionListener(showStringSelectionListener); 428 } 429 }; 430 431 protected DisposeListener showFillColorDisposeListener = new DisposeListener() 432 { 433 public void widgetDisposed(DisposeEvent e) { 434 showFillColor.removeSelectionListener(showShapeSelectionListener); 435 } 436 }; 437 438 protected SelectionListener showStringSelectionListener = new SelectionListener() 439 { 440 public void widgetDefaultSelected(SelectionEvent e) { 441 widgetSelected(e); 442 } 443 public void widgetSelected(SelectionEvent e) { 444 Button b = (Button) e.getSource(); 445 boolean selection = b.getSelection(); 446 setStringRenderer(getCurrentRenderers(), selection); 447 } 448 }; 449 450 protected SelectionListener showShapeSelectionListener = new SelectionListener() 451 { 452 public void widgetDefaultSelected(SelectionEvent e) { 453 widgetSelected(e); 454 } 455 public void widgetSelected(SelectionEvent e) { 456 Button b = (Button) e.getSource(); 457 boolean selection = b.getSelection(); 458 setShapeRenderer(getCurrentRenderers(), selection); 459 } 460 }; 461 462 protected void setStringRenderer(Collection <Renderer> renderer, boolean showString) 463 { 464 if (renderer != null) 465 { 466 for (Iterator <Renderer> it = renderer.iterator(); it.hasNext(); ) { 467 Renderer r = it.next(); 468 if (r instanceof StringRenderer) { 469 StringRenderer stringRenderer = (StringRenderer) r; 470 stringRenderer.setShowString(showString); 471 } 472 } 473 updateViewer(); 474 } 475 } 476 477 protected void setShapeRenderer(Collection <Renderer> renderer, boolean showFillColor) 478 { 479 if (renderer != null) 480 { 481 for (Iterator <Renderer> it = renderer.iterator(); it.hasNext(); ) { 482 Renderer r = it.next(); 483 if (r instanceof ShapeRenderer) { 484 ShapeRenderer shapeRenderer = (ShapeRenderer) r; 485 shapeRenderer.setShowFillColor(showFillColor); 486 } 487 } 488 updateViewer(); 489 } 490 } 491 492 protected void checkRenderers(Collection <Renderer> renderer) 493 { 494 if (renderer != null) 495 { 496 boolean stringRendererContained = false; 497 boolean shapeRendererContained = false; 498 boolean showStringActive = true; 499 boolean showFillColorActive = true; 500 for (Iterator <Renderer> it = renderer.iterator(); it.hasNext(); ) { 501 Renderer r = it.next(); 502 if (r instanceof ShapeRenderer) { 503 ShapeRenderer shapeRenderer = (ShapeRenderer) r; 504 showFillColorActive = shapeRenderer.isShowFillColor(); 505 shapeRendererContained = true; 506 } 507 if (r instanceof StringRenderer) { 508 StringRenderer stringRenderer = (StringRenderer) r; 509 showStringActive = stringRenderer.isShowString(); 510 stringRendererContained = true; 511 } 512 } 513 showFillColor.setEnabled(shapeRendererContained); 514 showString.setEnabled(stringRendererContained); 515 516 showFillColor.removeSelectionListener(showShapeSelectionListener); 518 showString.removeSelectionListener(showStringSelectionListener); 519 520 showFillColor.setSelection(showFillColorActive); 521 showString.setSelection(showStringActive); 522 523 showFillColor.addSelectionListener(showShapeSelectionListener); 524 showString.addSelectionListener(showStringSelectionListener); 525 } 526 } 527 528 protected void updateViewer() 529 { 530 renderModeMan.setCurrentRenderMode(renderModeMan.getCurrentRenderMode()); 531 } 532 } 533 | Popular Tags |