package com.hundsun.ares.studio.ui.action; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.navigator.IExtensionStateModel; import com.hundsun.ares.studio.ui.ARESPreferences; import com.hundsun.ares.studio.ui.ARESUI; /** * * @author sundl */ public class CommonLayoutActionGroup extends MultiActionGroup { public static final String LAYOUT_GROUP_NAME = "layout"; //$NON-NLS-1$ private StructuredViewer fStructuredViewer; private boolean fHasContributedToViewMenu = false; private IAction fHierarchicalLayout = null; private IAction fFlatLayoutAction = null; private IAction[] fActions; private IMenuManager fLayoutSubMenu; private class CommonLayoutAction extends Action implements IAction { private final boolean fIsFlatLayout; public CommonLayoutAction(boolean flat) { super("", AS_RADIO_BUTTON); //$NON-NLS-1$ fIsFlatLayout = flat; } /* * @see org.eclipse.jface.action.IAction#run() */ public void run() { IPreferenceStore store = ARESUI.getDefault().getPreferenceStore(); boolean old = store.getBoolean(ARESPreferences.FLATLAYOUT); if (old != fIsFlatLayout) { store.setValue(ARESPreferences.FLATLAYOUT, fIsFlatLayout); fStructuredViewer.getControl().setRedraw(false); try { fStructuredViewer.refresh(); } finally { fStructuredViewer.getControl().setRedraw(true); } } } } public CommonLayoutActionGroup(StructuredViewer structuredViewer, IExtensionStateModel stateModel) { super(); fStructuredViewer = structuredViewer; } /* * (non-Javadoc) * * @see ActionGroup#fillActionBars(IActionBars) */ public void fillActionBars(IActionBars actionBars) { if (!fHasContributedToViewMenu) { IMenuManager viewMenu = actionBars.getMenuManager(); // Create layout sub menu if (fLayoutSubMenu == null) { fLayoutSubMenu = new MenuManager("Module Layout"); addActions(fLayoutSubMenu); viewMenu.insertAfter(IWorkbenchActionConstants.MB_ADDITIONS, new Separator(LAYOUT_GROUP_NAME)); } viewMenu.appendToGroup(LAYOUT_GROUP_NAME, fLayoutSubMenu); fHasContributedToViewMenu = true; } } public void unfillActionBars(IActionBars actionBars) { if (fHasContributedToViewMenu) { // Create layout sub menu if (fLayoutSubMenu != null) { actionBars.getMenuManager().remove(fLayoutSubMenu); fLayoutSubMenu.dispose(); fLayoutSubMenu= null; } fHasContributedToViewMenu = false; } } private IAction[] createActions() { fFlatLayoutAction = new CommonLayoutAction(true); fFlatLayoutAction.setText("Flat"); fHierarchicalLayout = new CommonLayoutAction(false); fHierarchicalLayout.setText("Hierarchical"); return new IAction[] { fFlatLayoutAction, fHierarchicalLayout }; } public void setFlatLayout(boolean flatLayout) { if (fActions == null) { fActions = createActions(); // indicates check the flat action setActions(fActions, flatLayout ? 0 : 1); } fHierarchicalLayout.setChecked(!flatLayout); fFlatLayoutAction.setChecked(flatLayout); } }