/*
* MiniDialogPopupPanel.java
*
* Copyright (C) 2009-12 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.core.client.widget;
import org.rstudio.core.client.resources.ImageResource2x;
import org.rstudio.core.client.theme.res.ThemeResources;
import org.rstudio.core.client.theme.res.ThemeStyles;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.DecoratedPopupPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
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 abstract class MiniDialogPopupPanel extends DecoratedPopupPanel
{
public MiniDialogPopupPanel()
{
super();
commonInit();
}
public MiniDialogPopupPanel(boolean autoHide)
{
super(autoHide);
commonInit();
}
public MiniDialogPopupPanel(boolean autoHide, boolean modal)
{
super(autoHide, modal);
commonInit();
}
private void commonInit()
{
addStyleName(ThemeStyles.INSTANCE.miniDialogPopupPanel());
verticalPanel_ = new VerticalPanel();
verticalPanel_.setStyleName(ThemeStyles.INSTANCE.miniDialogContainer());
// title bar
HorizontalPanel titleBar = new HorizontalPanel();
titleBar.setWidth("100%");
captionLabel_ = new Label();
captionLabel_.setStyleName(ThemeStyles.INSTANCE.miniDialogCaption());
titleBar.add(captionLabel_);
titleBar.setCellHorizontalAlignment(captionLabel_,
HasHorizontalAlignment.ALIGN_LEFT);
HorizontalPanel toolsPanel = new HorizontalPanel();
toolsPanel.setStyleName(ThemeStyles.INSTANCE.miniDialogTools());
ToolbarButton hideButton = new ToolbarButton(
new ImageResource2x(ThemeResources.INSTANCE.closeChevron2x()),
new ClickHandler() {
public void onClick(ClickEvent event)
{
MiniDialogPopupPanel.this.hideMiniDialog();
}
});
hideButton.setTitle("Close");
toolsPanel.add(hideButton);
titleBar.add(toolsPanel);
titleBar.setCellHorizontalAlignment(toolsPanel,
HasHorizontalAlignment.ALIGN_RIGHT);
verticalPanel_.add(titleBar);
// main widget
verticalPanel_.add(createMainWidget());
setWidget(verticalPanel_);
}
public void setCaption(String caption)
{
captionLabel_.setText(caption);
}
protected abstract Widget createMainWidget();
protected void hideMiniDialog()
{
hide();
restorePreviouslyFocusedElement();
}
// TODO: refactor so the originally active element code is
// shared between MiniDialogPopupPanel and ModalDialogBase
public void recordPreviouslyFocusedElement()
{
focusContext_.record();
}
protected void restorePreviouslyFocusedElement()
{
focusContext_.restore();
}
private VerticalPanel verticalPanel_;
private Label captionLabel_ ;
private FocusContext focusContext_ = new FocusContext();
}