/******************************************************************************* * Copyright (c) 2013 Zend Techologies Ltd. * 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: * Zend Technologies Ltd. - initial API and implementation *******************************************************************************/ package org.eclipse.php.formatter.ui.preferences; import java.util.Observable; import java.util.Observer; import org.eclipse.php.formatter.core.profiles.CodeFormatterPreferences; import org.eclipse.php.formatter.ui.FormatterMessages; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; public class ControlStatementsTabPage extends ModifyDialogTabPage { private boolean isInitialized = false; private final String PREVIEW = "<?php\n" + createPreviewHeader(FormatterMessages.ControlStatementsTabPage_preview_header) + "class Example { function bar() { do {} while ( true );" + "try {} catch ( Exception $e ) { } finally {}} function foo2() {if (true) {return;}" + "if (true) {return;} elseif (false) {return;} else { return;}}" //$NON-NLS-1$ + "function foo($s) { if (true) return; if (true) return; else if (false) return; else return;}}?>"; private CodeFormatterPreview fPreview; protected CheckboxPreference fThenStatementPref, fSimpleIfPref, newLineBeforeElseCB, newLineBeforeCatchCB, newLineBeforeFinallyCB, newLineBeforeWhileCB, ifElseSameLineCB, elseIfSameLineCB, guardianSameLineCB; public ControlStatementsTabPage(ModifyDialog modifyDialog, CodeFormatterPreferences codeFormatterPreferences) { super(modifyDialog, codeFormatterPreferences); } @Override protected void doCreatePreferences(Composite composite, int numColumns) { final Group generalGroup = createGroup(numColumns, composite, FormatterMessages.ControlStatementsTabPage_general_group_title); newLineBeforeElseCB = createOption(generalGroup, numColumns, FormatterMessages.ControlStatementsTabPage_general_group_insert_new_line_before_else_and_elseif_statements); newLineBeforeElseCB .setIsChecked(codeFormatterPreferences.control_statement_insert_newline_before_else_and_elseif_in_if); newLineBeforeCatchCB = createOption(generalGroup, numColumns, FormatterMessages.ControlStatementsTabPage_general_group_insert_new_line_before_catch_statements); newLineBeforeCatchCB .setIsChecked(codeFormatterPreferences.control_statement_insert_newline_before_catch_in_try); newLineBeforeFinallyCB = createOption(generalGroup, numColumns, FormatterMessages.ControlStatementsTabPage_general_group_insert_new_line_before_finally_statements); newLineBeforeFinallyCB .setIsChecked(codeFormatterPreferences.control_statement_insert_newline_before_finally_in_try); newLineBeforeWhileCB = createOption(generalGroup, numColumns, FormatterMessages.ControlStatementsTabPage_general_group_insert_new_line_before_while_in_do_statements); newLineBeforeWhileCB.setIsChecked(codeFormatterPreferences.control_statement_insert_newline_before_while_in_do); final Group ifElseGroup = createGroup(numColumns, composite, FormatterMessages.ControlStatementsTabPage_if_else_group_title); fThenStatementPref = createOption(ifElseGroup, numColumns, FormatterMessages.ControlStatementsTabPage_if_else_group_keep_then_on_same_line); fThenStatementPref.setIsChecked(codeFormatterPreferences.control_statement_keep_then_on_same_line); Label l = new Label(ifElseGroup, SWT.NONE); GridData gd = new GridData(); gd.widthHint = fPixelConverter.convertWidthInCharsToPixels(4); l.setLayoutData(gd); fSimpleIfPref = createOption(ifElseGroup, numColumns - 1, FormatterMessages.ControlStatementsTabPage_if_else_group_keep_simple_if_on_one_line); fSimpleIfPref.setIsChecked(codeFormatterPreferences.control_statement_keep_simple_if_on_one_line); fThenStatementPref.addObserver(new Observer() { @Override public void update(Observable o, Object arg) { fSimpleIfPref.setEnabled(!fThenStatementPref.isChecked()); } }); fSimpleIfPref.setEnabled(!fThenStatementPref.isChecked()); ifElseSameLineCB = createOption(ifElseGroup, numColumns, FormatterMessages.ControlStatementsTabPage_if_else_group_keep_else_on_same_line); ifElseSameLineCB.setIsChecked(codeFormatterPreferences.control_statement_keep_else_on_same_line); elseIfSameLineCB = createCheckboxPref(ifElseGroup, numColumns, FormatterMessages.ControlStatementsTabPage_if_else_group_keep_else_if_on_one_line); elseIfSameLineCB.setIsChecked(codeFormatterPreferences.control_statement_keep_else_if_on_same_line); guardianSameLineCB = createCheckboxPref(ifElseGroup, numColumns, FormatterMessages.ControlStatementsTabPage_if_else_group_keep_guardian_clause_on_one_line); guardianSameLineCB.setIsChecked(codeFormatterPreferences.control_statement_keep_guardian_on_one_line); isInitialized = true; } @Override protected void initializePage() { fPreview.setPreviewText(PREVIEW); } /* * (non-Javadoc) * * @see * org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage * #doCreateJavaPreview(org.eclipse.swt.widgets.Composite) */ @Override protected PHPPreview doCreatePhpPreview(Composite parent) { fPreview = new CodeFormatterPreview(codeFormatterPreferences, parent); return fPreview; } /* * (non-Javadoc) * * @see * org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage * #doUpdatePreview() */ @Override protected void doUpdatePreview() { fPreview.update(); } private CheckboxPreference createOption(Composite composite, int span, String name) { return createCheckboxPref(composite, span, name); } @Override protected void updatePreferences() { if (isInitialized) { codeFormatterPreferences.control_statement_insert_newline_before_else_and_elseif_in_if = newLineBeforeElseCB .isChecked(); codeFormatterPreferences.control_statement_insert_newline_before_catch_in_try = newLineBeforeCatchCB .isChecked(); codeFormatterPreferences.control_statement_insert_newline_before_finally_in_try = newLineBeforeFinallyCB .isChecked(); codeFormatterPreferences.control_statement_insert_newline_before_while_in_do = newLineBeforeWhileCB .isChecked(); codeFormatterPreferences.control_statement_keep_then_on_same_line = fThenStatementPref.isChecked(); codeFormatterPreferences.control_statement_keep_simple_if_on_one_line = fSimpleIfPref.isChecked(); codeFormatterPreferences.control_statement_keep_else_on_same_line = ifElseSameLineCB.isChecked(); codeFormatterPreferences.control_statement_keep_else_if_on_same_line = elseIfSameLineCB.isChecked(); codeFormatterPreferences.control_statement_keep_guardian_on_one_line = guardianSameLineCB.isChecked(); } } }