List of usage examples for org.eclipse.jface.viewers ITableLabelProvider ITableLabelProvider
ITableLabelProvider
From source file:hydrograph.ui.propertywindow.widgets.customwidgets.schema.XPathSchemaGridWidget.java
License:Apache License
protected ITableLabelProvider getLableProvider() { return new ITableLabelProvider() { @Override/* w w w.ja v a 2s .c om*/ public void removeListener(ILabelProviderListener listener) { } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void dispose() { } @Override public void addListener(ILabelProviderListener listener) { } @Override public String getColumnText(Object element, int columnIndex) { XPathGridRow xPathGrid = (XPathGridRow) element; switch (columnIndex) { case 0: return xPathGrid.getFieldName(); case 1: return GridWidgetCommonBuilder.getDataTypeKey()[xPathGrid.getDataType().intValue()]; case 2: return xPathGrid.getXPath(); case 3: return xPathGrid.getScale().toString(); case 4: if (xPathGrid.getScaleType() != null) { return GridWidgetCommonBuilder.getScaleTypeKey()[xPathGrid.getScaleType().intValue()]; } else { return GridWidgetCommonBuilder.getScaleTypeKey()[0]; } case 5: return xPathGrid.getDateFormat(); case 6: return xPathGrid.getPrecision(); case 7: return xPathGrid.getDescription(); } return null; } @Override public Image getColumnImage(Object element, int columnIndex) { return null; } }; }
From source file:mpj_express_debugger.MPJExpressParameterTab.java
License:Open Source License
@Override public void createControl(Composite parent) { Composite comp = SWTFactory.createComposite(parent, 1, 1, GridData.FILL_HORIZONTAL); setControl(comp);//from w ww .j a v a 2 s .c o m PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_APPLET_PARAMETERS_TAB); @SuppressWarnings("restriction") Composite namecomp = SWTFactory.createComposite(comp, comp.getFont(), 5, 1, GridData.FILL_HORIZONTAL, 0, 0); SWTFactory.createLabel(namecomp, MPJLauncherMessages.mpjlauncher_argumenttab_nplabel_text, 1); npText = SWTFactory.createSingleText(namecomp, 1); npText.addModifyListener(fListener); SWTFactory.createLabel(namecomp, MPJLauncherMessages.mpjlauncher_argumenttab_homelabel_text, 1); mpjHomeText = SWTFactory.createSingleText(namecomp, 1); mpjHomeText.addModifyListener(fListener); fBrowseMPJHomeButton = SWTFactory.createPushButton(namecomp, "Browse", null); fBrowseMPJHomeButton.addSelectionListener(fListener); SWTFactory.createLabel(namecomp, MPJLauncherMessages.mpjlauncher_argumenttab_devlabel_text, 1); devText = SWTFactory.createSingleText(namecomp, 1); devText.addModifyListener(fListener); Label blank = new Label(namecomp, SWT.NONE); blank.setText(EMPTY_STRING); Label hint = SWTFactory.createLabel(namecomp, MPJLauncherMessages.MPJParametersTab__mandatory_mpj_home_path, 1); GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER); hint.setLayoutData(gd); SWTFactory.createVerticalSpacer(comp, 1); Composite paramcomp = SWTFactory.createComposite(comp, comp.getFont(), 2, 1, GridData.FILL_BOTH, 0, 0); SWTFactory.createLabel(paramcomp, MPJLauncherMessages.appletlauncher_argumenttab_parameterslabel_text, 2); Table ptable = new Table(paramcomp, SWT.FULL_SELECTION | SWT.BORDER); fViewer = new TableViewer(ptable); gd = new GridData(GridData.FILL_BOTH); ptable.setLayoutData(gd); TableColumn column1 = new TableColumn(ptable, SWT.NONE); column1.setText(MPJLauncherMessages.appletlauncher_argumenttab_parameterscolumn_name_text); TableColumn column2 = new TableColumn(ptable, SWT.NONE); column2.setText(MPJLauncherMessages.appletlauncher_argumenttab_parameterscolumn_value_text); TableLayout tableLayout = new TableLayout(); ptable.setLayout(tableLayout); tableLayout.addColumnData(new ColumnWeightData(100)); tableLayout.addColumnData(new ColumnWeightData(100)); ptable.setHeaderVisible(true); ptable.setLinesVisible(true); ptable.addSelectionListener(fListener); ptable.addMouseListener(new MouseAdapter() { public void mouseDoubleClick(MouseEvent e) { setParametersButtonsEnableState(); if (fParametersEditButton.isEnabled()) { handleParametersEditButtonSelected(); } } }); fViewer.setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { Map params = (Map) inputElement; return params.keySet().toArray(); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); fViewer.setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { if (columnIndex == 0) { return element.toString(); } String key = (String) element; Map params = (Map) fViewer.getInput(); Object object = params.get(key); if (object != null) return object.toString(); return null; } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }); fViewer.setComparator(new ViewerComparator()); Composite envcomp = SWTFactory.createComposite(paramcomp, paramcomp.getFont(), 1, 1, GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL, 0, 0); fParametersAddButton = createPushButton(envcomp, MPJLauncherMessages.appletlauncher_argumenttab_parameters_button_add_text, null); fParametersAddButton.addSelectionListener(fListener); fParametersEditButton = createPushButton(envcomp, MPJLauncherMessages.appletlauncher_argumenttab_parameters_button_edit_text, null); fParametersEditButton.addSelectionListener(fListener); fParametersRemoveButton = createPushButton(envcomp, MPJLauncherMessages.appletlauncher_argumenttab_parameters_button_remove_text, null); fParametersRemoveButton.addSelectionListener(fListener); setParametersButtonsEnableState(); Dialog.applyDialogFont(parent); }
From source file:net.leboxondelex.daplomb.ui.facets.CollageFacet.java
License:Open Source License
/** * Constructor./* ww w. j a va 2s . c o m*/ * @param parent * @param appFont */ public CollageFacet(Composite parent, Font appFont) { super(parent); this.appFont = appFont; if (this.backupFile.exists()) { try { this.collage = CollageIO.readCollage(this.backupFile); } catch (IOException e) { LogUtils.log(e); } } if (this.collage == null) this.collage = new Collage(); this.collageBuilder = new CollageBuilder(this.collage); GridLayoutFactory.swtDefaults().numColumns(3).equalWidth(true).margins(10, 10).spacing(20, 0).applyTo(this); setLayoutData(new GridData(GridData.FILL_BOTH)); // The left part Composite leftPart = new Composite(this, SWT.NONE); GridLayoutFactory.swtDefaults().margins(0, 0).spacing(0, 5).applyTo(leftPart); GridDataFactory.fillDefaults().grab(true, true).applyTo(leftPart); Label l = new Label(leftPart, SWT.NONE); l.setText("Votre collage se construit en composant des instructions."); l.setFont(appFont); Composite allButtonsComposite = new Composite(leftPart, SWT.NONE); GridLayoutFactory.swtDefaults().margins(0, 0).extendedMargins(0, 0, 10, 0).numColumns(3) .applyTo(allButtonsComposite); GridDataFactory.fillDefaults().grab(true, false).applyTo(allButtonsComposite); this.instructionsViewer = new TableViewer(leftPart, SWT.SINGLE | SWT.BORDER); this.instructionsViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); this.instructionsViewer.getTable().setFont(appFont); new TableColumn(this.instructionsViewer.getTable(), SWT.NONE); TableColumn hiddenAttrColumn = new TableColumn(this.instructionsViewer.getTable(), SWT.NONE); hiddenAttrColumn.setWidth(COL_WIDTH); hiddenAttrColumn.setResizable(false); hiddenAttrColumn.setMoveable(false); this.instructionsViewer.setLabelProvider(new ITableLabelProvider() { @Override public String getColumnText(Object element, int columnIndex) { String result = ""; if (columnIndex == 0 && element != null) result = element.toString(); return result; } @Override public Image getColumnImage(Object element, int columnIndex) { Image result = null; if (columnIndex == 0 && element instanceof AddImageInstruction) { String ext = StringUtils.getFileExtension(((AddImageInstruction) element).getImgFile()); result = ResourceRegistry.findFileImage(ext); } else if (columnIndex == 1 && ((AbstractInstruction) element).isHidden()) { result = ResourceRegistry.ICON_HIDDEN_16x16; } return result; } @Override public void addListener(ILabelProviderListener arg0) { // nothing } @Override public void dispose() { // nothing } @Override public boolean isLabelProperty(Object arg0, String arg1) { return false; } @Override public void removeListener(ILabelProviderListener arg0) { // nothing } }); this.instructionsViewer.setContentProvider(new ArrayContentProvider()); this.instructionsViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent e) { Object o = ((IStructuredSelection) e.getSelection()).getFirstElement(); if (o instanceof AddImageInstruction && Desktop.isDesktopSupported()) { File f = ((AddImageInstruction) o).getImgFile(); try { Desktop.getDesktop().open(f); } catch (IOException e1) { LogUtils.log("Could not open " + f, e1); } } } }); this.instructionsViewer.getTable().addControlListener(new ControlAdapter() { @Override public void controlResized(ControlEvent e) { Table table = (Table) e.widget; int width = table.getSize().x - 2 * table.getBorderWidth(); if (table.getVerticalBar().isVisible()) width -= table.getVerticalBar().getSize().x; width -= COL_WIDTH; table.getColumn(0).setWidth(width); } }); // Options final Group optionsGroup = new Group(leftPart, SWT.SHADOW_ETCHED_IN); GridLayoutFactory.swtDefaults().numColumns(2).margins(15, 15).applyTo(optionsGroup); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.END).grab(true, false).hint(SWT.DEFAULT, 120) .applyTo(optionsGroup); optionsGroup.setText("Options"); optionsGroup.setFont(appFont); optionsGroup.setVisible(false); // Buttons Composite buttonsComposite = new Composite(allButtonsComposite, SWT.NONE); GridLayoutFactory.swtDefaults().margins(0, 0).applyTo(buttonsComposite); GridDataFactory.fillDefaults().grab(true, false).applyTo(buttonsComposite); final Button upButton = new Button(buttonsComposite, SWT.PUSH); upButton.setFont(appFont); upButton.setText("Haut"); upButton.setToolTipText("Monter cette instruction d'un cran"); upButton.setImage(ResourceRegistry.ICON_UP_32x32); GridDataFactory.fillDefaults().grab(true, false).applyTo(upButton); upButton.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); int index = CollageFacet.this.collage.getInstructions().indexOf(o); if (index > 0) { CollageFacet.this.collage.getInstructions().remove(o); CollageFacet.this.collage.getInstructions().add(index - 1, (AbstractInstruction) o); refresh(); CollageFacet.this.instructionsViewer.setInput(CollageFacet.this.collage.getInstructions()); CollageFacet.this.instructionsViewer.refresh(); } } }); final Button downButton = new Button(buttonsComposite, SWT.PUSH); downButton.setFont(appFont); downButton.setText("Bas"); downButton.setToolTipText("Baisser cette instruction d'un cran"); downButton.setImage(ResourceRegistry.ICON_DOWN_32x32); GridDataFactory.fillDefaults().grab(true, false).applyTo(downButton); downButton.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); int index = CollageFacet.this.collage.getInstructions().indexOf(o); if (index + 1 < CollageFacet.this.collage.getInstructions().size()) { CollageFacet.this.collage.getInstructions().remove(o); CollageFacet.this.collage.getInstructions().add(index + 1, (AbstractInstruction) o); refresh(); CollageFacet.this.instructionsViewer.setInput(CollageFacet.this.collage.getInstructions()); CollageFacet.this.instructionsViewer.refresh(); } } }); Button b = new Button(buttonsComposite, SWT.PUSH); b.setFont(appFont); b.setText("Rafrachir"); b.setToolTipText("Regnrer le collage"); b.setImage(ResourceRegistry.ICON_REFRESH_32x32); GridDataFactory.fillDefaults().grab(true, false).applyTo(b); b.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { refresh(); } }); buttonsComposite = new Composite(allButtonsComposite, SWT.NONE); GridLayoutFactory.swtDefaults().margins(0, 0).applyTo(buttonsComposite); GridDataFactory.fillDefaults().grab(true, false).applyTo(buttonsComposite); final Button removeButton = new Button(buttonsComposite, SWT.PUSH); removeButton.setFont(appFont); removeButton.setText("Supprimer"); removeButton.setToolTipText("Supprimer cette instruction"); removeButton.setImage(ResourceRegistry.ICON_DELETE_32x32); GridDataFactory.fillDefaults().grab(true, false).applyTo(removeButton); removeButton.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); if (o instanceof BackgroundInstruction) return; CollageFacet.this.collage.getInstructions().remove(o); refresh(); CollageFacet.this.instructionsViewer.remove(o); } }); new Label(buttonsComposite, SWT.NONE); final Button hideButton = new Button(buttonsComposite, SWT.PUSH); hideButton.setFont(appFont); hideButton.setText(GHOST_BUTTON_E); hideButton.setToolTipText("Dsactiver ou Ractiver cette instruction"); hideButton.setImage(ResourceRegistry.ICON_GHOST_32x32); GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.END).applyTo(hideButton); hideButton.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); AbstractInstruction instr = (AbstractInstruction) o; if (instr.isRemovable()) { boolean b = !instr.isHidden(); instr.setHidden(b); refresh(); CollageFacet.this.instructionsViewer.update(instr, null); CollageFacet.this.instructionsViewer.getTable().notifyListeners(SWT.Selection, new Event()); } } }); buttonsComposite = new Composite(allButtonsComposite, SWT.NONE); GridLayoutFactory.swtDefaults().margins(0, 0).applyTo(buttonsComposite); GridDataFactory.fillDefaults().grab(true, false).applyTo(buttonsComposite); b = new Button(buttonsComposite, SWT.PUSH); b.setFont(appFont); b.setText("Ajout d'Image"); b.setToolTipText("Ajouter une image"); b.setImage(ResourceRegistry.ICON_ADD_IMAGE_32x32); GridDataFactory.fillDefaults().grab(true, false).applyTo(b); b.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { int index = -1; if (!CollageFacet.this.instructionsViewer.getSelection().isEmpty()) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); index = CollageFacet.this.collage.getInstructions().indexOf(o); index++; } List<File> files = Utils.openImagesSelectionDialog(getShell()); for (File f : files) { AddImageInstruction instr = new AddImageInstruction(); instr.setImgFile(f); if (index == -1) { CollageFacet.this.collage.getInstructions().add(instr); CollageFacet.this.instructionsViewer.add(instr); } else { CollageFacet.this.collage.getInstructions().add(index, instr); CollageFacet.this.instructionsViewer.insert(instr, index); } } refresh(); } }); b = new Button(buttonsComposite, SWT.PUSH); b.setFont(appFont); b.setText("Saut la Ligne"); b.setToolTipText("Passer la ligne"); b.setImage(ResourceRegistry.ICON_BREAK_LINE_32x32); GridDataFactory.fillDefaults().grab(true, false).applyTo(b); b.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { int index = -1; if (!CollageFacet.this.instructionsViewer.getSelection().isEmpty()) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); index = CollageFacet.this.collage.getInstructions().indexOf(o); index++; } BreakLineInstruction instr = new BreakLineInstruction(); if (index == -1) { CollageFacet.this.collage.getInstructions().add(instr); CollageFacet.this.instructionsViewer.add(instr); } else { CollageFacet.this.collage.getInstructions().add(index, instr); CollageFacet.this.instructionsViewer.insert(instr, index); } refresh(); } }); b = new Button(buttonsComposite, SWT.PUSH); b.setFont(appFont); b.setText("Dcalage"); b.setToolTipText("Rajouter un nouveau bloc"); b.setImage(ResourceRegistry.ICON_SHIFT_32x32); GridDataFactory.fillDefaults().grab(true, false).applyTo(b); b.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { int index = -1; if (!CollageFacet.this.instructionsViewer.getSelection().isEmpty()) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); index = CollageFacet.this.collage.getInstructions().indexOf(o); index++; } ShiftInstruction instr = new ShiftInstruction(); if (index == -1) { CollageFacet.this.collage.getInstructions().add(instr); CollageFacet.this.instructionsViewer.add(instr); } else { CollageFacet.this.collage.getInstructions().add(index, instr); CollageFacet.this.instructionsViewer.insert(instr, index); } refresh(); } }); // The right part final Composite rightPart = new Composite(this, SWT.NONE); GridLayoutFactory.swtDefaults().margins(0, 0).spacing(10, 5).equalWidth(false).applyTo(rightPart); GridDataFactory.fillDefaults().grab(true, true).span(2, 1).applyTo(rightPart); GridDataFactory.swtDefaults().span(3, 1).applyTo(new Label(rightPart, SWT.NONE)); this.previewCanvas = new ImageCanvas(rightPart, SWT.COLOR_WIDGET_BACKGROUND); this.previewCanvas.setShowGhostImage(false); GridDataFactory.fillDefaults().grab(true, true).indent(0, 10).applyTo(this.previewCanvas); this.previewCanvas.setToolTipText("Double-Cliquez pour lancer en Plein Ecran"); this.previewCanvas.addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { if (CollageFacet.this.previewImg != null) new StaticImageViewer().open(CollageFacet.this.previewImg); } }); this.dimensionsLabel = new Label(rightPart, SWT.NONE); this.dimensionsLabel.setFont(appFont); GridDataFactory.swtDefaults().grab(true, false).align(SWT.CENTER, SWT.BOTTOM).applyTo(this.dimensionsLabel); if (this.collage.getInstructions().size() > 1) { this.instructionsViewer.setInput(this.collage.getInstructions()); refresh(); } // Buttons selection this.instructionsViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent e) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); int index = CollageFacet.this.collage.getInstructions().indexOf(o); if (index == -1) { removeButton.setEnabled(false); upButton.setEnabled(false); downButton.setEnabled(false); hideButton.setEnabled(false); hideButton.setText(GHOST_BUTTON_E); hideButton.update(); } else { upButton.setEnabled(index > 0); downButton.setEnabled(index < CollageFacet.this.collage.getInstructions().size() - 1); removeButton.setEnabled(((AbstractInstruction) o).isRemovable()); hideButton.setEnabled(((AbstractInstruction) o).isRemovable()); hideButton.setText(((AbstractInstruction) o).isHidden() ? GHOST_BUTTON_D : GHOST_BUTTON_E); hideButton.update(); } updateOptions(o, optionsGroup); } }); this.instructionsViewer.getTable().notifyListeners(SWT.Selection, new Event()); // Add a rename action final IAction renameAction = new Action("Renommer l'image...") { @Override public void run() { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); if (!(o instanceof AddImageInstruction)) return; final File imgFile = ((AddImageInstruction) o).getImgFile(); if (Utils.openRenameDialog(imgFile, getShell())) CollageFacet.this.instructionsViewer.update(imgFile, null); } }; final MenuManager popupMenu = new MenuManager(); popupMenu.setRemoveAllWhenShown(true); popupMenu.addMenuListener(new IMenuListener() { @Override public void menuAboutToShow(IMenuManager mngr) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); if (o instanceof AddImageInstruction) mngr.add(renameAction); } }); Menu menu = popupMenu.createContextMenu(this.instructionsViewer.getTable()); this.instructionsViewer.getTable().setMenu(menu); // Add drag'n'drop support Transfer[] transfers = new Transfer[] { TextTransfer.getInstance() }; int ops = DND.DROP_COPY | DND.DROP_MOVE; this.instructionsViewer.addDragSupport(ops, transfers, new DragSourceAdapter() { @Override public void dragSetData(DragSourceEvent e) { if (TextTransfer.getInstance().isSupportedType(e.dataType)) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); Integer index = CollageFacet.this.collage.getInstructions().indexOf(o); if (index != -1) e.data = String.valueOf(index); } } @Override public void dragStart(DragSourceEvent e) { Object o = ((IStructuredSelection) CollageFacet.this.instructionsViewer.getSelection()) .getFirstElement(); e.doit = o instanceof AddImageInstruction || o instanceof BreakLineInstruction || o instanceof ShiftInstruction; } }); this.instructionsViewer.addDropSupport(ops, transfers, new ViewerDropAdapter(this.instructionsViewer) { @Override public boolean validateDrop(Object target, int op, TransferData type) { // Do not drop before the background or border instructions int index = CollageFacet.this.collage.getInstructions().indexOf(target); return index > 1 && TextTransfer.getInstance().isSupportedType(type); } @Override public boolean performDrop(Object data) { AbstractInstruction instr = (AbstractInstruction) getCurrentTarget(); int index = CollageFacet.this.collage.getInstructions().indexOf(instr); boolean result = false; int movedIndex = Integer.parseInt((String) getCurrentEvent().data); AbstractInstruction movedInstr = CollageFacet.this.collage.getInstructions().remove(movedIndex); if (movedInstr != null) { result = true; CollageFacet.this.collage.getInstructions().add(index, movedInstr); CollageFacet.this.instructionsViewer.refresh(); refresh(); } return result; } }); }
From source file:net.leboxondelex.daplomb.ui.viewers.FileViewer.java
License:Open Source License
/** * Constructor./*w w w. j av a2 s .c o m*/ * @param container * @param verticalIndent */ public FileViewer(final Composite container, int verticalIndent) { this.tableViewer = new TableViewer(container, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); GridData layoutData = new GridData(GridData.FILL_BOTH); layoutData.verticalIndent = verticalIndent; this.tableViewer.getTable().setLayoutData(layoutData); this.tableViewer.getTable().setHeaderVisible(true); // Editing support on double-click TableViewerEditor.create(this.tableViewer, new DoubleClickColumnViewerEditorActivationStrategy(this.tableViewer), ColumnViewerEditor.DEFAULT); // Columns new TableColumn(this.tableViewer.getTable(), SWT.CENTER).setText(""); //$NON-NLS-1$ TableViewerColumn col = new TableViewerColumn(this.tableViewer, SWT.LEFT); col.getColumn().setText(Messages.getString("FileViewer.2")); //$NON-NLS-1$ col.setEditingSupport(new FileNameEditingSupport(this.tableViewer)); col.getColumn().addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { if (FileViewer.this.sortByName) switchSortingDirection(); else setSortByName(true); } }); col = new TableViewerColumn(this.tableViewer, SWT.CENTER); col.getColumn().setText(Messages.getString("FileViewer.3")); //$NON-NLS-1$ col.getColumn().addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { if (!FileViewer.this.sortByName) switchSortingDirection(); else setSortByName(false); } }); // Define the layout of the table TableLayout tlayout = new TableLayout(); tlayout.addColumnData(new ColumnPixelData(25, true)); tlayout.addColumnData(new ColumnWeightData(55, 300, true)); tlayout.addColumnData(new ColumnWeightData(40, 100, true)); this.tableViewer.getTable().setLayout(tlayout); // Content provider this.tableViewer.setContentProvider(new ArrayContentProvider()); // Label provider this.tableViewer.setLabelProvider(new ITableLabelProvider() { @Override public void removeListener(ILabelProviderListener arg0) { // nothing } @Override public boolean isLabelProperty(Object arg0, String arg1) { return false; } @Override public void dispose() { // nothing } @Override public void addListener(ILabelProviderListener arg0) { // nothing } @Override public String getColumnText(Object element, int colmnIndex) { String result; if (colmnIndex == 1) result = ((File) element).getName(); else { long size = ((File) element).length(); result = Utils.formatFileSize(size) + Messages.getString("FileViewer.4"); //$NON-NLS-1$ } return result; } @Override public Image getColumnImage(Object element, int colmnIndex) { Image result = null; if (colmnIndex == 0 && element instanceof File) { String ext = StringUtils.getFileExtension((File) element); result = ResourceRegistry.findFileImage(ext); } return result; } }); // Sorter this.tableViewer.setSorter(new ViewerSorter() { @Override public int compare(Viewer viewer, Object e1, Object e2) { int result; boolean f1 = e1 instanceof File; boolean f2 = e2 instanceof File; if (!f1) result = -1; else if (!f2) result = 1; else { if (FileViewer.this.sortByName) { if (FileViewer.this.sortNameAscending) result = ((File) e1).getName().compareTo(((File) e2).getName()); else result = ((File) e2).getName().compareTo(((File) e1).getName()); } else { if (FileViewer.this.sortSizeAscending) result = (int) (((File) e1).length() - ((File) e2).length()); else result = (int) (((File) e2).length() - ((File) e1).length()); } } return result; } }); // Filter this.tableViewer.addFilter(new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { boolean shown = true; if (!StringUtils.isEmpty(FileViewer.this.filter)) shown = ((File) element).getName().toLowerCase().contains(FileViewer.this.filter); return shown; } }); // Pop-up menu final IAction renameAction = new Action(Messages.getString("FileViewer.5")) { //$NON-NLS-1$ @Override public void run() { Object o = ((IStructuredSelection) FileViewer.this.tableViewer.getSelection()).getFirstElement(); final File imgFile = (File) o; if (Utils.openRenameDialog(imgFile, container.getShell())) FileViewer.this.tableViewer.update(imgFile, null); } }; final IAction deleteAction = new Action(Messages.getString("FileViewer.12")) { //$NON-NLS-1$ @Override public void run() { boolean del = Utils.showQuestion(container.getShell(), Messages.getString("FileViewer.13"), //$NON-NLS-1$ Messages.getString("FileViewer.14")); //$NON-NLS-1$ Object o = ((IStructuredSelection) FileViewer.this.tableViewer.getSelection()).getFirstElement(); final File imgFile = (File) o; if (del && imgFile.exists() && !imgFile.delete()) { StringBuilder sb = new StringBuilder(); sb.append("Could not delete file "); //$NON-NLS-1$ sb.append(imgFile); LogUtils.log(sb.toString()); } } }; MenuManager popupMenu = new MenuManager(); popupMenu.add(renameAction); popupMenu.add(deleteAction); Menu menu = popupMenu.createContextMenu(this.tableViewer.getTable()); this.tableViewer.getTable().setMenu(menu); }
From source file:net.sourceforge.tagsea.core.ui.internal.waypoints.WaypointFilteringDialog.java
License:Open Source License
/** * @param page/*from w w w . ja v a2s . c om*/ */ private void createTableArea(Composite page) { Group area = new Group(page, SWT.FLAT); area.setText("Visible Types"); area.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); area.setLayout(new GridLayout(2, false)); typeViewer = CheckboxTableViewer.newCheckList(area, SWT.FLAT | SWT.BORDER); typeViewer.setContentProvider(new ArrayContentProvider()); typeViewer.setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { if (element instanceof AbstractWaypointDelegate) { return ((AbstractWaypointDelegate) element).getName(); } return ""; } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return true; } public void removeListener(ILabelProviderListener listener) { } }); typeViewer.setInput(TagSEAPlugin.getDefault().getWaypointDelegates()); typeViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { if (event.getSelection() instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection) event.getSelection(); if (ss.size() == 1) { selectedDelegate = (AbstractWaypointDelegate) ss.getFirstElement(); dirtyTypeSet.add(selectedDelegate.getType()); Control filterControl = filterControlMap.get(selectedDelegate.getType()); if (filterControl != null) { ((StackLayout) advancedArea.getLayout()).topControl = filterControl; } else { ((StackLayout) advancedArea.getLayout()).topControl = defaultControl; } } else { ((StackLayout) advancedArea.getLayout()).topControl = noSelectionControl; } } advancedArea.layout(); } }); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.horizontalSpan = 2; typeViewer.getControl().setLayoutData(data); Button selectAllButton = new Button(area, SWT.PUSH); selectAllButton.setText("Check All"); selectAllButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { typeViewer.setAllChecked(true); } }); data = new GridData(SWT.END, SWT.END, false, false); data.horizontalAlignment = SWT.END; selectAllButton.setLayoutData(data); Button selectNoneButton = new Button(area, SWT.PUSH); data = new GridData(SWT.END, SWT.END, false, false); data.horizontalAlignment = SWT.END; selectNoneButton.setLayoutData(data); selectNoneButton.setText("Check None"); selectNoneButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { typeViewer.setAllChecked(false); } }); initializeTable(); }
From source file:org.apache.directory.studio.apacheds.configuration.editor.PartitionDetailsPage.java
License:Apache License
/** * Creates the Context Entry Section.//from ww w. jav a2 s . com * * @param parent * the parent composite * @param toolkit * the toolkit to use */ private void createContextEntrySection(Composite parent, FormToolkit toolkit) { Section section = toolkit.createSection(parent, Section.DESCRIPTION | Section.TITLE_BAR); section.marginWidth = 10; section.setText("Context Entry"); //$NON-NLS-1$ section.setDescription("Set the attribute/value pairs for the Context Entry of the partition."); //$NON-NLS-1$ section.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); Composite client = toolkit.createComposite(section); toolkit.paintBordersFor(client); client.setLayout(new GridLayout(2, false)); section.setClient(client); // Auto Generate Context Entry Checkbox autoGenerateContextEntryCheckbox = toolkit.createButton(client, Messages.getString("PartitionDetailsPage.AutoGenerateContextEntryFromSuffixDn"), //$NON-NLS-1$ SWT.CHECK); autoGenerateContextEntryCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 3, 1)); // Context Entry Table Viewer Table contextEntryTable = toolkit.createTable(client, SWT.NONE); GridData gd = new GridData(SWT.FILL, SWT.NONE, true, false, 1, 3); gd.heightHint = 62; gd.widthHint = 50; contextEntryTable.setLayoutData(gd); TableColumn idColumn = new TableColumn(contextEntryTable, SWT.LEFT, 0); idColumn.setText(Messages.getString("PartitionDetailsPage.Attribute")); //$NON-NLS-1$ idColumn.setWidth(100); TableColumn valueColumn = new TableColumn(contextEntryTable, SWT.LEFT, 1); valueColumn.setText(Messages.getString("PartitionDetailsPage.Value")); //$NON-NLS-1$ valueColumn.setWidth(100); contextEntryTable.setHeaderVisible(true); contextEntryTableViewer = new TableViewer(contextEntryTable); contextEntryTableViewer.setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { List<AttributeValueObject> elements = new ArrayList<>(); Entry entry = (Entry) inputElement; Iterator<Attribute> attributes = entry.iterator(); while (attributes.hasNext()) { Attribute attribute = attributes.next(); Iterator<Value> values = attribute.iterator(); while (values.hasNext()) { Value value = values.next(); elements.add(new AttributeValueObject(attribute.getId(), value.getValue())); } } return elements.toArray(); } @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); contextEntryTableViewer.setLabelProvider(new ITableLabelProvider() { public String getColumnText(Object element, int columnIndex) { if (element != null) { switch (columnIndex) { case 0: return ((AttributeValueObject) element).getAttribute(); case 1: return ((AttributeValueObject) element).getValue(); default: break; } } return null; } public Image getColumnImage(Object element, int columnIndex) { return null; } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }); GridData buttonsGD = new GridData(SWT.FILL, SWT.BEGINNING, false, false); buttonsGD.widthHint = IDialogConstants.BUTTON_WIDTH; // Context Entry Add Button contextEntryAddButton = toolkit.createButton(client, Messages.getString("PartitionDetailsPage.Add"), //$NON-NLS-1$ SWT.PUSH); contextEntryAddButton.setLayoutData(buttonsGD); // Context Entry Edit Button contextEntryEditButton = toolkit.createButton(client, Messages.getString("PartitionDetailsPage.Edit"), //$NON-NLS-1$ SWT.PUSH); contextEntryEditButton.setEnabled(false); contextEntryEditButton.setLayoutData(buttonsGD); // Context Entry Delete Button contextEntryDeleteButton = toolkit.createButton(client, Messages.getString("PartitionDetailsPage.Delete"), //$NON-NLS-1$ SWT.PUSH); contextEntryDeleteButton.setEnabled(false); contextEntryDeleteButton.setLayoutData(buttonsGD); }
From source file:org.apache.forrest.eclipse.views.ForrestPropertiesView.java
License:Apache License
/** * Create the TableViewer //w ww . j a v a 2 s . c o m */ private void createTableViewer() { tableViewer = new TableViewer(table); tableViewer.setUseHashlookup(true); tableViewer.setColumnProperties(columnNames); // Create the cell editors CellEditor[] editors = new CellEditor[columnNames.length]; TextCellEditor textEditor = new TextCellEditor(table); ((Text) textEditor.getControl()).setTextLimit(60); editors[0] = textEditor; // Column 3 : Owner (Combo Box) editors[1] = textEditor; // Assign the cell editors to the viewer tableViewer.setCellEditors(editors); tableViewer.setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { Vector v = (Vector) inputElement; return v.toArray(); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // TODO Auto-generated method stub } }); tableViewer.setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { switch (columnIndex) { case 0: return ((EditableTableItem) element).name; case 1: return ((EditableTableItem) element).value; default: return "Invalid column: " + columnIndex; } } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void addListener(ILabelProviderListener listener) { } public void removeListener(ILabelProviderListener listener) { // TODO Auto-generated method stub } }); tableViewer.setCellModifier(new ICellModifier() { public boolean canModify(Object element, String property) { return true; } public Object getValue(Object element, String property) { if (property.equals("name")) return ((EditableTableItem) element).name; else return ((EditableTableItem) element).value; } public void modify(Object element, String property, Object value) { TableItem tableItem = (TableItem) element; EditableTableItem data = (EditableTableItem) tableItem.getData(); if (property.equals("name")) data.name = value.toString(); else data.value = value.toString(); if (editorElement != null) { System.out.println(editorElement.getNodeName()); } tableViewer.refresh(data); } }); tableViewer.setInput(getContent(editorElement)); }
From source file:org.apache.opennlp.corpus_server.caseditor.CorpusExplorerView.java
License:Apache License
@Override public void createPartControl(Composite parent) { explorerComposite = new Composite(parent, SWT.NONE); GridLayout explorerLayout = new GridLayout(); explorerLayout.numColumns = 2;/*www. j a v a 2s . c o m*/ explorerComposite.setLayout(explorerLayout); // URL field to connect to corpus server and corpus Label serverLabel = new Label(explorerComposite, SWT.NONE); serverLabel.setText("Server:"); serverUrl = new Text(explorerComposite, SWT.BORDER); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(serverUrl); final IPreferenceStore store = CorpusServerPlugin.getDefault().getPreferenceStore(); String lastUsedServer = store.getString(CorpusServerPreferenceConstants.LAST_USED_SERVER_ADDRESS); if (lastUsedServer.isEmpty()) { lastUsedServer = "http://localhost:8080/corpus-server/rest/corpora/wikinews"; } serverUrl.setText(lastUsedServer); serverUrl.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent event) { store.setValue(CorpusServerPreferenceConstants.LAST_USED_SERVER_ADDRESS, serverUrl.getText()); } }); // Search field to view content of corpus Label queryLabel = new Label(explorerComposite, SWT.NONE); queryLabel.setText("Query"); queryText = new Combo(explorerComposite, SWT.BORDER); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(queryText); String lastUsedSearchQueriesString = store .getString(CorpusServerPreferenceConstants.LAST_USED_SEARCH_QUERIES); // TODO: Set default via preference initializer if (lastUsedSearchQueriesString.isEmpty()) { lastUsedSearchQueriesString = "*:*"; } String lastUsedQueries[] = lastUsedSearchQueriesString.split(LUCENE_QUERY_DELIMITER); if (lastUsedQueries.length > 0) queryText.setText(lastUsedQueries[0]); for (int i = 0; i < lastUsedQueries.length; i++) { queryText.add(lastUsedQueries[i]); } queryText.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent event) { doSearch(); } @Override public void widgetDefaultSelected(SelectionEvent event) { } }); queryText.addKeyListener(new KeyListener() { @Override public void keyReleased(KeyEvent event) { if (event.character == SWT.CR) doSearch(); } @Override public void keyPressed(KeyEvent event) { } }); Button queryServer = new Button(explorerComposite, SWT.BORDER); queryServer.setText("Query"); GridDataFactory.swtDefaults().span(2, 1).align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(queryServer); queryServer.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent event) { doSearch(); } @Override public void widgetDefaultSelected(SelectionEvent event) { } }); book = new PageBook(explorerComposite, SWT.NONE); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).span(2, 1).applyTo(book); messageText = new Text(book, SWT.WRAP | SWT.READ_ONLY); messageText.setText("Enter the server address and a query to search a corpus on the Corpus Server."); // List with casIds in the corpus ... (might be later replaced with a title) // The table should later be virtual, and be able to scroll through very huge // lits of CASes ... might be connected to a repository with million of documents searchResultViewer = new TableViewer(book); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).span(2, 1) .applyTo(searchResultViewer.getControl()); searchResultViewer.setLabelProvider(new ITableLabelProvider() { @Override public void addListener(ILabelProviderListener arg0) { } @Override public void dispose() { } @Override public boolean isLabelProperty(Object arg0, String arg1) { return false; } @Override public void removeListener(ILabelProviderListener arg0) { } @Override public Image getColumnImage(Object arg0, int arg1) { return null; } @Override public String getColumnText(Object arg0, int arg1) { return arg0.toString(); } }); searchResultViewer.addOpenListener(new IOpenListener() { @Override public void open(OpenEvent event) { IWorkbenchPage page = CorpusExplorerView.this.getSite().getPage(); StructuredSelection selection = (StructuredSelection) searchResultViewer.getSelection(); if (selection.isEmpty()) return; String selectedCAS = (String) selection.getFirstElement(); // Hard code it for now, lets work on retrieval code first ... IEditorInput input = new CorpusServerCasEditorInput(serverUrl.getText(), selectedCAS); try { page.openEditor(input, "org.apache.uima.caseditor.editor"); } catch (PartInitException e) { e.printStackTrace(); } } }); book.showPage(messageText); // TODO: Context menu should have open action }
From source file:org.apache.opennlp.corpus_server.caseditor.TaskQueueView.java
License:Apache License
@Override public void createPartControl(Composite parent) { explorerComposite = new Composite(parent, SWT.NONE); GridLayout explorerLayout = new GridLayout(); explorerLayout.numColumns = 2;// www. j av a2s . c o m explorerComposite.setLayout(explorerLayout); // URL field to connect to corpus server and corpus Label serverLabel = new Label(explorerComposite, SWT.NONE); serverLabel.setText("Server:"); serverUrl = new Text(explorerComposite, SWT.BORDER); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(serverUrl); // TOOD: Should be stored in some way, or just done more sophisticated .. serverUrl.setText("http://localhost:8080/corpus-server/rest/queues/ObamaNerTask"); // Button for next cas (gets nexts and closes current one, // if not saved user is asked for it) Button nextDocument = new Button(explorerComposite, SWT.BORDER); nextDocument.setText("Next"); GridDataFactory.swtDefaults().span(2, 1).align(SWT.FILL, SWT.CENTER).grab(true, false) .applyTo(nextDocument); nextDocument.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent event) { Client c = Client.create(); WebResource queueWebResource = c.resource(serverUrl.getText()); ClientResponse response2 = queueWebResource.path("_nextTask").accept(MediaType.APPLICATION_JSON) .header("Content-Type", MediaType.TEXT_XML).get(ClientResponse.class); String casId = response2.getEntity(String.class); // How to get the corpus uri for the item returned from the queue ??? // Queue could always return full URI ... // we also need to corpus the cas id belongs too ... IWorkbenchPage page = TaskQueueView.this.getSite().getPage(); // TODO: Thats a short cut, we need to make this work properly ... IEditorInput input = new CorpusServerCasEditorInput( "http://localhost:8080/corpus-server/rest/corpora/wikinews", casId); try { page.openEditor(input, "org.apache.uima.caseditor.editor"); } catch (PartInitException e) { e.printStackTrace(); } // Add casId to historyViewer ... should be inserted at the top, not bottom. lastInputElements.add(input); historyViewer.insert(input, 0); if (lastInputElements.size() > 10) { IEditorInput tooOldInput = lastInputElements.remove(0); historyViewer.remove(tooOldInput); } } @Override public void widgetDefaultSelected(SelectionEvent event) { } }); // History view ... shows n last opened CASes ... historyViewer = new TableViewer(explorerComposite); historyViewer.setLabelProvider(new ITableLabelProvider() { @Override public void addListener(ILabelProviderListener arg0) { } @Override public void dispose() { } @Override public boolean isLabelProperty(Object arg0, String arg1) { return false; } @Override public void removeListener(ILabelProviderListener arg0) { } @Override public Image getColumnImage(Object arg0, int arg1) { return null; } @Override public String getColumnText(Object arg0, int arg1) { return ((IEditorInput) arg0).getName(); } }); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).span(2, 1) .applyTo(historyViewer.getTable()); historyViewer.addOpenListener(new IOpenListener() { @Override public void open(OpenEvent event) { StructuredSelection selection = (StructuredSelection) event.getSelection(); if (!selection.isEmpty()) { IWorkbenchPage page = TaskQueueView.this.getSite().getPage(); IEditorInput input = (IEditorInput) selection.getFirstElement(); try { page.openEditor(input, "org.apache.uima.caseditor.editor"); } catch (PartInitException e) { e.printStackTrace(); } } } }); }
From source file:org.ayound.js.debug.ui.views.EvalView.java
License:Apache License
@Override protected Viewer createViewer(Composite parent) { GridLayout layout = new GridLayout(2, false); layout.makeColumnsEqualWidth = true; parent.setLayout(layout);//from w w w . j a v a 2s. com Table table = new Table(parent, SWT.NONE); TableColumn column1 = new TableColumn(table, SWT.NONE); column1.setWidth(200); column1.setResizable(true); table.setHeaderVisible(false); table.setLayoutData(new GridData(GridData.FILL_BOTH)); TableViewer viewer = new TableViewer(table); getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(IDebugUIConstants.ID_DEBUG_VIEW, this); JsDebugCorePlugin.getDefault().addEvalListener(this); viewer.setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { if (inputElement instanceof List) { return ((List) inputElement).toArray(); } return null; } public void dispose() { // TODO Auto-generated method stub } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // TODO Auto-generated method stub } }); viewer.setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object element, int columnIndex) { // TODO Auto-generated method stub return null; } public String getColumnText(Object element, int columnIndex) { if (element instanceof ExpressionModel) { ExpressionModel model = (ExpressionModel) element; if (columnIndex == 0) { if (model.getError() != null) { return model.getExpression() + " = error : " + model.getError(); } else { return model.getExpression() + " = " + model.getResult(); } } } return null; } public void addListener(ILabelProviderListener listener) { // TODO Auto-generated method stub } public void dispose() { // TODO Auto-generated method stub } public boolean isLabelProperty(Object element, String property) { // TODO Auto-generated method stub return false; } public void removeListener(ILabelProviderListener listener) { // TODO Auto-generated method stub } }); viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); ExpressionModel model = (ExpressionModel) selection.getFirstElement(); if (model != null) { if (model.getError() != null) { valueText.setText(model.getError()); } else { if (model.getResult() != null) { valueText.setText(model.getResult()); } else { valueText.setText("null"); } } } else { valueText.setText(""); } } }); valueText = new Text(parent, SWT.MULTI); valueText.setLayoutData(new GridData(GridData.FILL_BOTH)); return viewer; }