1 /* 2 * HistoryTableWithToolbar.java 3 * 4 * Copyright (C) 2021 by RStudio, PBC 5 * 6 * Unless you have received this program directly from RStudio pursuant 7 * to the terms of a commercial license agreement with RStudio, then 8 * this program is licensed to you under the terms of version 3 of the 9 * GNU Affero General Public License. This program is distributed WITHOUT 10 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, 11 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the 12 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. 13 * 14 */ 15 package org.rstudio.studio.client.workbench.views.history.view; 16 17 import com.google.gwt.dom.client.Element; 18 import com.google.gwt.dom.client.Style.Unit; 19 import com.google.gwt.event.dom.client.HasAllKeyHandlers; 20 import com.google.gwt.event.dom.client.KeyDownHandler; 21 import com.google.gwt.event.dom.client.KeyPressHandler; 22 import com.google.gwt.event.dom.client.KeyUpHandler; 23 import com.google.gwt.event.shared.HandlerRegistration; 24 import com.google.gwt.user.client.ui.Composite; 25 import com.google.gwt.user.client.ui.DockLayoutPanel; 26 import com.google.gwt.user.client.ui.ScrollPanel; 27 import com.google.gwt.user.client.ui.Widget; 28 import org.rstudio.core.client.Rectangle; 29 import org.rstudio.studio.client.workbench.views.history.HasHistory; 30 import org.rstudio.studio.client.workbench.views.history.model.HistoryEntry; 31 32 import java.util.ArrayList; 33 34 public class HistoryTableWithToolbar extends Composite 35 implements HasHistory, HasAllKeyHandlers 36 { HistoryTableWithToolbar(HistoryTable table, Widget[] leftWidgets, Widget[] rightWidgets)37 public HistoryTableWithToolbar(HistoryTable table, 38 Widget[] leftWidgets, 39 Widget[] rightWidgets) 40 { 41 DockLayoutPanel panel = new DockLayoutPanel(Unit.PX); 42 43 Shelf toolbar = new Shelf(); 44 toolbar.setWidth("100%"); 45 46 if (leftWidgets != null) 47 { 48 for (int i = 0; i < leftWidgets.length; i++) 49 { 50 toolbar.addLeftWidget(leftWidgets[i]); 51 } 52 } 53 if (rightWidgets != null) 54 { 55 for (int i = 0; i < rightWidgets.length; i++) 56 { 57 toolbar.addRightWidget(rightWidgets[i]); 58 } 59 } 60 panel.addNorth(toolbar, toolbar.getHeight()); 61 62 historyTable_ = table; 63 scrollPanel_ = new ScrollPanel(historyTable_); 64 scrollPanel_.getElement().getStyle().setProperty("overflowX", "hidden"); 65 scrollPanel_.setSize("100%", "100%"); 66 panel.add(scrollPanel_); 67 68 historyTable_.setOwningScrollPanel(scrollPanel_); 69 70 initWidget(panel); 71 } 72 clear()73 public void clear() 74 { 75 historyTable_.clear(); 76 } 77 addItems(ArrayList<HistoryEntry> entries, boolean top)78 public void addItems(ArrayList<HistoryEntry> entries, boolean top) 79 { 80 historyTable_.addItems(entries, top); 81 } 82 getSelectedValues()83 public ArrayList<String> getSelectedValues() 84 { 85 return historyTable_.getSelectedValues(); 86 } 87 getSelectedCommandIndexes()88 public ArrayList<Long> getSelectedCommandIndexes() 89 { 90 return historyTable_.getSelectedValues2(); 91 } 92 moveSelectionUp()93 public boolean moveSelectionUp() 94 { 95 return historyTable_.moveSelectionUp(); 96 } 97 moveSelectionDown()98 public boolean moveSelectionDown() 99 { 100 return historyTable_.moveSelectionDown(); 101 } 102 getKeyTarget()103 public HasAllKeyHandlers getKeyTarget() 104 { 105 return historyTable_; 106 } 107 highlightRows(int offset, int length)108 public void highlightRows(int offset, int length) 109 { 110 historyTable_.clearSelection(); 111 historyTable_.setSelected(offset, length, true); 112 113 Rectangle rect = historyTable_.getSelectionRect(); 114 if (rect == null) 115 return; 116 int height = scrollPanel_.getOffsetHeight(); 117 if (rect.getHeight() > height) 118 scrollPanel_.setVerticalScrollPosition(rect.getTop()); 119 else 120 scrollPanel_.setVerticalScrollPosition( 121 rect.getTop() - (height - rect.getHeight())/2); 122 } 123 addKeyUpHandler(KeyUpHandler handler)124 public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) 125 { 126 return historyTable_.addKeyUpHandler(handler); 127 } 128 addKeyDownHandler(KeyDownHandler handler)129 public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) 130 { 131 return historyTable_.addKeyDownHandler(handler); 132 } 133 addKeyPressHandler(KeyPressHandler handler)134 public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) 135 { 136 return historyTable_.addKeyPressHandler(handler); 137 } 138 getFocusTarget()139 public Element getFocusTarget() 140 { 141 return historyTable_.getElement(); 142 } 143 144 private final HistoryTable historyTable_; 145 private ScrollPanel scrollPanel_; 146 } 147