/**
* Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.editor.commentblocks;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.python.pydev.plugin.PydevPlugin;
import org.python.pydev.shared_core.string.FastStringBuffer;
import org.python.pydev.shared_ui.FontUtils;
import org.python.pydev.shared_ui.IFontUsage;
public class CommentBlocksPreferences extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
private StringFieldEditor multiBlock;
private StringFieldEditor singleBlock;
private BooleanFieldEditor alignSingle;
private Label labelMulti;
private Label labelSingle;
public CommentBlocksPreferences() {
super(FLAT);
setPreferenceStore(PydevPlugin.getDefault().getPreferenceStore());
setDescription("Comment Block Preferences");
}
public static final String MULTI_BLOCK_COMMENT_CHAR = "MULTI_BLOCK_COMMENT_CHAR";
public static final String DEFAULT_MULTI_BLOCK_COMMENT_CHAR = "=";
public static final String MULTI_BLOCK_COMMENT_SHOW_ONLY_CLASS_NAME = "MULTI_BLOCK_COMMENT_SHOW_ONLY_CLASS_NAME";
public static final boolean DEFAULT_MULTI_BLOCK_COMMENT_SHOW_ONLY_CLASS_NAME = true;
public static final String MULTI_BLOCK_COMMENT_SHOW_ONLY_FUNCTION_NAME = "MULTI_BLOCK_COMMENT_SHOW_ONLY_FUNCTION_NAME";
public static final boolean DEFAULT_MULTI_BLOCK_COMMENT_SHOW_ONLY_FUNCTION_NAME = true;
public static final String SINGLE_BLOCK_COMMENT_CHAR = "SINGLE_BLOCK_COMMENT_CHAR";
public static final String DEFAULT_SINGLE_BLOCK_COMMENT_CHAR = "-";
public static final String SINGLE_BLOCK_COMMENT_ALIGN_RIGHT = "SINGLE_BLOCK_COMMENT_ALIGN_RIGHT";
public static final boolean DEFAULT_SINGLE_BLOCK_COMMENT_ALIGN_RIGHT = true;
@Override
protected void createFieldEditors() {
final Composite p = getFieldEditorParent();
multiBlock = new StringFieldEditor(MULTI_BLOCK_COMMENT_CHAR, "Multi-block char (ctrl+4):", 2, p);
multiBlock.getTextControl(p).setTextLimit(1);
multiBlock.setEmptyStringAllowed(false);
addField(multiBlock);
addField(new BooleanFieldEditor(MULTI_BLOCK_COMMENT_SHOW_ONLY_CLASS_NAME,
"In a class name, create block only with class name above of class?", p));
addField(new BooleanFieldEditor(MULTI_BLOCK_COMMENT_SHOW_ONLY_FUNCTION_NAME,
"In a function name, create block only with function name above of function?", p));
labelMulti = new Label(p, SWT.NONE);
singleBlock = new StringFieldEditor(SINGLE_BLOCK_COMMENT_CHAR, "Single-block char (ctrl+shift+4):", 2, p);
singleBlock.setEmptyStringAllowed(false);
singleBlock.getTextControl(p).setTextLimit(1);
addField(singleBlock);
alignSingle = new BooleanFieldEditor(SINGLE_BLOCK_COMMENT_ALIGN_RIGHT,
"Align text in single-block to the right?", p);
addField(alignSingle);
labelSingle = new Label(p, SWT.NONE);
IPreferenceStore store = getPreferenceStore();
setLabelFont(p, labelSingle);
setLabelFont(p, labelMulti);
updateMulti(store.getString(MULTI_BLOCK_COMMENT_CHAR));
updateSingle(store.getString(SINGLE_BLOCK_COMMENT_CHAR), store.getBoolean(SINGLE_BLOCK_COMMENT_ALIGN_RIGHT));
}
private void setLabelFont(Composite composite, Label label) {
try {
FontData labelFontData = FontUtils.getFontData(IFontUsage.WIDGET, true);
labelFontData.setStyle(SWT.BOLD);
label.setFont(new Font(composite.getDisplay(), labelFontData));
} catch (Throwable e) {
//ignore
}
}
private void updateSingle(String val, boolean alignToRight) {
FastStringBuffer buf = new FastStringBuffer(200);
if (val.length() == 0) {
buf.append("Invalid");
buf.appendN(' ', 23);
} else {
buf.appendN(val.charAt(0), 10); //Use only the pos 0!
if (alignToRight) {
buf.append(" my single block");
} else {
buf.insert(0, " my single block ");
}
buf.insert(0, '#');
}
labelSingle.setText("Result:\n" + buf.toString());
}
private void updateMulti(String val) {
FastStringBuffer buf = new FastStringBuffer(200);
if (val.length() == 0) {
buf.append("Invalid");
buf.appendN(' ', 23);
buf.append('\n');
buf.appendN(' ', 30);
buf.append('\n');
buf.appendN(' ', 30);
} else {
buf.append("#");
buf.appendN(val.charAt(0), 26); //Use only the pos 0!
buf.append("\n# my multi block");
buf.append("\n#");
buf.appendN(val.charAt(0), 26);
}
labelMulti.setText("Result:\n" + buf.toString() + "\n\n\n");
}
@Override
public void init(IWorkbench workbench) {
// pass
}
@Override
public void propertyChange(PropertyChangeEvent event) {
super.propertyChange(event);
if (multiBlock.equals(event.getSource())) {
updateMulti(multiBlock.getStringValue());
} else if (singleBlock.equals(event.getSource()) || alignSingle.equals(event.getSource())) {
updateSingle(singleBlock.getStringValue(), alignSingle.getBooleanValue());
}
}
}