Priyank Thakkar
Priyank Thakkar

Reputation: 4852

Eclipse RCP: Set Image in the status line

I am developing an RCP application, I wanted to set the status line. I figured out that I can extend the ActionBarAdvisor class and by overriding the method fillStatusLine() method I can set the status.

private StatusLineContributionItem statusItem;

@Override
protected void fillStatusLine(IStatusLineManager statusLine) {
    statusItem = new StatusLineContributionItem("LoggedInStatus");
    statusItem.setText("Logged in");
    statusLine.add(statusItem);
}

Now, I wish to set image along with it. Is is possible to add image to status line?

Upvotes: 1

Views: 1945

Answers (2)

Kristen Gillard
Kristen Gillard

Reputation: 1

You chould use the following class: org.eclipse.ui.texteditor.StatusLineContributionItem.class this contains the method setImage(Image image).

It is found in: plugins/org.eclipse.ui.workbench.texteditor_(version).jar of your eclipse installation.

This is class extends: org.eclipse.jface.action.StatusLineContributionItem.class.

Note there are 2 classes named: StatusLineContributionItem.class the other resides in: plugins/org.eclipse.jface_(version).jar and is named: org.eclipse.jface.action.StatusLineContributionItem.class.

This one however does not contain the setImage(Image image) method.

You can then call:

StatusLineManager statusLine = new StatusLineManager();

StatusLineContributionItem i = new StatusLineContributionItem("myid");
i.setText("myText");
i.setImage(SWTResourceManager.getImage(MyClass.class, "config.gif");
...
statusLine.add(i);
...
return statusLine;

If you want complete customization you can use the solution above overriding the fill(Composite composite) method.

Reference: http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fui%2Ftexteditor%2FStatusLineContributionItem.html

Upvotes: 0

Alex K.
Alex K.

Reputation: 3304

You need to override fill(Composite parent) method in your StatusLineContributionItem. There you can add custom components (images, buttons etc. to a status line). For example: http://book.javanb.com/eclipse-rich-client-platform-designing-coding-and-packaging-java-applications-oct-2005/ch17lev1sec7.html

org.eclipsercp.hyperbola/StatusLineContribution
public void fill(Composite parent) {
  Label separator = new Label(parent, SWT.SEPARATOR);
  label = new CLabel(parent, SWT.SHADOW_NONE);

  GC gc = new GC(parent);
  gc.setFont(parent.getFont());
  FontMetrics fm = gc.getFontMetrics();
  Point extent = gc.textExtent(text);
  if (widthHint > 0)
    widthHint = fm.getAverageCharWidth() * widthHint;
  else
    widthHint = extent.x;
  heightHint = fm.getHeight();
  gc.dispose();

  StatusLineLayoutData statusLineLayoutData = new StatusLineLayoutData();
  statusLineLayoutData.widthHint = widthHint;
  statusLineLayoutData.heightHint = heightHint;
  label.setLayoutData(statusLineLayoutData);
  label.setText(text);
  label.setImage(image);
  ...
}

Upvotes: 2

Related Questions