Eclipse look & feel customization
Asked Answered
A

2

5

I need to customize the look & feel of my RCP application.

I took a look at Eclipse Presentation API and I suppose it allows to customize everything in workbench except controls.

So is there any solution to customize controls?

I made some research work and implemented some ad-hoc SWT cunstomization using control canvas drawning. May be there are better solutions?

In Swing you can use Synth theme. It would be great if some 'skin' framework exists for SWT.

Aftersensation answered 12/5, 2011 at 12:30 Comment(0)
S
6

One way of customizing an RCP app is by using a plugin_customization.ini file. Like this:

  1. Create a new file called "plugin_customization.ini" in the root of your project.
  2. If you have not already done so, create a product configuration and define a Product.
  3. In your plugin's manifest editor, on the "Extensions" tab, locate the "org.eclipse.core.runtime.products" extension, expand the node, right click on your product node and select "New > property" from the context menu.
  4. Enter "preferenceCustomization" in the "name" field and "plugin_customization.ini" in the "value" field.
  5. Select "File > Save" from the main menu.

You can then customize a lot of things simply by editing plugin_customization.ini file. For example, adding the following line

org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false

will give you rounded tabs on your views and editors (similar to those that Eclipse IDE has) instead of the default ones.
You can find other constants that you can use in IWorkbenchPreferenceConstants javadoc.

Also, check out the Eclipse skins project, if you haven't already.

There is also the possibility to use CSS to change the look & feel of your app, but that is still in development and can be buggy

As for customizing the SWT controls themselves, the only way to do that (apart from small customizations such as changing the background colour of a control etc.) is by creating your own custom controls by extending Canvas or Composite, but you already know that.
Keep in mind that the point of SWT is to use native controls, so if you desire the ability to completely customize your controls, perhaps using Swing would be a better option. However, if you're going to use Swing, it may be better to use another RCP entirely - namely, NetBeans RCP. I haven't tried it out yet, but I know that whereas Eclipse RCP uses SWT as a widget toolkit, NetBeans RCP relies on Swing, so that may save you from some headaches regarding compatibility problems and so on.

Snarl answered 12/5, 2011 at 13:41 Comment(3)
Thank you for such a comprehensive reply. I prefer Eclipse RCP to NetBeans RCP but in current solution I implement skin support by injection Swing controls into SWT forms. It's a bit tricky and I would like to exclude any Swing dependencies from App. I'll try Eclipse skins project. I think, may be it would be a good idea to implement skin support for SWT controls using some vector rendering?Aftersensation
@Viktor Griffo - Glad to help! As I said before - SWT controls are native, they are drawn by the operating system, so there really isn't much that can be done about the way they look at the application layer. You can only customize what the OS allows. For example, you cannot set a background image for a Button on Windows, since that OS does not allow that.Snarl
Yes I get it. I used freshmeat.net/projects/rcptoolbox to customize controls. As I suppose those controls implemented on top of customizable Composites and Canvases?Aftersensation
M
2

The new Eclipse 4 work contains plugins that allow the L&F to be customized using CSS. These plugins can be run in a 3.7 Eclipse environment. See Kai's blog for a presentation on the subject: http://www.toedter.com/blog/?p=477

The Eclipse 4 Styling Tutorial has a slide (p.66) on where to get an 3.7 based RCP example.

Mishnah answered 12/5, 2011 at 18:27 Comment(1)
I took a look at Eclipse 4 about 10 months ago to decide if it could be used for my project. It looks a bit buggy. CSS styling is a good solution, but I need to implement fully redisined GUI, like Swing Synth allows.Aftersensation

© 2022 - 2024 — McMap. All rights reserved.