blob: 7a4baba0de63312f990f70dedd46584f0b276172 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Mateusz Matela and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Mateusz Matela <mateusz.matela@gmail.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.preferences.formatter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
public class FormatterPreferenceSectionComposite extends ExpandableComposite {
// don't expand/collapse when click on header label gives focus
boolean fHasFocusBeforeClick= false;
boolean fExpandLock= false;
public FormatterPreferenceSectionComposite(Composite parent, int style, int expansionStyle) {
super(parent, style, expansionStyle);
textLabel.addListener(SWT.MouseEnter, e -> fHasFocusBeforeClick= toggle.isFocusControl());
textLabel.addListener(SWT.MouseDown, e -> fExpandLock= !fHasFocusBeforeClick || e.button != 1);
}
@Override
protected void internalSetExpanded(boolean expanded) {
if (fExpandLock) {
toggle.setExpanded(isExpanded());
fHasFocusBeforeClick= true;
fExpandLock= false;
} else {
super.internalSetExpanded(expanded);
}
}
@Override
public void setMenu(Menu menu) {
// add only to header, not the rest of the composite
textLabel.setMenu(menu);
}
}