private void setupLeftPanel() {
        view.leftPanel.leftList.setCellFactory(new Callback<ListView<ComponentMenuItem>, ListCell<ComponentMenuItem>>() {
            @Override
            public ListCell<ComponentMenuItem> call(ListView<ComponentMenuItem> list) {
                return new LeftListCellFactory(view);
            }
        });


        for (ComponentSettings componentSettings : componentSettingsStore.getComponents()) {
            String type = componentSettings.getType();
            ImageView icon = new ImageView(new Image(getClass().getResourceAsStream("/bdl/icons/" + componentSettings.getIcon())));
            view.leftPanel.leftList.getItems().add(new ComponentMenuItem(type, icon, componentSettings));
        }

        view.leftPanel.leftList.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                if (mouseEvent.getClickCount() == 2) {
                    ComponentSettings componentSettings = view.leftPanel.leftList.getSelectionModel().getSelectedItem().getComponentSettings();
                    if (componentSettings != null) {
                        GObject newThing = null;

                        historyManager.pause();
                        try {
                            Class panelPropertyClass = Class.forName("bdl.build." + componentSettings.getPackageName() + ".G" + componentSettings.getType());
                            Constructor constructor = panelPropertyClass.getConstructor();
                            newThing = (GObject) constructor.newInstance();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                        addGObject(newThing, componentSettings, view, viewListeners, null, -1, -1, view.middleTabPane.viewPane);
                        historyManager.unpause();
                    }
                    view.leftPanel.leftList.getSelectionModel().select(-1);
                }
            }
        });

        view.leftPanel.hierarchyPane.treeRoot = new TreeItem<>(new HierarchyTreeItem(view.middleTabPane.viewPane, view, selectionManager, historyManager));
        view.leftPanel.hierarchyPane.treeView.setRoot(view.leftPanel.hierarchyPane.treeRoot);
        view.leftPanel.hierarchyPane.treeRoot.setExpanded(true);
        view.leftPanel.hierarchyPane.treeView.setShowRoot(true);

        view.leftPanel.hierarchyPane.treeView.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                TreeItem<HierarchyTreeItem> item = view.leftPanel.hierarchyPane.treeView.getSelectionModel().getSelectedItem();
                if (item != null) {
                    selectionManager.updateSelected(item.getValue().getGObject());
                }
            }
        });

        //Add listener to node list to update hierarchy pane
        addPaneListChangeListener(view.middleTabPane.viewPane, view.leftPanel.hierarchyPane.treeRoot);


        //Add selection handlers for Hierarchy Pane
        selectionManager.addSelectionListener(new SelectionListener() {
            @Override
            public void updateSelected(GObject gObject) {
                update(gObject.getFieldName(), view.leftPanel.hierarchyPane.treeRoot);
            }

            private void update(String fieldName, TreeItem<HierarchyTreeItem> treeRoot) {
                for (TreeItem<HierarchyTreeItem> ti : treeRoot.getChildren()) {
                    GObject gObject = ti.getValue().getGObject();
                    if (gObject.getFieldName().equals(fieldName)) {
                        view.leftPanel.hierarchyPane.treeView.getSelectionModel().select(ti);
                    } else if (gObject instanceof Pane) {
                        update(fieldName, ti);
                    }

                }
            }

            @Override
            public void clearSelection() {
                view.leftPanel.hierarchyPane.treeView.getSelectionModel().select(-1);
            }
        });
    }