org.ykc.usbcx.MainWindowController.java Source code

Java tutorial

Introduction

Here is the source code for org.ykc.usbcx.MainWindowController.java

Source

package org.ykc.usbcx;

import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.control.Tooltip;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableCell;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableRow;
import javafx.scene.control.TreeTableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TreeItemPropertyValueFactory;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
import java.util.ResourceBundle;

import org.apache.commons.io.FileUtils;
import org.controlsfx.control.StatusBar;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.ykc.usbcx.DetailsRow.BG;
import org.ykc.usbcx.XScope;

public class MainWindowController implements Initializable {

    public static final Logger logger = LoggerFactory.getLogger(MainWindowController.class.getName());

    @FXML
    private BorderPane bPaneMainWindow;

    @FXML
    private TabPane tabPaneMain;

    @FXML
    private TableView<MainViewRow> tViewMain;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewSno;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewOk;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewSop;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewMsg;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewId;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewDrole;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewProle;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewCount;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewRev;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewDuration;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewDelta;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewVbus;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewData;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewStartTime;

    @FXML
    private TableColumn<MainViewRow, String> tColMViewEndTime;

    @FXML // fx:id="ttViewParseViewer"
    private TreeTableView<DetailsRow> ttViewParseViewer; // Value injected by FXMLLoader

    @FXML // fx:id="ttColPVName"
    private TreeTableColumn<DetailsRow, String> ttColPVName; // Value injected by FXMLLoader

    @FXML // fx:id="ttColPVValue"
    private TreeTableColumn<DetailsRow, String> ttColPVValue; // Value injected by FXMLLoader

    @FXML // fx:id="ttColPVDecimal"
    private TreeTableColumn<DetailsRow, String> ttColPVDecimal; // Value injected by FXMLLoader

    @FXML // fx:id="ttColPVHex"
    private TreeTableColumn<DetailsRow, String> ttColPVHex; // Value injected by FXMLLoader

    @FXML // fx:id="ttColPVBinary"
    private TreeTableColumn<DetailsRow, String> ttColPVBinary; // Value injected by FXMLLoader

    @FXML // fx:id="ttColPVOffset"
    private TreeTableColumn<DetailsRow, String> ttColPVOffset; // Value injected by FXMLLoader

    @FXML // fx:id="ttColPVLength"
    private TreeTableColumn<DetailsRow, String> ttColPVLength; // Value injected by FXMLLoader

    @FXML
    private TableView<DataViewRow> tViewData;

    @FXML
    private TableColumn<DataViewRow, Integer> tColDataViewIndex;

    @FXML
    private TableColumn<DataViewRow, String> tColDataViewValue;

    @FXML
    private Button bOpen;

    @FXML
    private Button bSave;

    @FXML
    private Button bStartStop;

    @FXML
    private Button bReset;

    @FXML
    private Button bTrigger;

    @FXML
    private Button bGetVersion;

    @FXML
    private Button bDownload;

    @FXML
    private Button bAbout;

    @FXML // fx:id="bFirstPage"
    private Button bFirstPage; // Value injected by FXMLLoader

    @FXML // fx:id="bPrevPage"
    private Button bPrevPage; // Value injected by FXMLLoader

    @FXML // fx:id="bNextPage"
    private Button bNextPage; // Value injected by FXMLLoader

    @FXML // fx:id="bLastPage"
    private Button bLastPage; // Value injected by FXMLLoader

    @FXML
    private Button bCollapse;

    @FXML
    private Button bExpand;

    @FXML
    private StatusBar statusBar;

    @FXML // fx:id="cBoxDeviceList"
    private ComboBox<String> cBoxDeviceList; // Value injected by FXMLLoader

    @FXML // fx:id="lblStartDelta"
    private Label lblStartDelta; // Value injected by FXMLLoader

    @FXML
    private Label lblVolt;

    @FXML
    private Label lblCur;

    @FXML
    private Label lblCC1;

    @FXML
    private Label lblCC2;

    @FXML // fx:id="chkStartSno"
    private CheckBox chkStartSno; // Value injected by FXMLLoader

    @FXML // fx:id="chkEndSno"
    private CheckBox chkEndSno; // Value injected by FXMLLoader

    @FXML // fx:id="chkSop"
    private CheckBox chkSop; // Value injected by FXMLLoader

    @FXML
    private CheckBox chkCount;

    @FXML // fx:id="chkMsgId"
    private CheckBox chkMsgId; // Value injected by FXMLLoader

    @FXML // fx:id="chkMsgType"
    private CheckBox chkMsgType; // Value injected by FXMLLoader

    @FXML // fx:id="txtStartSno"
    private TextField txtStartSno; // Value injected by FXMLLoader

    @FXML // fx:id="txtEndSno"
    private TextField txtEndSno; // Value injected by FXMLLoader

    @FXML // fx:id="txtCount"
    private TextField txtCount; // Value injected by FXMLLoader

    @FXML // fx:id="txtMsgId"
    private TextField txtMsgId; // Value injected by FXMLLoader

    @FXML // fx:id="cBoxSop"
    private ComboBox<String> cBoxSop; // Value injected by FXMLLoader

    @FXML // fx:id="cBoxMsgType"
    private ComboBox<String> cBoxMsgType; // Value injected by FXMLLoader

    @FXML // fx:id="cBoxMsgClass"
    private ComboBox<String> cBoxMsgClass; // Value injected by FXMLLoader

    @FXML
    private RadioButton rbCC1Rp;

    @FXML
    private ToggleGroup tgGroupCC1;

    @FXML
    private RadioButton rbCC1Rd;

    @FXML
    private RadioButton rbCC2Rp;

    @FXML
    private ToggleGroup tgGroupCC2;

    @FXML
    private RadioButton rbCC1Ra;

    @FXML
    private RadioButton rbCC2Ra;

    @FXML
    private RadioButton rbCC2Rd;

    @FXML
    private RadioButton rbCC1None;

    @FXML
    private RadioButton rbCC2None;

    @FXML
    private RadioButton rbCC1Select;

    @FXML
    private ToggleGroup tgGroupCCSelect;

    @FXML
    private RadioButton rbCC2Select;

    @FXML
    private RadioButton rbEnableRpMonitor;

    @FXML
    private TextField txtCCDebounce;

    @FXML
    private TextField txtMaxScopeBuffer;

    @FXML
    private Button bSetTerm;

    @FXML
    private Button bClearTerm;

    @FXML
    private RadioButton rbEnablexScope;

    // xScope
    XScope lGraph;

    @FXML
    private LineChart<Number, Number> lchartData;

    @FXML
    private NumberAxis xAxis;

    @FXML
    private NumberAxis yAxis;

    @FXML
    private CheckBox chkGraphCC1;

    @FXML
    private CheckBox chkGraphCC2;

    @FXML
    private CheckBox chkGraphVbus;

    @FXML
    private CheckBox chkGraphAmp;

    @FXML
    private ComboBox<String> cboxGraphXScale;

    @FXML
    private Label lblGraphYValue;

    @FXML
    private Label lblGraphXValue;

    @FXML
    private Label lblGraphDeltaY;

    @FXML
    private Label lblGraphDeltaX;

    @FXML
    private Button bGraphScrollLeft;

    @FXML
    private Button bGraphScrollRight;
    // xScope

    private USBControl usbcontrol;
    private Stage myStage;
    private Cordinator cordinator;
    private ObservableList<File> partFileList;
    private int partListIdx = 0;
    private File scopeFile;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        Preferences.genTempFolders();
        Preferences.loadPreferences();
        bOpen.setGraphic(new ImageView(new Image("/open.png")));
        bOpen.setTooltip(new Tooltip("Open ucx1 file"));
        bSave.setGraphic(new ImageView(new Image("/save.png")));
        bSave.setTooltip(new Tooltip("Save ucx1 file"));
        bStartStop.setGraphic(new ImageView(new Image("/start_stop.png")));
        bStartStop.setTooltip(new Tooltip("Start/Stop Capture"));
        bReset.setGraphic(new ImageView(new Image("/reset.png")));
        bReset.setTooltip(new Tooltip("Reset and clear"));
        bTrigger.setGraphic(new ImageView(new Image("/trigger.png")));
        bTrigger.setTooltip(new Tooltip("Set Trigger"));
        bGetVersion.setGraphic(new ImageView(new Image("/version.png")));
        bGetVersion.setTooltip(new Tooltip("Get Version"));
        bDownload.setGraphic(new ImageView(new Image("/download.png")));
        bDownload.setTooltip(new Tooltip("Download FW"));
        bAbout.setGraphic(new ImageView(new Image("/info.png")));
        bAbout.setTooltip(new Tooltip("About USBCx"));
        bFirstPage.setGraphic(new ImageView(new Image("/double_arrow_left.png")));
        bFirstPage.setTooltip(new Tooltip("Go to First Page"));
        bPrevPage.setGraphic(new ImageView(new Image("/arrow_left.png")));
        bPrevPage.setTooltip(new Tooltip("Go to Previous Page"));
        bNextPage.setGraphic(new ImageView(new Image("/arrow_right.png")));
        bNextPage.setTooltip(new Tooltip("Go to Next Page"));
        bLastPage.setGraphic(new ImageView(new Image("/double_arrow_right.png")));
        bLastPage.setTooltip(new Tooltip("Go to Last Page"));
        bCollapse.setGraphic(new ImageView(new Image("/collapse.png")));
        bCollapse.setTooltip(new Tooltip("Collapse Items"));
        bExpand.setGraphic(new ImageView(new Image("/expand.png")));
        bExpand.setTooltip(new Tooltip("Expand Items"));
        bGraphScrollLeft.setGraphic(new ImageView(new Image("/arrow_left.png")));
        bGraphScrollLeft.setTooltip(new Tooltip("Previous plot"));
        bGraphScrollRight.setGraphic(new ImageView(new Image("/arrow_right.png")));
        bGraphScrollRight.setTooltip(new Tooltip("Next plot"));

        ttColPVName.setCellValueFactory(new TreeItemPropertyValueFactory<DetailsRow, String>("name"));
        ttColPVValue.setCellValueFactory(new TreeItemPropertyValueFactory<DetailsRow, String>("value"));
        ttColPVDecimal.setCellValueFactory(new TreeItemPropertyValueFactory<DetailsRow, String>("decval"));
        ttColPVHex.setCellValueFactory(new TreeItemPropertyValueFactory<DetailsRow, String>("hexval"));
        ttColPVBinary.setCellValueFactory(new TreeItemPropertyValueFactory<DetailsRow, String>("binaryval"));
        ttColPVLength.setCellValueFactory(new TreeItemPropertyValueFactory<DetailsRow, String>("len"));
        ttColPVOffset.setCellValueFactory(new TreeItemPropertyValueFactory<DetailsRow, String>("offset"));
        TreeItem<DetailsRow> rootItem = new TreeItem<DetailsRow>();
        ttViewParseViewer.setRoot(rootItem);

        ttColPVName.setCellFactory((TreeTableColumn<DetailsRow, String> param) -> {
            TreeTableCell<DetailsRow, String> cell = new TreeTableCell<DetailsRow, String>() {
                @Override
                protected void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);
                    setText(empty ? "" : getItem().toString());
                    TreeTableRow<DetailsRow> ttr = getTreeTableRow();
                    DetailsRow x = ttr.getItem();
                    DetailsRow.BG bg = BG.NORMAL;
                    String style = "";
                    if (x != null) {
                        bg = x.getBcolor();
                        style += x.getBold() ? "-fx-font-weight:bold;-fx-font-style:italic;" : "";
                    }

                    switch (bg) {
                    case RED:
                        style += "-fx-text-fill:red;";
                        break;
                    case GREEN:
                        style += "-fx-text-fill:green;";
                        break;
                    case BLUE:
                        style += "-fx-text-fill:blue;";
                        break;
                    case YELLOW:
                        style += "-fx-text-fill:yellow;";
                        break;
                    case PINK:
                        style += "-fx-text-fill:pink;";
                        break;
                    default:
                        style += "-fx-text-fill:white;" + "-fx-highlight-fill:dodgerblue;"
                                + "-fx-highlight-text-fill:white";
                        break;
                    }
                    setStyle(style);
                }
            };
            return cell;
        });

        tColMViewSno.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("sno"));
        tColMViewOk.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("ok"));
        tColMViewSop.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("sop"));
        tColMViewMsg.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("msg"));
        tColMViewId.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("id"));
        tColMViewDrole.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("drole"));
        tColMViewProle.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("prole"));
        tColMViewCount.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("count"));
        tColMViewRev.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("rev"));
        tColMViewDuration.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("duration"));
        tColMViewDelta.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("delta"));
        tColMViewVbus.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("vbus"));
        tColMViewData.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("data"));
        tColMViewStartTime.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("stime"));
        tColMViewEndTime.setCellValueFactory(new PropertyValueFactory<MainViewRow, String>("etime"));

        tColDataViewIndex.setCellValueFactory(new PropertyValueFactory<DataViewRow, Integer>("index"));
        tColDataViewValue.setCellValueFactory(new PropertyValueFactory<DataViewRow, String>("value"));

        cBoxMsgClass.getItems().addAll(PDUtils.MSG_CLASS);
        cBoxMsgClass.getSelectionModel().select(0);
        cBoxMsgType.getItems().addAll(PDUtils.CTRL_MSG_TYPE);
        cBoxMsgType.getSelectionModel().select(1);
        cBoxSop.getItems().addAll(PDUtils.SOP_TYPE);
        cBoxSop.getSelectionModel().select(0);

        bFirstPage.setDisable(true);
        bLastPage.setDisable(true);
        bPrevPage.setDisable(true);
        bNextPage.setDisable(true);

        lGraph = new XScope(lchartData, xAxis, yAxis, cboxGraphXScale, bGraphScrollLeft, bGraphScrollRight,
                chkGraphCC1, chkGraphCC2, chkGraphVbus, chkGraphAmp, lblGraphYValue, lblGraphXValue, lblGraphDeltaY,
                lblGraphDeltaX);

        usbcontrol = new USBControl(cBoxDeviceList, statusBar, lblVolt, lblCur, lblCC1, lblCC2);
        cordinator = new Cordinator(usbcontrol, tViewMain, tViewData, ttViewParseViewer, lblStartDelta, lGraph);

        Platform.runLater(() -> {
            handleArgs();
        });
    }

    private void handleArgs() {
        if (Main.arg.length > 0) {
            File f = new File(Main.arg[0]);
            if (f.exists()) {
                if (Utils.getFileExtension(f).equals("ucx1")) {
                    partFileList = OpenRecord.open(f, usbcontrol, statusBar);
                    loadRecord();
                }
            }
        }
    }

    @FXML
    void openOnDragOver(DragEvent event) {
        Dragboard db = event.getDragboard();
        if (db.hasFiles()) {
            event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
        } else {
            event.consume();
        }
    }

    @FXML
    void openOnDragDrop(DragEvent event) {
        Dragboard db = event.getDragboard();
        boolean success = false;
        if (db.hasFiles()) {

            String filePath = null;
            for (File file : db.getFiles()) {
                if (Utils.getFileExtension(file).equals("ucx1")) {
                    success = true;
                    partFileList = OpenRecord.open(file, usbcontrol, statusBar);
                    loadRecord();
                    break;
                }
            }
        }
        event.setDropCompleted(success);
        event.consume();
    }

    void filterScopeData() {
        ObservableList<File> pktList = FXCollections.observableArrayList();
        if (partFileList != null) {
            for (int i = 0; i < partFileList.size(); i++) {
                File xFile = partFileList.get(i);
                if (Utils.getFileExtension(xFile).contains("part")) {
                    pktList.add(xFile);
                } else {
                    scopeFile = xFile;
                }
            }
            partFileList = pktList;
        }
    }

    void loadRecord() {
        tViewData.getItems().clear();
        ttViewParseViewer.getRoot().getChildren().clear();
        lGraph.clear();
        bFirstPage.setDisable(true);
        bLastPage.setDisable(true);
        bPrevPage.setDisable(true);
        bNextPage.setDisable(true);
        filterScopeData();
        if (scopeFile != null) {
            cordinator.openScopeData(scopeFile);
        }
        if (partFileList != null) {
            partListIdx = 0;
            cordinator.openPage(partFileList.get(partListIdx));
            if (partFileList.size() > 1) {
                bLastPage.setDisable(false);
                bNextPage.setDisable(false);
            }
            statusBar.setText("First Page-> Page 0 of " + (partFileList.size() - 1) + " pages.");
        }
    }

    @FXML
    void openRecord(ActionEvent event) {
        partFileList = OpenRecord.open(bPaneMainWindow.getScene().getWindow(), usbcontrol, statusBar);
        loadRecord();
    }

    @FXML
    void gotoFirstPage(ActionEvent event) {
        if (partFileList != null) {
            if (partListIdx != 0) {
                partListIdx = 0;
                cordinator.openPage(partFileList.get(partListIdx));
                statusBar.setText("First Page-> Page 0 of " + (partFileList.size() - 1) + " pages.");
                bFirstPage.setDisable(true);
                bPrevPage.setDisable(true);
                bLastPage.setDisable(false);
                bNextPage.setDisable(false);
            }
        }
    }

    @FXML
    void gotoLastPage(ActionEvent event) {
        if (partFileList != null) {
            if (partListIdx != partFileList.size() - 1) {
                partListIdx = partFileList.size() - 1;
                cordinator.openPage(partFileList.get(partListIdx));
                statusBar.setText("Last Page-> Page " + partListIdx);
                bFirstPage.setDisable(false);
                bPrevPage.setDisable(false);
                bLastPage.setDisable(true);
                bNextPage.setDisable(true);
            }
        }
    }

    @FXML
    void gotoNextPage(ActionEvent event) {
        if (partFileList != null) {
            partListIdx++;
            cordinator.openPage(partFileList.get(partListIdx));
            statusBar.setText("Page: " + partListIdx + " of " + (partFileList.size() - 1) + " pages.");
            if (partListIdx == partFileList.size() - 1) {
                bLastPage.setDisable(true);
                bNextPage.setDisable(true);
            }
            bFirstPage.setDisable(false);
            bPrevPage.setDisable(false);
        }
    }

    @FXML
    void gotoPreviousPage(ActionEvent event) {
        if (partFileList != null) {
            partListIdx--;
            statusBar.setText("Page: " + partListIdx + " of " + (partFileList.size() - 1) + " pages.");
            if (partListIdx == 0) {
                bFirstPage.setDisable(true);
                bPrevPage.setDisable(true);
            }
            bLastPage.setDisable(false);
            bNextPage.setDisable(false);
            cordinator.openPage(partFileList.get(partListIdx));
        }
    }

    @FXML
    void saveRecord(ActionEvent event) {
        SaveRecord.save(bPaneMainWindow.getScene().getWindow(), usbcontrol, statusBar);
    }

    Long getStartConfig() {
        Long config = 0L;
        if (rbEnableRpMonitor.isSelected()) {
            short debounce = Utils
                    .uint16_get_lsb(Utils.castLongtoUInt(Utils.parseStringtoNumber(txtCCDebounce.getText())));
            if (debounce == 0) {
                debounce = 3;
            }
            debounce = (short) (debounce * 200);
            config |= 1;
            if (rbCC2Select.isSelected()) {
                config |= 2;
            }
            config |= debounce << 16;
        }
        if (rbEnablexScope.isSelected()) {
            config |= 4;
        }
        return config;
    }

    private int getScopeCaptureMins() {
        int scopeCaptureMins = Utils.castLongtoUInt(Utils.parseStringtoNumber(txtMaxScopeBuffer.getText()));
        if (scopeCaptureMins == 0) {
            scopeCaptureMins = 5;
        }
        return scopeCaptureMins;
    }

    @FXML
    void startStopCapture(ActionEvent event) {
        if (usbcontrol.isHwCapturing() == false) {
            ttViewParseViewer.getRoot().getChildren().clear();
            lGraph.clear();
            tViewData.getItems().clear();
            bFirstPage.setDisable(true);
            bLastPage.setDisable(true);
            bPrevPage.setDisable(true);
            bNextPage.setDisable(true);
        } else {
            //          bFirstPage.setDisable(false);
            //          bLastPage.setDisable(false);
            //          bPrevPage.setDisable(false);
            //          bNextPage.setDisable(false);
        }

        usbcontrol.startStopCapture(getStartConfig(), getScopeCaptureMins());
        if (usbcontrol.isHwCapturing() == false) {
            cordinator.openScopeLiveData();
        }
    }

    @FXML
    void resetCapture(ActionEvent event) {
        tViewData.getItems().clear();
        ttViewParseViewer.getRoot().getChildren().clear();
        lGraph.clear();
        usbcontrol.resetCapture(getStartConfig(), getScopeCaptureMins());
        tabPaneMain.getSelectionModel().select(0);
    }

    @FXML
    void trgMsgClassChanged(ActionEvent event) {
        cBoxMsgType.getItems().clear();
        int selIndex = cBoxMsgClass.getSelectionModel().getSelectedIndex();
        switch (selIndex) {
        case 0:
            cBoxMsgType.getItems().addAll(PDUtils.CTRL_MSG_TYPE);
            break;
        case 1:
            cBoxMsgType.getItems().addAll(PDUtils.DATA_MSG_TYPE);
            break;
        default:
            cBoxMsgType.getItems().addAll(PDUtils.EXTD_MSG_TYPE);
            break;
        }
        cBoxMsgType.getSelectionModel().select(0);
    }

    @FXML
    void setTrigger(ActionEvent event) {
        usbcontrol.setTrigger(chkStartSno, chkEndSno, chkSop, chkMsgType, chkCount, chkMsgId, txtStartSno,
                txtEndSno, cBoxSop, cBoxMsgClass, cBoxMsgType, txtCount, txtMsgId);
    }

    @FXML
    void getVersion(ActionEvent event) {
        usbcontrol.getVersion();
    }

    @FXML
    void downloadFw(ActionEvent event) {
        usbcontrol.downloadFW();
    }

    @FXML
    void showAboutMe(ActionEvent event) {
        displayAboutMe();
    }

    @FXML
    void collapseDetailView(ActionEvent event) {
        DetailsLoader.collapseTreeView(ttViewParseViewer.getRoot());
    }

    @FXML
    void expandDetailView(ActionEvent event) {
        DetailsLoader.expandTreeView(ttViewParseViewer.getRoot());
    }

    private void displayAboutMe() {
        Properties prop = new Properties();
        InputStream input = null;
        try {
            input = getClass().getResource("/version.properties").openStream();
            prop.load(input);
            String ver = prop.getProperty("MAJOR_VERSION") + "." + prop.getProperty("MINOR_VERSION") + "."
                    + prop.getProperty("BUILD_NO");
            MsgBox.display("About Me", "USBCx -> USBPD Analyzer\nVersion: " + ver
                    + "\nAuthor: Tejender Sheoran\nEmail: tejendersheoran@gmail.com, teju@cypress.com\nCopyright(C) (2016-2018) Tejender Sheoran\nThis program is free software. You can redistribute it and/or modify it\nunder the terms of the GNU General Public License Ver 3.\n<http://www.gnu.org/licenses/>");

        } catch (IOException e) {

        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                }
            }
        }
    }

    @FXML
    void setTerminations(ActionEvent event) {
        byte cc1 = 4;
        byte cc2 = 4;
        if (rbCC1Rp.isSelected()) {
            cc1 = 1;
        } else if (rbCC1Ra.isSelected()) {
            cc1 = 2;
        } else if (rbCC1Rd.isSelected()) {
            cc1 = 3;
        }

        if (rbCC2Rp.isSelected()) {
            cc2 = 1;
        } else if (rbCC2Ra.isSelected()) {
            cc2 = 2;
        } else if (rbCC2Rd.isSelected()) {
            cc2 = 3;
        }
        usbcontrol.setTerm(cc1, cc2);
    }

    @FXML
    void clearTerminations(ActionEvent event) {
        byte cc1 = 4;
        byte cc2 = 4;
        usbcontrol.setTerm(cc1, cc2);
    }

    private void cleanUpTempFiles() {
        try {
            File logDir = new File(System.getProperty("user.home"), "USBCx/logs/");
            if (logDir.exists()) {
                FileUtils.deleteDirectory(logDir);
            }
            File tempDir = new File(System.getProperty("user.home"), "USBCx/temp/");
            if (tempDir.exists()) {
                FileUtils.deleteDirectory(tempDir);
            }
        } catch (IOException e) {
            logger.error("IO Error while cleaning up logs and temp directory");
        }
    }

    private void appClosing() {
        try {
            File logDir = Preferences.getLogDir();
            if (logDir.exists()) {
                FileUtils.deleteDirectory(logDir);
            }
            File tempDir = Preferences.getTempDir();
            if (tempDir.exists()) {
                FileUtils.deleteDirectory(tempDir);
            }
            Preferences.storePreferences();

        } catch (Exception e) {
            logger.error("IO Error while cleaning up logs and temp directory");
        }
    }

    public void setStage(Stage stage) {
        myStage = stage;
        myStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
            public void handle(WindowEvent we) {
                appClosing();
                usbcontrol.terminate();
                cordinator.terminate();
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                }
                Platform.exit();
                System.exit(0);
            }
        });
    }
}