1 9 10 package org.eclipse.ui.internal.intro.universal; 11 12 import java.io.IOException ; 13 import java.net.URL ; 14 import java.util.ArrayList ; 15 import java.util.Collections ; 16 import java.util.List ; 17 import java.util.Map ; 18 import java.util.Properties ; 19 import java.util.StringTokenizer ; 20 21 import org.eclipse.core.runtime.FileLocator; 22 import org.eclipse.core.runtime.IConfigurationElement; 23 import org.eclipse.core.runtime.IPath; 24 import org.eclipse.core.runtime.IProduct; 25 import org.eclipse.core.runtime.Path; 26 import org.eclipse.core.runtime.Platform; 27 import org.eclipse.core.runtime.Preferences; 28 import org.eclipse.help.internal.util.ProductPreferences; 29 import org.eclipse.help.internal.util.SequenceResolver; 30 import org.eclipse.jface.action.Action; 31 import org.eclipse.ui.internal.intro.impl.model.ExtensionMap; 32 import org.eclipse.ui.internal.intro.universal.contentdetect.ContentDetector; 33 import org.eclipse.ui.internal.intro.universal.util.ImageUtil; 34 import org.eclipse.ui.internal.intro.universal.util.PreferenceArbiter; 35 import org.eclipse.ui.intro.IIntroSite; 36 import org.eclipse.ui.intro.config.IntroConfigurer; 37 import org.eclipse.ui.intro.config.IntroElement; 38 import org.osgi.framework.Bundle; 39 40 46 public class UniversalIntroConfigurer extends IntroConfigurer implements 47 IUniversalIntroConstants { 48 49 private IntroData primaryIntroData; 50 private IntroData[] secondaryIntroData; 51 private SequenceResolver sequenceResolver; 52 53 public UniversalIntroConfigurer() { 54 loadData(); 55 } 56 57 public String getVariable(String variableName) { 58 if (variableName.equals(HIGH_CONTRAST)) { 59 boolean highContrast = ImageUtil.isHighContrast(); 60 if (highContrast) 61 return variableName; 62 else 63 return ""; } 65 IProduct product = Platform.getProduct(); 66 if (product != null) { 67 String value = getProductProperty(product, variableName); 69 if (value != null) { 70 value = resolveVariable(product.getDefiningBundle(), value); 71 return value; 72 } 73 if (variableName.startsWith(VAR_INTRO_DESCRIPTION_PREFIX)) 77 return ""; Preferences prefs = UniversalIntroPlugin.getDefault() 80 .getPluginPreferences(); 81 String key = product.getId() + "_" + variableName; value = prefs.getString(key); 84 if (value.length() == 0) { 85 key = variableName; 87 value = prefs.getString(key); 88 } 89 if (value.length() > 0) 90 value = resolveVariable(product.getDefiningBundle(), value); 91 else { 92 value = getThemeProperty(variableName); 94 } 95 return value; 96 } 97 return null; 98 } 99 100 105 public String getMixinStyle(String pageId, String extensionId) { 106 if (primaryIntroData != null) { 108 int importance = getImportance(primaryIntroData, pageId, extensionId); 109 if (importance >= 0) { 110 return ExtensionData.IMPORTANCE_STYLE_TABLE[importance]; 111 } 112 } 113 int[] importanceRefs = new int[ExtensionData.IMPORTANCE_TABLE.length]; 115 for (int i=0;i<secondaryIntroData.length;++i) { 116 IntroData data = secondaryIntroData[i]; 117 int importance = getImportance(data, pageId, extensionId); 118 if (importance >= 0) { 119 ++importanceRefs[importance]; 120 } 121 } 122 int maxIndex = 0; 123 for (int i=1;i<importanceRefs.length;++i) { 124 if (importanceRefs[i] > importanceRefs[maxIndex]) { 125 maxIndex = i; 126 } 127 } 128 if (importanceRefs[maxIndex] > 0) { 129 return ExtensionData.IMPORTANCE_STYLE_TABLE[maxIndex]; 130 } 131 return null; 133 } 134 135 139 private int getImportance(IntroData data, String pageId, String extensionId) { 140 String pluginId = ExtensionMap.getInstance().getPluginId(extensionId); 141 if (ContentDetector.isNew(pluginId)) { 142 updateStartPage(pageId); 143 return ExtensionData.NEW; 144 } 145 PageData pdata = data.getPage(pageId); 146 if (pdata != null) { 147 ExtensionData ed = pdata.findExtension(extensionId, false); 148 if (ed != null) { 149 return ed.getImportance(); 150 } 151 } 152 return -1; 154 } 155 156 160 private void updateStartPage(String pageId) { 161 String currentStartPage = ExtensionMap.getInstance().getStartPage(); 162 String ids = getVariable(VAR_INTRO_ROOT_PAGES); 163 if (ids != null) { 164 StringTokenizer stok = new StringTokenizer (ids, ","); while (stok.hasMoreTokens()) { 166 String id = stok.nextToken().trim(); 167 if (id.equals(pageId)) { 168 ExtensionMap.getInstance().setStartPage(pageId); 169 return; 170 } 171 if (id.equals(currentStartPage)) { 172 return; 174 } 175 } 176 } 177 } 178 179 private String resolveVariable(Bundle bundle, String value) { 180 if (value != null) { 181 String path = null; 182 if (value.startsWith("intro:")) { bundle = UniversalIntroPlugin.getDefault().getBundle(); 184 path = value.substring(6); 185 } else if (value.startsWith("product:")) { path = value.substring(8); 187 } else 188 return value; 189 try { 190 URL url = bundle.getEntry(path); 191 if (url != null) { 192 URL localURL = FileLocator.toFileURL(url); 193 return localURL.toString(); 194 } 195 } catch (IOException e) { 196 return value; 198 } 199 } 200 return null; 201 } 202 203 private String getProductProperty(IProduct product, String variableName) { 204 String value = product.getProperty(variableName); 205 if (value == null) { 206 if (variableName.equals(VAR_INTRO_BACKGROUND_IMAGE)) 208 return "css/graphics/root/welcomebckgrd.jpg"; } 210 return value; 211 } 212 213 public IntroElement[] getGroupChildren(String pageId, String groupId) { 214 if (pageId.equals(ID_ROOT)) { 215 if (groupId.equals(DIV_PAGE_LINKS)) 216 return getRootPageLinks(false); 217 if (groupId.equals(DIV_ACTION_LINKS)) 218 return getRootPageActionLinks(false); 219 } else if (pageId.equals(ID_STANDBY)) { 220 if (groupId.equals(DIV_PAGE_LINKS)) 221 return getRootPageLinks(true); 222 if (groupId.equals(DIV_ACTION_LINKS)) 223 return getRootPageActionLinks(true); 224 } else { 225 if (groupId.equals(DIV_PAGE_LINKS)) 227 return getNavLinks(pageId); 228 if (groupId.equals(DIV_LAYOUT_TOP_LEFT) 229 || groupId.equals(DIV_LAYOUT_TOP_RIGHT) 230 || groupId.equals(DIV_LAYOUT_BOTTOM_LEFT) 231 || groupId.equals(DIV_LAYOUT_BOTTOM_RIGHT)) 232 return getContent(pageId, groupId); 233 } 234 return new IntroElement[0]; 235 } 236 237 public IntroElement[] getLaunchBarShortcuts() { 238 ArrayList links = new ArrayList (); 239 String ids = getVariable(VAR_INTRO_ROOT_PAGES); 240 if (ids != null) { 241 StringTokenizer stok = new StringTokenizer (ids, ","); while (stok.hasMoreTokens()) { 243 String id = stok.nextToken().trim(); 244 IntroElement page = createLaunchBarShortcut(id); 245 if (page != null) 246 links.add(page); 247 } 248 } 249 return (IntroElement[]) links.toArray(new IntroElement[links.size()]); 250 } 251 252 private IntroElement[] getRootPageLinks(boolean standby) { 253 ArrayList links = new ArrayList (); 254 String ids = getVariable(VAR_INTRO_ROOT_PAGES); 255 if (ids != null) { 256 StringTokenizer stok = new StringTokenizer (ids, ","); while (stok.hasMoreTokens()) { 258 String id = stok.nextToken().trim(); 259 IntroElement page = createRootPageLink(id, standby); 260 if (page != null) 261 links.add(page); 262 } 263 } 264 String wb = getVariable(VAR_WORKBENCH_AS_ROOT_LINK); 266 if (wb!=null && wb.equalsIgnoreCase("true")) { IntroElement page = createRootPageLink(ID_WORKBENCH, standby); 268 if (page !=null) 269 links.add(page); 270 } 271 return (IntroElement[]) links.toArray(new IntroElement[links.size()]); 272 } 273 274 private IntroElement[] getRootPageActionLinks(boolean standby) { 275 String wb = getVariable(VAR_WORKBENCH_AS_ROOT_LINK); 276 if (wb==null || !wb.equalsIgnoreCase("true")) { IntroElement page = createRootPageLink(ID_WORKBENCH, standby); 280 if (page !=null) 281 return new IntroElement[] { page }; 282 } 283 return new IntroElement [0]; 284 } 285 286 private IntroElement[] getNavLinks(String pageId) { 287 ArrayList links = new ArrayList (); 288 String ids = getVariable(VAR_INTRO_ROOT_PAGES); 289 293 if (ImageUtil.isHighContrast()) { 294 ids = ids + ',' + IUniversalIntroConstants.ID_WORKBENCH; 295 } 296 if (ids != null) { 297 StringTokenizer stok = new StringTokenizer (ids, ","); int [] counter = new int [1]; 299 while (stok.hasMoreTokens()) { 300 String id = stok.nextToken().trim(); 301 IntroElement page = createNavLink(id, pageId, counter); 302 if (page != null) 303 links.add(page); 304 } 305 } 306 307 return (IntroElement[]) links.toArray(new IntroElement[links.size()]); 308 } 309 310 private IntroElement createRootPageLink(String id, boolean standby) { 311 312 if (id.equals(ID_OVERVIEW)) 313 return createRootLink( 314 Messages.SharedIntroConfigurer_overview_name, 315 createPageURL(id, standby), 316 id, 317 "overview_img", "$theme$/graphics/root/overview.gif", Messages.SharedIntroConfigurer_overview_alt, Messages.SharedIntroConfigurer_overview_tooltip, "left"); if (id.equals(ID_FIRSTSTEPS)) 320 return createRootLink( 321 Messages.SharedIntroConfigurer_firststeps_name, 322 createPageURL(id, standby), 323 id, 324 "firststeps_img", "$theme$/graphics/root/firststeps.gif", Messages.SharedIntroConfigurer_firststeps_alt, Messages.SharedIntroConfigurer_firststeps_tooltip, "left"); if (id.equals(ID_TUTORIALS)) 327 return createRootLink( 328 Messages.SharedIntroConfigurer_tutorials_name, 329 createPageURL(id, standby), 330 id, 331 "tutorials_img", "$theme$/graphics/root/tutorials.gif", Messages.SharedIntroConfigurer_tutorials_alt, Messages.SharedIntroConfigurer_tutorials_tooltip, "left"); if (id.equals(ID_SAMPLES)) 334 return createRootLink( 335 Messages.SharedIntroConfigurer_samples_name, 336 createPageURL(id, standby), 337 id, 338 "samples_img", "$theme$/graphics/root/samples.gif", Messages.SharedIntroConfigurer_samples_alt, Messages.SharedIntroConfigurer_samples_tooltip, "right"); if (id.equals(ID_WHATSNEW)) 340 return createRootLink( 341 Messages.SharedIntroConfigurer_whatsnew_name, 342 createPageURL(id, standby), 343 id, 344 "whatsnew_img", "$theme$/graphics/root/whatsnew.gif", Messages.SharedIntroConfigurer_whatsnew_alt, Messages.SharedIntroConfigurer_whatsnew_tooltip, "right"); if (id.equals(ID_MIGRATE)) 347 return createRootLink( 348 Messages.SharedIntroConfigurer_migrate_name, 349 createPageURL(id, standby), 350 id, 351 "migrate_img", "$theme$/graphics/root/migrate.gif", Messages.SharedIntroConfigurer_migrate_alt, Messages.SharedIntroConfigurer_migrate_tooltip, "right"); if (id.equals(ID_WEBRESOURCES)) 353 return createRootLink( 354 Messages.SharedIntroConfigurer_webresources_name, 355 createPageURL(id, standby), 356 id, 357 "webresources_img", "css/graphics/root/webresources.gif", Messages.SharedIntroConfigurer_webresources_alt, 359 Messages.SharedIntroConfigurer_webresources_tooltip, 360 "right"); if (id.equals(ID_WORKBENCH)) 362 return createRootLink( 363 Messages.SharedIntroConfigurer_workbench_name, 364 "http://org.eclipse.ui.intro/switchToLaunchBar", id, 366 "workbench_img", "css/graphics/root/workbench.gif", Messages.SharedIntroConfigurer_workbench_alt, 368 Messages.SharedIntroConfigurer_workbench_tooltip, 369 "right"); return null; 371 } 372 373 private IntroElement createNavLink(String id, String pageId, int [] counter) { 374 if (id.equals(ID_OVERVIEW)) 375 return createNavLink(Messages.SharedIntroConfigurer_overview_nav, 376 createPageURL(id, false), id, "left nav_link"+(++counter[0])); if (id.equals(ID_FIRSTSTEPS)) 378 return createNavLink(Messages.SharedIntroConfigurer_firststeps_nav, 379 createPageURL(id, false), id, "left nav_link"+(++counter[0])); if (id.equals(ID_TUTORIALS)) 381 return createNavLink(Messages.SharedIntroConfigurer_tutorials_nav, 382 createPageURL(id, false), id, "left nav_link"+(++counter[0])); if (id.equals(ID_SAMPLES)) 384 return createNavLink(Messages.SharedIntroConfigurer_samples_nav, 385 createPageURL(id, false), id, "right nav_link"+(++counter[0])); if (id.equals(ID_WHATSNEW)) 387 return createNavLink(Messages.SharedIntroConfigurer_whatsnew_nav, 388 createPageURL(id, false), id, "right nav_link"+(++counter[0])); if (id.equals(ID_MIGRATE)) 390 return createNavLink(Messages.SharedIntroConfigurer_migrate_nav, 391 createPageURL(id, false), id, "right nav_link"+(++counter[0])); if (id.equals(ID_WEBRESOURCES)) 393 return createNavLink( 394 Messages.SharedIntroConfigurer_webresources_nav, 395 createPageURL(id, false), id, "right nav_link"+(++counter[0])); if (id.equals(ID_WORKBENCH)) 397 return createNavLink( 398 Messages.SharedIntroConfigurer_workbench_name, 399 "http://org.eclipse.ui.intro/switchToLaunchBar", id, 401 "right nav_link"+(++counter[0])); return null; 403 } 404 405 private String createPageURL(String id, boolean standby) { 406 String url = "http://org.eclipse.ui.intro/showPage?id=" + id; if (standby) 408 url += "&standby=false"; return url; 410 } 411 412 private IntroElement createLaunchBarShortcut(String id) { 413 if (id.equals(ID_OVERVIEW)) 414 return createShortcutLink( 415 getThemeProperty(LAUNCHBAR_OVERVIEW_ICON), Messages.SharedIntroConfigurer_overview_nav, 416 id); 417 if (id.equals(ID_FIRSTSTEPS)) 418 return createShortcutLink( 419 getThemeProperty(LAUNCHBAR_FIRSTSTEPS_ICON), Messages.SharedIntroConfigurer_firststeps_nav, 420 id); 421 if (id.equals(ID_TUTORIALS)) 422 return createShortcutLink( 423 getThemeProperty(LAUNCHBAR_TUTORIALS_ICON), Messages.SharedIntroConfigurer_tutorials_nav, 424 id); 425 if (id.equals(ID_SAMPLES)) 426 return createShortcutLink( 427 getThemeProperty(LAUNCHBAR_SAMPLES_ICON), Messages.SharedIntroConfigurer_samples_nav, 428 id); 429 if (id.equals(ID_WHATSNEW)) 430 return createShortcutLink( 431 getThemeProperty(LAUNCHBAR_WHATSNEW_ICON), Messages.SharedIntroConfigurer_whatsnew_nav, 432 id); 433 if (id.equals(ID_MIGRATE)) 434 return createShortcutLink( 435 getThemeProperty(LAUNCHBAR_MIGRATE_ICON), Messages.SharedIntroConfigurer_migrate_nav, 436 id); 437 if (id.equals(ID_WEBRESOURCES)) 438 return createShortcutLink( 439 getThemeProperty(LAUNCHBAR_WEBRESOURCES_ICON), Messages.SharedIntroConfigurer_webresources_nav, 440 id); 441 return null; 442 } 443 444 private IntroElement createRootLink(String name, String url, String id, 445 String imgId, String imgSrc, String imgAlt, String imgText, 446 String styleId) { 447 IntroElement element = new IntroElement("link"); element.setAttribute("label", name); element.setAttribute("url", url); element.setAttribute("id", id); element.setAttribute("style-id", styleId); IntroElement img = new IntroElement("img"); img.setAttribute("id", imgId); img.setAttribute("style-id", "content-img"); boolean highContrast = ImageUtil.isHighContrast(); 457 if (highContrast) { 458 String key = HIGH_CONTRAST_PREFIX+id; 459 String value = getVariable(key); 460 if (value!=null) 461 img.setAttribute("src", value); } 463 img.setAttribute("alt", imgAlt); IntroElement text = new IntroElement("text"); text.setValue(imgText); 466 element.addChild(img); 467 element.addChild(text); 468 return element; 469 } 470 471 private IntroElement createNavLink(String label, String url, String id, 472 String styleId) { 473 IntroElement element = new IntroElement("link"); element.setAttribute("label", label); element.setAttribute("url", url); element.setAttribute("id", id); boolean highContrast = ImageUtil.isHighContrast(); 478 if (highContrast) { 479 IntroElement img = new IntroElement("img"); img.setAttribute("style-id", "content-img"); String key = HIGH_CONTRAST_NAV_PREFIX+id; 482 String value = getVariable(key); 483 if (value!=null) 484 img.setAttribute("src", value); img.setAttribute("alt", label); element.addChild(img); 487 styleId += " "+HIGH_CONTRAST; } 489 element.setAttribute("style-id", styleId); return element; 491 } 492 493 private IntroElement createShortcutLink(String icon, String tooltip, 494 String id) { 495 IntroElement element = new IntroElement("shortcut"); element.setAttribute("icon", icon); element.setAttribute("tooltip", tooltip); element.setAttribute("url", createPageURL(id, false)); return element; 500 } 501 502 private void loadData() { 503 IProduct product = Platform.getProduct(); 505 if (product != null) { 506 String dataFile = getVariable(VAR_INTRO_DATA); 507 if (dataFile != null) { 508 primaryIntroData = new IntroData(product.getId(), dataFile, true); 509 } 510 } 511 List result = new ArrayList (); 513 Properties [] prefs = ProductPreferences.getProductPreferences(false); 514 for (int i=0;i<prefs.length;++i) { 515 String key = UniversalIntroPlugin.PLUGIN_ID + '/' + VAR_INTRO_DATA; 516 String dataFile = prefs[i].getProperty(key); 517 if (dataFile != null) { 518 String pluginId = ProductPreferences.getPluginId(prefs[i]); 519 Bundle bundle = Platform.getBundle(pluginId); 520 if (bundle != null) { 521 String pid = ProductPreferences.getProductId(prefs[i]); 522 dataFile = resolveVariable(bundle, dataFile); 523 result.add(new IntroData(pid, dataFile, false)); 524 } 525 } 526 } 527 secondaryIntroData = (IntroData[])result.toArray(new IntroData[result.size()]); 528 } 529 530 private IntroElement[] getContent(String pageId, String groupId) { 531 List result = new ArrayList (); 532 if (!ContentDetector.getNewContributors().isEmpty()) { 533 IntroElement fallback = new IntroElement("anchor"); fallback.setAttribute("id", NEW_CONTENT_ANCHOR); result.add(fallback); 537 } 538 List anchors = getAnchors(pageId, groupId); 539 if (anchors != null) { 540 result.addAll(anchors); 541 } 542 IntroElement fallback = new IntroElement("anchor"); fallback.setAttribute("id", DEFAULT_ANCHOR); result.add(fallback); 546 return (IntroElement[]) result.toArray(new IntroElement[result.size()]); 547 } 548 549 private List getAnchors(String pageId, String groupId) { 550 List primaryAnchors = null; 551 if (primaryIntroData != null) { 552 primaryAnchors = getAnchors(primaryIntroData, pageId, groupId); 553 } 554 if (primaryAnchors == null) { 555 primaryAnchors = Collections.EMPTY_LIST; 556 } 557 List secondaryAnchorsList = new ArrayList (); 558 for (int i=0;i<secondaryIntroData.length;++i) { 559 IntroData idata = secondaryIntroData[i]; 560 List anchors = getAnchors(idata, pageId, groupId); 561 if (anchors != null) { 562 secondaryAnchorsList.add(anchors); 563 } 564 } 565 List [] secondaryAnchors = (List [])secondaryAnchorsList.toArray(new List [secondaryAnchorsList.size()]); 566 if (sequenceResolver == null) { 567 sequenceResolver = new SequenceResolver(); 568 } 569 return sequenceResolver.getSequence(primaryAnchors, secondaryAnchors); 570 } 571 572 private List getAnchors(IntroData data, String pageId, String groupId) { 573 PageData pdata = data.getPage(pageId); 574 if (pdata != null) { 575 List anchors = new ArrayList (); 576 pdata.addAnchors(anchors, groupId); 577 return anchors; 578 } 579 return null; 580 } 581 582 public String resolvePath(String extensionId, String path) { 583 boolean extensionRelativePath = false; 584 IPath ipath = new Path(path); 585 String pageId = ipath.segment(0); 586 String s2 = ipath.segment(1); 587 if (s2.startsWith("@") && s2.length() > 1) { extensionId = s2.substring(1); 590 } 591 if (!s2.equals("@")) { extensionRelativePath = true; 593 } 594 if (!isHidden(extensionId, pageId)) { 595 String resolvedPath = resolveExtensionPath(extensionId, pageId); 596 if (resolvedPath != null) { 597 if (extensionRelativePath) { 598 IPath p2 = new Path(resolvedPath); 600 IPath p1 = ipath.removeFirstSegments(2); 601 resolvedPath = p2.removeLastSegments(1).append(p1).toString(); 603 } 604 return resolvedPath; 605 } 606 return pageId + DEFAULT_CONTENT_PATH; 607 } 608 return null; 609 } 610 611 private String resolveExtensionPath(String extensionId, String pageId) { 612 if (primaryIntroData != null) { 614 PageData pdata = primaryIntroData.getPage(pageId); 615 if (pdata != null) { 616 String path = pdata.resolvePath(extensionId); 617 if (path != null) { 618 return path; 619 } 620 } 621 } 622 PreferenceArbiter arbiter = new PreferenceArbiter(); 624 for (int i=0;i<secondaryIntroData.length;++i) { 625 IntroData idata = secondaryIntroData[i]; 626 PageData pdata = idata.getPage(pageId); 627 if (pdata != null) { 628 arbiter.consider(pdata.resolvePath(extensionId)); 629 } 630 } 631 String path = (String )arbiter.getWinner(); 632 if (path != null) { 633 return path; 634 } 635 return resolveDefaultPath(pageId, extensionId); 637 } 638 639 private String resolveDefaultPath(String pageId, String extensionId) { 640 String pluginId = ExtensionMap.getInstance().getPluginId(extensionId); 641 if (ContentDetector.isNew(pluginId)) { 642 return pageId + IUniversalIntroConstants.NEW_CONTENT_PATH; 643 } 644 if (primaryIntroData != null) { 646 PageData pdata = primaryIntroData.getPage(pageId); 647 if (pdata != null) { 648 String path = pdata.resolveDefaultPath(); 649 if (path != null) { 650 return path; 651 } 652 } 653 } 654 PreferenceArbiter arbiter = new PreferenceArbiter(); 656 for (int i=0;i<secondaryIntroData.length;++i) { 657 IntroData idata = secondaryIntroData[i]; 658 PageData pdata = idata.getPage(pageId); 659 if (pdata != null) { 660 arbiter.consider(pdata.resolveDefaultPath()); 661 } 662 } 663 return (String )arbiter.getWinner(); 664 } 665 666 private boolean isHidden(String extensionId, String pageId) { 667 if (primaryIntroData != null) { 668 PageData pdata = primaryIntroData.getPage(pageId); 669 if (pdata != null) { 670 return pdata.isHidden(extensionId); 671 } 672 } 673 return false; 674 } 675 676 public void init(IIntroSite site, Map themeProperties) { 677 super.init(site, themeProperties); 678 IConfigurationElement element = CustomizeAction.getPageElement(); 679 if (element == null) 680 return; 681 Action customizeAction = new CustomizeAction(site, element); 682 customizeAction.setText(Messages.SharedIntroConfigurer_customize_label); 683 customizeAction 684 .setToolTipText(Messages.SharedIntroConfigurer_customize_text); 685 customizeAction.setImageDescriptor(ImageUtil 686 .createImageDescriptor("full/elcl16/configure.gif")); site.getActionBars().getToolBarManager().appendToGroup(TB_ADDITIONS, 688 customizeAction); 689 } 690 } | Popular Tags |