/*******************************************************************************
* Copyright (c) 2013 RelationWare, Benno Luthiger
* 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:
* RelationWare, Benno Luthiger
******************************************************************************/
package org.ripla.rap.demo.config.views;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.ripla.interfaces.IMessages;
import org.ripla.rap.demo.config.Activator;
import org.ripla.rap.demo.config.controller.SkinSelectController;
import org.ripla.rap.demo.config.data.SkinBean;
import org.ripla.rap.demo.config.data.SkinConfigRegistry;
import org.ripla.rap.util.AbstractRiplaView;
/**
* The view to configure the active skin for the application.
*
* @author Luthiger
*/
@SuppressWarnings("serial")
public class SkinConfigurationView extends AbstractRiplaView {
/**
* SkinConfigurationView constructor.
*
* @param inParent
* @param inController
* @param inSkinId
* String
*/
public SkinConfigurationView(final Composite inParent,
final SkinSelectController inController, final String inSkinId) {
super(inParent);
final IMessages lMessages = Activator.getMessages();
createTitle(lMessages.getMessage("config.skin.page.title"));
final SkinModel lModel = new SkinModel(inSkinId);
final Combo lSkinSelect = new Combo(this, SWT.READ_ONLY);
lSkinSelect.setItems(lModel.getSkins());
lSkinSelect.select(lModel.getSelected());
lSkinSelect.setFocus();
final Button lSave = new Button(this, SWT.PUSH);
getShell().setDefaultButton(lSave);
lSave.setText(lMessages.getMessage("config.view.button.save"));
lSave.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent inEvent) {
inController.save(lModel.getSkinId(lSkinSelect
.getSelectionIndex()));
}
});
}
// ---
private static class SkinModel {
private final List<SkinBean> skins;
private final String activeSkinId;
int selected = 0;
protected SkinModel(final String inActiveSkin) {
skins = SkinConfigRegistry.INSTANCE.getSkins();
activeSkinId = inActiveSkin;
}
protected String[] getSkins() {
final String[] out = new String[skins.size()];
int i = 0;
for (final SkinBean lSkin : skins) {
if (activeSkinId.equals(lSkin.getID())) {
selected = i;
}
out[i++] = lSkin.getName();
}
return out;
}
protected String getSkinId(final int inIndex) {
return skins.get(inIndex).getID();
}
protected int getSelected() {
return selected;
}
}
}