/* * ChunkConditionBar.java * * Copyright (C) 2009-16 by RStudio, Inc. * * Unless you have received this program directly from RStudio pursuant * to the terms of a commercial license agreement with RStudio, then * this program is licensed to you under the terms of version 3 of the * GNU Affero General Public License. This program is distributed WITHOUT * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. * */ package org.rstudio.studio.client.workbench.views.source.editors.text; import org.rstudio.core.client.ColorUtil; import org.rstudio.core.client.js.JsArrayEx; import org.rstudio.studio.client.workbench.views.source.editors.text.rmd.ChunkOutputUi; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JsArray; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; public class ChunkConditionBar extends Composite implements EditorThemeListener { private static ChunkConditionBarUiBinder uiBinder = GWT .create(ChunkConditionBarUiBinder.class); interface ChunkConditionBarUiBinder extends UiBinder<Widget, ChunkConditionBar> { } public interface ConditionStyle extends CssResource { String contents(); } public ChunkConditionBar(JsArray<JsArrayEx> conditions, ChunkOutputSize chunkOutputSize) { chunkOutputSize_ = chunkOutputSize; initWidget(uiBinder.createAndBindUi(this)); for (int i = 0; i < conditions.length(); i++) { HorizontalPanel bar = null; VerticalPanel contents = null; if (conditions.get(i).getInt(0) == CONDITION_MESSAGE) { bar = messageBar_; contents = messages_; } else if (conditions.get(i).getInt(0) == CONDITION_WARNING) { bar = warningBar_; contents = warnings_; } else { continue; } bar.setVisible(true); Label entry = new Label(conditions.get(i).getString(1)); entry.addStyleName(style.contents()); contents.add(entry); } if (chunkOutputSize_ != ChunkOutputSize.Full) { // limit bar width to plot width getElement().getStyle().setProperty("maxWidth", "" + ChunkOutputUi.MAX_PLOT_WIDTH + "px"); } } @Override public void onEditorThemeChanged(Colors colors) { // create a background color by softening the foreground ColorUtil.RGBColor foreground = ColorUtil.RGBColor.fromCss(colors.foreground); ColorUtil.RGBColor background = new ColorUtil.RGBColor( foreground.red(), foreground.green(), foreground.blue(), 0.075); panel_.getElement().getStyle().setBackgroundColor(background.asRgb()); } @UiField HorizontalPanel messageBar_; @UiField HorizontalPanel warningBar_; @UiField VerticalPanel messages_; @UiField VerticalPanel warnings_; @UiField ConditionStyle style; @UiField VerticalPanel panel_; // symmetric with enum on server public final static int CONDITION_MESSAGE = 0; public final static int CONDITION_WARNING = 1; final ChunkOutputSize chunkOutputSize_; }