private void handleDeleteButton() { try { CustomizeData custSel = getCustTableSelection(); if (custSel.getName().equals(CustomizeManager.TABLE_DEFAULT_LABEL) || custSel.getName().equals(CustomizeManager.CURRENT_LABEL)) { XViewerLib.popup("ERROR", XViewerText.get("error.delete_default")); return; } if (!custSel.isPersonal() && !xViewerToCustomize.getXViewerFactory().isAdmin()) { XViewerLib.popup("ERROR", XViewerText.get("error.delete_global")); return; } if (MessageDialog.openConfirm( Display.getCurrent().getActiveShell(), XViewerText.get("XViewerCustomizeDialog.prompt.delete.title"), MessageFormat.format( XViewerText.get("XViewerCustomizeDialog.prompt.delete"), custSel.getName()))) { xViewerToCustomize.getCustomizeMgr().deleteCustomization(custSel); loadCustomizeTable(); updateButtonEnablements(); } } catch (Exception ex) { XViewerLog.logAndPopup(Activator.class, Level.SEVERE, ex); } }
private void handleSetDefaultButton() { try { CustomizeData custData = getCustTableSelection(); if (custData.getName().equals(CustomizeManager.TABLE_DEFAULT_LABEL) || custData.getName().equals(CustomizeManager.CURRENT_LABEL)) { XViewerLib.popup("ERROR", XViewerText.get("error.set_default")); return; } if (xViewerToCustomize.getCustomizeMgr().isCustomizationUserDefault(custData)) { if (MessageDialog.openConfirm( Display.getCurrent().getActiveShell(), XViewerText.get("button.remove_default"), MessageFormat.format( XViewerText.get("XViewerCustomizeDialog.prompt.remove_default"), custData.getName()))) { xViewerToCustomize.getCustomizeMgr().setUserDefaultCustData(custData, false); } } else if (MessageDialog.openConfirm( Display.getCurrent().getActiveShell(), XViewerText.get("button.set_default"), MessageFormat.format( XViewerText.get("XViewerCustomizeDialog.prompt.set_default"), custData.getName()))) { xViewerToCustomize.getCustomizeMgr().setUserDefaultCustData(custData, true); } loadCustomizeTable(); } catch (Exception ex) { XViewerLog.logAndPopup(Activator.class, Level.SEVERE, ex); } }
private void createConfigCustomizationButtonBar(final Composite composite) { // Button block final Composite composite_1 = new Composite(composite, SWT.NONE); composite_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); final GridLayout gridLayout_10 = new GridLayout(); gridLayout_10.numColumns = 5; composite_1.setLayout(gridLayout_10); // Customization Buttons renameButton = new Button(composite_1, SWT.NONE); renameButton.setText("Rename Column"); renameButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleRenameButton(); } }); saveButton = new Button(composite_1, SWT.NONE); saveButton.setText(XViewerText.get("button.save")); saveButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleSaveButton(); } }); }
/** * Provides dialog for table customization * * @author Donald G. Dunne */ public class XViewerCustomizeDialog extends MessageDialog { private static String buttons[] = new String[] {"Ok", "Apply", "Cancel"}; private final XViewer xViewerToCustomize; private XViewerFilteredTree custTable; protected XViewerFilteredTree hiddenColTable; protected XViewerFilteredTree visibleColTable; private Text sorterText; private Text filterText; private Button filterRegExCheckBox; private Text columnFilterText; // Select Customization Buttons Button setDefaultButton, deleteButton; // Config Customization Buttons - Moving items Button addItemButton, addAllItemButton, removeItemButton, removeAllItemButton, moveUpButton, moveDownButton; // Config Customization Buttons Button saveButton, renameButton; private static final String SET_AS_DEFAULT = XViewerText.get("button.set_default"); private static final String REMOVE_DEFAULT = XViewerText.get("button.remove_default"); private String title = XViewerText.get("XViewerCustomizeDialog.title"); boolean isFeedbackAfter = false; public XViewerCustomizeDialog(XViewer xViewer) { this(xViewer, Display.getCurrent().getActiveShell()); } private XViewerCustomizeDialog(XViewer xViewer, Shell parentShell) { super(parentShell, "", null, "", MessageDialog.NONE, buttons, 0); this.xViewerToCustomize = xViewer; setShellStyle(getShellStyle() | SWT.RESIZE); } public void setTitle(String title) { this.title = title; } DragSourceAdapter hiddenTableDragListener = new DragSourceAdapter() { @Override public void dragStart(DragSourceEvent event) { if (hiddenColTable.getViewer().getSelection().isEmpty()) { event.doit = false; } } /* * @see org.eclipse.swt.dnd.DragSourceAdapter#dragSetData(org.eclipse.swt.dnd.DragSourceEvent) */ @Override public void dragSetData(DragSourceEvent event) { if (TextTransfer.getInstance().isSupportedType(event.dataType)) { List<XViewerColumn> selCols = getHiddenTableSelection(); Collection<String> ids = new ArrayList<String>(selCols.size()); for (XViewerColumn xCol : selCols) { ids.add(xCol.getId()); } event.data = CollectionsUtil.toString(ids, null, ", ", null); } } }; DropTargetAdapter hiddenTableDropListener = new DropTargetAdapter() { @Override public void dragOperationChanged(DropTargetEvent event) { // do nothing } @Override public void drop(DropTargetEvent event) { if (event.data instanceof String) { performHiddenTableTextDrop(event); } } @Override public void dragOver(DropTargetEvent event) { performHiddenTableDragOver(event); } @Override public void dropAccept(DropTargetEvent event) { // do nothing } }; /** Drag should only be from visible table */ public void performHiddenTableDragOver(DropTargetEvent event) { if (!TextTransfer.getInstance().isSupportedType(event.currentDataType)) { event.detail = DND.DROP_NONE; return; } // Only allow drag from visibleColTable if (event.widget != visibleColTable) { return; } event.detail = DND.DROP_MOVE; } @SuppressWarnings("unchecked") public void performHiddenTableTextDrop(DropTargetEvent event) { String droppedIds = (String) event.data; List<XViewerColumn> droppedVisibleTableXCols = new ArrayList<XViewerColumn>(); List<XViewerColumn> orderCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput(); for (XViewerColumn xCol : orderCols) { if (droppedIds.contains(xCol.getId())) { droppedVisibleTableXCols.add(xCol); } } moveFromVisibleToHidden(droppedVisibleTableXCols); } DragSourceAdapter visibleTableDragListener = new DragSourceAdapter() { @Override public void dragStart(DragSourceEvent event) { if (visibleColTable.getViewer().getSelection().isEmpty()) { event.doit = false; } } /* * @see org.eclipse.swt.dnd.DragSourceAdapter#dragSetData(org.eclipse.swt.dnd.DragSourceEvent) */ @Override public void dragSetData(DragSourceEvent event) { if (TextTransfer.getInstance().isSupportedType(event.dataType)) { List<XViewerColumn> selCols = getVisibleTableSelection(); Collection<String> ids = new ArrayList<String>(selCols.size()); for (XViewerColumn xCol : selCols) { ids.add(xCol.getId()); } event.data = CollectionsUtil.toString(ids, null, ", ", null); } } }; DropTargetAdapter visibleTableDropListener = new DropTargetAdapter() { @Override public void dragOperationChanged(DropTargetEvent event) { // do nothing } @Override public void drop(DropTargetEvent event) { if (event.data instanceof String) { performVisibleTableTextDrop(event); } } @Override public void dragOver(DropTargetEvent event) { performVisibleTableDragOver(event); } @Override public void dropAccept(DropTargetEvent event) { // do nothing } }; @SuppressWarnings("unchecked") public void performVisibleTableTextDrop(DropTargetEvent event) { Tree tree = visibleColTable.getViewer().getTree(); TreeItem dragOverTreeItem = tree.getItem(visibleColTable.getViewer().getTree().toControl(event.x, event.y)); String droppedIds = (String) event.data; // Determine dragOverXCol, if any XViewerColumn dragOverXCol = null; if (dragOverTreeItem != null) { dragOverXCol = (XViewerColumn) dragOverTreeItem.getData(); // Don't allow dropping on same item as dragging if (droppedIds.contains(dragOverXCol.getId())) { return; } } List<XViewerColumn> droppedXCols = new ArrayList<XViewerColumn>(); List<XViewerColumn> orderCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput(); for (XViewerColumn xCol : orderCols) { if (droppedIds.contains(xCol.getId())) { droppedXCols.add(xCol); } } for (XViewerColumn xCol : (List<XViewerColumn>) hiddenColTable.getViewer().getInput()) { if (droppedIds.contains(xCol.getId())) { droppedXCols.add(xCol); } } orderCols.removeAll(droppedXCols); int dropXColOrderColsIndex = 0; for (XViewerColumn xCol : (List<XViewerColumn>) visibleColTable.getViewer().getInput()) { if (dragOverXCol != null && xCol.getId().equals(dragOverXCol.getId())) { break; } dropXColOrderColsIndex++; } if (isFeedbackAfter) { orderCols.addAll(dropXColOrderColsIndex + 1, droppedXCols); } else { orderCols.addAll(dropXColOrderColsIndex, droppedXCols); } visibleColTable.getViewer().setInput(orderCols); List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput(); hiddenCols.removeAll(droppedXCols); hiddenColTable.getViewer().setInput(hiddenCols); } public void performVisibleTableDragOver(DropTargetEvent event) { if (!TextTransfer.getInstance().isSupportedType(event.currentDataType)) { event.detail = DND.DROP_NONE; return; } Tree tree = visibleColTable.getViewer().getTree(); TreeItem dragOverTreeItem = tree.getItem(visibleColTable.getViewer().getTree().toControl(event.x, event.y)); if (dragOverTreeItem == null) { return; } event.feedback = DND.FEEDBACK_EXPAND; event.detail = DND.DROP_NONE; IStructuredSelection selectedItem = (IStructuredSelection) visibleColTable.getViewer().getSelection(); if (selectedItem == null || selectedItem.isEmpty()) { selectedItem = (IStructuredSelection) hiddenColTable.getViewer().getSelection(); } if (selectedItem == null) { return; } Object obj = selectedItem.getFirstElement(); if (obj instanceof XViewerColumn) { if (isFeedbackAfter) { event.feedback = DND.FEEDBACK_INSERT_AFTER; } else { event.feedback = DND.FEEDBACK_INSERT_BEFORE; } event.detail = DND.DROP_MOVE; } } @Override protected Control createDialogArea(Composite parent) { if (getShell() != null) { getShell().setText(title); } parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); Composite comp = new Composite(parent, SWT.NONE); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); gd.heightHint = 700; comp.setLayoutData(gd); GridLayout gridLayout_2 = new GridLayout(); gridLayout_2.numColumns = 2; comp.setLayout(gridLayout_2); Label namespaceLabel = new Label(comp, SWT.NONE); GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false); gridData.horizontalSpan = 2; namespaceLabel.setLayoutData(gridData); namespaceLabel.setText( MessageFormat.format( XViewerText.get("namespace"), xViewerToCustomize.getXViewerFactory().getNamespace())); createSelectCustomizationSection(comp); // Column Configuration Group configureColumnsGroup = new Group(comp, SWT.NONE); configureColumnsGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 3)); configureColumnsGroup.setText("Configure Customization"); GridLayout gridLayout = new GridLayout(); gridLayout.marginWidth = 3; gridLayout.marginHeight = 3; gridLayout.numColumns = 3; configureColumnsGroup.setLayout(gridLayout); createHiddenButtonsComposition(configureColumnsGroup); createMoveButtons(configureColumnsGroup); createVisibleButtonsComposition(configureColumnsGroup); gridLayout.numColumns = 3; gridLayout.numColumns = 3; // Create Sorter and Filter Blocks final Composite composite_2 = new Composite(configureColumnsGroup, SWT.NONE); composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1)); final GridLayout gridLayout_3 = new GridLayout(); gridLayout_3.numColumns = 3; composite_2.setLayout(gridLayout_3); createSorterTextBlock(composite_2); createFilterTextBlock(composite_2); createColumnFilterTextBlock(composite_2); createConfigCustomizationButtonBar(composite_2); try { loadCustomizeTable(); } catch (Exception ex) { XViewerLog.logAndPopup(Activator.class, Level.SEVERE, ex); } updateButtonEnablements(); return comp; } private void createSelectCustomizationSection(Composite comp) { // Customization Table and Buttons final Composite custComp = new Composite(comp, SWT.NONE); final GridData gd_composite_6 = new GridData(SWT.FILL, SWT.FILL, true, true); custComp.setLayoutData(gd_composite_6); final GridLayout gridLayout_1 = new GridLayout(); gridLayout_1.marginWidth = 0; gridLayout_1.marginHeight = 0; custComp.setLayout(gridLayout_1); Label selectCustomizationLabel = new Label(custComp, SWT.NONE); selectCustomizationLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); selectCustomizationLabel.setText(XViewerText.get("XViewerCustomizeDialog.prompt")); // Customization Table custTable = new XViewerFilteredTree(custComp, SWT.BORDER, new PatternFilter()); final Tree table_2 = custTable.getViewer().getTree(); final GridData gd_table_2 = new GridData(SWT.FILL, SWT.FILL, true, true); gd_table_2.heightHint = 270; gd_table_2.widthHint = 200; table_2.setLayoutData(gd_table_2); custTable.getViewer().setLabelProvider(new CustomizeDataLabelProvider(xViewerToCustomize)); custTable.getViewer().setContentProvider(new ArrayTreeContentProvider()); custTable .getViewer() .setSorter( new ViewerSorter() { @SuppressWarnings("unchecked") @Override public int compare(Viewer viewer, Object e1, Object e2) { if (((CustomizeData) e1).getName().startsWith("-")) { return -1; } else if (((CustomizeData) e2).getName().startsWith("-")) { return 1; } else { return getComparator() .compare(((CustomizeData) e1).getName(), ((CustomizeData) e2).getName()); } } }); custTable .getViewer() .addSelectionChangedListener( new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { handleCustTableSelectionChanged(); updateButtonEnablements(); storeCustTableSelection(); } }); // Customization Table Buttons final Composite composite = new Composite(custComp, SWT.NONE); composite.setLayoutData(new GridData()); final GridLayout gridLayout_7 = new GridLayout(); gridLayout_7.numColumns = 4; composite.setLayout(gridLayout_7); setDefaultButton = new Button(composite, SWT.NONE); setDefaultButton.setLayoutData(new GridData()); setDefaultButton.setText(SET_AS_DEFAULT); setDefaultButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleSetDefaultButton(); updateButtonEnablements(); } }); deleteButton = new Button(composite, SWT.NONE); deleteButton.setLayoutData(new GridData()); deleteButton.setText(XViewerText.get("button.delete")); deleteButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleDeleteButton(); updateButtonEnablements(); } }); } private void createConfigCustomizationButtonBar(final Composite composite) { // Button block final Composite composite_1 = new Composite(composite, SWT.NONE); composite_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); final GridLayout gridLayout_10 = new GridLayout(); gridLayout_10.numColumns = 5; composite_1.setLayout(gridLayout_10); // Customization Buttons renameButton = new Button(composite_1, SWT.NONE); renameButton.setText("Rename Column"); renameButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleRenameButton(); } }); saveButton = new Button(composite_1, SWT.NONE); saveButton.setText(XViewerText.get("button.save")); saveButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleSaveButton(); } }); } private void createColumnFilterTextBlock(final Composite composite) { // Filter text block final Composite composite_8 = new Composite(composite, SWT.NONE); composite_8.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1)); final GridLayout gridLayout_14 = new GridLayout(); gridLayout_14.numColumns = 3; composite_8.setLayout(gridLayout_14); final Label columnFilterLabel = new Label(composite_8, SWT.NONE); columnFilterLabel.setText("Column Filter:"); columnFilterText = new Text(composite_8, SWT.BORDER); columnFilterText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); final Label clearColumnFilterLabel = new Label(composite_8, SWT.PUSH); clearColumnFilterLabel.setImage(XViewerLib.getImage("clear.gif")); clearColumnFilterLabel.addMouseListener( new MouseListener() { @Override public void mouseDown(MouseEvent e) { // do nothing } @Override public void mouseDoubleClick(MouseEvent e) { // do nothing } @Override public void mouseUp(MouseEvent e) { columnFilterText.setText(""); } }); } private void createFilterTextBlock(final Composite composite) { // Filter text block final Composite composite_7 = new Composite(composite, SWT.NONE); composite_7.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1)); final GridLayout gridLayout_13 = new GridLayout(); gridLayout_13.numColumns = 5; composite_7.setLayout(gridLayout_13); final Label filterLabel = new Label(composite_7, SWT.NONE); filterLabel.setText("Filter Text:"); filterText = new Text(composite_7, SWT.BORDER); filterText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); Label filterLabel2 = new Label(composite_7, SWT.NONE); filterLabel2.setText("Regular Expression:"); filterRegExCheckBox = new Button(composite_7, SWT.CHECK); filterRegExCheckBox.setLayoutData(new GridData(SWT.RIGHT, SWT.NONE, false, false)); final Label clearFilterLabel = new Label(composite_7, SWT.PUSH); clearFilterLabel.setImage(XViewerLib.getImage("clear.gif")); clearFilterLabel.addMouseListener( new MouseListener() { @Override public void mouseDown(MouseEvent e) { // do nothing } @Override public void mouseDoubleClick(MouseEvent e) { // do nothing } @Override public void mouseUp(MouseEvent e) { filterText.setText(""); } }); } private void createSorterTextBlock(final Composite composite) { final Label sorterLabel = new Label(composite, SWT.NONE); sorterLabel.setText("Sorter:"); sorterText = new Text(composite, SWT.BORDER); sorterText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); final Label clearSorterLabel = new Label(composite, SWT.PUSH); clearSorterLabel.setImage(XViewerLib.getImage("clear.gif")); clearSorterLabel.addMouseListener( new MouseListener() { @Override public void mouseDown(MouseEvent e) { // do nothing } @Override public void mouseDoubleClick(MouseEvent e) { // do nothing } @Override public void mouseUp(MouseEvent e) { sorterText.setText(""); } }); } private void createVisibleButtonsComposition(Composite parent) { final Composite visibleTableComp = new Composite(parent, SWT.NONE); visibleTableComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final GridLayout gridLayout_6 = new GridLayout(); gridLayout_6.marginWidth = 0; gridLayout_6.marginHeight = 0; visibleTableComp.setLayout(gridLayout_6); final Label visibleColumnsLabel = new Label(visibleTableComp, SWT.NONE); visibleColumnsLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); visibleColumnsLabel.setText("Visible Columns"); // Visible Column Table visibleColTable = new XViewerFilteredTree(visibleTableComp); final Tree table = visibleColTable.getViewer().getTree(); final GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, true); gd_table.widthHint = 300; table.setLayoutData(gd_table); visibleColTable.getViewer().setLabelProvider(new XViewerColumnLabelProvider()); visibleColTable.getViewer().setContentProvider(new ArrayTreeContentProvider()); visibleColTable .getViewer() .addSelectionChangedListener( new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { updateButtonEnablements(); } }); visibleColTable .getViewer() .addDragSupport( DND.DROP_MOVE, new Transfer[] {TextTransfer.getInstance()}, visibleTableDragListener); visibleColTable .getViewer() .addDropSupport( DND.DROP_MOVE, new Transfer[] {TextTransfer.getInstance()}, visibleTableDropListener); hiddenColTable .getViewer() .addDragSupport( DND.DROP_MOVE, new Transfer[] {TextTransfer.getInstance()}, hiddenTableDragListener); hiddenColTable .getViewer() .addDropSupport( DND.DROP_MOVE, new Transfer[] {TextTransfer.getInstance()}, hiddenTableDropListener); } private void createHiddenButtonsComposition(Composite parent) { Composite hiddenTableComp = new Composite(parent, SWT.NONE); hiddenTableComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); GridLayout gridLayout_4 = new GridLayout(); gridLayout_4.marginWidth = 0; gridLayout_4.marginHeight = 0; hiddenTableComp.setLayout(gridLayout_4); Label hiddenColumnsLabel = new Label(hiddenTableComp, SWT.NONE); hiddenColumnsLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); hiddenColumnsLabel.setText("Hidden Columns"); // Hidden Column Table hiddenColTable = new XViewerFilteredTree(hiddenTableComp); Tree table_1 = hiddenColTable.getViewer().getTree(); GridData gd_table_1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2); gd_table_1.widthHint = 300; table_1.setLayoutData(gd_table_1); hiddenColTable.getViewer().setLabelProvider(new XViewerColumnLabelProvider()); hiddenColTable.getViewer().setContentProvider(new ArrayTreeContentProvider()); hiddenColTable.getViewer().setSorter(new XViewerColumnSorter()); hiddenColTable .getViewer() .addSelectionChangedListener( new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { updateButtonEnablements(); } }); } private void createMoveButtons(Composite parent) { Composite moveButtonComp = new Composite(parent, SWT.NONE); moveButtonComp.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); GridLayout gridLayout_5 = new GridLayout(); gridLayout_5.marginWidth = 0; gridLayout_5.marginHeight = 0; moveButtonComp.setLayout(gridLayout_5); addItemButton = new Button(moveButtonComp, SWT.NONE); addItemButton.setText(">"); addItemButton.setToolTipText("Add"); addItemButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); addItemButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleAddItemButton(); } }); addAllItemButton = new Button(moveButtonComp, SWT.NONE); addAllItemButton.setText(">>"); addAllItemButton.setToolTipText("Add All"); addAllItemButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleAddAllItemButton(); } }); removeItemButton = new Button(moveButtonComp, SWT.NONE); removeItemButton.setText("<"); removeItemButton.setToolTipText("Remove"); removeItemButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); removeItemButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleRemoveItemButton(); } }); removeAllItemButton = new Button(moveButtonComp, SWT.NONE); removeAllItemButton.setText("<<"); removeAllItemButton.setToolTipText("Remove All"); removeAllItemButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleRemoveAllItemButton(); } }); moveUpButton = new Button(moveButtonComp, SWT.NONE); moveUpButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); moveUpButton.setText("^"); moveUpButton.setToolTipText("Move Up"); moveUpButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleMoveUpButton(); } }); moveDownButton = new Button(moveButtonComp, SWT.NONE); moveDownButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); moveDownButton.setText("v"); moveDownButton.setToolTipText("Move Down"); moveDownButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleMoveDownButton(); } }); } @SuppressWarnings("unchecked") private void handleAddItemButton() { // Remove from hidden List<XViewerColumn> hiddenSelCols = getHiddenTableSelection(); if (hiddenSelCols == null) { return; } List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput(); hiddenCols.removeAll(hiddenSelCols); hiddenColTable.getViewer().setInput(hiddenCols); // Add to visible List<XViewerColumn> visibleCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput(); visibleCols.addAll(hiddenSelCols); visibleColTable.getViewer().setInput(visibleCols); } private void handleRemoveItemButton() { List<XViewerColumn> visibleSelCols = getVisibleTableSelection(); if (visibleSelCols != null && visibleSelCols.size() != 0) { moveFromVisibleToHidden(visibleSelCols); } } @SuppressWarnings("unchecked") protected void moveFromVisibleToHidden(List<XViewerColumn> visibleSelCols) { // Remove from visible if (visibleSelCols == null || visibleSelCols.isEmpty()) { return; } List<XViewerColumn> visibleCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput(); visibleCols.removeAll(visibleSelCols); visibleColTable.getViewer().setInput(visibleCols); // Add to hidden List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput(); hiddenCols.addAll(visibleSelCols); hiddenColTable.getViewer().setInput(hiddenCols); updateSortTextField(); updateColumnFilterField(); } @SuppressWarnings("unchecked") private void updateSortTextField() { // get visible column ids List<String> visibleColumnIds = new ArrayList<String>(); for (XViewerColumn xCol : (List<XViewerColumn>) visibleColTable.getViewer().getInput()) { visibleColumnIds.add(xCol.getId()); } // get current sortIds SortingData sortingData = new SortingData(sorterText.getText()); List<String> currentSortIds = sortingData.getSortingIds(); // get complement to determine ids that are sorted but not visible == invalid for (String invalidId : CollectionsUtil.setComplement(currentSortIds, visibleColumnIds)) { sortingData.removeSortingName(invalidId); } if (sorterText != null && !sorterText.isDisposed()) { sorterText.setText(sortingData.getXml()); } } @SuppressWarnings("unchecked") private void updateColumnFilterField() { // get visible column ids List<String> visibleColumnIds = new ArrayList<String>(); for (XViewerColumn xCol : (List<XViewerColumn>) visibleColTable.getViewer().getInput()) { visibleColumnIds.add(xCol.getId()); } // get current columnFilterIds ColumnFilterData columnFilterData = new ColumnFilterData(); columnFilterData.setFromXml(columnFilterText.getText()); Set<String> currentSortIds = columnFilterData.getColIds(); // get complement to determine ids that are sorted but not visible == invalid for (String invalidId : CollectionsUtil.setComplement(currentSortIds, visibleColumnIds)) { columnFilterData.removeFilterText(invalidId); } if (columnFilterText != null && !columnFilterText.isDisposed()) { columnFilterText.setText(columnFilterData.getXml()); } } @SuppressWarnings("unchecked") private void handleAddAllItemButton() { List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput(); List<XViewerColumn> visibleCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput(); visibleCols.addAll(hiddenCols); visibleColTable.getViewer().setInput(visibleCols); hiddenCols.clear(); hiddenColTable.getViewer().setInput(hiddenCols); updateSortTextField(); updateColumnFilterField(); } /** for testing purposes */ protected void handleAddAllItem() { handleAddAllItemButton(); } @SuppressWarnings("unchecked") private void handleRemoveAllItemButton() { List<XViewerColumn> visibleCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput(); List<XViewerColumn> hiddenCols = (List<XViewerColumn>) hiddenColTable.getViewer().getInput(); hiddenCols.addAll(visibleCols); hiddenColTable.getViewer().setInput(hiddenCols); // Add to visible visibleCols.clear(); visibleColTable.getViewer().setInput(visibleCols); updateSortTextField(); updateColumnFilterField(); } @SuppressWarnings("unchecked") private void handleMoveUpButton() { List<XViewerColumn> selCols = getVisibleTableSelection(); if (selCols == null) { return; } List<XViewerColumn> orderCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput(); int index = orderCols.indexOf(selCols.iterator().next()); if (index > 0) { orderCols.removeAll(selCols); orderCols.addAll(index - 1, selCols); visibleColTable.getViewer().setInput(orderCols); } else { return; } ArrayList<XViewerColumn> selected = new ArrayList<XViewerColumn>(); selected.addAll(selCols); visibleColTable .getViewer() .setSelection(new StructuredSelection(selected.toArray(new Object[selected.size()]))); visibleColTable.getViewer().getTree().setFocus(); updateButtonEnablements(); } @SuppressWarnings("unchecked") private void handleMoveDownButton() { List<XViewerColumn> selCols = getVisibleTableSelection(); if (selCols == null) { return; } List<XViewerColumn> orderCols = (List<XViewerColumn>) visibleColTable.getViewer().getInput(); int index = orderCols.indexOf(selCols.iterator().next()); if (index < (orderCols.size() - selCols.size())) { orderCols.removeAll(selCols); orderCols.addAll(index + 1, selCols); visibleColTable.getViewer().setInput(orderCols); } else { return; } ArrayList<XViewerColumn> selected = new ArrayList<XViewerColumn>(); selected.addAll(selCols); visibleColTable .getViewer() .setSelection(new StructuredSelection(selected.toArray(new Object[selected.size()]))); visibleColTable.getViewer().getTree().setFocus(); updateButtonEnablements(); } /** @return xColumns from hidden and visible customization lists */ private List<XViewerColumn> getConfigCustXViewerColumns() { List<XViewerColumn> xCols = new ArrayList<XViewerColumn>(); for (XViewerColumn xCol : getTableXViewerColumns(visibleColTable.getViewer())) { xCol.setShow(true); xCol.setXViewer(xViewerToCustomize); xCols.add(xCol); } for (XViewerColumn xCol : getTableXViewerColumns(hiddenColTable.getViewer())) { xCol.setShow(false); xCol.setXViewer(xViewerToCustomize); xCols.add(xCol); } return xCols; } private void handleSaveButton() { try { List<CustomizeData> custDatas = new ArrayList<CustomizeData>(); for (CustomizeData custData : xViewerToCustomize.getCustomizeMgr().getSavedCustDatas()) { if (custData.isPersonal()) { custDatas.add(custData); } else if (xViewerToCustomize.getXViewerFactory().isAdmin()) { custDatas.add(custData); } } CustomizationDataSelectionDialog diag = new CustomizationDataSelectionDialog(xViewerToCustomize, custDatas); if (diag.open() == 0) { String name = diag.getEnteredName(); try { CustomizeData diagSelectedCustomizeData = diag.getSelectedCustData(); String diagEnteredNewName = diag.getEnteredName(); CustomizeData custData = getConfigCustomizeCustData(); if (diagEnteredNewName != null) { custData.setName(name); // Set currently selected to newly saved custData selectedCustTableCustData = custData; } else { custData.setName(diagSelectedCustomizeData.getName()); custData.setGuid(diagSelectedCustomizeData.getGuid()); } custData.setPersonal(!diag.isSaveGlobal()); xViewerToCustomize.getCustomizeMgr().saveCustomization(custData); } catch (Exception ex) { XViewerLog.logAndPopup(Activator.class, Level.SEVERE, ex); } } loadCustomizeTable(); } catch (Exception ex) { XViewerLog.logAndPopup(Activator.class, Level.SEVERE, ex); } } private void handleRenameButton() { XViewerColumn xCol = getVisibleTableSelection().iterator().next(); DialogWithEntry ed = new DialogWithEntry( Display.getCurrent().getActiveShell(), "Rename Column", null, "Enter new name", MessageDialog.QUESTION, new String[] {"OK", "Use Default", "Cancel"}, 0); int result = ed.open(); if (result == 2) { return; } if (result == 0) { xViewerToCustomize.getCustomizeMgr().customizeColumnName(xCol, ed.getEntry()); } else if (result == 1) { xViewerToCustomize.getCustomizeMgr().customizeColumnName(xCol, ""); } visibleColTable.getViewer().update(xCol, null); } /** @return CustomizeData represented by the configuration area */ private CustomizeData getConfigCustomizeCustData() { CustomizeData custData = new CustomizeData(); custData.resetGuid(); custData.setNameSpace(xViewerToCustomize.getXViewerFactory().getNamespace()); custData.getColumnData().setColumns(getConfigCustXViewerColumns()); custData.getSortingData().setFromXml(sorterText.getText()); custData .getFilterData() .setFilterText(filterText.getText(), filterRegExCheckBox.getSelection()); custData.getColumnFilterData().setFromXml(columnFilterText.getText()); return custData; } private void handleLoadConfigCustButton() { xViewerToCustomize.getCustomizeMgr().loadCustomization(getConfigCustomizeCustData()); xViewerToCustomize.refresh(); } /** for testing purposes */ protected void handleLoadConfigCust() { handleLoadConfigCustButton(); } private void handleSetDefaultButton() { try { CustomizeData custData = getCustTableSelection(); if (custData.getName().equals(CustomizeManager.TABLE_DEFAULT_LABEL) || custData.getName().equals(CustomizeManager.CURRENT_LABEL)) { XViewerLib.popup("ERROR", XViewerText.get("error.set_default")); return; } if (xViewerToCustomize.getCustomizeMgr().isCustomizationUserDefault(custData)) { if (MessageDialog.openConfirm( Display.getCurrent().getActiveShell(), XViewerText.get("button.remove_default"), MessageFormat.format( XViewerText.get("XViewerCustomizeDialog.prompt.remove_default"), custData.getName()))) { xViewerToCustomize.getCustomizeMgr().setUserDefaultCustData(custData, false); } } else if (MessageDialog.openConfirm( Display.getCurrent().getActiveShell(), XViewerText.get("button.set_default"), MessageFormat.format( XViewerText.get("XViewerCustomizeDialog.prompt.set_default"), custData.getName()))) { xViewerToCustomize.getCustomizeMgr().setUserDefaultCustData(custData, true); } loadCustomizeTable(); } catch (Exception ex) { XViewerLog.logAndPopup(Activator.class, Level.SEVERE, ex); } } private void handleDeleteButton() { try { CustomizeData custSel = getCustTableSelection(); if (custSel.getName().equals(CustomizeManager.TABLE_DEFAULT_LABEL) || custSel.getName().equals(CustomizeManager.CURRENT_LABEL)) { XViewerLib.popup("ERROR", XViewerText.get("error.delete_default")); return; } if (!custSel.isPersonal() && !xViewerToCustomize.getXViewerFactory().isAdmin()) { XViewerLib.popup("ERROR", XViewerText.get("error.delete_global")); return; } if (MessageDialog.openConfirm( Display.getCurrent().getActiveShell(), XViewerText.get("XViewerCustomizeDialog.prompt.delete.title"), MessageFormat.format( XViewerText.get("XViewerCustomizeDialog.prompt.delete"), custSel.getName()))) { xViewerToCustomize.getCustomizeMgr().deleteCustomization(custSel); loadCustomizeTable(); updateButtonEnablements(); } } catch (Exception ex) { XViewerLog.logAndPopup(Activator.class, Level.SEVERE, ex); } } private void updateButtonEnablements() { CustomizeData custData = getCustTableSelection(); setDefaultButton.setEnabled( xViewerToCustomize .getXViewerFactory() .getXViewerCustomizations() .isCustomizationPersistAvailable() && custTable.getViewer().getTree().isFocusControl() && custData != null && !custData.getName().equals(CustomizeManager.TABLE_DEFAULT_LABEL) && !custData.getName().equals(CustomizeManager.CURRENT_LABEL)); if (custTable.getViewer().getTree().isFocusControl() && custData != null) { try { setDefaultButton.setText( xViewerToCustomize.getCustomizeMgr().isCustomizationUserDefault(custData) ? REMOVE_DEFAULT : SET_AS_DEFAULT); } catch (XViewerException ex) { XViewerLog.log(Activator.class, Level.SEVERE, ex); } setDefaultButton.getParent().layout(); } deleteButton.setEnabled( xViewerToCustomize .getXViewerFactory() .getXViewerCustomizations() .isCustomizationPersistAvailable() && custTable.getViewer().getTree().isFocusControl() && custData != null); addItemButton.setEnabled( hiddenColTable.getViewer().getTree().isFocusControl() && getHiddenTableSelection() != null); removeItemButton.setEnabled( visibleColTable.getViewer().getTree().isFocusControl() && getVisibleTableSelection() != null); renameButton.setEnabled( visibleColTable.getViewer().getTree().isFocusControl() && getVisibleTableSelection() != null && getVisibleTableSelection().size() == 1); moveDownButton.setEnabled( visibleColTable.getViewer().getTree().isFocusControl() && getVisibleTableSelection() != null); moveUpButton.setEnabled( visibleColTable.getViewer().getTree().isFocusControl() && getVisibleTableSelection() != null); saveButton.setEnabled( xViewerToCustomize.getXViewerFactory().getXViewerCustomizations() != null && xViewerToCustomize .getXViewerFactory() .getXViewerCustomizations() .isCustomizationPersistAvailable()); } private void loadCustomizeTable() throws Exception { // Add stored customization data List<CustomizeData> custDatas = xViewerToCustomize.getCustomizeMgr().getSavedCustDatas(); // Add table default customization data CustomizeData defaultTableCustData = xViewerToCustomize.getCustomizeMgr().getTableDefaultCustData(); defaultTableCustData.setName(CustomizeManager.TABLE_DEFAULT_LABEL); custDatas.add(defaultTableCustData); // Add current customization data generated from actual table CustomizeData currentCustData = xViewerToCustomize.getCustomizeMgr().generateCustDataFromTable(); currentCustData.setName(CustomizeManager.CURRENT_LABEL); custDatas.add(currentCustData); custTable.getViewer().setInput(custDatas); restoreCustTableSelection(); // If selection not restored, select default if (getCustTableSelection() == null) { ArrayList<Object> sel = new ArrayList<Object>(); sel.add(currentCustData); custTable .getViewer() .setSelection(new StructuredSelection(sel.toArray(new Object[sel.size()]))); custTable.getViewer().getTree().setFocus(); } updateSortTextField(); updateColumnFilterField(); updateButtonEnablements(); } private CustomizeData getCustTableSelection() { IStructuredSelection selection = (IStructuredSelection) custTable.getViewer().getSelection(); if (selection.isEmpty()) { return null; } Iterator<?> i = selection.iterator(); return (CustomizeData) i.next(); } protected List<XViewerColumn> getVisibleTableSelection() { return getTableSelection(visibleColTable.getViewer()); } protected List<XViewerColumn> getHiddenTableSelection() { return getTableSelection(hiddenColTable.getViewer()); } private List<XViewerColumn> getTableSelection(TreeViewer xColTableViewer) { List<XViewerColumn> xCols = new ArrayList<XViewerColumn>(); IStructuredSelection selection = (IStructuredSelection) xColTableViewer.getSelection(); if (selection.isEmpty()) { return null; } Iterator<?> i = selection.iterator(); while (i.hasNext()) { xCols.add((XViewerColumn) i.next()); } return xCols; } @SuppressWarnings("unchecked") private List<XViewerColumn> getTableXViewerColumns(TreeViewer xColTableViewer) { return (List<XViewerColumn>) xColTableViewer.getInput(); } private void handleCustTableSelectionChanged() { if (getCustTableSelection() == null) { return; } CustomizeData custData = getCustTableSelection(); if (custData == null) { XViewerLog.logAndPopup( Activator.class, Level.SEVERE, new IllegalStateException("Can't obtain selection Xml")); return; } List<XViewerColumn> hideXCols = new ArrayList<XViewerColumn>(); List<XViewerColumn> showXCols = new ArrayList<XViewerColumn>(); for (XViewerColumn xCol : custData.getColumnData().getColumns()) { if (xCol.isShow()) { showXCols.add(xCol); } else { hideXCols.add(xCol); } } hiddenColTable.getViewer().setInput(hideXCols); visibleColTable.getViewer().setInput(showXCols); sorterText.setText(custData.getSortingData().getXml()); sorterText.setData(custData); filterText.setText(custData.getFilterData().getFilterText()); filterText.setData(custData); filterRegExCheckBox.setSelection(custData.getFilterData().isRegularExpression()); columnFilterText.setText(custData.getColumnFilterData().getXml()); columnFilterText.setData(custData); updateSortTextField(); updateColumnFilterField(); } private CustomizeData selectedCustTableCustData = null; public void storeCustTableSelection() { // Store selected so can re-select after event re-draw if (getCustTableSelection() != null) { selectedCustTableCustData = getCustTableSelection(); } // System.out.println("Selection " + selectedCustTableCustData.getName() + " - " + // selectedCustTableCustData.getGuid()); } public void restoreCustTableSelection() { if (selectedCustTableCustData != null) { ArrayList<Object> selected = new ArrayList<Object>(); selected.add(selectedCustTableCustData); custTable .getViewer() .setSelection(new StructuredSelection(selected.toArray(new Object[selected.size()]))); // System.out.println("Restoring " + selectedCustTableCustData.getName() + " - " + // selectedCustTableCustData.getGuid()); } } @Override protected void buttonPressed(int buttonId) { // Ok if (buttonId == 0) { handleLoadConfigCustButton(); close(); } // Apply else if (buttonId == 1) { handleLoadConfigCustButton(); } // Cancel else { close(); } } public String getTitle() { return title; } }
private void createSelectCustomizationSection(Composite comp) { // Customization Table and Buttons final Composite custComp = new Composite(comp, SWT.NONE); final GridData gd_composite_6 = new GridData(SWT.FILL, SWT.FILL, true, true); custComp.setLayoutData(gd_composite_6); final GridLayout gridLayout_1 = new GridLayout(); gridLayout_1.marginWidth = 0; gridLayout_1.marginHeight = 0; custComp.setLayout(gridLayout_1); Label selectCustomizationLabel = new Label(custComp, SWT.NONE); selectCustomizationLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); selectCustomizationLabel.setText(XViewerText.get("XViewerCustomizeDialog.prompt")); // Customization Table custTable = new XViewerFilteredTree(custComp, SWT.BORDER, new PatternFilter()); final Tree table_2 = custTable.getViewer().getTree(); final GridData gd_table_2 = new GridData(SWT.FILL, SWT.FILL, true, true); gd_table_2.heightHint = 270; gd_table_2.widthHint = 200; table_2.setLayoutData(gd_table_2); custTable.getViewer().setLabelProvider(new CustomizeDataLabelProvider(xViewerToCustomize)); custTable.getViewer().setContentProvider(new ArrayTreeContentProvider()); custTable .getViewer() .setSorter( new ViewerSorter() { @SuppressWarnings("unchecked") @Override public int compare(Viewer viewer, Object e1, Object e2) { if (((CustomizeData) e1).getName().startsWith("-")) { return -1; } else if (((CustomizeData) e2).getName().startsWith("-")) { return 1; } else { return getComparator() .compare(((CustomizeData) e1).getName(), ((CustomizeData) e2).getName()); } } }); custTable .getViewer() .addSelectionChangedListener( new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { handleCustTableSelectionChanged(); updateButtonEnablements(); storeCustTableSelection(); } }); // Customization Table Buttons final Composite composite = new Composite(custComp, SWT.NONE); composite.setLayoutData(new GridData()); final GridLayout gridLayout_7 = new GridLayout(); gridLayout_7.numColumns = 4; composite.setLayout(gridLayout_7); setDefaultButton = new Button(composite, SWT.NONE); setDefaultButton.setLayoutData(new GridData()); setDefaultButton.setText(SET_AS_DEFAULT); setDefaultButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleSetDefaultButton(); updateButtonEnablements(); } }); deleteButton = new Button(composite, SWT.NONE); deleteButton.setLayoutData(new GridData()); deleteButton.setText(XViewerText.get("button.delete")); deleteButton.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); handleDeleteButton(); updateButtonEnablements(); } }); }
@Override protected Control createDialogArea(Composite parent) { if (getShell() != null) { getShell().setText(title); } parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); Composite comp = new Composite(parent, SWT.NONE); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); gd.heightHint = 700; comp.setLayoutData(gd); GridLayout gridLayout_2 = new GridLayout(); gridLayout_2.numColumns = 2; comp.setLayout(gridLayout_2); Label namespaceLabel = new Label(comp, SWT.NONE); GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false); gridData.horizontalSpan = 2; namespaceLabel.setLayoutData(gridData); namespaceLabel.setText( MessageFormat.format( XViewerText.get("namespace"), xViewerToCustomize.getXViewerFactory().getNamespace())); createSelectCustomizationSection(comp); // Column Configuration Group configureColumnsGroup = new Group(comp, SWT.NONE); configureColumnsGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 3)); configureColumnsGroup.setText("Configure Customization"); GridLayout gridLayout = new GridLayout(); gridLayout.marginWidth = 3; gridLayout.marginHeight = 3; gridLayout.numColumns = 3; configureColumnsGroup.setLayout(gridLayout); createHiddenButtonsComposition(configureColumnsGroup); createMoveButtons(configureColumnsGroup); createVisibleButtonsComposition(configureColumnsGroup); gridLayout.numColumns = 3; gridLayout.numColumns = 3; // Create Sorter and Filter Blocks final Composite composite_2 = new Composite(configureColumnsGroup, SWT.NONE); composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1)); final GridLayout gridLayout_3 = new GridLayout(); gridLayout_3.numColumns = 3; composite_2.setLayout(gridLayout_3); createSorterTextBlock(composite_2); createFilterTextBlock(composite_2); createColumnFilterTextBlock(composite_2); createConfigCustomizationButtonBar(composite_2); try { loadCustomizeTable(); } catch (Exception ex) { XViewerLog.logAndPopup(Activator.class, Level.SEVERE, ex); } updateButtonEnablements(); return comp; }