package Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import Bricklink.SetImporterFromBricklink; import Bricklink.ChildDialog.MappingDialog; import Bricklink.ChildDialog.TextlInputDialog; import Bricklink.ChildDialog.UploadBricklinkWantedListDialog; import Builder.BrickSelectionManager; import Builder.BuilderConfigurationManager; import Builder.CopyNPasteManager; import Command.LDrawPart; import Command.PartTypeT; import Common.Vector3f; import ConnectivityEditor.Window.ConnectivityEditorUI; import Exports.UpdateManagerDlg; import Grouping.GroupingManager; import LDraw.Files.LDrawMPDModel; import LDraw.Support.type.LDrawGridTypeT; import Notification.ILDrawSubscriber; import Notification.INotificationMessage; import Notification.NotificationCenter; import Notification.NotificationMessageT; import OtherTools.OverlapCheckDlg; import OtherTools.PartReplaceDlg; import UndoRedo.LDrawUndoRedoManager; public class MenuHandler implements ILDrawSubscriber { MOCBuilder brickBuilder = null; Shell shell = null; private MenuItem file_new; private MenuItem file_open; private MenuItem file_save; private MenuItem file_saveAs; private MenuItem file_import_file; private MenuItem file_import_wantedList; private MenuItem file_import_setinventory; private MenuItem file_import_basePlate; private MenuItem file_export_file; private MenuItem file_export_wantedList; private MenuItem file_export_basePlate; private MenuItem file_modelInfo; private MenuItem file_exit; private MenuItem edit_undo; private MenuItem edit_redo; private MenuItem edit_cut; private MenuItem edit_copy; private MenuItem edit_paste; private MenuItem edit_Hide; private MenuItem edit_HideAll; private MenuItem edit_ShowAll; private MenuItem edit_replace; private MenuItem edit_defaultbaseplate; private MenuItem edit_setGrid; private MenuItem edit_setGrid_coarse; private MenuItem edit_setGrid_medium; private MenuItem edit_setGrid_fine; private MenuItem edit_group; private MenuItem edit_group_addNewGroup; private MenuItem edit_group_removeEmptyGroups; private MenuItem edit_group_putAllIntoASingleGroup; private MenuItem edit_submodel; private MenuItem edit_submodel_addNewSubmodel; private MenuItem edit_submodel_makeSelectedPartsIntoASubmodel; private MenuItem edit_submodel_extractParts; private MenuItem view_partBrowser; private MenuItem view_partBrowser_preview; private MenuItem view_groupEditor; private MenuItem view_minifigureBuilder; private MenuItem tools_overlapCheck; private MenuItem tools_connectivityEditor; private MenuItem tools_publishBI; private MenuItem tools_brickwizard; private MenuItem option_shortcut; private MenuItem option_soundEffect; private MenuItem option_account; private MenuItem option_showPartInfo; private MenuItem help_about; private MenuItem help_faq; private MenuItem help_update; private MenuItem help_home; public MenuHandler() { } public MenuHandler(MOCBuilder builder, Shell shell) { this(); this.brickBuilder = builder; this.shell = shell; NotificationCenter.getInstance().addSubscriber(this, NotificationMessageT.BrickbuilderConfigurationChanged); NotificationCenter.getInstance().addSubscriber(this, NotificationMessageT.LDrawPartSelected); NotificationCenter.getInstance().addSubscriber(this, NotificationMessageT.UndoRedoManagerUpdated); NotificationCenter.getInstance().addSubscriber(this, NotificationMessageT.CopyNPasteManagerUpdated); } public void generateMenu() { Menu menubar = new Menu(shell, SWT.BAR); shell.setMenuBar(menubar); MenuItem cascadeMenu = new MenuItem(menubar, SWT.CASCADE); cascadeMenu.setText("&File"); Menu menu_file = new Menu(cascadeMenu); cascadeMenu.setMenu(menu_file); file_new = new MenuItem(menu_file, SWT.NONE); file_new.addSelectionListener(new FileNewListener()); file_new.setText("&New"); file_open = new MenuItem(menu_file, SWT.NONE); file_open.addSelectionListener(new FileOpenListener()); file_open.setText("&Open..."); file_save = new MenuItem(menu_file, SWT.NONE); file_save.addSelectionListener(new FileSaveListener()); file_save.setText("&Save"); file_saveAs = new MenuItem(menu_file, SWT.NONE); file_saveAs.addSelectionListener(new FileSaveAsListener()); file_saveAs.setText("Save &As..."); MenuItem separator = new MenuItem(menu_file, SWT.SEPARATOR); cascadeMenu = new MenuItem(menu_file, SWT.CASCADE); cascadeMenu.setText("I&mport"); Menu menu_file_import = new Menu(cascadeMenu); cascadeMenu.setMenu(menu_file_import); file_import_file = new MenuItem(menu_file_import, SWT.NONE); file_import_file.addSelectionListener(new FileImportModelListener()); file_import_file.setText("From &File..."); file_import_wantedList = new MenuItem(menu_file_import, SWT.NONE); file_import_wantedList .addSelectionListener(new FileImportModelListener()); file_import_wantedList.setText("From &Wanted List..."); file_import_wantedList.setEnabled(false); file_import_setinventory = new MenuItem(menu_file_import, SWT.NONE); file_import_setinventory .addSelectionListener(new FileImportCatalogListener()); file_import_setinventory.setText("From Set &Inventory..."); // file_import_setinventory.setEnabled(false); file_import_basePlate = new MenuItem(menu_file_import, SWT.NONE); file_import_basePlate .addSelectionListener(new FileImportModelListener()); file_import_basePlate.setText("From &Base Plate..."); file_import_basePlate.setEnabled(false); cascadeMenu = new MenuItem(menu_file, SWT.CASCADE); cascadeMenu.setText("&Export"); Menu menu_file_export = new Menu(cascadeMenu); cascadeMenu.setMenu(menu_file_export); file_export_file = new MenuItem(menu_file_export, SWT.NONE); file_export_file.addSelectionListener(new FileImportModelListener()); file_export_file.setText("To &File..."); file_export_file.setEnabled(false); file_export_wantedList = new MenuItem(menu_file_export, SWT.NONE); file_export_wantedList .addSelectionListener(new FileExportModelToWantedListListener()); file_export_wantedList.setText("To &Wanted List..."); file_export_basePlate = new MenuItem(menu_file_export, SWT.NONE); file_export_basePlate .addSelectionListener(new FileImportModelListener()); file_export_basePlate.setText("To &Base Plate..."); file_export_basePlate.setEnabled(false); separator = new MenuItem(menu_file, SWT.SEPARATOR); file_modelInfo = new MenuItem(menu_file, SWT.NONE); file_modelInfo.addSelectionListener(new FileModelInfoListener()); file_modelInfo.setText("Model &Info..."); separator = new MenuItem(menu_file, SWT.SEPARATOR); file_exit = new MenuItem(menu_file, SWT.NONE); file_exit.addSelectionListener(new FileExitListener()); file_exit.setText("E&xit"); cascadeMenu = new MenuItem(menubar, SWT.CASCADE); cascadeMenu.setText("&Edit"); Menu menu_edit = new Menu(cascadeMenu); cascadeMenu.setMenu(menu_edit); edit_undo = new MenuItem(menu_edit, SWT.NONE); edit_undo.addSelectionListener(new EditUndoListener()); edit_undo.setText("&Undo"); edit_undo.setEnabled(false); edit_redo = new MenuItem(menu_edit, SWT.NONE); edit_redo.addSelectionListener(new EditRedoListener()); edit_redo.setText("&Redo"); edit_undo.setEnabled(false); separator = new MenuItem(menu_edit, SWT.SEPARATOR); edit_cut = new MenuItem(menu_edit, SWT.NONE); edit_cut.addSelectionListener(new EditCutListener()); edit_cut.setText("Cu&t"); edit_cut.setEnabled(false); edit_copy = new MenuItem(menu_edit, SWT.NONE); edit_copy.addSelectionListener(new EditCopyListener()); edit_copy.setText("&Copy"); edit_copy.setEnabled(false); edit_paste = new MenuItem(menu_edit, SWT.NONE); edit_paste.addSelectionListener(new EditPasteListener()); edit_paste.setText("&Paste"); edit_paste.setEnabled(false); separator = new MenuItem(menu_edit, SWT.SEPARATOR); edit_Hide = new MenuItem(menu_edit, SWT.NONE); edit_Hide.addSelectionListener(new EditHideListener()); edit_Hide.setText("&Hide"); edit_Hide.setEnabled(false); edit_HideAll = new MenuItem(menu_edit, SWT.NONE); edit_HideAll.addSelectionListener(new EditHideAllListener()); edit_HideAll.setText("Hide&All"); edit_HideAll.setEnabled(true); edit_ShowAll = new MenuItem(menu_edit, SWT.NONE); edit_ShowAll.addSelectionListener(new EditShowAllListener()); edit_ShowAll.setText("&ShowAll"); edit_ShowAll.setEnabled(true); separator = new MenuItem(menu_edit, SWT.SEPARATOR); edit_replace = new MenuItem(menu_edit, SWT.NONE); edit_replace.addSelectionListener(new EditReplaceListener()); edit_replace.setText("&Find/Replace..."); separator = new MenuItem(menu_edit, SWT.SEPARATOR); edit_group = new MenuItem(menu_edit, SWT.CASCADE); edit_group.setText("&Group"); Menu menu_edit_group = new Menu(edit_group); edit_group.setMenu(menu_edit_group); edit_group_addNewGroup = new MenuItem(menu_edit_group, SWT.NONE); edit_group_addNewGroup.addSelectionListener(new EditNewGroupListener()); edit_group_addNewGroup.setText("Add A &New Group"); edit_group_addNewGroup.setEnabled(true); edit_group_removeEmptyGroups = new MenuItem(menu_edit_group, SWT.NONE); edit_group_removeEmptyGroups .addSelectionListener(new EditRemoveEmptyGroupsListener()); edit_group_removeEmptyGroups.setText("Remove &Empty Groups"); edit_group_removeEmptyGroups.setEnabled(true); edit_group_putAllIntoASingleGroup = new MenuItem(menu_edit_group, SWT.NONE); edit_group_putAllIntoASingleGroup .addSelectionListener(new EditSingleGroupListener()); edit_group_putAllIntoASingleGroup .setText("&Put All Parts into A Single Group"); edit_group_putAllIntoASingleGroup.setEnabled(false); separator = new MenuItem(menu_edit, SWT.SEPARATOR); edit_submodel = new MenuItem(menu_edit, SWT.CASCADE); edit_submodel.setText("Sub&model"); Menu menu_edit_submodel = new Menu(edit_submodel); edit_submodel.setMenu(menu_edit_submodel); edit_submodel_addNewSubmodel = new MenuItem(menu_edit_submodel, SWT.NONE); edit_submodel_addNewSubmodel .addSelectionListener(new EditNewSubmodelListener()); edit_submodel_addNewSubmodel.setText("Add A &New Submodel"); edit_submodel_addNewSubmodel.setEnabled(true); edit_submodel_makeSelectedPartsIntoASubmodel = new MenuItem( menu_edit_submodel, SWT.NONE); edit_submodel_makeSelectedPartsIntoASubmodel .addSelectionListener(new EditSelectedPartsIntoASubModelListener()); edit_submodel_makeSelectedPartsIntoASubmodel .setText("Make &Selected Parts Into A Submodel"); edit_submodel_makeSelectedPartsIntoASubmodel.setEnabled(false); edit_submodel_extractParts = new MenuItem(menu_edit_submodel, SWT.NONE); edit_submodel_extractParts .addSelectionListener(new EditExtractPartsListener()); edit_submodel_extractParts.setText("&Extract Parts"); edit_submodel_extractParts.setEnabled(false); separator = new MenuItem(menu_edit, SWT.SEPARATOR); edit_defaultbaseplate = new MenuItem(menu_edit, SWT.CHECK); edit_defaultbaseplate.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { BuilderConfigurationManager.getInstance() .setUseDefaultBaseplate( ((MenuItem) arg0.getSource()).getSelection()); NotificationCenter.getInstance().postNotification( NotificationMessageT.BrickbuilderConfigurationChanged); NotificationCenter.getInstance().postNotification( NotificationMessageT.NeedReDraw); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { } }); edit_defaultbaseplate.setText("Enable &BasePlate"); edit_defaultbaseplate.setSelection(BuilderConfigurationManager .getInstance().isUseDefaultBaseplate()); edit_setGrid = new MenuItem(menu_edit, SWT.CASCADE); edit_setGrid.setText("Set &Grid"); Menu menu_edit_gridunit = new Menu(edit_setGrid); edit_setGrid.setMenu(menu_edit_gridunit); edit_setGrid_coarse = new MenuItem(menu_edit_gridunit, SWT.RADIO); edit_setGrid_coarse.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { BuilderConfigurationManager.getInstance().setGridUnit( LDrawGridTypeT.Coarse); NotificationCenter.getInstance().postNotification( NotificationMessageT.BrickbuilderConfigurationChanged); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { // TODO Auto-generated method stub } }); edit_setGrid_coarse.setText("&Coarse"); if (BuilderConfigurationManager.getInstance().getGridUnit() == LDrawGridTypeT.Coarse) edit_setGrid_coarse.setSelection(true); edit_setGrid_medium = new MenuItem(menu_edit_gridunit, SWT.RADIO); edit_setGrid_medium.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { BuilderConfigurationManager.getInstance().setGridUnit( LDrawGridTypeT.Medium); NotificationCenter.getInstance().postNotification( NotificationMessageT.BrickbuilderConfigurationChanged); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { // TODO Auto-generated method stub } }); edit_setGrid_medium.setText("&Medium"); if (BuilderConfigurationManager.getInstance().getGridUnit() == LDrawGridTypeT.Medium) edit_setGrid_medium.setSelection(true); edit_setGrid_fine = new MenuItem(menu_edit_gridunit, SWT.RADIO); edit_setGrid_fine.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { BuilderConfigurationManager.getInstance().setGridUnit( LDrawGridTypeT.Fine); NotificationCenter.getInstance().postNotification( NotificationMessageT.BrickbuilderConfigurationChanged); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { // TODO Auto-generated method stub } }); edit_setGrid_fine.setText("&Fine"); if (BuilderConfigurationManager.getInstance().getGridUnit() == LDrawGridTypeT.Fine) edit_setGrid_fine.setSelection(true); cascadeMenu = new MenuItem(menubar, SWT.CASCADE); cascadeMenu.setText("&View"); Menu menu_view = new Menu(cascadeMenu); cascadeMenu.setMenu(menu_view); view_partBrowser = new MenuItem(menu_view, SWT.CASCADE); view_partBrowser.setText("Show Part &Browser"); view_partBrowser.setEnabled(false); Menu menu_view_partBrowser = new Menu(view_partBrowser); view_partBrowser.setMenu(menu_view_partBrowser); view_partBrowser_preview = new MenuItem(menu_view_partBrowser, SWT.CHECK); view_partBrowser_preview.setText("Show &Preview"); view_partBrowser_preview.setEnabled(false); view_groupEditor = new MenuItem(menu_view, SWT.CHECK); view_groupEditor.setText("Show &Group Editor"); view_groupEditor.setEnabled(false); view_minifigureBuilder = new MenuItem(menu_view, SWT.CHECK); view_minifigureBuilder.setText("Show &Minifigure Builder"); view_minifigureBuilder.setEnabled(false); cascadeMenu = new MenuItem(menubar, SWT.CASCADE); cascadeMenu.setText("&Tools"); Menu menu_tool = new Menu(cascadeMenu); cascadeMenu.setMenu(menu_tool); tools_overlapCheck = new MenuItem(menu_tool, SWT.NONE); tools_overlapCheck.setText("&Overlap Checker"); tools_overlapCheck .addSelectionListener(new ToolsOverlapCheckListener()); tools_overlapCheck.setEnabled(true); tools_connectivityEditor = new MenuItem(menu_tool, SWT.NONE); tools_connectivityEditor.setText("&Connectivity Editor"); tools_connectivityEditor .addSelectionListener(new ToolsConnectivityEditorListener()); tools_connectivityEditor.setEnabled(true); tools_publishBI = new MenuItem(menu_tool, SWT.NONE); tools_publishBI.setText("&Publish To Building Instruction"); tools_publishBI .addSelectionListener(new ToolsConnectivityEditorListener()); tools_publishBI.setEnabled(false); tools_brickwizard = new MenuItem(menu_tool, SWT.NONE); tools_brickwizard.setText("Brick &Wizard"); tools_brickwizard .addSelectionListener(new ToolsConnectivityEditorListener()); tools_brickwizard.setEnabled(false); cascadeMenu = new MenuItem(menubar, SWT.CASCADE); cascadeMenu.setText("&Options"); Menu menu_option = new Menu(cascadeMenu); cascadeMenu.setMenu(menu_option); option_shortcut = new MenuItem(menu_option, SWT.NONE); option_shortcut.setText("&Keyboard Shortcuts..."); option_shortcut.addSelectionListener(new OptionShortcutListener()); option_shortcut.setEnabled(true); option_soundEffect = new MenuItem(menu_option, SWT.CHECK); option_soundEffect.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent arg0) { BuilderConfigurationManager.getInstance().setTurnOffSound( !((MenuItem) arg0.getSource()).getSelection()); NotificationCenter.getInstance().postNotification( NotificationMessageT.BrickbuilderConfigurationChanged); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { } }); option_soundEffect.setText("Turn On &SoundEffect"); option_soundEffect.setSelection(!BuilderConfigurationManager .getInstance().isTurnOffSound()); option_account = new MenuItem(menu_option, SWT.NONE); option_account.setText("&Account..."); option_account.setEnabled(false); option_showPartInfo = new MenuItem(menu_option, SWT.CHECK); option_showPartInfo.setText("Show Part &Info."); option_showPartInfo.setEnabled(false); // PreferencesView view = new PreferencesView(); cascadeMenu = new MenuItem(menubar, SWT.CASCADE); cascadeMenu.setText("&Help"); Menu menu_help = new Menu(cascadeMenu); cascadeMenu.setMenu(menu_help); MessageBox messageBox = new MessageBox(shell, SWT.ICON_INFORMATION | SWT.YES); messageBox.setText("About MOC Builder"); messageBox.setMessage("MOC Builder\r\n\r\n" + "Version: Public Release 1.02a\r\n" + "Build id: 20141110-1400_kr"); if (!SWT.getPlatform().equals("cocoa")) { help_about = new MenuItem(menu_help, SWT.NONE); help_about.addSelectionListener(new HelpAboutListener()); help_about.setText("&About MOC Builder..."); help_about.setData(messageBox); } else { CocoaUIEnhancer enhancer = new CocoaUIEnhancer(MOCBuilder.APP_NAME); enhancer.hookApplicationMenu(shell.getDisplay(), new Listener() { @Override public void handleEvent(Event arg0) { shell.dispose(); } }, messageBox, null); } help_faq = new MenuItem(menu_help, SWT.NONE); help_faq.addSelectionListener(new HelpFaqListener()); help_faq.setText("Frequently Asked Questions (FAQ)"); help_home = new MenuItem(menu_help, SWT.NONE); help_home.addSelectionListener(new HelpReportListener()); help_home.setText("Suggestion or Bug &report"); help_update = new MenuItem(menu_help, SWT.NONE); help_update.addSelectionListener(new HelpUpdateListener()); help_update.setText("&Update..."); help_update.setEnabled(false); } class FileNewListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { brickBuilder.newLDrawFile(); } public void widgetDefaultSelected(SelectionEvent event) { } } class FileOpenListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { if (brickBuilder.checkChanged(shell)) { String path = ""; FileDialog fileDialog = new FileDialog(shell, SWT.OPEN); fileDialog.setFilterExtensions(new String[] { "*.ldr;*.mpd;*.dat", "*.*" }); path = fileDialog.open(); if (path != null) { brickBuilder.openFile(path); } } } public void widgetDefaultSelected(SelectionEvent event) { } } class FileSaveListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { if (brickBuilder.getWorkingLDrawFile().path() == null) { brickBuilder.saveAs(shell, null); } else { brickBuilder.saveFile(); } } public void widgetDefaultSelected(SelectionEvent event) { } } class FileSaveAsListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { brickBuilder.saveAs(shell, null); } public void widgetDefaultSelected(SelectionEvent event) { } } class FileImportModelListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { String path = ""; FileDialog fileDialog = new FileDialog(shell, SWT.OPEN); fileDialog.setFilterExtensions(new String[] { "*.ldr;*.mpd;*.dat", "*.*" }); try { path = fileDialog.open(); if (path != null) { brickBuilder.importFile(path, new Vector3f()); } } catch (Exception e) { e.printStackTrace(); } } public void widgetDefaultSelected(SelectionEvent event) { } } class FileExportModelToWantedListListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { try { new UploadBricklinkWantedListDialog(shell, SWT.DIALOG_TRIM) .open(); } catch (Exception e) { e.printStackTrace(); } } public void widgetDefaultSelected(SelectionEvent event) { } } class FileModelInfoListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { try { ModelInfoDlg.getInstance(shell, SWT.DIALOG_TRIM); } catch (Exception e) { e.printStackTrace(); } } public void widgetDefaultSelected(SelectionEvent event) { } } class FileExitListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { Display display = shell.getDisplay(); shell.dispose(); display.dispose(); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditReplaceListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { try { new PartReplaceDlg(shell, SWT.DIALOG_TRIM | SWT.ON_TOP).open(); } catch (Exception e) { e.printStackTrace(); } } public void widgetDefaultSelected(SelectionEvent event) { } } class EditUndoListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { LDrawUndoRedoManager.getInstance().undo(); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditRedoListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { LDrawUndoRedoManager.getInstance().redo(); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditCutListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { CopyNPasteManager.getInstance().setCutList( BrickSelectionManager.getInstance().getSelectedPartList()); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditCopyListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { CopyNPasteManager.getInstance().setCopyList( BrickSelectionManager.getInstance().getSelectedPartList()); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditPasteListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { CopyNPasteManager.getInstance().paste(new Vector3f()); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditHideListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { MOCBuilder.getInstance().hideSelectedParts(); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditHideAllListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { for (LDrawPart part : MOCBuilder.getInstance().getAllPartInFile()) part.setHidden(true); NotificationCenter.getInstance().postNotification( NotificationMessageT.NeedReDraw); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditShowAllListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { for (LDrawPart part : MOCBuilder.getInstance().getAllPartInFile()) part.setHidden(false); NotificationCenter.getInstance().postNotification( NotificationMessageT.NeedReDraw); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditNewGroupListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { MOCBuilder.getInstance().addStepToWorkingFile(); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditRemoveEmptyGroupsListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { MOCBuilder.getInstance().removeEmptyStep(); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditSingleGroupListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { GroupingManager.getInstance().mergeAll(); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditNewSubmodelListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { LDrawMPDModel model = MOCBuilder.getInstance().makeASubmodel(); if (model != null) MOCBuilder.getInstance().changeActiveModel(model); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditSelectedPartsIntoASubModelListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { MOCBuilder.getInstance().makeASubmodelFromSelection(); } public void widgetDefaultSelected(SelectionEvent event) { } } class EditExtractPartsListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { if (BrickSelectionManager.getInstance().isEmpty()) return; LDrawPart part = BrickSelectionManager.getInstance().getFirstPart(); if (BrickSelectionManager.getInstance().isTheOnlySelectedPart(part) == false) return; if (part.getCacheType() != PartTypeT.PartTypeSubmodel) return; MOCBuilder.getInstance().extractPartsFromASubmodel(part); } public void widgetDefaultSelected(SelectionEvent event) { } } class ToolsOverlapCheckListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { try { OverlapCheckDlg dlg = new OverlapCheckDlg(shell, SWT.DIALOG_TRIM); dlg.open(); } catch (Exception e) { e.printStackTrace(); } } public void widgetDefaultSelected(SelectionEvent event) { } } class ToolsConnectivityEditorListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { if (BrickSelectionManager.getInstance().getNumOfSelectedParts() == 1) { LDrawPart part = BrickSelectionManager.getInstance() .getSelectedPartList().get(0); try { ConnectivityEditorUI.getInstance(part.getDisplayName()); } catch (Exception e) { e.printStackTrace(); } } else { ConnectivityEditorUI.getInstance(null); } } public void widgetDefaultSelected(SelectionEvent event) { } } class FileImportCatalogListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { try { TextlInputDialog urlDialog = new TextlInputDialog(shell, SWT.DIALOG_TRIM); String setNo = (String) (urlDialog.open()); if (setNo != null) { boolean isSuccess = SetImporterFromBricklink.getInstance() .getPartNoListFrom(setNo); if (isSuccess == false) { MessageBox msg = new MessageBox(shell); msg.setMessage("Fail to import! Please check the " + setNo + " is valid."); msg.open(); } } } catch (Exception e) { e.printStackTrace(); } } public void widgetDefaultSelected(SelectionEvent event) { } } class BricklinkMappingListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { try { MappingDialog dialog = new MappingDialog(shell, SWT.DIALOG_TRIM); dialog.open(); } catch (Exception e) { e.printStackTrace(); } } public void widgetDefaultSelected(SelectionEvent event) { } } class HelpAboutListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { MessageBox messageBox = (MessageBox) ((MenuItem) event.getSource()) .getData(); messageBox.open(); } public void widgetDefaultSelected(SelectionEvent event) { } } class HelpFaqListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { Program.launch("https://github.com/MOCBuilderOrg/MOCBuilder/wiki/FAQs"); } public void widgetDefaultSelected(SelectionEvent event) { } } class HelpReportListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { Program.launch("https://github.com/MOCBuilderOrg/MOCBuilder/issues"); } public void widgetDefaultSelected(SelectionEvent event) { } } class HelpUpdateListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { new UpdateManagerDlg(shell, SWT.DIALOG_TRIM).open(); } public void widgetDefaultSelected(SelectionEvent event) { } } @Override public void receiveNotification(NotificationMessageT messageType, INotificationMessage msg) { if (messageType == NotificationMessageT.BrickbuilderConfigurationChanged) { BuilderConfigurationManager configuration = BuilderConfigurationManager .getInstance(); edit_defaultbaseplate.setSelection(configuration .isUseDefaultBaseplate()); option_soundEffect.setSelection(!configuration.isTurnOffSound()); switch (configuration.getGridUnit()) { case Coarse: edit_setGrid_coarse.setSelection(true); edit_setGrid_medium.setSelection(false); edit_setGrid_fine.setSelection(false); break; case Medium: edit_setGrid_coarse.setSelection(false); edit_setGrid_medium.setSelection(true); edit_setGrid_fine.setSelection(false); break; case Fine: edit_setGrid_coarse.setSelection(false); edit_setGrid_medium.setSelection(false); edit_setGrid_fine.setSelection(true); break; default: break; } } else if (messageType == NotificationMessageT.LDrawPartSelected) { shell.getDisplay().asyncExec(new Runnable() { @Override public void run() { // tools_connectivityEditor.setEnabled(!BrickSelectionManager // .getInstance().isEmpty()); edit_cut.setEnabled(!BrickSelectionManager.getInstance() .isEmpty()); edit_copy.setEnabled(!BrickSelectionManager.getInstance() .isEmpty()); edit_Hide.setEnabled(!BrickSelectionManager.getInstance() .isEmpty()); edit_group_putAllIntoASingleGroup .setEnabled(!BrickSelectionManager.getInstance() .isEmpty()); edit_submodel_extractParts .setEnabled(!BrickSelectionManager.getInstance() .isEmpty()); edit_submodel_makeSelectedPartsIntoASubmodel .setEnabled(!BrickSelectionManager.getInstance() .isEmpty()); } }); } else if (messageType == NotificationMessageT.UndoRedoManagerUpdated) { shell.getDisplay().asyncExec(new Runnable() { @Override public void run() { edit_undo.setEnabled(!LDrawUndoRedoManager.getInstance() .isEmptyUndoStack()); edit_redo.setEnabled(!LDrawUndoRedoManager.getInstance() .isEmptyRedoStack()); } }); } else if (messageType == NotificationMessageT.CopyNPasteManagerUpdated) { shell.getDisplay().asyncExec(new Runnable() { @Override public void run() { edit_paste.setEnabled(!CopyNPasteManager.getInstance() .isEmptyClipboard()); } }); } } class OptionShortcutListener implements SelectionListener { public void widgetSelected(SelectionEvent event) { try { ShortcutDlg dlg = new ShortcutDlg(shell, SWT.DIALOG_TRIM); dlg.open(); } catch (Exception e) { e.printStackTrace(); } } public void widgetDefaultSelected(SelectionEvent event) { } } }