/*
* HistoryTableWithToolbar.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.studio.client.workbench.views.history.view;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.HasAllKeyHandlers;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import org.rstudio.core.client.Rectangle;
import org.rstudio.studio.client.workbench.views.history.HasHistory;
import org.rstudio.studio.client.workbench.views.history.model.HistoryEntry;
import java.util.ArrayList;
public class HistoryTableWithToolbar extends Composite
implements HasHistory, HasAllKeyHandlers
{
public HistoryTableWithToolbar(HistoryTable table,
Widget[] leftWidgets,
Widget[] rightWidgets)
{
DockLayoutPanel panel = new DockLayoutPanel(Unit.PX);
Shelf toolbar = new Shelf();
toolbar.setWidth("100%");
if (leftWidgets != null)
{
for (int i = 0; i < leftWidgets.length; i++)
{
toolbar.addLeftWidget(leftWidgets[i]);
}
}
if (rightWidgets != null)
{
for (int i = 0; i < rightWidgets.length; i++)
{
toolbar.addRightWidget(rightWidgets[i]);
}
}
panel.addNorth(toolbar, toolbar.getHeight());
historyTable_ = table;
scrollPanel_ = new ScrollPanel(historyTable_);
scrollPanel_.getElement().getStyle().setProperty("overflowX", "hidden");
scrollPanel_.setSize("100%", "100%");
panel.add(scrollPanel_);
historyTable_.setOwningScrollPanel(scrollPanel_);
initWidget(panel);
}
public void clear()
{
historyTable_.clear();
}
public void addItems(ArrayList<HistoryEntry> entries, boolean top)
{
historyTable_.addItems(entries, top);
}
public ArrayList<String> getSelectedValues()
{
return historyTable_.getSelectedValues();
}
public ArrayList<Long> getSelectedCommandIndexes()
{
return historyTable_.getSelectedValues2();
}
public boolean moveSelectionUp()
{
return historyTable_.moveSelectionUp();
}
public boolean moveSelectionDown()
{
return historyTable_.moveSelectionDown();
}
public HasAllKeyHandlers getKeyTarget()
{
return historyTable_;
}
public void highlightRows(int offset, int length)
{
historyTable_.clearSelection();
historyTable_.setSelected(offset, length, true);
Rectangle rect = historyTable_.getSelectionRect();
if (rect == null)
return;
int height = scrollPanel_.getOffsetHeight();
if (rect.getHeight() > height)
scrollPanel_.setVerticalScrollPosition(rect.getTop());
else
scrollPanel_.setVerticalScrollPosition(
rect.getTop() - (height - rect.getHeight())/2);
}
public HandlerRegistration addKeyUpHandler(KeyUpHandler handler)
{
return historyTable_.addKeyUpHandler(handler);
}
public HandlerRegistration addKeyDownHandler(KeyDownHandler handler)
{
return historyTable_.addKeyDownHandler(handler);
}
public HandlerRegistration addKeyPressHandler(KeyPressHandler handler)
{
return historyTable_.addKeyPressHandler(handler);
}
public Element getFocusTarget()
{
return historyTable_.getElement();
}
private final HistoryTable historyTable_;
private ScrollPanel scrollPanel_;
}