/*******************************************************************************
* 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.widgets;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import com.arm.cmsis.pack.events.IRteEventListener;
import com.arm.cmsis.pack.events.RteEvent;
import com.arm.cmsis.pack.rte.IRteModelController;
public abstract class RteWidget implements IRteEventListener {
protected IRteModelController fModelController = null; // contains RteComponents
protected IRteColumnAdvisor fColumnAdvisor = null;
/**
* Sets an RTE model controller to be used by the widget
* @param IRteModelController controller to use
*/
public void setModelController(IRteModelController modelController) {
if(fColumnAdvisor != null)
fColumnAdvisor.setModelController(modelController);
if(fModelController == modelController)
return;
if(fModelController != null)
fModelController.removeListener(this);
fModelController = modelController;
if(fModelController != null)
fModelController.addListener(this);
}
/**
* Returns RTE model controller used by the widget
* @return IRteModelController
*/
public IRteModelController getModelController() {
return fModelController;
}
/**
* Returns Column adviser
* @return IColumnAdvisor
*/
public IRteColumnAdvisor getColumnAdvisor() {
return fColumnAdvisor;
}
/**
* Sets column adviser
* @param columnAdvisor IColumnAdvisor
*/
public void setColumnAdvisor(IRteColumnAdvisor columnAdvisor) {
fColumnAdvisor = columnAdvisor;
}
/**
* Refresh UI without changing configuration
*/
public abstract void refresh();
/**
* refresh UI after having changed configuration
*/
public abstract void update();
/**
* Creates actual control
* @param parent parent composite
* @return created control
*/
public abstract Composite createControl(Composite parent);
/**
* Returns Composite that should be used as focus widget
* @return widget to set focus to
*/
public abstract Composite getFocusWidget();
@Override
public void handle(RteEvent event) {
switch(event.getTopic()) {
case RteEvent.CONFIGURATION_COMMITED:
case RteEvent.CONFIGURATION_MODIFIED:
asyncUpdate();
return;
default:
break;
}
}
/**
* Updates widget asynchronously, runs in GUI thread
*/
protected void asyncUpdate() {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
update();
}
});
}
}