package org.nightlabs.jfire.asterisk.ui.asteriskserver;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.editor.RestorableSectionPart;
import org.nightlabs.base.ui.entity.editor.EntityEditorUtil;
import org.nightlabs.base.ui.language.I18nTextEditor;
import org.nightlabs.base.ui.language.I18nTextEditor.EditMode;
import org.nightlabs.jfire.asterisk.AsteriskServer;
import org.nightlabs.jfire.asterisk.ui.resource.Messages;
/**
* @author Chairat Kongarayawetchakun <!-- chairat [AT] nightlabs [DOT] de -->
* @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
*/
public class AsteriskServerBasicSection
extends RestorableSectionPart
{
private I18nTextEditor name;
private Text callFileDirectory;
private Text internationalCallPrefix;
private boolean ignoreModifyEvents = false;
public AsteriskServerBasicSection(FormPage page, Composite parent) {
super(parent, page.getEditor().getToolkit(), ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
createClient(getSection(), page.getEditor().getToolkit());
}
private void createClient(Section section, FormToolkit toolkit) {
section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
section.setText(Messages.getString("org.nightlabs.jfire.asterisk.ui.asteriskserver.AsteriskServerBasicSection.title")); //$NON-NLS-1$
Composite container = EntityEditorUtil.createCompositeClient(toolkit, section, 1);
ModifyListener markDirtyModifyListener = new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (!ignoreModifyEvents)
markDirty();
}
};
name = new I18nTextEditor(container, Messages.getString("org.nightlabs.jfire.asterisk.ui.asteriskserver.AsteriskServerBasicSection.nameLabel.text")); //$NON-NLS-1$
name.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
name.addModifyListener(markDirtyModifyListener);
Label callFileDirectoryLabel = new Label(container, SWT.NONE);
callFileDirectoryLabel.setText(Messages.getString("org.nightlabs.jfire.asterisk.ui.asteriskserver.AsteriskServerBasicSection.callFileDirectoryLabel.text")); //$NON-NLS-1$
callFileDirectoryLabel.setToolTipText(Messages.getString("org.nightlabs.jfire.asterisk.ui.asteriskserver.AsteriskServerBasicSection.callFileDirectoryLabel.toolTipText")); //$NON-NLS-1$
callFileDirectory = new Text(container, XComposite.getBorderStyle(container));
callFileDirectory.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
callFileDirectory.setToolTipText(callFileDirectoryLabel.getToolTipText());
callFileDirectory.addModifyListener(markDirtyModifyListener);
Label internationalCallPrefixLabel = new Label(container, SWT.NONE);
internationalCallPrefixLabel.setText(Messages.getString("org.nightlabs.jfire.asterisk.ui.asteriskserver.AsteriskServerBasicSection.internationalCallPrefixLabel.text")); //$NON-NLS-1$
internationalCallPrefixLabel.setToolTipText(Messages.getString("org.nightlabs.jfire.asterisk.ui.asteriskserver.AsteriskServerBasicSection.internationalCallPrefixLabel.toolTipText")); //$NON-NLS-1$
internationalCallPrefix = new Text(container, XComposite.getBorderStyle(container));
internationalCallPrefix.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
internationalCallPrefix.setToolTipText(internationalCallPrefixLabel.getToolTipText());
internationalCallPrefix.addModifyListener(markDirtyModifyListener);
}
@Override
public boolean setFormInput(Object input) {
this.asteriskServer = (AsteriskServer) input;
return super.setFormInput(input);
}
@Override
public void refresh() {
ignoreModifyEvents = true;
try {
if (asteriskServer != null) {
name.setI18nText(asteriskServer.getName(), EditMode.DIRECT);
callFileDirectory.setText(asteriskServer.getCallFileDirectory());
internationalCallPrefix.setText(asteriskServer.getInternationalCallPrefix());
}
super.refresh();
} finally {
ignoreModifyEvents = false;
}
}
@Override
public void commit(boolean onSave) {
if (asteriskServer != null) {
asteriskServer.setCallFileDirectory(callFileDirectory.getText());
asteriskServer.setInternationalCallPrefix(internationalCallPrefix.getText());
}
super.commit(onSave);
}
private AsteriskServer asteriskServer;
}