/**
* erlyberly, erlang trace debugger
* Copyright (C) 2016 Andy Till
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package erlyberly;
import java.util.ArrayList;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SeparatorMenuItem;
import javafx.scene.input.Clipboard;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.KeyCombination;
public class TraceContextMenu extends ContextMenu {
private final DbgController dbgController;
private ObservableList<TraceLog> items, selectedItems;
public TraceContextMenu(DbgController aDbgContoller) {
dbgController = aDbgContoller;
getItems().add(menuItem("Copy All", "shortcut+c", this::onCopy));
getItems().add(menuItem("Copy Function Call", null, this::onCopyCalls));
getItems().add(new SeparatorMenuItem());
getItems().add(menuItem("Delete", "delete", this::onDelete));
getItems().add(menuItem("Delete All", "shortcut+n", this::onDeleteAll));
getItems().add(menuItem("Add Breaker", "shortcut+b", this::onAddBreaker));
getItems().add(menuItem("Toggle Trace", null, this::onTraceToggle));
}
private MenuItem menuItem(String text, String accelerator, EventHandler<ActionEvent> e) {
MenuItem menuItem;
menuItem = new MenuItem(text);
menuItem.setOnAction(e);
if(accelerator != null)
menuItem.setAccelerator(KeyCombination.keyCombination(accelerator));
return menuItem;
}
private void onCopy(ActionEvent e) {
StringBuilder sbuilder = new StringBuilder();
for (TraceLog traceLog : selectedItems) {
sbuilder.append(traceLog.toString()).append("\n");
}
copyToClipboard(sbuilder);
}
private void onCopyCalls(ActionEvent e) {
StringBuilder sbuilder = new StringBuilder();
for (TraceLog traceLog : selectedItems) {
sbuilder.append(traceLog.toCallString()).append("\n");
}
copyToClipboard(sbuilder);
}
private void copyToClipboard(StringBuilder sbuilder) {
final Clipboard clipboard = Clipboard.getSystemClipboard();
final ClipboardContent content = new ClipboardContent();
content.putString(sbuilder.toString());
clipboard.setContent(content);
}
private void onTraceToggle(ActionEvent e) {
for (TraceLog log : selectedItems) {
dbgController.toggleTraceModFunc(log.getModFunc());
}
}
private void onDelete(ActionEvent e) {
ArrayList<TraceLog> arrayList = new ArrayList<TraceLog>(selectedItems);
items.removeAll(arrayList);
}
private void onDeleteAll(ActionEvent e) {
items.clear();
}
public void setSelectedItems(ObservableList<TraceLog> selectedItems2) {
selectedItems = selectedItems2;
}
public void setItems(ObservableList<TraceLog> items2) {
items = items2;
}
private void onAddBreaker(ActionEvent e) {
items.add(TraceLog.newBreakLog());
}
}