// Copyright 2012 Jeeeyul Lee, Seoul, Korea // https://github.com/jeeeyul/pde-tools // // This module is multi-licensed and may be used under the terms // of any of the following licenses: // // EPL, Eclipse Public License, V1.0 or later, http://www.eclipse.org/legal // LGPL, GNU Lesser General Public License, V2.1 or later, http://www.gnu.org/licenses/lgpl.html // GPL, GNU General Public License, V2 or later, http://www.gnu.org/licenses/gpl.html // AL, Apache License, V2.0 or later, http://www.apache.org/licenses // BSD, BSD License, http://www.opensource.org/licenses/bsd-license.php // MIT, MIT License, http://www.opensource.org/licenses/MIT // // Please contact the author if you need another license. // This module is provided "as is", without warranties of any kind. package net.jeeeyul.eclipse.themes; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.e4.ui.css.swt.theme.IThemeEngine; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.ui.progress.UIJob; /** * Add "empty" class(CSS) into {@link CTabFolder} when there is no item. */ @SuppressWarnings("restriction") public class UpdateCTabFolderClassesJob extends UIJob { private CTabFolder folder; public UpdateCTabFolderClassesJob(CTabFolder folder) { super("Update CTabFolder CSS"); this.folder = folder; this.setSystem(true); } @Override public IStatus runInUIThread(IProgressMonitor arg0) { if (folder == null || folder.isDisposed()) { return Status.OK_STATUS; } CSSClasses classes = CSSClasses.getStyleClasses(folder); boolean haveToSetEmpty = folder.getItemCount() == 0; if (haveToSetEmpty) { classes.add("empty"); classes.remove("nonEmpty"); } else { classes.remove("empty"); classes.add("nonEmpty"); } CSSClasses.setStyleClasses(folder, classes); getThemeEngine().applyStyles(folder, true); return Status.OK_STATUS; } private IThemeEngine getThemeEngine() { return (IThemeEngine) folder.getDisplay().getData( "org.eclipse.e4.ui.css.swt.theme"); } @Override public boolean shouldSchedule() { return folder != null && !folder.isDisposed(); } @Override public boolean shouldRun() { return shouldSchedule(); } }