Bug 553686 - When contribute a CoolBar, the order is not right
Summary: When contribute a CoolBar, the order is not right
Status: NEW
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 4.14   Edit
Hardware: PC Windows 10
: P3 enhancement (vote)
Target Milestone: ---   Edit
Assignee: Platform-UI-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: api, ui
Depends on:
Blocks:
 
Reported: 2019-12-02 21:43 EST by gong md CLA
Modified: 2020-03-15 12:27 EDT (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description gong md CLA 2019-12-02 21:43:30 EST
public class MyEditorActionBarContributor extends EditorActionBarContributor {

... ...

	@Override
	public void contributeToToolBar(IToolBarManager toolBarManager) {
		super.contributeToToolBar(toolBarManager);
	}
	
	@Override
	public void contributeToCoolBar(ICoolBarManager coolBarManager) {
		super.contributeToCoolBar(coolBarManager);
		IWorkbenchPage workbenchPage = getPage();
		
		IToolBarManager toolbar = getActionBars().getToolBarManager();
		ToolBarContributionItem toolbarItem = new ToolBarContributionItem(toolbar, "rptCoolBar");
		
		coolBarManager.insertAfter("DbToolBar", toolbarItem);
		
		toolbar.add(ChangeTypeAction.ACTION);
		workbenchPage.addPartListener(ChangeTypeAction.ACTION);
		
		toolbar.add(PreviewReportAction.ACTION);
		workbenchPage.addPartListener(PreviewReportAction.ACTION);
		
		coolBarManager.update(true);
	}
	
... ...

}

the "coolBarManager.insertAfter" is invalid. it is not insert the coolbar in right place,but always add in the last place.

-- Configuration Details --
Product: Eclipse IDE 4.13.0.20190917-0000 (org.eclipse.epp.package.rcp.product)Installed Features:
 org.eclipse.pde 3.14.100.v20190916-1045
Comment 1 Vikas Chandra CLA 2019-12-02 23:28:41 EST
Which order is not right? Can you attach a snap?
Comment 2 gong md CLA 2019-12-03 22:01:35 EST
I create a RCP program, in the ApplicationActionBarAdvisor.java,i create three coolbar,like this:
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
... ...

  @Override
  protected void fillCoolBar(ICoolBarManager coolBar) {
    super.fillCoolBar(coolBar);
    IToolBarManager filebar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
    ToolBarContributionItem fileContributionItem = new ToolBarContributionItem(filebar, "FileToolBar");
    ... ...

    IToolBarManager dbbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
    ToolBarContributionItem dbContributionItem  = new ToolBarContributionItem(dbbar , "DbToolBar");
    ... ...

    IToolBarManager otherbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
    ToolBarContributionItem otherContributionItem  = new ToolBarContributionItem(otherbar , "OtherToolBar");
    ... ...

    coolBar.add(fileContributionItem ); 
    coolBar.add(dbContributionItem );
    coolBar.add(otherContributionItem );
  }

... ...
}

Then, I create a MyEditorActionBarContributor.java like this:
public class MyEditorActionBarContributor extends EditorActionBarContributor {

... ...

	@Override
	public void contributeToToolBar(IToolBarManager toolBarManager) {
		super.contributeToToolBar(toolBarManager);
	}
	
	@Override
	public void contributeToCoolBar(ICoolBarManager coolBarManager) {
		super.contributeToCoolBar(coolBarManager);
		IWorkbenchPage workbenchPage = getPage();
		
		IToolBarManager toolbar = getActionBars().getToolBarManager();
		ToolBarContributionItem toolbarItem = new ToolBarContributionItem(toolbar, "rptCoolBar");
		
		coolBarManager.insertAfter("DbToolBar", toolbarItem);
		
		toolbar.add(ChangeTypeAction.ACTION);
		workbenchPage.addPartListener(ChangeTypeAction.ACTION);
		
		toolbar.add(PreviewReportAction.ACTION);
		workbenchPage.addPartListener(PreviewReportAction.ACTION);
		
		coolBarManager.update(true);
	}
	
... ...

}

I think the right sequence of ApplicationToolBar should be "FileToolBar,DbToolBar,rptCoolBar,OtherToolBar". but the result sequence is "FileToolBar,DbToolBar,OtherToolBar,rptCoolBar" .
So, i think the "coolBarManager.insertAfter" is invalid,it is not insert the coolbar in right place,but always add in the last place.