private void turnToPage(SelectionEvent event) { final TabItem item = (TabItem) event.item; TabFolder folder = item.getParent(); SearchPageDescriptor descriptor = (SearchPageDescriptor) item.getData("descriptor"); // $NON-NLS-1$ if (item.getControl() == null) { item.setControl(createPageControl(folder, descriptor)); } Control oldControl = folder.getItem(fCurrentIndex).getControl(); Point oldSize = oldControl.getSize(); Control newControl = item.getControl(); Point newSize = newControl.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); resizeDialogIfNeeded(oldSize, newSize); ISearchPage oldPage = fCurrentPage; if (oldPage != null) { oldPage.setVisible(false); } fCurrentPage = descriptor.getPage(); fDialogSettings.put(STORE_PREVIOUS_PAGE, descriptor.getId()); fCurrentIndex = folder.getSelectionIndex(); setPerformActionEnabled(fCurrentPage != null); if (fCurrentPage != null) { fCurrentPage.setVisible(true); Control pageControl = fCurrentPage.getControl(); if (pageControl instanceof Composite) ((Composite) pageControl).layout(false, true); } fReplaceButton.setVisible(fCurrentPage instanceof IReplacePage); notifyPageChanged(); }
/** * Creates all the tabs in the detail pane to display the information for a given node. * * @param composite * @param node */ public static void createTabs(Composite composite, INode node) { List<IDetailTab> tabs = getTabs(node); if (tabs == null || tabs.size() == 0) { // no detail found.. Label label = new Label(composite, SWT.FILL); label.setText( Messages.getString("DatabaseDetailView.Tab.Unavailable") + " " + node.getLabelText()); label.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); return; } // create tabs TabFolder tabFolder = new TabFolder(composite, SWT.NULL); // only init tabs when the tab becomes active tabFolder.addSelectionListener( new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { // noop } public void widgetSelected(SelectionEvent e) { TabItem tabItem = (TabItem) e.item; IDetailTab tab = (IDetailTab) tabItem.getData(); if (tab != null) { // create composite on tab and fill it.. Composite detailComposite = new Composite(tabItem.getParent(), SWT.FILL); tabItem.setControl(detailComposite); detailComposite.setLayout(new FillLayout()); tab.fillComposite(detailComposite); detailComposite.layout(); // store tab name, so we can reselect when other node is // chosen DetailTabManager.setActiveTabName(tabItem.getText()); } } }); // add tabs to folder int tabIndex = 0; for (IDetailTab detailTab : tabs) { // create tab TabItem tabItem = new TabItem(tabFolder, SWT.NULL); tabItem.setText(detailTab.getLabelText()); tabItem.setToolTipText(detailTab.getLabelToolTipText()); // store tab so we can fill later tabItem.setData(detailTab); // reselect same tab as was previous selected if (tabItem.getText() != null && _activeTabName != null) { if (tabItem.getText().equals(_activeTabName)) { tabFolder.setSelection(tabIndex); } } tabIndex++; } // load data for active tab, default to first one if none is selected tabIndex = tabFolder.getSelectionIndex(); if (tabIndex == -1) { tabIndex = 0; } TabItem tabItem = tabFolder.getItem(tabIndex); if (tabItem != null) { Composite detailComposite = new Composite(tabItem.getParent(), SWT.FILL); tabItem.setControl(detailComposite); detailComposite.setLayout(new FillLayout()); IDetailTab tab = (IDetailTab) tabItem.getData(); tab.fillComposite(detailComposite); detailComposite.layout(); } tabFolder.layout(); }