@Override
  public void createControl(Composite parent) {
    itemControl = new ItemListControl(parent, SWT.SHEET, mainEditor.getSite(), node, metaNode);
    // itemControl.getLayout().marginHeight = 0;
    // itemControl.getLayout().marginWidth = 0;
    ProgressPageControl progressControl = null;
    if (mainEditor instanceof IProgressControlProvider) {
      progressControl = ((IProgressControlProvider) mainEditor).getProgressControl();
    }
    if (progressControl != null) {
      itemControl.substituteProgressPanel(progressControl);
    } else {
      itemControl.createProgressPanel();
    }

    parent.layout();

    // Activate items control on focus
    itemControl
        .getItemsViewer()
        .getControl()
        .addFocusListener(
            new FocusListener() {
              @Override
              public void focusGained(FocusEvent e) {
                // Update selection provider and selection
                final ISelectionProvider selectionProvider = itemControl.getSelectionProvider();
                mainEditor.getSite().setSelectionProvider(selectionProvider);
                selectionProvider.setSelection(selectionProvider.getSelection());
                itemControl.activate(true);

                // Notify owner MultiPart editor about page change
                // We need it to update search actions and other contributions provided by node
                // editor
                if (mainEditor.getSite() instanceof MultiPageEditorSite) {
                  ((MultiPageEditorSite) mainEditor.getSite())
                      .getMultiPageEditor()
                      .setActiveEditor(mainEditor);
                }
              }

              @Override
              public void focusLost(FocusEvent e) {
                itemControl.activate(false);
              }
            });
  }
 @Override
 public void aboutToBeShown() {
   if (!activated) {
     activated = true;
     boolean isLazy =
         !(node instanceof DBNDatabaseNode) || ((DBNDatabaseNode) node).needsInitialization();
     itemControl.loadData(isLazy);
   }
 }
 @Override
 public void refreshPart(Object source, boolean force) {
   if (!activated || itemControl == null || itemControl.isDisposed()) {
     return;
   }
   // Check - do we need to load new content in editor
   // If this is DBM event then check node change type
   // UNLOAD usually means that connection was closed on connection's node is not removed but
   // is in "unloaded" state.
   // Without this check editor will try to reload it's content and thus will reopen just closed
   // connection
   // (by calling getChildren() on DBNNode)
   boolean loadNewData = true;
   if (source instanceof DBNEvent) {
     DBNEvent.NodeChange nodeChange = ((DBNEvent) source).getNodeChange();
     if (nodeChange == DBNEvent.NodeChange.UNLOAD) {
       loadNewData = false;
     }
   }
   if (loadNewData && !itemControl.isDisposed()) {
     itemControl.loadData(false);
   }
 }
 public void setFocus() {
   if (itemControl != null) {
     itemControl.setFocus();
   }
 }
 @Override
 public Viewer getNavigatorViewer() {
   return itemControl.getNavigatorViewer();
 }
 @Override
 public DBNNode getRootNode() {
   return itemControl.getRootNode();
 }
 @Override
 public boolean performSearch(SearchType searchType) {
   return itemControl.performSearch(searchType);
 }
 @Override
 public boolean isSearchEnabled() {
   return itemControl.isSearchEnabled();
 }
 @Override
 public boolean isSearchPossible() {
   return itemControl.isSearchPossible();
 }