/*******************************************************************************
* Copyright (c) 2015 ARM Ltd. and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* ARM Ltd and ARM Germany GmbH - Initial API and implementation
*******************************************************************************/
package com.arm.cmsis.pack.ui.editors;
import java.util.Collection;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
import com.arm.cmsis.pack.CpPlugIn;
import com.arm.cmsis.pack.ICpPackInstaller;
import com.arm.cmsis.pack.events.RteEvent;
import com.arm.cmsis.pack.rte.IRteModelController;
import com.arm.cmsis.pack.rte.RteModelUtils;
import com.arm.cmsis.pack.ui.CpPlugInUI;
import com.arm.cmsis.pack.ui.CpStringsUI;
import com.arm.cmsis.pack.ui.IHelpContextIds;
import com.arm.cmsis.pack.ui.widgets.RtePackSelectorWidget;
/**
* Editor page that wraps RteManagerWidget
*
*/
public class RtePackPage extends RteEditorPage {
protected RtePackSelectorWidget rtePackSelectorTree = null;
IAction useLatestAction = null;
IAction resolveMissingPacksAction = null;
public RtePackPage() {
rtePackSelectorTree = new RtePackSelectorWidget();
}
@Override
public void setModelController(IRteModelController model) {
super.setModelController(model);
rtePackSelectorTree.setModelController(model);
update();
}
@Override
public Composite getFocusWidget() {
return rtePackSelectorTree.getFocusWidget();
}
@Override
public void createPageContent(Composite parent) {
rtePackSelectorTree.createControl(parent);
headerWidget.setFocusWidget(getFocusWidget());
PlatformUI.getWorkbench().getHelpSystem().setHelp(getFocusWidget(), IHelpContextIds.PACKS_PAGE);
}
@Override
protected void setupHeader() {
headerWidget.setLabel(CpStringsUI.RteConfigurationEditor_PacksTab, CpPlugInUI.getImage(CpPlugInUI.ICON_PACKAGES_FILTER));
useLatestAction = new Action(CpStringsUI.UseAllLatestPacks, IAction.AS_CHECK_BOX) {
@Override
public void run() {
setUseAllLatest(isChecked());
}
};
useLatestAction.setToolTipText(CpStringsUI.UseAllLatestPacksTooltip);
headerWidget.addAction(useLatestAction, SWT.LEFT, true);
resolveMissingPacksAction = new Action(CpStringsUI.RteComponentTreeWidget_Install, IAction.AS_PUSH_BUTTON) {
@Override
public void run() {
IRteModelController model = getModelController();
if (model != null) {
final ICpPackInstaller packInstaller = CpPlugIn.getPackManager().getPackInstaller();
if (packInstaller == null) {
return;
}
String packRoot = CpPlugIn.getPackManager().getCmsisPackRootDirectory();
if (packRoot == null || packRoot.isEmpty()){
return;
}
for (String packId : RteModelUtils.getMissingPacks(model)) {
if (CpPlugIn.getPackManager().getInstalledPacks().getPack(packId) != null) {
model.setUseAllLatestPacks(true);
} else {
packInstaller.installPack(packId);
}
}
}
}
};
resolveMissingPacksAction.setToolTipText(CpStringsUI.RteComponentTreeWidget_InstallMissingPacks);
resolveMissingPacksAction.setImageDescriptor(CpPlugInUI.getImageDescriptor(CpPlugInUI.ICON_RTE));
resolveMissingPacksAction.setDisabledImageDescriptor(CpPlugInUI.getImageDescriptor(CpPlugInUI.ICON_RTE_GREY));
headerWidget.addAction(resolveMissingPacksAction, SWT.LEFT, true);
super.setupHeader();
}
void setUseAllLatest(boolean bUse) {
if(fModelController != null){
fModelController.setUseAllLatestPacks(bUse);
}
}
void updateUseAllLatest() {
boolean bUse = true;
if(fModelController != null){
bUse = fModelController.isUseAllLatestPacks();
}
useLatestAction.setChecked(bUse);
if(bUse) {
useLatestAction.setImageDescriptor(CpPlugInUI.getImageDescriptor(CpPlugInUI.ICON_CHECKED));
} else {
useLatestAction.setImageDescriptor(CpPlugInUI.getImageDescriptor(CpPlugInUI.ICON_UNCHECKED));
}
}
@Override
public void handle(RteEvent event) {
switch(event.getTopic()) {
case RteEvent.FILTER_MODIFIED:
update();
return;
default:
super.handle(event);
}
}
@Override
public void update() {
if (getModelController() != null && rtePackSelectorTree != null) {
bModified = getModelController().isPackFilterModified();
headerWidget.setModified(bModified);
Collection<String> missingPacks = RteModelUtils.getMissingPacks(getModelController());
resolveMissingPacksAction.setEnabled(!missingPacks.isEmpty());
}
refresh();
super.update();
}
@Override
public void refresh() {
updateUseAllLatest();
rtePackSelectorTree.refresh();
}
}