public void setTextID(final String id) {
   if (skinObject == null) {
     return;
   }
   if (skinObject instanceof SWTSkinObjectButton) {
     ((SWTSkinObjectButton) skinObject).setText(MessageText.getString(id));
     return;
   }
   Utils.execSWTThreadLater(
       0,
       new AERunnable() {
         public void runSupport() {
           if (skinObject instanceof SWTSkinObjectText) {
             SWTSkinObjectText skinTextObject = (SWTSkinObjectText) skinObject;
             skinTextObject.setTextID(id);
           } else if (skinObject instanceof SWTSkinObjectContainer) {
             SWTSkinObject[] children = ((SWTSkinObjectContainer) skinObject).getChildren();
             if (children.length > 0 && children[0] instanceof SWTSkinObjectText) {
               SWTSkinObjectText skinTextObject = (SWTSkinObjectText) children[0];
               skinTextObject.setTextID(id);
             }
           }
           Utils.relayout(skinObject.getControl());
         }
       });
 }
  public void addSelectionListener(ButtonListenerAdapter listener) {
    if (skinObject instanceof SWTSkinObjectButton) {
      ((SWTSkinObjectButton) skinObject).addSelectionListener(listener);
      return;
    }

    if (listeners.contains(listener)) {
      return;
    }
    listeners.add(listener);
  }
  // @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#showCoreWaitDlg()
  public Shell showCoreWaitDlg() {
    final SkinnedDialog closeDialog =
        new SkinnedDialog(
            "skin3_dlg_coreloading",
            "coreloading.body",
            SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL);

    closeDialog.setTitle(MessageText.getString("dlg.corewait.title"));
    SWTSkin skin = closeDialog.getSkin();
    SWTSkinObjectButton soButton = (SWTSkinObjectButton) skin.getSkinObject("close");

    final SWTSkinObjectText soWaitTask = (SWTSkinObjectText) skin.getSkinObject("task");

    final SWTSkinObject soWaitProgress = skin.getSkinObject("progress");
    if (soWaitProgress != null) {
      soWaitProgress
          .getControl()
          .addPaintListener(
              new PaintListener() {
                public void paintControl(PaintEvent e) {
                  Control c = (Control) e.widget;
                  Point size = c.getSize();
                  e.gc.setBackground(ColorCache.getColor(e.display, "#23a7df"));
                  Object data = soWaitProgress.getData("progress");
                  if (data instanceof Long) {
                    int waitProgress = ((Long) data).intValue();
                    int breakX = size.x * waitProgress / 100;
                    e.gc.fillRectangle(0, 0, breakX, size.y);
                    e.gc.setBackground(ColorCache.getColor(e.display, "#cccccc"));
                    e.gc.fillRectangle(breakX, 0, size.x - breakX, size.y);
                  }
                }
              });
    }

    if (!AzureusCoreFactory.isCoreRunning()) {
      final Initializer initializer = Initializer.getLastInitializer();
      if (initializer != null) {
        initializer.addListener(
            new InitializerListener() {
              public void reportPercent(final int percent) {
                Utils.execSWTThread(
                    new AERunnable() {
                      public void runSupport() {
                        if (soWaitProgress != null && !soWaitProgress.isDisposed()) {
                          soWaitProgress.setData("progress", new Long(percent));
                          soWaitProgress.getControl().redraw();
                          soWaitProgress.getControl().update();
                        }
                      }
                    });
                if (percent > 100) {
                  initializer.removeListener(this);
                }
              }

              public void reportCurrentTask(String currentTask) {
                if (soWaitTask != null && !soWaitTask.isDisposed()) {
                  soWaitTask.setText(currentTask);
                }
              }
            });
      }
    }

    if (soButton != null) {
      soButton.addSelectionListener(
          new ButtonListenerAdapter() {
            public void pressed(
                SWTSkinButtonUtility buttonUtility, SWTSkinObject skinObject, int stateMask) {
              closeDialog.close();
            }
          });
    }

    closeDialog.addCloseListener(
        new SkinnedDialogClosedListener() {
          public void skinDialogClosed(SkinnedDialog dialog) {}
        });

    closeDialog.open();
    return closeDialog.getShell();
  }