private void initListeners() {
        // handle changes of the active module
        activeModule.addListener((observable, oldModule, newModule) -> {
            LOGGER.trace("Module Listener - Old Module: " + oldModule);
            LOGGER.trace("Module Listener - New Module: " + newModule);
            if (oldModule != newModule) {
                boolean fromHomeScreen = oldModule == null;
                LOGGER.trace("Active Module Listener - Previous view home screen: " + fromHomeScreen);
                boolean fromDestroyed = !openModules.contains(oldModule);
                LOGGER.trace("Active Module Listener - Previous module destroyed: " + fromDestroyed);
                if (!fromHomeScreen && !fromDestroyed) {
                    // switch from one module to another
                    LOGGER.trace("Active Module Listener - Deactivating old module - " + oldModule);
                    oldModule.deactivate();
                }
                boolean toHomeScreen = newModule == null;
                if (toHomeScreen) {
                    // switch to home screen
                    LOGGER.trace("Active Module Listener - Switched to home screen");
                    activeModuleView.setValue(null);
                    return;
                }
                if (!openModules.contains(newModule)) {
                    // module has not been loaded yet
                    LOGGER.trace("Active Module Listener - Initializing module - " + newModule);
                    newModule.init(this);
                    resetModuleCloseable(newModule); // initialize closing on call to #close()
                    openModules.add(newModule);
                }
                LOGGER.trace("Active Module Listener - Activating module - " + newModule);
                activeModuleView.setValue(newModule.activate());
            }
        });

        // handle drawer changes
        drawerShown.addListener((observable, oldDrawer, newDrawer) -> {
            if (!Objects.isNull(oldDrawer)) {
                hideOverlay(oldDrawer);
            }
            if (!Objects.isNull(newDrawer)) {
                showOverlay(newDrawer, false, drawerSideShown.get());
            }
        });


        // when control of navigation drawer changes, pass in the workbench object
        navigationDrawerProperty().addListener((observable, oldControl, newControl) -> {
            LOGGER.trace("NavigationDrawer has been set");
            if (!Objects.isNull(newControl)) {
                LOGGER.trace("NavigationDrawer - Setting Workbench");
                newControl.setWorkbench(this);
            }
        });
    }
Constructor for WorkbenchFX by using the {@link WorkbenchBuilder}.

@param builder to use for the setup
workbenchfx-core/src/main/java/com/dlsc/workbenchfx/Workbench.java